]> jfr.im git - irc/atheme/atheme.git/commitdiff
saslserv: make bad_password description more user-friendly
authorMax Teufel <redacted>
Sun, 8 Feb 2015 18:52:13 +0000 (19:52 +0100)
committerMax Teufel <redacted>
Sun, 8 Feb 2015 21:20:04 +0000 (22:20 +0100)
dist/atheme.conf.example
include/sasl.h
modules/saslserv/main.c

index d569401b5277f5ead250241fa182a3df301d6e75..f99e7ae0d673f6856267790be9374eeae1fd22a8 100644 (file)
@@ -1430,6 +1430,11 @@ saslserv {
         * The realname (gecos) information we want SaslServ to have.
         */
        real = "SASL Authentication Agent";
+
+       /* (*)hide_server_names
+        * Hide server names in the bad_password message.
+        */
+       #hide_server_names;
 };
 
 /* MemoServ configuration.
index d89bfae5cccf73f4abe16c7ac5aa360a3180a23b..3a33fe9ecdf2a41e2115c72d582b560392ee0de5 100644 (file)
@@ -18,6 +18,8 @@ struct sasl_session_ {
   char *buf, *p;
   int len, flags;
 
+  server_t *server;
+
   struct sasl_mechanism_ *mechptr;
   void *mechdata;
 
index 97e5b9a2086925165b23f51d59d28ab8f95ebcef..3b59d00856a65e8d768049c6691a3a7f5d4ec4b1 100644 (file)
@@ -19,6 +19,7 @@ DECLARE_MODULE_V1
 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);
@@ -39,10 +40,6 @@ static void mechlist_do_rebuild();
 
 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[])
 {
@@ -135,6 +132,7 @@ void _modinit(module_t *m)
        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++;
 }
 
@@ -148,6 +146,8 @@ void _moddeinit(module_unload_intent_t intent)
 
        mowgli_timer_destroy(base_eventloop, delete_stale_timer);
 
+       del_conf_item("HIDE_SERVER_NAMES", &saslsvs->conf_table);
+
         if (saslsvs != NULL)
                service_delete(saslsvs);
 
@@ -198,6 +198,14 @@ sasl_session_t *make_session(const char *uid)
        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);
 
@@ -454,6 +462,17 @@ static void sasl_packet(sasl_session_t *p, char *buf, int len)
                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;