diff options
author | Günther Deschner <gd@samba.org> | 2004-12-20 11:36:39 +0000 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2004-12-20 11:36:39 +0000 |
commit | 24d3ff2837b53ac6cf1c82a1106238762b4c6918 (patch) | |
tree | 18201fd7f97854d5c41e651a5ab4ec8f2c1b278c /source/rpc_parse | |
parent | 46783bd32a945291ec1c9081b0f8701d821496c2 (diff) | |
download | samba-24d3ff2837b53ac6cf1c82a1106238762b4c6918.tar.gz samba-24d3ff2837b53ac6cf1c82a1106238762b4c6918.tar.xz samba-24d3ff2837b53ac6cf1c82a1106238762b4c6918.zip |
r4286: Give back 8 byte lm_session_key in Netrsamlogon-reply.
The old #ifdef JRATEST-block was copying 16 bytes and thus overwriting
acct_flags with bizarre values, breaking a lot of things.
This patch is successfully running in a production environment for quite
some time now and is required to finally allow Exchange 5.5 to access
another Exchange Server when both are running on NT4 in a
samba-controlled domain. This also allows Exchange Replication to take
place, Exchange Administrator to access other Servers in the network,
etc. Fixes Bugzilla #1136.
Thanks abartlet for helping me with that one.
Guenther
Diffstat (limited to 'source/rpc_parse')
-rw-r--r-- | source/rpc_parse/parse_net.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/source/rpc_parse/parse_net.c b/source/rpc_parse/parse_net.c index 97ca0d406b4..7e5eec3e6d8 100644 --- a/source/rpc_parse/parse_net.c +++ b/source/rpc_parse/parse_net.c @@ -1454,12 +1454,16 @@ void init_net_user_info3(TALLOC_CTX *ctx, NET_USER_INFO_3 *usr, usr->buffer_dom_id = dom_sid ? 1 : 0; /* yes, we're bothering to put a domain SID in */ - memset((char *)usr->padding, '\0', sizeof(usr->padding)); + memset((char *)usr->lm_sess_key, '\0', sizeof(usr->lm_sess_key)); + memset(&usr->acct_flags, '\0', sizeof(usr->acct_flags)); -#if 0 /* JRATEST - exchange auth test. */ - if (lm_session_key != NULL) - memcpy(usr->padding, lm_session_key, sizeof(usr->user_sess_key)); -#endif + for (i=0; i<7; i++) { + memset(&usr->unknown[i], '\0', sizeof(usr->unknown)); + } + + if (lm_session_key != NULL) { + memcpy(usr->lm_sess_key, lm_session_key, sizeof(usr->lm_sess_key)); + } num_other_sids = init_dom_sid2s(ctx, other_sids, &usr->other_sids); @@ -1580,9 +1584,19 @@ BOOL net_io_user_info3(const char *desc, NET_USER_INFO_3 *usr, prs_struct *ps, if(!prs_uint32("buffer_dom_id ", ps, depth, &usr->buffer_dom_id)) /* undocumented logon domain id pointer */ return False; - if(!prs_uint8s (False, "padding ", ps, depth, usr->padding, 40)) /* unused padding bytes? */ + + if(!prs_uint8s(False, "lm_sess_key", ps, depth, usr->lm_sess_key, 8)) /* lm session key */ return False; + if(!prs_uint32("acct_flags ", ps, depth, &usr->acct_flags)) /* Account flags */ + return False; + + for (i = 0; i < 7; i++) + { + if (!prs_uint32("unkown", ps, depth, &usr->unknown[i])) /* unknown */ + return False; + } + if (validation_level == 3) { if(!prs_uint32("num_other_sids", ps, depth, &usr->num_other_sids)) /* 0 - num_sids */ return False; |