]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/s_conf.c
Generate the "Temporary K-line %d min" part from aconf->hold - aconf->created.
[irc/rqf/shadowircd.git] / src / s_conf.c
index 42635284a3d8f14f0c4d0eca7e6a1359a2e5a795..c3df6fd04d06b982d2acec9a8666cbc305fa97ea 100644 (file)
@@ -375,11 +375,10 @@ verify_access(struct Client *client_p, const char *username)
        else if(aconf->status & CONF_KILL)
        {
                if(ConfigFileEntry.kline_with_reason)
-               {
                        sendto_one(client_p,
                                        form_str(ERR_YOUREBANNEDCREEP),
-                                       me.name, client_p->name, aconf->passwd);
-               }
+                                       me.name, client_p->name,
+                                       get_user_ban_reason(aconf));
                add_reject(client_p, aconf->user, aconf->host);
                return (BANNED_CLIENT);
        }
@@ -1124,6 +1123,33 @@ get_printable_conf(struct ConfItem *aconf, char **name, char **host,
        *port = (int) aconf->port;
 }
 
+char *
+get_user_ban_reason(struct ConfItem *aconf)
+{
+       static char reasonbuf[BUFSIZE];
+
+       if (aconf->flags & CONF_FLAGS_TEMPORARY &&
+                       (aconf->status == CONF_KILL || aconf->status == CONF_DLINE))
+               rb_snprintf(reasonbuf, sizeof reasonbuf,
+                               "Temporary %c-line %d min. - ",
+                               aconf->status == CONF_DLINE ? 'D' : 'K',
+                               (aconf->hold - aconf->created) / 60);
+       else
+               reasonbuf[0] = '\0';
+       if (aconf->passwd)
+               rb_strlcat(reasonbuf, aconf->passwd, sizeof reasonbuf);
+       else
+               rb_strlcat(reasonbuf, "No Reason", sizeof reasonbuf);
+       if (aconf->created)
+       {
+               rb_strlcat(reasonbuf, " (", sizeof reasonbuf);
+               rb_strlcat(reasonbuf, smalldate(aconf->created),
+                               sizeof reasonbuf);
+               rb_strlcat(reasonbuf, ")", sizeof reasonbuf);
+       }
+       return reasonbuf;
+}
+
 void
 get_printable_kline(struct Client *source_p, struct ConfItem *aconf, 
                    char **host, char **reason,
@@ -1132,8 +1158,8 @@ get_printable_kline(struct Client *source_p, struct ConfItem *aconf,
        static char null[] = "<NULL>";
 
        *host = EmptyString(aconf->host) ? null : aconf->host;
-       *reason = EmptyString(aconf->passwd) ? null : aconf->passwd;
        *user = EmptyString(aconf->user) ? null : aconf->user;
+       *reason = get_user_ban_reason(aconf);
 
        if(EmptyString(aconf->spasswd) || !IsOper(source_p))
                *oper_reason = NULL;