From a560082c60e618de327170dbcb8107ab988913fb Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 3 Sep 2004 05:16:25 +0000 Subject: r2199: 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. (This used to be commit e99d88915fbfcfb50b04330cd1a32b90222fbca3) --- source4/librpc/idl/lsa.idl | 7 ++++--- source4/torture/rpc/lsa.c | 9 ++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'source4') diff --git a/source4/librpc/idl/lsa.idl b/source4/librpc/idl/lsa.idl index fecb1b00d2..fe3aa1d51b 100644 --- a/source4/librpc/idl/lsa.idl +++ b/source4/librpc/idl/lsa.idl @@ -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 */ diff --git a/source4/torture/rpc/lsa.c b/source4/torture/rpc/lsa.c index 5a306fef4d..135e50fb5a 100644 --- a/source4/torture/rpc/lsa.c +++ b/source4/torture/rpc/lsa.c @@ -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; } -- cgit