X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/1e32d52837b5a8952c75c82ffbe12a3a0a016605..8c684fca9c7dbb4a2601628c744be9236ee68641:/chanserv/chancmds/op.c diff --git a/chanserv/chancmds/op.c b/chanserv/chancmds/op.c index 681aee2a..b4a9cc37 100644 --- a/chanserv/chancmds/op.c +++ b/chanserv/chancmds/op.c @@ -7,7 +7,7 @@ * CMDDESC: Ops you or other users on channel(s). * CMDFUNC: csc_doop * CMDPROTO: int csc_doop(void *source, int cargc, char **cargv); - * CMDHELP: Usage: OP [ [ [ [...]]] + * CMDHELP: Usage: OP [ [ [ [...]]]] * CMDHELP: Ops you on one or more channels, or ops other named users on a given channel. * CMDHELP: This command cannot be used to op users who are otherwise prevented from getting * CMDHELP: ops, e.g. via the +d chanlev flag (see CHANLEV) or bitch mode (see CHANFLAGS). @@ -36,6 +36,7 @@ int csc_doop(void *source, int cargc, char **cargv) { nick *sender=source, *np; reguser *rup=getreguserfromnick(sender); + reguser *srup=rup; chanindex *cip; regchan *rcp=NULL; regchanuser *rcup; @@ -43,8 +44,8 @@ int csc_doop(void *source, int cargc, char **cargv) { unsigned long *lp; int i; modechanges changes; - int donotice=0; - char buf[512], bufpos=0; + int donotice=0, bufpos=0; + char buf[512]; if (!rup) return CMD_ERROR; @@ -64,6 +65,7 @@ int csc_doop(void *source, int cargc, char **cargv) { localsetmodeinit(&changes, ca[i], chanservnick); localdosetmode_nick(&changes, sender, MC_OP); localsetmodeflush(&changes,1); + cs_logchanop(rcp, sender->nick, rup); } } } @@ -79,6 +81,12 @@ int csc_doop(void *source, int cargc, char **cargv) { return CMD_ERROR; rcp=cip->exts[chanservext]; + + /* If the channel doesn't currently exist, forget it. */ + if (!cip->channel) { + chanservstdmessage(sender, QM_EMPTYCHAN, cip->name->content); + return CMD_ERROR; + } if (cargc==1) { /* Only one arg: "op me" */ @@ -88,6 +96,7 @@ int csc_doop(void *source, int cargc, char **cargv) { localsetmodeinit(&changes, cip->channel, chanservnick); localdosetmode_nick(&changes, sender, MC_OP); localsetmodeflush(&changes,1); + cs_logchanop(rcp, sender->nick, srup); chanservstdmessage(sender, QM_DONE); return CMD_OK; @@ -130,10 +139,11 @@ int csc_doop(void *source, int cargc, char **cargv) { bufpos += sprintf(buf+bufpos,"%s%s",bufpos?", ":"",np->nick); localdosetmode_nick(&changes, np, MC_OP); + cs_logchanop(rcp, np->nick, srup); } if (donotice && bufpos) { - sendopnoticetochannel(chanservnick, cip->channel, "%s opped %s", sender, buf); + sendopnoticetochannel(chanservnick, cip->channel, "%s opped %s", sender->nick, buf); } localsetmodeflush(&changes, 1);