if (IsOper(sptr))
++UserStats.opers;
if (MyUser(sptr))
- client_set_uprivs(sptr, cli_confs(sptr)->value.aconf);
+ {
+ if(IsOper(sptr)) {
+ FlagSet(&cli_confs(sptr)->value.aconf->conn_class->privs_dirty, PRIV_PROPAGATE);
+ client_set_privs(sptr, cli_confs(sptr)->value.aconf);
+ cli_handler(sptr) = OPER_HANDLER;
+ }
+ else
+ client_set_uprivs(sptr, cli_confs(sptr)->value.aconf);
+ }
if (MyUser(sptr) && HasPriv(sptr, PRIV_SEE_IDLETIME))
SetSeeIdletime(sptr);
if(IsOper(sptr)) {
send_reply(sptr, RPL_YOUREOPER);
- FlagSet(&cli_confs(sptr)->value.aconf->conn_class->privs_dirty, PRIV_PROPAGATE);
- client_set_privs(sptr, cli_confs(sptr)->value.aconf);
sendto_opmask_butone(0, SNO_OLDSNO, "%s (%s@%s) is now operator (%c)",
cli_name(sptr), cli_user(sptr)->username, cli_sockhost(sptr),
IsOper(sptr) ? 'O' : 'o');
log_write(LS_OPER, L_INFO, 0, "OPER (<OOC>) by (%#C)", sptr);
- cli_handler(sptr) = OPER_HANDLER;
}
if(*cli_connclass(sptr))
return 0;
}
-/* Refreshs the users host to the current fakehost. If no fakehost
- * is set, the account-host is created. If no Account is set,
- * nothing is done.
- * Returns 1 if the host changed and 0 if not.
- */
-int apply_fakehost(struct Client *cptr) {
- char buf[HOSTLEN];
- if(IsFakeHost(cptr)) {
- ircd_strncpy(buf, cli_user(cptr)->fakehost, HOSTLEN);
- }
- else if (IsAccount(cptr)) {
- ircd_snprintf(0, buf, HOSTLEN, "%s.%s", cli_user(cptr)->account, feature_str(FEAT_HIDDEN_HOST));
- }
- if(strncmp(buf, cli_user(cptr)->host, HOSTLEN) == 0) return 0;
- ircd_strncpy(cli_user(cptr)->host, buf, HOSTLEN);
- return 1;
-}
-
/** Calculate the hash value for a target.
* @param[in] target Pointer to target, cast to unsigned int.
* @return Hash value constructed from the pointer.
* @param[in] flag Some flag that affects host-hiding (FLAG_HIDDENHOST, FLAG_ACCOUNT, FLAG_FAKEHOST).
* @return Zero.
*/
+
int
-hide_hostmask(struct Client *cptr, unsigned int flag)
+hide_hostmask(struct Client *cptr, unsigned int flag) {
+ return hide_hostmask(chptr, flag, NULL);
+}
+
+int
+hide_hostmask(struct Client *cptr, unsigned int flag, char *username)
{
struct Membership *chan;
char buf[HOSTLEN];
sendcmdto_common_channels_butone(cptr, CMD_QUIT, cptr, ":Registered");
ircd_strncpy(cli_user(cptr)->host, buf, HOSTLEN);
- /* ok, the client is now fully hidden, so let them know -- hikari */
- if (MyConnect(cptr))
- send_reply(cptr, RPL_HOSTHIDDEN, cli_user(cptr)->host);
+ /* spoof also the username if username is passed */
+ if(username) {
+ ircd_strncpy(cli_user(cptr)->username, username, USERLEN);
+ /* ok, the client is now fully hidden, so let them know -- hikari */
+ if (MyConnect(cptr))
+ send_reply(cptr, RPL_HOSTUSERHIDDEN, cli_user(cptr)->username, cli_user(cptr)->host);
+ } else {
+ /* ok, the client is now fully hidden, so let them know -- hikari */
+ if (MyConnect(cptr))
+ send_reply(cptr, RPL_HOSTHIDDEN, cli_user(cptr)->host);
+ }
/*
* Go through all channels the client was on, rejoin him