s4-rpc: improved error mapping for several RPC server calls
authorAndrew Tridgell <tridge@samba.org>
Fri, 1 Apr 2011 04:58:55 +0000 (15:58 +1100)
committerAndrew Tridgell <tridge@samba.org>
Mon, 4 Apr 2011 00:30:30 +0000 (10:30 +1000)
Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>

source4/rpc_server/lsa/dcesrv_lsa.c
source4/rpc_server/netlogon/dcerpc_netlogon.c
source4/rpc_server/samr/dcesrv_samr.c
source4/rpc_server/winreg/rpc_winreg.c

index f58263d92bfd3bdd1b82e9cd2be41502481043d3..b9fe5a3f40130d5125157cc9a2dc11df92165ab1 100644 (file)
@@ -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;
index 8cd8257c240dca867cecbd9601f071ec16b4e2c8..bf8b4844a0869770d117b8b3fb4e01291ed00c17 100644 (file)
@@ -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 */
index 25e57278d34e58602fad2b887303bf21b5895575..1c7416cb7bee1a1dd23224dd2ab14de0ac0b3386 100644 (file)
@@ -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; i<count; i++) {
                struct ldb_message *mod;
+               int ret;
 
                mod = ldb_msg_new(mem_ctx);
                if (mod == NULL) {
@@ -3946,10 +3942,11 @@ static NTSTATUS dcesrv_samr_RemoveMemberFromForeignDomain(struct dcesrv_call_sta
                                         "member", memberdn) != LDB_SUCCESS)
                        return NT_STATUS_NO_MEMORY;
 
-               if (ldb_modify(d_state->sam_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;
index 6007686a5618959d08c245796839d7918d76881b..4f754b84d53bdf2eeb27f2ed5528230622d1b90d 100644 (file)
@@ -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;