Update of /cvsroot/srvx/services/src
In directory usw-pr-cvs1:/tmp/cvs-serv9296/src
Modified Files:
opserv.c
Log Message:
don't allow users to set a discrim on a channel
fix some meory leaks and a free'd pointer reference
Index: opserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/opserv.c,v
retrieving revision 1.286
retrieving revision 1.287
diff -C2 -r1.286 -r1.287
*** opserv.c 29 Oct 2002 01:56:28 -0000 1.286
--- opserv.c 31 Oct 2002 03:42:28 -0000 1.287
***************
*** 202,205 ****
--- 202,206 ----
#define OSMSG_ALERT_TRIGGERED "Alert $b%s$b triggered by user $b%s$b!%s@%s (%s)."
#define OSMSG_ALERT_EXISTS "An alert named $b%s$b already exists."
+ #define OSMSG_NO_CHANNEL_ALERT "Alert not registered: specifying a channel is not supported."
#define OSMSG_UNKNOWN_REACTION "Unknown reaction to alert $b%s$b."
#define OSMSG_ADDED_ALERT "Added alert named $b%s$b."
***************
*** 2470,2473 ****
--- 2471,2479 ----
wordc = split_line(discrim_copy, false, ArrayLength(wordv), wordv);
alert->discrim = opserv_discrim_create(req, wordc, wordv);
+ if (alert->discrim->channel) {
+ opserv_notice(req, OSMSG_NO_CHANNEL_ALERT);
+ opserv_free_user_alert(alert->discrim);
+ alert->discrim = NULL;
+ }
if (!alert->discrim) {
free(alert->text_discrim);
***************
*** 3035,3039 ****
} else if (discrim->mask_host && !discrim->mask_host[strcspn(discrim->mask_host, "?*")]) {
struct opserv_hostinfo *ohi = dict_find(opserv_hostinfo_dict, discrim->mask_host, NULL);
! if (!ohi) return 0;
for (nn=0; (nn<ohi->clients.used) && (matched.used < discrim->limit); nn++) {
if (discrim_match(discrim, ohi->clients.list[nn])) {
--- 3041,3048 ----
} else if (discrim->mask_host && !discrim->mask_host[strcspn(discrim->mask_host, "?*")]) {
struct opserv_hostinfo *ohi = dict_find(opserv_hostinfo_dict, discrim->mask_host, NULL);
! if (!ohi) {
! userList_clean(&matched);
! return 0;
! }
for (nn=0; (nn<ohi->clients.used) && (matched.used < discrim->limit); nn++) {
if (discrim_match(discrim, ohi->clients.list[nn])) {
***************
*** 3252,3258 ****
}
das.discrim = opserv_discrim_create(user, argc-2, argv+2);
if (!das.discrim) return 0;
- das.source = user;
if (action == trace_print_func) {
--- 3261,3268 ----
}
+ das.dict = NULL;
+ das.source = user;
das.discrim = opserv_discrim_create(user, argc-2, argv+2);
if (!das.discrim) return 0;
if (action == trace_print_func) {
***************
*** 3262,3265 ****
--- 3272,3276 ----
} else if (action == trace_domains_func) {
das.dict = dict_new();
+ dict_set_free_data(das.dict, free);
dict_set_free_keys(das.dict, free);
das.disp_limit = das.discrim->limit;
***************
*** 3282,3285 ****
--- 3293,3297 ----
free(das.discrim);
+ dict_delete(das.dict);
return 1;
}
***************
*** 3794,3800 ****
}
if (!svccmd_can_invoke(user, opserv, subcmd, channel, 0, 0, 1)) return 0;
! if (opserv_add_user_alert(user, name, reaction, unsplit_string(argv + 3, argc - 3, NULL))) {
! opserv_notice(user, OSMSG_ADDED_ALERT, name);
! }
return 1;
}
--- 3806,3811 ----
}
if (!svccmd_can_invoke(user, opserv, subcmd, channel, 0, 0, 1)) return 0;
! if (!opserv_add_user_alert(user, name, reaction, unsplit_string(argv + 3, argc - 3, NULL))) return 0;
! opserv_notice(user, OSMSG_ADDED_ALERT, name);
return 1;
}
***************
*** 3805,3810 ****
OPSERV_MIN_PARMS(2, 0);
for (i=1; i<argc; i++) {
if (dict_remove(opserv_user_alerts, argv[i])) {
- dict_remove(opserv_nick_based_alerts, argv[i]);
opserv_notice(user, OSMSG_REMOVED_ALERT, argv[i]);
} else {
--- 3816,3821 ----
OPSERV_MIN_PARMS(2, 0);
for (i=1; i<argc; i++) {
+ dict_remove(opserv_nick_based_alerts, argv[i]);
if (dict_remove(opserv_user_alerts, argv[i])) {
opserv_notice(user, OSMSG_REMOVED_ALERT, argv[i]);
} else {
|