Răsfoiți Sursa

* Don't share out all nodename/os/username/config entries to bots, only send THEIR records.

svn: 2123
Bryan Drewery 21 ani în urmă
părinte
comite
3697095bf9
4 a modificat fișierele cu 31 adăugiri și 18 ștergeri
  1. 1 1
      src/mod/console.mod/console.c
  2. 27 14
      src/userent.c
  3. 2 2
      src/userrec.c
  4. 1 1
      src/users.h

+ 1 - 1
src/mod/console.mod/console.c

@@ -83,7 +83,7 @@ console_kill(struct user_entry *e)
 }
 
 static bool
-console_write_userfile(FILE * f, struct userrec *u, struct user_entry *e)
+console_write_userfile(FILE * f, struct userrec *u, struct user_entry *e, int idx)
 {
   if (u->bot)
     return 1;

+ 27 - 14
src/userent.c

@@ -69,7 +69,17 @@ bool def_kill(struct user_entry *e)
   return 1;
 }
 
-bool def_write_userfile(FILE * f, struct userrec *u, struct user_entry *e)
+bool write_userfile_noleaf(FILE * f, struct userrec *u, struct user_entry *e, int idx)
+{
+  /* only write if saving local, or if sending to hub, or if sending to same user as entry */
+  if (idx == -1 || dcc[idx].hub || dcc[idx].user == u) {
+    if (lfprintf(f, "--%s %s\n", e->type->name, e->u.string) == EOF)
+      return 0;
+  }
+  return 1;
+}
+
+bool def_write_userfile(FILE * f, struct userrec *u, struct user_entry *e, int idx)
 {
   if (lfprintf(f, "--%s %s\n", e->type->name, e->u.string) == EOF)
     return 0;
@@ -320,12 +330,16 @@ static bool config_gotshare(struct userrec *u, struct user_entry *e, char *buf,
   return 1;
 }
 
-static bool config_write_userfile(FILE *f, struct userrec *u, struct user_entry *e)
+static bool config_write_userfile(FILE *f, struct userrec *u, struct user_entry *e, int idx)
 {
-  struct xtra_key *x = NULL;
+  /* only write if saving local, or if sending to hub, or if sending to same user as entry */
+  if (idx == -1 || dcc[idx].hub || dcc[idx].user == u) {
+    struct xtra_key *x = NULL;
 
-  for (x = (struct xtra_key *) e->u.extra; x; x = x->next)
-    lfprintf(f, "--CONFIG %s %s\n", x->key, x->data);
+    for (x = (struct xtra_key *) e->u.extra; x; x = x->next)
+      if (lfprintf(f, "--CONFIG %s %s\n", x->key, x->data) == EOF)
+        return 0;
+  }
   return 1;
 }
 
@@ -370,7 +384,7 @@ struct user_entry_type USERENTRY_USERNAME = {
  0,
  def_gotshare,
  def_unpack,
- def_write_userfile,
+ write_userfile_noleaf,
  def_kill,
  def_get,
  def_set,
@@ -382,7 +396,7 @@ struct user_entry_type USERENTRY_NODENAME = {
  0,
  def_gotshare,
  def_unpack,
- def_write_userfile,
+ write_userfile_noleaf,
  def_kill,
  def_get,
  def_set,
@@ -394,7 +408,7 @@ struct user_entry_type USERENTRY_OS = {
  0,
  def_gotshare,
  def_unpack,
- def_write_userfile,
+ write_userfile_noleaf,
  def_kill,
  def_get,
  def_set,
@@ -624,12 +638,11 @@ static bool laston_unpack(struct userrec *u, struct user_entry *e)
   return 1;
 }
 
-static bool laston_write_userfile(FILE * f, struct userrec *u, struct user_entry *e)
+static bool laston_write_userfile(FILE * f, struct userrec *u, struct user_entry *e, int idx)
 {
   struct laston_info *li = (struct laston_info *) e->u.extra;
 
-  if (lfprintf(f, "--LASTON %lu %s\n", li->laston,
-	      li->lastonplace ? li->lastonplace : "") == EOF)
+  if (lfprintf(f, "--LASTON %lu %s\n", li->laston, li->lastonplace ? li->lastonplace : "") == EOF)
     return 0;
   return 1;
 }
@@ -749,12 +762,12 @@ static bool botaddr_kill(struct user_entry *e)
   return 1;
 }
 
-static bool botaddr_write_userfile(FILE *f, struct userrec *u, struct user_entry *e)
+static bool botaddr_write_userfile(FILE *f, struct userrec *u, struct user_entry *e, int idx)
 {
   register struct bot_addr *bi = (struct bot_addr *) e->u.extra;
 
   if (lfprintf(f,  "--%s %s:%u/%u:%u:%s\n", e->type->name, bi->address,
-	      bi->telnet_port, bi->relay_port, bi->hublevel, bi->uplink) == EOF)
+  	      bi->telnet_port, bi->relay_port, bi->hublevel, bi->uplink) == EOF)
     return 0;
   return 1;
 }
@@ -838,7 +851,7 @@ struct user_entry_type USERENTRY_BOTADDR =
   "BOTADDR"
 };
 
-static bool hosts_write_userfile(FILE *f, struct userrec *u, struct user_entry *e)
+static bool hosts_write_userfile(FILE *f, struct userrec *u, struct user_entry *e, int idx)
 {
   struct list_type *h = NULL;
 

+ 2 - 2
src/userrec.c

@@ -305,7 +305,7 @@ bool write_user(struct userrec *u, FILE * f, int idx)
 	if (lfprintf(f, "--%s %s\n", ue->name, lt->extra) == EOF)
 	  return 0;
     } else {
-      if (conf.bot->hub && !ue->type->write_userfile(f, u, ue))
+      if (conf.bot->hub && !ue->type->write_userfile(f, u, ue, idx))
 	return 0;
     }
   }
@@ -417,7 +417,7 @@ int write_userfile(int idx)
   f = fopen(new_userfile, "a");
   putlog(LOG_DEBUG, "@", "Writing user entries.");
   for (struct userrec *u = userlist; u && ok; u = u->next)
-    ok = write_user(u, f, idx);
+    ok = write_user(u, f, -1);
   if (!ok || fflush(f)) {
     putlog(LOG_MISC, "*", "ERROR writing user file. (%s)", strerror(ferror(f)));
     fclose(f);

+ 1 - 1
src/users.h

@@ -34,7 +34,7 @@ struct user_entry_type {
   struct user_entry_type *next;
   bool (*got_share) (struct userrec *, struct user_entry *, char *, int);
   bool (*unpack) (struct userrec *, struct user_entry *);
-  bool (*write_userfile) (FILE *, struct userrec *, struct user_entry *);
+  bool (*write_userfile) (FILE *, struct userrec *, struct user_entry *, int);
   bool (*kill) (struct user_entry *);
   void *(*get) (struct userrec *, struct user_entry *);
   bool (*set) (struct userrec *, struct user_entry *, void *);