]> jfr.im git - solanum.git/blobdiff - authd/providers/opm.c
Revert "authd: change to lists instead of dictionaries for various things"
[solanum.git] / authd / providers / opm.c
index 746604b5c0b35ed27e167fbe5d4adde044a2f49b..560eecee09f121df929b1b4994f5bd642b1ed17b 100644 (file)
@@ -98,11 +98,15 @@ static bool create_listener(const char *ip, uint16_t port);
 static int opm_timeout = OPM_TIMEOUT_DEFAULT;
 static bool opm_enable = false;
 
-#define LISTEN_IPV4 0
-#define LISTEN_IPV6 1
+enum
+{
+       LISTEN_IPV4,
+       LISTEN_IPV6,
+       LISTEN_LAST,
+};
 
 /* IPv4 and IPv6 */
-static struct opm_listener listeners[2];
+static struct opm_listener listeners[LISTEN_LAST];
 
 static inline protocol_t
 get_protocol_from_string(const char *str)
@@ -299,7 +303,7 @@ opm_connected(rb_fde_t *F, int error, void *data)
 
 end:
        rb_close(scan->F);
-       rb_dlinkFindDelete(scan, &lookup->scans);
+       rb_dlinkDelete(&scan->node, &lookup->scans);
        rb_free(scan);
 }
 
@@ -452,13 +456,11 @@ establish_connection(struct auth_client *auth, struct opm_proxy *proxy)
                rb_connect_tcp(scan->F,
                                (struct sockaddr *)&c_a,
                                (struct sockaddr *)&l_a,
-                               GET_SS_LEN(&l_a),
                                opm_connected, scan, opm_timeout);
        else
                rb_connect_tcp_ssl(scan->F,
                                (struct sockaddr *)&c_a,
                                (struct sockaddr *)&l_a,
-                               GET_SS_LEN(&l_a),
                                opm_connected, scan, opm_timeout);
 }
 
@@ -852,7 +854,7 @@ delete_opm_scanner(const char *key __unused, int parc __unused, const char **par
                        if(scan->proxy->port == proxy->port && scan->proxy->proto == proxy->proto)
                        {
                                /* Match */
-                               rb_dlinkFindDelete(scan, &lookup->scans);
+                               rb_dlinkDelete(&scan->node, &lookup->scans);
                                rb_free(scan);
 
                                if(rb_dlink_list_length(&lookup->scans) == 0)
@@ -863,7 +865,7 @@ delete_opm_scanner(const char *key __unused, int parc __unused, const char **par
                }
        }
 
-       rb_dlinkFindDelete(proxy, &proxy_scanners);
+       rb_dlinkDelete(&proxy->node, &proxy_scanners);
        rb_free(proxy);
 
        if(rb_dlink_list_length(&proxy_scanners) == 0)
@@ -891,12 +893,27 @@ delete_opm_scanner_all(const char *key __unused, int parc __unused, const char *
        opm_enable = false;
 }
 
+static void
+delete_opm_listener_all(const char *key __unused, int parc __unused, const char **parv __unused)
+{
+       if(listeners[LISTEN_IPV4].F != NULL)
+               rb_close(listeners[LISTEN_IPV4].F);
+
+#ifdef RB_IPV6
+       if(listeners[LISTEN_IPV6].F != NULL)
+               rb_close(listeners[LISTEN_IPV6].F);
+#endif
+
+       memset(&listeners, 0, sizeof(listeners));
+}
+
 
 struct auth_opts_handler opm_options[] =
 {
        { "opm_timeout", 1, add_conf_opm_timeout },
        { "opm_enabled", 1, set_opm_enabled },
        { "opm_listener", 2, set_opm_listener },
+       { "opm_listener_del_all", 0, delete_opm_listener_all },
        { "opm_scanner", 2, create_opm_scanner },
        { "opm_scanner_del", 2, delete_opm_scanner },
        { "opm_scanner_del_all", 0, delete_opm_scanner_all },