Author: tridge
Date: 2004-09-03 05:16:25 +0000 (Fri, 03 Sep 2004)
New Revision: 2199

WebSVN: 
http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source&rev=2199&nolog=1

Log:
the unknown 16 bit number in lsa_LookupPrivDisplayName() is a language
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.

Modified:
   branches/SAMBA_4_0/source/librpc/idl/lsa.idl
   branches/SAMBA_4_0/source/torture/rpc/lsa.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/idl/lsa.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/lsa.idl        2004-09-02 22:51:12 UTC (rev 
2198)
+++ branches/SAMBA_4_0/source/librpc/idl/lsa.idl        2004-09-03 05:16:25 UTC (rev 
2199)
@@ -458,10 +458,11 @@
        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 */

Modified: branches/SAMBA_4_0/source/torture/rpc/lsa.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rpc/lsa.c 2004-09-02 22:51:12 UTC (rev 2198)
+++ branches/SAMBA_4_0/source/torture/rpc/lsa.c 2004-09-03 05:16:25 UTC (rev 2199)
@@ -642,19 +642,26 @@
 {
        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;
 }

Reply via email to