Просмотр исходного кода

* Don't send sysinfo/username/nodename until bot has loaded userfile and compared to old value.

svn: 2158
Bryan Drewery 21 лет назад
Родитель
Сommit
c7cf701f72
3 измененных файлов с 32 добавлено и 10 удалено
  1. 30 10
      src/dcc.c
  2. 1 0
      src/dcc.h
  3. 1 0
      src/mod/share.mod/share.c

+ 30 - 10
src/dcc.c

@@ -116,6 +116,36 @@ strip_telnet(int sock, char *buf, int *len)
   *o = *p;
 }
 
+void
+send_sysinfo()
+{
+  char *username = NULL, *sysname = NULL, *nodename = NULL;
+  struct utsname un;
+  bool gotun = 0;
+
+  if (uname(&un) < 0)
+    gotun = 0;
+  else 
+    gotun = 1;
+
+  username = (char *) get_user(&USERENTRY_USERNAME, conf.bot->u);
+  sysname = (char *) get_user(&USERENTRY_OS, conf.bot->u);
+  nodename = (char *) get_user(&USERENTRY_NODENAME, conf.bot->u);
+
+
+  if (egg_strcasecmp(sysname, gotun ? un.sysname : "*") ||
+      egg_strcasecmp(username, conf.username ? conf.username : "*") ||
+      egg_strcasecmp(nodename, gotun ? un.nodename : "*")) {
+      char buf[201] = "";
+      size_t len = 0;
+
+      len = simple_snprintf(buf, sizeof(buf), "si %s %s %s", 
+            conf.username ? conf.username : "*", gotun ? un.sysname : "*", gotun ? un.nodename : "*");
+
+      send_uplink(buf, len);
+  }
+}
+
 void
 send_timesync(int idx)
 {
@@ -137,9 +167,6 @@ send_timesync(int idx)
 static void
 greet_new_bot(int idx)
 {
-  char *sysname = NULL;
-  struct utsname un;
-
   dcc[idx].timeval = now;
   dcc[idx].u.bot->version[0] = 0;
   dcc[idx].u.bot->sysname[0] = 0;
@@ -157,15 +184,8 @@ greet_new_bot(int idx)
     dcc[idx].status |= STAT_LEAF;
   dcc[idx].status |= STAT_LINKING;
 
-  if (uname(&un) < 0)
-    sysname = "*";
-  else
-    sysname = un.sysname;
-
   dprintf(idx, "v 1001500 %d Wraith %s <%s> %d %li %s\n", HANDLEN, egg_version, "-", conf.bot->localhub, buildts, egg_version);
 
-  dprintf(idx, "si %s %s %s", conf.username ? conf.username : "*", un.sysname ? un.sysname : "*",
-          un.nodename ? un.nodename : "*");
   for (int i = 0; i < dcc_total; i++) {
     if (dcc[i].type && dcc[i].type == &DCC_FORK_BOT) {
       killsock(dcc[i].sock);

+ 1 - 0
src/dcc.h

@@ -230,5 +230,6 @@ extern struct dcc_table DCC_CHAT, DCC_BOT, DCC_BOT_NEW,
 void send_timesync(int);
 void failed_link(int);
 void dupwait_notify(const char *);
+void send_sysinfo();
 
 #endif /* !_DCC_H */

+ 1 - 0
src/mod/share.mod/share.c

@@ -1309,6 +1309,7 @@ finish_share(int idx)
   var_parse_my_botset();
   reaffirm_owners();            /* Make sure my owners are +a   */
   updatebot(-1, dcc[j].nick, '+', 0, 0, NULL);
+  send_sysinfo();
 
   if (reset_chans) {
     reset_chans = 0;