summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-09-03 05:16:25 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:58:30 -0500
commita560082c60e618de327170dbcb8107ab988913fb (patch)
tree9d760100fa7dad0ef8eb21951f5cb2cad0e9ad76
parent37dc4e9bf757710c30d05ff9cba3c960ce76989a (diff)
downloadsamba-a560082c60e618de327170dbcb8107ab988913fb.tar.gz
samba-a560082c60e618de327170dbcb8107ab988913fb.tar.bz2
samba-a560082c60e618de327170dbcb8107ab988913fb.zip
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)
-rw-r--r--source4/librpc/idl/lsa.idl7
-rw-r--r--source4/torture/rpc/lsa.c9
2 files changed, 12 insertions, 4 deletions
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;
}