X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/7da677be440cde06640657bc86da5837fa2e74a0..f79cdffc2ce0a1a1a74ca5eadc85b165a9f6944f:/src/proto-p10.c diff --git a/src/proto-p10.c b/src/proto-p10.c index 421bfe6..88989bf 100644 --- a/src/proto-p10.c +++ b/src/proto-p10.c @@ -349,8 +349,8 @@ static const char *his_servername; static const char *his_servercomment; static int extended_accounts; -/* These correspond to 1 << X: 012345678901234567 */ -const char irc_user_mode_chars[] = "o iw dkgn I"; +/* These correspond to 1 << X: 01234567890123456789012345 */ +const char irc_user_mode_chars[] = "oOiw dkgh x BnIX azDRWHLq"; static struct userNode *AddUser(struct server* uplink, const char *nick, const char *ident, const char *hostname, const char *modes, const char *numeric, const char *userinfo, time_t timestamp, const char *realip); @@ -1253,7 +1253,7 @@ static CMD_FUNC(cmd_whois) else irc_numeric(from, RPL_WHOISUSER, "%s %s %s * :%s", who->nick, who->ident, who->hostname, who->info); - if (IsService(who) || (from == who)) { + if (!IsService(who) || (from == who)) { struct modeNode *mn; mlen = strlen(self->name) + strlen(from->nick) + 12 + strlen(who->nick); len = 0; @@ -1801,7 +1801,9 @@ static CMD_FUNC(cmd_burst) struct modeNode *mNode; long mode; int oplevel = -1; + int type = 0; char *user, *end, sep; + char *tstr; time_t in_timestamp; char* parm = NULL; @@ -1809,6 +1811,11 @@ static CMD_FUNC(cmd_burst) return 0; modes[0] = 0; + tstr = conf_get_data("server/type", RECDB_QSTRING); + if(tstr) { + type = atoi(tstr); + } + exemptlist[0] = 0; banlist[0] = 0; @@ -1819,7 +1826,7 @@ static CMD_FUNC(cmd_burst) int n_modes; for (pos=argv[next], n_modes = 1; *pos; pos++) if ((*pos == 'k') || (*pos == 'l') || (*pos == 'A') - || (*pos == 'U')) + || (*pos == 'U') || ((type > 7) && (*pos == 'L'))) n_modes++; if (next + n_modes > argc) n_modes = argc - next; @@ -3323,6 +3330,14 @@ void mod_usermode(struct userNode *user, const char *mode_change) { assign_fakehost(user, host, 0); } break; + case 'a': do_user_mode(FLAGS_ADMIN); break; + case 'z': do_user_mode(FLAGS_SSL); break; + case 'D': do_user_mode(FLAGS_PRIVDEAF); break; + case 'R': do_user_mode(FLAGS_ACCOUNTONLY); break; + case 'W': do_user_mode(FLAGS_WHOIS); break; + case 'H': do_user_mode(FLAGS_HIDEOPER); break; + case 'L': do_user_mode(FLAGS_NOLINK); break; + case 'q': do_user_mode(FLAGS_COMMONCHANSONLY); break; } #undef do_user_mode } @@ -3620,6 +3635,7 @@ mod_chanmode_announce(struct userNode *who, struct chanNode *channel, struct mod DO_MODE_CHAR(NOQUITMSGS, 'Q'); DO_MODE_CHAR(NOAMSG, 'T'); DO_MODE_CHAR(OPERSONLY, 'O'); + DO_MODE_CHAR(ADMINSONLY, 'a'); DO_MODE_CHAR(REGISTERED, 'z'); DO_MODE_CHAR(SSLONLY, 'Z'); DO_MODE_CHAR(HIDEMODE, 'L'); @@ -3676,6 +3692,7 @@ mod_chanmode_announce(struct userNode *who, struct chanNode *channel, struct mod DO_MODE_CHAR(NOQUITMSGS, 'Q'); DO_MODE_CHAR(NOAMSG, 'T'); DO_MODE_CHAR(OPERSONLY, 'O'); + DO_MODE_CHAR(ADMINSONLY, 'a'); DO_MODE_CHAR(REGISTERED, 'z'); DO_MODE_CHAR(SSLONLY, 'Z'); DO_MODE_CHAR(HIDEMODE, 'L'); @@ -3751,6 +3768,7 @@ mod_chanmode_format(struct mod_chanmode *change, char *outbuff) DO_MODE_CHAR(NOQUITMSGS, 'Q'); DO_MODE_CHAR(NOAMSG, 'T'); DO_MODE_CHAR(OPERSONLY, 'O'); + DO_MODE_CHAR(ADMINSONLY, 'a'); DO_MODE_CHAR(REGISTERED, 'z'); DO_MODE_CHAR(SSLONLY, 'Z'); DO_MODE_CHAR(HIDEMODE, 'L'); @@ -3775,6 +3793,7 @@ mod_chanmode_format(struct mod_chanmode *change, char *outbuff) DO_MODE_CHAR(NOQUITMSGS, 'Q'); DO_MODE_CHAR(NOAMSG, 'T'); DO_MODE_CHAR(OPERSONLY, 'O'); + DO_MODE_CHAR(ADMINSONLY, 'a'); DO_MODE_CHAR(REGISTERED, 'z'); DO_MODE_CHAR(SSLONLY, 'Z'); DO_MODE_CHAR(HIDEMODE, 'L');