s3-librpc: Simplify SPNEGO code now that all mechs use a struct gensec_security
authorAndrew Bartlett <abartlet@samba.org>
Mon, 2 Jan 2012 04:48:09 +0000 (15:48 +1100)
committerStefan Metzmacher <metze@samba.org>
Wed, 18 Jan 2012 15:23:22 +0000 (16:23 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
source3/librpc/crypto/cli_spnego.c
source3/librpc/crypto/spnego.h
source3/librpc/rpc/dcerpc_helpers.c
source3/rpc_server/dcesrv_spnego.c
source3/rpc_server/srv_pipe.c

index 0a4bd18b22605cee16146f5ea1abfe7b14525cf6..dfc31b2d525136b35732d82cf3a5ed926fb5f687 100644 (file)
@@ -273,31 +273,13 @@ bool spnego_require_more_processing(struct spnego_context *sp_ctx)
                return true;
        }
 
-       /* otherwise see if underlying mechnism does */
-       switch (sp_ctx->mech) {
-       case SPNEGO_KRB5:
-       case SPNEGO_NTLMSSP:
-               return sp_ctx->more_processing;
-       default:
-               DEBUG(0, ("Unsupported type in request!\n"));
-               return false;
-       }
+       return sp_ctx->more_processing;
 }
 
 NTSTATUS spnego_get_negotiated_mech(struct spnego_context *sp_ctx,
-                                   enum spnego_mech *type,
                                    struct gensec_security **auth_context)
 {
-       switch (sp_ctx->mech) {
-       case SPNEGO_KRB5:
-       case SPNEGO_NTLMSSP:
-               *auth_context = sp_ctx->mech_ctx.gensec_security;
-               break;
-       default:
-               return NT_STATUS_INTERNAL_ERROR;
-       }
-
-       *type = sp_ctx->mech;
+       *auth_context = sp_ctx->mech_ctx.gensec_security;
        return NT_STATUS_OK;
 }
 
@@ -306,18 +288,11 @@ DATA_BLOB spnego_get_session_key(TALLOC_CTX *mem_ctx,
 {
        DATA_BLOB sk;
        NTSTATUS status;
-       switch (sp_ctx->mech) {
-       case SPNEGO_KRB5:
-       case SPNEGO_NTLMSSP:
-               status = gensec_session_key(sp_ctx->mech_ctx.gensec_security, mem_ctx, &sk);
-               if (!NT_STATUS_IS_OK(status)) {
-                       return data_blob_null;
-               }
-               return sk;
-       default:
-               DEBUG(0, ("Unsupported type in request!\n"));
+       status = gensec_session_key(sp_ctx->mech_ctx.gensec_security, mem_ctx, &sk);
+       if (!NT_STATUS_IS_OK(status)) {
                return data_blob_null;
        }
+       return sk;
 }
 
 NTSTATUS spnego_sign(TALLOC_CTX *mem_ctx,
@@ -325,18 +300,12 @@ NTSTATUS spnego_sign(TALLOC_CTX *mem_ctx,
                        DATA_BLOB *data, DATA_BLOB *full_data,
                        DATA_BLOB *signature)
 {
-       switch(sp_ctx->mech) {
-       case SPNEGO_KRB5:
-       case SPNEGO_NTLMSSP:
-               return gensec_sign_packet(
-                       sp_ctx->mech_ctx.gensec_security,
-                       mem_ctx,
-                       data->data, data->length,
-                       full_data->data, full_data->length,
-                       signature);
-       default:
-               return NT_STATUS_INVALID_PARAMETER;
-       }
+       return gensec_sign_packet(
+               sp_ctx->mech_ctx.gensec_security,
+               mem_ctx,
+               data->data, data->length,
+               full_data->data, full_data->length,
+               signature);
 }
 
 NTSTATUS spnego_sigcheck(TALLOC_CTX *mem_ctx,
@@ -344,17 +313,11 @@ NTSTATUS spnego_sigcheck(TALLOC_CTX *mem_ctx,
                         DATA_BLOB *data, DATA_BLOB *full_data,
                         DATA_BLOB *signature)
 {
-       switch(sp_ctx->mech) {
-       case SPNEGO_KRB5:
-       case SPNEGO_NTLMSSP:
-               return gensec_check_packet(
-                       sp_ctx->mech_ctx.gensec_security,
-                       data->data, data->length,
-                       full_data->data, full_data->length,
-                       signature);
-       default:
-               return NT_STATUS_INVALID_PARAMETER;
-       }
+       return gensec_check_packet(
+               sp_ctx->mech_ctx.gensec_security,
+               data->data, data->length,
+               full_data->data, full_data->length,
+               signature);
 }
 
 NTSTATUS spnego_seal(TALLOC_CTX *mem_ctx,
@@ -362,18 +325,12 @@ NTSTATUS spnego_seal(TALLOC_CTX *mem_ctx,
                        DATA_BLOB *data, DATA_BLOB *full_data,
                        DATA_BLOB *signature)
 {
-       switch(sp_ctx->mech) {
-       case SPNEGO_KRB5:
-       case SPNEGO_NTLMSSP:
-               return gensec_seal_packet(
-                       sp_ctx->mech_ctx.gensec_security,
-                       mem_ctx,
-                       data->data, data->length,
-                       full_data->data, full_data->length,
-                       signature);
-       default:
-               return NT_STATUS_INVALID_PARAMETER;
-       }
+       return gensec_seal_packet(
+               sp_ctx->mech_ctx.gensec_security,
+               mem_ctx,
+               data->data, data->length,
+               full_data->data, full_data->length,
+               signature);
 }
 
 NTSTATUS spnego_unseal(TALLOC_CTX *mem_ctx,
@@ -381,15 +338,9 @@ NTSTATUS spnego_unseal(TALLOC_CTX *mem_ctx,
                        DATA_BLOB *data, DATA_BLOB *full_data,
                        DATA_BLOB *signature)
 {
-       switch(sp_ctx->mech) {
-       case SPNEGO_KRB5:
-       case SPNEGO_NTLMSSP:
-               return gensec_unseal_packet(
-                       sp_ctx->mech_ctx.gensec_security,
-                       data->data, data->length,
-                       full_data->data, full_data->length,
-                       signature);
-       default:
-               return NT_STATUS_INVALID_PARAMETER;
-       }
+       return gensec_unseal_packet(
+               sp_ctx->mech_ctx.gensec_security,
+               data->data, data->length,
+               full_data->data, full_data->length,
+               signature);
 }
index 57396a63c5d09479b3d1b8496893652614a6cf53..5a63a7f9c4c0a5db9cc8c27d2a2e5297f29632d4 100644 (file)
@@ -72,7 +72,6 @@ NTSTATUS spnego_get_client_auth_token(TALLOC_CTX *mem_ctx,
 bool spnego_require_more_processing(struct spnego_context *sp_ctx);
 
 NTSTATUS spnego_get_negotiated_mech(struct spnego_context *sp_ctx,
-                                   enum spnego_mech *type,
                                    struct gensec_security **auth_context);
 
 DATA_BLOB spnego_get_session_key(TALLOC_CTX *mem_ctx,
index ed0e0fe9325fa618353fc3821aa9f5d274fe75aa..5a50f2b24a9eb1f5df878ceadc311bb951d46998 100644 (file)
@@ -268,7 +268,6 @@ NTSTATUS dcerpc_guess_sizes(struct pipe_auth_data *auth,
        struct gensec_security *gensec_security;
        struct schannel_state *schannel_auth;
        struct spnego_context *spnego_ctx;
-       enum spnego_mech auth_type;
        NTSTATUS status;
 
        /* no auth token cases first */
@@ -303,8 +302,7 @@ NTSTATUS dcerpc_guess_sizes(struct pipe_auth_data *auth,
        case DCERPC_AUTH_TYPE_SPNEGO:
                spnego_ctx = talloc_get_type_abort(auth->auth_ctx,
                                                   struct spnego_context);
-               status = spnego_get_negotiated_mech(spnego_ctx,
-                                                   &auth_type, &gensec_security);
+               status = spnego_get_negotiated_mech(spnego_ctx, &gensec_security);
                if (!NT_STATUS_IS_OK(status)) {
                        return status;
                }
index 1bea2321efccd9f13f824efcc29aa48c52c48c7e..0a6b3b8512a88db5ca5e245398ab63487696daff 100644 (file)
@@ -136,18 +136,9 @@ NTSTATUS spnego_server_step(struct spnego_context *sp_ctx,
 
        case SPNEGO_CONV_AUTH_MORE:
 
-               switch(sp_ctx->mech) {
-               case SPNEGO_KRB5:
-               case SPNEGO_NTLMSSP:
-                       status = auth_generic_server_step(
-                                       sp_ctx->mech_ctx.gensec_security,
-                                       mem_ctx, &token_in, &token_out);
-                       break;
-               default:
-                       status = NT_STATUS_INVALID_PARAMETER;
-                       goto done;
-               }
-
+               status = auth_generic_server_step(
+                       sp_ctx->mech_ctx.gensec_security,
+                       mem_ctx, &token_in, &token_out);
                break;
 
        case SPNEGO_CONV_AUTH_DONE:
index 18389b42e0f99c1adf48060e3714c332ac7fcdbd..8731a28d827c1e19051dabf11b76865815f45e6d 100644 (file)
@@ -678,10 +678,8 @@ static bool pipe_auth_generic_verify_final(TALLOC_CTX *mem_ctx,
 
 static NTSTATUS pipe_auth_verify_final(struct pipes_struct *p)
 {
-       enum spnego_mech auth_type;
        struct gensec_security *gensec_security;
        struct spnego_context *spnego_ctx;
-       void *mech_ctx;
        NTSTATUS status;
 
        switch (p->auth.auth_type) {
@@ -698,8 +696,7 @@ static NTSTATUS pipe_auth_verify_final(struct pipes_struct *p)
        case DCERPC_AUTH_TYPE_SPNEGO:
                spnego_ctx = talloc_get_type_abort(p->auth.auth_ctx,
                                                   struct spnego_context);
-               status = spnego_get_negotiated_mech(spnego_ctx,
-                                                   &auth_type, &gensec_security);
+               status = spnego_get_negotiated_mech(spnego_ctx, &gensec_security);
                if (!NT_STATUS_IS_OK(status)) {
                        DEBUG(0, ("Bad SPNEGO state (%s)\n",
                                  nt_errstr(status)));