[srvx-commits] CVS: services/src nickserv.c,1.260,1.261 nickserv.h,1.47,1.48 opserv.c,1.340,1.341
Brought to you by:
entrope
From: Entrope <en...@us...> - 2003-10-05 03:12:43
|
Update of /cvsroot/srvx/services/src In directory sc8-pr-cvs1:/tmp/cvs-serv21626/src Modified Files: nickserv.c nickserv.h opserv.c Log Message: add "/msg opserv access *" handler, similar to wasted's patch check gags on nick changes, in case somebody was silly enough to use a nick-based gag code and formatting cleanups Index: nickserv.c =================================================================== RCS file: /cvsroot/srvx/services/src/nickserv.c,v retrieving revision 1.260 retrieving revision 1.261 diff -C2 -r1.260 -r1.261 *** nickserv.c 4 Oct 2003 01:35:40 -0000 1.260 --- nickserv.c 5 Oct 2003 03:12:36 -0000 1.261 *************** *** 23,27 **** #include "global.h" #include "modcmd.h" ! #include "opserv.h" /* for gag_create() */ #include "saxdb.h" #include "sendmail.h" --- 23,27 ---- #include "global.h" #include "modcmd.h" ! #include "opserv.h" /* for gag_create(), opserv_bad_channel() */ #include "saxdb.h" #include "sendmail.h" *************** *** 141,144 **** --- 141,145 ---- #define NSMSG_BAD_MAX_LOGINS "MaxLogins must be at most %d." #define NSMSG_MAX_LOGINS "Your account already has its limit of %d user(s) logged in." + #define NSMSG_SETTEE_LOGGED_IN "%s is already logged in, so you cannot do that." #define NSMSG_STAMPED_REGISTER "You have already authenticated to an account once this session; you may not register a new account." *************** *** 528,534 **** for (nn=0; nn<channel->members.used; ++nn) { mn = channel->members.list[nn]; ! if (mn->user == except) ! continue; ! if (mn->user->handle_info == handle) return mn; } --- 529,533 ---- for (nn=0; nn<channel->members.used; ++nn) { mn = channel->members.list[nn]; ! if ((mn->user != except) && (mn->user->handle_info == handle)) return mn; } *************** *** 575,578 **** --- 574,583 ---- if (user && IsLocal(user)) return 0; + /* for consistency, only allow account names that could be nicks */ + if (!is_valid_nick(handle)) + return 0; + /* disallow account names that look like bad words */ + if (opserv_bad_channel(handle)) + return 0; /* test either regex or containing all valid chars */ if (nickserv_conf.valid_handle_regex_set) { *************** *** 592,602 **** is_registerable_nick(const char *nick) { ! struct userNode *user; ! /* first, check that the nick is acceptible by the server */ ! if (!is_valid_nick(nick)) ! return 0; ! /* cant register a juped nick/service nick.. client could kill it. */ ! user = GetUserH(nick); ! if (user && IsLocal(user)) return 0; /* test either regex or as valid handle */ --- 597,602 ---- is_registerable_nick(const char *nick) { ! /* make sure it could be used as an account name */ ! if (!is_valid_handle(nick)) return 0; /* test either regex or as valid handle */ *************** *** 609,615 **** } return !err; - } else { - return is_valid_handle(nick); } } --- 609,614 ---- } return !err; } + return 1; } *************** *** 1120,1124 **** } else { string_list_append(hi->masks, generate_hostmask(user, GENMASK_OMITNICK|GENMASK_NO_HIDING|GENMASK_ANY_IDENT)); ! if (user->ip.s_addr) string_list_append(hi->masks, generate_hostmask(user, GENMASK_OMITNICK|GENMASK_BYIP|GENMASK_NO_HIDING|GENMASK_ANY_IDENT)); } --- 1119,1123 ---- } else { string_list_append(hi->masks, generate_hostmask(user, GENMASK_OMITNICK|GENMASK_NO_HIDING|GENMASK_ANY_IDENT)); ! if (user->ip.s_addr && user->hostname[strspn(user->hostname, "0123456789.")]) string_list_append(hi->masks, generate_hostmask(user, GENMASK_OMITNICK|GENMASK_BYIP|GENMASK_NO_HIDING|GENMASK_ANY_IDENT)); } *************** *** 1160,1163 **** --- 1159,1163 ---- if (!settee) { nickserv_notice(user, MSG_NICK_UNKNOWN, argv[4]); + free(mask); return 0; } *************** *** 1166,1171 **** } } else if ((settee = GetUserH(argv[3]))) { - if (settee->handle_info && !oper_outranks(user, settee->handle_info)) - return 0; mask = generate_hostmask(settee, GENMASK_OMITNICK|GENMASK_NO_HIDING|GENMASK_ANY_IDENT); } else { --- 1166,1169 ---- *************** *** 1173,1179 **** return 0; } ! ! if (!(hi = nickserv_register(user, settee, argv[1], argv[2], 0))) return 0; string_list_append(hi->masks, mask); return 1; --- 1171,1183 ---- return 0; } ! if (settee && settee->handle_info) { ! nickserv_notice(user, NSMSG_SETTEE_LOGGED_IN, settee->nick); ! free(mask); return 0; + } + if (!(hi = nickserv_register(user, settee, argv[1], argv[2], 0))) { + free(mask); + return 0; + } string_list_append(hi->masks, mask); return 1; *************** *** 1386,1390 **** NICKSERV_MIN_PARMS(3); ! if (!(hi = get_victim_oper(user, argv[1]))) return 0; if (!is_valid_handle(argv[2])) { nickserv_notice(user, NSMSG_FAIL_RENAME, argv[1], argv[2]); --- 1390,1395 ---- NICKSERV_MIN_PARMS(3); ! if (!(hi = get_victim_oper(user, argv[1]))) ! return 0; if (!is_valid_handle(argv[2])) { nickserv_notice(user, NSMSG_FAIL_RENAME, argv[1], argv[2]); *************** *** 1888,1892 **** struct handle_info *hi; NICKSERV_MIN_PARMS(3); ! if (!(hi = get_victim_oper(user, argv[1]))) return 0; return nickserv_delmask(user, hi, argv[2]); } --- 1893,1898 ---- struct handle_info *hi; NICKSERV_MIN_PARMS(3); ! if (!(hi = get_victim_oper(user, argv[1]))) ! return 0; return nickserv_delmask(user, hi, argv[2]); } *************** *** 1912,1917 **** } flag = 1 << (pos - 1); ! if (add) added |= flag, removed &= ~flag; ! else removed |= flag, added &= ~flag; break; } --- 1918,1925 ---- } flag = 1 << (pos - 1); ! if (add) ! added |= flag, removed &= ~flag; ! else ! removed |= flag, added &= ~flag; break; } *************** *** 1929,1933 **** before = hi->flags & (HI_FLAG_SUPPORT_HELPER|HI_FLAG_NETWORK_HELPER); ! if (!nickserv_modify_handle_flags(user, nickserv, flags, &added, &removed)) return 0; hi->flags = (hi->flags | added) & ~removed; after = hi->flags & (HI_FLAG_SUPPORT_HELPER|HI_FLAG_NETWORK_HELPER); --- 1937,1942 ---- before = hi->flags & (HI_FLAG_SUPPORT_HELPER|HI_FLAG_NETWORK_HELPER); ! if (!nickserv_modify_handle_flags(user, nickserv, flags, &added, &removed)) ! return 0; hi->flags = (hi->flags | added) & ~removed; after = hi->flags & (HI_FLAG_SUPPORT_HELPER|HI_FLAG_NETWORK_HELPER); *************** *** 1938,1944 **** struct chanNode *schannel; schannel = chanserv_support_channel(); ! for (uNode = hi->users; uNode; uNode = uNode->next_authed) { ! if (GetUserMode(schannel, uNode)) break; ! } if (!uNode) HANDLE_CLEAR_FLAG(hi, HELPING); } --- 1947,1953 ---- struct chanNode *schannel; schannel = chanserv_support_channel(); ! for (uNode = hi->users; uNode; uNode = uNode->next_authed) ! if (GetUserMode(schannel, uNode)) ! break; if (!uNode) HANDLE_CLEAR_FLAG(hi, HELPING); } *************** *** 1946,1957 **** if (after && !before) { /* Add user to current helper list. */ ! for (uNode = hi->users; uNode; uNode = uNode->next_authed) { userList_append(&curr_helpers, uNode); - } } else if (!after && before) { /* Remove user from current helper list. */ ! for (uNode = hi->users; uNode; uNode = uNode->next_authed) { userList_remove(&curr_helpers, uNode); - } } --- 1955,1964 ---- if (after && !before) { /* Add user to current helper list. */ ! for (uNode = hi->users; uNode; uNode = uNode->next_authed) userList_append(&curr_helpers, uNode); } else if (!after && before) { /* Remove user from current helper list. */ ! for (uNode = hi->users; uNode; uNode = uNode->next_authed) userList_remove(&curr_helpers, uNode); } *************** *** 2021,2025 **** if (argc > 1) { if ((argv[1][0] == '*') && (argv[1][1] == 0)) { ! if (hi->infoline) free(hi->infoline); hi->infoline = NULL; } else { --- 2028,2032 ---- if (argc > 1) { if ((argv[1][0] == '*') && (argv[1][1] == 0)) { ! free(hi->infoline); hi->infoline = NULL; } else { *************** *** 2184,2190 **** unsigned long flen; ! for (i=flen=0; handle_flags[i]; i++) { ! if (hi->flags & 1 << i) flags[flen++] = handle_flags[i]; ! } flags[flen] = 0; } else { --- 2191,2197 ---- unsigned long flen; ! for (i=flen=0; handle_flags[i]; i++) ! if (hi->flags & 1 << i) ! flags[flen++] = handle_flags[i]; flags[flen] = 0; } else { *************** *** 2243,2247 **** int oper_try_set_access(struct userNode *user, struct userNode *bot, struct handle_info *target, unsigned int new_level) { ! if (!oper_has_access(user, bot, nickserv_conf.modoper_level, 0)) return 0; if ((user->handle_info->opserv_level < target->opserv_level) || ((user->handle_info->opserv_level == target->opserv_level) --- 2250,2255 ---- int oper_try_set_access(struct userNode *user, struct userNode *bot, struct handle_info *target, unsigned int new_level) { ! if (!oper_has_access(user, bot, nickserv_conf.modoper_level, 0)) ! return 0; if ((user->handle_info->opserv_level < target->opserv_level) || ((user->handle_info->opserv_level == target->opserv_level) *************** *** 2260,2264 **** return 0; } ! if (target->opserv_level == new_level) return 0; log_module(NS_LOG, LOG_INFO, "Account %s setting oper level for account %s to %d (from %d).", user->handle_info->handle, target->handle, new_level, target->opserv_level); --- 2268,2273 ---- return 0; } ! if (target->opserv_level == new_level) ! return 0; log_module(NS_LOG, LOG_INFO, "Account %s setting oper level for account %s to %d (from %d).", user->handle_info->handle, target->handle, new_level, target->opserv_level); *************** *** 2921,2924 **** --- 2930,2950 ---- } + void + nickserv_show_oper_accounts(struct userNode *user, struct svccmd *cmd) + { + struct handle_info *hi; + dict_iterator_t it; + unsigned int count; + + for (it = dict_first(nickserv_handle_dict), count = 0; it; it = iter_next(it)) { + hi = iter_data(it); + if (hi->opserv_level > 0) { + reply("%s %d", hi->handle, hi->opserv_level); + ++count; + } + } + reply(MSG_MATCH_COUNT, count); + } + static NICKSERV_FUNC(cmd_search) { *************** *** 2932,2938 **** sprintf(buf, "search %s", argv[1]); subcmd = dict_find(nickserv_service->commands, buf, NULL); ! if (!irccasecmp(argv[1], "print")) action = search_print_func; ! else if (!irccasecmp(argv[1], "count")) action = search_count_func; ! else if (!irccasecmp(argv[1], "unregister")) action = search_unregister_func; else { nickserv_notice(user, NSMSG_INVALID_ACTION, argv[1]); --- 2958,2967 ---- sprintf(buf, "search %s", argv[1]); subcmd = dict_find(nickserv_service->commands, buf, NULL); ! if (!irccasecmp(argv[1], "print")) ! action = search_print_func; ! else if (!irccasecmp(argv[1], "count")) ! action = search_count_func; ! else if (!irccasecmp(argv[1], "unregister")) ! action = search_unregister_func; else { nickserv_notice(user, NSMSG_INVALID_ACTION, argv[1]); *************** *** 2940,2961 **** } ! if (subcmd && !svccmd_can_invoke(user, nickserv, subcmd, NULL, SVCCMD_NOISY)) return 0; discrim = nickserv_discrim_create(user, argc-2, argv+2); ! if (!discrim) return 0; ! if (action == search_print_func) { nickserv_notice(user, MSG_SEARCH_RESULTS, "accounts"); ! } else if (action == search_count_func) { discrim->limit = INT_MAX; - } matches = nickserv_discrim_search(discrim, action, user); ! if (matches) { nickserv_notice(user, MSG_MATCH_COUNT, matches); ! } else { nickserv_notice(user, MSG_NO_MATCHES); - } free(discrim); --- 2969,2990 ---- } ! if (subcmd && !svccmd_can_invoke(user, nickserv, subcmd, NULL, SVCCMD_NOISY)) ! return 0; discrim = nickserv_discrim_create(user, argc-2, argv+2); ! if (!discrim) ! return 0; ! if (action == search_print_func) nickserv_notice(user, MSG_SEARCH_RESULTS, "accounts"); ! else if (action == search_count_func) discrim->limit = INT_MAX; matches = nickserv_discrim_search(discrim, action, user); ! if (matches) nickserv_notice(user, MSG_MATCH_COUNT, matches); ! else nickserv_notice(user, MSG_NO_MATCHES); free(discrim); Index: nickserv.h =================================================================== RCS file: /cvsroot/srvx/services/src/nickserv.h,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -r1.47 -r1.48 *** nickserv.h 4 Oct 2003 01:35:41 -0000 1.47 --- nickserv.h 5 Oct 2003 03:12:36 -0000 1.48 *************** *** 23,26 **** --- 23,27 ---- #include "hash.h" /* for NICKLEN, etc., and common.h */ + struct svccmd; #define NICKSERV_HANDLE_LEN NICKLEN *************** *** 120,123 **** --- 121,125 ---- int nickserv_modify_handle_flags(struct userNode *user, struct userNode *bot, const unsigned char *str, unsigned long *add, unsigned long *remove); int oper_has_access(struct userNode *user, struct userNode *bot, unsigned int min_level, unsigned int quiet); + void nickserv_show_oper_accounts(struct userNode *user, struct svccmd *cmd); /* auth_funcs are called when a user gets a new handle_info. They are Index: opserv.c =================================================================== RCS file: /cvsroot/srvx/services/src/opserv.c,v retrieving revision 1.340 retrieving revision 1.341 diff -C2 -r1.340 -r1.341 *** opserv.c 3 Oct 2003 02:45:26 -0000 1.340 --- opserv.c 5 Oct 2003 03:12:36 -0000 1.341 *************** *** 159,163 **** #define OSMSG_HOST_IS_TRUSTED "%s (%s; set %s ago by %s; expires %s: %s)" #define OSMSG_UPTIME_STATS "Uptime: %s (%u lines processed, CPU time %.2fu/%.2fs)" - #define OSMSG_SOCKCHECK_STATS "Since booting, I have checked %d clients for illicit proxies, and detected %d proxy hosts.\nI am currently checking %d clients (out of %d max) and have a backlog of %d more to start on.\nI currently have %d hosts cached.\nI know how to detect %d kinds of proxies." #define OSMSG_UNKNOWN_STATS "Unknown statistics type $b%s$b" #define OSMSG_LINE_DUMPED "Raw line sent." --- 159,162 ---- *************** *** 340,343 **** --- 339,343 ---- static unsigned int opserv_discrim_search(discrim_t discrim, discrim_search_func dsf, void *data); [...1020 lines suppressed...] policer_params_set(pp, "size", "200"); policer_params_set(pp, "drain-rate", "3"); ! if ((child = database_get_data(conf_node, KEY_NEW_USER_POLICER, RECDB_OBJECT))) { dict_foreach(child, set_policer_param, pp); - } } --- 3898,3909 ---- } ! if (opserv_conf.new_user_policer.params) pp = opserv_conf.new_user_policer.params; ! else pp = opserv_conf.new_user_policer.params = policer_params_new(); policer_params_set(pp, "size", "200"); policer_params_set(pp, "drain-rate", "3"); ! if ((child = database_get_data(conf_node, KEY_NEW_USER_POLICER, RECDB_OBJECT))) dict_foreach(child, set_policer_param, pp); } |