Sfoglia il codice sorgente

Merge branch 'maint'

* maint:
  Fix -Wwritable-strings warnings
  Let hosts_set deal with commas

Conflicts:
	src/botmsg.cc
	src/botnet.h
	src/chanprog.cc
	src/chanprog.h
	src/cmds.h
	src/crypt.h
	src/misc.h
	src/tandem.h
Bryan Drewery 6 anni fa
parent
commit
03ccf25ae3

+ 6 - 6
src/adns.cc

@@ -165,8 +165,8 @@ const char *dns_ip = NULL;
 
 static int make_header(char *buf, int id);
 static int cut_host(const char *host, char *query);
-static int read_resolv(char *fname);
-static void read_hosts(char *fname);
+static int read_resolv(const char *fname);
+static void read_hosts(const char *fname);
 static int get_dns_idx();
 //static void dns_resend_queries();
 static int cache_find(const char *) __attribute__((pure));
@@ -842,7 +842,7 @@ static const char *dns_next_server()
 	return (servers[cur_server].ip);
 }
 
-static void add_dns_server(char *ip)
+static void add_dns_server(const char *ip)
 {
 	servers = (dns_server_t *) realloc(servers, (nservers+1) *
 	    sizeof(*servers));
@@ -851,7 +851,7 @@ static void add_dns_server(char *ip)
 	sdprintf("Added NS: %s", ip);
 }
 
-static void add_host(char *host, char *ip)
+static void add_host(const char *host, const char *ip)
 {
 	hosts = (dns_host_t *) realloc(hosts, (nhosts+1) * sizeof(*hosts));
 	hosts[nhosts].host = strdup(host);
@@ -930,7 +930,7 @@ static int read_thing(char *buf, char *ip)
 	return (skip + len);
 }
 
-static int read_resolv(char *fname)
+static int read_resolv(const char *fname)
 {
 	FILE *fp;
 	char buf[512], ip[512];
@@ -951,7 +951,7 @@ static int read_resolv(char *fname)
 	return count;
 }
 
-static void read_hosts(char *fname)
+static void read_hosts(const char *fname)
 {
 	FILE *fp;
 	char buf[512], ip[512], host[512];

+ 5 - 2
src/binary.cc

@@ -214,7 +214,9 @@ bin_checksum(const char *fname, int todo)
     munmap(map, size);
     close(fd);
 
-    return ".";
+    hash[0] = '.';
+    hash[1] = '\0';
+    return hash;
   } else if (todo & WRITE_CHECKSUM) {
     bd::AtomicFile* newbin = new bd::AtomicFile();
 
@@ -800,7 +802,8 @@ void conf_to_bin(conf_t *in, bool move, int die)
                            bot->net.ip6 ? bot->net.ip6 : "");
     }
 
-  simple_snprintf(settings.conf_hubs, sizeof(settings.conf_hubs), in->hubs.join(',').c_str());
+  strlcpy(settings.conf_hubs, in->hubs.join(',').c_str(),
+      sizeof(settings.conf_hubs));
 
   newbin = binname;
 //  tellconfig(&settings); 

+ 9 - 4
src/botcmd.cc

@@ -51,7 +51,8 @@
 
 static char TBUF[1024] = "";		/* Static buffer for goofy bot stuff */
 
-static void fake_alert(int idx, char *item, char *extra, char *what)
+static void fake_alert(int idx, const char *item, const char *extra,
+    const char *what)
 {
   static time_t lastfake;	/* The last time fake_alert was used */
 
@@ -873,7 +874,8 @@ static void bot_reject(int idx, char *par)
           u = get_user_by_handle(userlist, from);
           if (u) {
             if (!whois_access(u, dcc[idx].user)) {
-              add_note(from, conf.bot->nick, "Sorry, you cannot boot them.", -1, 0);
+              char note[] = "Sorry, you cannot boot them.";
+              add_note(from, conf.bot->nick, note, -1, 0);
               return;
             }
             do_boot(i, from, par);
@@ -1253,13 +1255,16 @@ const botcmd_t *search_botcmd_t(const botcmd_t *table, const char* keyString, si
   return (const botcmd_t*) bsearch(&key, table, elements, sizeof(botcmd_t), comp_botcmd_t);
 }
 
-void parse_botcmd(int idx, const char* code, const char* msg) {
+void parse_botcmd(int idx, const char* code, char* msg) {
   const botcmd_t *cmd = search_botcmd_t((const botcmd_t*)&C_bot, code, lengthof(C_bot) - 1);
 
   if (cmd) {
+    static char blank[] = "";
+    if (msg == NULL)
+      msg = blank;
     /* Found a match */
     if (have_cmd(NULL, cmd->type))
-      (cmd->func) (idx, (char*)msg);
+      (cmd->func) (idx, msg);
   }
 }
 

+ 1 - 1
src/botcmd.h

@@ -5,6 +5,6 @@ void bounce_simul(int, char *);
 void send_remote_simul(int, char *, char *, char *);
 void bot_share(int, char *);
 void init_botcmd(void);
-void parse_botcmd(int, const char*, const char*);
+void parse_botcmd(int, const char*, char*);
 
 #endif /* !_BOTCMD_H */

+ 36 - 22
src/botmsg.cc

@@ -69,7 +69,7 @@ void send_hubs_but(int idx, const char *msg, size_t len)
 
 /* Ditto for tandem bots
  */
-static void send_tand_but(int x, char *buf, size_t len)
+static void send_tand_but(int x, const char *buf, size_t len)
 {
   int i = 0;
 
@@ -80,7 +80,7 @@ static void send_tand_but(int x, char *buf, size_t len)
   }
 }
 
-void botnet_send_cmdpass(int idx, char *cmd, char *pass)
+void botnet_send_cmdpass(int idx, const char *cmd, const char *pass)
 {
   if (tands > 0) {
     char *buf = NULL;
@@ -94,7 +94,9 @@ void botnet_send_cmdpass(int idx, char *cmd, char *pass)
   }
 }
 
-int botnet_send_cmd(char * fbot, char * bot, char *fhnd, int fromidx, char * cmd) {
+int botnet_send_cmd(const char *fbot, const char *bot,
+    const char *fhnd, int fromidx, const char *cmd)
+{
   int i = nextbot(bot);
 
   if (i >= 0) {
@@ -110,7 +112,8 @@ int botnet_send_cmd(char * fbot, char * bot, char *fhnd, int fromidx, char * cmd
   return 0;
 }
 
-void botnet_send_cmd_broad(int idx, char * fbot, char *fhnd, int fromidx, char * cmd) {
+void botnet_send_cmd_broad(int idx, const char *fbot,
+    const char *fhnd, int fromidx, const char *cmd) {
   if (tands > 0) {
     size_t len = simple_snprintf(OBUF, sizeof OBUF, "rc * %s %s %i %s\n", fbot, fhnd, fromidx, cmd);
     send_tand_but(idx, OBUF, len);
@@ -123,7 +126,8 @@ void botnet_send_cmd_broad(int idx, char * fbot, char *fhnd, int fromidx, char *
   }
 }
 
-void botnet_send_cmdreply(char * fbot, char * bot, char * to, char * toidx, char * ln) {
+void botnet_send_cmdreply(const char *fbot, const char *bot, const char *to,
+    const char *toidx, const char *ln) {
   int i = nextbot(bot);
 
   if (i >= 0) {
@@ -144,7 +148,8 @@ void botnet_send_bye(const char *reason)
   }
 }
 
-void botnet_send_chan(int idx, char *botnick, char *user, int chan, char *data)
+void botnet_send_chan(int idx, const char *botnick, const char *user,
+    int chan, const char *data)
 {
   if ((tands > 0) && (chan < GLOBAL_CHANS)) {
     size_t len;
@@ -158,7 +163,8 @@ void botnet_send_chan(int idx, char *botnick, char *user, int chan, char *data)
   }
 }
 
-void botnet_send_act(int idx, char *botnick, char *user, int chan, char *data)
+void botnet_send_act(int idx, const char *botnick, const char *user, int chan,
+    const char *data)
 {
   if ((tands > 0) && (chan < GLOBAL_CHANS)) {
     size_t len;
@@ -192,7 +198,8 @@ void botnet_send_pong(int idx)
   tputs(dcc[idx].sock, "po\n", 3);
 }
 
-void botnet_send_priv (int idx, char *from, char *to, char *tobot, const char *format, ...)
+void botnet_send_priv (int idx, const char *from, const char *to,
+    const char *tobot, const char *format, ...)
 {
   size_t len;
   char tbuf[1024] = "";
@@ -210,28 +217,30 @@ void botnet_send_priv (int idx, char *from, char *to, char *tobot, const char *f
   tputs(dcc[idx].sock, OBUF, len);
 }
 
-void botnet_send_who(int idx, char *from, char *to, int chan)
+void botnet_send_who(int idx, const char *from, const char *to, int chan)
 {
   const size_t len = simple_snprintf2(OBUF, sizeof(OBUF), "w %s %s %D\n", from, to, chan);
 
   tputs(dcc[idx].sock, OBUF, len);
 }
 
-void botnet_send_unlink(int idx, char *who, char *via, char *bot, char *reason)
+void botnet_send_unlink(int idx, const char *who, const char *via,
+    const char *bot, const char *reason)
 {
   const size_t len = simple_snprintf(OBUF, sizeof(OBUF), "ul %s %s %s %s\n", who, via, bot, reason);
 
   tputs(dcc[idx].sock, OBUF, len);
 }
 
-void botnet_send_link(int idx, char *who, char *via, char *bot)
+void botnet_send_link(int idx, const char *who, const char *via,
+    const char *bot)
 {
   const size_t len = simple_snprintf(OBUF, sizeof(OBUF), "l %s %s %s\n", who, via, bot);
 
   tputs(dcc[idx].sock, OBUF, len);
 }
 
-void botnet_send_unlinked(int idx, char *bot, char *args)
+void botnet_send_unlinked(int idx, const char *bot, const char *args)
 {
   if (tands > 0) {
     const size_t len = simple_snprintf(OBUF, sizeof(OBUF), "un %s %s\n", bot, args ? args : "");
@@ -240,7 +249,9 @@ void botnet_send_unlinked(int idx, char *bot, char *args)
   }
 }
 
-void botnet_send_nlinked(int idx, char *bot, char *next, char flag, int vlocalhub, time_t vbuildts, char *vcommit, char *vversion, int fflags)
+void botnet_send_nlinked(int idx, const char *bot, const char *next,
+    const char flag, int vlocalhub, time_t vbuildts, const char *vcommit,
+    const char *vversion, int fflags)
 {
   if (tands > 0) {
     const size_t len = simple_snprintf(OBUF, sizeof(OBUF), "n %s %s %cD0gc %d %d %s %s %d\n", bot, next, flag,
@@ -249,14 +260,14 @@ void botnet_send_nlinked(int idx, char *bot, char *next, char flag, int vlocalhu
   }
 }
 
-void botnet_send_traced(int idx, char *bot, char *buf)
+void botnet_send_traced(int idx, const char *bot, const char *buf)
 {
   const size_t len = simple_snprintf(OBUF, sizeof(OBUF), "td %s %s\n", bot, buf);
 
   tputs(dcc[idx].sock, OBUF, len);
 }
 
-void botnet_send_trace(int idx, char *to, char *from, char *buf)
+void botnet_send_trace(int idx, const char *to, const char *from, const char *buf)
 {
   const size_t len = simple_snprintf(OBUF, sizeof(OBUF), "t %s %s %s:%s\n", to, from, buf, conf.bot->nick);
 
@@ -274,7 +285,8 @@ void botnet_send_update(int idx, tand_t * ptr)
   }
 }
 
-void botnet_send_reject(int idx, char *fromp, char *frombot, char *top, char *tobot, char *reason)
+void botnet_send_reject(int idx, const char *fromp, const char *frombot,
+    const char *top, const char *tobot, const char *reason)
 {
   size_t len;
   char to[NOTENAMELEN + 1] = "", from[NOTENAMELEN + 1] = "";
@@ -363,7 +375,8 @@ void botnet_send_var_broad(int idx, variable_t *var) {
   }
 }
 
-void botnet_send_idle(int idx, char *bot, int sock, int idle, char *away)
+void botnet_send_idle(int idx, const char *bot, int sock, int idle,
+    const char *away)
 {
   if (tands > 0) {
     const size_t len = simple_snprintf2(OBUF, sizeof(OBUF), "i %s %D %Ds%s\n", bot, sock, idle, away ? away : "");
@@ -372,7 +385,8 @@ void botnet_send_idle(int idx, char *bot, int sock, int idle, char *away)
   }
 }
 
-void botnet_send_away(int idx, char *bot, int sock, char *msg, int linking)
+void botnet_send_away(int idx, const char *bot, int sock,
+    const char *msg, int linking)
 {
   if (tands > 0) {
     const size_t len = simple_snprintf2(OBUF, sizeof(OBUF), "aw %s%s %D %s\n", ((idx >= 0) && linking) ? "!" : "", bot, sock, msg ? msg : "");
@@ -406,7 +420,7 @@ void botnet_send_join_party(int idx, int linking, int useridx)
   }
 }
 
-void botnet_send_part_idx(int useridx, char *reason)
+void botnet_send_part_idx(int useridx, const char *reason)
 {
   if (tands > 0) {
     const size_t len = simple_snprintf2(OBUF, sizeof(OBUF), "pt %s %s %D %s\n", conf.bot->nick,
@@ -416,7 +430,7 @@ void botnet_send_part_idx(int useridx, char *reason)
   }
 }
 
-void botnet_send_part_party(int idx, int partyidx, char *reason, int silent)
+void botnet_send_part_party(int idx, int partyidx, const char *reason, int silent)
 {
   if (tands > 0) {
     const size_t len = simple_snprintf2(OBUF, sizeof(OBUF), "pt %s%s %s %D %s\n",
@@ -427,7 +441,7 @@ void botnet_send_part_party(int idx, int partyidx, char *reason, int silent)
   }
 }
 
-void botnet_send_nkch(int useridx, char *oldnick)
+void botnet_send_nkch(int useridx, const char *oldnick)
 {
   if (tands > 0) {
     const size_t len = simple_snprintf2(OBUF, sizeof(OBUF), "nc %s %D %s\n", conf.bot->nick, dcc[useridx].sock, dcc[useridx].nick);
@@ -436,7 +450,7 @@ void botnet_send_nkch(int useridx, char *oldnick)
   }
 }
 
-void botnet_send_nkch_part(int butidx, int useridx, char *oldnick)
+void botnet_send_nkch_part(int butidx, int useridx, const char *oldnick)
 {
   if (tands > 0) {
     const size_t len = simple_snprintf2(OBUF, sizeof(OBUF), "nc %s %D %s\n", party[useridx].bot, party[useridx].sock, party[useridx].nick);

+ 3 - 3
src/botnet.cc

@@ -417,7 +417,7 @@ int nextbot(const char *who)
 
 /* Return name of the bot that is directly connected to bot X
  */
-char *lastbot(const char *who)
+const char *lastbot(const char *who)
 {
   tand_t *bot = findbot(who);
 
@@ -981,7 +981,7 @@ int botunlink(int idx, const char *nick, const char *reason)
          sometimes. While we still search for the bug, provide
          an easy way to clear out those `ghost'-bots.
 				       Fabian (2000-08-02)  */
-      char *ghost = "BUG!!: Found bot `%s' in internal bot list, but it\n"
+      const char *ghost = "BUG!!: Found bot `%s' in internal bot list, but it\n"
 		    "   shouldn't have been there! Removing.\n"
 		    "   This is a known bug we haven't fixed yet. If this\n"
 		    "   bot is the newest eggdrop version available and you\n"
@@ -1012,7 +1012,7 @@ static void botlink_real(int);
 
 /* Link to another bot
  */
-int botlink(char *linker, int idx, char *nick)
+int botlink(const char *linker, int idx, char *nick)
 {
   struct userrec *u = get_user_by_handle(userlist, nick);
 

+ 3 - 3
src/botnet.h

@@ -17,14 +17,14 @@ extern int		tands;
 
 #define lower_bot_linked(idx) do {} while (0)
 void answer_local_whom(int, int);
-char *lastbot(const char *) __attribute__((pure));
+const char *lastbot(const char *) __attribute__((pure));
 int nextbot(const char *) __attribute__((pure));
 int in_chain(const char *) __attribute__((pure));
 bool sortDownBots(bd::String botA, bd::String botB) __attribute__((pure));
 void tell_bots(int, int, const char *);
 void tell_bottree(int);
 void dump_links(int);
-int botlink(char *, int, char *);
+int botlink(const char *, int, char *);
 int botunlink(int, const char *, const char *);
 void addbot(char *, char *, char *, char, int, time_t, char *, char *, int);
 void updatebot(int, char *, char, int, time_t, char *, char *, int);
@@ -39,7 +39,7 @@ int partynick(char *, int, char *);
 bool partyidle(char *, char *);
 void partysetidle(char *, int, int);
 void partyaway(char *, int, char *);
-void botnet_send_cmdpass(int, char *, char *);
+void botnet_send_cmdpass(int, const char *, const char *);
 void zapfbot(int);
 void tandem_relay(int, char *, int);
 int getparty(const char *, int) __attribute__((pure));

+ 6 - 4
src/chanprog.cc

@@ -61,7 +61,7 @@
 
 bd::HashTable<RfcString, struct chanset_t *> chanset_by_dname;
 
-char *def_chanset = "+enforcebans +dynamicbans +userbans -bitch +cycle -inactive +userexempts -dynamicexempts +userinvites -dynamicinvites -nodesynch -closed -take -voice -private -fastop ban-type 3 protect-backup 1 groups { main } revenge react";
+const char *def_chanset = "+enforcebans +dynamicbans +userbans -bitch +cycle -inactive +userexempts -dynamicexempts +userinvites -dynamicinvites -nodesynch -closed -take -voice -private -fastop ban-type 3 protect-backup 1 groups { main } revenge react";
 struct chanset_t 	*chanset = NULL;	/* Channel list			*/
 struct chanset_t	*chanset_default = NULL;	/* Default channel list */
 char 			admin[121] = "";	/* Admin info			*/
@@ -117,7 +117,8 @@ struct chanset_t *findchan(const char *name)
  */
 struct userrec *check_chanlist(const char *host)
 {
-  char				*nick = NULL, *uhost = NULL, buf[UHOSTLEN] = "";
+  char *uhost = NULL, buf[UHOSTLEN] = "";
+  const char *nick = NULL;
   const memberlist		*m = NULL;
   const struct chanset_t	*chan = NULL;
 
@@ -192,7 +193,8 @@ void clear_chanlist_member(const RfcString& nick)
  */
 void set_chanlist(const char *host, struct userrec *rec)
 {
-  char				*nick = NULL, *uhost = NULL, buf[UHOSTLEN] = "";
+  char *uhost = NULL, buf[UHOSTLEN] = "";
+  const char *nick = NULL;
   memberlist		*m = NULL;
   struct chanset_t	*chan = NULL;
 
@@ -286,7 +288,7 @@ void tell_verbose_uptime(int idx)
  */
 void tell_verbose_status(int idx)
 {
-  char *vers_t = NULL, *uni_t = NULL;
+  const char *vers_t = NULL, *uni_t = NULL;
   int i;
   struct utsname un;
 

+ 2 - 1
src/chanprog.h

@@ -67,7 +67,8 @@ findchan_by_dname(const RfcString& name) {
 }
 
 extern struct chanset_t		*chanset, *chanset_default;
-extern char			admin[], origbotnick[HANDLEN + 1], origbotname[NICKLEN], jupenick[NICKLEN], botname[NICKLEN], *def_chanset;
+extern char			admin[], origbotnick[HANDLEN + 1], origbotname[NICKLEN], jupenick[NICKLEN], botname[NICKLEN];
+extern const char		*def_chanset;
 extern in_port_t			my_port;
 extern int			reset_chans;
 extern bool			cookies_disabled;

+ 30 - 18
src/cmds.cc

@@ -782,7 +782,8 @@ static void match(int idx, char *par, int isbot)
   }
 
   int start = 1, limit = 20;
-  char *s = newsplit(&par), *chname = NULL;
+  char *s = newsplit(&par);
+  const char *chname = NULL;
 
   if (strchr(CHANMETA, par[0]) != NULL)
     chname = newsplit(&par);
@@ -1557,7 +1558,7 @@ static void cmd_uplink(int idx, char *par)
     return;
   }
 
-  char *handle = NULL, *uplink = NULL;
+  const char *handle = NULL, *uplink = NULL;
   struct userrec *u1 = NULL;
 
   handle = newsplit(&par);
@@ -2835,7 +2836,7 @@ static void cmd_chat(int idx, char *par)
   console_dostore(idx);
 }
 
-int exec_str(int idx, char *cmd) {
+static int exec_str(int idx, const char *cmd) {
   char *out = NULL, *err = NULL;
 
   if (shell_exec(cmd, NULL, &out, &err)) {
@@ -3121,7 +3122,8 @@ static void cmd_strip(int idx, char *par)
     return;
   }
 
-  char *nick = newsplit(&par), *changes = NULL, *c = NULL, s[2] = "";
+  const char *nick = newsplit(&par), *changes = NULL, *c = NULL;
+  char s[2] = "";
   int dest = 0, i, pls, md, ok = 0;
 
   if ((nick[0] != '+') && (nick[0] != '-') &&dcc[idx].user && (dcc[idx].user->flags & USER_MASTER)) {
@@ -3526,9 +3528,7 @@ static void cmd_pls_ignore(int idx, char *par)
       }
     }
   }
-  if (!par[0])
-    par = "requested";
-  else if (strlen(par) > 65)
+  if (par[0] && strlen(par) > 65)
     par[65] = 0;
   if (strlen(who) > UHOSTMAX - 4)
     who[UHOSTMAX - 4] = 0;
@@ -3547,6 +3547,13 @@ static void cmd_pls_ignore(int idx, char *par)
   if (match_ignore(s))
     dprintf(idx, "That already matches an existing ignore.\n");
   else {
+    const char *reason;
+
+    if (!par[0])
+      reason = "requested";
+    else
+      reason = par;
+
     dprintf(idx, "Now ignoring: %s (%s)\n", s, par);
     addignore(s, dcc[idx].nick, (const char *) par, expire_time ? now + expire_time : 0L);
     putlog(LOG_CMDS, "*", "#%s# +ignore %s %s", dcc[idx].nick, s, par);
@@ -4028,7 +4035,7 @@ static void cmd_botserver(int idx, char * par) {
 }
 
 
-static void rcmd_cursrv(char * fbot, char * fhand, char * fidx) {
+static void rcmd_cursrv(const char * fbot, const char * fhand, const char * fidx) {
   if (!conf.bot->hub) {
     char cursrv[120] = "", tmp[30] = "";
 
@@ -4055,7 +4062,7 @@ static void cmd_timesync(int idx, char *par) {
   botnet_send_cmd_broad(-1, conf.bot->nick, dcc[idx].nick, idx, tmp);
 }
 
-static void rcmd_timesync(char *frombot, char *fromhand, char *fromidx, char *par) {
+static void rcmd_timesync(const char *frombot, const char *fromhand, const char *fromidx, const char *par) {
   char tmp[100] = "";
   long net = atol(par);
 
@@ -4082,7 +4089,7 @@ static void cmd_botversion(int idx, char * par) {
   botnet_send_cmd(conf.bot->nick, par, dcc[idx].nick, idx, "ver");
 }
 
-static void rcmd_ver(char * fbot, char * fhand, char * fidx) {
+static void rcmd_ver(const char * fbot, const char * fhand, const char * fidx) {
   char tmp[401] = "";
   struct utsname un;
 
@@ -4137,7 +4144,7 @@ static void cmd_botnick(int idx, char * par) {
   botnet_send_cmd(conf.bot->nick, par, dcc[idx].nick, idx, "curnick");
 }
 
-static void rcmd_curnick(char * fbot, char * fhand, char * fidx) {
+static void rcmd_curnick(const char * fbot, const char * fhand, const char * fidx) {
   if (!conf.bot->hub) {
     char tmp[301] = "";
 
@@ -4176,7 +4183,7 @@ static void cmd_botmsg(int idx, char * par) {
   botnet_send_cmd(conf.bot->nick, tbot, dcc[idx].nick, idx, tmp);
 }
 
-static void rcmd_msg(char * tobot, char * frombot, char * fromhand, char * fromidx, char * par) {
+static void rcmd_msg(const char * tobot, const char * frombot, const char * fromhand, const char * fromidx, char * par) {
   if (!conf.bot->hub) {
     char *nick = newsplit(&par);
 
@@ -4203,14 +4210,14 @@ static void cmd_netlag(int idx, char * par) {
   botnet_send_cmd_broad(-1, conf.bot->nick, dcc[idx].nick, idx, tmp);
 }
 
-static void rcmd_ping(char * frombot, char *fromhand, char * fromidx, char * par) {
+static void rcmd_ping(const char * frombot, const char *fromhand, const char * fromidx, const char * par) {
   char tmp[64] = "";
 
   simple_snprintf(tmp, sizeof tmp, "pong %s", par);
   botnet_send_cmd(conf.bot->nick, frombot, fromhand, atoi(fromidx), tmp);
 }
 
-static void rcmd_pong(char *frombot, char *fromhand, char *fromidx, char *par) {
+static void rcmd_pong(const char *frombot, const char *fromhand, const char *fromidx, char *par) {
   int i = atoi(fromidx);
 
   if ((i >= 0) && (i < dcc_total) && (dcc[i].type == &DCC_CHAT) && (!strcmp(dcc[i].nick, fromhand))) {
@@ -4382,7 +4389,7 @@ static void cmd_netcrontab(int idx, char * par)
   botnet_send_cmd_broad(-1, conf.bot->nick, dcc[idx].nick, idx, buf);
 }
 
-static void rcmd_exec(char * frombot, char * fromhand, char * fromidx, char * par) {
+static void rcmd_exec(const char * frombot, const char * fromhand, const char * fromidx, char * par) {
   char *cmd = NULL, scmd[512] = "", *out = NULL, *err = NULL;
 
   cmd = newsplit(&par);
@@ -4486,7 +4493,7 @@ static void cmd_botjump(int idx, char * par) {
   botnet_send_cmd(conf.bot->nick, tbot, dcc[idx].nick, idx, buf);
 }
 
-static void rcmd_jump(char * frombot, char * fromhand, char * fromidx, char * par) {
+static void rcmd_jump(const char * frombot, const char * fromhand, const char * fromidx, char * par) {
   if (!conf.bot->hub) {
     if (par[0]) {
       char *other = newsplit(&par), *p = NULL;
@@ -4513,8 +4520,11 @@ static void rcmd_jump(char * frombot, char * fromhand, char * fromidx, char * pa
 }
 
 /* "Remotable" commands */
-void gotremotecmd (char *forbot, char *frombot, char *fromhand, char *fromidx, char *cmd) 
+void gotremotecmd (const char *forbot, const char *frombot,
+    const char *fromhand, const char *fromidx, const char *cmd_in)
 {
+  char *cmd = strdup(cmd_in);
+  char * const cmd_p = cmd;
   char *par = cmd;
 
   cmd = newsplit(&par);
@@ -4544,9 +4554,11 @@ void gotremotecmd (char *forbot, char *frombot, char *fromhand, char *fromidx, c
   } else {
     botnet_send_cmdreply(conf.bot->nick, frombot, fromhand, fromidx, "Unrecognized remote command");
   }
+
+  free(cmd_p);
 }
     
-void gotremotereply (char *frombot, char *tohand, char *toidx, char *ln) {
+void gotremotereply (const char *frombot, const char *tohand, const char *toidx, const char *ln) {
   int idx = atoi(toidx);
 
   if ((idx >= 0) && (idx < dcc_total) && (dcc[idx].type == &DCC_CHAT) && (!strcmp(dcc[idx].nick, tohand))) {

+ 2 - 2
src/cmds.h

@@ -59,7 +59,7 @@ int check_dcc_attrs(struct userrec *, flag_t);
 int check_dcc_chanattrs(struct userrec *, char *, flag_t, flag_t);
 int stripmodes(const char *) __attribute__((pure));
 const char *stripmasktype(int);
-void gotremotecmd(char * forbot, char * frombot, char * fromhand, char * fromidx, char * cmd);
-void gotremotereply(char * frombot, char * tohand, char * toidx, char * ln);
+void gotremotecmd(const char * forbot, const char * frombot, const char * fromhand, const char * fromidx, const char * cmd);
+void gotremotereply(const char * frombot, const char * tohand, const char * toidx, const char * ln);
 
 #endif /* !_CMDS_H */

+ 2 - 2
src/crypt.cc

@@ -88,7 +88,7 @@ char *salted_sha1(const char *in, const char* saltin)
   return ret;
 }
 
-void Encrypt_File(char *infile, char *outfile)
+void Encrypt_File(const bd::String& infile, const bd::String &outfile)
 {
   const char salt1[] = SALT1;
   bd::Stream stream_in;
@@ -99,7 +99,7 @@ void Encrypt_File(char *infile, char *outfile)
   stream_out.writeFile(outfile);
 }
 
-void Decrypt_File(char *infile, char *outfile)
+void Decrypt_File(const bd::String &infile, const bd::String &outfile)
 {
   const char salt1[] = SALT1;
   bd::Stream stream_out;

+ 3 - 2
src/crypt.h

@@ -8,6 +8,7 @@
 #endif
 
 #include <sys/types.h>
+#include <bdlib/src/String.h>
 #include "libcrypto.h"
 #include "users.h"
 
@@ -29,8 +30,8 @@ char *encrypt_string(const char *, char *);
 char *decrypt_string(const char *, char *);
 char *salted_sha1(const char *, const char* = NULL);
 int salted_sha1cmp(const char *, const char*);
-void Encrypt_File(char *, char *);
-void Decrypt_File(char *, char *);
+void Encrypt_File(const bd::String&, const bd::String&);
+void Decrypt_File(const bd::String&, const bd::String&);
 void btoh(const unsigned char *md, size_t md_len, char *buf, const size_t buf_len);
 void do_crypt_console();
 

+ 1 - 2
src/dcc.cc

@@ -512,8 +512,7 @@ dcc_bot(int idx, char *code, int i)
   if (msg) {
     *msg = 0;
     msg++;
-  } else
-    msg = "";
+  }
 
   parse_botcmd(idx, code, msg);
 }

+ 1 - 1
src/dcc.h

@@ -13,7 +13,7 @@
 
 /* Public structure of all the dcc connections */
 struct dcc_table {
-  char *name;
+  const char *name;
   int flags;
   void (*eof) (int);
   void (*activity) (int, char *, int);

+ 2 - 2
src/log.cc

@@ -53,8 +53,8 @@ bool	debug_output = 1;      /* Disply output to server to LOG_SERVEROUT */
 
 typedef struct {
 	int flag;
-	char *type;
-	unsigned char c;
+	const char *type;
+	const unsigned char c;
 } logmode_mapping_t;
 
 static logmode_mapping_t logmode_mappings[] = {

+ 3 - 3
src/main.cc

@@ -271,9 +271,9 @@ static void checkpass()
 
 }
 
-static void got_ed(char *, char *, char*) __attribute__((noreturn));
+static void got_ed(const char *, const char *, const char*) __attribute__((noreturn));
 
-static void got_ed(char *which, char *in, char *out)
+static void got_ed(const char *which, const char *in, const char *out)
 {
   sdprintf(STR("got_Ed called: -%s i: %s o: %s"), which, in, out);
   if (!in || !out)
@@ -689,7 +689,7 @@ static void startup_checks(int hack) {
     free_conf_bots(conf.bots);			/* not a localhub, so no need to store all bot info */
 }
 
-static char *fake_md5 = "596a96cc7bf9108cd896f33c44aedc8a";
+static const char *fake_md5 = "596a96cc7bf9108cd896f33c44aedc8a";
 
 void console_init();
 void ctcp_init();

+ 6 - 4
src/misc.cc

@@ -137,7 +137,7 @@ void splitcn(char *first, char *rest, char divider, size_t max)
     strcpy(rest, p + 1);
 }
 
-char *splitnick(char **blah)
+const char *splitnick(char **blah)
 {
   char *p = NULL, *q = *blah;
 
@@ -185,8 +185,10 @@ int remove_crlf_r(char *line)
 
 char *newsplit(char **rest, char delim, bool trim)
 {
-  if (!rest)
-    return *rest = "";
+  if (!rest) {
+    static char end[] = "";
+    return *rest = end;
+  }
 
   char *o = *rest, *r = NULL;
 
@@ -1268,7 +1270,7 @@ void shuffleArray(char* array[], size_t n)
   }
 }
 
-void shuffle(char *string, char *delim, size_t str_len)
+void shuffle(char *string, const char *delim, size_t str_len)
 {
   char *array[501], *str = NULL, *work = NULL;
   size_t len = 0;

+ 2 - 2
src/misc.h

@@ -18,7 +18,7 @@
 void restart(int);
 int coloridx(int) __attribute__((pure));
 const char *color(int, int, int) __attribute__((pure));
-void shuffle(char *, char *, size_t);
+void shuffle(char *, const char *, size_t);
 void shuffleArray(char **, size_t);
 void showhelp(int, struct flag_record *, const char *);
 char *replace(const char *, const char *, const char *);
@@ -36,7 +36,7 @@ void splitcn(char *, char *, char, size_t);
 int remove_crlf(char *);
 int remove_crlf_r(char *);
 char *newsplit(char **, char delim = ' ', bool trim = 1);
-char *splitnick(char **);
+const char *splitnick(char **);
 void stridx(char *, char *, int);
 void daysago(time_t, time_t, char *, size_t);
 void days(time_t, time_t, char *, size_t);

+ 2 - 1
src/mod/channels.mod/chanmisc.cc

@@ -1075,7 +1075,8 @@ void clear_channel(struct chanset_t *chan, bool reset)
 
 /* Create new channel and parse commands.
  */
-int channel_add(char *result, const char *newname, char *options, bool isdefault)
+int channel_add(char *result, const char *newname, const char *options,
+    bool isdefault)
 {
   /* When loading userfile */
   if (newname && newname[0] && loading && !strcmp(newname, "default"))

+ 1 - 1
src/mod/channels.mod/channels.cc

@@ -179,7 +179,7 @@ static void got_cpart(char *botnick, char *code, char *par)
     write_userfile(-1);
 }
 
-void rcmd_chans(char *fbot, char *fhand, char *fidx) {
+void rcmd_chans(const char *fbot, const char *fhand, const char *fidx) {
   if (conf.bot->hub)
     return;
 

+ 2 - 2
src/mod/channels.mod/channels.h

@@ -50,7 +50,7 @@ int u_sticky_mask(const maskrec *, const char *) __attribute__((pure));
 int u_setsticky_mask(struct chanset_t *, maskrec *, char *, int, const char);
 int SplitList(char *, const char *, int *, const char ***);
 int channel_modify(char *, struct chanset_t *, int, char **, bool);
-int channel_add(char *, const char *, char *, bool = 0);
+int channel_add(char *, const char *, const char *, bool = 0);
 void clear_channel(struct chanset_t *, bool);
 int u_equals_mask(const maskrec *, const char *) __attribute__((pure));
 bool u_match_mask(const maskrec *, const char *) __attribute__((pure));
@@ -58,7 +58,7 @@ bool ismasked(const masklist *, const char *) __attribute__((pure));
 bool ismodeline(const masklist *, const char *) __attribute__((pure));
 void channels_report(int, int);
 void channels_writeuserfile(bd::Stream&, int = 0);
-void rcmd_chans(char *, char *, char *);
+void rcmd_chans(const char *, const char *, const char *);
 
 
 /* Macro's here because their functions were replaced by something more

+ 23 - 19
src/mod/channels.mod/cmdschan.cc

@@ -108,10 +108,13 @@ usage:
 	}
     }
   }
+  const char *reason = NULL;
   if (!par[0])
-    par = "requested";
-  else if (strlen(par) > MASKREASON_MAX)
+    reason = "requested";
+  else if (strlen(par) > MASKREASON_MAX) {
     par[MASKREASON_MAX] = 0;
+    reason = par;
+  }
   if (strlen(who) > UHOSTMAX - 4)
     who[UHOSTMAX - 4] = 0;
   /* Fix missing ! or @ BEFORE checking against myself */
@@ -139,15 +142,15 @@ usage:
     s[70] = 0;
   }
   if (chan) {
-    u_addmask(type, chan, s, dcc[idx].nick, par, expire_time ? now + expire_time : 0, 0);
-    if (par[0] == '*') {
+    u_addmask(type, chan, s, dcc[idx].nick, reason, expire_time ? now + expire_time : 0, 0);
+    if (reason[0] == '*') {
       sticky = 1;
-      par++;
-      putlog(LOG_CMDS, "*", "#%s# (%s) +%s %s %s (%s) (sticky)", dcc[idx].nick, dcc[idx].u.chat->con_chan, cmd, s, chan->dname, par);
-      dprintf(idx, "New %s sticky %s: %s (%s)\n", chan->dname, cmd, s, par);
+      reason++;
+      putlog(LOG_CMDS, "*", "#%s# (%s) +%s %s %s (%s) (sticky)", dcc[idx].nick, dcc[idx].u.chat->con_chan, cmd, s, chan->dname, reason);
+      dprintf(idx, "New %s sticky %s: %s (%s)\n", chan->dname, cmd, s, reason);
     } else {
-      putlog(LOG_CMDS, "*", "#%s# (%s) +%s %s %s (%s)", dcc[idx].nick, dcc[idx].u.chat->con_chan, cmd, s, chan->dname, par);
-      dprintf(idx, "New %s %s: %s (%s)\n", chan->dname, cmd, s, par);
+      putlog(LOG_CMDS, "*", "#%s# (%s) +%s %s %s (%s)", dcc[idx].nick, dcc[idx].u.chat->con_chan, cmd, s, chan->dname, reason);
+      dprintf(idx, "New %s %s: %s (%s)\n", chan->dname, cmd, s, reason);
     }
     if (!conf.bot->hub) {
       if (type == 'e' || type == 'I')
@@ -159,15 +162,15 @@ usage:
     } else
       write_userfile(idx);
   } else {
-    u_addmask(type, NULL, s, dcc[idx].nick, par, expire_time ? now + expire_time : 0, 0);
-    if (par[0] == '*') {
+    u_addmask(type, NULL, s, dcc[idx].nick, reason, expire_time ? now + expire_time : 0, 0);
+    if (reason[0] == '*') {
       sticky = 1;
-      par++;
-      putlog(LOG_CMDS, "*", "#%s# (GLOBAL) +%s %s (%s) (sticky)", dcc[idx].nick, cmd, s, par);
-      dprintf(idx, "New sticky %s: %s (%s)\n", cmd, s, par);
+      reason++;
+      putlog(LOG_CMDS, "*", "#%s# (GLOBAL) +%s %s (%s) (sticky)", dcc[idx].nick, cmd, s, reason);
+      dprintf(idx, "New sticky %s: %s (%s)\n", cmd, s, reason);
     } else {
-      putlog(LOG_CMDS, "*", "#%s# (GLOBAL) +%s %s (%s)", dcc[idx].nick, cmd, s, par);
-      dprintf(idx, "New %s: %s (%s)\n", cmd, s, par);
+      putlog(LOG_CMDS, "*", "#%s# (GLOBAL) +%s %s (%s)", dcc[idx].nick, cmd, s, reason);
+      dprintf(idx, "New %s: %s (%s)\n", cmd, s, reason);
     }
     if (!conf.bot->hub) {
       for (chan = chanset; chan != NULL; chan = chan->next) {
@@ -344,10 +347,10 @@ static void cmd_masks(const char type, int idx, char *par)
 
   if (!strcasecmp(par, "all")) {
     putlog(LOG_CMDS, "*", "#%s# %ss all", dcc[idx].nick, str_type);
-    tell_masks(type, idx, 1, "");
+    tell_masks(type, idx, 1, NULL);
   } else if (!strcasecmp(par, "global")) {
     putlog(LOG_CMDS, "*", "#%s# %ss global", dcc[idx].nick, str_type);
-    tell_masks(type, idx, 1, "", 1);
+    tell_masks(type, idx, 1, NULL, 1);
   } else {
     putlog(LOG_CMDS, "*", "#%s# %ss %s", dcc[idx].nick, str_type, par);
     tell_masks(type, idx, 0, par);
@@ -681,7 +684,8 @@ static void cmd_stick_yn(int idx, char *par, int yn)
 {
   int i = 0, j;
   struct chanset_t *chan = NULL;
-  char *stick_type = NULL, s[UHOSTLEN] = "", chname[81] = "", type = 0, *str_type = NULL;
+  char s[UHOSTLEN] = "", chname[81] = "", type = 0;
+  const char *stick_type = NULL, *str_type = NULL;
   maskrec *channel_list = NULL;
 
   stick_type = newsplit(&par);

+ 9 - 7
src/mod/channels.mod/userchan.cc

@@ -463,7 +463,7 @@ static void tell_masks(const char type, int idx, bool show_inact, char *match, b
   maskrec *mr = NULL;
 
   /* Was a channel given? */
-  if (match[0]) {
+  if (match && match[0]) {
     chname = newsplit(&match);
     if (chname[0] && (strchr(CHANMETA, chname[0]))) {
       chan = findchan_by_dname(chname);
@@ -501,7 +501,7 @@ static void tell_masks(const char type, int idx, bool show_inact, char *match, b
     dprintf(idx, "Global %ss:\n", str_type);
 
   for (mr = global_masks; mr; mr = mr->next) {
-    if (match[0]) {
+    if (match && match[0]) {
       if ((wild_match(match, mr->mask)) ||
 	  (wild_match(match, mr->desc)) ||
 	  (wild_match(match, mr->user)))
@@ -519,7 +519,7 @@ static void tell_masks(const char type, int idx, bool show_inact, char *match, b
     else
       dprintf(idx, "Channel %ss for %s:  (* = not placed by bot)\n", str_type, chan->dname);
     for (mr = chan_masks; mr; mr = mr->next) {
-      if (match[0]) {
+      if (match && match[0]) {
 	if ((wild_match(match, mr->mask)) ||
 	    (wild_match(match, mr->desc)) ||
 	    (wild_match(match, mr->user)))
@@ -532,7 +532,8 @@ static void tell_masks(const char type, int idx, bool show_inact, char *match, b
       masklist *ml = NULL;
       masklist *channel_list = (type == 'b' ? chan->channel.ban : type == 'e' ? chan->channel.exempt : chan->channel.invite);
 
-      char s[UHOSTLEN] = "", *s1 = NULL, *s2 = NULL, fill[256] = "";
+      char s[UHOSTLEN] = "", *s2 = NULL, fill[256] = "";
+      const char *s1;
       int min, sec;
 
       for (ml = channel_list; ml && ml->mask[0]; ml = ml->next) {    
@@ -551,7 +552,7 @@ static void tell_masks(const char type, int idx, bool show_inact, char *match, b
 	    simple_snprintf(s, sizeof(s), " (active %02d:%02d)", min, sec);
 	    strlcat(fill, s, sizeof(fill));
 	  }
-	  if ((!match[0]) || (wild_match(match, ml->mask)))
+	  if (!match || !match[0] || wild_match(match, ml->mask))
 	    dprintf(idx, "* [%3d] %s\n", k, fill);
 	  k++;
 	}
@@ -567,7 +568,7 @@ static void tell_masks(const char type, int idx, bool show_inact, char *match, b
 
   if (k == 1)
     dprintf(idx, "(There are no %ss, permanent or otherwise.)\n", str_type);
-  if ((!show_inact) && (!match[0]))
+  if ((!show_inact) && !(match && match[0]))
     dprintf(idx, "Use '%ss all' to see the total list.\n", str_type);
 }
 
@@ -926,7 +927,8 @@ void channels_writeuserfile(bd::Stream& stream, int old)
 bool expired_mask(struct chanset_t *chan, char *who)
 {
   memberlist *m = NULL, *m2 = NULL;
-  char buf[UHOSTLEN] = "", *snick = NULL, *sfrom = NULL;
+  char buf[UHOSTLEN] = "", *sfrom = NULL;
+  const char *snick = NULL;
   struct userrec *u = NULL;
 
   strlcpy(buf, who, sizeof(buf));

+ 23 - 13
src/mod/irc.mod/chan.cc

@@ -94,7 +94,8 @@ static void resolv_member_callback(int id, void *client_data, const char *host,
 }
 
 
-void resolve_to_member(struct chanset_t *chan, char *nick, char *host)
+void resolve_to_member(struct chanset_t *chan, const char *nick,
+    const char *host)
 {
   resolv_member *r = (resolv_member *) calloc(1, sizeof(resolv_member));
 
@@ -254,7 +255,7 @@ static void print_memberlist(memberlist *toprint)
 
 /* Returns a pointer to a new channel member structure.
  */
-static memberlist *newmember(struct chanset_t *chan, char *nick)
+static memberlist *newmember(struct chanset_t *chan, const char *nick)
 {
   memberlist *x = chan->channel.member, 
              *lx = NULL, 
@@ -318,7 +319,7 @@ static bool member_getuser(memberlist* m, bool act_on_lookup) {
 
 /* Always pass the channel dname (display name) to this function <cybah>
  */
-static void update_idle(char *chname, char *nick)
+static void update_idle(const char *chname, const char *nick)
 {
   struct chanset_t *chan = findchan_by_dname(chname);
 
@@ -1769,7 +1770,8 @@ static int got710(char *from, char *msg)
 {
   char *chname = NULL;
   struct chanset_t *chan = NULL;
-  char buf[UHOSTLEN] = "", *uhost = buf, *nick;
+  char buf[UHOSTLEN] = "", *uhost = buf;
+  const char *nick = NULL;
 
   chname = newsplit(&msg);
   if (!strcmp(chname, "*")) {
@@ -2562,7 +2564,7 @@ static int got478(char *from, char *msg)
  */
 static int gotinvite(char *from, char *msg)
 {
-  char *nick = NULL;
+  const char *nick = NULL;
   struct chanset_t *chan = NULL;
   bool flood = 0;
 
@@ -2609,7 +2611,8 @@ static void set_topic(struct chanset_t *chan, char *k)
  */
 static int gottopic(char *from, char *msg)
 {
-  char *chname = newsplit(&msg), *nick = NULL;
+  char *chname = newsplit(&msg);
+  const char *nick = NULL;
   struct chanset_t *chan = NULL;
 
   fixcolon(msg);
@@ -2708,7 +2711,8 @@ static int gotjoin(char *from, char *chname)
     chan = findchan_by_dname(chname);
   }
 
-  char *nick = NULL, buf[UHOSTLEN] = "", *uhost = buf;
+  const char *nick = NULL;
+  char buf[UHOSTLEN] = "", *uhost = buf;
 
   strlcpy(uhost, from, sizeof(buf));
   nick = splitnick(&uhost);
@@ -2934,7 +2938,8 @@ static int gotjoin(char *from, char *chname)
  */
 static int gotpart(char *from, char *msg)
 {
-  char *nick = NULL, *chname = NULL;
+  const char *nick = NULL;
+  char *chname = NULL;
   struct chanset_t *chan = NULL;
   char buf[UHOSTLEN] = "", *uhost = buf;
 
@@ -3006,7 +3011,8 @@ static int gotkick(char *from, char *origmsg)
     return 0; /* rejoin if kicked before getting needed info <Wcc[08/08/02]> */
   }
   if (channel_active(chan)) {
-    char *whodid = NULL, buf[UHOSTLEN] = "", *uhost = buf;
+    const char *whodid = NULL;
+    char buf[UHOSTLEN] = "", *uhost = buf;
     memberlist *m = NULL, *mv = NULL;
     struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };
 
@@ -3075,7 +3081,8 @@ static int gotkick(char *from, char *origmsg)
  */
 static int gotnick(char *from, char *msg)
 {
-  char *nick = NULL, s1[UHOSTLEN] = "", buf[UHOSTLEN] = "", *uhost = buf;
+  const char *nick = NULL;
+  char s1[UHOSTLEN] = "", buf[UHOSTLEN] = "", *uhost = buf;
   memberlist *m = NULL, *mm = NULL;
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };
 
@@ -3182,7 +3189,8 @@ void check_should_cycle(struct chanset_t *chan)
  */
 static int gotquit(char *from, char *msg)
 {
-  char *nick = NULL, *p = NULL;
+  const char *nick = NULL;
+  char *p = NULL;
   bool split = 0;
   memberlist *m = NULL;
   char from2[NICKMAX + UHOSTMAX + 1] = "";
@@ -3282,7 +3290,8 @@ static int gotmsg(char *from, char *msg)
     return 0;			/* Private msg to an unknown channel?? */
 
 
-  char buf[UHOSTLEN] = "", *nick = NULL, buf2[512] = "", *uhost = buf, *p = NULL, *p1 = NULL, *code = NULL, *ctcp = NULL;
+  char buf[UHOSTLEN] = "", buf2[512] = "", *uhost = buf, *p = NULL, *p1 = NULL, *code = NULL, *ctcp = NULL;
+  const char *nick = NULL;
   int ctcp_count = 0;
   struct userrec *u = NULL;
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };
@@ -3437,7 +3446,8 @@ static int gotnotice(char *from, char *msg)
   if (!chan)
     return 0;			/* Notice to an unknown channel?? */
 
-  char *nick = NULL, buf2[512] = "", *p = NULL, *p1 = NULL, buf[512] = "", *uhost = buf;
+  char buf2[512] = "", *p = NULL, *p1 = NULL, buf[512] = "", *uhost = buf;
+  const char *nick = NULL;
   char *ctcp = NULL, *code = NULL;
   struct userrec *u = NULL;
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };

+ 13 - 15
src/mod/irc.mod/cmdsirc.cc

@@ -32,7 +32,7 @@ using std::swap;
 
 /* Do we have any flags that will allow us ops on a channel?
  */
-static struct chanset_t *get_channel(int idx, char *chname, bool check_console = 1, bool* all = NULL)
+static struct chanset_t *get_channel(int idx, const char *chname, bool check_console = 1, bool* all = NULL)
 {
   struct chanset_t *chan = NULL;
 
@@ -82,9 +82,9 @@ char *getnick(const char *handle, struct chanset_t *chan)
   for (memberlist *m = chan->channel.member; m && m->nick[0]; m = m->next) {
     member_getuser(m);
     if (m->user && !strcasecmp(m->user->handle, handle))
-      return m->nick;
+      return m->nick[0] ? m->nick : NULL;
   }
-  return "";
+  return NULL;
 }
 
 static void cmd_act(int idx, char *par)
@@ -237,6 +237,7 @@ static void cmd_kickban(int idx, char *par)
   putlog(LOG_CMDS, "*", "#%s# (%s) kickban %s", dcc[idx].nick, all ? "*" : chan->dname, par);
 
   char *nick = newsplit(&par), bantype = 0;
+  const char *reason = par[0] ? par : "requested";
 
   if ((nick[0] == '@') || (nick[0] == '-')) {
     bantype = nick[0];
@@ -328,11 +329,9 @@ static void cmd_kickban(int idx, char *par)
     }
     if (bantype == '@' || bantype == '-')
       do_mask(chan, chan->channel.ban, s1, 'b');
-    if (!par[0])
-      par = "requested";
-    dprintf(DP_MODE, "KICK %s %s :%s%s\n", chan->name, m->nick, bankickprefix, par);
+    dprintf(DP_MODE, "KICK %s %s :%s%s\n", chan->name, m->nick, bankickprefix, reason);
     m->flags |= SENTKICK;
-    u_addmask('b', chan, s1, dcc[idx].nick, par, now + (60 * chan->ban_time), 0);
+    u_addmask('b', chan, s1, dcc[idx].nick, reason, now + (60 * chan->ban_time), 0);
     dprintf(idx, "Kick-banned %s on %s.\n", nick, chan->dname);
     next:;
     if (!all)
@@ -359,7 +358,7 @@ static void cmd_voice(int idx, char *par)
     chan = chanset;
   putlog(LOG_CMDS, "*", "#%s# (%s) voice %s", dcc[idx].nick, all ? "*" : chan->dname , nick);
   while (chan) {
-    if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))[0]) {
+    if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))) {
       if (all) goto next;
       dprintf(idx, "Usage: voice <nick> [channel|*]\n");
       return;
@@ -423,7 +422,7 @@ static void cmd_devoice(int idx, char *par)
     chan = chanset;
   putlog(LOG_CMDS, "*", "#%s# (%s) devoice %s", dcc[idx].nick, all ? "*" : chan->dname, nick);
   while (chan) {
-  if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))[0]) {
+  if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))) {
     if (all) goto next;
     dprintf(idx, "Usage: devoice <nick> [channel|*]\n");
     return;
@@ -495,7 +494,7 @@ static void cmd_op(int idx, char *par)
 
   while (chan) {
   get_user_flagrec(dcc[idx].user, &user, chan->dname);
-  if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))[0]) {
+  if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))) {
     if (all) goto next;
     dprintf(idx, "Usage: op <nick> [channel|*]\n");
     return;
@@ -602,7 +601,7 @@ static void mass_mode(const char* chname, const char* mode, char *par)
   }
 }
 
-void mass_request(char *botnick, char *code, char *par)
+void mass_request(const char *botnick, const char *code, char *par)
 {
   char* mode = newsplit(&par);
 
@@ -986,7 +985,7 @@ static void cmd_deop(int idx, char *par)
 
   while (chan) {
     get_user_flagrec(dcc[idx].user, &user, chan->dname);
-    if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))[0]) {
+    if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))) {
       if (all) goto next;  
       dprintf(idx, "Usage: deop <nick> [channel|*]\n");
       return;
@@ -1072,9 +1071,8 @@ static void cmd_kick(int idx, char *par)
   putlog(LOG_CMDS, "*", "#%s# (%s) kick %s", dcc[idx].nick, all ? "*" : chan->dname, par);
 
   char *nick = newsplit(&par);
+  const char *reason = par[0] ? par : "requested";
 
-  if (!par[0])
-    par = "requested";
   if (match_my_nick(nick)) {
     dprintf(idx, "I'm not going to kick myself.\n");
     return;
@@ -1134,7 +1132,7 @@ static void cmd_kick(int idx, char *par)
       dprintf(idx, "%s is another channel bot!\n", nick);
       return;
     }
-    dprintf(DP_SERVER, "KICK %s %s :%s%s\n", chan->name, m->nick, kickprefix, par);
+    dprintf(DP_SERVER, "KICK %s %s :%s%s\n", chan->name, m->nick, kickprefix, reason);
     m->flags |= SENTKICK;
     dprintf(idx, "Kicked %s on %s.\n", nick, chan->dname);
     next:;

+ 5 - 4
src/mod/irc.mod/irc.cc

@@ -392,7 +392,8 @@ static void cache_debug(void)
 }
 #endif /* CACHE */
 
-static void cache_invite(struct chanset_t *chan, char *nick, char *host, char *handle, bool op, bool bot)
+static void cache_invite(struct chanset_t *chan, const char *nick,
+    const char *host, const char *handle, bool op, bool bot)
 {
 #ifdef CACHE
   cache_t *cache = NULL;
@@ -1122,7 +1123,7 @@ request_in(struct chanset_t *chan)
 /* Set the key.
  */
 void
-my_setkey(struct chanset_t *chan, char *k)
+my_setkey(struct chanset_t *chan, const char *k)
 {
   free(chan->channel.key);
   chan->channel.key = k ? strdup(k) : (char *) calloc(1, 1);
@@ -1132,7 +1133,7 @@ my_setkey(struct chanset_t *chan, char *k)
  * m should be chan->channel.(exempt|invite|ban)
  */
 static bool
-new_mask(masklist *m, char *s, char *who)
+new_mask(masklist *m, const char *s, const char *who)
 {
   for (; m && m->mask[0] && rfc_casecmp(m->mask, s); m = m->next) ;
   if (m->mask[0])
@@ -1151,7 +1152,7 @@ new_mask(masklist *m, char *s, char *who)
 /* Removes a nick from the channel member list (returns 1 if successful)
  */
 static bool
-killmember(struct chanset_t *chan, char *nick, bool cacheMember)
+killmember(struct chanset_t *chan, const char *nick, bool cacheMember)
 {
   memberlist *x = NULL, *old = NULL;
 

+ 5 - 5
src/mod/irc.mod/irc.h

@@ -65,7 +65,7 @@ static cache_t *cache_new(char *);
 static void cache_del(char *, cache_t *);
 static void cache_debug(void);
 #endif /* CACHE */
-static void cache_invite(struct chanset_t *, char *, char *, char *, bool, bool);
+static void cache_invite(struct chanset_t *, const char *, const char *, const char *, bool, bool);
 
 //static char *makecookie(const char *, const memberlist*, const memberlist*, const memberlist* = NULL, const memberlist* = NULL);
 void makecookie(char*, size_t, const char *, const memberlist*, const memberlist*, const memberlist* = NULL, const memberlist* = NULL);
@@ -90,10 +90,10 @@ static bool do_op(memberlist *, struct chanset_t *, bool, bool);
 static void request_op(struct chanset_t *);
 static void request_in(struct chanset_t *);
 static bool detect_chan_flood(memberlist *m, const char* from, struct chanset_t *chan, flood_t which, const char *msg = NULL);
-static bool new_mask(masklist *, char *, char *);
+static bool new_mask(masklist *, const char *, const char *);
 static void do_closed_kick(struct chanset_t *, memberlist *);
 static char *quickban(struct chanset_t *, const char *);
-static bool killmember(struct chanset_t *chan, char *nick, bool cacheMember = true);
+static bool killmember(struct chanset_t *chan, const char *nick, bool cacheMember = true);
 static void member_update_from_cache(struct chanset_t* chan, memberlist *m);
 static void check_lonely_channel(struct chanset_t *chan);
 static int gotmode(char *, char *);
@@ -103,7 +103,7 @@ static void send_chan_who(int queue, struct chanset_t* chan, bool chain = 0);
 #define newban(chan, mask, who)         new_mask((chan)->channel.ban, mask, who)
 #define newexempt(chan, mask, who)      new_mask((chan)->channel.exempt, mask, who)
 #define newinvite(chan, mask, who)      new_mask((chan)->channel.invite, mask, who)
-void resolve_to_member(struct chanset_t *chan, char *nick, char *host);
+void resolve_to_member(struct chanset_t *chan, const char *nick, const char *host);
 
 typedef struct resolvstruct resolv_member;
 void resolve_to_rbl(struct chanset_t *chan, const char *host, struct resolvstruct *r = NULL);
@@ -114,7 +114,7 @@ void set_devoice(struct chanset_t* chan, memberlist* m);
 
 #endif /* MAKING_IRC */
 
-void my_setkey(struct chanset_t *, char *);
+void my_setkey(struct chanset_t *, const char *);
 void force_join_chan(struct chanset_t* chan, int idx = DP_MODE);
 void join_chan(struct chanset_t* chan, int idx = DP_MODE);
 

+ 1 - 1
src/mod/irc.mod/mode.cc

@@ -1046,7 +1046,7 @@ gotmode(char *from, char *msg)
       size_t z = strlen(msg);
       struct userrec *u = NULL;
       memberlist *m = NULL;
-      char *nick = NULL;
+      const char *nick = NULL;
 
       if (!strchr(from, '!'))
         strlcpy(isserver, from, sizeof(isserver));

+ 4 - 2
src/mod/server.mod/server.cc

@@ -502,8 +502,10 @@ static void calc_penalty(char * msg, size_t len)
 
 char *splitnicks(char **rest)
 {
-  if (!rest)
-    return *rest = "";
+  if (!rest) {
+    static char end[] = "";
+    return *rest = end;
+  }
 
   char *o = *rest, *r = NULL;
 

+ 3 - 3
src/mod/server.mod/server.h

@@ -67,8 +67,8 @@ extern struct dcc_table SERVER_SOCKET;
 extern rate_t		flood_msg, flood_ctcp, flood_callerid;
 extern bd::HashTable<bd::String, fish_data_t*> FishKeys;
 
-int check_bind_ctcpr(char *, char *, struct userrec *, char *, char *, char *, bind_table_t *);
-void nicks_available(char* buf, char delim = 0, bool buf_contains_available = 1);
+int check_bind_ctcpr(const char *, const char *, struct userrec *, const char *, const char *, const char *, bind_table_t *);
+void nicks_available(const char* buf, char delim = 0, bool buf_contains_available = 1);
 void release_nick(const char* = NULL);
 
 #define check_bind_ctcp(a, b, c, d, e, f) check_bind_ctcpr(a, b, c, d, e, f, BT_ctcp)
@@ -82,7 +82,7 @@ void server_die();
 void add_server(char *);
 void clearq(struct server_list *);
 void nuke_server(const char *);
-bool match_my_nick(char *);
+bool match_my_nick(const char *);
 void rehash_server(const char *, const char *);
 void rehash_monitor_list();
 void replay_cache(int, bd::Stream*);

+ 26 - 14
src/mod/server.mod/servmsg.cc

@@ -133,7 +133,8 @@ static int gotfake433(char *nick)
  * msg: proc-name <nick> <user@host> <handle> <args...>
  */
 
-static void check_bind_msg(const char *cmd, char *nick, char *uhost, struct userrec *u, char *args)
+static void check_bind_msg(const char *cmd, const char *nick,
+    const char *uhost, struct userrec *u, const char *args)
 {
   struct flag_record fr = {FR_GLOBAL | FR_CHAN | FR_ANYWH, 0, 0, 0 };
   int x;
@@ -227,8 +228,8 @@ static int check_bind_raw(char *from, char *code, char *msg)
 }
 
 
-int check_bind_ctcpr(char *nick, char *uhost, struct userrec *u,
-                           char *dest, char *keyword, char *args,
+int check_bind_ctcpr(const char *nick, const char *uhost, struct userrec *u,
+                           const char *dest, const char *keyword, const char *args,
                            bind_table_t *table)
 {
   struct flag_record fr = {FR_GLOBAL | FR_CHAN | FR_ANYWH, 0, 0, 0 };
@@ -237,7 +238,7 @@ int check_bind_ctcpr(char *nick, char *uhost, struct userrec *u,
 }
 
 
-bool match_my_nick(char *nick)
+bool match_my_nick(const char *nick)
 {
   return (!rfc_ncasecmp(nick, botname, nick_len));
 }
@@ -523,7 +524,8 @@ void unset_callerid(int data)
 
 /* Do on NICK, PRIVMSG, NOTICE and JOIN.
  */
-static bool detect_flood(char *floodnick, char *floodhost, char *from, int which)
+static bool detect_flood(const char *floodnick, const char *floodhost,
+    char *from, int which)
 {
   struct userrec *u = get_user_by_host(from);
   int atr = u ? u->flags : 0;
@@ -531,7 +533,8 @@ static bool detect_flood(char *floodnick, char *floodhost, char *from, int which
   if ((u && u->bot) || (atr & USER_NOFLOOD))
     return 0;
 
-  char *p = NULL, ftype[10] = "", h[1024] = "";
+  char ftype[10] = "", h[1024] = "";
+  const char *p = NULL;
   int thr = 0;
   time_t lapse = 0;
 
@@ -640,8 +643,9 @@ static int gotmsg(char *from, char *msg)
      (*msg == '@')))           /* Notice to a channel, not handled here */
     return 0;
 
-  char *to = NULL, buf[UHOSTLEN] = "", *nick = NULL, ctcpbuf[512] = "", *uhost = buf, 
+  char *to = NULL, buf[UHOSTLEN] = "", ctcpbuf[512] = "", *uhost = buf,
        *ctcp = NULL, *p = NULL, *p1 = NULL, *code = NULL;
+  const char *nick = NULL;
   struct userrec *u = NULL;
   int ctcp_count = 0;
   bool ignoring = match_ignore(from);
@@ -866,8 +870,9 @@ static int gotnotice(char *from, char *msg)
       (*msg == '@')))           /* Notice to a channel, not handled here */
     return 0;
 
-  char *to = NULL, *nick = NULL, ctcpbuf[512] = "", *p = NULL, *p1 = NULL, buf[512] = "", 
+  char *to = NULL, ctcpbuf[512] = "", *p = NULL, *p1 = NULL, buf[512] = "",
        *uhost = buf, *ctcp = NULL, *ctcpmsg = NULL, *ptr = NULL;
+  const char *nick = NULL;
   struct userrec *u = NULL;
   bool ignoring = match_ignore(from);
 
@@ -1061,9 +1066,11 @@ static void nick_available(bool is_jupe, bool is_orig) {
   }
 }
 
-void nicks_available(char* buf, char delim, bool buf_contains_available) {
-  if (!buf[0] || !keepnick) return;
+void nicks_available(const char* nicks, char delim, bool buf_contains_available) {
+  if (!nicks || !nicks[0] || !keepnick) return;
   bool is_jupe = 0, is_orig = 0;
+  char *buf = strdup(nicks);
+  char * const buf_p = buf;
 
   char *nick = NULL;
   if (delim) {
@@ -1084,6 +1091,8 @@ void nicks_available(char* buf, char delim, bool buf_contains_available) {
   }
 
   nick_available(is_jupe, is_orig);
+
+  free(buf_p);
 }
 
 void real_release_nick(void *data) {
@@ -1349,7 +1358,8 @@ static int goterror(char *from, char *msg)
  */
 static int gotnick(char *from, char *msg)
 {
-  char *nick = NULL, *buf = NULL, *buf_ptr = NULL;
+  char *buf = NULL, *buf_ptr = NULL;
+  const char *nick = NULL;
 
   //Done to prevent gotnick in irc.mod getting a mangled from
   buf = buf_ptr = strdup(from);
@@ -1540,11 +1550,13 @@ static void server_activity(int idx, char *msg, int len)
   } else if (server_online) // Only set once 001 has been received
     waiting_for_awake = 0;
 
+  static char empty[] = "";
   if (msg[0] == ':') {
     msg++;
     from = newsplit(&msg);
-  } else
-    from = "";
+  } else {
+    from = empty;
+  }
  
   code = newsplit(&msg);
 
@@ -1721,7 +1733,7 @@ hide_chans(const char *nick, struct userrec *u, char *_channels, bool publicOnly
     if (!chan || 
         
         (!publicOnly && (
-          getnick(u->handle, chan)[0] ||
+          getnick(u->handle, chan) ||
           !(channel_hidden(chan)) || 
           chk_op(fr, chan)
         )) ||

+ 4 - 4
src/mod/share.mod/share.cc

@@ -158,7 +158,7 @@ static bool flush_tbuf(char *bot)
   return 0;
 }
 
-static struct share_msgq *q_addmsg(struct share_msgq *qq, char *s)
+static struct share_msgq *q_addmsg(struct share_msgq *qq, const char *s)
 {
   struct share_msgq *q = NULL;
   int cnt;
@@ -190,7 +190,7 @@ static struct share_msgq *q_addmsg(struct share_msgq *qq, char *s)
 
 /* Add stuff to a specific bot's tbuf.
  */
-static void q_tbuf(char *bot, char *s)
+static void q_tbuf(const char *bot, const char *s)
 {
   struct share_msgq *q = NULL;
   tandbuf *t = NULL;
@@ -205,7 +205,7 @@ static void q_tbuf(char *bot, char *s)
 
 /* Add stuff to the resync buffers.
  */
-static void q_resync(char *s)
+static void q_resync(const char *s)
 {
   struct share_msgq *q = NULL;
   tandbuf *t = NULL;
@@ -216,7 +216,7 @@ static void q_resync(char *s)
   }
 }
 
-static void q_resync_but(char *s, const char *bot)
+static void q_resync_but(const char *s, const char *bot)
 {
   struct share_msgq *q = NULL;
   tandbuf *t = NULL;

+ 3 - 2
src/mod/transfer.mod/transfer.cc

@@ -810,7 +810,8 @@ static void dcc_get_pending(int idx, char *buf, int len)
  * Use raw_dcc_resend() and raw_dcc_send() instead of this function.
  */
 
-static int raw_dcc_resend_send(char *filename, char *nick, char *from, int resend, int *idx)
+static int raw_dcc_resend_send(const char *filename, const char *nick,
+    const char *from, int resend, int *idx)
 {
   int zz = -1;
   int i;
@@ -889,7 +890,7 @@ static int raw_dcc_resend(char *filename, char *nick, char *from, char *dir)
 
 /* Starts a DCC_SEND connection.
  */
-int raw_dcc_send(char *filename, char *nick, char *from, int *idx)
+int raw_dcc_send(const char *filename, const char *nick, const char *from, int *idx)
 {
   return raw_dcc_resend_send(filename, nick, from, 0, idx);
 }

+ 1 - 1
src/mod/transfer.mod/transfer.h

@@ -30,7 +30,7 @@ enum {
         XFER_ACK_WITHOUT_OFFSET /* Skipped data is NOT counted in ack.  */
 };
 
-int raw_dcc_send(char *, char *, char *, int *);
+int raw_dcc_send(const char *, const char *, const char *, int *);
 
 #ifdef MAKING_TRANSFER
 #define TRANSFER_REGET_PACKETID 0xfeab

+ 2 - 1
src/net.cc

@@ -182,7 +182,8 @@ const char *myipstr(int af_type)
       }
   }
 
-  return "";
+  static char empty[] = "";
+  return empty;
 }
 
 /* see if it's necessary to set inaddr_any... because if we can't resolve, we die anyway */

+ 5 - 4
src/shell.cc

@@ -418,7 +418,8 @@ void check_trace(int start)
 #endif	/* !DEBUG */
 }
 
-int shell_exec(char *cmdline, char *input, char **output, char **erroutput, bool simple)
+int shell_exec(const char *cmdline, const char *input, char **output,
+    char **erroutput, bool simple)
 {
   if (!cmdline)
     return 0;
@@ -555,9 +556,9 @@ int shell_exec(char *cmdline, char *input, char **output, char **erroutput, bool
       argv[n] = NULL;
 
     } else {
-      argv[0] = "/bin/sh";
-      argv[1] = "-c";
-      argv[2] = cmdline;
+      argv[0] = (char*)"/bin/sh";
+      argv[1] = (char*)"-c";
+      argv[2] = (char*)cmdline;
       argv[3] = NULL;
     }
 

+ 1 - 1
src/shell.h

@@ -51,7 +51,7 @@ void clear_tmp();
 const char *homedir(bool = 1);
 const char *my_username();
 void expand_tilde(char **);
-int shell_exec(char *, char *, char **, char **, bool = 0);
+int shell_exec(const char *, const char *, char **, char **, bool = 0);
 int simple_exec(const char* argv[]);
 void check_last();
 void check_promisc();

+ 1 - 1
src/socket.cc

@@ -169,7 +169,7 @@ int socket_set_nonblock(int sock, int value)
 
 int socket_create(const char *dest_ip, int dest_port, const char *src_ip, int src_port, int flags)
 {
-        char *passive[] = {"::", "0.0.0.0"};
+        const char *passive[] = {"::", "0.0.0.0"};
         int sock = -1, pfamily, try_ok;
         sockname_t dest_name, src_name;
 

+ 20 - 20
src/tandem.h

@@ -46,38 +46,38 @@ typedef struct {
 #define GLOBAL_CHANS 100000
 
 
-void botnet_send_chan(int, char *, char *, int, char *);
+void botnet_send_chan(int, const char *, const char *, int, const char *);
 void botnet_send_chat(int, const char *, const char *);
-void botnet_send_act(int, char *, char *, int, char *);
+void botnet_send_act(int, const char *, const char *, int, const char *);
 void botnet_send_ping(int);
 void botnet_send_pong(int);
-void botnet_send_priv (int, char *, char *, char *, const char *, ...) __attribute__((format(printf, 5, 6)));
-void botnet_send_who(int, char *, char *, int);
-void botnet_send_unlinked(int, char *, char *);
-void botnet_send_traced(int, char *, char *);
-void botnet_send_trace(int, char *, char *, char *);
-void botnet_send_unlink(int, char *, char *, char *, char *);
-void botnet_send_link(int, char *, char *, char *);
+void botnet_send_priv (int, const char *, const char *, const char *, const char *, ...) __attribute__((format(printf, 5, 6)));
+void botnet_send_who(int, const char *, const char *, int);
+void botnet_send_unlinked(int, const char *, const char *);
+void botnet_send_traced(int, const char *, const char *);
+void botnet_send_trace(int, const char *, const char *, const char *);
+void botnet_send_unlink(int, const char *, const char *, const char *, const char *);
+void botnet_send_link(int, const char *, const char *, const char *);
 void botnet_send_update(int, tand_t *);
-void botnet_send_nlinked(int, char *, char *, char, int, time_t, char *, char *, int);
-void botnet_send_reject(int, char *, char *, char *, char *, char *);
+void botnet_send_nlinked(int, const char *, const char *, const char, int, time_t, const char *, const char *, int);
+void botnet_send_reject(int, const char *, const char *, const char *, const char *, const char *);
 void botnet_send_log(int, const char *, int, const char *, bool = 0);
 void botnet_send_zapf(int, const char *, const char *, const char *);
 void botnet_send_zapf_broad(int, const char *, const char *, const char *);
-void botnet_send_away(int, char *, int, char *, int);
-void botnet_send_idle(int, char *, int, int, char *);
+void botnet_send_away(int, const char *, int, const char *, int);
+void botnet_send_idle(int, const char *, int, int, const char *);
 void botnet_send_join_idx(int);
 void botnet_send_join_party(int, int, int);
-void botnet_send_part_idx(int, char *);
-void botnet_send_part_party(int, int, char *, int);
+void botnet_send_part_idx(int, const char *);
+void botnet_send_part_party(int, int, const char *, int);
 void botnet_send_bye(const char *);
-void botnet_send_nkch_part(int, int, char *);
-void botnet_send_nkch(int, char *);
+void botnet_send_nkch_part(int, int, const char *);
+void botnet_send_nkch(int, const char *);
 int bots_in_subtree(const tand_t *) __attribute__((pure));
 int users_in_subtree(const tand_t *) __attribute__((pure));
-int botnet_send_cmd(char * fbot, char * bot, char *fhnd, int fromidx, char * cmd);
-void botnet_send_cmd_broad(int idx, char * fbot, char *fhnd, int fromidx, char * cmd);
-void botnet_send_cmdreply(char * fbot, char * bot, char * to, char * toidx, char * ln);
+int botnet_send_cmd(const char * fbot, const char * bot, const char *fhnd, int fromidx, const char * cmd);
+void botnet_send_cmd_broad(int idx, const char * fbot, const char *fhnd, int fromidx, const char * cmd);
+void botnet_send_cmdreply(const char * fbot, const char * bot, const char * to, const char * toidx, const char * ln);
 void send_uplink(const char *, size_t);
 #define send_hubs(_s, _l) send_hubs_but(-1, (_s), (_l))
 void send_hubs_but(int , const char *, size_t);

+ 3 - 4
src/userent.cc

@@ -565,7 +565,8 @@ struct user_entry_type USERENTRY_STATS = {
   "STATS"
 };
 
-void update_mod(char *handle, char *nick, char *cmd, char *par)
+void update_mod(const char *handle, const char *nick, const char *cmd,
+    const char *par)
 {
   char tmp[100] = "";
 
@@ -727,10 +728,8 @@ static bool laston_unpack(struct userrec *u, struct user_entry *e)
   char *par = e->u.list->extra, *arg = newsplit(&par);
   struct laston_info *li = (struct laston_info *) calloc(1, sizeof(struct laston_info));
 
-  if (!par[0])
-    par = "???";
   li->laston = atoi(arg);
-  li->lastonplace = strdup(par);
+  li->lastonplace = par[0] ? strdup(par) : strdup("???");
   list_type_kill(e->u.list);
   e->u.extra = li;
   return 1;

+ 1 - 1
src/userent.h

@@ -3,7 +3,7 @@
 
 #include "users.h"
 
-void update_mod(char *, char *, char *, char *);
+void update_mod(const char *, const char *, const char *, const char *);
 void list_type_kill(struct list_type *);
 void stats_add(struct userrec *, int, int);
 void init_userent(void);

+ 5 - 14
src/userrec.cc

@@ -648,7 +648,8 @@ int change_handle(struct userrec *u, char *newh)
   return 1;
 }
 
-struct userrec *adduser(struct userrec *bu, const char *handle, char *host, char *pass, flag_t flags, int bot)
+struct userrec *adduser(struct userrec *bu, const char *handle,
+    const char *host, const char *pass, flag_t flags, int bot)
 {
   struct userrec *u = NULL, *x = NULL;
   int oldshare = noshare;
@@ -668,18 +669,8 @@ struct userrec *adduser(struct userrec *bu, const char *handle, char *host, char
   } else {
     u->flags = default_flags;
   }
-  set_user(&USERENTRY_PASS, u, pass);
-  /* Strip out commas -- they're illegal */
-  if (host && host[0]) {
-    char *p = strchr(host, ',');
-
-    while (p != NULL) {
-      *p = '?';
-      p = strchr(host, ',');
-    }
-    set_user(&USERENTRY_HOSTS, u, host);
-  } else
-    set_user(&USERENTRY_HOSTS, u, (void *) "none");
+  set_user(&USERENTRY_PASS, u, (void*)pass);/* XXX: const */
+  set_user(&USERENTRY_HOSTS, u, (void*)host);
   if (bu == userlist)
     clear_chanlist();
   noshare = oldshare;
@@ -851,7 +842,7 @@ void addhost_by_handle(char *handle, char *host)
   clear_chanlist();
 }
 
-void touch_laston(struct userrec *u, char *where, time_t timeval)
+void touch_laston(struct userrec *u, const char *where, time_t timeval)
 {
   if (!u)
     return;

+ 2 - 2
src/userrec.h

@@ -5,7 +5,7 @@ namespace bd {
   class Stream;
 }
 
-struct userrec *adduser(struct userrec *, const char *, char *, char *, flag_t, int);
+struct userrec *adduser(struct userrec *, const char *, const char *, const char *, flag_t, int);
 void addhost_by_handle(char *, char *);
 void clear_masks(struct maskrec *);
 void clear_cached_users();
@@ -20,7 +20,7 @@ void correct_handle(char *);
 void stream_writeuserfile(bd::Stream&, const struct userrec *, bool = 0);
 int real_write_userfile(int);
 int write_userfile(int);
-void touch_laston(struct userrec *, char *, time_t);
+void touch_laston(struct userrec *, const char *, time_t);
 void user_del_chan(char *);
 struct userrec *host_conflicts(const char *);
 struct userrec *get_user_by_handle(struct userrec *, const char *);

+ 4 - 7
src/users.cc

@@ -348,18 +348,14 @@ static void restore_ignore(char *host)
 	if (desc) {
 	  *desc = 0;
 	  desc++;
-	} else
-	  desc = NULL;
-      } else {
-	added = "0";
-	desc = NULL;
+	}
       }
       p = (struct igrec *) calloc(1, sizeof(struct igrec));
 
       p->next = global_ign;
       global_ign = p;
       p->expire = atoi(expi);
-      p->added = atoi(added);
+      p->added = added ? atoi(added) : 0;
       p->flags = flags;
       p->igmask = strdup(host);
       p->user = strdup(user);
@@ -465,7 +461,8 @@ void tell_user_ident(int idx, char *id)
 /* match string:
  * wildcard to match nickname or hostmasks
  * +attr to find all with attr */
-void tell_users_match(int idx, char *mtch, int start, int limit, char *chname, int isbot)
+void tell_users_match(int idx, char *mtch, int start, int limit,
+    const char *chname, int isbot)
 {
   char format[81] = "";
   struct userrec *u = NULL;

+ 1 - 1
src/users.h

@@ -197,7 +197,7 @@ void check_expired_ignores();
 void autolink_cycle();
 void tell_file_stats(int, char *);
 void tell_user_ident(int, char *);
-void tell_users_match(int, char *, int, int, char *, int);
+void tell_users_match(int, char *, int, int, const char *, int);
 int readuserfile(const char *, struct userrec **);
 int stream_readuserfile(bd::Stream&, struct userrec **);
 void check_pmode();