X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_list.c;h=b43ab1575762b3330d2886a6327169d43a8d9cec;hb=refs%2Fheads%2Fupstream-ssl;hp=381c14ada554d0f027b66babc38c0fcb07245c5e;hpb=669a24ecfc453366d9be3727aaea68108ed2e29e;p=ircu2.10.12-pk.git diff --git a/ircd/m_list.c b/ircd/m_list.c index 381c14a..b43ab15 100644 --- a/ircd/m_list.c +++ b/ircd/m_list.c @@ -168,9 +168,12 @@ show_usage(struct Client *sptr) "matching \037pattern\037. "); send_reply(sptr, RPL_LISTUSAGE, "Note: Patterns may contain * and ?. " "You may only give one pattern match constraint."); - if (IsAnOper(sptr)) + if (IsAnOper(sptr)) { send_reply(sptr, RPL_LISTUSAGE, " \002S\002 ; Show secret channels."); + send_reply(sptr, RPL_LISTUSAGE, + " \002M\002 ; Show channel modes."); + } send_reply(sptr, RPL_LISTUSAGE, "Example: LIST <3,>1,C<10,T>0,#a* ; 2 users, younger than 10 " "min., topic set., starts with #a"); @@ -220,8 +223,11 @@ param_parse(struct Client *sptr, const char *param, struct ListingArgs *args, if (*param != ',' && *param != ' ' && *param != '\0') /* check syntax */ return show_usage(sptr); - if (is_time && val < 80000000) /* Toggle UTC/offset */ - val = TStime() - val * 60; + if (is_time && val < 80000000) { + /* Convert age to timestamp and reverse direction */ + val = TStime() - val * 60; + dir = (dir == '>') ? '<' : '>'; + } switch (is_time) { case 0: /* number of users on channel */ @@ -231,18 +237,18 @@ param_parse(struct Client *sptr, const char *param, struct ListingArgs *args, args->min_users = val; break; - case 1: /* channel topic */ + case 1: /* channel creation time */ if (dir == '<') - args->min_topic_time = val; + args->max_time = val; else - args->max_topic_time = val; + args->min_time = val; break; - case 2: /* channel creation time */ + case 2: /* channel topic */ if (dir == '<') - args->min_time = val; + args->max_topic_time = val; else - args->max_time = val; + args->min_topic_time = val; break; } break; @@ -259,6 +265,18 @@ param_parse(struct Client *sptr, const char *param, struct ListingArgs *args, return show_usage(sptr); break; + case 'M': + case 'm': + if (!IsAnOper(sptr) || !HasPriv(sptr, PRIV_LIST_CHAN)) + return show_usage(sptr); + + args->flags |= LISTARG_SHOWMODES; + param++; + + if (*param != ',' && *param != ' ' && *param != '\0') /* check syntax */ + return show_usage(sptr); + break; + default: /* It might be a wildcard... */ if (strchr(param, '*') || @@ -304,7 +322,6 @@ param_parse(struct Client *sptr, const char *param, struct ListingArgs *args, return show_usage(sptr); return LPARAM_CHANNEL; - break; } if (!*param) /* hit end of string? */ @@ -360,7 +377,6 @@ int m_list(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) switch (param_parse(sptr, parv[param], &args, parc == 2)) { case LPARAM_ERROR: /* error encountered, usage already sent, return */ return 0; - break; case LPARAM_CHANNEL: /* show channel instead */ show_channels++;