diff options
-rw-r--r-- | source4/include/cli_context.h | 4 | ||||
-rw-r--r-- | source4/libcli/raw/clisession.c | 2 | ||||
-rw-r--r-- | source4/libcli/raw/clitransport.c | 9 |
3 files changed, 15 insertions, 0 deletions
diff --git a/source4/include/cli_context.h b/source4/include/cli_context.h index bffb6c9f6a..0e817c3cb0 100644 --- a/source4/include/cli_context.h +++ b/source4/include/cli_context.h @@ -66,6 +66,10 @@ struct cli_negotiate { unsigned int writebraw_supported:1; const char *server_domain; + + /* remember the session key for data encryption in various sub-protocols + such as LSA */ + uint8 user_session_key[16]; }; /* this is the context for a SMB socket associated with the socket itself */ diff --git a/source4/libcli/raw/clisession.c b/source4/libcli/raw/clisession.c index c5d4888089..1c0af77d11 100644 --- a/source4/libcli/raw/clisession.c +++ b/source4/libcli/raw/clisession.c @@ -247,6 +247,8 @@ static void setup_nt1_signing(struct cli_transport *transport, const char *passw SMBsesskeygen_ntv1(nt_hash, NULL, session_key); nt_response = nt_blob(password, transport->negotiate.secblob); + cli_transport_set_session_key(transport, session_key); + cli_transport_simple_set_signing(transport, session_key, nt_response); } diff --git a/source4/libcli/raw/clitransport.c b/source4/libcli/raw/clitransport.c index 2d614cc3bd..62152bbe4d 100644 --- a/source4/libcli/raw/clitransport.c +++ b/source4/libcli/raw/clitransport.c @@ -222,3 +222,12 @@ BOOL cli_transport_select(struct cli_transport *transport) return True; } + +/* + store the user session key for a transport +*/ +void cli_transport_set_session_key(struct cli_transport *transport, + const uint8 session_key[16]) +{ + memcpy(transport->negotiate.user_session_key, session_key, 16); +} |