s3-lsa-server: fix _lsa_GetUserName.
authorGünther Deschner <gd@samba.org>
Mon, 20 Oct 2008 23:19:49 +0000 (01:19 +0200)
committerGünther Deschner <gd@samba.org>
Tue, 21 Oct 2008 09:39:45 +0000 (11:39 +0200)
Guenther

source3/rpc_server/srv_lsa_nt.c
source3/rpcclient/cmd_lsarpc.c

index 317c1c17bb249002ea075689e65f2ba769991d75..e3075334b86a5be21b1a6ba7f90b6ee3fd6ef26d 100644 (file)
@@ -1462,6 +1462,16 @@ NTSTATUS _lsa_GetUserName(pipes_struct *p,
        struct lsa_String *account_name = NULL;
        struct lsa_String *authority_name = NULL;
 
+       if (r->in.account_name &&
+          *r->in.account_name) {
+               return NT_STATUS_INVALID_PARAMETER;
+       }
+
+       if (r->in.authority_name &&
+          *r->in.authority_name) {
+               return NT_STATUS_INVALID_PARAMETER;
+       }
+
        if (p->server_info->guest) {
                /*
                 * I'm 99% sure this is not the right place to do this,
@@ -1477,21 +1487,24 @@ NTSTATUS _lsa_GetUserName(pipes_struct *p,
                domname = pdb_get_domain(p->server_info->sam_account);
        }
 
-       account_name = TALLOC_ZERO_P(p->mem_ctx, struct lsa_String);
+       account_name = TALLOC(p->mem_ctx, struct lsa_String);
        if (!account_name) {
                return NT_STATUS_NO_MEMORY;
        }
+       init_lsa_String(account_name, username);
 
-       authority_name = TALLOC_ZERO_P(p->mem_ctx, struct lsa_String);
-       if (!authority_name) {
-               return NT_STATUS_NO_MEMORY;
+       if (r->out.authority_name) {
+               authority_name = TALLOC(p->mem_ctx, struct lsa_String);
+               if (!authority_name) {
+                       return NT_STATUS_NO_MEMORY;
+               }
+               init_lsa_String(authority_name, domname);
        }
 
-       init_lsa_String(account_name, username);
-       init_lsa_String(authority_name, domname);
-
        *r->out.account_name = account_name;
-       *r->out.authority_name = authority_name;
+       if (r->out.authority_name) {
+               *r->out.authority_name = authority_name;
+       }
 
        return NT_STATUS_OK;
 }
index 3f79310c36004733cf8abc3939133205c30da4f9..aa8662ce9dad55f166aaf0cbec45f9bc0c47eb3e 100644 (file)
@@ -1182,7 +1182,8 @@ static NTSTATUS cmd_lsa_get_username(struct rpc_pipe_client *cli,
        /* Print results */
 
        printf("Account Name: %s, Authority Name: %s\n",
-               account_name->string, authority_name->string);
+               account_name->string, authority_name ? authority_name->string :
+               "");
 
        rpccli_lsa_Close(cli, mem_ctx, &pol);
  done: