auth/gensec: remove tevent_context argument from gensec_update()
[abartlet/samba.git/.git] / source3 / libsmb / clifsinfo.c
index fe0238a34e7f108d7b73d1da3482050e228a805d..376c4f5d5b184d197b21b3386ae724025c762e6b 100644 (file)
@@ -125,11 +125,11 @@ NTSTATUS cli_unix_extensions_version(struct cli_state *cli, uint16 *pmajor,
                                     uint32 *pcaphigh)
 {
        TALLOC_CTX *frame = talloc_stackframe();
-       struct event_context *ev;
+       struct tevent_context *ev;
        struct tevent_req *req;
        NTSTATUS status = NT_STATUS_OK;
 
-       if (cli_has_async_calls(cli)) {
+       if (smbXcli_conn_has_async_calls(cli->conn)) {
                /*
                 * Can't use sync call while an async call is in flight
                 */
@@ -137,7 +137,7 @@ NTSTATUS cli_unix_extensions_version(struct cli_state *cli, uint16 *pmajor,
                goto fail;
        }
 
-       ev = event_context_init(frame);
+       ev = samba_tevent_context_init(frame);
        if (ev == NULL) {
                status = NT_STATUS_NO_MEMORY;
                goto fail;
@@ -242,10 +242,10 @@ NTSTATUS cli_set_unix_extensions_capabilities(struct cli_state *cli,
        struct tevent_req *req;
        NTSTATUS status = NT_STATUS_NO_MEMORY;
 
-       if (cli_has_async_calls(cli)) {
+       if (smbXcli_conn_has_async_calls(cli->conn)) {
                return NT_STATUS_INVALID_PARAMETER;
        }
-       ev = tevent_context_init(talloc_tos());
+       ev = samba_tevent_context_init(talloc_tos());
        if (ev == NULL) {
                goto fail;
        }
@@ -339,10 +339,10 @@ NTSTATUS cli_get_fs_attr_info(struct cli_state *cli, uint32_t *fs_attr)
        struct tevent_req *req;
        NTSTATUS status = NT_STATUS_NO_MEMORY;
 
-       if (cli_has_async_calls(cli)) {
+       if (smbXcli_conn_has_async_calls(cli->conn)) {
                return NT_STATUS_INVALID_PARAMETER;
        }
-       ev = tevent_context_init(talloc_tos());
+       ev = samba_tevent_context_init(talloc_tos());
        if (ev == NULL) {
                goto fail;
        }
@@ -572,23 +572,6 @@ static NTSTATUS enc_blob_send_receive(struct cli_state *cli, DATA_BLOB *in, DATA
        return status;
 }
 
-/******************************************************************************
- Make a client state struct.
-******************************************************************************/
-
-static struct smb_trans_enc_state *make_cli_enc_state(enum smb_trans_enc_type smb_enc_type)
-{
-       struct smb_trans_enc_state *es = NULL;
-       es = SMB_MALLOC_P(struct smb_trans_enc_state);
-       if (!es) {
-               return NULL;
-       }
-       ZERO_STRUCTP(es);
-       es->smb_enc_type = smb_enc_type;
-
-       return es;
-}
-
 /******************************************************************************
  Start a raw ntlmssp encryption.
 ******************************************************************************/
@@ -603,12 +586,11 @@ NTSTATUS cli_raw_ntlm_smb_encryption_start(struct cli_state *cli,
        DATA_BLOB param_out = data_blob_null;
        NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
        struct auth_generic_state *auth_generic_state;
-       struct smb_trans_enc_state *es = make_cli_enc_state(SMB_TRANS_ENC_NTLM);
-
+       struct smb_trans_enc_state *es = talloc_zero(NULL, struct smb_trans_enc_state);
        if (!es) {
                return NT_STATUS_NO_MEMORY;
        }
-       status = auth_generic_client_prepare(NULL,
+       status = auth_generic_client_prepare(es,
                                             &auth_generic_state);
        if (!NT_STATUS_IS_OK(status)) {
                goto fail;
@@ -633,7 +615,7 @@ NTSTATUS cli_raw_ntlm_smb_encryption_start(struct cli_state *cli,
 
        do {
                status = gensec_update(auth_generic_state->gensec_security, auth_generic_state,
-                                      NULL, blob_in, &blob_out);
+                                      blob_in, &blob_out);
                data_blob_free(&blob_in);
                data_blob_free(&param_out);
                if (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED) || NT_STATUS_IS_OK(status)) {
@@ -669,46 +651,7 @@ NTSTATUS cli_raw_ntlm_smb_encryption_start(struct cli_state *cli,
        }
 
   fail:
-       TALLOC_FREE(auth_generic_state);
-       common_free_encryption_state(&es);
-       return status;
-}
-
-/******************************************************************************
- Get client gss blob to send to a server.
-******************************************************************************/
-
-static NTSTATUS make_cli_gss_blob(TALLOC_CTX *ctx,
-                               struct gensec_security *gensec_security,
-                               NTSTATUS status_in,
-                               DATA_BLOB spnego_blob_in,
-                               DATA_BLOB *p_blob_out)
-{
-       const char *krb_mechs[] = {OID_KERBEROS5, NULL};
-       DATA_BLOB blob_out = data_blob_null;
-       DATA_BLOB blob_in = data_blob_null;
-       NTSTATUS status = NT_STATUS_OK;
-
-       if (spnego_blob_in.length == 0) {
-               blob_in = spnego_blob_in;
-       } else {
-               /* Remove the SPNEGO wrapper */
-               if (!spnego_parse_auth_response(ctx, spnego_blob_in, status_in, OID_KERBEROS5, &blob_in)) {
-                       status = NT_STATUS_UNSUCCESSFUL;
-                       goto fail;
-               }
-       }
-
-       status = gensec_update(gensec_security, ctx,
-                              NULL, blob_in, &blob_out);
-
-       /* Wrap in an SPNEGO wrapper */
-       *p_blob_out = spnego_gen_negTokenInit(ctx, krb_mechs, &blob_out, NULL);
-
-  fail:
-
-       data_blob_free(&blob_out);
-       data_blob_free(&blob_in);
+       TALLOC_FREE(es);
        return status;
 }
 
@@ -723,13 +666,13 @@ NTSTATUS cli_gss_smb_encryption_start(struct cli_state *cli)
        DATA_BLOB param_out = data_blob_null;
        NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
        struct auth_generic_state *auth_generic_state;
-       struct smb_trans_enc_state *es = make_cli_enc_state(SMB_TRANS_ENC_GSS);
+       struct smb_trans_enc_state *es = talloc_zero(NULL, struct smb_trans_enc_state);
 
        if (!es) {
                return NT_STATUS_NO_MEMORY;
        }
 
-       status = auth_generic_client_prepare(NULL,
+       status = auth_generic_client_prepare(es,
                                             &auth_generic_state);
        if (!NT_STATUS_IS_OK(status)) {
                goto fail;
@@ -747,16 +690,18 @@ NTSTATUS cli_gss_smb_encryption_start(struct cli_state *cli)
        }
 
        status = gensec_set_target_hostname(auth_generic_state->gensec_security, 
-                                           cli_state_remote_name(cli));
+                                           smbXcli_conn_remote_name(cli->conn));
        if (!NT_STATUS_IS_OK(status)) {
                goto fail;
        }
 
-       if (!NT_STATUS_IS_OK(status = auth_generic_client_start(auth_generic_state, GENSEC_OID_KERBEROS5))) {
+       if (!NT_STATUS_IS_OK(status = auth_generic_client_start(auth_generic_state, GENSEC_OID_SPNEGO))) {
                goto fail;
        }
 
-       status = make_cli_gss_blob(talloc_tos(), auth_generic_state->gensec_security, NT_STATUS_OK, blob_recv, &blob_send);
+       status = gensec_update(auth_generic_state->gensec_security, talloc_tos(),
+                              blob_recv, &blob_send);
+
        do {
                data_blob_free(&blob_recv);
                status = enc_blob_send_receive(cli, &blob_send, &blob_recv, &param_out);
@@ -764,7 +709,8 @@ NTSTATUS cli_gss_smb_encryption_start(struct cli_state *cli)
                        es->enc_ctx_num = SVAL(param_out.data, 0);
                }
                data_blob_free(&blob_send);
-               status = make_cli_gss_blob(talloc_tos(), auth_generic_state->gensec_security, status, blob_recv, &blob_send);
+               status = gensec_update(auth_generic_state->gensec_security, talloc_tos(),
+                                      blob_recv, &blob_send);
        } while (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED));
        data_blob_free(&blob_recv);
 
@@ -783,13 +729,13 @@ NTSTATUS cli_gss_smb_encryption_start(struct cli_state *cli)
                /* We only need the gensec_security part from here.
                 * es is a malloc()ed pointer, so we cannot make
                 * gensec_security a talloc child */
-               es->gensec_security = talloc_move(NULL,
+               es->gensec_security = talloc_move(es,
                                                  &auth_generic_state->gensec_security);
                smb1cli_conn_set_encryption(cli->conn, es);
                es = NULL;
        }
 fail:
-       common_free_encryption_state(&es);
+       TALLOC_FREE(es);
        return status;
 }