summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2002-07-27 02:54:39 +0000
committerAndrew Bartlett <abartlet@samba.org>2002-07-27 02:54:39 +0000
commite0c57e6ab550b208283aec13fc2728537d7ab57e (patch)
tree0625f0d845884212b757c3e5c62e1c11ed002c4f /source3/smbd
parent31b4cfd8208a0efd63891eb24827babb88d04ba0 (diff)
downloadsamba-e0c57e6ab550b208283aec13fc2728537d7ab57e.tar.gz
samba-e0c57e6ab550b208283aec13fc2728537d7ab57e.tar.bz2
samba-e0c57e6ab550b208283aec13fc2728537d7ab57e.zip
This should fix a nastly little bug where if a user had already done one
session setup, it would not correctly pick up the [homes] share on a subsequent session setup. The new rules are: If you want to connect to [homes], then it must have been available at session setup time, or you must be in security=share. At each session setup, the user's copy of [homes] is updated to ensure it has the right path etc. Andrew Bartlett (This used to be commit 5d2c7816a3ea02a67c5b501626d91d43557e9dd9)
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/password.c7
-rw-r--r--source3/smbd/service.c16
2 files changed, 14 insertions, 9 deletions
diff --git a/source3/smbd/password.c b/source3/smbd/password.c
index 9c67edd255..391de02dea 100644
--- a/source3/smbd/password.c
+++ b/source3/smbd/password.c
@@ -274,7 +274,7 @@ int register_vuid(auth_serversupplied_info *server_info, char *smb_name)
/* Create an NT_USER_TOKEN struct for this user. */
vuser->nt_user_token = create_nt_token(vuser->uid, vuser->gid, vuser->n_groups, vuser->groups, vuser->guest, server_info->ptok);
- DEBUG(3,("uid %d registered to name %s\n",(int)vuser->uid,vuser->user.unix_name));
+ DEBUG(3,("UNIX uid %d is UNIX user %s, and will be vuid %u\n",(int)vuser->uid,vuser->user.unix_name, vuser->vuid));
next_vuid++;
num_validated_vuids++;
@@ -288,8 +288,9 @@ int register_vuid(auth_serversupplied_info *server_info, char *smb_name)
}
/* Register a home dir service for this user */
- if ((!vuser->guest) && vuser->unix_homedir && *(vuser->unix_homedir)
- && (lp_servicenumber(vuser->user.unix_name) < 0)) {
+ if ((!vuser->guest) && vuser->unix_homedir && *(vuser->unix_homedir)) {
+ DEBUG(3, ("Adding/updating homes service for user '%s' using home direcotry: '%s'\n",
+ vuser->user.unix_name, vuser->unix_homedir));
vuser->homes_snum = add_home_service(vuser->user.unix_name, vuser->user.unix_name, vuser->unix_homedir);
} else {
vuser->homes_snum = -1;
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index 7dd61f2325..aac90f2fdc 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -523,7 +523,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
pstrcpy(s,lp_pathname(snum));
standard_sub_conn(conn,s,sizeof(s));
string_set(&conn->connectpath,s);
- DEBUG(3,("Connect path is %s\n",s));
+ DEBUG(3,("Connect path is '%s' for service [%s]\n",s, lp_servicename(snum)));
}
/* groups stuff added by ih */
@@ -761,6 +761,7 @@ connection_struct *make_connection(const char *service_in, DATA_BLOB password,
vuser = get_valid_user_struct(vuid);
if (!vuser) {
DEBUG(1,("make_connection: refusing to connect with no session setup\n"));
+ *status = NT_STATUS_ACCESS_DENIED;
return NULL;
}
}
@@ -775,12 +776,15 @@ connection_struct *make_connection(const char *service_in, DATA_BLOB password,
if (strequal(service_in,HOMES_NAME)) {
if(lp_security() != SEC_SHARE) {
DATA_BLOB no_pw = data_blob(NULL, 0);
- if (vuser->homes_snum != -1) {
- DEBUG(5, ("making a connection to [homes] service created at session setup time\n"));
- return make_connection_snum(vuser->homes_snum,
- vuser, no_pw,
- dev, status);
+ if (vuser->homes_snum == -1) {
+ DEBUG(2, ("[homes] share not available for this user becouse it was not found or created at session setup time\n"));
+ *status = NT_STATUS_BAD_NETWORK_NAME;
+ return NULL;
}
+ DEBUG(5, ("making a connection to [homes] service created at session setup time\n"));
+ return make_connection_snum(vuser->homes_snum,
+ vuser, no_pw,
+ dev, status);
} else {
/* Security = share. Try with current_user_info.smb_name
* as the username. */