]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
ldap: Print why URI parsing failed
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 17 Aug 2023 21:17:13 +0000 (15:17 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 21 Aug 2023 22:58:34 +0000 (16:58 -0600)
src/lib/ldap/base.h
src/lib/ldap/util.c
src/modules/rlm_ldap/rlm_ldap.c

index 28f12a9e669f5ef62da8417eeacfa67a4749260f..56929b383ff32e0ab51e9c928dc25cd571c87ec8 100644 (file)
@@ -945,6 +945,8 @@ int         fr_ldap_server_url_check(fr_ldap_config_t *handle_config, char const *serve
 
 int            fr_ldap_server_config_check(fr_ldap_config_t *handle_config, char const *server, CONF_SECTION *cs);
 
+void           *fr_ldap_url_err_to_str(int ldap_url_err)
+
 /*
  *     referral.c - Handle LDAP referrals
  */
index 9868bfe4556da5911e5609350d183392d9d360cb..a4763abab85e0cbc7316be5b816898fe904afbc3 100644 (file)
@@ -708,3 +708,48 @@ int fr_ldap_server_config_check(fr_ldap_config_t *handle_config, char const *ser
                                                       (int)len, server, port);
        return 0;
 }
+
+/** Translate the error code emitted from ldap_url_parse and friends into something accessible with fr_strerror()
+ *
+ * @param[in] ldap_url_err     The error code returned
+ */
+void *fr_ldap_url_err_to_str(int ldap_url_err)
+{
+       switch (ldap_url_err) {
+       case LDAP_URL_SUCCESS:
+               return "success";
+
+       case LDAP_URL_ERR_MEM:
+               return "no memory";
+
+       case LDAP_URL_ERR_PARAM:
+               return "parameter is bad";
+
+       case LDAP_URL_ERR_BADSCHEME:
+               return "URL doesn't begin with \"[c]ldap[si]://\"";
+
+       case LDAP_URL_ERR_BADENCLOSURE:
+               return "URL is missing trailing \">\"";
+
+       case LDAP_URL_ERR_BADURL:
+               return "URL is bad";
+
+       case LDAP_URL_ERR_BADHOST:
+               return "host/port is bad";
+
+       case LDAP_URL_ERR_BADATTRS:
+               return "bad (or missing) attributes";
+
+       case LDAP_URL_ERR_BADSCOPE:
+               return "scope string is invalid (or missing)";
+
+       case LDAP_URL_ERR_BADFILTER:
+               return "bad or missing filter";
+
+       case LDAP_URL_ERR_BADEXTS:
+               return "bad or missing extensions";
+
+       default:
+               return "unknown reason";
+       }
+}
index d8b98b80f166ae88e10d5a32a20202414faeaaf7..6160cf534fe56d2194cb8fae184e6965c914a371 100644 (file)
@@ -576,6 +576,7 @@ static xlat_action_t ldap_xlat(UNUSED TALLOC_CTX *ctx, UNUSED fr_dcursor_t *out,
        fr_ldap_query_t         *query = NULL;
 
        LDAPURLDesc             *ldap_url;
+       int                     ldap_url_ret;
 
        XLAT_ARGS(in, &uri_components);
 
@@ -597,8 +598,9 @@ static xlat_action_t ldap_xlat(UNUSED TALLOC_CTX *ctx, UNUSED fr_dcursor_t *out,
                return XLAT_ACTION_FAIL;
        }
 
-       if (ldap_url_parse(uri->vb_strvalue, &ldap_url)){
-               REDEBUG("Parsing LDAP URL failed");
+       ldap_url_ret = ldap_url_parse(uri->vb_strvalue, &ldap_url);
+       if (ldap_url_ret != LDAP_URL_SUCCESS){
+               RPEDEBUG("Parsing LDAP URL failed - %s", fr_ldap_url_err_to_str(ldap_url_ret));
        error:
                ldap_free_urldesc(ldap_url);
                talloc_free(query);
@@ -1012,6 +1014,7 @@ static unlang_action_t mod_map_proc(rlm_rcode_t *p_result, void *mod_inst, UNUSE
        fr_ldap_thread_t        *thread = talloc_get_type_abort(module_rlm_thread_by_data(inst)->data, fr_ldap_thread_t);
 
        LDAPURLDesc             *ldap_url;
+       int                     ldap_url_ret;
        char const              *url_str;
 
        fr_ldap_thread_trunk_t  *ttrunk;
@@ -1045,8 +1048,9 @@ static unlang_action_t mod_map_proc(rlm_rcode_t *p_result, void *mod_inst, UNUSE
        talloc_set_destructor(map_ctx, map_ctx_free);
        map_ctx->maps = maps;
 
-       if (ldap_url_parse(url_str, &map_ctx->ldap_url)){
-               REDEBUG("Parsing LDAP URL failed");
+       ldap_url_ret = ldap_url_parse(url_str, &map_ctx->ldap_url);
+       if (ldap_url_ret != LDAP_URL_SUCCESS){
+               RPEDEBUG("Parsing LDAP URL failed - %s", fr_ldap_url_err_to_str(ldap_url_ret));
        fail:
                talloc_free(map_ctx);
                RETURN_MODULE_FAIL;