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; }