]> jfr.im git - irc/quakenet/newserv.git/blobdiff - chanserv/chancmds/banlist.c
CHANSERV: better batcher error handling for expired accounts/accounts with no email.
[irc/quakenet/newserv.git] / chanserv / chancmds / banlist.c
index e442e1d2539d644ac158a288d1d81226778623e9..f5288fb7652c3e9902022f90c5fd571f30fa316b 100644 (file)
@@ -7,6 +7,13 @@
  * CMDDESC: Displays all persistent bans on a channel.
  * CMDFUNC: csc_dobanlist
  * CMDPROTO: int csc_dobanlist(void *source, int cargc, char **cargv);
+ * CMDHELP: Usage: BANLIST <channel>
+ * CMDHELP: Displays a list of persistent and channel bans on the named channel.  Each ban
+ * CMDHELP: is identified by a number which can be passed to a subsequent BANDEL command.
+ * CMDHELP: Note that the numbers can change if bans are added to or removed from the 
+ * CMDHELP: channel. Where:
+ * CMDHELP: channel - the channel to use
+ * CMDHELP: BANLIST requires operator (+o) access on the named channel.
  */
 
 #include "../chanserv.h"
@@ -40,7 +47,7 @@ int csc_dobanlist(void *source, int cargc, char **cargv) {
 
   rcp=cip->exts[chanservext];
   
-  if (rcp->bans || cip->channel->bans) {
+  if (rcp->bans || (cip->channel && cip->channel->bans)) {
     chanservstdmessage(sender, QM_REGBANHEADER, cip->name->content);
     for(rbp=rcp->bans;rbp;rbp=rbp->next) {
       rup=findreguserbyID(rbp->setby);
@@ -49,20 +56,22 @@ int csc_dobanlist(void *source, int cargc, char **cargv) {
                          rup?rup->username:"<unknown>",
                          rbp->reason?rbp->reason->content:"");
     }
-    for (cbp=cip->channel->bans;cbp;cbp=cbp->next) {
-      for (rbp=rcp->bans;rbp;rbp=rbp->next) {
-       if (banequal(rbp->cbp, cbp))
-         break;
-      }
-      if (!rbp) {
-       if (rcp->banduration) {
-         exp=(cbp->timeset + rcp->banduration) - time(NULL);
-       } else {
-         exp=0;
-       } 
-       chanservsendmessage(sender, " #%-2d %-29s %-18s %-15s",++i,bantostring(cbp),
-                           exp ? longtoduration(exp,0) : "Permanent",
-                           "(channel ban)");
+    if (cip->channel) {
+      for (cbp=cip->channel->bans;cbp;cbp=cbp->next) {
+        for (rbp=rcp->bans;rbp;rbp=rbp->next) {
+          if (banequal(rbp->cbp, cbp))
+           break;
+        }
+        if (!rbp) {
+         if (rcp->banduration) {
+           exp=(cbp->timeset + rcp->banduration) - time(NULL);
+          } else {
+           exp=0;
+          } 
+          chanservsendmessage(sender, " #%-2d %-29s %-18s %-15s",++i,bantostring(cbp),
+                             exp ? longtoduration(exp,0) : "Permanent",
+                             "(channel ban)");
+        }
       }
     }
     chanservstdmessage(sender, QM_ENDOFLIST);