[srvx-commits] CVS: services/src nickserv.c,1.268,1.269
Brought to you by:
entrope
From: Entrope <en...@us...> - 2003-12-15 04:06:59
|
Update of /cvsroot/srvx/services/src In directory sc8-pr-cvs1:/tmp/cvs-serv31466/src Modified Files: nickserv.c Log Message: Implement versions of patches #830842 and #859061 Index: nickserv.c =================================================================== RCS file: /cvsroot/srvx/services/src/nickserv.c,v retrieving revision 1.268 retrieving revision 1.269 diff -C2 -r1.268 -r1.269 *** nickserv.c 9 Dec 2003 02:07:37 -0000 1.268 --- nickserv.c 15 Dec 2003 04:06:56 -0000 1.269 *************** *** 213,216 **** --- 213,217 ---- #define NSMSG_DB_UNREADABLE "Unable to read database file %s; check the log for more information." #define NSMSG_DB_MERGED "$N merged DB from %s (in "FMT_TIME_T".%03lu seconds)." + #define NSMSG_HANDLE_CHANGED_G "$b%s$b renamed account $b%s$b to $b%s$b." #define NSMSG_HANDLE_CHANGED "$b%s$b's account name has been changed to $b%s$b." #define NSMSG_BAD_HANDLE "Account $b%s$b not registered because it is in use by a network service, is too long, or contains invalid characters." *************** *** 1390,1394 **** { struct handle_info *hi; ! char *old_handle; unsigned int nn; --- 1391,1395 ---- { struct handle_info *hi; ! char msgbuf[MAXLEN], *old_handle; unsigned int nn; *************** *** 1410,1420 **** for (nn=0; nn<rf_list_used; nn++) rf_list[nn](hi, old_handle); free(old_handle); - - if (argv[1][0] == '*') { - nickserv_notice(user, NSMSG_HANDLE_CHANGED, argv[1]+1, argv[2]); - } else { - nickserv_notice(user, NSMSG_HANDLE_CHANGED, argv[1], argv[2]); - } return 1; } --- 1411,1417 ---- for (nn=0; nn<rf_list_used; nn++) rf_list[nn](hi, old_handle); + snprintf(msgbuf, sizeof(msgbuf), NSMSG_HANDLE_CHANGED_G, user->handle_info->handle, old_handle, hi->handle); + nickserv_notice(user, NSMSG_HANDLE_CHANGED, old_handle, hi->handle); free(old_handle); return 1; } *************** *** 2915,2933 **** } 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); } --- 2912,2960 ---- } + static int + nickserv_sort_accounts_by_access(const void *a, const void *b) + { + const struct handle_info *hi_a = *(const struct handle_info**)a; + const struct handle_info *hi_b = *(const struct handle_info**)b; + if (hi_a->opserv_level != hi_b->opserv_level) + return hi_b->opserv_level - hi_a->opserv_level; + return irccasecmp(hi_a->handle, hi_b->handle); + } + void nickserv_show_oper_accounts(struct userNode *user, struct svccmd *cmd) { ! struct handle_info_list hil; ! struct helpfile_table tbl; ! unsigned int ii; dict_iterator_t it; ! const char **ary; ! memset(&hil, 0, sizeof(hil)); ! for (it = dict_first(nickserv_handle_dict); it; it = iter_next(it)) { ! struct handle_info *hi = iter_data(it); ! if (hi->opserv_level) ! handle_info_list_append(&hil, hi); ! } ! qsort(hil.list, hil.used, sizeof(hil.list[0]), nickserv_sort_accounts_by_access); ! tbl.length = hil.used + 1; ! tbl.width = 2; ! tbl.flags = TABLE_NO_FREE; ! tbl.contents = malloc(tbl.length * sizeof(tbl.contents[0])); ! tbl.contents[0] = ary = malloc(tbl.width * sizeof(ary[0])); ! ary[0] = "Account"; ! ary[1] = "Level"; ! for (ii = 0; ii < hil.used; ) { ! ary = malloc(tbl.width * sizeof(ary[0])); ! ary[0] = hil.list[ii]->handle; ! ary[1] = strtab(hil.list[ii]->opserv_level); ! tbl.contents[++ii] = ary; ! } ! table_send(cmd->parent->bot, user->nick, 0, NULL, tbl); ! reply(MSG_MATCH_COUNT, hil.used); ! for (ii = 0; ii < hil.used; ) ! free(tbl.contents[++ii]); ! free(tbl.contents); ! free(hil.list); } *************** *** 3514,3525 **** } if (nickserv_conf.email_enabled) { ! /* Change weights for authcookie and resetpass to reduce their use to annoy users. */ ! modcmd_register(nickserv_module, "AUTHCOOKIE", cmd_authcookie, 2, 0, "weight", "10.0", NULL); ! modcmd_register(nickserv_module, "RESETPASS", cmd_resetpass, 3, 0, "flags", "+qualified", "weight", "10.0", NULL); nickserv_define_func("COOKIE", cmd_cookie, -1, 0, 1); nickserv_define_func("DELCOOKIE", cmd_delcookie, -1, 1, 0); dict_insert(nickserv_opt_dict, "EMAIL", opt_email); } ! modcmd_register(nickserv_module, "GHOST", cmd_ghost, 2, MODCMD_REQUIRE_AUTHED, "weight", "5.0", NULL); /* miscellaneous commands */ nickserv_define_func("STATUS", cmd_status, -1, 0, 0); --- 3541,3551 ---- } if (nickserv_conf.email_enabled) { ! nickserv_define_func("AUTHCOOKIE", cmd_authcookie, -1, 0, 0); ! nickserv_define_func("RESETPASS", cmd_resetpass, -1, 0, 1); nickserv_define_func("COOKIE", cmd_cookie, -1, 0, 1); nickserv_define_func("DELCOOKIE", cmd_delcookie, -1, 1, 0); dict_insert(nickserv_opt_dict, "EMAIL", opt_email); } ! nickserv_define_func("GHOST", cmd_ghost, -1, 1, 0); /* miscellaneous commands */ nickserv_define_func("STATUS", cmd_status, -1, 0, 0); |