]> jfr.im git - irc/quakenet/newserv.git/blame - chanserv/usercmds/unsuspenduser.c
CHANSERV: more checks on lastchannelID / lastuserID
[irc/quakenet/newserv.git] / chanserv / usercmds / unsuspenduser.c
CommitLineData
1dd6d55d 1/* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: unsuspenduser
5 * CMDLEVEL: QCMD_OPER
dae08100 6 * CMDARGS: 2
1dd6d55d 7 * CMDDESC: Unsuspend a user.
8 * CMDFUNC: csu_dounsuspenduser
9 * CMDPROTO: int csu_dounsuspenduser(void *source, int cargc, char **cargv);
dae08100 10 * CMDHELP: Usage: unsuspenduser <username> <reason>
94e4d2f4 11 * CMDHELP: Unsuspends the specified user.
1dd6d55d 12 */
13
14#include "../chanserv.h"
15#include "../../lib/irc_string.h"
16#include <stdio.h>
17#include <string.h>
18
19int csu_dounsuspenduser(void *source, int cargc, char **cargv) {
20 nick *sender=source;
21 reguser *rup=getreguserfromnick(sender);
dae08100 22 reguser *vrup, *suspendedby;
1dd6d55d 23 char action[100];
dae08100
CP
24 char *csuspendedby, *csuspendreason;
25 char *unsuspendreason;
1dd6d55d 26
27 if (!rup)
28 return CMD_ERROR;
29
dae08100 30 if (cargc < 2) {
1dd6d55d 31 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "unsuspenduser");
32 return CMD_ERROR;
33 }
dae08100
CP
34
35 unsuspendreason = cargv[1];
36 if(!checkreason(sender, unsuspendreason))
37 return CMD_ERROR;
38
1dd6d55d 39 if (cargv[0][0] == '#') {
40 if (!(vrup=findreguserbynick(&cargv[0][1]))) {
41 chanservstdmessage(sender, QM_UNKNOWNUSER, &cargv[0][1]);
42 return CMD_ERROR;
43 }
44 }
45 else {
46 nick *np;
47
48 if (!(np=getnickbynick(cargv[0]))) {
49 chanservstdmessage(sender, QM_UNKNOWNUSER, cargv[0]);
50 return CMD_ERROR;
51 }
52
53 if (!(vrup=getreguserfromnick(np)) && sender) {
54 chanservstdmessage(sender, QM_USERNOTAUTHED, cargv[0]);
55 return CMD_ERROR;
56 }
57 }
58
59 if (!UHasSuspension(vrup)) {
60 chanservstdmessage(sender, QM_USERNOTSUSPENDED, cargv[0]);
61 return CMD_ERROR;
62 }
63
64 if (UHasOperPriv(vrup) && !UHasAdminPriv(rup)) {
65 snprintf(action, 99, "unsuspenduser on %s", vrup->username);
66 chanservstdmessage(sender, QM_NOACCESS, action);
ad23ee7a
CP
67 chanservwallmessage("%s (%s) FAILED to UNSUSPENDUSER %s", sender->nick, rup->username, vrup->username);
68 cs_log(sender, "UNSUSPENDUSER FAILED (not admin) %s", vrup->username);
1dd6d55d 69 return CMD_ERROR;
70 }
71
72 if (UIsDelayedGline(vrup)) {
ad23ee7a 73 strcpy(action, "delayed gline");
1dd6d55d 74 }
75 else if (UIsGline(vrup)) {
ad23ee7a 76 strcpy(action, "instant gline");
1dd6d55d 77 }
78 else if (UIsSuspended(vrup)) {
ad23ee7a 79 strcpy(action, "normal");
1dd6d55d 80 }
1dd6d55d 81 else {
ad23ee7a 82 chanservsendmessage(sender, "Unknown suspension type encountered.");
1dd6d55d 83 return CMD_ERROR;
84 }
dae08100
CP
85
86 suspendedby = findreguserbyID(vrup->suspendby);
87 csuspendedby = suspendedby?suspendedby->username:"(unknown)";
88 csuspendreason = vrup->suspendreason?vrup->suspendreason->content:"(no reason)";
89
d16b254e
CP
90 chanservwallmessage("%s (%s) used UNSUSPENDUSER on %s, type: %s, suspended by: %s, suspension reason: %s, unsuspend reason: %s", sender->nick, rup->username, vrup->username, action, csuspendedby, csuspendreason, unsuspendreason);
91 cs_log(sender,"UNSUSPENDUSER %s (%s, by: %s reason: %s), reason: %s", vrup->username, action, csuspendedby, csuspendreason, unsuspendreason);
dae08100 92
7d27d0cd 93 vrup->flags&=(~(QUFLAG_GLINE|QUFLAG_DELAYEDGLINE|QUFLAG_SUSPENDED));
1dd6d55d 94 vrup->suspendby=0;
95 vrup->suspendexp=0;
96 freesstring(vrup->suspendreason);
97 vrup->suspendreason=0;
98 csdb_updateuser(vrup);
99
1dd6d55d 100 chanservstdmessage(sender, QM_DONE);
101 return CMD_OK;
102}