r2199: the unknown 16 bit number in lsa_LookupPrivDisplayName() is a language
authorAndrew Tridgell <tridge@samba.org>
Fri, 3 Sep 2004 05:16:25 +0000 (05:16 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:58:30 +0000 (12:58 -0500)
ID, so the client can choose what language they get the privilege
description in.

this is the first time I've seen a language ID on the wire in CIFS.
(This used to be commit e99d88915fbfcfb50b04330cd1a32b90222fbca3)

source4/librpc/idl/lsa.idl
source4/torture/rpc/lsa.c

index fecb1b00d281ccce83c07a469072a99338abc207..fe3aa1d51b5df69d7f8170cf3bfdbf8fd73c7526 100644 (file)
        NTSTATUS lsa_LookupPrivDisplayName (
                [in,ref]     policy_handle *handle,
                [in,ref]     lsa_Name *name,
-               [in]         uint16 unknown,     /* 0x0409 */
-               [in]         uint16 unknown2,    /* 0x0409 */
                [out]        lsa_Name *disp_name,
-               [out]        uint16 unknown3     /* 0x0409 */
+               /* see http://www.microsoft.com/globaldev/nlsweb/ for
+                  language definitions */
+               [in,out,ref] uint16 *language_id,
+               [in]         uint16 unknown
                );
 
        /* Function:        0x22 */
index 5a306fef4dabda054cc2c3bac42b667c37093849..135e50fb5a740eac196462993a87b75c06be3672 100644 (file)
@@ -642,19 +642,26 @@ static BOOL test_LookupPrivDisplayName(struct dcerpc_pipe *p,
 {
        struct lsa_LookupPrivDisplayName r;
        NTSTATUS status;
+       /* produce a reasonable range of language output without screwing up
+          terminals */
+       uint16 language_id = (random() % 4) + 0x409;
 
        printf("testing LookupPrivDisplayName(%s)\n", priv_name->name);
        
        r.in.handle = handle;
        r.in.name = priv_name;
+       r.in.language_id = &language_id;
+       r.out.language_id = &language_id;
        r.in.unknown = 0;
-       r.in.unknown2 = 0;
 
        status = dcerpc_lsa_LookupPrivDisplayName(p, mem_ctx, &r);
        if (!NT_STATUS_IS_OK(status)) {
                printf("LookupPrivDisplayName failed - %s\n", nt_errstr(status));
                return False;
        }
+       printf("%s -> \"%s\"  (language 0x%x/0x%x)\n", 
+              priv_name->name, r.out.disp_name->name, 
+              *r.in.language_id, *r.out.language_id);
 
        return True;
 }