summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2007-02-02 22:02:42 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:17:41 -0500
commit685ca94ac24842fddf22e31edc39de40b0729248 (patch)
treede63d7f1b30acd2b4a89dfe32863dfe3521ba30d /source3/smbd
parent7074680bcf4484b91428fa39c733e95c3563524e (diff)
downloadsamba-685ca94ac24842fddf22e31edc39de40b0729248.tar.gz
samba-685ca94ac24842fddf22e31edc39de40b0729248.tar.bz2
samba-685ca94ac24842fddf22e31edc39de40b0729248.zip
r21128: Fix Vista connecting to Samba in share level security.
Vista sends the NTLMv2 blob by default in the tconX packet. Make sure we save off the workgroup the user was logged into on the client in the sessionsetupX and re-use it for the NTLMv2 calc. Jeremy. (This used to be commit 45dcf62960c2815c4d8e0c5f4a2d0af24df83290)
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/password.c25
-rw-r--r--source3/smbd/sesssetup.c1
2 files changed, 26 insertions, 0 deletions
diff --git a/source3/smbd/password.c b/source3/smbd/password.c
index 38000e93f4..10cb920237 100644
--- a/source3/smbd/password.c
+++ b/source3/smbd/password.c
@@ -23,6 +23,8 @@
/* users from session setup */
static char *session_userlist = NULL;
static int len_session_userlist = 0;
+/* workgroup from session setup. */
+static char *session_workgroup = NULL;
/* this holds info on user ids that are already validated for this VC */
static user_struct *validated_users;
@@ -403,6 +405,29 @@ void add_session_user(const char *user)
}
/****************************************************************************
+ In security=share mode we need to store the client workgroup, as that's
+ what Vista uses for the NTLMv2 calculation.
+****************************************************************************/
+
+void add_session_workgroup(const char *workgroup)
+{
+ if (session_workgroup) {
+ SAFE_FREE(session_workgroup);
+ }
+ session_workgroup = smb_xstrdup(workgroup);
+}
+
+/****************************************************************************
+ In security=share mode we need to return the client workgroup, as that's
+ what Vista uses for the NTLMv2 calculation.
+****************************************************************************/
+
+const char *get_session_workgroup(void)
+{
+ return session_workgroup;
+}
+
+/****************************************************************************
Check if a user is in a netgroup user list. If at first we don't succeed,
try lower case.
****************************************************************************/
diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c
index 4d731f9c59..6c5e8f678f 100644
--- a/source3/smbd/sesssetup.c
+++ b/source3/smbd/sesssetup.c
@@ -1050,6 +1050,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,
map_username(sub_user);
add_session_user(sub_user);
+ add_session_workgroup(domain);
/* Then force it to null for the benfit of the code below */
*user = 0;
}