Bläddra i källkod

Applied fixes for eggdrop1.6.15 from eggdrop cvs

svn: 69
Eggheads Development Team (Ported by Bryan) 23 år sedan
förälder
incheckning
c060be95d1
8 ändrade filer med 186 tillägg och 119 borttagningar
  1. 1 0
      doc/UPDATES
  2. 1 1
      src/mem.c
  3. 1 2
      src/misc.c
  4. 156 109
      src/mod/channels.mod/cmdschan.c
  5. 8 4
      src/mod/irc.mod/msgcmds.c
  6. 3 3
      src/mod/server.mod/server.c
  7. 2 0
      src/tclmisc.c
  8. 14 0
      src/tcluser.c

+ 1 - 0
doc/UPDATES

@@ -20,6 +20,7 @@
 + 9.Specifying ipv6 ip as last param in conf now supported.
 + 9.Specifying ipv6 ip as last param in conf now supported.
 @ 10.Cmdline params -e/-d now except STDOUT as the outfile (echos to terminal).
 @ 10.Cmdline params -e/-d now except STDOUT as the outfile (echos to terminal).
 @ 11.Pscloak can be disabled by putting "!-" as the third line in the local conf.
 @ 11.Pscloak can be disabled by putting "!-" as the third line in the local conf.
+@ 12.Applied fixes for eggdrop1.6.15 from eggcvs.
 
 
 1.0.1
 1.0.1
 ! 1.Fixed a cosmetic bug in show_channels
 ! 1.Fixed a cosmetic bug in show_channels

+ 1 - 1
src/mem.c

@@ -325,7 +325,7 @@ void *n_realloc(void *ptr, int size, const char *file, int line)
     return n_malloc(size, file, line);
     return n_malloc(size, file, line);
 
 
   x = (void *) realloc(ptr, size);
   x = (void *) realloc(ptr, size);
-  if (x == NULL) {
+  if (x == NULL && size > 0) {
     i = i;
     i = i;
     putlog(LOG_MISC, "*", "*** FAILED REALLOC %s (%d)", file, line);
     putlog(LOG_MISC, "*", "*** FAILED REALLOC %s (%d)", file, line);
     return NULL;
     return NULL;

+ 1 - 2
src/misc.c

@@ -1027,7 +1027,6 @@ void putlog EGG_VARARGS_DEF(int, arg1)
   time_t now2 = time(NULL);
   time_t now2 = time(NULL);
 #endif
 #endif
   struct tm *t;
   struct tm *t;
-  t = 0;
   type = EGG_VARARGS_START(int, arg1, va);
   type = EGG_VARARGS_START(int, arg1, va);
   chname = va_arg(va, char *);
   chname = va_arg(va, char *);
   format = va_arg(va, char *);
   format = va_arg(va, char *);
@@ -1035,8 +1034,8 @@ void putlog EGG_VARARGS_DEF(int, arg1)
   if ((chname[0] == '*'))
   if ((chname[0] == '*'))
     dohl = 1;
     dohl = 1;
 #ifdef HUB
 #ifdef HUB
+  t = localtime(&now2);
   if (shtime) {
   if (shtime) {
-    t = localtime(&now2);
     egg_strftime(stamp, sizeof(stamp) - 2, LOG_TS, t);
     egg_strftime(stamp, sizeof(stamp) - 2, LOG_TS, t);
     strcat(stamp, " ");
     strcat(stamp, " ");
    tsl = strlen(stamp);
    tsl = strlen(stamp);

+ 156 - 109
src/mod/channels.mod/cmdschan.c

@@ -420,7 +420,8 @@ static void cmd_mns_ban(struct userrec *u, int idx, char *par)
     if (!chname)
     if (!chname)
       chname = dcc[idx].u.chat->con_chan;
       chname = dcc[idx].u.chat->con_chan;
     get_user_flagrec(u, &user, chname);
     get_user_flagrec(u, &user, chname);
-    if (!((glob_op(user) && !chan_deop(user)) || chan_op(user))) {
+
+    if ((!chan_op(user) && (!glob_op(user) || chan_deop(user)))) {
       dprintf(idx, "You don't have access to remove bans on %s.\n", chname);
       dprintf(idx, "You don't have access to remove bans on %s.\n", chname);
       return;
       return;
     }
     }
@@ -432,7 +433,7 @@ static void cmd_mns_ban(struct userrec *u, int idx, char *par)
       if (lastdeletedmask)
       if (lastdeletedmask)
         mask = lastdeletedmask;
         mask = lastdeletedmask;
       else
       else
-       mask = s;
+        mask = s;
       putlog(LOG_CMDS, "*", "#%s# -ban %s", dcc[idx].nick, mask);
       putlog(LOG_CMDS, "*", "#%s# -ban %s", dcc[idx].nick, mask);
       dprintf(idx, "%s: %s\n", IRC_REMOVEDBAN, mask);
       dprintf(idx, "%s: %s\n", IRC_REMOVEDBAN, mask);
       for (chan = chanset; chan != NULL; chan = chan->next)
       for (chan = chanset; chan != NULL; chan = chan->next)
@@ -448,18 +449,23 @@ static void cmd_mns_ban(struct userrec *u, int idx, char *par)
     return;
     return;
   }
   }
   if ((i = atoi(ban)) > 0) {
   if ((i = atoi(ban)) > 0) {
+    /* substract the numer of global bans to get the number of the channel ban */
     egg_snprintf(s, sizeof s, "%d", i);
     egg_snprintf(s, sizeof s, "%d", i);
-    j = u_delban(chan, s, 1);
-    if (j > 0) {
-      if (lastdeletedmask)
-        mask = lastdeletedmask;
-      else
-       mask = s;
-      putlog(LOG_CMDS, "*", "#%s# (%s) -ban %s", dcc[idx].nick, chan->dname,
-             mask);
-      dprintf(idx, "Removed %s channel ban: %s\n", chan->dname, mask);
-      add_mode(chan, '-', 'b', mask);
-      return;
+    j = u_delban(0, s, 0);
+    if (j < 0) {
+      egg_snprintf(s, sizeof s, "%d", -j);
+      j = u_delban(chan, s, 1);
+      if (j > 0) {
+        if (lastdeletedmask)
+          mask = lastdeletedmask;
+        else
+          mask = s;
+        putlog(LOG_CMDS, "*", "#%s# (%s) -ban %s", dcc[idx].nick, chan->dname,
+               mask);
+        dprintf(idx, "Removed %s channel ban: %s\n", chan->dname, mask);
+        add_mode(chan, '-', 'b', mask);
+        return;
+      }
     }
     }
     i = 0;
     i = 0;
     for (b = chan->channel.ban; b && b->mask && b->mask[0]; b = b->next) {
     for (b = chan->channel.ban; b && b->mask && b->mask[0]; b = b->next) {
@@ -488,8 +494,7 @@ static void cmd_mns_ban(struct userrec *u, int idx, char *par)
     for (b = chan->channel.ban; b && b->mask && b->mask[0]; b = b->next) {
     for (b = chan->channel.ban; b && b->mask && b->mask[0]; b = b->next) {
       if (!rfc_casecmp(b->mask, ban)) {
       if (!rfc_casecmp(b->mask, ban)) {
         add_mode(chan, '-', 'b', b->mask);
         add_mode(chan, '-', 'b', b->mask);
-        dprintf(idx, "%s '%s' on %s.\n",
-                IRC_REMOVEDBAN, b->mask, chan->dname);
+        dprintf(idx, "%s '%s' on %s.\n", IRC_REMOVEDBAN, b->mask, chan->dname);
         putlog(LOG_CMDS, "*", "#%s# (%s) -ban %s [on channel]",
         putlog(LOG_CMDS, "*", "#%s# (%s) -ban %s [on channel]",
                dcc[idx].nick, dcc[idx].u.chat->con_chan, ban);
                dcc[idx].nick, dcc[idx].u.chat->con_chan, ban);
         return;
         return;
@@ -498,12 +503,13 @@ static void cmd_mns_ban(struct userrec *u, int idx, char *par)
   }
   }
   dprintf(idx, "No such ban.\n");
   dprintf(idx, "No such ban.\n");
 }
 }
+
 #ifdef S_IRCNET
 #ifdef S_IRCNET
 static void cmd_mns_exempt (struct userrec *u, int idx, char *par)
 static void cmd_mns_exempt (struct userrec *u, int idx, char *par)
 {
 {
-  int i = 0, j;
+  int console = 0, i = 0, j;
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
-  char s[UHOSTLEN], *exempt, *chname;
+  char s[UHOSTLEN], *exempt, *chname, *mask;
   masklist *e;
   masklist *e;
 
 
   if (!use_exempts) {
   if (!use_exempts) {
@@ -517,84 +523,104 @@ static void cmd_mns_exempt (struct userrec *u, int idx, char *par)
   exempt = newsplit(&par);
   exempt = newsplit(&par);
   if (par[0] && strchr(CHANMETA, par[0]))
   if (par[0] && strchr(CHANMETA, par[0]))
     chname = newsplit(&par);
     chname = newsplit(&par);
-  else
+  else {
     chname = dcc[idx].u.chat->con_chan;
     chname = dcc[idx].u.chat->con_chan;
+    console = 1;
+  }
   if (chname || !(u->flags & USER_MASTER)) {
   if (chname || !(u->flags & USER_MASTER)) {
     if (!chname)
     if (!chname)
       chname = dcc[idx].u.chat->con_chan;
       chname = dcc[idx].u.chat->con_chan;
-    get_user_flagrec(u,&user,chname);
-    if (!((glob_op(user) && !chan_deop(user)) || chan_op(user))) {
+    get_user_flagrec(u, &user, chname);
+    if ((!chan_op(user) && (!glob_op(user) || chan_deop(user)))) {
       dprintf(idx, "You don't have access to remove exempts on %s.\n", chname);
       dprintf(idx, "You don't have access to remove exempts on %s.\n", chname);
       return;
       return;
     }
     }
   }
   }
   strncpyz(s, exempt, sizeof s);
   strncpyz(s, exempt, sizeof s);
-  i = u_delexempt(NULL, s, (u->flags & USER_MASTER));
-  if (i > 0) {
-    putlog(LOG_CMDS, "*", "#%s# -exempt %s", dcc[idx].nick, s);
-    dprintf(idx, "%s: %s\n", IRC_REMOVEDEXEMPT, s);
-    for (chan = chanset; chan != NULL; chan = chan->next)
-      add_mode(chan, '-', 'e', s);
-    return;
+  if (console) {
+    i = u_delexempt(NULL, s, (u->flags & USER_MASTER));
+    if (i > 0) {
+      if (lastdeletedmask)
+        mask = lastdeletedmask;
+      else
+        mask = s;
+      putlog(LOG_CMDS, "*", "#%s# -exempt %s", dcc[idx].nick, mask);
+      dprintf(idx, "%s: %s\n", IRC_REMOVEDEXEMPT, mask);
+      for (chan = chanset; chan != NULL; chan = chan->next)
+        add_mode(chan, '-', 'e', mask);
+      return;
+    }
   }
   }
   /* Channel-specific exempt? */
   /* Channel-specific exempt? */
   if (chname)
   if (chname)
     chan = findchan_by_dname(chname);
     chan = findchan_by_dname(chname);
   if (chan) {
   if (chan) {
-    if (atoi(exempt) > 0) {
-      egg_snprintf(s, sizeof s, "%d", -i);
-      j = u_delexempt(chan, s, 1);
-      if (j > 0) {
-	putlog(LOG_CMDS, "*", "#%s# (%s) -exempt %s", dcc[idx].nick,
-	       chan->dname, s);
-	dprintf(idx, "Removed %s channel exempt: %s\n", chan->dname, s);
-	add_mode(chan, '-', 'e', s);
-	return;
+    if ((i = atoi(exempt)) > 0) {
+      /* substract the numer of global exempts to get the number of the channel exempt */
+      egg_snprintf(s, sizeof s, "%d", i);
+      j = u_delexempt(0, s, 0);
+      if (j < 0) {
+        egg_snprintf(s, sizeof s, "%d", -j);
+        j = u_delexempt(chan, s, 1);
+        if (j > 0) {
+          if (lastdeletedmask)
+            mask = lastdeletedmask;
+          else
+            mask = s;
+          putlog(LOG_CMDS, "*", "#%s# (%s) -exempt %s", dcc[idx].nick,
+                 chan->dname, mask);
+          dprintf(idx, "Removed %s channel exempt: %s\n", chan->dname, mask);
+          add_mode(chan, '-', 'e', mask);
+          return;
+        }
       }
       }
       i = 0;
       i = 0;
       for (e = chan->channel.exempt; e && e->mask && e->mask[0]; e = e->next) {
       for (e = chan->channel.exempt; e && e->mask && e->mask[0]; e = e->next) {
-	if (!u_equals_mask(global_exempts, e->mask) &&
-	    !u_equals_mask(chan->exempts, e->mask)) {
-	  i++;
-	  if (i == -j) {
-	    add_mode(chan, '-', 'e', e->mask);
-	    dprintf(idx, "%s '%s' on %s.\n", IRC_REMOVEDEXEMPT,
-		    e->mask, chan->dname);
-	    putlog(LOG_CMDS, "*", "#%s# (%s) -exempt %s [on channel]",
-		   dcc[idx].nick, dcc[idx].u.chat->con_chan, exempt);
-	    return;
-	  }
-	}
+        if (!u_equals_mask(global_exempts, e->mask) &&
+            !u_equals_mask(chan->exempts, e->mask)) {
+          i++;
+          if (i == -j) {
+            add_mode(chan, '-', 'e', e->mask);
+            dprintf(idx, "%s '%s' on %s.\n", IRC_REMOVEDEXEMPT,
+                    e->mask, chan->dname);
+            putlog(LOG_CMDS, "*", "#%s# (%s) -exempt %s [on channel]",
+                   dcc[idx].nick, dcc[idx].u.chat->con_chan, exempt);
+            return;
+          }
+        }
       }
       }
     } else {
     } else {
       j = u_delexempt(chan, exempt, 1);
       j = u_delexempt(chan, exempt, 1);
       if (j > 0) {
       if (j > 0) {
-	putlog(LOG_CMDS, "*", "#%s# (%s) -exempt %s", dcc[idx].nick,
-	       dcc[idx].u.chat->con_chan, exempt);
-	dprintf(idx, "Removed %s channel exempt: %s\n", chname, exempt);
-	add_mode(chan, '-', 'e', exempt);
-	return;
+        putlog(LOG_CMDS, "*", "#%s# (%s) -exempt %s", dcc[idx].nick,
+               dcc[idx].u.chat->con_chan, exempt);
+        dprintf(idx, "Removed %s channel exempt: %s\n", chname, exempt);
+        add_mode(chan, '-', 'e', exempt);
+        return;
       }
       }
       for (e = chan->channel.exempt; e && e->mask && e->mask[0]; e = e->next) {
       for (e = chan->channel.exempt; e && e->mask && e->mask[0]; e = e->next) {
-	if (!rfc_casecmp(e->mask, exempt)) {
-	  add_mode(chan, '-', 'e', e->mask);
-	  dprintf(idx, "%s '%s' on %s.\n",
-		  IRC_REMOVEDEXEMPT, e->mask, chan->dname);
-	  putlog(LOG_CMDS, "*", "#%s# (%s) -exempt %s [on channel]",
-		 dcc[idx].nick, dcc[idx].u.chat->con_chan, exempt);
-	  return;
-	}
+        if (!rfc_casecmp(e->mask, exempt)) {
+          add_mode(chan, '-', 'e', e->mask);
+          dprintf(idx, "%s '%s' on %s.\n",
+                  IRC_REMOVEDEXEMPT, e->mask, chan->dname);
+          putlog(LOG_CMDS, "*", "#%s# (%s) -exempt %s [on channel]",
+                 dcc[idx].nick, dcc[idx].u.chat->con_chan, exempt);
+          return;
+        }
       }
       }
     }
     }
+  } else {
+    dprintf(idx, "Invalid channel.\n");
+    return;
   }
   }
   dprintf(idx, "No such exemption.\n");
   dprintf(idx, "No such exemption.\n");
 }
 }
 
 
 static void cmd_mns_invite (struct userrec *u, int idx, char *par)
 static void cmd_mns_invite (struct userrec *u, int idx, char *par)
 {
 {
-  int i = 0, j;
+  int console = 0, i = 0, j;
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
-  char s[UHOSTLEN], *invite, *chname;
+  char s[UHOSTLEN], *invite, *chname, *mask;
   masklist *inv;
   masklist *inv;
 
 
   if (!use_invites) {
   if (!use_invites) {
@@ -608,80 +634,101 @@ static void cmd_mns_invite (struct userrec *u, int idx, char *par)
   invite = newsplit(&par);
   invite = newsplit(&par);
   if (par[0] && strchr(CHANMETA, par[0]))
   if (par[0] && strchr(CHANMETA, par[0]))
     chname = newsplit(&par);
     chname = newsplit(&par);
-  else
+  else {
     chname = dcc[idx].u.chat->con_chan;
     chname = dcc[idx].u.chat->con_chan;
+    console = 1;
+  }
   if (chname || !(u->flags & USER_MASTER)) {
   if (chname || !(u->flags & USER_MASTER)) {
     if (!chname)
     if (!chname)
       chname = dcc[idx].u.chat->con_chan;
       chname = dcc[idx].u.chat->con_chan;
-    get_user_flagrec(u,&user,chname);
-    if (!((glob_op(user) && !chan_deop(user)) || chan_op(user))) {
+    get_user_flagrec(u, &user, chname);
+    if ((!chan_op(user) && (!glob_op(user) || chan_deop(user)))) {
       dprintf(idx, "You don't have access to remove invites on %s.\n", chname);
       dprintf(idx, "You don't have access to remove invites on %s.\n", chname);
       return;
       return;
     }
     }
   }
   }
   strncpyz(s, invite, sizeof s);
   strncpyz(s, invite, sizeof s);
-  i = u_delinvite(NULL, s, (u->flags & USER_MASTER));
-  if (i > 0) {
-    putlog(LOG_CMDS, "*", "#%s# -invite %s", dcc[idx].nick, s);
-    dprintf(idx, "%s: %s\n", IRC_REMOVEDINVITE, s);
-    for (chan = chanset; chan != NULL; chan = chan->next)
-      add_mode(chan, '-', 'I', s);
-    return;
+  if (console) {
+    i = u_delinvite(NULL, s, (u->flags & USER_MASTER));
+    if (i > 0) {
+      if (lastdeletedmask)
+        mask = lastdeletedmask;
+      else
+        mask = s;
+      putlog(LOG_CMDS, "*", "#%s# -invite %s", dcc[idx].nick, mask);
+      dprintf(idx, "%s: %s\n", IRC_REMOVEDINVITE, mask);
+      for (chan = chanset; chan != NULL; chan = chan->next)
+        add_mode(chan, '-', 'I', mask);
+      return;
+    }
   }
   }
   /* Channel-specific invite? */
   /* Channel-specific invite? */
   if (chname)
   if (chname)
     chan = findchan_by_dname(chname);
     chan = findchan_by_dname(chname);
   if (chan) {
   if (chan) {
-    if (atoi(invite) > 0) {
-      egg_snprintf(s, sizeof s, "%d", -i);
-      j = u_delinvite(chan, s, 1);
-      if (j > 0) {
-	putlog(LOG_CMDS, "*", "#%s# (%s) -invite %s", dcc[idx].nick,
-	       chan->dname, s);
-	dprintf(idx, "Removed %s channel invite: %s\n", chan->dname, s);
-	add_mode(chan, '-', 'I', s);
-	return;
+    if ((i = atoi(invite)) > 0) {
+      /* substract the numer of global invites to get the number of the channel invite */
+      egg_snprintf(s, sizeof s, "%d", i);
+      j = u_delinvite(0, s, 0);
+      if (j < 0) {
+        egg_snprintf(s, sizeof s, "%d", -j);
+        j = u_delinvite(chan, s, 1);
+        if (j > 0) {
+          if (lastdeletedmask)
+            mask = lastdeletedmask;
+          else
+            mask = s;
+          putlog(LOG_CMDS, "*", "#%s# (%s) -invite %s", dcc[idx].nick,
+                 chan->dname, mask);
+          dprintf(idx, "Removed %s channel invite: %s\n", chan->dname, mask);
+          add_mode(chan, '-', 'I', mask);
+          return;
+        }
       }
       }
       i = 0;
       i = 0;
       for (inv = chan->channel.invite; inv && inv->mask && inv->mask[0];
       for (inv = chan->channel.invite; inv && inv->mask && inv->mask[0];
-	   inv = inv->next) {
-	if (!u_equals_mask(global_invites, inv->mask) &&
-	    !u_equals_mask(chan->invites, inv->mask)) {
-	  i++;
-	  if (i == -j) {
-	    add_mode(chan, '-', 'I', inv->mask);
-	    dprintf(idx, "%s '%s' on %s.\n", IRC_REMOVEDINVITE,
-		    inv->mask, chan->dname);
-	    putlog(LOG_CMDS, "*", "#%s# (%s) -invite %s [on channel]",
-		   dcc[idx].nick, dcc[idx].u.chat->con_chan, invite);
-	    return;
-	  }
-	}
+           inv = inv->next) {
+        if (!u_equals_mask(global_invites, inv->mask) &&
+            !u_equals_mask(chan->invites, inv->mask)) {
+          i++;
+          if (i == -j) {
+            add_mode(chan, '-', 'I', inv->mask);
+            dprintf(idx, "%s '%s' on %s.\n", IRC_REMOVEDINVITE,
+                    inv->mask, chan->dname);
+            putlog(LOG_CMDS, "*", "#%s# (%s) -invite %s [on channel]",
+                   dcc[idx].nick, dcc[idx].u.chat->con_chan, invite);
+            return;
+          }
+        }
       }
       }
     } else {
     } else {
       j = u_delinvite(chan, invite, 1);
       j = u_delinvite(chan, invite, 1);
       if (j > 0) {
       if (j > 0) {
-	putlog(LOG_CMDS, "*", "#%s# (%s) -invite %s", dcc[idx].nick,
-	       dcc[idx].u.chat->con_chan, invite);
-	dprintf(idx, "Removed %s channel invite: %s\n", chname, invite);
-	add_mode(chan, '-', 'I', invite);
-	return;
+        putlog(LOG_CMDS, "*", "#%s# (%s) -invite %s", dcc[idx].nick,
+               dcc[idx].u.chat->con_chan, invite);
+        dprintf(idx, "Removed %s channel invite: %s\n", chname, invite);
+        add_mode(chan, '-', 'I', invite);
+        return;
       }
       }
       for (inv = chan->channel.invite; inv && inv->mask && inv->mask[0];
       for (inv = chan->channel.invite; inv && inv->mask && inv->mask[0];
-	   inv = inv->next) {
-	if (!rfc_casecmp(inv->mask, invite)) {
-	  add_mode(chan, '-', 'I', inv->mask);
-	  dprintf(idx, "%s '%s' on %s.\n",
-		  IRC_REMOVEDINVITE, inv->mask, chan->dname);
-	  putlog(LOG_CMDS, "*", "#%s# (%s) -invite %s [on channel]",
-		 dcc[idx].nick, dcc[idx].u.chat->con_chan, invite);
-	  return;
-	}
+           inv = inv->next) {
+        if (!rfc_casecmp(inv->mask, invite)) {
+          add_mode(chan, '-', 'I', inv->mask);
+          dprintf(idx, "%s '%s' on %s.\n",
+                  IRC_REMOVEDINVITE, inv->mask, chan->dname);
+          putlog(LOG_CMDS, "*", "#%s# (%s) -invite %s [on channel]",
+                 dcc[idx].nick, dcc[idx].u.chat->con_chan, invite);
+          return;
+        }
       }
       }
     }
     }
+  } else {
+    dprintf(idx, "Invalid channel.\n");
+    return;
   }
   }
   dprintf(idx, "No such invite.\n");
   dprintf(idx, "No such invite.\n");
 }
 }
+
 #endif
 #endif
 static void cmd_bans(struct userrec *u, int idx, char *par)
 static void cmd_bans(struct userrec *u, int idx, char *par)
 {
 {

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

@@ -82,12 +82,16 @@ static int msg_ident(char *nick, char *host, struct userrec *u, char *par)
       if (!quiet_reject)
       if (!quiet_reject)
 	dprintf(DP_HELP, "NOTICE %s :%s\n", nick, IRC_DENYACCESS);
 	dprintf(DP_HELP, "NOTICE %s :%s\n", nick, IRC_DENYACCESS);
     } else if (u == u2) {
     } else if (u == u2) {
-      if (!quiet_reject)
-	dprintf(DP_HELP, "NOTICE %s :%s\n", nick, IRC_RECOGNIZED);
+      /*
+       * NOTE: Checking quiet_reject *after* u_pass_match()
+       * verifies the password makes NO sense!
+       * (Broken since 1.3.0+bel17)  Bad Beldin! No Cookie!
+       *   -Toth  [July 30, 2003]
+       */
+      dprintf(DP_HELP, "NOTICE %s :%s\n", nick, IRC_RECOGNIZED);
       return 1;
       return 1;
     } else if (u) {
     } else if (u) {
-      if (!quiet_reject)
-	dprintf(DP_HELP, IRC_MISIDENT, nick, who, u->handle);
+      dprintf(DP_HELP, IRC_MISIDENT, nick, who, u->handle);
       return 1;
       return 1;
     } else {
     } else {
       putlog(LOG_CMDS, "*", "(%s!%s) !*! IDENT %s", nick, host, who);
       putlog(LOG_CMDS, "*", "(%s!%s) !*! IDENT %s", nick, host, who);

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

@@ -1234,7 +1234,7 @@ static int server_6char STDVAR
   Function F = (Function) cd;
   Function F = (Function) cd;
   char x[20];
   char x[20];
 
 
-  BADARGS(7, 7, " nick user@host handle desto/chan keyword/nick text");
+  BADARGS(7, 7, " nick user@host handle dest/chan keyword/nick text");
   CHECKVALIDITY(server_6char);
   CHECKVALIDITY(server_6char);
   egg_snprintf(x, sizeof x, "%d",
   egg_snprintf(x, sizeof x, "%d",
 	       F(argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]));
 	       F(argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]));
@@ -1246,7 +1246,7 @@ static int server_5char STDVAR
 {
 {
   Function F = (Function) cd;
   Function F = (Function) cd;
 
 
-  BADARGS(6, 6, " nick user@host handle channel text");
+  BADARGS(6, 6, " nick user@host handle dest/channel text");
   CHECKVALIDITY(server_5char);
   CHECKVALIDITY(server_5char);
   F(argv[1], argv[2], argv[3], argv[4], argv[5]);
   F(argv[1], argv[2], argv[3], argv[4], argv[5]);
   return TCL_OK;
   return TCL_OK;
@@ -2052,7 +2052,7 @@ char *server_start(Function *global_funcs)
 
 
   H_wall = add_bind_table("wall", HT_STACKABLE, server_2char);
   H_wall = add_bind_table("wall", HT_STACKABLE, server_2char);
   H_raw = add_bind_table("raw", HT_STACKABLE, server_raw);
   H_raw = add_bind_table("raw", HT_STACKABLE, server_raw);
-  H_notc = add_bind_table("notc", HT_STACKABLE, server_6char);
+  H_notc = add_bind_table("notc", HT_STACKABLE, server_5char);
   H_msgm = add_bind_table("msgm", HT_STACKABLE, server_msg);
   H_msgm = add_bind_table("msgm", HT_STACKABLE, server_msg);
   H_msgc = add_bind_table("msgc", 0, server_msgc);
   H_msgc = add_bind_table("msgc", 0, server_msgc);
   H_msg = add_bind_table("msg", 0, server_msg);
   H_msg = add_bind_table("msg", 0, server_msg);

+ 2 - 0
src/tclmisc.c

@@ -371,6 +371,8 @@ static int tcl_duration STDVAR
     tmp = (sec);
     tmp = (sec);
     sprintf(&s[strlen(s)], "%lu second%s", tmp, (tmp == 1) ? "" : "s");
     sprintf(&s[strlen(s)], "%lu second%s", tmp, (tmp == 1) ? "" : "s");
   }
   }
+  if (strlen(s) > 0 && s[strlen(s) - 1] == ' ')
+    s[strlen(s) - 1] = 0;
   Tcl_AppendResult(irp, s, NULL);
   Tcl_AppendResult(irp, s, NULL);
   return TCL_OK;
   return TCL_OK;
 }
 }

+ 14 - 0
src/tcluser.c

@@ -8,6 +8,8 @@
 #include "users.h"
 #include "users.h"
 #include "chan.h"
 #include "chan.h"
 #include "tandem.h"
 #include "tandem.h"
+#include "modules.h"
+
 
 
 extern Tcl_Interp	*interp;
 extern Tcl_Interp	*interp;
 extern struct userrec	*userlist;
 extern struct userrec	*userlist;
@@ -495,6 +497,7 @@ static int tcl_setuser STDVAR
   struct userrec *u;
   struct userrec *u;
   struct user_entry *e;
   struct user_entry *e;
   int r;
   int r;
+  module_entry *me;
 
 
   BADARGS(3, 999, " handle type ?setting....?");
   BADARGS(3, 999, " handle type ?setting....?");
   if (!(et = find_entry_type(argv[2]))) {
   if (!(et = find_entry_type(argv[2]))) {
@@ -508,6 +511,12 @@ static int tcl_setuser STDVAR
     } else
     } else
       return TCL_OK;		/* Silently ignore user * */
       return TCL_OK;		/* Silently ignore user * */
   }
   }
+  me = module_find("irc", 0, 0);
+  if (me && !strcmp(argv[2], "hosts") && argc == 3) {
+    Function *func = me->funcs;
+
+    (func[IRC_CHECK_THIS_USER]) (argv[1], 1, NULL);
+  }
   if (!(e = find_user_entry(et, u))) {
   if (!(e = find_user_entry(et, u))) {
     e = user_malloc(sizeof(struct user_entry));
     e = user_malloc(sizeof(struct user_entry));
     e->type = et;
     e->type = et;
@@ -523,6 +532,11 @@ static int tcl_setuser STDVAR
       nfree(e);
       nfree(e);
     /* else maybe already freed... (entry_type==HOSTS) <drummer> */
     /* else maybe already freed... (entry_type==HOSTS) <drummer> */
   }
   }
+  if (me && !strcmp(argv[2], "hosts") && argc == 4) {
+    Function *func = me->funcs;
+
+    (func[IRC_CHECK_THIS_USER]) (argv[1], 0, NULL);
+  }
   return r;
   return r;
 }
 }