case GLINE_MODIFY: /* modifying a G-line */
/* convert expire and lastmod, look for lifetime and reason */
if (parc > 4) { /* protect against fall-through from 4-param form */
- if (parc < 5)
- return need_more_params(sptr, "GLINE");
-
expire = atoi(parv[3]); /* convert expiration and lastmod */
expire = abs_expire(expire);
lastmod = atoi(parv[4]);
assert(action != GLINE_LOCAL_DEACTIVATE);
assert(action != GLINE_MODIFY);
+ if (!expire) { /* Cannot *add* a G-line we don't have, but try hard */
+ Debug((DEBUG_DEBUG, "Propagating G-line %s for G-line we don't have",
+ action == GLINE_ACTIVATE ? "activation" : "deactivation"));
+
+ /* propagate the G-line, even though we don't have it */
+ sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, "* %c%s %Tu",
+ action == GLINE_ACTIVATE ? '+' : '-',
+ mask, lastmod);
+
+ return 0;
+ }
+
return gline_add(cptr, sptr, mask, reason, expire, lastmod, lifetime,
flags | ((action == GLINE_ACTIVATE) ? GLINE_ACTIVE : 0));
}
flags |= GLINE_EXPIRE; /* remember that we got an expire time */
if (parc > 4) { /* also got a reason... */
- reason = parv[4];
+ reason = parv[parc - 1];
flags |= GLINE_REASON;
}