mowgli_list_t sessions;
static mowgli_list_t sasl_mechanisms;
static char mechlist_string[400];
+static bool hide_server_names;
sasl_session_t *find_session(const char *uid);
sasl_session_t *make_session(const char *uid);
sasl_mech_register_func_t sasl_mech_register_funcs = { &sasl_mech_register, &sasl_mech_unregister };
-struct sourceinfo_vtable sasl_vtable = {
- .description = "sasl"
-};
-
/* main services client routine */
static void saslserv(sourceinfo_t *si, int parc, char *parv[])
{
delete_stale_timer = mowgli_timer_add(base_eventloop, "sasl_delete_stale", delete_stale, NULL, 30);
saslsvs = service_add("saslserv", saslserv);
+ add_bool_conf_item("HIDE_SERVER_NAMES", &saslsvs->conf_table, 0, &hide_server_names, false);
authservice_loaded++;
}
mowgli_timer_destroy(base_eventloop, delete_stale_timer);
+ del_conf_item("HIDE_SERVER_NAMES", &saslsvs->conf_table);
+
if (saslsvs != NULL)
service_delete(saslsvs);
memset(p, 0, sizeof(sasl_session_t));
p->uid = strdup(uid);
+ server_t *s;
+ mowgli_patricia_iteration_state_t state;
+ MOWGLI_PATRICIA_FOREACH(s, &state, servlist)
+ {
+ if (!strncmp(s->sid, p->uid, strlen(s->sid)))
+ p->server = s;
+ }
+
n = mowgli_node_create();
mowgli_node_add(p, n, &sessions);
myuser_t *mu = myuser_find_by_nick(p->username);
if (mu)
{
+ char description[BUFSIZE];
+
+ if (p->server && !hide_server_names)
+ snprintf(description, BUFSIZE, "Unknown user on %s (via SASL)", p->server->name);
+ else
+ snprintf(description, BUFSIZE, "Unknown user (via SASL)");
+
+ struct sourceinfo_vtable sasl_vtable = {
+ .description = description
+ };
+
sourceinfo_t *si = sourceinfo_create();
si->service = saslsvs;
si->sourcedesc = p->uid;