s4:dcesrv_samr_Add/DeleteAliasMember - provide better NTSTATUS return codes when...
authorMatthias Dieter Wallnöfer <mdw@samba.org>
Thu, 10 Jun 2010 13:47:48 +0000 (15:47 +0200)
committerMatthias Dieter Wallnöfer <mdw@samba.org>
Thu, 10 Jun 2010 14:22:08 +0000 (16:22 +0200)
source4/rpc_server/samr/dcesrv_samr.c

index 18175e4c9e467255d2aa92c3a3b08f437cb4403e..2ab5155c1070924868907c03bee8523e8c088c56 100644 (file)
@@ -2451,11 +2451,18 @@ static NTSTATUS dcesrv_samr_AddAliasMember(struct dcesrv_call_state *dce_call, T
                return NT_STATUS_UNSUCCESSFUL;
        }
 
-       if (ldb_modify(a_state->sam_ctx, mod) != LDB_SUCCESS) {
+       ret = ldb_modify(a_state->sam_ctx, mod);
+       switch (ret) {
+       case LDB_SUCCESS:
+               return NT_STATUS_OK;
+       case LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS:
+       case LDB_ERR_ENTRY_ALREADY_EXISTS:
+               return NT_STATUS_MEMBER_IN_GROUP;
+       case LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS:
+               return NT_STATUS_ACCESS_DENIED;
+       default:
                return NT_STATUS_UNSUCCESSFUL;
        }
-
-       return NT_STATUS_OK;
 }
 
 
@@ -2497,11 +2504,17 @@ static NTSTATUS dcesrv_samr_DeleteAliasMember(struct dcesrv_call_state *dce_call
                return NT_STATUS_UNSUCCESSFUL;
        }
 
-       if (ldb_modify(a_state->sam_ctx, mod) != LDB_SUCCESS) {
+       ret = ldb_modify(a_state->sam_ctx, mod);
+       switch (ret) {
+       case LDB_SUCCESS:
+               return NT_STATUS_OK;
+       case LDB_ERR_NO_SUCH_ATTRIBUTE:
+               return NT_STATUS_MEMBER_NOT_IN_GROUP;
+       case LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS:
+               return NT_STATUS_ACCESS_DENIED;
+       default:
                return NT_STATUS_UNSUCCESSFUL;
        }
-
-       return NT_STATUS_OK;
 }