]> jfr.im git - irc/quakenet/newserv.git/blobdiff - chanserv/chanservschedule.c
CHANSERV: better batcher error handling for expired accounts/accounts with no email.
[irc/quakenet/newserv.git] / chanserv / chanservschedule.c
index c935d548918c49908079a5b9afc2768efe50d22a..26d24c8de010a8426ce0b7f33917822df62fe8c2 100644 (file)
@@ -1,31 +1,38 @@
 #include "chanserv.h"
 #include "../lib/irc_string.h"
 #include "../core/schedule.h"
+#include "../glines/glines.h"
 
 void chanservdgline(void* arg) {
-  reguserrup=(reguser*)arg;
-  nicklist* nl;
-  nick* np;
+  reguser *rup=(reguser*)arg;
+  nick *np, *nl;
+  authname *anp;
   int i;
   unsigned int ucount;
   
-  if (!rup)
+  if (!rup || (!UIsDelayedGline(rup) && !UIsGline(rup)))
     return;
   
-  for (nl=rup->nicks; nl; nl=nl->next) {
+  if (!(anp=findauthname(rup->ID)))
+    return;
+    
+  for (nl=anp->nicks;nl;nl=nl->nextbyauthname) {
     for (i=0, ucount=0; i<NICKHASHSIZE; i++)
       for (np=nicktable[i];np;np=np->next)
-        if (!ircd_strcmp(np->ident, nl->np->ident) && np->ipnode==nl->np->ipnode)
+        if (np->ipnode==nl->ipnode && !ircd_strcmp(np->ident, nl->ident))
           ucount++;
     
-    if (ucount >= MAXGLINEUSERS)
+    if (ucount >= MAXGLINEUSERS) {
       chanservwallmessage("Delayed GLINE \"*!%s@%s\" (account %s) would hit %d users, aborting.", 
-        nl->np->ident, IPtostr(nl->np->p_ipaddr), rup->username, ucount);
-    else {
-      irc_send("%s GL * +*!%s@%s 3600 :%s\r\n", mynumeric->content, nl->np->ident, 
-        IPtostr(nl->np->p_ipaddr), rup->suspendreason->content);
+        nl->ident, IPtostr(nl->ipaddress), rup->username, ucount);
+    } else {
+      char *reason = "Network abuse";
+      if(rup->suspendreason)
+        reason = rup->suspendreason->content;
+
+      glinebynick(nl, 3600, reason, 0, "chanserv");
       chanservwallmessage("Delayed GLINE \"*!%s@%s\" (authed as %s) expires in 60 minute/s (hit %d user%s) (reason: %s)", 
-        nl->np->ident, IPtostr(nl->np->p_ipaddr), rup->username, ucount, ucount==1?"":"s", rup->suspendreason->content);
+        nl->ident, IPtostr(nl->ipaddress), rup->username, ucount, ucount==1?"":"s", reason);
     }
   }
 }