]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Simplify fr_ldap_edir_get_password
authorNick Porter <nick@portercomputing.co.uk>
Fri, 8 Sep 2023 12:24:49 +0000 (13:24 +0100)
committerNick Porter <nick@portercomputing.co.uk>
Fri, 8 Sep 2023 12:24:49 +0000 (13:24 +0100)
src/lib/ldap/base.h
src/lib/ldap/edir.c
src/modules/rlm_ldap/rlm_ldap.c

index 96e0f6e69cebcaf354f9b197b992a67329d67d30..9e877801bce747a24de7f0c0ea3add3633854051 100644 (file)
@@ -831,7 +831,7 @@ int         fr_ldap_conn_directory_alloc_async(fr_ldap_connection_t *ldap_conn);
 /*
  *     edir.c - Edirectory integrations
  */
-int            fr_ldap_edir_get_password(rlm_rcode_t *p_result, request_t *request, char const *dn,
+unlang_action_t        fr_ldap_edir_get_password(request_t *request, char const *dn,
                                          fr_ldap_thread_trunk_t *ttrunk, fr_dict_attr_t const *password_da);
 
 char const     *fr_ldap_edir_errstr(int code);
index 4c024a6811b9ab86bc0cc8d577351576ed750f1b..e0d30d790ed3e4f5f64809b9e0b4499780460f77 100644 (file)
@@ -284,24 +284,23 @@ static void ldap_edir_get_password_cancel(UNUSED request_t *request, UNUSED fr_s
 
 /** Initiate retrieval of the universal password from Novell eDirectory
  *
- * @param[in,out] p_result     Current result code.
  * @param[in] request          Current request.
  * @param[in] dn               of the user whose password is to be retrieved.
  * @param[in] ttrunk           on which to send the LDAP request.
  * @param[in] password_da      DA to use when creating password attribute.
  * @return
- *     - 0 on success.
- *     - < 0 on failure.
+ *     - UNLANG_ACTION_PUSHED_CHILD on success.
+ *     - UNLANG_ACTION_FAIL on failure.
  */
-int fr_ldap_edir_get_password(rlm_rcode_t *p_result, request_t *request, char const *dn,
-                             fr_ldap_thread_trunk_t *ttrunk, fr_dict_attr_t const *password_da)
+unlang_action_t fr_ldap_edir_get_password(request_t *request, char const *dn, fr_ldap_thread_trunk_t *ttrunk,
+                                         fr_dict_attr_t const *password_da)
 {
        ldap_edir_ctx_t *edir_ctx;
        int             err = 0;
 
        if (!dn || !*dn) {
                REDEBUG("Missing DN");
-               RETURN_MODULE_FAIL;
+               return UNLANG_ACTION_FAIL;
        }
 
        MEM(edir_ctx = talloc(unlang_interpret_frame_talloc_ctx(request), ldap_edir_ctx_t));
@@ -315,16 +314,13 @@ int fr_ldap_edir_get_password(rlm_rcode_t *p_result, request_t *request, char co
        err = ber_encode_request_data(dn, &edir_ctx->dn);
        if (err) {
                REDEBUG("Failed to encode user DN: %s", fr_ldap_edir_errstr(err));
-       fail:
                talloc_free(edir_ctx);
-               RETURN_MODULE_FAIL;
+               return UNLANG_ACTION_FAIL;
        }
 
-       if (unlang_function_push(request, ldap_edir_get_password_start, ldap_edir_get_password_resume,
-                                ldap_edir_get_password_cancel, ~FR_SIGNAL_CANCEL,
-                                UNLANG_SUB_FRAME, edir_ctx) < 0) goto fail;
-
-       return UNLANG_ACTION_PUSHED_CHILD;
+       return unlang_function_push(request, ldap_edir_get_password_start, ldap_edir_get_password_resume,
+                                   ldap_edir_get_password_cancel, ~FR_SIGNAL_CANCEL,
+                                   UNLANG_SUB_FRAME, edir_ctx);
 }
 
 char const *fr_ldap_edir_errstr(int code)
index ab17106646c1c4f286d3a6af12d15bd578345fda..0086f4a6c54f9f16dbe4f6b2f6c148245dc9a49c 100644 (file)
@@ -1510,13 +1510,9 @@ static unlang_action_t mod_authorize_resume(rlm_rcode_t *p_result, UNUSED int *p
                         *      Retrive universal password
                         */
                        REPEAT_MOD_AUTHORIZE_RESUME;
-                       if (fr_ldap_edir_get_password(p_result, request, autz_ctx->dn, autz_ctx->ttrunk,
-                                                     attr_cleartext_password) < 0) {
-                               rcode = RLM_MODULE_FAIL;
-                               goto finish;
-                       }
                        autz_ctx->status = LDAP_AUTZ_EDIR_BIND;
-                       return UNLANG_ACTION_PUSHED_CHILD;
+                       return fr_ldap_edir_get_password(request, autz_ctx->dn, autz_ctx->ttrunk,
+                                                        attr_cleartext_password);
                }
                FALL_THROUGH;