]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
move radiusv11 configuration to CONF_PARSER stuff
authorAlan T. DeKok <aland@freeradius.org>
Tue, 11 Apr 2023 13:48:48 +0000 (09:48 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 11 Apr 2023 13:48:48 +0000 (09:48 -0400)
src/include/clients.h
src/include/realms.h
src/include/tls-h
src/main/client.c
src/main/listen.c
src/main/realms.c
src/main/tls.c

index 14bec41446a68bf921edbbeb088487b3fd07714b..46b5b3bcb10836b47376cae55f82aa2c3cabe6b1 100644 (file)
@@ -77,6 +77,7 @@ typedef struct radclient {
        bool                    tls_required;           //!< whether TLS encryption is required.
 
 #ifdef WITH_RADIUSV11
+       char const              *radiusv11_name;
        fr_radiusv11_t          radiusv11;
 #endif
 #endif
index 6f70f9cfa59d326dea6c4509adab4de1a43ba51c..23806f4bb1e0eeaa51c22da15a50bb2c1108400c 100644 (file)
@@ -140,9 +140,6 @@ typedef struct home_server {
        fr_tls_server_conf_t    *tls;
        uint32_t                connect_timeout;
        rbtree_t                *listeners;
-#ifdef WITH_RADIUSV11
-       fr_radiusv11_t          radiusv11;
-#endif
 #endif
 
 #ifdef WITH_STATS
index d388c4ae3e1cf5c3f83f1d0a764481a0d1ce01a6..4bf1665483b667e5229e704cd0509df3b9ce3301 100644 (file)
@@ -438,6 +438,11 @@ struct fr_tls_server_conf_t {
        fr_hash_table_t *realms;
 
        char const      *client_hostname;
+
+#ifdef WITH_RADIUSV11
+       char const      *radiusv11_name;
+       fr_radiusv11_t  radiusv11;
+#endif
 };
 
 #ifdef __cplusplus
index b4dfb31ed5790526c29e83825c646c16e5468459..47ac0704832188919e24afb0f4ea5565130b7e03 100644 (file)
@@ -535,6 +535,10 @@ static const CONF_PARSER client_config[] = {
        { "rate_limit", FR_CONF_OFFSET(PW_TYPE_BOOLEAN, RADCLIENT, rate_limit), NULL },
 #endif
 
+#ifdef WITH_RADIUSV11
+       { "radiusv11", FR_CONF_OFFSET(PW_TYPE_STRING, RADCLIENT, radiusv11_name), "forbid" },
+#endif
+
        CONF_PARSER_TERMINATOR
 };
 
@@ -1046,14 +1050,10 @@ RADCLIENT *client_afrom_cs(TALLOC_CTX *ctx, CONF_SECTION *cs, bool in_server, bo
        }
 
 #ifdef WITH_RADIUSV11
-       if (c->tls_required && (cf_pair_find(cs, "radiusv11") != NULL)) {
+       if (c->tls_required && c->radiusv11_name) {
                int rcode;
-               char const *name = NULL;
-
-               rcode = cf_item_parse(cs, "radiusv11", FR_ITEM_POINTER(PW_TYPE_STRING, &name), "forbid");
-               if (rcode < 0) goto error;
 
-               rcode = fr_str2int(radiusv11_types, name, -1);
+               rcode = fr_str2int(radiusv11_types, c->radiusv11_name, -1);
                if (rcode < 0) {
                        cf_log_err_cs(cs, "Invalid value for 'radiusv11'");
                        goto error;
index e3d0b72d4725c4b68f3bf50d27c21bee816c87b7..ab85e587f261680ae2b3ecf9059d6460f2d9aedd 100644 (file)
@@ -773,7 +773,7 @@ static int dual_tcp_accept(rad_listen_t *listener)
 
 #ifdef WITH_RADIUSV11
        if (listener->tls) {
-               switch (listener->radiusv11) {
+               switch (listener->tls->radiusv11) {
                case FR_RADIUSV11_FORBID:
                        if (client->radiusv11 == FR_RADIUSV11_REQUIRE) {
                                INFO("Ignoring new connection as client is marked as 'radiusv11 = require', and this socket has 'radiusv11 = forbid'");
@@ -1417,31 +1417,14 @@ int common_socket_parse(CONF_SECTION *cs, rad_listen_t *this)
                        if (rcode < 0) return -1;
 
 #ifdef WITH_RADIUSV11
-                       if (cf_pair_find(cs, "radiusv11")) {
-                               char const *name = NULL;
-
-                               rcode = cf_item_parse(cs, "radiusv11", FR_ITEM_POINTER(PW_TYPE_STRING, &name), "forbid");
-                               if (rcode < 0) return -1;
-
-                               rcode = fr_str2int(radiusv11_types, name, -1);
+                       if (this->tls->radiusv11_name) {
+                               rcode = fr_str2int(radiusv11_types, this->tls->radiusv11_name, -1);
                                if (rcode < 0) {
                                        cf_log_err_cs(cs, "Invalid value for 'radiusv11'");
                                        return -1;
                                }
 
-                               this->radiusv11 = rcode;
-                       }
-
-                       /*
-                        *      Default is "forbid" (0).  In which case we don't set any ALPN callbacks, and
-                        *      the ServerHello does not contain an ALPN section.
-                        */
-                       if (this->radiusv11 != FR_RADIUSV11_FORBID) {
-                               if (this->type != RAD_LISTEN_PROXY) {
-                                       SSL_CTX_set_alpn_select_cb(this->tls->ctx, radiusv11_server_alpn_cb, this);
-                               } else {
-                                       SSL_CTX_set_next_proto_select_cb(this->tls->ctx, radiusv11_client_alpn_cb, this);
-                               }
+                               this->radiusv11 = this->tls->radiusv11 = rcode;
                        }
 #endif
                }
index 0aad306e3e5e894c53d1785875aa784ecd415cd8..3553b99ffc1e68fc34dd8bf76b78ab2d0689dd0f 100644 (file)
@@ -1131,19 +1131,14 @@ home_server_t *home_server_afrom_cs(TALLOC_CTX *ctx, realm_config_t *rc, CONF_SE
                        if (!home->listeners) goto error;
 
 #ifdef WITH_RADIUSV11
-                       if (cf_pair_find(tls, "radiusv11")) {
-                               char const *name = NULL;
-
-                               rcode = cf_item_parse(cs, "radiusv11", FR_ITEM_POINTER(PW_TYPE_STRING, &name), "forbid");
-                               if (rcode < 0) goto error;
-
-                               rcode = fr_str2int(radiusv11_types, name, -1);
+                       if (home->tls->radiusv11_name) {
+                               rcode = fr_str2int(radiusv11_types, home->tls->radiusv11_name, -1);
                                if (rcode < 0) {
                                        cf_log_err_cs(cs, "Invalid value for 'radiusv11'");
                                        goto error;
                                }
 
-                               home->radiusv11 = rcode;
+                               home->tls->radiusv11 = rcode;
                        }
 #endif
 
index a59f206956ec8197f6707adfa3cf15a624c589b2..46fe171b4dcaaeb3e7dcf0f8d5da6ab2e8250528 100644 (file)
@@ -1707,6 +1707,10 @@ static CONF_PARSER tls_server_config[] = {
 #endif
        },
 
+#ifdef WITH_RADIUSV11
+       { "radiusv11", FR_CONF_OFFSET(PW_TYPE_STRING, fr_tls_server_conf_t, radiusv11_name), "forbid" },
+#endif
+
        { "realm_dir", FR_CONF_OFFSET(PW_TYPE_STRING, fr_tls_server_conf_t, realm_dir), NULL },
 
        { "cache", FR_CONF_POINTER(PW_TYPE_SUBSECTION, NULL), (void const *) cache_config },
@@ -1770,6 +1774,10 @@ static CONF_PARSER tls_client_config[] = {
 #endif
        },
 
+#ifdef WITH_RADIUSV11
+       { "radiusv11", FR_CONF_OFFSET(PW_TYPE_STRING, fr_tls_server_conf_t, radiusv11_name), "forbid" },
+#endif
+
        { "hostname", FR_CONF_OFFSET(PW_TYPE_STRING, fr_tls_server_conf_t, client_hostname), NULL },
 
        CONF_PARSER_TERMINATOR