]> jfr.im git - irc/quakenet/newserv.git/blobdiff - glines/glines_commands.c
CHANSERV: fix issue where chanserv_relay doesn't wait for db to be loaded before...
[irc/quakenet/newserv.git] / glines / glines_commands.c
index ae2f4aa631518e4ad479b53cec38a5cacd5191b6..8aae8cb253fa044c52e061073d316d5dc3a52053 100644 (file)
@@ -64,7 +64,7 @@ invalid:
 
 static int glines_cmdblock(void *source, int cargc, char **cargv) {
   nick *sender = source;
-  nick *target;
+  nick *target, *wnp;
   whowas *ww;
   int hits, duration, id;
   int coff, overridesanity, overridelimit, simulate, chase;
@@ -101,19 +101,24 @@ static int glines_cmdblock(void *source, int cargc, char **cargv) {
    
     ownww = 0;
 
-    controlreply(sender, "Found matching whowas record:");    whowas_spew(ww, sender);
+    controlreply(sender, "Found matching whowas record:");
+    controlreply(sender, "%s", whowas_format(ww));
   } else {
-    ww = whowas_fromnick(target);
+    ww = whowas_fromnick(target, 1);
     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);
@@ -140,7 +145,9 @@ static int glines_cmdblock(void *source, int cargc, char **cargv) {
   glinebufcounthits(&gbuf, &hits, NULL);
   id = glinebufcommit(&gbuf, 1);
 
-  controlwall(NO_OPER, NL_GLINES, "%s BLOCK'ed user '%s!%s@%s' for %s with reason '%s' (%d hits)", controlid(sender), ww->nick, ww->ident, ww->host, longtoduration(duration, 0), reason, hits);
+  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);
 
   if (ownww)
     whowas_free(ww);
@@ -196,10 +203,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);
@@ -301,10 +305,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);
@@ -467,10 +468,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);
@@ -577,10 +575,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);
@@ -781,6 +776,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;