--HG--
branch : chanserv-live
struct authhistoryinfo {
unsigned int numeric;
unsigned int userID;
struct authhistoryinfo {
unsigned int numeric;
unsigned int userID;
};
void csdb_doauthhistory_real(DBConn *dbconn, void *arg) {
};
void csdb_doauthhistory_real(DBConn *dbconn, void *arg) {
chanservstdmessage(np, QM_AUTHHISTORYHEADER); /* @TIMELEN */
while(dbfetchrow(pgres)) {
if (!UHasHelperPriv(rup) && (strtoul(dbgetvalue(pgres, 0), NULL, 10) != rup->ID)) {
chanservstdmessage(np, QM_AUTHHISTORYHEADER); /* @TIMELEN */
while(dbfetchrow(pgres)) {
if (!UHasHelperPriv(rup) && (strtoul(dbgetvalue(pgres, 0), NULL, 10) != rup->ID)) {
if (ahdisconnecttime)
q9strftime(tbuf2, sizeof(tbuf2), ahdisconnecttime);
if (ahdisconnecttime)
q9strftime(tbuf2, sizeof(tbuf2), ahdisconnecttime);
- snprintf(uhbuf,sizeof(uhbuf),"%s!%s@%s", ahnick, ahuser, ahhost);
+ snprintf(uhbuf,sizeof(uhbuf),"%s!%s@%s", ahnick, ahuser, ahi->realhost ? ahhost : "(hidden)");
chanservsendmessage(np, "#%-2d %-50s %-19s %-19s %s", ++count, uhbuf, tbuf1, ahdisconnecttime?tbuf2:"never", dbgetvalue(pgres,6)); /* @TIMELEN */
}
chanservstdmessage(np, QM_ENDOFLIST);
chanservsendmessage(np, "#%-2d %-50s %-19s %-19s %s", ++count, uhbuf, tbuf1, ahdisconnecttime?tbuf2:"never", dbgetvalue(pgres,6)); /* @TIMELEN */
}
chanservstdmessage(np, QM_ENDOFLIST);
-void csdb_retreiveauthhistory(nick *np, reguser *rup, int limit) {
+void csdb_retreiveauthhistory(nick *np, reguser *rup, int limit, int realhost) {
struct authhistoryinfo *ahi;
char limitstr[30];
struct authhistoryinfo *ahi;
char limitstr[30];
ahi=(struct authhistoryinfo *)malloc(sizeof(struct authhistoryinfo));
ahi->numeric=np->numeric;
ahi->userID=rup->ID;
ahi=(struct authhistoryinfo *)malloc(sizeof(struct authhistoryinfo));
ahi->numeric=np->numeric;
ahi->userID=rup->ID;
+ ahi->realhost=realhost;
q9a_asyncquery(csdb_doauthhistory_real, (void *)ahi,
"SELECT userID, nick, username, host, authtime, disconnecttime, quitreason from chanserv.authhistory where "
"userID=%u order by authtime desc%s", rup->ID, limitstr);
q9a_asyncquery(csdb_doauthhistory_real, (void *)ahi,
"SELECT userID, nick, username, host, authtime, disconnecttime, quitreason from chanserv.authhistory where "
"userID=%u order by authtime desc%s", rup->ID, limitstr);
nick *sender=source;
unsigned int arg=0;
unsigned int limit=10;
nick *sender=source;
unsigned int arg=0;
unsigned int limit=10;
if (!(rup=getreguserfromnick(sender)))
return CMD_ERROR;
if (!(rup=getreguserfromnick(sender)))
return CMD_ERROR;
+ if(cs_privcheck(QPRIV_VIEWREALHOST, sender)) {
+ realhost = 1;
+ } else {
+ realhost = 0;
+ }
+
/* checks passed */
chanservwallmessage("%s (%s) used AUTHHISTORY on %s", sender->nick, rup->username, trup->username);
/* checks passed */
chanservwallmessage("%s (%s) used AUTHHISTORY on %s", sender->nick, rup->username, trup->username);
+ } else {
+ realhost = 0;
- csdb_retreiveauthhistory(sender, trup, limit);
+ csdb_retreiveauthhistory(sender, trup, limit, realhost);
#define QPRIV_VIEWCHANSUSPENSION 110
#define QPRIV_VIEWSUSPENDEDBY 111
#define QPRIV_VIEWWALLMESSAGE 112
#define QPRIV_VIEWCHANSUSPENSION 110
#define QPRIV_VIEWSUSPENDEDBY 111
#define QPRIV_VIEWWALLMESSAGE 112
+#define QPRIV_VIEWREALHOST 113
#define QPRIV_CHANGECHANFLAGS 200
#define QPRIV_CHANGECHANLEV 201
#define QPRIV_CHANGECHANFLAGS 200
#define QPRIV_CHANGECHANLEV 201
case QPRIV_CHANGEUSERFLAGS:
case QPRIV_VIEWSUSPENDEDBY:
case QPRIV_VIEWWALLMESSAGE: /* if you change VIEWWALLMESSAGE alter chanservwallmessage too */
case QPRIV_CHANGEUSERFLAGS:
case QPRIV_VIEWSUSPENDEDBY:
case QPRIV_VIEWWALLMESSAGE: /* if you change VIEWWALLMESSAGE alter chanservwallmessage too */
+ case QPRIV_VIEWREALHOST:
return (np && rup && IsOper(np) && UHasOperPriv(rup));
default: /* By default opers can override anything */
return (np && rup && IsOper(np) && UHasOperPriv(rup));
default: /* By default opers can override anything */
/* Commenting out language until we implement some - splidge
chanservstdmessage(sender, QM_WHOIS_USERLANG, cslanguages[target->languageid] ?
cslanguages[target->languageid]->name->content : "(unknown)"); */
/* Commenting out language until we implement some - splidge
chanservstdmessage(sender, QM_WHOIS_USERLANG, cslanguages[target->languageid] ?
cslanguages[target->languageid]->name->content : "(unknown)"); */
- chanservstdmessage(sender, QM_WHOIS_LASTUSERHOST, target->lastuserhost->content);
+ if(rup==target || cs_privcheck(QPRIV_VIEWREALHOST, sender)) {
+ chanservstdmessage(sender, QM_WHOIS_LASTUSERHOST, target->lastuserhost->content);
+ }
}
if (target->email && (rup==target || cs_privcheck(QPRIV_VIEWEMAIL, sender))) {
}
if (target->email && (rup==target || cs_privcheck(QPRIV_VIEWEMAIL, sender))) {