]> jfr.im git - irc/quakenet/newserv.git/blobdiff - glines/glines_commands.c
BUILD: add require-all build mode
[irc/quakenet/newserv.git] / glines / glines_commands.c
index 1148b5a63f43d007130425c8e4e1163bf03110e5..45264453452b9e7e94bf994da6bb406aac1b85d5 100644 (file)
@@ -13,6 +13,9 @@
 #include "glines.h"
 #include "../trusts/trusts.h"
 
+#define BLOCK_CHASE_MIN 5 /* seconds to chase nicknames in block without -c */
+#define BLOCK_CHASE_MAX 1800 /* seconds to chase nicknames in block with -c */
+
 MODULE_VERSION("");
 
 static void registercommands(int, void *);
@@ -92,10 +95,10 @@ static int glines_cmdblock(void *source, int cargc, char **cargv) {
   target = getnickbynick(cargv[coff]);
 
   if (!target) {
-    ww = whowas_chase(cargv[coff], 1800);
+    ww = whowas_chase(cargv[coff], chase ? BLOCK_CHASE_MAX : BLOCK_CHASE_MIN);
    
     if (!ww) {
-      controlreply(sender, "Sorry, couldn't find that user.");
+      controlreply(sender, "Sorry, couldn't find that user.%s", chase ? "" : " Use -c to chase whowas entries.");
       return CMD_ERROR;
     }
    
@@ -108,13 +111,17 @@ static int glines_cmdblock(void *source, int cargc, char **cargv) {
     ownww = 1;
   }
 
+  wnp = &ww->nick;
+
+  if (sender != target && (IsService(wnp) || IsOper(wnp) || NickOnServiceServer(wnp))) {
+    controlreply(sender, "Target user '%s' is an oper or a service. Not setting G-Lines.", wnp->nick);
+    return CMD_ERROR;
+  }
+
   rejoinline(cargv[coff + 2], cargc - coff - 2);
   reason = cargv[coff + 2];
 
-  if (sender->auth)
-    snprintf(creator, sizeof(creator), "#%s", sender->authname);
-  else
-    strncpy(creator, controlid(sender), sizeof(creator));
+  snprintf(creator, sizeof(creator), "#%s", sender->authname);
 
   glinebufinit(&gbuf, 0);
   glinebufcommentv(&gbuf, "BLOCK", cargc + coff - 1, cargv);
@@ -141,7 +148,6 @@ static int glines_cmdblock(void *source, int cargc, char **cargv) {
   glinebufcounthits(&gbuf, &hits, NULL);
   id = glinebufcommit(&gbuf, 1);
 
-  wnp = &ww->nick;
   controlwall(NO_OPER, NL_GLINES, "%s BLOCK'ed user '%s!%s@%s' for %s with reason '%s' (%d hits)", controlid(sender),
               wnp->nick, wnp->ident, wnp->host->name->content,
               longtoduration(duration, 0), reason, hits);
@@ -200,10 +206,7 @@ static int glines_cmdgline(void *source, int cargc, char **cargv) {
   }
 #endif /* SNIRCD_VERSION */
 
-  if (sender->auth)
-    snprintf(creator, sizeof(creator), "#%s", sender->authname);
-  else
-    strncpy(creator, controlid(sender), sizeof(creator));
+  snprintf(creator, sizeof(creator), "#%s", sender->authname);
 
   glinebufinit(&gbuf, 0);
   glinebufcommentv(&gbuf, "GLINE", cargc + coff - 1, cargv);
@@ -305,10 +308,7 @@ static int glines_cmdsmartgline(void *source, int cargc, char **cargv) {
     return CMD_ERROR;
   }
 
-  if (sender->auth)
-    snprintf(creator, sizeof(creator), "#%s", sender->authname);
-  else
-    strncpy(creator, controlid(sender), sizeof(creator));
+  snprintf(creator, sizeof(creator), "#%s", sender->authname);
 
   glinebufinit(&gbuf, 0);
   glinebufcommentv(&gbuf, "SMARTGLINE", cargc + coff - 1, cargv);
@@ -471,10 +471,7 @@ static int glines_cmdclearchan(void *source, int cargc, char **cargv) {
     (((nick **)victims.content)[slot]) = np;
   }
 
-  if (sender->auth)
-    snprintf(creator, sizeof(creator), "#%s", sender->authname);
-  else
-    strncpy(creator, controlid(sender), sizeof(creator));
+  snprintf(creator, sizeof(creator), "#%s", sender->authname);
 
   glinebufinit(&gbuf, 0);
   glinebufcommentv(&gbuf, "CLEARCHAN", cargc + coff - 1, cargv);
@@ -566,6 +563,11 @@ static int glines_cmdtrustgline(void *source, int cargc, char **cargv) {
 
   tg = tg_strtotg(cargv[coff]);
 
+  if (!tg) {
+    controlreply(sender, "Invalid trust group specified.");
+    return CMD_ERROR;
+  }
+
   if (!(tg->flags & TRUST_RELIABLE_USERNAME)) {
     controlreply(sender, "Sorry, that trust group does not have the \"reliable username\" flag.");
     return CMD_ERROR;
@@ -581,10 +583,7 @@ static int glines_cmdtrustgline(void *source, int cargc, char **cargv) {
   rejoinline(cargv[coff + 3], cargc - coff - 3);
   reason = cargv[coff + 3];
 
-  if (sender->auth)
-    snprintf(creator, sizeof(creator), "#%s", sender->authname);
-  else
-    strncpy(creator, controlid(sender), sizeof(creator));
+  snprintf(creator, sizeof(creator), "#%s", sender->authname);
 
   glinebufinit(&gbuf, 0);
   glinebufcommentv(&gbuf, "TRUSTGLINE", cargc + coff - 1, cargv);
@@ -632,6 +631,11 @@ static int glines_cmdtrustungline(void *source, int cargc, char **cargv) {
 
   tg = tg_strtotg(cargv[0]);
 
+  if (!tg) {
+    controlreply(sender, "Invalid trust group specified.");
+    return CMD_ERROR;
+  }
+
   if (!(tg->flags & TRUST_RELIABLE_USERNAME)) {
     controlreply(sender, "Sorry, that trust group does not have the \"reliable username\" flag.");
     return CMD_ERROR;
@@ -733,7 +737,7 @@ static int glines_cmdglist(void *source, int cargc, char **cargv) {
   if (cargc > 1) {
     char* ch = cargv[0];
 
-    for (; *ch; ch++)
+    for (; *ch; ch++) {
       switch (*ch) {
       case '-':
         break;
@@ -769,8 +773,8 @@ static int glines_cmdglist(void *source, int cargc, char **cargv) {
         controlreply(sender, "Invalid flag '%c'.", *ch);
         return CMD_ERROR;
       }
-
-      mask = cargv[1];
+    }
+    mask = cargv[1];
   } else {
     mask = cargv[0];
   }
@@ -785,6 +789,11 @@ static int glines_cmdglist(void *source, int cargc, char **cargv) {
 
   gline *searchgl = makegline(mask);
 
+  if (!searchgl) {
+    controlreply(sender, "Invalid G-line mask specified.");
+    return CMD_ERROR;
+  }
+
   for (gl = glinelist; gl; gl = next) {
     next = gl->next;