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

* Fixed bots not correctly recognizing changes in botset to empty vars after restart/update. (#150)

svn: 2353
Bryan Drewery 21 лет назад
Родитель
Сommit
3c82075d2d
4 измененных файлов с 55 добавлено и 40 удалено
  1. 1 0
      doc/UPDATES
  2. 3 1
      src/misc.c
  3. 48 39
      src/set.c
  4. 3 0
      src/set.h

+ 1 - 0
doc/UPDATES

@@ -28,6 +28,7 @@ Lines prefixed with '-' were disabled before release and are not finished, or ar
 * Fixed default binary name always becoming "wraith" instead of original binary name.
 * Cleaned up trace detection code.
 * Fixed hang on running binary on some FreeBSD systems.
+* Fixed bots not correctly recognizing changes in botset to empty vars after restart/update. (#150)
 
 1.2.6
 * (REVERTED FROM 1.2.3) Disabled all memory allocations after a segfault (Fixes CPU spinning)

+ 3 - 1
src/misc.c

@@ -601,8 +601,10 @@ readsocks(const char *fname)
 
   unlink(fname);
   fclose(f);
-  if (nick)
+  if (nick) {
     var_set_by_name(conf.bot->nick, "nick", nick);
+    var_set_userentry(conf.bot->nick, "nick", nick);
+  }
 
   if (servidx >= 0) {
     char nserv[50] = "";

+ 48 - 39
src/set.c

@@ -51,45 +51,45 @@ bool offensive_bans = 1;
 bool manop_warn = 1;
 
 static variable_t vars[] = {
- {"alias",		alias,			sizeof(alias),			VAR_STRING|VAR_LIST|VAR_NOLOC|VAR_PERM, NULL, NULL},
- {"auth-chan",		&auth_chan,		0,				VAR_INT|VAR_BOOL|VAR_NOLHUB, NULL, NULL},
- {"auth-key",		auth_key,		sizeof(auth_key),		VAR_STRING|VAR_PERM, NULL, NULL},
- {"auth-prefix",	auth_prefix,		sizeof(auth_prefix),		VAR_STRING|VAR_NOLHUB|VAR_PERM, NULL, NULL},
- {"auth-obscure",	&auth_obscure,		0,				VAR_INT|VAR_BOOL, NULL, NULL},
- {"dcc-autoaway",	&dcc_autoaway,		0,				VAR_INT|VAR_NOLOC, NULL, NULL},	
- {"bad-process",	&badprocess,		0,				VAR_INT|VAR_DETECTED, NULL, NULL},
- {"dccauth",		&dccauth,		0,				VAR_INT|VAR_BOOL, NULL, NULL},
- {"chanset",		glob_chanset,		sizeof(glob_chanset),		VAR_STRING|VAR_CHANSET|VAR_NOLHUB, NULL, NULL},
- {"cloak-script",	&cloak_script,		0,				VAR_INT|VAR_CLOAK|VAR_NOLHUB, NULL, NULL},
- {"close-threshold",	&close_threshold,	0,				VAR_RATE|VAR_NOLOC, NULL, NULL},
- {"fight-threshold",	&fight_threshold,	0,				VAR_INT|VAR_NOLOC, NULL, NULL},
- {"flood-msg",		&flood_msg,		0,				VAR_RATE|VAR_NOLHUB, NULL, NULL},
- {"flood-ctcp",		&flood_ctcp,		0,				VAR_RATE|VAR_NOLHUB, NULL, NULL},
- {"flood-g",		&flood_g,		0,				VAR_RATE|VAR_NOLHUB, NULL, NULL},
- {"fork-interval",	&fork_interval,		0,				VAR_INT, NULL, NULL},
- {"hijack",		&hijack,		0,				VAR_INT|VAR_DETECTED|VAR_PERM, NULL, NULL},
- {"in-bots",		&in_bots,		0,				VAR_INT|VAR_NOLOC, NULL, NULL},
- {"kill-threshold",	&kill_threshold,	0,				VAR_INT|VAR_NOLOC, NULL, NULL},
- {"lag-threshold",	&lag_threshold,		0,				VAR_INT|VAR_NOLHUB, NULL, NULL},
- {"login",		&login,			0,				VAR_INT|VAR_DETECTED, NULL, NULL},
- {"manop-warn",		&manop_warn,		0,				VAR_INT|VAR_BOOL|VAR_NOLHUB, NULL, NULL},
- {"mean-kicks",		&offensive_bans,	0,				VAR_INT|VAR_BOOL|VAR_NOLHUB, NULL, NULL},
- {"motd",		motd,			sizeof(motd),			VAR_STRING|VAR_HIDE|VAR_NOLOC, NULL, NULL},
- {"msg-ident",		msgident,		sizeof(msgident),		VAR_STRING|VAR_NOLHUB, NULL, NULL},
- {"msg-invite",		msginvite,		sizeof(msginvite),		VAR_STRING|VAR_NOLHUB, NULL, NULL},
- {"msg-op",		msgop,			sizeof(msgop),			VAR_STRING|VAR_NOLHUB, NULL, NULL},
- {"msg-pass",		msgpass,		sizeof(msgpass),		VAR_STRING|VAR_NOLHUB, NULL, NULL},
- {"nick",		origbotname,		sizeof(origbotname),		VAR_STRING|VAR_NOLHUB|VAR_NICK|VAR_NODEF, NULL, NULL},
- {"op-bots",		&op_bots,		0,				VAR_INT|VAR_NOLOC, NULL, NULL},
- {"op-requests",	&op_requests,		0,				VAR_RATE|VAR_NOLOC, NULL, NULL},
- {"process-list",	process_list,		sizeof(process_list),		VAR_STRING|VAR_LIST, NULL, NULL},
- {"promisc",		&promisc,		0,				VAR_INT|VAR_DETECTED, NULL, NULL},
- {"realname",		botrealname,		sizeof(botrealname),		VAR_STRING|VAR_NOLHUB, NULL, NULL},
- {"servers",		&serverlist,		0,				VAR_SERVERS|VAR_LIST|VAR_SHUFFLE|VAR_NOLHUB, NULL, NULL},
- {"servers6",		&serverlist,		0,				VAR_SERVERS|VAR_LIST|VAR_SHUFFLE|VAR_NOLHUB, NULL, NULL},
- {"server-port",	&default_port,		0,				VAR_INT|VAR_NOLHUB, NULL, NULL},
- {"trace",		&trace,			0,				VAR_INT|VAR_DETECTED, NULL, NULL},
- {NULL,			NULL,			0,				0, NULL, NULL}
+ VAR("alias", 		alias,			sizeof(alias),			VAR_STRING|VAR_LIST|VAR_NOLOC|VAR_PERM),
+ VAR("auth-chan",	&auth_chan,		0,				VAR_INT|VAR_BOOL|VAR_NOLHUB),
+ VAR("auth-key",	auth_key,		sizeof(auth_key),		VAR_STRING|VAR_PERM),
+ VAR("auth-prefix",	auth_prefix,		sizeof(auth_prefix),		VAR_STRING|VAR_NOLHUB|VAR_PERM),
+ VAR("auth-obscure",	&auth_obscure,		0,				VAR_INT|VAR_BOOL),
+ VAR("dcc-autoaway",	&dcc_autoaway,		0,				VAR_INT|VAR_NOLOC),	
+ VAR("bad-process",	&badprocess,		0,				VAR_INT|VAR_DETECTED),
+ VAR("dccauth",		&dccauth,		0,				VAR_INT|VAR_BOOL),
+ VAR("chanset",		glob_chanset,		sizeof(glob_chanset),		VAR_STRING|VAR_CHANSET|VAR_NOLHUB),
+ VAR("cloak-script",	&cloak_script,		0,				VAR_INT|VAR_CLOAK|VAR_NOLHUB),
+ VAR("close-threshold",	&close_threshold,	0,				VAR_RATE|VAR_NOLOC),
+ VAR("fight-threshold",	&fight_threshold,	0,				VAR_INT|VAR_NOLOC),
+ VAR("flood-msg",	&flood_msg,		0,				VAR_RATE|VAR_NOLHUB),
+ VAR("flood-ctcp",	&flood_ctcp,		0,				VAR_RATE|VAR_NOLHUB),
+ VAR("flood-g",		&flood_g,		0,				VAR_RATE|VAR_NOLHUB),
+ VAR("fork-interval",	&fork_interval,		0,				VAR_INT),
+ VAR("hijack",		&hijack,		0,				VAR_INT|VAR_DETECTED|VAR_PERM),
+ VAR("in-bots",		&in_bots,		0,				VAR_INT|VAR_NOLOC),
+ VAR("kill-threshold",	&kill_threshold,	0,				VAR_INT|VAR_NOLOC),
+ VAR("lag-threshold",	&lag_threshold,		0,				VAR_INT|VAR_NOLHUB),
+ VAR("login",		&login,			0,				VAR_INT|VAR_DETECTED),
+ VAR("manop-warn",	&manop_warn,		0,				VAR_INT|VAR_BOOL|VAR_NOLHUB),
+ VAR("mean-kicks",	&offensive_bans,	0,				VAR_INT|VAR_BOOL|VAR_NOLHUB),
+ VAR("motd",		motd,			sizeof(motd),			VAR_STRING|VAR_HIDE|VAR_NOLOC),
+ VAR("msg-ident",	msgident,		sizeof(msgident),		VAR_STRING|VAR_NOLHUB),
+ VAR("msg-invite",	msginvite,		sizeof(msginvite),		VAR_STRING|VAR_NOLHUB),
+ VAR("msg-op",		msgop,			sizeof(msgop),			VAR_STRING|VAR_NOLHUB),
+ VAR("msg-pass",	msgpass,		sizeof(msgpass),		VAR_STRING|VAR_NOLHUB),
+ VAR("nick",		origbotname,		sizeof(origbotname),		VAR_STRING|VAR_NOLHUB|VAR_NICK|VAR_NODEF),
+ VAR("op-bots",		&op_bots,		0,				VAR_INT|VAR_NOLOC),
+ VAR("op-requests",	&op_requests,		0,				VAR_RATE|VAR_NOLOC),
+ VAR("process-list",	process_list,		sizeof(process_list),		VAR_STRING|VAR_LIST),
+ VAR("promisc",		&promisc,		0,				VAR_INT|VAR_DETECTED),
+ VAR("realname",	botrealname,		sizeof(botrealname),		VAR_STRING|VAR_NOLHUB),
+ VAR("servers",		&serverlist,		0,				VAR_SERVERS|VAR_LIST|VAR_SHUFFLE|VAR_NOLHUB),
+ VAR("servers6",	&serverlist,		0,				VAR_SERVERS|VAR_LIST|VAR_SHUFFLE|VAR_NOLHUB),
+ VAR("server-port",	&default_port,		0,				VAR_INT|VAR_NOLHUB),
+ VAR("trace",		&trace,			0,				VAR_INT|VAR_DETECTED),
+ {NULL,			NULL,			0,				0, NULL, NULL, 0}
 };
 
 
@@ -499,8 +499,17 @@ void var_parse_my_botset()
     if (xk && xk->key) {
       putlog(LOG_DEBUG, "*", "var_parse_my_botset: %s: %s", vars[i].name, xk->data);
       var_set(&vars[i], conf.bot->nick, xk->data);
+      vars[i].flagged = 1;
     }
   }
+
+  for (i = 0; vars[i].name; i++) {
+    if (vars[i].ldata && !vars[i].flagged) {
+      sdprintf("var[%s] nulled but we missed it!, reseting.", vars[i].name);
+      var_set(&vars[i], conf.bot->nick, NULL);
+    }
+    vars[i].flagged = 0;
+  }
   set_noshare = 0;
 }
 

+ 3 - 0
src/set.h

@@ -35,6 +35,8 @@
 #define set_data(x) ((x).ldata ? (x).ldata : (x).gdata ? (x).gdata : 0)
 #define set_type(x) ((x).ldata ? VAR_LDATA : (x).gdata ? VAR_GDATA : 0)
 #define set_types(x) ((x).ldata ? "local" : (x).gdata ? "global" : "")
+#define VAR(name, mem, size, flags) {name, mem, size, flags, NULL, NULL, 0}
+
 
 typedef struct variable_b {
   const char *name;
@@ -43,6 +45,7 @@ typedef struct variable_b {
   int flags;
   char *ldata;
   char *gdata;
+  bool flagged;
 } variable_t;
 
 typedef struct rate_b {