X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/fa86a9e7614735d9ac02c02f35d142a3e4329792..18006b5cc4b0c4b72c638669a6ad5c8fb39ddf87:/src/proto-p10.c diff --git a/src/proto-p10.c b/src/proto-p10.c index 44654ae..10bec6e 100644 --- a/src/proto-p10.c +++ b/src/proto-p10.c @@ -91,6 +91,7 @@ #define CMD_SETTIME "SETTIME" #define CMD_SHUN "SHUN" #define CMD_SILENCE "SILENCE" +#define CMD_SNO "SNO" #define CMD_SQUERY "SQUERY" #define CMD_SQUIT "SQUIT" #define CMD_STATS "STATS" @@ -182,6 +183,7 @@ #define TOK_SETTIME "SE" #define TOK_SHUN "SU" #define TOK_SILENCE "U" +#define TOK_SNO "SNO" #define TOK_SQUERY "SQUERY" #define TOK_SQUIT "SQ" #define TOK_STATS "R" @@ -282,6 +284,7 @@ #define P10_SETTIME TYPE(SETTIME) #define P10_SHUN TYPE(SHUN) #define P10_SILENCE TYPE(SILENCE) +#define P10_SNO TYPE(SNO) #define P10_SQUERY TYPE(SQUERY) #define P10_SQUIT TYPE(SQUIT) #define P10_STATS TYPE(STATS) @@ -477,7 +480,7 @@ irc_server(struct server *srv) } } -static void +void irc_p10_pton(irc_in_addr_t *ip, const char *input) { if (strlen(input) == 6) { @@ -504,7 +507,7 @@ irc_p10_pton(irc_in_addr_t *ip, const char *input) } } -static void +void irc_p10_ntop(char *output, const irc_in_addr_t *ip) { if (!irc_in_addr_is_valid(*ip)) { @@ -586,6 +589,15 @@ irc_user(struct userNode *user) modes[modelen++] = 'f'; if (IsHiddenHost(user)) modes[modelen++] = 'x'; + if (IsBotM(user)) + modes[modelen++] = 'B'; + if (IsHideChans(user)) + modes[modelen++] = 'n'; + if (IsHideIdle(user)) + modes[modelen++] = 'I'; + if (IsXtraOp(user)) + modes[modelen++] = 'X'; + modes[modelen] = 0; /* we don't need to put the + in modes because it's in the format string. */ @@ -1482,7 +1494,22 @@ static CMD_FUNC(cmd_account) if(!strcmp(argv[2],"C")) { - if((hi = loc_auth(argv[4], argv[5]))) + if((hi = loc_auth(argv[4], argv[5], NULL))) + { + /* Return a AC A */ + putsock("%s " P10_ACCOUNT " %s A %s %lu", self->numeric, server->numeric , argv[3], hi->registered); + + } + else + { + /* Return a AC D */ + putsock("%s " P10_ACCOUNT " %s D %s", self->numeric, server->numeric , argv[3]); + } + return 1; + } + else if(!strcmp(argv[2],"H")) /* New enhanced (host) version of C */ + { + if((hi = loc_auth(argv[5], argv[6], argv[4] ))) { /* Return a AC A */ putsock("%s " P10_ACCOUNT " %s A %s %lu", self->numeric, server->numeric , argv[3], hi->registered); @@ -1805,7 +1832,15 @@ static CMD_FUNC(cmd_mark) return 0; } - target->version_reply = strdup(unsplit_string(argv + 3, argc - 3, NULL)); + char *version = unsplit_string(argv + 3, argc - 3, NULL); + if(!version) + version = ""; + + target->version_reply = strdup(version); + + if(match_ircglob(version, "WebTV;*")) + target->no_notice = true; /* webbies cant see notices */ + return 1; } /* unknown type of mark */ @@ -2440,6 +2475,8 @@ init_parse(void) dict_insert(irc_func_dict, TOK_VERSION, cmd_version); dict_insert(irc_func_dict, CMD_ADMIN, cmd_admin); dict_insert(irc_func_dict, TOK_ADMIN, cmd_admin); + dict_insert(irc_func_dict, CMD_SNO, cmd_dummy); + dict_insert(irc_func_dict, TOK_SNO, cmd_dummy); dict_insert(irc_func_dict, CMD_RPING, cmd_rping); dict_insert(irc_func_dict, TOK_RPING, cmd_rping); @@ -3004,10 +3041,10 @@ void mod_usermode(struct userNode *user, const char *mode_change) { case 'd': do_user_mode(FLAGS_DEAF); break; case 'k': do_user_mode(FLAGS_SERVICE); break; case 'g': do_user_mode(FLAGS_GLOBAL); break; - // sethost - reed/apples - // case 'h': do_user_mode(FLAGS_HELPER); break; - // I check if there's an 'h' in the first part, and if there, - // then everything after the space becomes their new host. + case 'B': do_user_mode(FLAGS_BOT); break; + case 'n': do_user_mode(FLAGS_HIDECHANS); break; + case 'I': do_user_mode(FLAGS_HIDEIDLE); break; + case 'X': do_user_mode(FLAGS_XTRAOP); break; case 'C': do_user_mode(FLAGS_CLOAKHOST); if (*word) { char cloakhost[MAXLEN]; @@ -3032,6 +3069,10 @@ void mod_usermode(struct userNode *user, const char *mode_change) { safestrncpy(user->cryptip, cloakip, sizeof(user->cryptip)); } break; + // sethost - reed/apples + // case 'h': do_user_mode(FLAGS_HELPER); break; + // I check if there's an 'h' in the first part, and if there, + // then everything after the space becomes their new host. case 'h': do_user_mode(FLAGS_SETHOST); if (*word) { char sethost[MAXLEN];