summaryrefslogtreecommitdiff
path: root/source3/rpc_parse
diff options
context:
space:
mode:
authorVolker Lendecke <vlendec@samba.org>2006-06-06 14:18:12 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:17:18 -0500
commitc594a5519d459730252a9692200a849b84b4e96a (patch)
treea742fe87d8bfc3640d8295d947e9fbfa49992b14 /source3/rpc_parse
parent777c22b300c573e94d4dc99452575b7af7676774 (diff)
downloadsamba-c594a5519d459730252a9692200a849b84b4e96a.tar.gz
samba-c594a5519d459730252a9692200a849b84b4e96a.tar.bz2
samba-c594a5519d459730252a9692200a849b84b4e96a.zip
r16060: This is one of the more dirty patches I've put in lately. Parse enough of
SetUserInfo level 25 to survive the join method XP uses if the user did not exist before. For good taste this contains way too much cut&paste, but for a real fix there is just not enough time. Up to 3.0.22 we completely ignored that a full level 21 is being sent together with level 25, but we got away with that because on creation we did not set the "disabled" flag on the workstation account. Now we correctly follow W2k3 in this regard, and we end up with a disabled workstation after join. Man, I hate rpc_parse/. The correct fix would be to import PIDL generated samr parsing, but this is would probably be a bit too much for .23... Thanks to Tom Bork for finding this one. Volker (This used to be commit 5a37aba10551456042266443cc0a92f28f8c3d0d)
Diffstat (limited to 'source3/rpc_parse')
-rw-r--r--source3/rpc_parse/parse_samr.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/source3/rpc_parse/parse_samr.c b/source3/rpc_parse/parse_samr.c
index 027d5fba85..d661b225e0 100644
--- a/source3/rpc_parse/parse_samr.c
+++ b/source3/rpc_parse/parse_samr.c
@@ -6041,8 +6041,10 @@ static BOOL sam_io_user_info25(const char *desc, SAM_USER_INFO_25 * usr, prs_str
return False;
if(!prs_uint32("acb_info ", ps, depth, &usr->acb_info))
return False;
+ if(!prs_uint32("fields_present ", ps, depth, &usr->fields_present))
+ return False;
- if(!prs_uint32s(False, "unknown_6 ", ps, depth, usr->unknown_6, 6))
+ if(!prs_uint32s(False, "unknown_5 ", ps, depth, usr->unknown_5, 5))
return False;
if(!prs_uint8s(False, "password ", ps, depth, usr->pass, sizeof(usr->pass)))