]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/usercmds/whois.c
1 /* Automatically generated by refactor.pl.
5 * CMDLEVEL: QCMD_AUTHED
7 * CMDDESC: Displays information about a user.
9 * CMDPROTO: int csu_dowhois(void *source, int cargc, char **cargv);
10 * CMDHELP: Usage: WHOIS <user>
11 * CMDHELP: Displays information about a user, where:
12 * CMDHELP: user - user to request information for, either the nickname of an active user on
13 * CMDHELP: the network or #accountname.
16 #include "../chanserv.h"
17 #include "../../lib/irc_string.h"
18 #include "../../lib/strlfunc.h"
22 int csu_dowhois(void *source
, int cargc
, char **cargv
) {
24 reguser
*rup
=getreguserfromnick(sender
), *target
;
28 regchanuser
*rcup
, *rcup2
;
29 flag_t flagmask
, flags
;
34 if (!(rup
=getreguserfromnick(sender
)))
38 chanservstdmessage(sender
, QM_NOTENOUGHPARAMS
, "whois");
42 if (!(target
=findreguser(sender
, cargv
[0]))) {
45 if (cs_privcheck(QPRIV_VIEWFULLWHOIS
, sender
) && (np
=getnickbynick(cargv
[0]))) {
46 activeuser
*aup
=getactiveuserfromnick(np
);
47 chanservsendmessage(sender
, "%s has attempted to auth %d time%s.", np
->nick
, aup
->authattempts
,
48 aup
->authattempts
==1?"":"s");
53 if (cargv
[0][0]=='#') {
54 chanservstdmessage(sender
, QM_WHOISHEADER_AUTH
, target
->username
);
56 chanservstdmessage(sender
, QM_WHOISHEADER_NICK
, cargv
[0], target
->username
);
59 if (rup
==target
|| cs_privcheck(QPRIV_VIEWFULLWHOIS
, sender
)) {
60 chanservstdmessage(sender
, QM_WHOIS_USERID
, target
->ID
);
63 if (cs_privcheck(QPRIV_VIEWUSERFLAGS
, sender
)) {
64 flagmask
=QUFLAG_ALL
& ~(QUFLAG_SUSPENDED
| QUFLAG_GLINE
| QUFLAG_DELAYEDGLINE
);
68 if (UHasSuspension(target
)) {
70 char *reason
, *suspendtype
, *whom
;
72 if(UIsDelayedGline(target
)) {
73 suspendtype
= "delayed gline";
74 } else if(UIsGline(target
)) {
75 suspendtype
= "gline";
76 } else if(UIsSuspended(target
)) {
77 suspendtype
= "suspended";
82 if(target
->suspendexp
) {
83 if(time(NULL
) >= target
->suspendexp
) {
84 strlcpy(expiresbuf
, "(next auth)", sizeof(expiresbuf
));
86 strftime(expiresbuf
, sizeof(expiresbuf
), Q9_FORMAT_TIME
, gmtime(&(target
->suspendexp
)));
89 strlcpy(expiresbuf
, "(never)", sizeof(expiresbuf
));
92 if(cs_privcheck(QPRIV_VIEWSUSPENDEDBY
, sender
)) {
93 reguser
*trup
= findreguserbyID(target
->suspendby
);
95 whom
= trup
->username
;
103 if(target
->suspendreason
&& target
->suspendreason
->content
) {
104 reason
= target
->suspendreason
->content
;
109 chanservstdmessage(sender
, QM_USERSUSPENDEDTYPE
, suspendtype
);
110 chanservstdmessage(sender
, QM_USERSUSPENDEDBY
, whom
);
111 chanservstdmessage(sender
, QM_USERSUSPENDEDREASON
, reason
);
112 chanservstdmessage(sender
, QM_USERSUSPENDEDAT
, target
->suspendtime
);
113 chanservstdmessage(sender
, QM_USERSUSPENDEDEXPIRY
, expiresbuf
);
116 /* Incidentally none of the QM_USERIS* mesages take parameters. Just thought I'd mention it.. */
117 if (UIsAdmin(target
))
118 chanservstdmessage(sender
, QM_USERISADMIN
, target
->username
);
119 else if (UIsOper(target
))
120 chanservstdmessage(sender
, QM_USERISOPER
, target
->username
);
121 else if (UIsHelper(target
))
122 chanservstdmessage(sender
, QM_USERISHELPER
, target
->username
);
123 else if (UIsStaff(target
))
124 chanservstdmessage(sender
, QM_USERISSTAFF
, target
->username
);
127 chanservstdmessage(sender
, QM_USERISDEV
, target
->username
);
133 flagmask
|=(QUFLAG_OPER
| QUFLAG_DEV
| QUFLAG_HELPER
|
134 QUFLAG_ADMIN
| QUFLAG_INFO
| QUFLAG_NOTICE
| QUFLAG_STAFF
);
136 if (flagmask
& target
->flags
)
137 chanservstdmessage(sender
, QM_WHOIS_FLAGS
, printflagsornone(flagmask
& target
->flags
, ruflags
));
139 if (!(anp
=findauthname(target
->ID
)) || !anp
->nicks
) {
140 chanservstdmessage(sender
, QM_WHOIS_USERS
, "(none)");
142 for (tnp
=anp
->nicks
; ;tnp
=tnp
->nextbyauthname
) {
143 if (nbpos
>0 && (!tnp
|| nbpos
+strlen(tnp
->nick
) > 60)) {
144 chanservstdmessage(sender
, QM_WHOIS_USERS
, buf
);
151 nbpos
+=sprintf(buf
+nbpos
,"%s ",tnp
->nick
);
156 chanservstdmessage(sender
, QM_WHOIS_CREATED
, target
->created
);
158 if (target
->lastauth
== 0) {
159 snprintf(buf
,sizeof(buf
),"(never)");
161 tmp
=gmtime(&(target
->lastauth
));
162 strftime(buf
,sizeof(buf
),Q9_FORMAT_TIME
,tmp
);
164 chanservstdmessage(sender
, QM_WHOIS_LASTAUTH
, buf
);
166 if (target
->lastuserhost
&& (rup
==target
|| cs_privcheck(QPRIV_VIEWFULLWHOIS
, sender
))) {
167 /* Commenting out language until we implement some - splidge
168 chanservstdmessage(sender, QM_WHOIS_USERLANG, cslanguages[target->languageid] ?
169 cslanguages[target->languageid]->name->content : "(unknown)"); */
170 chanservstdmessage(sender
, QM_WHOIS_LASTUSERHOST
, target
->lastuserhost
->content
);
173 if (target
->email
&& (rup
==target
|| cs_privcheck(QPRIV_VIEWEMAIL
, sender
))) {
174 chanservstdmessage(sender
, QM_WHOIS_EMAIL
, target
->email
->content
);
175 chanservstdmessage(sender
, QM_WHOIS_EMAILSET
, target
->lastemailchange
);
178 if (target
->info
&& *target
->info
->content
) {
179 chanservstdmessage(sender
, QM_WHOIS_INFO
, target
->info
->content
);
182 if (target
->comment
&& (cs_privcheck(QPRIV_VIEWCOMMENTS
, sender
))) {
183 chanservstdmessage(sender
, QM_WHOIS_COMMENT
, target
->comment
->content
);
186 for (rcup
=target
->knownon
;rcup
;rcup
=rcup
->nextbyuser
) {
187 if (!UHasHelperPriv(rup
) || (UHasOperPriv(target
) && UHasHelperPriv(rup
) && !UHasOperPriv(rup
))) {
188 if (!(rcup2
=findreguseronchannel(rcup
->chan
,rup
)))
194 flagmask
= (QCUFLAG_OWNER
| QCUFLAG_MASTER
| QCUFLAG_OP
| QCUFLAG_VOICE
| QCUFLAG_AUTOVOICE
|
195 QCUFLAG_AUTOOP
| QCUFLAG_TOPIC
| QCUFLAG_KNOWN
| QCUFLAG_PROTECT
);
197 if (CUHasMasterPriv(rcup2
))
198 flagmask
|= QCUFLAGS_PUNISH
;
201 flagmask
|= QCUFLAGS_PERSONAL
;
203 flagmask
=QCUFLAG_ALL
;
206 if (!(flags
=rcup
->flags
& flagmask
))
211 chanservstdmessage(sender
, QM_WHOIS_CHANHEADER
, target
->username
);
214 chanservsendmessage(sender
, " %-30s %s",rcup
->chan
->index
->name
->content
,printflags(flags
, rcuflags
));
217 chanservstdmessage(sender
, QM_ENDOFLIST
);