Author: Kev <klmitch@mit.edu>
[ircu2.10.12-pk.git] / ircd / m_gline.c
index cee85ac400df69597cf3903a97ca4589efdbc12a..027d88e90e5144d370161d8e198fd069d84de489 100644 (file)
@@ -131,7 +131,7 @@ ms_gline(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
   if (*mask == '!')
   {
     mask++;
-    flags |= GLINE_OPERFORCE;
+    flags |= GLINE_OPERFORCE; /* assume oper had WIDE_GLINE */
   }
 
   if ((parc == 3 && *mask == '-') || parc == 5)
@@ -151,6 +151,9 @@ ms_gline(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
   else
     return need_more_params(sptr, "GLINE");
 
+  if (IsServer(sptr))
+    flags |= GLINE_FORCE;
+
   if (!(target[0] == '*' && target[1] == '\0')) {
     if (!(acptr = FindNServer(target)))
       return 0; /* no such server */
@@ -296,11 +299,11 @@ mo_gline(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
   if (!(flags & GLINE_LOCAL) && !feature_bool(FEAT_CONFIG_OPERCMDS))
     return send_reply(sptr, ERR_DISABLED, "GLINE");
 
-  agline = gline_find(mask, GLINE_ANY | GLINE_EXACT);
-
   if (!HasPriv(sptr, (flags & GLINE_LOCAL ? PRIV_LOCAL_GLINE : PRIV_GLINE)))
     return send_reply(sptr, ERR_NOPRIVILEGES);
 
+  agline = gline_find(mask, GLINE_ANY | GLINE_EXACT);
+
   if (agline) {
     if (GlineIsLocal(agline) && !(flags & GLINE_LOCAL)) /* global over local */
       gline_free(agline);