From f0e73030239d29654eb54ebc95c636ff6385d575 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 1 Apr 2011 15:58:55 +1100 Subject: s4-rpc: improved error mapping for several RPC server calls Pair-Programmed-With: Andrew Bartlett --- source4/rpc_server/lsa/dcesrv_lsa.c | 3 +- source4/rpc_server/netlogon/dcerpc_netlogon.c | 2 +- source4/rpc_server/samr/dcesrv_samr.c | 41 +++++++++++++-------------- source4/rpc_server/winreg/rpc_winreg.c | 2 +- 4 files changed, 22 insertions(+), 26 deletions(-) (limited to 'source4') diff --git a/source4/rpc_server/lsa/dcesrv_lsa.c b/source4/rpc_server/lsa/dcesrv_lsa.c index f58263d92b..b9fe5a3f40 100644 --- a/source4/rpc_server/lsa/dcesrv_lsa.c +++ b/source4/rpc_server/lsa/dcesrv_lsa.c @@ -3258,8 +3258,7 @@ static NTSTATUS dcesrv_lsa_SetSecret(struct dcesrv_call_state *dce_call, TALLOC_ /* modify the samdb record */ ret = dsdb_replace(secret_state->sam_ldb, msg, 0); if (ret != LDB_SUCCESS) { - /* we really need samdb.c to return NTSTATUS */ - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } return NT_STATUS_OK; diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c b/source4/rpc_server/netlogon/dcerpc_netlogon.c index 8cd8257c24..bf8b4844a0 100644 --- a/source4/rpc_server/netlogon/dcerpc_netlogon.c +++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c @@ -2440,7 +2440,7 @@ static NTSTATUS dcesrv_netr_GetForestTrustInformation(struct dcesrv_call_state * sam_ctx = samdb_connect(mem_ctx, dce_call->event_ctx, lp_ctx, dce_call->conn->auth_state.session_info, 0); if (sam_ctx == NULL) { - return NT_STATUS_UNSUCCESSFUL; + return NT_STATUS_INTERNAL_ERROR; } /* TODO: check r->in.server_name is our name */ diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c index 25e57278d3..1c7416cb7b 100644 --- a/source4/rpc_server/samr/dcesrv_samr.c +++ b/source4/rpc_server/samr/dcesrv_samr.c @@ -985,9 +985,7 @@ static NTSTATUS dcesrv_samr_SetDomainInfo(struct dcesrv_call_state *dce_call, TA DEBUG(1,("Failed to modify record %s: %s\n", ldb_dn_get_linearized(d_state->domain_dn), ldb_errstring(sam_ctx))); - - /* we really need samdb.c to return NTSTATUS */ - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } return NT_STATUS_OK; @@ -1921,8 +1919,7 @@ static NTSTATUS dcesrv_samr_SetGroupInfo(struct dcesrv_call_state *dce_call, TAL /* modify the samdb record */ ret = ldb_modify(g_state->sam_ctx, msg); if (ret != LDB_SUCCESS) { - /* we really need samdb.c to return NTSTATUS */ - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } return NT_STATUS_OK; @@ -1988,7 +1985,7 @@ static NTSTATUS dcesrv_samr_AddGroupMember(struct dcesrv_call_state *dce_call, T ret = samdb_msg_add_addval(d_state->sam_ctx, mem_ctx, mod, "member", memberdn); if (ret != LDB_SUCCESS) { - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } ret = ldb_modify(a_state->sam_ctx, mod); @@ -2000,7 +1997,7 @@ static NTSTATUS dcesrv_samr_AddGroupMember(struct dcesrv_call_state *dce_call, T case LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS: return NT_STATUS_ACCESS_DENIED; default: - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } } @@ -2023,7 +2020,7 @@ static NTSTATUS dcesrv_samr_DeleteDomainGroup(struct dcesrv_call_state *dce_call ret = ldb_delete(a_state->sam_ctx, a_state->account_dn); if (ret != LDB_SUCCESS) { - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } talloc_free(h); @@ -2104,7 +2101,7 @@ static NTSTATUS dcesrv_samr_DeleteGroupMember(struct dcesrv_call_state *dce_call case LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS: return NT_STATUS_ACCESS_DENIED; default: - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } } @@ -2371,8 +2368,7 @@ static NTSTATUS dcesrv_samr_SetAliasInfo(struct dcesrv_call_state *dce_call, TAL /* modify the samdb record */ ret = ldb_modify(a_state->sam_ctx, msg); if (ret != LDB_SUCCESS) { - /* we really need samdb.c to return NTSTATUS */ - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } return NT_STATUS_OK; @@ -2397,7 +2393,7 @@ static NTSTATUS dcesrv_samr_DeleteDomAlias(struct dcesrv_call_state *dce_call, T ret = ldb_delete(a_state->sam_ctx, a_state->account_dn); if (ret != LDB_SUCCESS) { - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } talloc_free(h); @@ -2461,7 +2457,7 @@ static NTSTATUS dcesrv_samr_AddAliasMember(struct dcesrv_call_state *dce_call, T ret = samdb_msg_add_addval(d_state->sam_ctx, mem_ctx, mod, "member", ldb_dn_alloc_linearized(mem_ctx, memberdn)); if (ret != LDB_SUCCESS) { - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } ret = ldb_modify(a_state->sam_ctx, mod); @@ -2473,7 +2469,7 @@ static NTSTATUS dcesrv_samr_AddAliasMember(struct dcesrv_call_state *dce_call, T case LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS: return NT_STATUS_ACCESS_DENIED; default: - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } } @@ -2513,7 +2509,7 @@ static NTSTATUS dcesrv_samr_DeleteAliasMember(struct dcesrv_call_state *dce_call ret = samdb_msg_add_delval(d_state->sam_ctx, mem_ctx, mod, "member", memberdn); if (ret != LDB_SUCCESS) { - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } ret = ldb_modify(a_state->sam_ctx, mod); @@ -2525,7 +2521,7 @@ static NTSTATUS dcesrv_samr_DeleteAliasMember(struct dcesrv_call_state *dce_call case LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS: return NT_STATUS_ACCESS_DENIED; default: - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } } @@ -2676,7 +2672,7 @@ static NTSTATUS dcesrv_samr_DeleteUser(struct dcesrv_call_state *dce_call, TALLO DEBUG(1, ("Failed to delete user: %s: %s\n", ldb_dn_get_linearized(a_state->account_dn), ldb_errstring(a_state->sam_ctx))); - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } talloc_free(h); @@ -3534,8 +3530,7 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL ldb_dn_get_linearized(a_state->account_dn), ldb_errstring(a_state->sam_ctx))); - /* we really need samdb.c to return NTSTATUS */ - return NT_STATUS_UNSUCCESSFUL; + return dsdb_ldb_err_to_ntstatus(ret); } } @@ -3934,6 +3929,7 @@ static NTSTATUS dcesrv_samr_RemoveMemberFromForeignDomain(struct dcesrv_call_sta for (i=0; isam_ctx, mod) != LDB_SUCCESS) - return NT_STATUS_UNSUCCESSFUL; - + ret = ldb_modify(d_state->sam_ctx, mod); talloc_free(mod); + if (ret != LDB_SUCCESS) { + return dsdb_ldb_err_to_ntstatus(ret); + } } return NT_STATUS_OK; diff --git a/source4/rpc_server/winreg/rpc_winreg.c b/source4/rpc_server/winreg/rpc_winreg.c index 6007686a56..4f754b84d5 100644 --- a/source4/rpc_server/winreg/rpc_winreg.c +++ b/source4/rpc_server/winreg/rpc_winreg.c @@ -42,7 +42,7 @@ static NTSTATUS dcerpc_winreg_bind(struct dcesrv_call_state *dce_call, if (!W_ERROR_IS_OK(err)) { DEBUG(0, ("Error opening registry: %s\n", win_errstr(err))); - return NT_STATUS_UNSUCCESSFUL; + return werror_to_ntstatus(err); } dce_call->context->private_data = ctx; -- cgit