- discrim->authed = 0;
- } else {
- send_message(user, opserv, "MSG_INVALID_BINARY", argv[i]);
- goto fail;
- }
- } else if (irccasecmp(argv[i], "info_space") == 0) {
- /* XXX: A hack because you can't check explicitly for a space through
- * any other means */
- i++;
- if (true_string(argv[i])) {
- discrim->info_space = 1;
- } else if (false_string(argv[i])) {
- discrim->info_space = 0;
- } else {
- send_message(user, opserv, "MSG_INVALID_BINARY", argv[i]);
- goto fail;
- }
- } else if (irccasecmp(argv[i], "duration") == 0) {
- discrim->duration = ParseInterval(argv[++i]);
- } else if (irccasecmp(argv[i], "channel") == 0) {
+ discrim->accountmask = argv[++i];
+ discrim->authed = 1;
+ } else if (irccasecmp(argv[i], "authed") == 0) {
+ i++; /* true_string and false_string are macros! */
+ if (true_string(argv[i])) {
+ discrim->authed = 1;
+ } else if (false_string(argv[i])) {
+ if (discrim->accountmask) {
+ send_message(user, opserv, "OSMSG_ACCOUNTMASK_AUTHED");
+ goto fail;
+ }
+ discrim->authed = 0;
+ } else {
+ send_message(user, opserv, "MSG_INVALID_BINARY", argv[i]);
+ goto fail;
+ }
+ } else if (irccasecmp(argv[i], "info_space") == 0) {
+ /* XXX: A hack because you can't check explicitly for a space through
+ * any other means */
+ i++;
+ if (true_string(argv[i])) {
+ discrim->info_space = 1;
+ } else if (false_string(argv[i])) {
+ discrim->info_space = 0;
+ } else {
+ send_message(user, opserv, "MSG_INVALID_BINARY", argv[i]);
+ goto fail;
+ }
+ } else if (irccasecmp(argv[i], "duration") == 0) {
+ discrim->duration = ParseInterval(argv[++i]);
+ } else if (irccasecmp(argv[i], "channel") == 0) {
+ if(discrim->channel_count == DISCRIM_MAX_CHANS)
+ {
+ send_message(user, opserv, "OSMSG_TRACE_MAX_CHANNELS", DISCRIM_MAX_CHANS);
+ goto fail;
+ }
+