Parcourir la source

* Removed all BOT_FLAGS and the old sharing stuff from eggdrop

svn: 914
Bryan Drewery il y a 22 ans
Parent
commit
14d6968982
19 fichiers modifiés avec 430 ajouts et 674 suppressions
  1. 37 0
      src/bits.h
  2. 6 31
      src/botcmd.c
  3. 105 105
      src/botmsg.c
  4. 1 1
      src/botmsg.h
  5. 16 28
      src/botnet.c
  6. 19 28
      src/cmds.c
  7. 1 0
      src/common.h
  8. 5 2
      src/dcc.c
  9. 5 17
      src/flags.c
  10. 28 78
      src/flags.h
  11. 1 1
      src/main.c
  12. 48 79
      src/mod/channels.mod/userchan.c
  13. 3 3
      src/mod/console.mod/console.c
  14. 4 4
      src/mod/irc.mod/irc.c
  15. 5 16
      src/mod/irc.mod/mode.c
  16. 4 4
      src/mod/notes.mod/notes.c
  17. 133 265
      src/mod/share.mod/share.c
  18. 3 3
      src/userent.c
  19. 6 9
      src/userrec.c

+ 37 - 0
src/bits.h

@@ -0,0 +1,37 @@
+#ifndef _BITS_H
+#define _BITS_H
+
+#define BIT0	0x000000001
+#define BIT1	0x000000002
+#define BIT2	0x000000004
+#define BIT3	0x000000008
+#define BIT4	0x000000010
+#define BIT5	0x000000020
+#define BIT6	0x000000040
+#define BIT7	0x000000080
+#define BIT8	0x000000100
+#define BIT9	0x000000200
+#define BIT10	0x000000400
+#define BIT11	0x000000800
+#define BIT12	0x000001000
+#define BIT13	0x000002000
+#define BIT14	0x000004000
+#define BIT15	0x000008000
+#define BIT16	0x000010000
+#define BIT17	0x000020000
+#define BIT18	0x000040000
+#define BIT19	0x000080000
+#define BIT20	0x000100000
+#define BIT21	0x000200000
+#define BIT22	0x000400000
+#define BIT23	0x000800000
+#define BIT24	0x001000000
+#define BIT25	0x002000000
+#define BIT26	0x040000000
+#define BIT27	0x080000000
+#define BIT28	0x100000000
+#define BIT29	0x200000000
+#define BIT30	0x400000000
+#define BIT31	0x800000000
+
+#endif /* !_BITS_H */

+ 6 - 31
src/botcmd.c

@@ -84,8 +84,6 @@ static void bot_chan2(int idx, char *msg)
   char *from = NULL, *p = NULL;
   int i, chan;
 
-  if (bot_flags(dcc[idx].user) & BOT_ISOLATE)
-    return;
   from = newsplit(&msg);
   p = newsplit(&msg);
   chan = base64_to_int(p);
@@ -205,8 +203,6 @@ static void bot_chat(int idx, char *par)
   char *from = NULL;
   int i;
 
-  if (bot_flags(dcc[idx].user) & BOT_ISOLATE)
-    return;
   from = newsplit(&par);
   if (strchr(from, '@') != NULL) {
     fake_alert(idx, "bot", from);
@@ -229,8 +225,6 @@ static void bot_actchan(int idx, char *par)
   char *from = NULL, *p = NULL;
   int i, chan;
 
-  if (bot_flags(dcc[idx].user) & BOT_ISOLATE)
-    return;
   from = newsplit(&par);
   p = strchr(from, '@');
   if (p == NULL) {
@@ -713,8 +707,9 @@ static void bot_nlinked(int idx, char *par)
   }
   addbot(newbot, dcc[idx].nick, next, x, i);
   check_bind_link(newbot, next);
+
   u = get_user_by_handle(userlist, newbot);
-  if (bot_flags(u) & BOT_REJECT) {
+  if (u && u->flags && (!(u->flags & USER_OP))) {
     botnet_send_reject(idx, conf.bot->nick, NULL, newbot, NULL, NULL);
     putlog(LOG_BOTS, "*", "%s %s %s %s", BOT_REJECTING, newbot, MISC_FROM, dcc[idx].nick);
   }
@@ -841,8 +836,6 @@ static void bot_reject(int idx, char *par)
   struct userrec *u = NULL;
   int i;
 
-  if (bot_flags(dcc[idx].user) & BOT_ISOLATE)
-    return;
   from = newsplit(&par);
   frombot = strchr(from, '@');
   if (frombot)
@@ -891,28 +884,21 @@ static void bot_reject(int idx, char *par)
 	else
 	  frombot++;
 	u = get_user_by_handle(userlist, frombot);
-	if (!(bot_flags(u) & BOT_SHARE)) {
-	  add_note(from, conf.bot->nick, "No non sharebot boots.", -1, 0);
-	  ok = 1;
-	}
       } else if (remote_boots == 0) {
 	botnet_send_priv(idx, conf.bot->nick, from, NULL, "%s",
 			 BOT_NOREMOTEBOOT);
 	ok = 1;
       }
       for (i = 0; (i < dcc_total) && (!ok); i++)
-	if ((!egg_strcasecmp(who, dcc[i].nick)) &&
-	    (dcc[i].type->flags & DCT_CHAT)) {
+	if ((!egg_strcasecmp(who, dcc[i].nick)) && (dcc[i].type->flags & DCT_CHAT)) {
 	  u = get_user_by_handle(userlist, dcc[i].nick);
-	  if (u && 
-              ((u->flags & USER_OWNER) && !(dcc[idx].user->flags & USER_ADMIN))) {
+	  if (u && ((u->flags & USER_OWNER) && !(dcc[idx].user->flags & USER_ADMIN))) {
 	    add_note(from, conf.bot->nick, BOT_NOOWNERBOOT, -1, 0);
 	    return;
 	  }
 	  do_boot(i, from, par);
 	  ok = 1;
-	  putlog(LOG_CMDS, "*", "#%s# boot %s (%s)", from, who, 
-		 par[0] ? par : "No reason");
+	  putlog(LOG_CMDS, "*", "#%s# boot %s (%s)", from, who, par[0] ? par : "No reason");
 	}
     } else {
       i = nextbot(destbot);
@@ -939,8 +925,7 @@ static void bot_thisbot(int idx, char *par)
     lostdcc(idx);
     return;
   }
-  if (bot_flags(dcc[idx].user) & BOT_LEAF)
-    dcc[idx].status |= STAT_LEAF;
+
   /* Set capitalization the way they want it */
   noshare = 1;
   change_handle(dcc[idx].user, par);
@@ -1035,8 +1020,6 @@ static void bot_nickchange(int idx, char *par)
   char *bot = NULL, *ssock = NULL, *newnick = NULL;
   int sock, i;
 
-  if (bot_flags(dcc[idx].user) & BOT_ISOLATE)
-    return;
   bot = newsplit(&par);
   i = nextbot(bot);
   if (i != idx) {
@@ -1064,8 +1047,6 @@ static void bot_join(int idx, char *par)
   struct userrec *u = NULL;
   int i, sock, chan, i2, linking = 0;
 
-  if (bot_flags(dcc[idx].user) & BOT_ISOLATE)
-    return;
   bot = newsplit(&par);
   if (bot[0] == '!') {
     linking = 1;
@@ -1128,8 +1109,6 @@ static void bot_part(int idx, char *par)
   int sock, partyidx;
   int silent = 0;
 
-  if (bot_flags(dcc[idx].user) & BOT_ISOLATE)
-    return;
   bot = newsplit(&par);
   if (bot[0] == '!') {
     silent = 1;
@@ -1173,8 +1152,6 @@ static void bot_away(int idx, char *par)
   char *bot = NULL, *etc = NULL;
   int sock, partyidx, linking = 0;
 
-  if (bot_flags(dcc[idx].user) & BOT_ISOLATE)
-    return;
   bot = newsplit(&par);
   if (bot[0] == '!') {
     linking = 1;
@@ -1216,8 +1193,6 @@ static void bot_idle(int idx, char *par)
   char *bot = NULL, *work = NULL;
   int sock, idle;
 
-  if (bot_flags(dcc[idx].user) & BOT_ISOLATE)
-    return;
   bot = newsplit(&par);
   work = newsplit(&par);
   sock = base64_to_int(work);

+ 105 - 105
src/botmsg.c

@@ -102,10 +102,12 @@ char *unsigned_int_to_base10(unsigned int val)
   return buf_base10 + i;
 }
 
-int simple_sprintf (char *buf, ...)
+size_t simple_sprintf (char *buf, ...)
 {
-  char *format = NULL, *s = NULL;
-  int c = 0, i;
+  char *format = NULL;
+  unsigned char *s = NULL;
+  size_t c = 0;
+  unsigned int i;
   va_list va;
   
   va_start(va, buf);
@@ -155,17 +157,15 @@ int simple_sprintf (char *buf, ...)
 
 /* Ditto for tandem bots
  */
-static void send_tand_but(int x, char *buf, int len)
+static void send_tand_but(int x, char *buf, size_t len)
 {
-  int i, iso = 0;
+  int i;
 
-  if (len < 0) {
-    len = -len;
-    iso = 1;
-  }
-  for (i = 0; i < dcc_total; i++)
-    if ((dcc[i].type == &DCC_BOT) && (i != x) && (!iso || !(bot_flags(dcc[i].user) & BOT_ISOLATE)))
+  for (i = 0; i < dcc_total; i++) {
+    if ((dcc[i].type == &DCC_BOT) && i != x) {
       tputs(dcc[i].sock, buf, len);
+    }
+  }
 }
 
 #ifdef S_DCCPASS
@@ -225,44 +225,44 @@ void botnet_send_cmdreply(char * fbot, char * bot, char * to, char * toidx, char
 void botnet_send_bye()
 {
   if (tands > 0)
-    send_tand_but(-1, "bye\n", 4);
+    send_tand_but(-1, "bye\n", 5);
 }
 
 void botnet_send_chan(int idx, char *botnick, char *user, int chan, char *data)
 {
-  int i;
+  size_t len;
 
   if ((tands > 0) && (chan < GLOBAL_CHANS)) {
     if (user) {
-      i = simple_sprintf(OBUF, "c %s@%s %D %s\n", user, botnick, chan, data);
+      len = simple_sprintf(OBUF, "c %s@%s %D %s\n", user, botnick, chan, data);
     } else {
-      i = simple_sprintf(OBUF, "c %s %D %s\n", botnick, chan, data);
+      len = simple_sprintf(OBUF, "c %s %D %s\n", botnick, chan, data);
     }
-    send_tand_but(idx, OBUF, -i);
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_act(int idx, char *botnick, char *user, int chan, char *data)
 {
-  int i;
+  size_t len;
 
   if ((tands > 0) && (chan < GLOBAL_CHANS)) {
     if (user) {
-      i = simple_sprintf(OBUF, "a %s@%s %D %s\n", user, botnick, chan, data);
+      len = simple_sprintf(OBUF, "a %s@%s %D %s\n", user, botnick, chan, data);
     } else {
-      i = simple_sprintf(OBUF, "a %s %D %s\n", botnick, chan, data);
+      len = simple_sprintf(OBUF, "a %s %D %s\n", botnick, chan, data);
     }
-    send_tand_but(idx, OBUF, -i);
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_chat(int idx, char *botnick, char *data)
 {
-  int i;
+  size_t len;
 
   if (tands > 0) {
-    i = simple_sprintf(OBUF, "ct %s %s\n", botnick, data);
-    send_tand_but(idx, OBUF, -i);
+    len = simple_sprintf(OBUF, "ct %s %s\n", botnick, data);
+    send_tand_but(idx, OBUF, len);
   }
 }
 
@@ -279,7 +279,7 @@ void botnet_send_pong(int idx)
 
 void botnet_send_priv (int idx, ...)
 {
-  int l;
+  size_t len;
   char *from = NULL, *to = NULL, *tobot = NULL, *format = NULL;
   char tbuf[1024] = "";
   va_list va;
@@ -294,109 +294,108 @@ void botnet_send_priv (int idx, ...)
   tbuf[sizeof(tbuf)-1] = 0;
 
   if (tobot) {
-    l = simple_sprintf(OBUF, "p %s %s@%s %s\n", from, to, tobot, tbuf);
+    len = simple_sprintf(OBUF, "p %s %s@%s %s\n", from, to, tobot, tbuf);
   } else {
-    l = simple_sprintf(OBUF, "p %s %s %s\n", from, to, tbuf);
+    len = simple_sprintf(OBUF, "p %s %s %s\n", from, to, tbuf);
   }
-  tputs(dcc[idx].sock, OBUF, l);
+  tputs(dcc[idx].sock, OBUF, len);
 }
 
 void botnet_send_who(int idx, char *from, char *to, int chan)
 {
-  int l;
+  size_t len;
 
-  l = simple_sprintf(OBUF, "w %s %s %D\n", from, to, chan);
-  tputs(dcc[idx].sock, OBUF, l);
+  len = simple_sprintf(OBUF, "w %s %s %D\n", from, to, chan);
+  tputs(dcc[idx].sock, OBUF, len);
 }
 
 void botnet_send_infoq(int idx, char *par)
 {
-  int i = simple_sprintf(OBUF, "i? %s\n", par);
+  size_t len;
 
-  send_tand_but(idx, OBUF, i);
+  len = simple_sprintf(OBUF, "i? %s\n", par);
+  send_tand_but(idx, OBUF, len);
 }
 
 void botnet_send_unlink(int idx, char *who, char *via, char *bot, char *reason)
 {
-  int l;
+  size_t len;
 
-  l = simple_sprintf(OBUF, "ul %s %s %s %s\n", who, via, bot, reason);
-  tputs(dcc[idx].sock, OBUF, l);
+  len = simple_sprintf(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)
 {
-  int l;
+  size_t len;
 
-  l = simple_sprintf(OBUF, "l %s %s %s\n", who, via, bot);
-  tputs(dcc[idx].sock, OBUF, l);
+  len = simple_sprintf(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)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "un %s %s\n", bot, args ? args : "");
-    send_tand_but(idx, OBUF, l);
+    len = simple_sprintf(OBUF, "un %s %s\n", bot, args ? args : "");
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_nlinked(int idx, char *bot, char *next, char flag, int vernum)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "n %s %s %c%D\n", bot, next, flag, vernum);
-    send_tand_but(idx, OBUF, l);
+    len = simple_sprintf(OBUF, "n %s %s %c%D\n", bot, next, flag, vernum);
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_traced(int idx, char *bot, char *buf)
 {
-  int l;
+  size_t len;
 
-  l = simple_sprintf(OBUF, "td %s %s\n", bot, buf);
-  tputs(dcc[idx].sock, OBUF, l);
+  len = simple_sprintf(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)
 {
-  int l;
+  size_t len;
 
-  l = simple_sprintf(OBUF, "t %s %s %s:%s\n", to, from, buf, conf.bot->nick);
-  tputs(dcc[idx].sock, OBUF, l);
+  len = simple_sprintf(OBUF, "t %s %s %s:%s\n", to, from, buf, conf.bot->nick);
+  tputs(dcc[idx].sock, OBUF, len);
 }
 
 void botnet_send_update(int idx, tand_t * ptr)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "u %s %c%D\n", ptr->bot, ptr->share, ptr->ver);
-    send_tand_but(idx, OBUF, l);
+    len = simple_sprintf(OBUF, "u %s %c%D\n", ptr->bot, ptr->share, ptr->ver);
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_reject(int idx, char *fromp, char *frombot, char *top, char *tobot, char *reason)
 {
-  int l;
+  size_t len;
   char to[NOTENAMELEN + 1] = "", from[NOTENAMELEN + 1] = "";
 
-  if (!(bot_flags(dcc[idx].user) & BOT_ISOLATE)) {
-    if (tobot) {
-      simple_sprintf(to, "%s@%s", top, tobot);
-      top = to;
-    }
-    if (frombot) {
-      simple_sprintf(from, "%s@%s", fromp, frombot);
-      fromp = from;
-    }
-    if (!reason)
-      reason = "";
-    l = simple_sprintf(OBUF, "r %s %s %s\n", fromp, top, reason);
-    tputs(dcc[idx].sock, OBUF, l);
+  if (tobot) {
+    simple_sprintf(to, "%s@%s", top, tobot);
+    top = to;
   }
+  if (frombot) {
+    simple_sprintf(from, "%s@%s", fromp, frombot);
+    fromp = from;
+  }
+  if (!reason)
+    reason = "";
+  len = simple_sprintf(OBUF, "r %s %s %s\n", fromp, top, reason);
+  tputs(dcc[idx].sock, OBUF, len);
 }
 
 inline void putallbots(char *par)
@@ -420,126 +419,127 @@ void putbot(char *bot, char *par)
 
 void botnet_send_zapf(int idx, char *a, char *b, char *c)
 {
-  int l;
+  size_t len;
 
-  l = simple_sprintf(OBUF, "z %s %s %s\n", a, b, c);
-  tputs(dcc[idx].sock, OBUF, l);
+  len = simple_sprintf(OBUF, "z %s %s %s\n", a, b, c);
+  tputs(dcc[idx].sock, OBUF, len);
 }
 
 void botnet_send_zapf_broad(int idx, char *a, char *b, char *c)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "zb %s %s%s%s\n", a, b ? b : "", b ? " " : "", c);
-    send_tand_but(idx, OBUF, l);
+    len = simple_sprintf(OBUF, "zb %s %s%s%s\n", a, b ? b : "", b ? " " : "", c);
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_cfg(int idx, struct cfg_entry * entry) {
-  int l;
+  size_t len;
 
-  l = simple_sprintf(OBUF, "cg %s %s\n", entry->name, entry->gdata ? entry->gdata : "");
-  tputs(dcc[idx].sock, OBUF, l);
+  len = simple_sprintf(OBUF, "cg %s %s\n", entry->name, entry->gdata ? entry->gdata : "");
+  tputs(dcc[idx].sock, OBUF, len);
 }
 
 void botnet_send_cfg_broad(int idx, struct cfg_entry * entry) {
-  int l;
+  size_t len;
+
   if (tands > 0) {
-      l = simple_sprintf(OBUF, "cgb %s %s\n", entry->name, entry->gdata ? entry->gdata : "");
-    send_tand_but(idx, OBUF, l);
+    len = simple_sprintf(OBUF, "cgb %s %s\n", entry->name, entry->gdata ? entry->gdata : "");
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_idle(int idx, char *bot, int sock, int idle, char *away)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "i %s %D %D %s\n", bot, sock, idle, away ? away : "");
-    send_tand_but(idx, OBUF, -l);
+    len = simple_sprintf(OBUF, "i %s %D %D %s\n", bot, sock, idle, away ? away : "");
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_away(int idx, char *bot, int sock, char *msg, int linking)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "aw %s%s %D %s\n", ((idx >= 0) && linking) ? "!" : "",
-                                                      bot, sock, msg ? msg : "");
-    send_tand_but(idx, OBUF, -l);
+    len = simple_sprintf(OBUF, "aw %s%s %D %s\n", ((idx >= 0) && linking) ? "!" : "", bot, sock, msg ? msg : "");
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_join_idx(int useridx, int oldchan)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "j %s %s %D %c%D %s\n",
+    len = simple_sprintf(OBUF, "j %s %s %D %c%D %s\n",
 		       conf.bot->nick, dcc[useridx].nick,
 		       dcc[useridx].u.chat->channel, geticon(useridx),
 		       dcc[useridx].sock, dcc[useridx].host);
-    send_tand_but(-1, OBUF, -l);
+    send_tand_but(-1, OBUF, len);
   }
 }
 
 void botnet_send_join_party(int idx, int linking, int useridx, int oldchan)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "j %s%s %s %D %c%D %s\n", linking ? "!" : "",
+    len = simple_sprintf(OBUF, "j %s%s %s %D %c%D %s\n", linking ? "!" : "",
 		       party[useridx].bot, party[useridx].nick,
 		       party[useridx].chan, party[useridx].flag,
 		       party[useridx].sock,
 		       party[useridx].from ? party[useridx].from : "");
-    send_tand_but(idx, OBUF, -l);
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_part_idx(int useridx, char *reason)
 {
-  int l = simple_sprintf(OBUF, "pt %s %s %D %s\n", conf.bot->nick,
-			 dcc[useridx].nick, dcc[useridx].sock,
-			 reason ? reason : "");
+  size_t len;
 
   if (tands > 0) {
-    send_tand_but(-1, OBUF, -l);
+    len = simple_sprintf(OBUF, "pt %s %s %D %s\n", conf.bot->nick,
+			 dcc[useridx].nick, dcc[useridx].sock,
+			 reason ? reason : "");
+    send_tand_but(-1, OBUF, len);
   }
 }
 
 void botnet_send_part_party(int idx, int partyidx, char *reason, int silent)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "pt %s%s %s %D %s\n",
+    len = simple_sprintf(OBUF, "pt %s%s %s %D %s\n",
 		       silent ? "!" : "", party[partyidx].bot,
 		       party[partyidx].nick, party[partyidx].sock,
 		       reason ? reason : "");
-    send_tand_but(idx, OBUF, -l);
+    send_tand_but(idx, OBUF, len);
   }
 }
 
 void botnet_send_nkch(int useridx, char *oldnick)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "nc %s %D %s\n", conf.bot->nick, dcc[useridx].sock, dcc[useridx].nick);
-    send_tand_but(-1, OBUF, -l);
+    len = simple_sprintf(OBUF, "nc %s %D %s\n", conf.bot->nick, dcc[useridx].sock, dcc[useridx].nick);
+    send_tand_but(-1, OBUF, len);
   }
 }
 
 void botnet_send_nkch_part(int butidx, int useridx, char *oldnick)
 {
-  int l;
+  size_t len;
 
   if (tands > 0) {
-    l = simple_sprintf(OBUF, "nc %s %D %s\n", party[useridx].bot, party[useridx].sock, party[useridx].nick);
-    send_tand_but(butidx, OBUF, -l);
+    len = simple_sprintf(OBUF, "nc %s %D %s\n", party[useridx].bot, party[useridx].sock, party[useridx].nick);
+    send_tand_but(butidx, OBUF, len);
   }
 }
 

+ 1 - 1
src/botmsg.h

@@ -18,7 +18,7 @@ void botnet_send_cfg_broad(int idx, struct cfg_entry *entry);
 void putbot(char *, char *);
 inline void putallbots(char *);
 int add_note(char *, char *, char *, int, int);
-int simple_sprintf (char *, ...);
+size_t simple_sprintf (char *, ...);
 void tandout_but (int, ...);
 char *int_to_base10(int);
 char *unsigned_int_to_base10(unsigned int);

+ 16 - 28
src/botnet.c

@@ -732,7 +732,8 @@ void tell_bottree(int idx, int showver)
  */
 void dump_links(int z)
 {
-  register int i, l;
+  register int i;
+  register size_t l;
   char x[1024] = "";
   tand_t *bot = NULL;
 
@@ -746,36 +747,23 @@ void dump_links(int z)
     l = simple_sprintf(x, "n %s %s %c%D\n", bot->bot, p, bot->share, bot->ver);
     tputs(dcc[z].sock, x, l);
   }
-  if (!(bot_flags(dcc[z].user) & BOT_ISOLATE)) {
-    /* Dump party line members */
-    for (i = 0; i < dcc_total; i++) {
-      if (dcc[i].type == &DCC_CHAT) {
-	if ((dcc[i].u.chat->channel >= 0) &&
-	    (dcc[i].u.chat->channel < GLOBAL_CHANS)) {
-          l = simple_sprintf(x, "j !%s %s %D %c%D %s\n",
-			       conf.bot->nick, dcc[i].nick,
-			       dcc[i].u.chat->channel, geticon(i),
-			       dcc[i].sock, dcc[i].host);
-	  tputs(dcc[z].sock, x, l);
-          l = simple_sprintf(x, "i %s %D %D %s\n", conf.bot->nick,
-			       dcc[i].sock, now - dcc[i].timeval,
-			 dcc[i].u.chat->away ? dcc[i].u.chat->away : "");
-	  tputs(dcc[z].sock, x, l);
-	}
+  /* Dump party line members */
+  for (i = 0; i < dcc_total; i++) {
+    if (dcc[i].type == &DCC_CHAT) {
+      if ((dcc[i].u.chat->channel >= 0) && (dcc[i].u.chat->channel < GLOBAL_CHANS)) {
+        l = simple_sprintf(x, "j !%s %s %D %c%D %s\n", conf.bot->nick, dcc[i].nick, dcc[i].u.chat->channel, geticon(i), dcc[i].sock, dcc[i].host);
+	tputs(dcc[z].sock, x, l);
+        l = simple_sprintf(x, "i %s %D %D %s\n", conf.bot->nick, dcc[i].sock, now - dcc[i].timeval, dcc[i].u.chat->away ? dcc[i].u.chat->away : "");
+	tputs(dcc[z].sock, x, l);
       }
     }
-    for (i = 0; i < parties; i++) {
-      l = simple_sprintf(x, "j %s %s %D %c%D %s\n",
-			   party[i].bot, party[i].nick,
-			   party[i].chan, party[i].flag,
-			   party[i].sock, party[i].from);
+  }
+  for (i = 0; i < parties; i++) {
+    l = simple_sprintf(x, "j %s %s %D %c%D %s\n", party[i].bot, party[i].nick, party[i].chan, party[i].flag, party[i].sock, party[i].from);
+    tputs(dcc[z].sock, x, l);
+    if ((party[i].status & PLSTAT_AWAY) || (party[i].timer != 0)) {
+      l = simple_sprintf(x, "i %s %D %D %s\n", party[i].bot, party[i].sock, now - party[i].timer, party[i].away ? party[i].away : "");
       tputs(dcc[z].sock, x, l);
-      if ((party[i].status & PLSTAT_AWAY) || (party[i].timer != 0)) {
-        l = simple_sprintf(x, "i %s %D %D %s\n", party[i].bot,
-			     party[i].sock, now - party[i].timer,
-			     party[i].away ? party[i].away : "");
-	tputs(dcc[z].sock, x, l);
-      }
     }
   }
 }

+ 19 - 28
src/cmds.c

@@ -1395,8 +1395,8 @@ static void cmd_chhandle(struct userrec *u, int idx, char *par)
     atr2 = u2 ? u2->flags : 0;
     if (!(atr & USER_MASTER) && !(atr2 & USER_BOT))
       dprintf(idx, "You can't change handles for non-bots.\n");
-    else if ((bot_flags(u2) & BOT_SHARE) && !(atr & USER_OWNER))
-      dprintf(idx, "You can't change share bot's nick.\n");
+    else if ((u2->flags & USER_BOT) && !(atr & USER_OWNER))
+      dprintf(idx, "You can't change a bot's nick.\n");
     else if ((atr2 & USER_OWNER) && !(atr & USER_OWNER) &&
             egg_strcasecmp(dcc[idx].nick, hand))
       dprintf(idx, "You can't change a bot owner's handle.\n");
@@ -1468,8 +1468,8 @@ static void cmd_chpass(struct userrec *u, int idx, char *par)
       dprintf(idx, "No such user.\n");
     else if (!(atr & USER_MASTER) && !(u->flags & USER_BOT))
       dprintf(idx, "You can't change passwords for non-bots.\n");
-    else if ((bot_flags(u) & BOT_SHARE) && !(atr & USER_OWNER))
-      dprintf(idx, "You can't change a share bot's password.\n");
+    else if ((u->flags & USER_BOT) && !(atr & USER_OWNER))
+      dprintf(idx, "You can't change a bot's password.\n");
     else if ((u->flags & USER_OWNER) && !(atr & USER_OWNER) &&
 	     egg_strcasecmp(handle, dcc[idx].nick))
       dprintf(idx, "You can't change a bot owner's password.\n");
@@ -1523,8 +1523,8 @@ static void cmd_chsecpass(struct userrec *u, int idx, char *par)
       dprintf(idx, "No such user.\n");
     else if (!(atr & USER_MASTER) && !(u->flags & USER_BOT))
       dprintf(idx, "You can't change passwords for non-bots.\n");
-    else if ((bot_flags(u) & BOT_SHARE) && !(atr & USER_OWNER))
-      dprintf(idx, "You can't change a share bot's password.\n");
+    else if ((u->flags & USER_BOT) && !(atr & USER_OWNER))
+      dprintf(idx, "You can't change a bot's password.\n");
     else if ((u->flags & USER_OWNER) && !(atr & USER_OWNER) &&
 	     egg_strcasecmp(handle, dcc[idx].nick))
       dprintf(idx, "You can't change a bot owner's secpass.\n");
@@ -1707,8 +1707,8 @@ static void cmd_chaddr(struct userrec *u, int idx, char *par)
     dprintf(idx, "This command is only useful for tandem bots.\n");
     return;
   }
-  if ((bot_flags(u1) & BOT_SHARE) && (!u || !u->flags & USER_OWNER)) {
-    dprintf(idx, "You can't change a share bot's address.\n");
+  if ((u1->flags & USER_BOT) && (!u || !u->flags & USER_OWNER)) {
+    dprintf(idx, "You can't change a bot's address.\n");
     return;
   }
   putlog(LOG_CMDS, "*", "#%s# chaddr %s %s", dcc[idx].nick, handle, addr);
@@ -2245,12 +2245,6 @@ int check_dcc_attrs(struct userrec *u, flag_t oatr)
       }
 #endif /* HUB */
     }
-    if (dcc[i].type == &DCC_BOT && !egg_strcasecmp(u->handle, dcc[i].nick)) {
-      if ((dcc[i].status & STAT_LEAF) && !(u->flags & BOT_LEAF))
-	dcc[i].status &= ~(STAT_LEAF | STAT_WARNED);
-      if (!(dcc[i].status & STAT_LEAF) && (u->flags & BOT_LEAF))
-	dcc[i].status |= STAT_LEAF;
-    }
   }
   return u->flags;
 }
@@ -2447,8 +2441,8 @@ static void cmd_chattr(struct userrec *u, int idx, char *par)
       pls.chan &= ~(USER_ADMIN | USER_UPDATEHUB);
     }
     if (chan) {
-      pls.chan &= ~(BOT_SHARE | USER_HUBA | USER_CHUBA);
-      mns.chan &= ~(BOT_SHARE | USER_HUBA | USER_CHUBA);
+      pls.chan &= ~(USER_HUBA | USER_CHUBA);
+      mns.chan &= ~(USER_HUBA | USER_CHUBA);
     }
     if (!glob_owner(user) && !isowner(u->handle)) {
       pls.global &= ~(USER_CHUBA | USER_OWNER | USER_MASTER | USER_UNSHARED);
@@ -2507,13 +2501,11 @@ static void cmd_chattr(struct userrec *u, int idx, char *par)
   if (chan) {
     user.match = FR_CHAN;
     get_user_flagrec(u2, &user, par);
-    user.chan &= ~BOT_SHARE;
     if (chg)
       check_dcc_chanattrs(u2, chan->dname, user.chan, ocf);
     build_flags(work, &user, NULL);
     if (work[0] != '-')
-      dprintf(idx, "Channel flags for %s on %s are now +%s.\n", hand,
-	      chan->dname, work);
+      dprintf(idx, "Channel flags for %s on %s are now +%s.\n", hand, chan->dname, work);
     else
       dprintf(idx, "No flags for %s on %s.\n", hand, chan->dname);
   }
@@ -3313,9 +3305,9 @@ static void cmd_mns_user(struct userrec *u, int idx, char *par)
     return;
   }
   if (u2->flags & USER_BOT) {
-    if ((bot_flags(u2) & BOT_SHARE) && !(u->flags & USER_OWNER)) {
-      dprintf(idx, "You can't remove share bots.\n");
-      return;
+    if (!(u->flags & USER_OWNER)) {
+        dprintf(idx, "You can't remove bots.\n");
+        return;
     }
     for (idx2 = 0; idx2 < dcc_total; idx2++)
       if (dcc[idx2].type != &DCC_RELAY && dcc[idx2].type != &DCC_FORK_BOT &&
@@ -3326,8 +3318,7 @@ static void cmd_mns_user(struct userrec *u, int idx, char *par)
       return;
     }
   }
-  if (!(u->flags & USER_MASTER) &&
-      !(u2->flags & USER_BOT)) {
+  if (!(u->flags & USER_MASTER) && !(u2->flags & USER_BOT)) {
     dprintf(idx, "You can't remove users who aren't bots!\n");
     return;
   }
@@ -3379,8 +3370,8 @@ static void cmd_pls_host(struct userrec *u, int idx, char *par)
       dprintf(idx, "You can't add hostmasks to non-bots.\n");
       return;
     }
-    if (!glob_owner(fr) && glob_bot(fr2) && (bot_flags(u2) & BOT_SHARE)) {
-      dprintf(idx, "You can't add hostmasks to share bots.\n");
+    if (!glob_owner(fr) && glob_bot(fr2)) {
+      dprintf(idx, "You can't add hostmasks to bots.\n");
       return;
     }
     if (glob_admin(fr2) && !isowner(u->handle)) {
@@ -3466,8 +3457,8 @@ static void cmd_mns_host(struct userrec *u, int idx, char *par)
       dprintf(idx, "You can't remove hostmasks from non-bots.\n");
       return;
     }
-    if (glob_bot(fr2) && (bot_flags(u2) & BOT_SHARE) && !glob_owner(fr)) {
-      dprintf(idx, "You can't remove hostmasks from a share bot.\n");
+    if (glob_bot(fr2) && !glob_owner(fr)) {
+      dprintf(idx, "You can't remove hostmasks from bots.\n");
       return;
     }
     if (glob_admin(fr2) && !isowner(u->handle)) {

+ 1 - 0
src/common.h

@@ -19,6 +19,7 @@
 # endif /* !S_AUTHCMDS */
 #endif /* S_AUTHHASH */
 
+#include "bits.h"
 #include "garble.h"
 #include "conf.h"
 #include "debug.h"

+ 5 - 2
src/dcc.c

@@ -525,7 +525,9 @@ static void eof_dcc_bot(int idx)
 
 static void display_dcc_bot(int idx, char *buf)
 {
-  int i = simple_sprintf(buf, "bot   flags: ");
+  size_t i;
+
+  i = simple_sprintf(buf, "bot   flags: ");
 
   buf[i++] = b_status(idx) & STAT_PINGED ? 'P' : 'p';
   buf[i++] = b_status(idx) & STAT_SHARE ? 'U' : 'u';
@@ -1160,8 +1162,9 @@ static void dcc_chat(int idx, char *buf, int i)
 
 static void display_dcc_chat(int idx, char *buf)
 {
-  int i = simple_sprintf(buf, "chat  flags: ");
+  size_t i;
 
+  i = simple_sprintf(buf, "chat  flags: ");
   buf[i++] = dcc[idx].status & STAT_CHAT ? 'C' : 'c';
   buf[i++] = dcc[idx].status & STAT_PARTY ? 'P' : 'p';
   buf[i++] = dcc[idx].status & STAT_TELNET ? 'T' : 't';

+ 5 - 17
src/flags.c

@@ -69,9 +69,6 @@ int chan_sanity_check(int chatr, int atr)
   /* Master implies op */
   if (chatr & USER_MASTER)
     chatr |= USER_OP ;
-  /* Can't be +s on chan unless you're a bot */
-  if (!(atr & USER_BOT))
-    chatr &= ~BOT_SHARE;
   return chatr;
 }
 
@@ -438,10 +435,13 @@ void get_user_flagrec(struct userrec *u, struct flag_record *fr, const char *chn
 	  fr->chan |= cr->flags;
 	}
     } else {
-      if (chname)
-	for (cr = u->chanrec; cr; cr = cr->next)
+      if (chname) {
+	for (cr = u->chanrec; cr; cr = cr->next) {
 	  if (!rfc_casecmp(chname, cr->channel))
 	    break;
+        }
+      }
+
       if (cr) {
 	fr->chan = cr->flags;
       } else {
@@ -500,18 +500,6 @@ static int botfl_set(struct userrec *u, struct user_entry *e, void *buf)
     return 1;			/* Don't even bother trying to set the
 				   flags for a non-bot */
 
-/*  if ((atr & BOT_HUB) && (atr & BOT_ALT))
-    atr &= ~BOT_ALT;*/
-  if (atr & BOT_REJECT) {
-    if (atr & BOT_SHARE)
-      atr &= ~(BOT_SHARE | BOT_REJECT);
-    if (atr & BOT_HUB)
-      atr &= ~(BOT_HUB | BOT_REJECT);
-/*    if (atr & BOT_ALT)
-      atr &= ~(BOT_ALT | BOT_REJECT);*/
-  }
-  if (!(atr & BOT_SHARE))
-    atr &= ~BOT_GLOBAL;
   e->u.ulong = atr;
   return 1;
 }

+ 28 - 78
src/flags.h

@@ -65,85 +65,39 @@ struct flag_record {
 #define BOT_VALID  0x7fe689C1 /* all BOT_ flags in use               */
 
 
-#define USER_ADMIN         0x00000001 /* a  user is an admin                  */
-#define USER_BOT           0x00000002 /* b  user is a bot                     */
-#define USER_CHANHUB       0x00000004 /* c  bot is a chanhub    */
-#define USER_DEOP          0x00000008 /* d  user is global de-op              */
-#define USER_EXEMPT        0x00000010 /* e  exempted from stopnethack         */
-#define USER_F             0x00000020 /* f  unused             */
-#define USER_G             0x00000040 /* g  unused                            */
-#define USER_H             0x00000080 /* h  unused                            */
-#define USER_HUBA          0x00000100 /* i  access to HUBS        */
-#define USER_CHUBA         0x00000200 /* j  access to CHANHUBS(+c)            */
-#define USER_KICK          0x00000400 /* k  user is global auto-kick          */
-#define USER_DOLIMIT       0x00000800 /* l  bot sets limit on channel(s)        */
-#define USER_MASTER        0x00001000 /* m  user has full bot access          */
-#define USER_OWNER         0x00002000 /* n  user is the bot owner             */
-#define USER_OP            0x00004000 /* o  user is +o on all channels        */
-#define USER_PARTY         0x00008000 /* p  user can CHAT on partyline:*needs (+i or +j)    */
-#define USER_QUIET         0x00010000 /* q  user is global de-voice           */
-#define USER_R  	   0x00020000 /* r  unused    */
-#define USER_S             0x00040000 /* s  unused             */
-#define USER_T             0x00080000 /* t  unused             */
-#define USER_UPDATEHUB     0x00100000 /* u  bot is the updatehub         */
-#define USER_VOICE         0x00200000 /* v  user is +v on all channels        */
-#define USER_WASOPTEST     0x00400000 /* w  wasop test needed for stopnethack */
-#define USER_NOFLOOD       0x00800000 /* x  user is exempt from flood kicks   */
-#define USER_DOVOICE       0x01000000 /* y  bot gives voices                  */
-#define USER_UNSHARED      0x02000000 /* z  not shared with sharebots	      */
-#define USER_DEFAULT       0x40000000 /* use default-flags                    */
+#define USER_ADMIN         BIT0  /* a  user is an admin                  */
+#define USER_BOT           BIT1  /* b  user is a bot                     */
+#define USER_CHANHUB       BIT2  /* c  bot is a chanhub    */
+#define USER_DEOP          BIT3  /* d  user is global de-op              */
+#define USER_EXEMPT        BIT4  /* e  exempted from stopnethack         */
+#define USER_F             BIT5  /* f  unused             */
+#define USER_G             BIT6  /* g  unused                            */
+#define USER_H             BIT7  /* h  unused                            */
+#define USER_HUBA          BIT8  /* i  access to HUBS        */
+#define USER_CHUBA         BIT9  /* j  access to CHANHUBS(+c)            */
+#define USER_KICK          BIT10 /* k  user is global auto-kick          */
+#define USER_DOLIMIT       BIT11 /* l  bot sets limit on channel(s)        */
+#define USER_MASTER        BIT12 /* m  user has full bot access          */
+#define USER_OWNER         BIT13 /* n  user is the bot owner             */
+#define USER_OP            BIT14 /* o  user is +o on all channels        */
+#define USER_PARTY         BIT15 /* p  user can CHAT on partyline:*needs (+i or +j)    */
+#define USER_QUIET         BIT16 /* q  user is global de-voice           */
+#define USER_R  	   BIT17 /* r  unused    */
+#define USER_S             BIT18 /* s  unused             */
+#define USER_T             BIT19 /* t  unused             */
+#define USER_UPDATEHUB     BIT20 /* u  bot is the updatehub         */
+#define USER_VOICE         BIT21 /* v  user is +v on all channels        */
+#define USER_WASOPTEST     BIT22 /* w  wasop test needed for stopnethack */
+#define USER_NOFLOOD       BIT23 /* x  user is exempt from flood kicks   */
+#define USER_DOVOICE       BIT24 /* y  bot gives voices                  */
+#define USER_UNSHARED      BIT25 /* z  not shared with sharebots	      */
+#define USER_DEFAULT       BIT26 /* use default-flags                    */
 
 #define bot_hublevel(x) ( ( (x) && (x->flags & USER_BOT) && (get_user(&USERENTRY_BOTADDR, x)) ) ? \
                           ( ((struct bot_addr *) get_user(&USERENTRY_BOTADDR, x))->hublevel ? \
                             ((struct bot_addr *) get_user(&USERENTRY_BOTADDR, x))->hublevel : 999) \
                          : 999)
 
-/* Flags specifically for bots
- */
-#define BOT_A         0x00000001	/* a  unused			 */
-#define BOT_BOT       0x00000002	/* b  sanity bot flag		 */
-#define BOT_C         0x00000004	/* c  unused			 */
-#define BOT_D         0x00000008	/* d  unused			 */
-#define BOT_E         0x00000010	/* e  unused			 */
-#define BOT_F         0x00000020	/* f  unused			 */
-#define BOT_GLOBAL    0x00000040	/* g  all channel are shared	 */
-#define BOT_HUB       0x00000080	/* h  auto-link to ONE of these
-					      bots			 */
-#define BOT_ISOLATE   0x00000100	/* i  isolate party line from
-					      botnet			 */
-#define BOT_J         0x00000200	/* j  unused			 */
-#define BOT_K         0x00000400	/* k  unused			 */
-#define BOT_LEAF      0x00000800	/* l  may not link other bots	 */
-#define BOT_M         0x00001000	/* m  unused			 */
-#define BOT_N         0x00002000	/* n  unused			 */
-#define BOT_O         0x00004000	/* o  unused			 */
-#define BOT_PASSIVE   0x00008000	/* p  share passively with this
-					      bot			 */
-#define BOT_Q         0x00010000	/* q  unused */
-#define BOT_REJECT    0x00020000	/* r  automatically reject
-					      anywhere			 */
-#define BOT_AGGRESSIVE 0x00040000	/* s  bot shares user files	 */
-#define BOT_T         0x00080000	/* t  unused			 */
-#define BOT_U         0x00100000	/* u  unused			 */
-#define BOT_V         0x00200000	/* v  unused			 */
-#define BOT_W         0x00400000	/* w  unused			 */
-#define BOT_X         0x00800000	/* x  unused			 */
-#define BOT_Y         0x01000000	/* y  unused			 */
-#define BOT_Z         0x02000000	/* z  unused			 */
-#define BOT_FLAG0     0x00200000	/* 0  user-defined flag #0	 */
-#define BOT_FLAG1     0x00400000	/* 1  user-defined flag #1	 */
-#define BOT_FLAG2     0x00800000	/* 2  user-defined flag #2	 */
-#define BOT_FLAG3     0x01000000	/* 3  user-defined flag #3	 */
-#define BOT_FLAG4     0x02000000	/* 4  user-defined flag #4	 */
-#define BOT_FLAG5     0x04000000	/* 5  user-defined flag #5	 */
-#define BOT_FLAG6     0x08000000	/* 6  user-defined flag #6	 */
-#define BOT_FLAG7     0x10000000	/* 7  user-defined flag #7	 */
-#define BOT_FLAG8     0x20000000	/* 8  user-defined flag #8	 */
-#define BOT_FLAG9     0x40000000	/* 9  user-defined flag #9	 */
-
-#define BOT_SHARE    (BOT_AGGRESSIVE|BOT_PASSIVE)
-
-
 /* Flag checking macros
  */
 #define chan_op(x)			((x).chan & USER_OP)
@@ -151,7 +105,7 @@ struct flag_record {
 #define chan_deop(x)			((x).chan & USER_DEOP)
 #define glob_deop(x)			((x).global & USER_DEOP)
 #define glob_master(x)			((x).global & USER_MASTER)
-#define glob_bot(x)				((x).global & USER_BOT)
+#define glob_bot(x)			((x).global & USER_BOT)
 #define glob_owner(x)			((x).global & USER_OWNER)
 #define chan_master(x)			((x).chan & USER_MASTER)
 #define chan_owner(x)			((x).chan & USER_OWNER)
@@ -178,10 +132,6 @@ struct flag_record {
 #define chan_noflood(x)			((x).chan & USER_NOFLOOD)
 #define glob_chanhub(x)			((x).global & USER_CHANHUB)
 
-#define bot_global(x)		(1)
-#define bot_chan(x)		((x).chan & BOT_AGGRESSIVE)
-#define bot_shared(x)		((x).bot & BOT_SHARE)
-
 void get_user_flagrec(struct userrec *, struct flag_record *, const char *);
 void set_user_flagrec(struct userrec *, struct flag_record *, const char *);
 void break_down_flags(const char *, struct flag_record *, struct flag_record *);

+ 1 - 1
src/main.c

@@ -914,7 +914,7 @@ int main(int argc, char **argv)
       socket_cleanup--;
 
     xx = sockgets(buf, &i); 
-
+//printf("BUF: %s\n", buf);
     if (xx >= 0) {		/* Non-error */
       int idx;
 

+ 48 - 79
src/mod/channels.mod/userchan.c

@@ -874,32 +874,24 @@ int write_bans(FILE *f, int idx)
     }
     free(mask);
   }
-  for (chan = chanset; chan; chan = chan->next)
-    if ((idx < 0)  || 1) {
-      struct flag_record fr = {FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0};
-
-      if (idx >= 0)
-	get_user_flagrec(dcc[idx].user, &fr, chan->dname);
-      else
-	fr.chan = BOT_SHARE;
-
-	if (lfprintf(f, "::%s bans\n", chan->dname) == EOF)
-	  return 0;
-	for (b = chan->bans; b; b = b->next) {
-	  mask = str_escape(b->mask, ':', '\\');
-	  if (!mask ||
-	      lfprintf(f, "- %s:%s%lu%s:+%lu:%lu:%s:%s\n", mask,
-		      (b->flags & MASKREC_PERM) ? "+" : "", b->expire,
-		      (b->flags & MASKREC_STICKY) ? "*" : "", b->added,
-		      b->lastactive, b->user ? b->user : conf.bot->nick,
-		      b->desc ? b->desc : "requested") == EOF) {
-	    if (mask)
-	      free(mask);
-	    return 0;
-	  }
-	  free(mask);
-	}
+  for (chan = chanset; chan; chan = chan->next) {
+    if (lfprintf(f, "::%s bans\n", chan->dname) == EOF)
+      return 0;
+    for (b = chan->bans; b; b = b->next) {
+      mask = str_escape(b->mask, ':', '\\');
+      if (!mask ||
+        lfprintf(f, "- %s:%s%lu%s:+%lu:%lu:%s:%s\n", mask,
+	        (b->flags & MASKREC_PERM) ? "+" : "", b->expire,
+	        (b->flags & MASKREC_STICKY) ? "*" : "", b->added,
+	        b->lastactive, b->user ? b->user : conf.bot->nick,
+	        b->desc ? b->desc : "requested") == EOF) {
+          if (mask)
+            free(mask);
+          return 0;
+        }
+      free(mask);
     }
+  }
   return 1;
 }
 /* Write the exemptlists to a file.
@@ -927,31 +919,24 @@ int write_exempts(FILE *f, int idx)
     }
     free(mask);
   }
-  for (chan = chanset;chan;chan=chan->next)
-    if ((idx < 0) || 1) {
-      struct flag_record fr = {FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0};
-
-      if (idx >= 0)
-	get_user_flagrec(dcc[idx].user,&fr,chan->dname);
-      else
-	fr.chan = BOT_SHARE;
-	if (lfprintf(f, "&&%s exempts\n", chan->dname) == EOF)
-	  return 0;
-	for (e = chan->exempts; e; e = e->next) {
-	  mask = str_escape(e->mask, ':', '\\');
-	  if (!mask ||
-	      lfprintf(f,"%s %s:%s%lu%s:+%lu:%lu:%s:%s\n","%", mask,
-		      (e->flags & MASKREC_PERM) ? "+" : "", e->expire,
-		      (e->flags & MASKREC_STICKY) ? "*" : "", e->added,
-		      e->lastactive, e->user ? e->user : conf.bot->nick,
-		      e->desc ? e->desc : "requested") == EOF) {
-	    if (mask)
-	      free(mask);
-	    return 0;
-	  }
-	  free(mask);
-	}
+  for (chan = chanset;chan;chan=chan->next) {
+    if (lfprintf(f, "&&%s exempts\n", chan->dname) == EOF)
+      return 0;
+    for (e = chan->exempts; e; e = e->next) {
+      mask = str_escape(e->mask, ':', '\\');
+      if (!mask ||
+		lfprintf(f,"%s %s:%s%lu%s:+%lu:%lu:%s:%s\n","%", mask,
+		(e->flags & MASKREC_PERM) ? "+" : "", e->expire,
+		(e->flags & MASKREC_STICKY) ? "*" : "", e->added,
+		e->lastactive, e->user ? e->user : conf.bot->nick,
+		e->desc ? e->desc : "requested") == EOF) {
+        if (mask)
+           free(mask);
+         return 0;
+      }
+      free(mask);
     }
+  }
   return 1;
 }
 
@@ -980,31 +965,24 @@ int write_invites(FILE *f, int idx)
     }
     free(mask);
   }
-  for (chan = chanset; chan; chan = chan->next)
-    if ((idx < 0) || (1)) {
-      struct flag_record fr = {FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0};
-
-      if (idx >= 0)
-	get_user_flagrec(dcc[idx].user,&fr,chan->dname);
-      else
-	fr.chan = BOT_SHARE;
-	if (lfprintf(f, "$$%s invites\n", chan->dname) == EOF)
-	  return 0;
-	for (ir = chan->invites; ir; ir = ir->next) {
-	  mask = str_escape(ir->mask, ':', '\\');
-	  if (!mask ||
+  for (chan = chanset; chan; chan = chan->next) {
+    if (lfprintf(f, "$$%s invites\n", chan->dname) == EOF)
+      return 0;
+    for (ir = chan->invites; ir; ir = ir->next) {
+      mask = str_escape(ir->mask, ':', '\\');
+      if (!mask ||
 	      lfprintf(f,"@ %s:%s%lu%s:+%lu:%lu:%s:%s\n", mask,
 		      (ir->flags & MASKREC_PERM) ? "+" : "", ir->expire,
 		      (ir->flags & MASKREC_STICKY) ? "*" : "", ir->added,
 		      ir->lastactive, ir->user ? ir->user : conf.bot->nick,
 		      ir->desc ? ir->desc : "requested") == EOF) {
-	    if (mask)
-	      free(mask);
-	    return 0;
-	  }
+        if (mask)
 	  free(mask);
-	}
+	return 0;
+      }
+      free(mask);
     }
+  }
   return 1;
 }
 
@@ -1021,18 +999,10 @@ int write_chans(FILE *f, int idx)
     return 0;
 
   for (chan = chanset; chan; chan = chan->next) {
-    if ((idx < 0) || (1)) {
-      struct flag_record fr = {FR_CHAN | FR_GLOBAL | FR_BOT, 0, 0, 0};
-      if (idx >= 0)
-        get_user_flagrec(dcc[idx].user,&fr,chan->dname);
-      else
-        fr.chan = BOT_SHARE;
-
-     putlog(LOG_DEBUG, "*", "writing channel %s to userfile..", chan->dname);
-
-     get_mode_protect(chan, w);
+    putlog(LOG_DEBUG, "*", "writing channel %s to userfile..", chan->dname);
+    get_mode_protect(chan, w);
 
-     if (lfprintf(f, "\
+    if (lfprintf(f, "\
 + channel add %s { chanmode { %s } addedby %s addedts %lu idle-kick %d \
 limit %d stopnethack-mode %d revenge-mode %d flood-chan %d:%d \
 flood-ctcp %d:%d flood-join %d:%d flood-kick %d:%d flood-deop %d:%d \
@@ -1094,7 +1064,6 @@ exempt-time %d invite-time %d %cenforcebans %cdynamicbans %cuserbans \
  */
         ) == EOF)
           return 0;
-    } 
   }
   return 1;
 }

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

@@ -65,18 +65,18 @@ static int console_pack(struct userrec *u, struct user_entry *e)
 {
   char work[1024] = "";
   struct console_info *ci = NULL;
-  int l;
+  size_t len;
 
   ci = (struct console_info *) e->u.extra;
 
-  l = simple_sprintf(work, "%s %s %s %d %d %d %d",
+  len = simple_sprintf(work, "%s %s %s %d %d %d %d",
 		     ci->channel, masktype(ci->conflags),
 		     stripmasktype(ci->stripflags), ci->echoflags,
 		     ci->page, ci->conchan, ci->colour);
 
   e->u.list = calloc(1, sizeof(struct list_type));
   e->u.list->next = NULL;
-  e->u.list->extra = calloc(1, l + 1);
+  e->u.list->extra = calloc(1, len + 1);
   strcpy(e->u.list->extra, work);
 
   free(ci->channel);

+ 4 - 4
src/mod/irc.mod/irc.c

@@ -1321,7 +1321,8 @@ void irc_report(int idx, int details)
 {
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0};
   char ch[1024] = "", q[160] = "", *p = NULL;
-  int k, l;
+  int k;
+  size_t len;
   struct chanset_t *chan = NULL;
 
   strcpy(q, "Channels: ");
@@ -1343,9 +1344,8 @@ void irc_report(int idx, int details)
         else if ((chan->dname[0] != '+') && !me_op(chan))
 	  p = MISC_WANTOPS;
       }
-      l = simple_sprintf(ch, "%s%s%s%s, ", chan->dname, p ? "(" : "",
-			 p ? p : "", p ? ")" : "");
-      if ((k + l) > 70) {
+      len = simple_sprintf(ch, "%s%s%s%s, ", chan->dname, p ? "(" : "", p ? p : "", p ? ")" : "");
+      if ((k + len) > 70) {
 	dprintf(idx, "   %s\n", q);
 	strcpy(q, "          ");
 	k = 10;

+ 5 - 16
src/mod/irc.mod/mode.c

@@ -1062,8 +1062,7 @@ static void got_unban(struct chanset_t *chan, char *nick, char *from,
   if ((u_equals_mask(global_bans, who) || u_equals_mask(chan->bans, who)) &&
       me_op(chan) && !channel_dynamicbans(chan)) {
     /* That's a permban! */
-    if ((!glob_bot(user) || !(bot_flags(u) & BOT_SHARE)) && ((!glob_op(user) ||
-        chan_deop(user)) && !chan_op(user)))
+    if (!glob_bot(user) && !chk_op(user, chan))
       add_mode(chan, '+', 'b', who);
   }
 }
@@ -1137,13 +1136,8 @@ static void got_unexempt(struct chanset_t *chan, char *nick, char *from,
     }
   }
   if ((u_equals_mask(global_exempts, who) || u_equals_mask(chan->exempts, who)) &&
-      me_op(chan) && !channel_dynamicexempts(chan)) {
-    /* That's a permexempt! */
-    if (glob_bot(user) && (bot_flags(u) & BOT_SHARE)) {
-      /* Sharebot -- do nothing */
-    } else
-      add_mode(chan, '+', 'e', who);
-  }
+      me_op(chan) && !channel_dynamicexempts(chan) && !glob_bot(user))
+    add_mode(chan, '+', 'e', who);
 }
 
 static void got_invite(struct chanset_t *chan, char *nick, char *from,
@@ -1205,13 +1199,8 @@ static void got_uninvite(struct chanset_t *chan, char *nick, char *from,
     add_mode(chan, '+', 'I', who);
   if ((u_equals_mask(global_invites, who) ||
        u_equals_mask(chan->invites, who)) && me_op(chan) &&
-      !channel_dynamicinvites(chan)) {
-    /* That's a perminvite! */
-    if (glob_bot(user) && (bot_flags(u) & BOT_SHARE)) {
-      /* Sharebot -- do nothing */
-    } else
-      add_mode(chan, '+', 'I', who);
-  }
+      !channel_dynamicinvites(chan) && !glob_bot(user))
+    add_mode(chan, '+', 'I', who);
 }
 
 static int gotmode(char *from, char *msg)

+ 4 - 4
src/mod/notes.mod/notes.c

@@ -282,18 +282,18 @@ int storenote(char *argv1, char *argv2, char *argv3, int idx, char *who, int buf
 	  dprintf(idx, "%s\n", "Cant create notefile.  Sorry.");
 	putlog(LOG_MISC, "*", "%s", "Notefile unreachable!");
       } else {
-	char *p, *from = argv1;
-	int l = 0;
+	char *p = NULL, *from = argv1;
+	size_t len = 0;
 
 	chmod(notefile, userfile_perm);	/* Use userfile permissions. */
 	while ((argv3[0] == '<') || (argv3[0] == '>')) {
 	  p = newsplit(&(argv3));
 	  if (*p == '<')
-	    l += simple_sprintf(work + l, "via %s, ", p + 1);
+	    len += simple_sprintf(work + len, "via %s, ", p + 1);
 	  else if (argv1[0] == '@')
 	    from = p + 1;
 	}
-	fprintf(f, "%s %s %li %s%s\n", to, from, now, l ? work : "", argv3);
+	fprintf(f, "%s %s %li %s%s\n", to, from, now, len ? work : "", argv3);
 	fclose(f);
 	if (idx >= 0)
 	  dprintf(idx, "%s.\n", "Stored message");

+ 133 - 265
src/mod/share.mod/share.c

@@ -172,10 +172,7 @@ static void share_stick_ban(int idx, char *par)
       struct chanset_t *chan = findchan_by_dname(par);
       struct chanuserrec *cr;
 
-      if ((chan !=NULL) && ((channel_shared(chan) &&
-                             ((cr = get_chanrec(dcc[idx].user, par)) &&
-                              (bot_aggressive_to(dcc[idx].user)))) ||
-                            (1)))
+      if ((chan != NULL) && (cr = get_chanrec(dcc[idx].user, par)))
 	if (u_setsticky_ban(chan, host, yn) > 0) {
           putlog(LOG_CMDS, "@", "%s: %s %s %s", dcc[idx].nick, (yn) ? "stick" : "unstick", host, par);
 	  shareout_but(chan, idx, "s %s %d %s\n", host, yn, chan->dname);
@@ -213,10 +210,7 @@ static void share_stick_exempt(int idx, char *par)
       struct chanset_t *chan = findchan_by_dname(par);
       struct chanuserrec *cr = NULL;
 
-      if ((chan != NULL) && ((channel_shared(chan) &&
-                             ((cr = get_chanrec(dcc[idx].user, par)) &&
-                              (bot_aggressive_to(dcc[idx].user)))) ||
-                            (1)))
+      if ((chan != NULL) && (cr = get_chanrec(dcc[idx].user, par)))
 	if (u_setsticky_exempt(chan, host, yn) > 0) {
           putlog(LOG_CMDS, "@", "%s: stick %s %c %s", dcc[idx].nick, host, yn ? 'y' : 'n', par);
 	  shareout_but(chan, idx, "se %s %d %s\n", host, yn, chan->dname);
@@ -249,10 +243,7 @@ static void share_stick_invite (int idx, char * par) {
       struct chanset_t *chan = findchan_by_dname(par);
       struct chanuserrec *cr = NULL;
 
-      if ((chan != NULL) && ((channel_shared(chan) &&
-                             ((cr = get_chanrec(dcc[idx].user, par)) &&
-                              (bot_aggressive_to(dcc[idx].user)))) ||
-                            (1)))
+      if ((chan != NULL) && (cr = get_chanrec(dcc[idx].user, par)))
 	if (u_setsticky_invite(chan, host, yn) > 0) {
           putlog(LOG_CMDS, "@", "%s: %s %s %s", dcc[idx].nick, (yn) ? "stick" : "unstick", host, par);
 	  shareout_but(chan, idx, "sInv %s %d %s\n", host, yn, chan->dname);
@@ -297,33 +288,26 @@ static void share_chattr(int idx, char *par)
     if (u && !(u->flags & USER_UNSHARED)) {
       atr = newsplit(&par);
       cst = findchan_by_dname(par);
-      if (!par[0] || (cst && channel_shared(cst))) {
+      if (!par[0] || cst) {
 	if (!(dcc[idx].status & STAT_GETTING) && (cst || !private_global))
 	  shareout_but(cst, idx, "a %s %s %s\n", hand, atr, par);
 	noshare = 1;
 	if (par[0] && cst) {
 	  fr.match = (FR_CHAN | FR_BOT);
 	  get_user_flagrec(dcc[idx].user, &fr, par);
-	  if (bot_chan(fr) || bot_global(fr)) {
-	    fr.match = FR_CHAN;
-	    fr2.match = FR_CHAN;
-	    break_down_flags(atr, &fr, 0);
-	    get_user_flagrec(u, &fr2, par);
-	    fr.chan = (fr2.chan & BOT_AGGRESSIVE) |
-	      (fr.chan & ~BOT_AGGRESSIVE);
-	    set_user_flagrec(u, &fr, par);
-	    check_dcc_chanattrs(u, par, fr.chan, fr2.chan);
-	    noshare = 0;
-	    build_flags(s, &fr, 0);
-	    if (!(dcc[idx].status & STAT_GETTING))
-	      putlog(LOG_CMDS, "@", "%s: chattr %s %s %s", dcc[idx].nick, hand, s, par);
+          fr.match = FR_CHAN;
+	  fr2.match = FR_CHAN;
+	  break_down_flags(atr, &fr, 0);
+	  set_user_flagrec(u, &fr, par);
+	  get_user_flagrec(u, &fr2, par);
+	  check_dcc_chanattrs(u, par, fr.chan, fr2.chan);
+	  noshare = 0;
+	  build_flags(s, &fr, 0);
+	  if (!(dcc[idx].status & STAT_GETTING))
+	    putlog(LOG_CMDS, "@", "%s: chattr %s %s %s", dcc[idx].nick, hand, s, par);
 #ifdef LEAF
-            recheck_channel(cst, 0);
+          recheck_channel(cst, 0);
 #endif /* LEAF */
-	  } else
-	    putlog(LOG_CMDS, "*",
-		   "Rejected flags for unshared channel %s from %s",
-		   par, dcc[idx].nick);
 	} else if (!private_global) {
 	  int pgbm = private_globals_bitmask();
 
@@ -373,20 +357,13 @@ static void share_pls_chrec(int idx, char *par)
       chan = findchan_by_dname(par);
       fr.match = (FR_CHAN | FR_BOT);
       get_user_flagrec(dcc[idx].user, &fr, par);
-      if (!chan || !channel_shared(chan) ||
-	  !(bot_chan(fr) || bot_global(fr)))
-	putlog(LOG_CMDS, "*",
-	       "Rejected info for unshared channel %s from %s",
-	       par, dcc[idx].nick);
-      else {
-	noshare = 1;
-	shareout_but(chan, idx, "+cr %s %s\n", user, par);
-	if (!get_chanrec(u, par)) {
-	  add_chanrec(u, par);
-	  putlog(LOG_CMDS, "@", "%s: +chrec %s %s", dcc[idx].nick, user, par);
-	}
-	noshare = 0;
+      noshare = 1;
+      shareout_but(chan, idx, "+cr %s %s\n", user, par);
+      if (!get_chanrec(u, par)) {
+	add_chanrec(u, par);
+        putlog(LOG_CMDS, "@", "%s: +chrec %s %s", dcc[idx].nick, user, par);
       }
+      noshare = 0;
     }
   }
 }
@@ -403,18 +380,11 @@ static void share_mns_chrec(int idx, char *par)
       chan = findchan_by_dname(par);
       fr.match = (FR_CHAN | FR_BOT);
       get_user_flagrec(dcc[idx].user, &fr, par);
-      if (!chan || !channel_shared(chan) ||
-	  !(bot_chan(fr) || bot_global(fr)))
-	putlog(LOG_CMDS, "*",
-	       "Rejected info for unshared channel %s from %s",
-	       par, dcc[idx].nick);
-      else {
-	noshare = 1;
-	del_chanrec(u, par);
-	shareout_but(chan, idx, "-cr %s %s\n", user, par);
-	noshare = 0;
-	putlog(LOG_CMDS, "@", "%s: -chrec %s %s", dcc[idx].nick, user, par);
-      }
+      noshare = 1;
+      del_chanrec(u, par);
+      shareout_but(chan, idx, "-cr %s %s\n", user, par);
+      noshare = 0;
+      putlog(LOG_CMDS, "@", "%s: -chrec %s %s", dcc[idx].nick, user, par);
     }
   }
 }
@@ -473,13 +443,8 @@ static void share_newuser(int idx, char *par)
 
 static void share_killuser(int idx, char *par)
 {
-  struct userrec *u = NULL;
-
   /* If user is a share bot, ignore command */
-  if ((dcc[idx].status & STAT_SHARE) && !private_user &&
-      (u = get_user_by_handle(userlist, par)) &&
-      !(u->flags & USER_UNSHARED) &&
-      !((u->flags & USER_BOT) && (bot_flags(u) & BOT_SHARE))) {
+  if ((dcc[idx].status & STAT_SHARE) && !private_user) {
     noshare = 1;
     if (deluser(par)) {
       shareout_but(NULL, idx, "k %s\n", par);
@@ -624,18 +589,11 @@ static void share_chchinfo(int idx, char *par)
       cst = findchan_by_dname(chan);
       fr.match = (FR_CHAN | FR_BOT);
       get_user_flagrec(dcc[idx].user, &fr, chan);
-      if (!cst || !channel_shared(cst) || !(bot_chan(fr) || bot_global(fr)))
-	putlog(LOG_CMDS, "*",
-	       "Info line change from %s denied.  Channel %s not shared.",
-	       dcc[idx].nick, chan);
-      else {
-	shareout_but(cst, idx, "chchinfo %s %s %s\n", hand, chan, par);
-	noshare = 1;
-	set_handle_chaninfo(userlist, hand, chan, par);
-	noshare = 0;
-	putlog(LOG_CMDS, "@", "%s: change info %s %s", dcc[idx].nick,
-	       chan, hand);
-      }
+      shareout_but(cst, idx, "chchinfo %s %s %s\n", hand, chan, par);
+      noshare = 1;
+      set_handle_chaninfo(userlist, hand, chan, par);
+      noshare = 0;
+      putlog(LOG_CMDS, "@", "%s: change info %s %s", dcc[idx].nick, chan, hand);
     }
   }
 }
@@ -701,18 +659,13 @@ static void share_mns_banchan(int idx, char *par)
     chan = findchan_by_dname(chname);
     fr.match = (FR_CHAN | FR_BOT);
     get_user_flagrec(dcc[idx].user, &fr, chname);
-    if (!chan || !channel_shared(chan) ||
-        !(bot_chan(fr) || bot_global(fr)))
-      putlog(LOG_CMDS, "*", "Cancel channel ban %s on %s rejected - channel not shared.", par, chname);
-    else {
-      shareout_but(chan, idx, "-bc %s %s\n", chname, par);
-      putlog(LOG_CMDS, "@", "%s: cancel ban %s on %s", dcc[idx].nick, par, chname);
-      str_unescape(par, '\\');
-      noshare = 1;
-      if (u_delmask('b', chan, par, 1) > 0)
-	add_delay(chan, '-', 'b', par);
-      noshare = 0;
-    }
+    shareout_but(chan, idx, "-bc %s %s\n", chname, par);
+    putlog(LOG_CMDS, "@", "%s: cancel ban %s on %s", dcc[idx].nick, par, chname);
+    str_unescape(par, '\\');
+    noshare = 1;
+    if (u_delmask('b', chan, par, 1) > 0)
+      add_delay(chan, '-', 'b', par);
+    noshare = 0;
   }
 }
 
@@ -726,21 +679,13 @@ static void share_mns_exemptchan(int idx, char *par)
     chan = findchan_by_dname(chname);
     fr.match = (FR_CHAN | FR_BOT);
     get_user_flagrec(dcc[idx].user,&fr,chname);
-    if (!chan || !channel_shared(chan) ||
-        !(bot_chan(fr) || bot_global(fr)))
-      putlog(LOG_CMDS, "*",
-        "Cancel channel exempt %s on %s rejected - channel not shared.",
-        par, chname);
-    else {
-      shareout_but(chan,idx, "-ec %s %s\n", chname, par);
-      putlog(LOG_CMDS, "@", "%s: cancel exempt %s on %s", dcc[idx].nick,
-	     par, chname);
-      str_unescape(par, '\\');
-      noshare = 1;
-      if (u_delmask('e', chan, par, 1) > 0)
-	add_delay(chan, '-', 'e', par);
-      noshare = 0;
-    }
+    shareout_but(chan,idx, "-ec %s %s\n", chname, par);
+    putlog(LOG_CMDS, "@", "%s: cancel exempt %s on %s", dcc[idx].nick, par, chname);
+    str_unescape(par, '\\');
+    noshare = 1;
+    if (u_delmask('e', chan, par, 1) > 0)
+      add_delay(chan, '-', 'e', par);
+    noshare = 0;
   }
 }
 
@@ -754,21 +699,13 @@ static void share_mns_invitechan (int idx, char *par)
     chan = findchan_by_dname(chname);
     fr.match = (FR_CHAN | FR_BOT);
     get_user_flagrec(dcc[idx].user,&fr,chname);
-    if (!chan || !channel_shared(chan) ||
-        !(bot_chan(fr) || bot_global(fr)))
-      putlog(LOG_CMDS, "*",
-        "Cancel channel invite %s on %s rejected - channel not shared.",
-        par, chname);
-    else {
-      shareout_but(chan,idx, "-invc %s %s\n", chname, par);
-      putlog(LOG_CMDS, "@", "%s: cancel invite %s on %s", dcc[idx].nick,
-	     par, chname);
-      str_unescape(par, '\\');
-      noshare = 1;
-      if (u_delmask('I', chan, par, 1) > 0)
-	add_delay(chan, '-', 'I', par);
-      noshare = 0;
-    }
+    shareout_but(chan,idx, "-invc %s %s\n", chname, par);
+    putlog(LOG_CMDS, "@", "%s: cancel invite %s on %s", dcc[idx].nick, par, chname);
+    str_unescape(par, '\\');
+    noshare = 1;
+    if (u_delmask('I', chan, par, 1) > 0)
+      add_delay(chan, '-', 'I', par);
+    noshare = 0;
   }
 }
 
@@ -833,32 +770,24 @@ static void share_pls_banchan(int idx, char *par)
     chan = findchan_by_dname(chname);
     fr.match = (FR_CHAN | FR_BOT);
     get_user_flagrec(dcc[idx].user, &fr, chname);
-    if (!chan || !channel_shared(chan) ||
-	!(bot_chan(fr) || bot_global(fr)))
-      putlog(LOG_CMDS, "*",
-	     "Channel ban %s on %s rejected - channel not shared.",
-	     ban, chname);
-    else {
-      shareout_but(chan, idx, "+bc %s %s %s %s\n", ban, tm, chname, par);
-      str_unescape(ban, '\\');
-      from = newsplit(&par);
-      if (strchr(from, 's'))
-	flags |= MASKREC_STICKY;
-      if (strchr(from, 'p'))
-	flags |= MASKREC_PERM;
-      from = newsplit(&par);
-      putlog(LOG_CMDS, "@", "%s: ban %s on %s (%s:%s)", dcc[idx].nick,
-	     ban, chname, from, par);
-      noshare = 1;
-      expire_time = (time_t) atoi(tm);
-      if (expire_time != 0L)
-	expire_time += now;
-      u_addmask('b', chan, ban, from, par, expire_time, flags);
-      noshare = 0;
+    shareout_but(chan, idx, "+bc %s %s %s %s\n", ban, tm, chname, par);
+    str_unescape(ban, '\\');
+    from = newsplit(&par);
+    if (strchr(from, 's'))
+      flags |= MASKREC_STICKY;
+    if (strchr(from, 'p'))
+      flags |= MASKREC_PERM;
+    from = newsplit(&par);
+    putlog(LOG_CMDS, "@", "%s: ban %s on %s (%s:%s)", dcc[idx].nick, ban, chname, from, par);
+    noshare = 1;
+    expire_time = (time_t) atoi(tm);
+    if (expire_time != 0L)
+      expire_time += now;
+    u_addmask('b', chan, ban, from, par, expire_time, flags);
+    noshare = 0;
 #ifdef LEAF
-      check_this_ban(chan, ban, 0);
+    check_this_ban(chan, ban, 0);
 #endif /* LEAF */
-    }
   }
 }
 
@@ -908,29 +837,21 @@ static void share_pls_exemptchan(int idx, char *par)
     chan = findchan_by_dname(chname);
     fr.match = (FR_CHAN | FR_BOT);
     get_user_flagrec(dcc[idx].user,&fr,chname);
-    if (!chan || !channel_shared(chan) ||
-	!(bot_chan(fr) || bot_global(fr)))
-      putlog(LOG_CMDS, "*",
-	     "Channel exempt %s on %s rejected - channel not shared.",
-	     exempt, chname);
-    else {
-      shareout_but(chan,idx, "+ec %s %s %s %s\n", exempt, tm, chname, par);
-      str_unescape(exempt, '\\');
-      from = newsplit(&par);
-      if (strchr(from,'s'))
-	flags |= MASKREC_STICKY;
-      if (strchr(from,'p'))
-	flags |= MASKREC_PERM;
-      from = newsplit(&par);
-      putlog(LOG_CMDS, "@", "%s: exempt %s on %s (%s:%s)", dcc[idx].nick,
-	     exempt, chname, from, par);
-      noshare = 1;
-      expire_time = (time_t) atoi(tm);
-      if (expire_time != 0L)
-	expire_time += now;
-      u_addmask('e', chan, exempt, from, par, expire_time,flags);
-      noshare = 0;
-    }
+    shareout_but(chan,idx, "+ec %s %s %s %s\n", exempt, tm, chname, par);
+    str_unescape(exempt, '\\');
+    from = newsplit(&par);
+    if (strchr(from,'s'))
+      flags |= MASKREC_STICKY;
+    if (strchr(from,'p'))
+      flags |= MASKREC_PERM;
+    from = newsplit(&par);
+    putlog(LOG_CMDS, "@", "%s: exempt %s on %s (%s:%s)", dcc[idx].nick, exempt, chname, from, par);
+    noshare = 1;
+    expire_time = (time_t) atoi(tm);
+    if (expire_time != 0L)
+      expire_time += now;
+    u_addmask('e', chan, exempt, from, par, expire_time,flags);
+    noshare = 0;
   }
 }
 
@@ -980,29 +901,21 @@ static void share_pls_invitechan(int idx, char *par)
     chan = findchan_by_dname(chname);
     fr.match = (FR_CHAN | FR_BOT);
     get_user_flagrec(dcc[idx].user,&fr,chname);
-    if (!chan || !channel_shared(chan) ||
-	!(bot_chan(fr) || bot_global(fr)))
-      putlog(LOG_CMDS, "*",
-	     "Channel invite %s on %s rejected - channel not shared.",
-	     invite, chname);
-    else {
-      shareout_but(chan,idx, "+invc %s %s %s %s\n", invite, tm, chname, par);
-      str_unescape(invite, '\\');
-      from = newsplit(&par);
-      if (strchr(from,'s'))
-	flags |= MASKREC_STICKY;
-      if (strchr(from,'p'))
-	flags |= MASKREC_PERM;
-      from = newsplit(&par);
-      putlog(LOG_CMDS, "@", "%s: invite %s on %s (%s:%s)", dcc[idx].nick,
-	     invite, chname, from, par);
-      noshare = 1;
-      expire_time = (time_t) atoi(tm);
-      if (expire_time != 0L)
-	expire_time += now;
-      u_addmask('I', chan, invite, from, par, expire_time,flags);
-      noshare = 0;
-    }
+    shareout_but(chan,idx, "+invc %s %s %s %s\n", invite, tm, chname, par);
+    str_unescape(invite, '\\');
+    from = newsplit(&par);
+    if (strchr(from,'s'))
+      flags |= MASKREC_STICKY;
+    if (strchr(from,'p'))
+      flags |= MASKREC_PERM;
+    from = newsplit(&par);
+    putlog(LOG_CMDS, "@", "%s: invite %s on %s (%s:%s)", dcc[idx].nick, invite, chname, from, par);
+    noshare = 1;
+    expire_time = (time_t) atoi(tm);
+    if (expire_time != 0L)
+      expire_time += now;
+    u_addmask('I', chan, invite, from, par, expire_time,flags);
+    noshare = 0;
   }
 }
 
@@ -1325,24 +1238,19 @@ void shareout(struct chanset_t *chan, ...)
   va_list va;
 
   va_start(va, chan);
-  if (!chan || channel_shared(chan)) {
-    format = va_arg(va, char *);
-    strcpy(s, "s ");
-    if ((l = egg_vsnprintf(s + 2, 509, format, va)) < 0)
-      s[2 + (l = 509)] = 0;
-    for (i = 0; i < dcc_total; i++)
-      if ((dcc[i].type->flags & DCT_BOT) &&
-	  (dcc[i].status & STAT_SHARE) &&
-	  !(dcc[i].status & (STAT_GETTING | STAT_SENDING))) {
-	if (chan) {
-	  fr.match = (FR_CHAN | FR_BOT);
-	  get_user_flagrec(dcc[i].user, &fr, chan->dname);
-	}
-	if (!chan || bot_chan(fr) || bot_global(fr))
-	  tputs(dcc[i].sock, s, l + 2);
+  format = va_arg(va, char *);
+  strcpy(s, "s ");
+  if ((l = egg_vsnprintf(s + 2, 509, format, va)) < 0)
+    s[2 + (l = 509)] = 0;
+  for (i = 0; i < dcc_total; i++)
+    if ((dcc[i].type->flags & DCT_BOT) && (dcc[i].status & STAT_SHARE) && !(dcc[i].status & (STAT_GETTING | STAT_SENDING))) {
+      if (chan) {
+        fr.match = (FR_CHAN | FR_BOT);
+	get_user_flagrec(dcc[i].user, &fr, chan->dname);
       }
-    q_resync(s, chan);
-  }
+      tputs(dcc[i].sock, s, l + 2);
+    }
+  q_resync(s, chan);
   va_end(va);
 }
 
@@ -1368,8 +1276,7 @@ static void shareout_but (struct chanset_t *chan, ...)
 	fr.match = (FR_CHAN | FR_BOT);
 	get_user_flagrec(dcc[i].user, &fr, chan->dname);
       }
-      if (!chan || bot_chan(fr) || bot_global(fr))
-	tputs(dcc[i].sock, s, l + 2);
+      tputs(dcc[i].sock, s, l + 2);
     }
   q_resync(s, chan);
   va_end(va);
@@ -1509,8 +1416,7 @@ static void q_tbuf(char *bot, char *s, struct chanset_t *chan)
 	fr.match = (FR_CHAN | FR_BOT);
 	get_user_flagrec(get_user_by_handle(userlist, bot), &fr, chan->dname);
       }
-      if ((!chan || bot_chan(fr) || bot_global(fr))
-	  && (q = q_addmsg(t->q, chan, s)))
+      if ((q = q_addmsg(t->q, chan, s)))
 	t->q = q;
       break;
     }
@@ -1530,9 +1436,8 @@ static void q_resync(char *s, struct chanset_t *chan)
       get_user_flagrec(get_user_by_handle(userlist, t->bot), &fr,
 	chan->dname);
       }
-      if ((!chan || bot_chan(fr) || bot_global(fr))
-	  && (q = q_addmsg(t->q, chan, s)))
-      t->q = q;
+      if ((q = q_addmsg(t->q, chan, s)))
+        t->q = q;
     }
 }
 
@@ -1569,7 +1474,8 @@ void dump_resync(int idx)
  */
 static void status_tbufs(int idx)
 {
-  int count, off = 0;
+  int count;
+  size_t off = 0;
   struct share_msgq *q = NULL;
   char s[121] = "";
   tandbuf *t = NULL;
@@ -1753,18 +1659,14 @@ void finish_share(int idx)
     u_delmask('I', NULL, global_invites->mask, 1);
   while (global_exempts)
     u_delmask('e', NULL, global_exempts->mask, 1);
-  for (chan = chanset; chan; chan = chan->next)
-    if (channel_shared(chan)) {
-      get_user_flagrec(dcc[j].user, &fr, chan->dname);
-      if (bot_chan(fr) || bot_global(fr)) {
-	while (chan->bans)
-	  u_delmask('b', chan, chan->bans->mask, 1);
-	while (chan->exempts)
-	  u_delmask('e', chan, chan->exempts->mask, 1);
-	while (chan->invites)
-	  u_delmask('I', chan, chan->invites->mask, 1);
-      }
-    }
+  for (chan = chanset; chan; chan = chan->next) {
+    while (chan->bans)
+      u_delmask('b', chan, chan->bans->mask, 1);
+    while (chan->exempts)
+      u_delmask('e', chan, chan->exempts->mask, 1);
+    while (chan->invites)
+      u_delmask('I', chan, chan->invites->mask, 1);
+  }
   noshare = 0;
   ou = userlist;		/* Save old user list			*/
   userlist = (void *) -1;	/* Do this to prevent .user messups	*/
@@ -1866,33 +1768,15 @@ Context;
 
 	cr_next = cr->next;
 	if (mychan) {
-	  int not_shared = 0;
-
-	  if (!channel_shared(mychan))
-	    not_shared = 1;
-	  else {
-	    get_user_flagrec(dcc[j].user, &fr, mychan->dname);
-	    if (!bot_chan(fr) && !bot_global(fr))
-	      not_shared = 1;
-	  }
-	  if (not_shared) {
-	    del_chanrec(u, cr->channel);
-	    if (cr_old)
-	      cr_old->next = cr_next;
-	    else
-	      u2->chanrec = cr_next;
-	    cr->next = u->chanrec;
-	    u->chanrec = cr;
-	  } else {
-	    /* Shared channel, still keep old laston time */
-	    for (cr_old = u->chanrec; cr_old; cr_old = cr_old->next)
-	      if (!rfc_casecmp(cr_old->channel, cr->channel)) {
-		cr_old->laston = cr->laston;
-		break;
-	      }
-	    cr_old = cr;
-	  }
+          get_user_flagrec(dcc[j].user, &fr, mychan->dname);
 	}
+        /* Shared channel, still keep old laston time */
+        for (cr_old = u->chanrec; cr_old; cr_old = cr_old->next)
+	  if (!rfc_casecmp(cr_old->channel, cr->channel)) {
+	    cr_old->laston = cr->laston;
+	    break;
+	  }
+	cr_old = cr;
       }
       noshare = 0;
       /* Any unshared user entries need copying over */
@@ -1991,22 +1875,6 @@ static void start_sending_users(int idx)
 	  build_flags(s1, &fr, NULL);
 	  egg_snprintf(s2, sizeof s2, "s a %s %s\n", u->handle, s1);
 	  q_tbuf(dcc[idx].nick, s2, NULL);
-	  for (ch = u->chanrec; ch; ch = ch->next) {
-	    if ((ch->flags & ~BOT_SHARE) &&
-		((cst = findchan_by_dname(ch->channel)) &&
-		 channel_shared(cst))) {
-	      fr.match = (FR_CHAN | FR_BOT);
-	      get_user_flagrec(dcc[idx].user, &fr, ch->channel);
-	      if (bot_chan(fr) || bot_global(fr)) {
-	        fr.match = FR_CHAN;
-	        fr.chan = ch->flags & ~BOT_SHARE;
-	        build_flags(s1, &fr, NULL);
-	        egg_snprintf(s2, sizeof s2, "s a %s %s %s\n", u->handle, s1,
-			     ch->channel);
-	        q_tbuf(dcc[idx].nick, s2, cst);
-	      }
-	    }
-	  }
         }
       }
     }

+ 3 - 3
src/userent.c

@@ -751,16 +751,16 @@ static int botaddr_pack(struct userrec *u, struct user_entry *e)
 {
   char work[1024] = "";
   struct bot_addr *bi = NULL;
-  int l;
+  size_t len;
 
   Assert(e);
   Assert(!e->name);
   bi = (struct bot_addr *) e->u.extra;
-  l = simple_sprintf(work, "%s:%u/%u:%u:%s", bi->address, bi->telnet_port, bi->relay_port, bi->hublevel, bi->uplink);
+  len = simple_sprintf(work, "%s:%u/%u:%u:%s", bi->address, bi->telnet_port, bi->relay_port, bi->hublevel, bi->uplink);
   e->u.list = calloc(1, sizeof(struct list_type));
 
   e->u.list->next = NULL;
-  e->u.list->extra = calloc(1, l + 1);
+  e->u.list->extra = calloc(1, len + 1);
   strcpy(e->u.list->extra, work);
   free(bi->address);
   free(bi->uplink);

+ 6 - 9
src/userrec.c

@@ -301,15 +301,12 @@ int write_user(struct userrec *u, FILE * f, int idx)
       if (idx >= 0) {
 	fr.match = (FR_CHAN | FR_BOT);
 	get_user_flagrec(dcc[idx].user, &fr, ch->channel);
-      } else
-	fr.chan = BOT_SHARE;
-      if ((fr.chan & BOT_SHARE) || (1)) {
-	fr.match = FR_CHAN;
-	fr.chan = ch->flags;
-	build_flags(s, &fr, NULL);
-	if (lfprintf(f, "! %-20s %lu %-10s %s\n", ch->channel, ch->laston, s, ch->info ? ch->info : "") == EOF)
-	  return 0;
-      }
+      } 
+      fr.match = FR_CHAN;
+      fr.chan = ch->flags;
+      build_flags(s, &fr, NULL);
+      if (lfprintf(f, "! %-20s %lu %-10s %s\n", ch->channel, ch->laston, s, ch->info ? ch->info : "") == EOF)
+        return 0;
     }
   }
   for (ue = u->entries; ue; ue = ue->next) {