librpc/rpc: add dcerpc_fault_to_nt_status()
authorStefan Metzmacher <metze@samba.org>
Sat, 20 Mar 2010 10:31:55 +0000 (11:31 +0100)
committerStefan Metzmacher <metze@samba.org>
Thu, 15 Apr 2010 07:34:03 +0000 (09:34 +0200)
For now this only handles fault codes with we've seen yet
and for which we have explicit torture checks.

metze

librpc/rpc/dcerpc_error.c
source4/librpc/rpc/dcerpc.h

index 69cd08b7c1c693a376dae65a705db007cee396b6..713e32e7ed7b81b38e70b088da08f035745fcc24 100644 (file)
@@ -95,3 +95,27 @@ _PUBLIC_ const char *dcerpc_errstr(TALLOC_CTX *mem_ctx, uint32_t fault_code)
 
        return win_errstr(werr);
 }
+
+_PUBLIC_ NTSTATUS dcerpc_fault_to_nt_status(uint32_t fault_code)
+{
+       /* TODO: add more mappings */
+       switch (fault_code) {
+       case DCERPC_FAULT_OP_RNG_ERROR:
+               return NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE;
+       case DCERPC_FAULT_UNK_IF:
+               return NT_STATUS_RPC_UNKNOWN_IF;
+       case DCERPC_FAULT_NDR:
+               return NT_STATUS_RPC_BAD_STUB_DATA;
+       case DCERPC_FAULT_INVALID_TAG:
+               return NT_STATUS_RPC_ENUM_VALUE_OUT_OF_RANGE;
+       case DCERPC_FAULT_CONTEXT_MISMATCH:
+               return NT_STATUS_RPC_SS_CONTEXT_MISMATCH;
+       case DCERPC_FAULT_OTHER:
+               return NT_STATUS_RPC_CALL_FAILED;
+       case DCERPC_FAULT_ACCESS_DENIED:
+               return NT_STATUS_ACCESS_DENIED;
+       }
+
+       return NT_STATUS_RPC_PROTOCOL_ERROR;
+}
+
index 22988e62ba0def8b7db03923db37a24b5bce28e7..69de8c54672c1c827eed4b8b09c9b8cac2ac5c14 100644 (file)
@@ -303,6 +303,7 @@ NTSTATUS dcerpc_pipe_connect_b(TALLOC_CTX *parent_ctx,
                               struct tevent_context *ev,
                               struct loadparm_context *lp_ctx);
 const char *dcerpc_errstr(TALLOC_CTX *mem_ctx, uint32_t fault_code);
+NTSTATUS dcerpc_fault_to_nt_status(uint32_t fault_code);
 
 NTSTATUS dcerpc_pipe_auth(TALLOC_CTX *mem_ctx,
                          struct dcerpc_pipe **p,