From 1959428a00d5b6b41e2fc741841ba16e98926b96 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 10 Dec 2003 21:14:39 +0000 Subject: [PATCH] Fix UNISTR2 length bug in LsaQueryInfo(3) that cause SID resolution to fail on local files on on domain members; bug 875 (This used to be commit a5c5dde1c34ba44f8d9bbb38720a089a6d61806c) --- source3/bin/.cvsignore | 1 + source3/include/rpc_misc.h | 2 +- source3/rpc_parse/parse_misc.c | 2 +- source3/rpc_server/srv_lsa_nt.c | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/source3/bin/.cvsignore b/source3/bin/.cvsignore index 31af1fe22d8..013a5ba6c1d 100644 --- a/source3/bin/.cvsignore +++ b/source3/bin/.cvsignore @@ -52,3 +52,4 @@ log2pcap wbinfo winbindd wrepld +tdbdump diff --git a/source3/include/rpc_misc.h b/source3/include/rpc_misc.h index aaaad55c20c..29ae2121857 100644 --- a/source3/include/rpc_misc.h +++ b/source3/include/rpc_misc.h @@ -403,5 +403,5 @@ typedef struct buffer4_info } BUFFER4; -enum unistr2_term_codes { UNI_FLAGS_NONE = 0, UNI_STR_TERMINATE = 1, UNI_MAXLEN_TERMINATE = 2 }; +enum unistr2_term_codes { UNI_FLAGS_NONE = 0, UNI_STR_TERMINATE = 1, UNI_MAXLEN_TERMINATE = 2, UNI_BROKEN_NON_NULL = 3 }; #endif /* _RPC_MISC_H */ diff --git a/source3/rpc_parse/parse_misc.c b/source3/rpc_parse/parse_misc.c index 7cd3c795e61..b34efa66673 100644 --- a/source3/rpc_parse/parse_misc.c +++ b/source3/rpc_parse/parse_misc.c @@ -942,7 +942,7 @@ void init_unistr2(UNISTR2 *str, const char *buf, enum unistr2_term_codes flags) str->uni_max_len = num_chars; str->offset = 0; str->uni_str_len = num_chars; - if (num_chars && (flags == UNI_MAXLEN_TERMINATE)) + if ( num_chars && ((flags == UNI_MAXLEN_TERMINATE) || (flags == UNI_BROKEN_NON_NULL)) ) str->uni_max_len++; } diff --git a/source3/rpc_server/srv_lsa_nt.c b/source3/rpc_server/srv_lsa_nt.c index 8785cce789d..01a31dcfe5b 100644 --- a/source3/rpc_server/srv_lsa_nt.c +++ b/source3/rpc_server/srv_lsa_nt.c @@ -66,7 +66,7 @@ static void init_dom_query(DOM_QUERY *d_q, const char *dom_name, DOM_SID *dom_si /* this string is supposed to be non-null terminated. */ /* But the maxlen in this UNISTR2 must include the terminating null. */ - init_unistr2(&d_q->uni_domain_name, dom_name, UNI_MAXLEN_TERMINATE); + init_unistr2(&d_q->uni_domain_name, dom_name, UNI_BROKEN_NON_NULL); /* * I'm not sure why this really odd combination of length -- 2.11.4.GIT