瀏覽代碼

* Ported [2464] [2469] [2780] to 1.2.12
* Clearing a variable via 'set var -' now resets that variable to default settings. (implements #111)


svn: 3079

Bryan Drewery 20 年之前
父節點
當前提交
a7a7bd42f3
共有 7 個文件被更改,包括 201 次插入74 次删除
  1. 15 2
      Makefile.in
  2. 1 0
      doc/UPDATES
  3. 57 0
      misc/settings.txt
  4. 5 0
      src/Makefile.in
  5. 48 0
      src/makeset.c
  6. 69 71
      src/set.c
  7. 6 1
      src/set.h

+ 15 - 2
Makefile.in

@@ -75,7 +75,7 @@ default: wraith
 test:
 
 cleanutils:
-	@rm -f src/stringfix@EXEEXT@ src/sorthelp@EXEEXT@ src/makehelp@EXEEXT@
+	@rm -f src/stringfix@EXEEXT@ src/sorthelp@EXEEXT@ src/makehelp@EXEEXT@ src/makeres@EXEEXT@ src/makeset@EXEEXT@
 
 clean:  cleanutils
 	+@cd src && $(MAKE) clean
@@ -141,6 +141,16 @@ help: makehelp stringfix
 	cp -f src/help.h~ src/help.h; \
 	fi)
 
+set: makeset
+	@src/makeset@EXEEXT@ misc/settings.txt src/set_default.h~
+	@(if [ ! -f src/set_default.h ]; then \
+	touch src/set_default.h; \
+	fi)
+	@(if test "x`$(DIFF) -qurN src/set_default.h~ src/set_default.h`" != "x"; then \
+	cp -f src/set_default.h~ src/set_default.h; \
+	fi)
+
+
 res: makeres
 	@src/makeres@EXEEXT@ misc/responses.txt src/ 1
 	@(if [ ! -f src/response.h ]; then \
@@ -162,6 +172,9 @@ stringfix: src/stringfix.c config.h
 makeres: src/makeres.c
 	+@cd src && ${MAKE_UTILS} makeres
 
+makeset: src/makeset.c
+	+@cd src && ${MAKE_UTILS} makeset
+
 makehelp: src/makehelp.c
 	+@cd src && ${MAKE_UTILS} makehelp
 
@@ -173,7 +186,7 @@ utils: stringfix makehelp
 crypto:
 	+@cd src/crypto && ${MAKE_UTILS} crypto
 
-general: help res
+general: help res set
 
 check:
 

+ 1 - 0
doc/UPDATES

@@ -3,6 +3,7 @@ Numbers expressed as '#12' are references to a ticket/bug posting which can be v
 Lines prefixed with '-' were disabled before release and are not finished, or are planned changes.
 
 1.2.12 - http://wraith.shatow.net/milestone/1.2.12
+* Clearing a variable via 'set var -' now resets that variable to default settings. (implements #111)
 * Fix bug introduced from fixing #274
 
 1.2.11 - http://wraith.shatow.net/milestone/1.2.11

+ 57 - 0
misc/settings.txt

@@ -0,0 +1,57 @@
+:alias
+bc botcmd
+bl botcmd ?
++list set +
+-list set -
+list set list
+
+:servers
+irc.umich.edu
+irc.kagmir.ca
+irc.dataphone.se
+irc.easynews.com
+efnet.cs.hut.fi
+irc.umn.edu
+irc.blackened.com
+irc.homelien.no
+irc.blessed.net
+irc.he.net
+irc.inter.net.il
+irc.du.se
+irc.csbnet.se
+efnet.xs4all.nl
+irc.efnet.nl
+irc.banetele.no
+irc.daxnet.no
+irc.inet.tele.dk
+irc.dks.ca
+irc.scnet.net
+irc.arcti.ca
+irc.avalonworks.ca
+irc.foxlink.net
+irc2.choopa.net
+irc.dkom.at
+efnet.demon.co.uk
+irc.efnet.pl
+irc.nac.net
+irc.concentric.net
+irc.choopa.net
+irc.wh.verio.net
+irc.mindspring.com
+irc.desync.com
+irc.mzima.net
+irc.ptptech.com
+efnet.port80.se
+irc.pte.hu
+irc.efnet.fr
+
+:servers6
+efnet.port80.se
+irc.efnet.nl
+irc.ipv6.homelien.no
+efnet.ipv6.xs4all.nl
+irc.ipv6.inter.net.il
+irc.choopa.net
+irc.ptptech.com
+
+:end

+ 5 - 0
src/Makefile.in

@@ -75,6 +75,11 @@ makeres: makeres.c
 	@$(CXX) $(CXXFLAGS) -I$(top_srcdir) -I$(top_srcdir)/pack $(CPPFLAGS) makeres.c -o makeres
 	@$(STRIP) makeres@EXEEXT@
 
+makeset: makeset.c
+	@echo -e "Compiling: \033[1mmakeset\033[0m"
+	@$(CXX) $(CXXFLAGS) -I$(top_srcdir) -I$(top_srcdir)/pack $(CPPFLAGS) makeset.c -o makeset
+	@$(STRIP) makeset@EXEEXT@
+
 makehelp: makehelp.c
 	@echo -e "Compiling: \033[1mmakehelp\033[0m"
 	@$(CXX) $(CXXFLAGS) -I$(top_srcdir) -I$(top_srcdir)/pack $(CPPFLAGS) makehelp.c -o makehelp

+ 48 - 0
src/makeset.c

@@ -0,0 +1,48 @@
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <cctype>
+#include <algorithm>
+using namespace std;
+
+int main(int argc, char *argv[]) {
+  if (argc == 2)
+    return 1;
+
+  fstream file;
+  ofstream out;
+  file.open(argv[1]);
+  out.open(argv[2]);
+
+
+  char line[1024] = "";
+  string type;
+  char c;
+
+  while (file.getline(line, sizeof(line))) {
+    if (line[0] == ':') {
+      type = &line[1];
+      if (type == "end")
+        break;
+
+      transform(type.begin(), type.end(), type.begin(), (int(*)(int)) toupper);
+
+      type = "DEFAULT_" + type;
+      out << "#define " << type << " \"\\" << endl;
+    } else {
+      if (!type.length()) 
+        continue;
+
+      out << line;
+      c = file.peek();
+      if (strchr("\n:", c)) {
+        out << "\"\n" << endl;
+        type = "";
+      } else
+        out << ",\\" << endl;
+    }
+  }
+
+  file.close();
+  out.close();
+}

+ 69 - 71
src/set.c

@@ -18,88 +18,91 @@
 #include "userent.h"
 #include "rfc1459.h"
 
-int set_noshare = 0;
-int dcc_autoaway = 1800;
-bool auth_obscure = 0;
-bool auth_chan = 1;
-char alias[1024] = "bc botcmd,bl botcmd ?,+list set +,-list set -,list set list";
+#include "set_default.h"
+
+char alias[1024] = "";
+bool auth_chan;
 char auth_key[51] = "";
 char auth_prefix[2] = "";
+bool auth_obscure;
 #ifdef NOT_USED
 int badprocess = DET_IGNORE;
 char process_list[1024] = "";
 #endif
 bool dccauth = 0;
 char *def_chanset = "+enforcebans +dynamicbans +userbans -bitch -protectops +cycle -inactive +userexempts -dynamicexempts +userinvites -dynamicinvites -nodesynch -closed -take -voice -private -fastop";
+int dcc_autoaway;
 int cloak_script = 0;
-rate_t close_threshold = { 0, 0 };
+rate_t close_threshold;
 int fight_threshold;
+int set_noshare = 0;
 int fork_interval;
-int hijack = DET_DIE;
-int in_bots = 2;
+int hijack;
+int in_bots;
 int ison_time = 10;
 int kill_threshold;
-int lag_threshold = 15;
-int login = DET_WARN;
+int lag_threshold;
+int login;
 char motd[512] = "";
 char msgident[21] = "";
 char msginvite[21] = "";
 char msgop[21] = "";
 char msgpass[21] = "";
-int op_bots = 1;
-rate_t op_requests = { 2, 5 };
-int promisc = DET_WARN;
-int trace = DET_DIE;
-bool offensive_bans = 1;
-bool manop_warn = 1;
+int op_bots;
+rate_t op_requests;
+int promisc;
+int trace;
+bool offensive_bans;
+bool manop_warn;
 char homechan[51] = "";
 
 static variable_t vars[] = {
- 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("alias", 		alias,			VAR_STRING|VAR_LIST|VAR_NOLOC|VAR_PERM,		0, 0, DEFAULT_ALIAS),
+ VAR("auth-chan",	&auth_chan,		VAR_INT|VAR_BOOL|VAR_NOLHUB,			0, 1, "1"),
+ VAR("auth-key",	auth_key,		VAR_STRING|VAR_PERM,				0, 0, NULL),
+ VAR("auth-prefix",	auth_prefix,		VAR_STRING|VAR_NOLHUB|VAR_PERM,			0, 0, "+"),
+ VAR("auth-obscure",	&auth_obscure,		VAR_INT|VAR_BOOL,				0, 1, "0"),
+ VAR("dcc-autoaway",	&dcc_autoaway,		VAR_INT|VAR_NOLOC,				0, (5*60*60), "1800"),
 #ifdef NOT_USED
- VAR("bad-process",	&badprocess,		0,				VAR_INT|VAR_DETECTED),
+ VAR("bad-process",	&badprocess,		VAR_INT|VAR_DETECTED,				0, 0, "ignore"),
 #endif
- 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("homechan",	homechan,		sizeof(homechan),		VAR_STRING|VAR_NOLOC|VAR_HIDE),
- VAR("in-bots",		&in_bots,		0,				VAR_INT|VAR_NOLOC),
- VAR("notify-time",	&ison_time,		0, 				VAR_INT|VAR_NOLHUB),
- 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_NOGHUB),
- VAR("op-bots",		&op_bots,		0,				VAR_INT|VAR_NOLOC),
- VAR("op-requests",	&op_requests,		0,				VAR_RATE|VAR_NOLOC),
+ VAR("dccauth",		&dccauth,		VAR_INT|VAR_BOOL,				0, 1, "0"),
+ VAR("chanset",		glob_chanset,		VAR_STRING|VAR_CHANSET|VAR_NOLHUB,		0, 0, NULL),
+ VAR("cloak-script",	&cloak_script,		VAR_INT|VAR_CLOAK|VAR_NOLHUB,			0, 9, "0"),
+ VAR("close-threshold",	&close_threshold,	VAR_RATE|VAR_NOLOC,				0, 0, "0:0"),
+ VAR("fight-threshold",	&fight_threshold,	VAR_INT|VAR_NOLOC,				0, 0, "0"),
+ VAR("flood-msg",	&flood_msg,		VAR_RATE|VAR_NOLHUB,				0, 0, "5:60"),
+ VAR("flood-ctcp",	&flood_ctcp,		VAR_RATE|VAR_NOLHUB,				0, 0, "3:60"),
+ VAR("flood-g",		&flood_g,		VAR_RATE|VAR_NOLHUB,				0, 0, "6:2"),
+ VAR("fork-interval",	&fork_interval,		VAR_INT,					0, 0, "0"),
+ VAR("hijack",		&hijack,		VAR_INT|VAR_DETECTED|VAR_PERM,			0, 0, "die"),
+ VAR("homechan",	homechan,		VAR_STRING|VAR_NOLOC|VAR_HIDE,			0, 0, NULL),
+ VAR("in-bots",		&in_bots,		VAR_INT|VAR_NOLOC,				0, 0, "2"),
+ VAR("notify-time",	&ison_time,		VAR_INT|VAR_NOLHUB,				1, 30, "10"),
+ VAR("kill-threshold",	&kill_threshold,	VAR_INT|VAR_NOLOC,				0, 0, "0"),
+ VAR("lag-threshold",	&lag_threshold,		VAR_INT|VAR_NOLHUB,				0, 0, "15"),
+ VAR("login",		&login,			VAR_INT|VAR_DETECTED,				0, 0, "warn"),
+ VAR("manop-warn",	&manop_warn,		VAR_INT|VAR_BOOL|VAR_NOLHUB,			0, 0, "1"),
+ VAR("mean-kicks",	&offensive_bans,	VAR_INT|VAR_BOOL|VAR_NOLHUB,			0, 0, "1"),
+ VAR("motd",		motd,			VAR_STRING|VAR_HIDE|VAR_NOLOC,			0, 0, NULL),
+ VAR("msg-ident",	msgident,		VAR_STRING|VAR_NOLHUB,				0, 0, NULL),
+ VAR("msg-invite",	msginvite,		VAR_STRING|VAR_NOLHUB,				0, 0, NULL),
+ VAR("msg-op",		msgop,			VAR_STRING|VAR_NOLHUB,				0, 0, NULL),
+ VAR("msg-pass",	msgpass,		VAR_STRING|VAR_NOLHUB,				0, 0, NULL),
+ VAR("nick",		origbotname,		VAR_STRING|VAR_NOLHUB|VAR_NICK|VAR_NODEF|VAR_NOGHUB,	0, 0, NULL),
+ VAR("op-bots",		&op_bots,		VAR_INT|VAR_NOLOC,				0, 0, "1"),
+ VAR("op-requests",	&op_requests,		VAR_RATE|VAR_NOLOC,				0, 0, "2:5"),
 #ifdef NOT_USED
- VAR("process-list",	process_list,		sizeof(process_list),		VAR_STRING|VAR_LIST),
+ VAR("process-list",	process_list,		VAR_STRING|VAR_LIST,				0, 0, NULL),
 #endif
- VAR("promisc",		&promisc,		0,				VAR_INT|VAR_DETECTED),
- VAR("realname",	botrealname,		sizeof(botrealname),		VAR_STRING|VAR_NOLHUB),
- VAR("server-port",	&default_port,		0,				VAR_INT|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("trace",		&trace,			0,				VAR_INT|VAR_DETECTED),
- {NULL,			NULL,			0,				0, NULL, NULL, 0}
+ VAR("promisc",		&promisc,		VAR_INT|VAR_DETECTED,				0, 0, "warn"),
+ VAR("realname",	botrealname,		VAR_STRING|VAR_NOLHUB,				0, 0, "A deranged product of evil coders"),
+ VAR("server-port",	&default_port,		VAR_INT|VAR_NOLHUB,				0, 0, "6667"),
+ VAR("servers",		&serverlist,		VAR_SERVERS|VAR_LIST|VAR_SHUFFLE|VAR_NOLHUB|VAR_NOLDEF,	0, 0, DEFAULT_SERVERS),
+ VAR("servers6",	&serverlist,		VAR_SERVERS|VAR_LIST|VAR_SHUFFLE|VAR_NOLHUB|VAR_NOLDEF,	0, 0, DEFAULT_SERVERS6),
+ VAR("trace",		&trace,			VAR_INT|VAR_DETECTED,				0, 0, "die"),
+// {NULL, NULL, 0, 0, NULL, NULL, 0, NULL, 0, 0}
+ VAR(NULL,		0,			0,						0, 0, 0)
 };
 
 
@@ -305,13 +308,13 @@ const char *var_string(variable_t *var)
     if (var->flags & VAR_SHUFFLE)
       shuffle(data, ",");
 
-    if (!(var->flags & VAR_NODEF) && !var->gdata)
-      var->gdata = data;
-    else
-      free(data);
+    if ((var->flags & VAR_NODEF) && !var->gdata) {
+       free(data);
+       data = NULL;
+    }
   }
 
-  return var->gdata ? var->gdata : NULL;
+  return data;
 }
 
 static variable_t *var_get_var_by_name(const char *name)
@@ -386,7 +389,7 @@ sdprintf("var: %s (global): %s", var->name, data);
       if (var->flags & VAR_CHANSET)
         var->gdata = strdup(def_chanset);
       else 
-        var->gdata = NULL;
+        var->gdata = var->def ? strdup(var->def) : NULL;
     }
 
     if (domem && var->mem)
@@ -454,15 +457,10 @@ void init_vars()
 {
   int i = 0;
 
-  if (conf.bot->hub) {
-    var_set_by_name(NULL, "servers6", "efnet.port80.se,irc.efnet.nl,irc.ipv6.homelien.no,efnet.ipv6.xs4all.nl,irc.ipv6.inter.net.il,irc.choopa.net,irc.ptptech.com");
-    var_set_by_name(NULL, "servers", "irc.umich.edu,irc.kagmir.ca,irc.dataphone.se,irc.easynews.com,efnet.cs.hut.fi,irc.umn.edu,irc.blackened.com,irc.homelien.no,irc.blessed.net,irc.he.net,irc.inter.net.il,irc.du.se,irc.csbnet.se,efnet.xs4all.nl,irc.efnet.nl,irc.banetele.no,irc.daxnet.no,irc.inet.tele.dk,irc.dks.ca,irc.scnet.net,irc.arcti.ca,irc.avalonworks.ca,irc.foxlink.net,irc2.choopa.net,irc.dkom.at,efnet.demon.co.uk,irc.efnet.pl,irc.nac.net,irc.concentric.net,irc.choopa.net,irc.wh.verio.net,irc.mindspring.com,irc.desync.com,irc.mzima.net,irc.ptptech.com,efnet.port80.se,irc.pte.hu,irc.efnet.fr");
-  }
-
-  /* check mem for all vars and copy to our gdata */
+  /* initialize vars: defaults -> gdata */
   for (i = 0; vars[i].name; i++) {
-    if (!vars[i].gdata && !vars[i].ldata) 
-      var_string(&vars[i]);
+    if (!vars[i].gdata && !vars[i].ldata && !(!conf.bot->hub && (vars[i].flags & VAR_NOLDEF)))
+      var_set(&vars[i], NULL, NULL);		//empty out and set to defaults
   }
   var_set_by_name(NULL, "chanset", def_chanset);
   if (!strncmp(conf.bot->nick, "wtest", 5))

+ 6 - 1
src/set.h

@@ -28,6 +28,8 @@
 /* Don't set the var data from the mem as default (NICK) */
 #define VAR_NODEF	BIT14
 #define VAR_CHANSET	BIT15
+/* Don't set the default on startup of a leaf (servers) */
+#define VAR_NOLDEF	BIT16
 /* Don't set global on hub */
 #define VAR_NOGHUB	BIT17
 
@@ -37,7 +39,7 @@
 #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}
+#define VAR(_name, _mem, _flags, _a, _b, _def) {_name, _mem, sizeof _mem, _flags, NULL, NULL, 0, _def, _a, _b}
 
 
 typedef struct variable_b {
@@ -48,6 +50,9 @@ typedef struct variable_b {
   char *ldata;
   char *gdata;
   bool flagged;
+  const char *def;
+  int a;
+  int b;
 } variable_t;
 
 typedef struct rate_b {