]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
login-common: Add login_proxy_kick_user_connection()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 6 Jan 2022 11:34:09 +0000 (13:34 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 8 Feb 2022 09:48:24 +0000 (10:48 +0100)
src/login-common/login-proxy.c
src/login-common/login-proxy.h

index 7ad5153f249ba56c22719c0f1db958c1a5cfbb4d..472bb87fed66b2ca6bd5ecec5b77c7fcd711a8b4 100644 (file)
@@ -1027,6 +1027,21 @@ want_kick_virtual_user(struct login_proxy *proxy, const char *const *args,
        return str_array_find(args, proxy->client->virtual_user);
 }
 
+static bool
+want_kick_user(struct login_proxy *proxy, const char *const *userp,
+              unsigned int key_idx ATTR_UNUSED)
+{
+       return strcmp(proxy->client->virtual_user, *userp) == 0;
+}
+
+static bool
+want_kick_user_session(struct login_proxy *proxy, const char *const *args,
+                      unsigned int key_idx ATTR_UNUSED)
+{
+       return strcmp(proxy->client->virtual_user, args[0]) == 0 &&
+               guid_128_cmp(proxy->anvil_conn_guid, (const uint8_t *)args[1]) == 0;
+}
+
 static bool
 want_kick_alt_username(struct login_proxy *proxy, const char *const *args,
                       unsigned int key_idx)
@@ -1086,6 +1101,18 @@ static unsigned int login_proxy_kick_user(const char *const *users)
        return login_proxy_kick(users, want_kick_virtual_user, 0);
 }
 
+unsigned int
+login_proxy_kick_user_connection(const char *user, const guid_128_t conn_guid)
+{
+       if (conn_guid == NULL || guid_128_is_empty(conn_guid))
+               return login_proxy_kick(&user, want_kick_user, 0);
+
+       const char *const args[] = {
+               user, (const char *)conn_guid
+       };
+       return login_proxy_kick(args, want_kick_user_session, 0);
+}
+
 static unsigned int login_proxy_kick_host(const char *const *hosts)
 {
        return login_proxy_kick(hosts, want_kick_host, 0);
index 7cdc3beabca5efac90e0ce02329b0ff11d057603..280ddef4e44847fb913ce8b23c59a8dd38b43e2d 100644 (file)
@@ -2,6 +2,7 @@
 #define LOGIN_PROXY_H
 
 #include "net.h"
+#include "guid.h"
 #include "auth-proxy.h"
 
 /* Max. number of embedded proxying connections until proxying fails.
@@ -117,6 +118,8 @@ enum auth_proxy_ssl_flags
 login_proxy_get_ssl_flags(const struct login_proxy *proxy) ATTR_PURE;
 unsigned int
 login_proxy_get_connect_timeout_msecs(const struct login_proxy *proxy) ATTR_PURE;
+unsigned int
+login_proxy_kick_user_connection(const char *user, const guid_128_t conn_guid);
 
 void login_proxy_kill_idle(void);