/* SET SPAMTIME */ static void quote_spamtime(struct Client *source_p, const char *arg, int newval) { if (newval > 0) { GlobalSetOptions.spam_time = IRCD_MAX(newval, MIN_SPAM_TIME); sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, "%s has changed SPAMTIME to %i", get_oper_name(source_p), GlobalSetOptions.spam_time); } else sendto_one_notice(source_p, &me, ":SPAMTIME is currently %i", GlobalSetOptions.spam_time); }
/* SET SPAMTIME */ static void quote_spamtime( struct Client *source_p, int newval ) { if (newval > 0) { GlobalSetOptions.spam_time = IRCD_MAX(newval, MIN_SPAM_TIME); sendto_realops_flags(UMODE_ALL, L_ALL, "%s has changed SPAMTIME to %i", source_p->name, GlobalSetOptions.spam_time); } else sendto_one(source_p, ":%s NOTICE %s :SPAMTIME is currently %i", me.name, source_p->name, GlobalSetOptions.spam_time); }
/* libio_basename() * * input - i.e. "/usr/local/ircd/modules/m_whois.so" * output - i.e. "m_whois.so" * side effects - this will be overwritten on subsequent calls */ const char * libio_basename(const char *path) { const char *s = strrchr(path, '/'); #ifdef _WIN32 const char *s2 = strrchr(path, '\\'); s = IRCD_MAX(s, s2); #endif if (s == NULL) s = path; else s++; return s; }
/* SET SPAMNUM */ static void quote_spamnum(struct Client *source_p, const char *arg, int newval) { if (newval >= 0) { if (newval == 0) { sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, "%s has disabled ANTI_SPAMBOT", source_p->name); GlobalSetOptions.spam_num = newval; return; } GlobalSetOptions.spam_num = IRCD_MAX(newval, MIN_SPAM_NUM); sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, "%s has changed SPAMNUM to %i", get_oper_name(source_p), GlobalSetOptions.spam_num); } else sendto_one_notice(source_p, &me, ":SPAMNUM is currently %i", GlobalSetOptions.spam_num); }
void fdlist_init(void) { int fdmax; struct rlimit limit; if (!getrlimit(RLIMIT_NOFILE, &limit)) { limit.rlim_cur = limit.rlim_max; setrlimit(RLIMIT_NOFILE, &limit); } fdmax = getdtablesize(); /* allow MAXCLIENTS_MIN clients even at the cost of MAX_BUFFER and * some not really LEAKED_FDS */ fdmax = IRCD_MAX(fdmax, LEAKED_FDS + MAX_BUFFER + MAXCLIENTS_MIN); /* under no condition shall this raise over 65536 * for example user ip heap is sized 2*hard_fdlimit */ hard_fdlimit = IRCD_MIN(fdmax, 65536); }
/* SET SPAMNUM */ static void quote_spamnum( struct Client *source_p, int newval ) { if (newval >= 0) { if (newval == 0) { sendto_realops_flags(UMODE_ALL, L_ALL, "%s has disabled ANTI_SPAMBOT", source_p->name); GlobalSetOptions.spam_num = newval; return; } GlobalSetOptions.spam_num = IRCD_MAX(newval, MIN_SPAM_NUM); sendto_realops_flags(UMODE_ALL, L_ALL,"%s has changed SPAMNUM to %i", source_p->name, GlobalSetOptions.spam_num); } else sendto_one(source_p, ":%s NOTICE %s :SPAMNUM is currently %i", me.name, source_p->name, GlobalSetOptions.spam_num); }
/** Modify a global Z-line. * @param[in] cptr Client that sent us the Z-line modification. * @param[in] sptr Client that originated the Z-line modification. * @param[in] zline Z-line being modified. * @param[in] action Resultant status of the Z-line. * @param[in] reason Reason for Z-line. * @param[in] expire Expiration time of Z-line. * @param[in] lastmod Last modification time of Z-line. * @param[in] lifetime Lifetime of Z-line. * @param[in] flags Bitwise combination of ZLINE_* flags. * @return Zero or CPTR_KILLED, depending on whether \a sptr is suicidal. */ int zline_modify(struct Client *cptr, struct Client *sptr, struct Zline *zline, enum ZlineAction action, char *reason, time_t expire, time_t lastmod, time_t lifetime, unsigned int flags) { char buf[BUFSIZE], *op = ""; int pos = 0, non_auto = 0; assert(zline); assert(!ZlineIsLocal(zline)); Debug((DEBUG_DEBUG, "zline_modify(\"%s\", \"%s\", \"%s\", %s, \"%s\", " "%Tu, %Tu, %Tu, 0x%04x)", cli_name(cptr), cli_name(sptr), zline->zl_mask, action == ZLINE_ACTIVATE ? "ZLINE_ACTIVATE" : (action == ZLINE_DEACTIVATE ? "ZLINE_DEACTIVATE" : (action == ZLINE_LOCAL_ACTIVATE ? "ZLINE_LOCAL_ACTIVATE" : (action == ZLINE_LOCAL_DEACTIVATE ? "ZLINE_LOCAL_DEACTIVATE" : (action == ZLINE_MODIFY ? "ZLINE_MODIFY" : "<UNKNOWN>")))), reason, expire, lastmod, lifetime, flags)); /* First, let's check lastmod... */ if (action != ZLINE_LOCAL_ACTIVATE && action != ZLINE_LOCAL_DEACTIVATE) { if (ZlineLastMod(zline) > lastmod) { /* we have a more recent version */ if (IsBurstOrBurstAck(cptr)) return 0; /* middle of a burst, it'll resync on its own */ return zline_resend(cptr, zline); /* resync the server */ } else if (ZlineLastMod(zline) == lastmod) return 0; /* we have that version of the Z-line... */ } /* All right, we know that there's a change of some sort. What is it? */ /* first, check out the expiration time... */ if ((flags & ZLINE_EXPIRE) && expire) { if (!(flags & ZLINE_FORCE) && (expire <= TStime() || expire > TStime() + ZLINE_MAX_EXPIRE)) { if (!IsServer(sptr) && MyConnect(sptr)) /* bad expiration time */ send_reply(sptr, ERR_BADEXPIRE, expire); return 0; } } else flags &= ~ZLINE_EXPIRE; /* Now check to see if there's any change... */ if ((flags & ZLINE_EXPIRE) && expire == zline->zl_expire) { flags &= ~ZLINE_EXPIRE; /* no change to expiration time... */ expire = 0; } /* Next, check out lifetime--this one's a bit trickier... */ if (!(flags & ZLINE_LIFETIME) || !lifetime) lifetime = zline->zl_lifetime; /* use Z-line lifetime */ lifetime = IRCD_MAX(lifetime, expire); /* set lifetime to the max */ /* OK, let's see which is greater... */ if (lifetime > zline->zl_lifetime) flags |= ZLINE_LIFETIME; /* have to update lifetime */ else { flags &= ~ZLINE_LIFETIME; /* no change to lifetime */ lifetime = 0; } /* Finally, let's see if the reason needs to be updated */ if ((flags & ZLINE_REASON) && reason && !ircd_strcmp(zline->zl_reason, reason)) flags &= ~ZLINE_REASON; /* no changes to the reason */ /* OK, now let's take a look at the action... */ if ((action == ZLINE_ACTIVATE && (zline->zl_flags & ZLINE_ACTIVE)) || (action == ZLINE_DEACTIVATE && !(zline->zl_flags & ZLINE_ACTIVE)) || (action == ZLINE_LOCAL_ACTIVATE && (zline->zl_state == ZLOCAL_ACTIVATED)) || (action == ZLINE_LOCAL_DEACTIVATE && (zline->zl_state == ZLOCAL_DEACTIVATED)) || /* can't activate an expired Z-line */ IRCD_MAX(zline->zl_expire, expire) <= TStime()) action = ZLINE_MODIFY; /* no activity state modifications */ Debug((DEBUG_DEBUG, "About to perform changes; flags 0x%04x, action %s", flags, action == ZLINE_ACTIVATE ? "ZLINE_ACTIVATE" : (action == ZLINE_DEACTIVATE ? "ZLINE_DEACTIVATE" : (action == ZLINE_LOCAL_ACTIVATE ? "ZLINE_LOCAL_ACTIVATE" : (action == ZLINE_LOCAL_DEACTIVATE ? "ZLINE_LOCAL_DEACTIVATE" : (action == ZLINE_MODIFY ? "ZLINE_MODIFY" : "<UNKNOWN>")))))); /* If there are no changes to perform, do no changes */ if (!(flags & ZLINE_UPDATE) && action == ZLINE_MODIFY) return 0; /* Now we know what needs to be changed, so let's process the changes... */ /* Start by updating lastmod, if indicated... */ if (action != ZLINE_LOCAL_ACTIVATE && action != ZLINE_LOCAL_DEACTIVATE) zline->zl_lastmod = lastmod; /* Then move on to activity status changes... */ switch (action) { case ZLINE_ACTIVATE: /* Globally activating Z-line */ zline->zl_flags |= ZLINE_ACTIVE; /* make it active... */ zline->zl_state = ZLOCAL_GLOBAL; /* reset local activity state */ pos += ircd_snprintf(0, buf, sizeof(buf), " globally activating Z-line"); op = "+"; /* operation for Z-line propagation */ break; case ZLINE_DEACTIVATE: /* Globally deactivating Z-line */ zline->zl_flags &= ~ZLINE_ACTIVE; /* make it inactive... */ zline->zl_state = ZLOCAL_GLOBAL; /* reset local activity state */ pos += ircd_snprintf(0, buf, sizeof(buf), " globally deactivating Z-line"); op = "-"; /* operation for Z-line propagation */ break; case ZLINE_LOCAL_ACTIVATE: /* Locally activating Z-line */ zline->zl_state = ZLOCAL_ACTIVATED; /* make it locally active */ pos += ircd_snprintf(0, buf, sizeof(buf), " locally activating Z-line"); break; case ZLINE_LOCAL_DEACTIVATE: /* Locally deactivating Z-line */ zline->zl_state = ZLOCAL_DEACTIVATED; /* make it locally inactive */ pos += ircd_snprintf(0, buf, sizeof(buf), " locally deactivating Z-line"); break; case ZLINE_MODIFY: /* no change to activity status */ break; } /* Handle expiration changes... */ if (flags & ZLINE_EXPIRE) { zline->zl_expire = expire; /* save new expiration time */ if (pos < BUFSIZE) pos += ircd_snprintf(0, buf + pos, sizeof(buf) - pos, "%s%s changing expiration time to %Tu", pos ? ";" : "", pos && !(flags & (ZLINE_LIFETIME | ZLINE_REASON)) ? " and" : "", expire); } /* Next, handle lifetime changes... */ if (flags & ZLINE_LIFETIME) { zline->zl_lifetime = lifetime; /* save new lifetime */ if (pos < BUFSIZE) pos += ircd_snprintf(0, buf + pos, sizeof(buf) - pos, "%s%s extending record lifetime to %Tu", pos ? ";" : "", pos && !(flags & ZLINE_REASON) ? " and" : "", lifetime); } /* Now, handle reason changes... */ if (flags & ZLINE_REASON) { non_auto = non_auto || ircd_strncmp(zline->zl_reason, "AUTO", 4); MyFree(zline->zl_reason); /* release old reason */ DupString(zline->zl_reason, reason); /* store new reason */ if (pos < BUFSIZE) pos += ircd_snprintf(0, buf + pos, sizeof(buf) - pos, "%s%s changing reason to \"%s\"", pos ? ";" : "", pos ? " and" : "", reason); } /* All right, inform ops... */ non_auto = non_auto || ircd_strncmp(zline->zl_reason, "AUTO", 4); sendto_opmask_butone(0, non_auto ? SNO_GLINE : SNO_AUTO, "%s modifying global ZLINE for %s:%s", (feature_bool(FEAT_HIS_SNOTICES) || IsServer(sptr)) ? cli_name(sptr) : cli_name((cli_user(sptr))->server), zline->zl_mask, buf); /* and log the change */ log_write(LS_GLINE, L_INFO, LOG_NOSNOTICE, "%#C modifying global ZLINE for %s:%s", sptr, zline->zl_mask, buf); /* We'll be simple for this release, but we can update this to change * the propagation syntax on future updates */ if (action != ZLINE_LOCAL_ACTIVATE && action != ZLINE_LOCAL_DEACTIVATE) sendcmdto_serv_butone(sptr, CMD_ZLINE, cptr, "* %s%s%s %Tu %Tu %Tu :%s", flags & ZLINE_OPERFORCE ? "!" : "", op, zline->zl_mask, zline->zl_expire - TStime(), zline->zl_lastmod, zline->zl_lifetime, zline->zl_reason); /* OK, let's do the Z-line... */ return do_zline(cptr, sptr, zline); }