libcli:auth: Return NTSTATUS for netlogon_creds_decrypt_samlogon_validation()
authorAndreas Schneider <asn@samba.org>
Wed, 29 May 2019 12:35:20 +0000 (14:35 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 27 Jun 2019 12:54:23 +0000 (12:54 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
libcli/auth/credentials.c
libcli/auth/netlogon_creds_cli.c
libcli/auth/proto.h
source4/torture/rpc/samlogon.c

index 545d3c6956c7bbb47ab17ba66822e28973def358..11aeea28a27e673a101d62a1a44c52d94c8edaf6 100644 (file)
@@ -680,12 +680,14 @@ static void netlogon_creds_crypt_samlogon_validation(struct netlogon_creds_Crede
        }
 }
 
-void netlogon_creds_decrypt_samlogon_validation(struct netlogon_creds_CredentialState *creds,
-                                               uint16_t validation_level,
-                                               union netr_Validation *validation)
+NTSTATUS netlogon_creds_decrypt_samlogon_validation(struct netlogon_creds_CredentialState *creds,
+                                                   uint16_t validation_level,
+                                                   union netr_Validation *validation)
 {
        netlogon_creds_crypt_samlogon_validation(creds, validation_level,
                                                        validation, false);
+
+       return NT_STATUS_OK;
 }
 
 NTSTATUS netlogon_creds_encrypt_samlogon_validation(struct netlogon_creds_CredentialState *creds,
index dd286a281bfc9f8ef5c5157440310fd6f360e3fa..01831930cefee6cd05cfbd1f75cf0da0f8d741eb 100644 (file)
@@ -2531,9 +2531,13 @@ static void netlogon_creds_cli_LogonSamLogon_done(struct tevent_req *subreq)
                        return;
                }
 
-               netlogon_creds_decrypt_samlogon_validation(state->ro_creds,
-                                                       state->validation_level,
-                                                       state->validation);
+               status = netlogon_creds_decrypt_samlogon_validation(state->ro_creds,
+                                                                   state->validation_level,
+                                                                   state->validation);
+               if (tevent_req_nterror(req, status)) {
+                       netlogon_creds_cli_LogonSamLogon_cleanup(req, status);
+                       return;
+               }
 
                tevent_req_done(req);
                return;
@@ -2601,9 +2605,13 @@ static void netlogon_creds_cli_LogonSamLogon_done(struct tevent_req *subreq)
                return;
        }
 
-       netlogon_creds_decrypt_samlogon_validation(&state->tmp_creds,
-                                               state->validation_level,
-                                               state->validation);
+       status = netlogon_creds_decrypt_samlogon_validation(&state->tmp_creds,
+                                                           state->validation_level,
+                                                           state->validation);
+       if (tevent_req_nterror(req, result)) {
+               netlogon_creds_cli_LogonSamLogon_cleanup(req, result);
+               return;
+       }
 
        tevent_req_done(req);
 }
index 00033b9ce55cfe902726827fd91266c37e044f1a..6bf83d60e81279b4911408b75487b3df0f104f16 100644 (file)
@@ -59,9 +59,9 @@ struct netlogon_creds_CredentialState *netlogon_creds_server_init(TALLOC_CTX *me
 NTSTATUS netlogon_creds_server_step_check(struct netlogon_creds_CredentialState *creds,
                                 const struct netr_Authenticator *received_authenticator,
                                 struct netr_Authenticator *return_authenticator) ;
-void netlogon_creds_decrypt_samlogon_validation(struct netlogon_creds_CredentialState *creds,
-                                               uint16_t validation_level,
-                                               union netr_Validation *validation);
+NTSTATUS netlogon_creds_decrypt_samlogon_validation(struct netlogon_creds_CredentialState *creds,
+                                                   uint16_t validation_level,
+                                                   union netr_Validation *validation);
 NTSTATUS netlogon_creds_encrypt_samlogon_validation(struct netlogon_creds_CredentialState *creds,
                                                    uint16_t validation_level,
                                                    union netr_Validation *validation);
index c7d561018784cff57bfb06a59e813223f9e77d9b..76933b8869ee96deced495b7309746f32e430582 100644 (file)
@@ -176,9 +176,15 @@ static NTSTATUS check_samlogon(struct samlogon_state *samlogon_state,
 
                validation_level = r->in.validation_level;
 
-               netlogon_creds_decrypt_samlogon_validation(samlogon_state->creds,
-                                                          validation_level,
-                                                          r->out.validation);
+               status = netlogon_creds_decrypt_samlogon_validation(samlogon_state->creds,
+                                                                   validation_level,
+                                                                   r->out.validation);
+               if (!NT_STATUS_IS_OK(status)) {
+                       if (error_string) {
+                               *error_string = strdup(nt_errstr(status));
+                       }
+                       return status;
+               }
 
                switch (validation_level) {
                case 2:
@@ -210,9 +216,15 @@ static NTSTATUS check_samlogon(struct samlogon_state *samlogon_state,
 
                validation_level = r_ex->in.validation_level;
 
-               netlogon_creds_decrypt_samlogon_validation(samlogon_state->creds,
-                                                          validation_level,
-                                                          r_ex->out.validation);
+               status = netlogon_creds_decrypt_samlogon_validation(samlogon_state->creds,
+                                                                   validation_level,
+                                                                   r_ex->out.validation);
+               if (!NT_STATUS_IS_OK(status)) {
+                       if (error_string) {
+                               *error_string = strdup(nt_errstr(status));
+                       }
+                       return status;
+               }
 
                switch (validation_level) {
                case 2:
@@ -252,9 +264,15 @@ static NTSTATUS check_samlogon(struct samlogon_state *samlogon_state,
 
                validation_level = r_flags->in.validation_level;
 
-               netlogon_creds_decrypt_samlogon_validation(samlogon_state->creds,
-                                                          validation_level,
-                                                          r_flags->out.validation);
+               status = netlogon_creds_decrypt_samlogon_validation(samlogon_state->creds,
+                                                                   validation_level,
+                                                                   r_flags->out.validation);
+               if (!NT_STATUS_IS_OK(status)) {
+                       if (error_string) {
+                               *error_string = strdup(nt_errstr(status));
+                       }
+                       return status;
+               }
 
                switch (validation_level) {
                case 2: