Support ircu's XQUERY and XRESPONSE.
[srvx.git] / src / opserv.c
index ec4b57fc58b6589286f6e654390708f52dacc2e2..38ad356ee2d84bbc14fbe97b3156460d054ed2da 100644 (file)
@@ -579,7 +579,7 @@ static MODCMD_FUNC(cmd_clearmodes)
         return 0;
     }
     mod_chanmode_init(&change);
-    change.modes_clear = channel->modes;
+    change.modes_clear = channel->modes & ~MODE_REGISTERED;
     modcmd_chanmode_announce(&change);
     reply("OSMSG_CLEARMODES_DONE", channel->name);
     return 1;
@@ -3811,15 +3811,14 @@ gtrace_print_func(struct gline *gline, void *extra)
     else
         strcpy(lastmod, "<unknown>");
     intervalString(lifetime, gline->lifetime - now, xtra->user->handle_info);
-    if (gline->expires < now) {
+    if (!gline->expires) {
+        send_message(xtra->user, opserv, "OSMSG_GTRACE_FOREVER", gline->target, issued, gline->issuer, lastmod, NULL, gline->reason, lifetime);
+    } else if (gline->expires < now) {
         intervalString(expires, now - gline->expires, xtra->user->handle_info);
         send_message(xtra->user, opserv, "OSMSG_GTRACE_EXPIRED", gline->target, issued, gline->issuer, lastmod, expires, gline->reason, lifetime);
-    } else if (gline->expires) {
+    } else { /* must be in the future */
         intervalString(expires, gline->expires - now, xtra->user->handle_info);
         send_message(xtra->user, opserv, "OSMSG_GTRACE_FORMAT", gline->target, issued, gline->issuer, lastmod, expires, gline->reason, lifetime);
-    } else {
-        send_message(xtra->user, opserv, "OSMSG_GTRACE_FOREVER", gline->target, issued, gline->issuer, lastmod, NULL, gline->reason, lifetime);
-
     }
 }