netapi: give more correct error code in NetUserGetInfo.
[jra/samba/.git] / source3 / lib / netapi / user.c
index 6e13a54528419c3e118abc208ffc5181663c21ed..47053f29af1729217b3ff917da60e0c157105dea 100644 (file)
@@ -675,6 +675,18 @@ static NTSTATUS libnetapi_samr_lookup_user(TALLOC_CTX *mem_ctx,
 /****************************************************************
 ****************************************************************/
 
+static uint32_t samr_acb_flags_to_netapi_flags(uint32_t acb)
+{
+       uint32_t fl = UF_SCRIPT; /* god knows why */
+
+       fl |= ads_acb2uf(acb);
+
+       return fl;
+}
+
+/****************************************************************
+****************************************************************/
+
 static NTSTATUS libnetapi_samr_lookup_user_map_USER_INFO(TALLOC_CTX *mem_ctx,
                                                         struct rpc_pipe_client *pipe_cli,
                                                         struct dom_sid *domain_sid,
@@ -736,7 +748,8 @@ static NTSTATUS libnetapi_samr_lookup_user_map_USER_INFO(TALLOC_CTX *mem_ctx,
 
        switch (level) {
                case 10:
-                       info10.usri10_name = talloc_strdup(mem_ctx, user_name);
+                       info10.usri10_name = talloc_strdup(mem_ctx,
+                               info21->account_name.string);
                        NT_STATUS_HAVE_NO_MEMORY(info10.usri10_name);
 
                        info10.usri10_comment = talloc_strdup(mem_ctx,
@@ -754,7 +767,8 @@ static NTSTATUS libnetapi_samr_lookup_user_map_USER_INFO(TALLOC_CTX *mem_ctx,
                        break;
 
                case 20:
-                       info20.usri20_name = talloc_strdup(mem_ctx, user_name);
+                       info20.usri20_name = talloc_strdup(mem_ctx,
+                               info21->account_name.string);
                        NT_STATUS_HAVE_NO_MEMORY(info20.usri20_name);
 
                        info20.usri20_comment = talloc_strdup(mem_ctx,
@@ -763,7 +777,8 @@ static NTSTATUS libnetapi_samr_lookup_user_map_USER_INFO(TALLOC_CTX *mem_ctx,
                        info20.usri20_full_name = talloc_strdup(mem_ctx,
                                info21->full_name.string);
 
-                       info20.usri20_flags = info21->acct_flags;
+                       info20.usri20_flags =
+                               samr_acb_flags_to_netapi_flags(info21->acct_flags);
                        info20.usri20_user_id = rid;
 
                        ADD_TO_ARRAY(mem_ctx, struct USER_INFO_20, info20,
@@ -771,7 +786,8 @@ static NTSTATUS libnetapi_samr_lookup_user_map_USER_INFO(TALLOC_CTX *mem_ctx,
 
                        break;
                case 23:
-                       info23.usri23_name = talloc_strdup(mem_ctx, user_name);
+                       info23.usri23_name = talloc_strdup(mem_ctx,
+                               info21->account_name.string);
                        NT_STATUS_HAVE_NO_MEMORY(info23.usri23_name);
 
                        info23.usri23_comment = talloc_strdup(mem_ctx,
@@ -780,7 +796,8 @@ static NTSTATUS libnetapi_samr_lookup_user_map_USER_INFO(TALLOC_CTX *mem_ctx,
                        info23.usri23_full_name = talloc_strdup(mem_ctx,
                                info21->full_name.string);
 
-                       info23.usri23_flags = info21->acct_flags;
+                       info23.usri23_flags =
+                               samr_acb_flags_to_netapi_flags(info21->acct_flags);
 
                        if (!sid_compose(&sid, domain_sid, rid)) {
                                return NT_STATUS_NO_MEMORY;
@@ -1246,14 +1263,20 @@ WERROR NetUserGetInfo_r(struct libnetapi_ctx *ctx,
 
        switch (r->in.level) {
                case 0:
-               /* case 1: */
                case 10:
                case 20:
                case 23:
                        break;
-               default:
+               case 1:
+               case 2:
+               case 3:
+               case 4:
+               case 11:
                        werr = WERR_NOT_SUPPORTED;
                        goto done;
+               default:
+                       werr = WERR_UNKNOWN_LEVEL;
+                       goto done;
        }
 
        werr = libnetapi_open_pipe(ctx, r->in.server_name,