]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
anvil, doveadm: Simplify CONNECT-DUMP output format
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Sun, 12 Dec 2021 23:17:13 +0000 (01:17 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 8 Feb 2022 09:48:24 +0000 (10:48 +0100)
src/anvil/connect-limit.c
src/doveadm/doveadm-who.c

index bf85518f7d91a76bce06545d11189841a16e6b1d..4927c60bd72740dd10fc295e242041b6c39f10cd 100644 (file)
@@ -229,15 +229,15 @@ void connect_limit_dump(struct connect_limit *limit, struct ostream *output)
        while (ret >= 0 &&
               hash_table_iterate(iter, limit->session_hash, &session, &value)) T_BEGIN {
                str_truncate(str, 0);
+               str_printfa(str, "%ld\t%u\t", (long)session->pid,
+                           session->refcount);
+               str_append_tabescaped(str, session->userip->username);
+               str_append_c(str, '\t');
                str_append_tabescaped(str, session->userip->service);
-               if (session->userip->ip.family != 0) {
-                       str_append_c(str, '/');
+               str_append_c(str, '\t');
+               if (session->userip->ip.family != 0)
                        str_append(str, net_ip2addr(&session->userip->ip));
-               }
-               str_append_c(str, '/');
-               str_append_tabescaped(str, session->userip->username);
-               str_printfa(str, "\t%ld\t%u\n", (long)session->pid,
-                           session->refcount);
+               str_append_c(str, '\n');
                ret = o_stream_send(output, str_data(str), str_len(str));
        } T_END;
        hash_table_iterate_deinit(&iter);
index 1464f1b5fa29c9ae6b250ff1bd0f48e7ed2685f8..a562998b7303c4d568d3884f8d62d67b4dc89462 100644 (file)
@@ -81,31 +81,22 @@ who_user_has_ip(const struct who_user *user, const struct ip_addr *ip)
 static int who_parse_line(const char *line, struct who_line *line_r)
 {
        const char *const *args = t_strsplit_tabescaped(line);
-       const char *ident = args[0];
-       const char *pid_str = args[1];
-       const char *refcount_str = args[2];
-       const char *p, *ip_str;
-
        i_zero(line_r);
 
-       /* ident = service/ip/username (imap, pop3)
-          or      service/username (lmtp) */
-       p = strchr(ident, '/');
-       if (p == NULL)
+       /* <pid> <refcount> <username> <service> <ip> */
+       if (str_array_length(args) < 5)
                return -1;
-       if (str_to_pid(pid_str, &line_r->pid) < 0)
+
+       if (str_to_pid(args[0], &line_r->pid) < 0)
                return -1;
-       line_r->service = t_strdup_until(ident, p++);
-       line_r->username = strchr(p, '/');
-       if (line_r->username == NULL) {
-               /* no IP */
-               line_r->username = p;
-       } else {
-               ip_str = t_strdup_until(p, line_r->username++);
-               (void)net_addr2ip(ip_str, &line_r->ip);
-       }
-       if (str_to_uint(refcount_str, &line_r->refcount) < 0)
+       if (str_to_uint(args[1], &line_r->refcount) < 0)
                return -1;
+       line_r->username = args[2];
+       line_r->service = args[3];
+       if (args[4][0] != '\0') {
+               if (net_addr2ip(args[4], &line_r->ip) < 0)
+                       return -1;
+       }
        return 0;
 }