Jelajahi Sumber

Merge branch 'raise-handlen'

* raise-handlen:
  * More nicklen/handlen cleanups
  * Cleanup dcc.nick/host/simulbot lengths
  * Cleanup some HANDLEN usage
  * NICKLEN already includes a NULL-terminator.
  * Raise HANDLEN up to 32 - lie to older bots and say we use 9.

Conflicts:
	src/dccutil.c
Bryan Drewery 16 tahun lalu
induk
melakukan
2ef4f0ed8c

+ 1 - 0
doc/UPDATES

@@ -46,6 +46,7 @@
   * New userfile pass algorithm (salted-sha1)
   * New userfile cmdpass algorithm (salted-sha1)
   * New userfile storage format.
+  * Raise Handle length up to 32 characters.
 * cmd_set fixes
   * Sanitize cmd_set input locally as well as remotely (fixes #273)
   * Ensure that some set variables are only 1 word long.

+ 2 - 2
src/adns.c

@@ -370,8 +370,8 @@ static int get_dns_idx()
           dcc[dns_idx].sock = sock;
           dns_sock = sock;
           sdprintf("dns_sock: %d", dcc[dns_idx].sock);
-          strlcpy(dcc[dns_idx].host, dns_ip, UHOSTLEN);
-          strlcpy(dcc[dns_idx].nick, "(adns)", NICKLEN);
+          strlcpy(dcc[dns_idx].host, dns_ip, sizeof(dcc[dns_idx].host));
+          strlcpy(dcc[dns_idx].nick, "(adns)", sizeof(dcc[dns_idx].nick));
           sdprintf("dns_ip: %s", dns_ip);
           dcc[dns_idx].timeval = now;
           dns_handler.timeout_val = 0;

+ 7 - 7
src/auth.c

@@ -45,7 +45,7 @@ bd::HashTable<bd::String, Auth*> Auth::ht_host(10);
 Auth::Auth(const char *_nick, const char *_host, struct userrec *u)
 {
   Status(AUTHING);
-  strlcpy(nick, _nick, nick_len + 1);
+  strlcpy(nick, _nick, NICKLEN);
   strlcpy(host, _host, UHOSTLEN);
   if (u) {
     user = u;
@@ -88,7 +88,7 @@ void Auth::Done()
 }
 
 void Auth::NewNick(const char *newnick) {
-  strlcpy(nick, newnick, nick_len + 1);
+  strlcpy(nick, newnick, NICKLEN);
 }
 
 Auth *Auth::Find(const char *_host)
@@ -185,7 +185,7 @@ sdprintf(STR("GETIDX: auth: %s, idx: %d"), nick, idx);
       idx = -1;
     else {
       sdprintf(STR("FIRST FOUND: %d"), idx);
-      strlcpy(dcc[idx].simulbot, chname ? chname : nick, NICKLEN);
+      strlcpy(dcc[idx].simulbot, chname ? chname : nick, sizeof(dcc[idx].simulbot));
       strlcpy(dcc[idx].u.chat->con_chan, chname ? chname : "*", 81);
       return 1;
     }
@@ -200,7 +200,7 @@ sdprintf(STR("GETIDX: auth: %s, idx: %d"), nick, idx);
       putlog(LOG_DEBUG, "*", STR("Simul found old idx for %s/%s: (%s!%s)"), nick, chname, nick, host);
       dcc[i].simultime = now;
       idx = i;
-      strlcpy(dcc[idx].simulbot, chname ? chname : nick, NICKLEN);
+      strlcpy(dcc[idx].simulbot, chname ? chname : nick, sizeof(dcc[idx].simulbot));
       strlcpy(dcc[idx].u.chat->con_chan, chname ? chname : "*", 81);
 
       return 1;
@@ -217,11 +217,11 @@ sdprintf(STR("GETIDX: auth: %s, idx: %d"), nick, idx);
     dcc[idx].simul = 0;		/* not -1, so it's cleaned up later */
     dcc[idx].status = STAT_COLOR;
     dcc[idx].u.chat->con_flags = 0;
-    strlcpy(dcc[idx].simulbot, chname ? chname : nick, NICKLEN);
+    strlcpy(dcc[idx].simulbot, chname ? chname : nick, sizeof(dcc[idx].simulbot));
     strlcpy(dcc[idx].u.chat->con_chan, chname ? chname : "*", 81);
     dcc[idx].u.chat->strip_flags = STRIP_ALL;
-    strlcpy(dcc[idx].nick, handle, NICKLEN);
-    strlcpy(dcc[idx].host, host, UHOSTLEN);
+    strlcpy(dcc[idx].nick, handle, sizeof(dcc[idx].nick));
+    strlcpy(dcc[idx].host, host, sizeof(dcc[idx].host));
     dcc[idx].addr = 0L;
     dcc[idx].user = user ? user : get_user_by_handle(userlist, handle);
     return 1;

+ 4 - 4
src/botcmd.c

@@ -906,7 +906,7 @@ static void bot_thisbot(int idx, char *par)
   noshare = 1;
   change_handle(dcc[idx].user, par);
   noshare = 0;
-  strlcpy(dcc[idx].nick, par, NICKLEN);
+  strlcpy(dcc[idx].nick, par, sizeof(dcc[idx].nick));
 }
 
 /* Used to send a direct msg from Tcl on one bot to Tcl on another
@@ -1312,14 +1312,14 @@ static void bot_rsim(char *botnick, char *code, char *msg)
     dcc[idx].simultime = now;
     dcc[idx].simul = ridx;
     dcc[idx].status = status;
-    strlcpy(dcc[idx].simulbot, botnick, NICKLEN);
+    strlcpy(dcc[idx].simulbot, botnick, sizeof(dcc[idx].simulbot));
     dcc[idx].u.chat->con_flags = rconmask;
     struct chat_info dummy;
     strlcpy(dcc[idx].u.chat->con_chan, rconchan, sizeof(dummy.con_chan));
     dcc[idx].u.chat->strip_flags = STRIP_ALL;
-    strlcpy(dcc[idx].nick, nick, NICKLEN);
+    strlcpy(dcc[idx].nick, nick, sizeof(dcc[idx].nick));
     simple_snprintf(buf, sizeof buf, "%s@%s", nick, botnick);
-    strlcpy(dcc[idx].host, buf, UHOSTLEN);
+    strlcpy(dcc[idx].host, buf, sizeof(dcc[idx].host));
     dcc[idx].addr = 0L;
     dcc[idx].user = get_user_by_handle(userlist, nick);
   }

+ 5 - 5
src/botnet.c

@@ -1019,8 +1019,8 @@ int botlink(char *linker, int idx, char *nick)
       dcc[i].timeval = now;
       dcc[i].port = port;
       dcc[i].user = u;
-      strlcpy(dcc[i].nick, nick, NICKLEN);
-      strlcpy(dcc[i].host, address, UHOSTLEN);
+      strlcpy(dcc[i].nick, nick, sizeof(dcc[i].nick));
+      strlcpy(dcc[i].host, address, sizeof(dcc[i].host));
       dcc[i].u.dns->cptr = strdup(linker);
       dcc[i].u.dns->ibuf = idx;
       dcc[i].bot = 1;
@@ -1065,7 +1065,7 @@ static void botlink_dns_callback(int id, void *client_data, const char *host, bd
   }
 
   dcc[i].addr = inet_addr(bd::String(ips[0]).c_str());
-  strlcpy(dcc[i].host, bd::String(ips[0]).c_str(), UHOSTLEN);
+  strlcpy(dcc[i].host, bd::String(ips[0]).c_str(), sizeof(dcc[i].host));
 
   botlink_real(i);
 }
@@ -1182,9 +1182,9 @@ void tandem_relay(int idx, char *nick, register int i)
 
   dcc[i].port = bi->relay_port;
   dcc[i].addr = 0L;
-  strlcpy(dcc[i].nick, nick, NICKLEN);
+  strlcpy(dcc[i].nick, nick, sizeof(dcc[i].nick));
   dcc[i].user = u;
-  strlcpy(dcc[i].host, bi->address, UHOSTLEN);
+  strlcpy(dcc[i].host, bi->address, sizeof(dcc[i].host));
   if (conf.bot->hub) 
     dprintf(idx, "%s %s @ %s:%d ...\n", "Establishing encrypted connection to", nick, bi->address, bi->relay_port);
   dprintf(idx, "(Type *BYE* on a line by itself to abort.)\n");

+ 1 - 1
src/chan.h

@@ -211,7 +211,7 @@ struct chanset_t {
  *char temp[121];
  */
   char topic[121];
-  char added_by[NICKLEN];	/* who added the channel? */
+  char added_by[HANDLEN + 1];	/* who added the channel? */
   char floodwho[FLOOD_CHAN_MAX][128];
   char deopd[NICKLEN];		/* last person deop'd (must change	*/
   char dname[81];               /* what the users know the channel as like !eggdev */

+ 6 - 6
src/chanprog.c

@@ -58,10 +58,10 @@ char *def_chanset = "+enforcebans +dynamicbans +userbans -bitch +cycle -inactive
 struct chanset_t 	*chanset = NULL;	/* Channel list			*/
 struct chanset_t	*chanset_default = NULL;	/* Default channel list */
 char 			admin[121] = "";	/* Admin info			*/
-char			origbotnick[NICKLEN + 1] = "";	/* from -B (placed into conf.bot->nick .. for backup when conf is cleared */
-char 			origbotname[NICKLEN + 1] = "";	/* Nick to regain */
+char			origbotnick[HANDLEN + 1] = "";	/* from -B (placed into conf.bot->nick .. for backup when conf is cleared */
+char 			origbotname[NICKLEN] = "";	/* Nick to regain */
 char                    jupenick[NICKLEN] = "";
-char 			botname[NICKLEN + 1] = "";	/* IRC nickname */
+char 			botname[NICKLEN] = "";	/* IRC nickname */
 port_t     		my_port = 0;
 bool			reset_chans = 0;
 bool                    cookies_disabled = 0;
@@ -612,7 +612,7 @@ void rehash_ip() {
         dcc[idx].port = 0;
         dcc[idx].sock = i;
         dcc[idx].timeval = now;
-        strlcpy(dcc[idx].nick, "(unix_domain)", NICKLEN);
+        strlcpy(dcc[idx].nick, "(unix_domain)", sizeof(dcc[idx].nick));
         putlog(LOG_DEBUG, "*", "Listening on telnet %s", conf.localhub_socket);
       }
     }
@@ -726,8 +726,8 @@ void setup_HQ(int n) {
     dcc[n].u.chat->con_flags = conmask | LOG_ALL;
     dcc[n].u.chat->strip_flags = STRIP_ALL;
     dcc[n].status = STAT_ECHO;
-    strlcpy(dcc[n].nick, STR("HQ"), NICKLEN);
-    strlcpy(dcc[n].host, STR("llama@console"), UHOSTLEN);
+    strlcpy(dcc[n].nick, STR("HQ"), sizeof(dcc[n].nick));
+    strlcpy(dcc[n].host, STR("llama@console"), sizeof(dcc[n].host));
     dcc[n].user = get_user_by_handle(userlist, dcc[n].nick);
     /* Make sure there's an innocuous HQ user if needed */
     if (!dcc[n].user) {

+ 1 - 1
src/chanprog.h

@@ -34,7 +34,7 @@ void load_internal_users();
 void setup_HQ(int);
 
 extern struct chanset_t		*chanset, *chanset_default;
-extern char			admin[], origbotnick[NICKLEN + 1], origbotname[NICKLEN + 1], jupenick[NICKLEN], botname[NICKLEN + 1], *def_chanset;
+extern char			admin[], origbotnick[HANDLEN + 1], origbotname[NICKLEN], jupenick[NICKLEN], botname[NICKLEN], *def_chanset;
 extern port_t			my_port;
 extern bool			reset_chans, cookies_disabled;
 

+ 4 - 4
src/cmds.c

@@ -969,7 +969,7 @@ static void cmd_boot(int idx, char *par)
   if (strchr(who, '@') != NULL) {
     char whonick[HANDLEN + 1];
 
-    splitcn(whonick, who, '@', HANDLEN + 1);
+    splitcn(whonick, who, '@', sizeof(whonick));
     if (!strcasecmp(who, conf.bot->nick)) {
       cmd_boot(idx, whonick);
       return;
@@ -3116,7 +3116,7 @@ static void cmd_su(int idx, char *par)
         dcc[idx].u.chat->su_channel = dcc[idx].u.chat->channel;
 
 	dcc[idx].user = u;
-	strlcpy(dcc[idx].nick, par, NICKLEN);
+	strlcpy(dcc[idx].nick, par, sizeof(dcc[idx].nick));
 	/* Display password prompt and turn off echo (send IAC WILL ECHO). */
 	dprintf(idx, "Enter password for %s%s\n", par,
 		(dcc[idx].status & STAT_TELNET) ? TLN_IAC_C TLN_WILL_C
@@ -3133,7 +3133,7 @@ static void cmd_su(int idx, char *par)
         dcc[idx].u.chat->su_nick = strdup(dcc[idx].nick);
         dcc[idx].u.chat->su_channel = dcc[idx].u.chat->channel;
 	dcc[idx].user = u;
-	strlcpy(dcc[idx].nick, par, NICKLEN);
+	strlcpy(dcc[idx].nick, par, sizeof(dcc[idx].nick));
 	dcc_chatter(idx);
       }
     }
@@ -4512,7 +4512,7 @@ static void cmd_quit(int idx, char *text)
 
 	if (dcc[idx].u.chat->su_nick) {
 		dcc[idx].user = get_user_by_handle(userlist, dcc[idx].u.chat->su_nick);
-		strlcpy(dcc[idx].nick, dcc[idx].u.chat->su_nick, NICKLEN);
+		strlcpy(dcc[idx].nick, dcc[idx].u.chat->su_nick, sizeof(dcc[idx].nick));
                 dcc[idx].u.chat->channel = dcc[idx].u.chat->su_channel;
 		dcc[idx].type = &DCC_CHAT;
 		dprintf(idx, "Returning to real nick %s!\n", dcc[idx].u.chat->su_nick);

+ 1 - 1
src/conf.c

@@ -902,7 +902,7 @@ fill_conf_bot(bool fatal)
   /* This first clause should actually be obsolete */
   if (!used_B && conf.bots && conf.bots->nick) {
     mynick = strdup(conf.bots->nick);
-    strlcpy(origbotnick, conf.bots->nick, HANDLEN + 1);
+    strlcpy(origbotnick, conf.bots->nick, sizeof(origbotnick));
   } else
     mynick = strldup(origbotnick, HANDLEN);
 

+ 25 - 25
src/dcc.c

@@ -241,7 +241,7 @@ greet_new_bot(int idx)
     dcc[idx].status |= STAT_LEAF;
   dcc[idx].status |= STAT_LINKING;
 
-  dprintf(idx, "v 1001500 %d Wraith %s <%s> %d %li %s %s\n", HANDLEN, egg_version, "-", conf.bot->localhub, (long)buildts, commit, egg_version);
+  dprintf(idx, "v 1001500 9 Wraith %s <%s> %d %li %s %s\n", egg_version, "-", conf.bot->localhub, (long)buildts, commit, egg_version);
 
   for (int i = 0; i < dcc_total; i++) {
     if (dcc[i].type && dcc[i].type == &DCC_FORK_BOT) {
@@ -346,12 +346,12 @@ bot_version(int idx, char *par)
 void
 failed_link(int idx)
 {
-  char s[NICKLEN] = "", s1[512] = "";
+  char nick[NICKLEN] = "", s1[NICKLEN + 17 + 1] = "";
 
   if (dcc[idx].u.bot->linker[0]) {
-    simple_snprintf(s, sizeof s, "Couldn't link to %s.", dcc[idx].nick);
-    strlcpy(s1, dcc[idx].u.bot->linker, sizeof(s1));
-    add_note(s1, conf.bot->nick, s, -2, 0);
+    simple_snprintf(s1, sizeof s1, "Couldn't link to %s.", dcc[idx].nick);
+    strlcpy(nick, dcc[idx].u.bot->linker, sizeof(s1));
+    add_note(nick, conf.bot->nick, s1, -2, 0);
   }
   if (dcc[idx].u.bot->numver >= (-1))
     putlog(LOG_BOTS, "*", "Failed link to %s.", dcc[idx].nick);
@@ -359,10 +359,10 @@ failed_link(int idx)
     killsock(dcc[idx].sock);
     dcc[idx].sock = -1;
   }
-  strlcpy(s, dcc[idx].nick, sizeof(s));
+  strlcpy(nick, dcc[idx].nick, sizeof(nick));
   lostdcc(idx);
   if (conf.bot->hub || conf.bot->localhub)
-    autolink_cycle(s);            /* Check for more auto-connections */
+    autolink_cycle(nick);            /* Check for more auto-connections */
 }
 
 static void
@@ -638,8 +638,8 @@ dcc_identd_connect(int idx, char *buf, int atr)
   dcc[j].sock = sock;
   dcc[j].port = port;
   dcc[j].addr = dcc[idx].addr;
-  strlcpy(dcc[j].host, dcc[idx].host, UHOSTLEN);
-  strlcpy(dcc[j].nick, "*", NICKLEN);
+  strlcpy(dcc[j].host, dcc[idx].host, sizeof(dcc[j].host));
+  strlcpy(dcc[j].nick, "*", sizeof(dcc[j].nick));
   /* dcc[j].uint.ident_sock = dcc[idx].sock; */
   dcc[j].timeval = now;
 }
@@ -733,7 +733,7 @@ dcc_chat_secpass(int idx, char *buf, int atr)
       if (dcc[idx].status & STAT_TELNET)
         dprintf(idx, TLN_IAC_C TLN_WONT_C TLN_ECHO_C "\n");
       dcc[idx].user = get_user_by_handle(userlist, dcc[idx].u.chat->away);
-      strlcpy(dcc[idx].nick, dcc[idx].u.chat->away, NICKLEN);
+      strlcpy(dcc[idx].nick, dcc[idx].u.chat->away, sizeof(dcc[idx].nick));
       free(dcc[idx].u.chat->away);
       free(dcc[idx].u.chat->su_nick);
       dcc[idx].u.chat->away = NULL;
@@ -1073,7 +1073,7 @@ dcc_chat_pass(int idx, char *buf, int atr)
       if (dcc[idx].status & STAT_TELNET)
         dprintf(idx, TLN_IAC_C TLN_WONT_C TLN_ECHO_C "\n");
       dcc[idx].user = get_user_by_handle(userlist, dcc[idx].u.chat->away);
-      strlcpy(dcc[idx].nick, dcc[idx].u.chat->away, NICKLEN);
+      strlcpy(dcc[idx].nick, dcc[idx].u.chat->away, sizeof(dcc[idx].nick));
       free(dcc[idx].u.chat->away);
       free(dcc[idx].u.chat->su_nick);
       dcc[idx].u.chat->away = NULL;
@@ -1412,7 +1412,7 @@ dcc_telnet(int idx, char *buf, int ii)
     dcc[i].uint.ident_sock = dcc[idx].sock;
     dcc[i].port = 0;
     dcc[i].timeval = now;
-    strlcpy(dcc[i].nick, "*", NICKLEN);
+    strlcpy(dcc[i].nick, "*", sizeof(dcc[i].nick));
     putlog(LOG_BOTS, "*", "Connection over local socket: %s", s);
     dcc_telnet_got_ident(i, x);
     return;
@@ -1449,14 +1449,14 @@ dcc_telnet(int idx, char *buf, int ii)
   dcc[i].addr = ip;
   dcc[i].sock = sock;
   dcc[i].user = get_user_by_host(x);		/* check for matching -telnet!telnet@ip */
-  strlcpy(dcc[i].host, s, UHOSTLEN);
+  strlcpy(dcc[i].host, s, sizeof(dcc[i].host));
 #ifdef USE_IPV6
   if (af_type == AF_INET6)
     strlcpy(dcc[i].host6, s, sizeof(dcc[i].host6));
 #endif /* USE_IPV6 */
   dcc[i].port = port;
   dcc[i].timeval = now;
-  strlcpy(dcc[i].nick, "*", NICKLEN);
+  strlcpy(dcc[i].nick, "*", sizeof(dcc[i].nick));
 
   dcc[i].u.dns->ibuf = idx;
 
@@ -1489,7 +1489,7 @@ static void dcc_telnet_dns_callback(int id, void *client_data, const char *ip, b
   //Clear the ip (still saved in dcc[i].addr)
   dcc[i].host[0] = 0;
   if (hosts.size()) {
-    strlcpy(dcc[i].host, bd::String(hosts[0]).c_str(), UHOSTLEN);
+    strlcpy(dcc[i].host, bd::String(hosts[0]).c_str(), sizeof(dcc[i].host));
 
     //Check forward
     int dns_id = egg_dns_lookup(bd::String(hosts[0]).c_str(), 20, dcc_telnet_dns_forward_callback, (void *) (long) i);
@@ -1526,7 +1526,7 @@ static void dcc_telnet_dns_forward_callback(int id, void *client_data, const cha
   // If the forward did not match, replace the saved host with the ip
   if (!(ips.size() && !strcmp(bd::String(ips[0]).c_str(), iptostr(htonl(dcc[i].addr))))) {
     forward_matched = false;
-    strlcpy(dcc[i].host, iptostr(htonl(dcc[i].addr)), UHOSTLEN);
+    strlcpy(dcc[i].host, iptostr(htonl(dcc[i].addr)), sizeof(dcc[i].host));
   }
 
   if (forward_matched) {
@@ -1569,14 +1569,14 @@ static void dcc_telnet_dns_forward_callback(int id, void *client_data, const cha
 
   if (sock < 0) {
     if (sock == -2)
-      strlcpy(s, "DNS lookup failed for ident", UHOSTLEN);
+      strlcpy(s, "DNS lookup failed for ident", sizeof(s));
     else
-      strlcpy(s, strerror(errno), UHOSTLEN);
+      strlcpy(s, strerror(errno), sizeof(s));
   } else {
     j = new_dcc(&DCC_IDENT, 0);
     if (j < 0) {
       killsock(sock);
-      strlcpy(s, "No Free DCC's", UHOSTLEN);
+      strlcpy(s, "No Free DCC's", sizeof(s));
     }
   }
   if (s[0]) {
@@ -1588,8 +1588,8 @@ static void dcc_telnet_dns_forward_callback(int id, void *client_data, const cha
   dcc[j].sock = sock;
   dcc[j].port = 113;
   dcc[j].addr = dcc[i].addr;
-  strlcpy(dcc[j].host, dcc[i].host, UHOSTLEN);
-  strlcpy(dcc[j].nick, "*", NICKLEN);
+  strlcpy(dcc[j].host, dcc[i].host, sizeof(dcc[j].host));
+  strlcpy(dcc[j].nick, "*", sizeof(dcc[j].nick));
   dcc[j].uint.ident_sock = dcc[i].sock;
   dcc[j].user = dcc[i].user;
   dcc[j].timeval = now;
@@ -1716,7 +1716,7 @@ dcc_telnet_id(int idx, char *buf, int atr)
     dcc[idx].encrypt = 1;
   }
 
-  nick[HANDLEN] = 0;
+  nick[HANDLEN] = 0; // Trim to handle length before looking up user.
 
   dcc[idx].user = get_user_by_handle(userlist, nick);
 
@@ -1761,7 +1761,7 @@ dcc_telnet_id(int idx, char *buf, int atr)
     return;
   }
   correct_handle(nick);
-  strlcpy(dcc[idx].nick, nick, NICKLEN);
+  strlcpy(dcc[idx].nick, nick, sizeof(dcc[idx].nick));
   if (!strcmp(dcc[idx].host, "UNKNOWN@localhost"))
     simple_snprintf(dcc[idx].host, sizeof(dcc[idx].host), "%s@localhost", nick);
   if (dcc[idx].user->bot) {
@@ -2061,7 +2061,7 @@ dcc_telnet_got_ident(int i, char *host)
     return;
   }
 
-  strlcpy(dcc[i].host, host, UHOSTLEN);
+  strlcpy(dcc[i].host, host, sizeof(dcc[i].host));
 
   bool unix_domain = 0;
   if (!strcmp(host, "UNKNOWN@localhost"))
@@ -2128,7 +2128,7 @@ dcc_telnet_got_ident(int i, char *host)
     dcc[i].status |= STAT_UNIXDOMAIN;
 
   /* Copy acceptable-nick/host mask */
-  strlcpy(dcc[i].nick, dcc[idx].host, HANDLEN);
+  strlcpy(dcc[i].nick, dcc[idx].host, sizeof(dcc[i].nick));
   dcc[i].timeval = now;
 
   dcc[i].u.other = NULL;

+ 1 - 1
src/dcc.h

@@ -62,7 +62,7 @@ struct dcc_t {
   bool whowas;
   int dns_id;
   port_t port;
-  char simulbot[NICKLEN];       /* used for hub->leaf cmd simulation, holds bot that results should be sent to */
+  char simulbot[HANDLEN + 1];       /* used for hub->leaf cmd simulation, holds bot that results should be sent to */
   char hash[MD5_HASH_LENGTH + 1];                /* used for dcc authing */
   char shahash[SHA_HASH_LENGTH + 1];
   char nick[NICKLEN];

+ 9 - 9
src/dccutil.c

@@ -500,9 +500,9 @@ dcc_read(bd::Stream& stream)
       if (type == STR("port"))
         dcc[idx].port = atoi(buf.c_str());
       if (type == STR("nick"))
-        strlcpy(dcc[idx].nick, buf.c_str(), NICKLEN);
+        strlcpy(dcc[idx].nick, buf.c_str(), sizeof(dcc[idx].nick));
       if (type == STR("host"))
-        strlcpy(dcc[idx].host, buf.c_str(), UHOSTLEN);
+        strlcpy(dcc[idx].host, buf.c_str(), sizeof(dcc[idx].host));
     }
   }
   return -1;
@@ -809,7 +809,7 @@ do_boot(int idx, const char *by, const char *reason)
 
   if (dcc[idx].u.chat->su_nick) {
     dcc[idx].user = get_user_by_handle(userlist, dcc[idx].u.chat->su_nick);
-    strlcpy(dcc[idx].nick, dcc[idx].u.chat->su_nick, NICKLEN);
+    strlcpy(dcc[idx].nick, dcc[idx].u.chat->su_nick, sizeof(dcc[idx].nick));
     dcc[idx].type = &DCC_CHAT;
     dprintf(idx, "Returning to real nick %s!\n", dcc[idx].u.chat->su_nick);
     free(dcc[idx].u.chat->su_nick);
@@ -898,8 +898,8 @@ listen_all(port_t lport, bool off, bool should_v6)
           dcc[idx].port = port;
           dcc[idx].sock = i6;
           dcc[idx].timeval = now;
-          strlcpy(dcc[idx].nick, "(telnet6)", NICKLEN);
-          strlcpy(dcc[idx].host, "*", UHOSTLEN);
+          strlcpy(dcc[idx].nick, "(telnet6)", sizeof(dcc[idx].nick));
+          strlcpy(dcc[idx].host, "*", sizeof(dcc[idx].host));
           putlog(LOG_DEBUG, "*", "Listening on IPv6 at telnet port %d", port);
         }
 #endif
@@ -920,8 +920,8 @@ listen_all(port_t lport, bool off, bool should_v6)
         dcc[idx].port = port;
         dcc[idx].sock = i;
         dcc[idx].timeval = now;
-        strlcpy(dcc[idx].nick, "(telnet)", NICKLEN);
-        strlcpy(dcc[idx].host, "*", UHOSTLEN);
+        strlcpy(dcc[idx].nick, "(telnet)", sizeof(dcc[idx].nick));
+        strlcpy(dcc[idx].host, "*", sizeof(dcc[idx].host));
         putlog(LOG_DEBUG, "*", "Listening on IPv4 at telnet port %d", port);
       }
 
@@ -982,8 +982,8 @@ identd_open(const char *sourceIp, const char *destIp, int identd)
       dcc[idx].port = port;
       dcc[idx].sock = i;
       dcc[idx].timeval = now;
-      strlcpy(dcc[idx].nick, "(identd)", NICKLEN);
-      strlcpy(dcc[idx].host, "*", UHOSTLEN);
+      strlcpy(dcc[idx].nick, "(identd)", sizeof(dcc[idx].nick));
+      strlcpy(dcc[idx].host, "*", sizeof(dcc[idx].host));
       putlog(LOG_DEBUG, "*", "Identd daemon started.");
       howlong.sec = 15;
       howlong.usec = 0;

+ 1 - 1
src/eggdrop.h

@@ -24,7 +24,7 @@
  *       configuration file instead.
  */
 
-#define HANDLEN		  9	/* valid values 9->NICKMAX		*/
+#define HANDLEN		 32	/* valid values 9->NICKMAX		*/
 #define NICKMAX		 32	/* valid values HANDLEN->32		*/
 
 #define MAX_SOCKETS	300

+ 4 - 4
src/main.c

@@ -358,8 +358,8 @@ static void dtx_arg(int& argc, char *argv[])
         exit(0);
       case 'B':
         used_B = 1;
-        strlcpy(origbotname, optarg, HANDLEN + 1);
-        strlcpy(origbotnick, optarg, HANDLEN + 1);
+        strlcpy(origbotname, optarg, sizeof(origbotname));
+        strlcpy(origbotnick, optarg, sizeof(origbotnick));
         break;
       case 'H':
         printf("SHA1 (%s): %s\n", optarg, SHA1(optarg));
@@ -448,8 +448,8 @@ static void dtx_arg(int& argc, char *argv[])
 
   if ((argc - (optind - 1)) == 2) {
     used_B = 1;
-    strlcpy(origbotname, argv[optind], HANDLEN + 1);
-    strlcpy(origbotnick, argv[optind], HANDLEN + 1);
+    strlcpy(origbotname, argv[optind], sizeof(origbotname));
+    strlcpy(origbotnick, argv[optind], sizeof(origbotnick));
     /* Trim off .conf */
     p = strchr(origbotname, '.');
     if (p) {

+ 1 - 1
src/misc.c

@@ -1001,7 +1001,7 @@ int bot_aggressive_to(struct userrec *u)
     }
   }
 
-  char mypval[HANDLEN + 4] = "", botpval[HANDLEN + 4] = "";
+  char mypval[HANDLEN + 3 + 1] = "", botpval[HANDLEN + 3 + 1] = "";
 
   link_pref_val(u, botpval);
   link_pref_val(conf.bot->u, mypval);

+ 1 - 1
src/mod/channels.mod/cmdschan.c

@@ -1211,7 +1211,7 @@ static void cmd_chaninfo(int idx, char *par)
     dprintf(idx, "No such channel.\n");
     return;
   } else {
-    char nick[NICKLEN] = "", date[81] = "";
+    char nick[HANDLEN + 1] = "", date[81] = "";
     int deflag = 0;
 
     if (chan->added_ts) {

+ 1 - 1
src/mod/channels.mod/tclchan.c

@@ -355,7 +355,7 @@ int channel_modify(char *result, struct chanset_t *chan, int items, char **item,
 	  strlcpy(result, "addedby needs argument", RESULT_LEN);
 	return ERROR;
       }
-      strlcpy(chan->added_by, item[i], NICKLEN);
+      strlcpy(chan->added_by, item[i], sizeof(chan->added_by));
     } else if (!cmd && !strcmp(item[i], "addedts")) {
       i++;
       if (i >= items) {

+ 0 - 1
src/mod/irc.mod/cmdsirc.c

@@ -1846,7 +1846,6 @@ static void cmd_deluser(int idx, char *par)
     char buf[HANDLEN + 1] = "";
 
     strlcpy(buf, u->handle, sizeof buf);
-    buf[HANDLEN] = 0;
     if (deluser(u->handle)) {
       dprintf(idx, "Deleted %s.\n", buf); /* ?!?! :) */
       putlog(LOG_CMDS, "*", "#%s# deluser %s [%s]", dcc[idx].nick, nick, buf);

+ 2 - 3
src/mod/irc.mod/msgcmds.c

@@ -186,7 +186,7 @@ static int msg_op(char *nick, char *host, struct userrec *u, char *par)
 
 static int msg_ident(char *nick, char *host, struct userrec *u, char *par)
 {
-  char s[UHOSTLEN] = "", s1[UHOSTLEN] = "", *pass = NULL, who[NICKLEN] = "";
+  char s[UHOSTLEN] = "", s1[UHOSTLEN] = "", *pass = NULL, who[HANDLEN + 1] = "";
   struct userrec *u2 = NULL;
 
   if (match_my_nick(nick) || (u && u->bot))
@@ -194,10 +194,9 @@ static int msg_ident(char *nick, char *host, struct userrec *u, char *par)
 
   pass = newsplit(&par);
   if (!par[0])
-    strlcpy(who, nick, sizeof(nick));
+    strlcpy(who, nick, sizeof(who));
   else {
     strlcpy(who, par, sizeof(who));
-    who[NICKMAX] = 0;
   }
   u2 = get_user_by_handle(userlist, who);
   if (u2 && rfc_casecmp(who, origbotname) && !u2->bot) {

+ 2 - 2
src/mod/server.mod/server.c

@@ -924,8 +924,8 @@ static int ctcp_DCC_CHAT(char *nick, char *from, struct userrec *u, char *object
     dcc[i].addr = my_atoul(ip);
     dcc[i].port = atoi(prt);
     dcc[i].sock = -1;
-    strlcpy(dcc[i].nick, u->handle, NICKLEN);
-    strlcpy(dcc[i].host, from, UHOSTLEN);
+    strlcpy(dcc[i].nick, u->handle, sizeof(dcc[i].nick));
+    strlcpy(dcc[i].host, from, sizeof(dcc[i].host));
     dcc[i].timeval = now;
     dcc[i].user = u;
 

+ 8 - 8
src/mod/server.mod/servmsg.c

@@ -115,7 +115,7 @@ static int gotfake433(char *nick)
 {
   //Failed to get jupenick on connect, try normal nick
   if (altnick_char == 0 && jupenick[0] && !rfc_casecmp(botname, jupenick)) {
-    strlcpy(botname, origbotname, NICKLEN);
+    strlcpy(botname, origbotname, sizeof(botname));
   } else //Rotate on failed normal nick
     rotate_nick(botname, origbotname);
   putlog(LOG_SERV, "*", "NICK IN USE: '%s' Trying '%s'", nick, botname);
@@ -191,7 +191,7 @@ void rehash_server(const char *servname, const char *nick)
     curservport = dcc[servidx].port;
 
   if (nick && nick[0]) {
-    strlcpy(botname, nick, NICKLEN);
+    strlcpy(botname, nick, sizeof(botname));
 
     dprintf(DP_SERVER, "WHOIS %s\n", botname); /* get user@host */
     dprintf(DP_SERVER, "USERHOST %s\n", botname); /* get user@ip */
@@ -1009,7 +1009,7 @@ static int got432(char *from, char *msg)
   } else {
     putlog(LOG_MISC, "*", "Server says my %snick '%s' is invalid.", is_jnick ? "jupe" : "", botname);
     if (jupenick[0] && !strcmp(botname, jupenick))
-      strlcpy(botname, origbotname, NICKLEN);
+      strlcpy(botname, origbotname, sizeof(botname));
     else
       rotate_nick(botname, origbotname);
 
@@ -1047,7 +1047,7 @@ static int got433(char *from, char *msg)
     } else {  //Else need to find a new nick
       // Failed to get jupenick, not on origbotname now, try for origbotname and rotate from there
       if (tried_jupenick) {
-        strlcpy(rnick, origbotname, NICKLEN);
+        strlcpy(rnick, origbotname, sizeof(rnick));
         tried_jupenick = 0;
       } else {
         // Was a failed attempt at a rotated nick, keep rotating on origbotname
@@ -1167,7 +1167,7 @@ static int gotnick(char *from, char *msg)
 
   if (match_my_nick(nick)) {
     /* Regained nick! */
-    strlcpy(botname, msg, NICKLEN);
+    strlcpy(botname, msg, sizeof(botname));
 
     tried_jupenick = 0;
     tried_nick = 0;
@@ -1314,7 +1314,7 @@ static void server_activity(int idx, char *msg, int len)
   char *from = NULL, *code = NULL;
 
   if (trying_server) {
-    strlcpy(dcc[idx].nick, "(server)", NICKLEN);
+    strlcpy(dcc[idx].nick, "(server)", sizeof(dcc[idx].nick));
     putlog(LOG_SERV, "*", "Connected to %s", dcc[idx].host);
 
     trying_server = 0;
@@ -1828,8 +1828,8 @@ static void connect_server(void)
     putlog(LOG_SERV, "*", "Trying server %s:%d", botserver, botserverport);
 
     dcc[newidx].port = botserverport;
-    strlcpy(dcc[newidx].nick, "(server)", NICKLEN);
-    strlcpy(dcc[newidx].host, botserver, UHOSTLEN);
+    strlcpy(dcc[newidx].nick, "(server)", sizeof(dcc[newidx].nick));
+    strlcpy(dcc[newidx].host, botserver, sizeof(dcc[newidx].host));
 
     botuserhost[0] = 0;
 

+ 5 - 5
src/mod/share.mod/share.c

@@ -876,8 +876,8 @@ share_pls_ignore(int idx, char *par)
     if (strchr(from, 'p'))
       expire_time = 0;
     from = newsplit(&par);
-    if (strlen(from) > HANDLEN + 1)
-      from[HANDLEN + 1] = 0;
+    if (strlen(from) > HANDLEN)
+      from[HANDLEN] = 0;
     par[65] = 0;
     if (conf.bot->hub)
       putlog(LOG_CMDS, "@", "%s: ignore %s (%s: %s)", dcc[idx].nick, ign, from, par);
@@ -1011,13 +1011,13 @@ share_ufsend(int idx, char *par)
       i = new_dcc(&DCC_FORK_SEND, sizeof(struct xfer_info));
       dcc[i].addr = my_atoul(ip);
       dcc[i].port = atoi(port);
-      strlcpy(dcc[i].nick, "*users", NICKLEN);
+      strlcpy(dcc[i].nick, "*users", sizeof(dcc[i].nick));
       dcc[i].u.xfer->filename = strdup(s);
       dcc[i].u.xfer->origname = dcc[i].u.xfer->filename;
       dcc[i].u.xfer->length = atoi(par);
       dcc[i].u.xfer->f = f;
       dcc[i].sock = sock;
-      strlcpy(dcc[i].host, dcc[idx].nick, UHOSTLEN);
+      strlcpy(dcc[i].host, dcc[idx].nick, sizeof(dcc[i].host));
       dcc[idx].status |= STAT_GETTING;
     }
   }
@@ -1544,7 +1544,7 @@ start_sending_users(int idx)
   } else {
     updatebot(-1, dcc[idx].nick, '+', 0, 0, 0, NULL);
     dcc[idx].status |= STAT_SENDING;
-    strlcpy(dcc[j].host, dcc[idx].nick, UHOSTLEN); /* Store bot's nick */
+    strlcpy(dcc[j].host, dcc[idx].nick, sizeof(dcc[j].host)); /* Store bot's nick */
     dprintf(idx, "s us %lu %d %lu\n", iptolong(getmyip()), dcc[j].port, dcc[j].u.xfer->length);
     /* Start up a tbuf to queue outgoing changes for this bot until the
      * userlist is done transferring.

+ 2 - 2
src/mod/transfer.mod/transfer.c

@@ -857,8 +857,8 @@ static int raw_dcc_resend_send(char *filename, char *nick, char *from, int resen
   dcc[i].sock = zz;
   dcc[i].addr = (in_addr_t) (-559026163);
   dcc[i].port = port;
-  strlcpy(dcc[i].nick, nick, NICKLEN);
-  strlcpy(dcc[i].host, "irc", 4);
+  strlcpy(dcc[i].nick, nick, sizeof(dcc[i].nick));
+  strlcpy(dcc[i].host, "irc", sizeof(dcc[i].host));
   dcc[i].u.xfer->filename = strdup(filename);
   dcc[i].u.xfer->origname = strdup(filename);
   strlcpy(dcc[i].u.xfer->from, from, NICKLEN);

+ 3 - 3
src/mod/update.mod/update.c

@@ -144,13 +144,13 @@ static void update_ufsend(int idx, char *par)
       i = new_dcc(&DCC_FORK_SEND, sizeof(struct xfer_info));
       dcc[i].addr = my_atoul(ip);
       dcc[i].port = atoi(port);
-      strlcpy(dcc[i].nick, "*binary", NICKLEN);
+      strlcpy(dcc[i].nick, "*binary", sizeof(dcc[i].nick));
       dcc[i].u.xfer->filename = strdup(s);
       dcc[i].u.xfer->origname = dcc[i].u.xfer->filename;
       dcc[i].u.xfer->length = atol(par);
       dcc[i].u.xfer->f = f;
       dcc[i].sock = sock;
-      strlcpy(dcc[i].host, dcc[idx].nick, UHOSTLEN);
+      strlcpy(dcc[i].host, dcc[idx].nick, sizeof(dcc[i].host));
 
       dcc[idx].status |= STAT_GETTINGU;
     }
@@ -338,7 +338,7 @@ static void start_sending_binary(int idx, bool streamable)
       bupdating = 0;
     } else {
       dcc[idx].status |= STAT_SENDINGU;
-      strlcpy(dcc[j].host, dcc[idx].nick, UHOSTLEN);		/* Store bot's nick */
+      strlcpy(dcc[j].host, dcc[idx].nick, sizeof(dcc[j].host));		/* Store bot's nick */
       dprintf(idx, "sb us %lu %d %lu\n", iptolong(getmyip()), dcc[j].port, dcc[j].u.xfer->length);
     }
   }