s4:rpc_server: only use context within op_bind() hooks and dcesrv_interface_bind_...
[samba.git] / source4 / rpc_server / samr / dcesrv_samr.c
index 96f68104948d498160135f36d6c66c16c979840a..0ddbaae835d4230b147314c7c000248712950eea 100644 (file)
@@ -46,7 +46,8 @@
 static NTSTATUS dcesrv_interface_samr_bind(struct dcesrv_call_state *dce_call,
                                             const struct dcesrv_interface *iface)
 {
-       return dcesrv_interface_bind_reject_connect(dce_call, iface);
+       struct dcesrv_connection_context *context = dce_call->context;
+       return dcesrv_interface_bind_reject_connect(context, iface);
 }
 
 /* these query macros make samr_Query[User|Group|Alias]Info a bit easier to read */
@@ -235,7 +236,7 @@ static NTSTATUS dcesrv_samr_Connect(struct dcesrv_call_state *dce_call, TALLOC_C
        }
 
 
-       handle = dcesrv_handle_new(dce_call->context, SAMR_HANDLE_CONNECT);
+       handle = dcesrv_handle_create(dce_call, SAMR_HANDLE_CONNECT);
        if (!handle) {
                talloc_free(c_state);
                return NT_STATUS_NO_MEMORY;
@@ -497,7 +498,7 @@ static NTSTATUS dcesrv_samr_OpenDomain(struct dcesrv_call_state *dce_call, TALLO
                initialize_guid_cache(&d_state->guid_caches[i]);
        }
 
-       h_domain = dcesrv_handle_new(dce_call->context, SAMR_HANDLE_DOMAIN);
+       h_domain = dcesrv_handle_create(dce_call, SAMR_HANDLE_DOMAIN);
        if (!h_domain) {
                talloc_free(d_state);
                return NT_STATUS_NO_MEMORY;
@@ -1105,7 +1106,7 @@ static NTSTATUS dcesrv_samr_CreateDomainGroup(struct dcesrv_call_state *dce_call
        a_state->account_name = talloc_steal(a_state, groupname);
 
        /* create the policy handle */
-       g_handle = dcesrv_handle_new(dce_call->context, SAMR_HANDLE_GROUP);
+       g_handle = dcesrv_handle_create(dce_call, SAMR_HANDLE_GROUP);
        if (!g_handle) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -1461,7 +1462,7 @@ static NTSTATUS dcesrv_samr_CreateUser2(struct dcesrv_call_state *dce_call, TALL
        }
 
        /* create the policy handle */
-       u_handle = dcesrv_handle_new(dce_call->context, SAMR_HANDLE_USER);
+       u_handle = dcesrv_handle_create(dce_call, SAMR_HANDLE_USER);
        if (!u_handle) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -1771,7 +1772,7 @@ static NTSTATUS dcesrv_samr_CreateDomAlias(struct dcesrv_call_state *dce_call, T
        a_state->account_name = talloc_steal(a_state, alias_name);
 
        /* create the policy handle */
-       a_handle = dcesrv_handle_new(dce_call->context, SAMR_HANDLE_ALIAS);
+       a_handle = dcesrv_handle_create(dce_call, SAMR_HANDLE_ALIAS);
        if (a_handle == NULL)
                return NT_STATUS_NO_MEMORY;
 
@@ -2162,7 +2163,7 @@ static NTSTATUS dcesrv_samr_OpenGroup(struct dcesrv_call_state *dce_call, TALLOC
        }
 
        /* create the policy handle */
-       g_handle = dcesrv_handle_new(dce_call->context, SAMR_HANDLE_GROUP);
+       g_handle = dcesrv_handle_create(dce_call, SAMR_HANDLE_GROUP);
        if (!g_handle) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -2622,7 +2623,7 @@ static NTSTATUS dcesrv_samr_OpenAlias(struct dcesrv_call_state *dce_call, TALLOC
        }
 
        /* create the policy handle */
-       g_handle = dcesrv_handle_new(dce_call->context, SAMR_HANDLE_ALIAS);
+       g_handle = dcesrv_handle_create(dce_call, SAMR_HANDLE_ALIAS);
        if (!g_handle) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -3005,7 +3006,7 @@ static NTSTATUS dcesrv_samr_OpenUser(struct dcesrv_call_state *dce_call, TALLOC_
        }
 
        /* create the policy handle */
-       u_handle = dcesrv_handle_new(dce_call->context, SAMR_HANDLE_USER);
+       u_handle = dcesrv_handle_create(dce_call, SAMR_HANDLE_USER);
        if (!u_handle) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -4876,12 +4877,14 @@ static NTSTATUS dcesrv_samr_ValidatePassword(struct dcesrv_call_state *dce_call,
        NTSTATUS status;
        enum dcerpc_transport_t transport =
                dcerpc_binding_get_transport(dce_call->conn->endpoint->ep_description);
+       enum dcerpc_AuthLevel auth_level = DCERPC_AUTH_LEVEL_NONE;
 
        if (transport != NCACN_IP_TCP && transport != NCALRPC) {
                DCESRV_FAULT(DCERPC_FAULT_ACCESS_DENIED);
        }
 
-       if (dce_call->conn->auth_state.auth_level != DCERPC_AUTH_LEVEL_PRIVACY) {
+       dcesrv_call_auth_info(dce_call, NULL, &auth_level);
+       if (auth_level != DCERPC_AUTH_LEVEL_PRIVACY) {
                DCESRV_FAULT(DCERPC_FAULT_ACCESS_DENIED);
        }