gline_comparator(const void *a, const void *b)
{
const struct gline *ga=a, *gb=b;
- return ga->expires - gb->expires;
+ return ga->lifetime - gb->lifetime;
}
static void
heap_remove_pred(gline_heap, gline_equal_p, ent);
if (ent->issued > lastmod)
ent->issued = lastmod;
- if (ent->lastmod < lastmod)
+ if (ent->lastmod < lastmod) {
ent->lastmod = lastmod;
- if (ent->expires != expires)
- ent->expires = expires;
+ ent->expires = expires;
+ if (strcmp(ent->reason, reason)) {
+ free(ent->reason);
+ ent->reason = strdup(reason);
+ }
+ }
if (ent->lifetime < lifetime)
ent->lifetime = lifetime;
- if (strcmp(ent->issuer, issuer)) {
- free(ent->issuer);
- ent->issuer = strdup(issuer);
- }
- if (strcmp(ent->reason, reason)) {
- free(ent->reason);
- ent->reason = strdup(reason);
- }
} else {
ent = malloc(sizeof(*ent));
ent->issued = issued;
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);
-
}
}