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)
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);
#define LOGIN_PROXY_H
#include "net.h"
+#include "guid.h"
#include "auth-proxy.h"
/* Max. number of embedded proxying connections until proxying fails.
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);