[PATCH] s3: dynamic share permission detection, part 4; bug fix.

Bo Yang boyang at samba.org
Tue Dec 1 04:17:36 MST 2009


Signed-off-by: Bo Yang <boyang at samba.org>
---
 source3/librpc/gen_ndr/ndr_messaging.c |    1 +
 source3/rpc_server/srv_srvsvc_nt.c     |   14 +++-
 source3/smbd/process.c                 |   14 ++--
 source3/smbd/uid.c                     |  127 +++-----------------------------
 4 files changed, 33 insertions(+), 123 deletions(-)

diff --git a/source3/librpc/gen_ndr/ndr_messaging.c b/source3/librpc/gen_ndr/ndr_messaging.c
index 3e2aa1f..0967b38 100644
--- a/source3/librpc/gen_ndr/ndr_messaging.c
+++ b/source3/librpc/gen_ndr/ndr_messaging.c
@@ -63,6 +63,7 @@ _PUBLIC_ void ndr_print_messaging_type(struct ndr_print *ndr, const char *name,
 		case MSG_SMB_BRL_VALIDATE: val = "MSG_SMB_BRL_VALIDATE"; break;
 		case MSG_SMB_RELEASE_IP: val = "MSG_SMB_RELEASE_IP"; break;
 		case MSG_SMB_CLOSE_FILE: val = "MSG_SMB_CLOSE_FILE"; break;
+		case MSG_SMB_REEVALUATE_SHARE: val = "MSG_SMB_REEVALUATE_SHARE"; break;
 		case MSG_WINBIND_FINISHED: val = "MSG_WINBIND_FINISHED"; break;
 		case MSG_WINBIND_FORGET_STATE: val = "MSG_WINBIND_FORGET_STATE"; break;
 		case MSG_WINBIND_ONLINE: val = "MSG_WINBIND_ONLINE"; break;
diff --git a/source3/rpc_server/srv_srvsvc_nt.c b/source3/rpc_server/srv_srvsvc_nt.c
index bad341e..daad10c 100644
--- a/source3/rpc_server/srv_srvsvc_nt.c
+++ b/source3/rpc_server/srv_srvsvc_nt.c
@@ -1698,9 +1698,21 @@ WERROR _srvsvc_NetShareSetInfo(pipes_struct *p,
 		old_sd = get_share_security(p->mem_ctx, lp_servicename(snum), &sd_size);
 
 		if (old_sd && !security_descriptor_equal(old_sd, psd)) {
-			if (!set_share_security(share_name, psd))
+			bool retval = False;
+			retval = set_share_security(share_name, psd);
+			if (!retval) {
 				DEBUG(0,("_srvsvc_NetShareSetInfo: Failed to change security info in share %s.\n",
 					share_name ));
+			} else {
+				/*
+				 * security descriptor is updated. send message 
+				 * to all smbd process to notify them to 
+				 * reevaluate share.
+				 */
+				message_send_all(smbd_messaging_context(),
+						 MSG_SMB_REEVALUATE_SHARE, share_name,
+						 strlen(share_name) + 1, NULL);
+			}
 		}
 	}
 
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index 022ee71..3c8e658 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -1340,6 +1340,13 @@ static connection_struct *switch_message(uint8 type, struct smb_request *req, in
 			return NULL;
 		}
 
+		if (!change_to_user(conn,session_tag)) {
+			DEBUG(0, ("Error: Could not change to user. Removing "
+			    "deferred open, mid=%d.\n", req->mid));
+			reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRbaduid));
+			return conn;
+		}
+
 		/* All NEED_WRITE and CAN_IPC flags must also have AS_USER. */
 
 		/* 
@@ -1361,13 +1368,6 @@ static connection_struct *switch_message(uint8 type, struct smb_request *req, in
 			}
 		}
 
-		if (!change_to_user(conn,session_tag)) {
-			DEBUG(0, ("Error: Could not change to user. Removing "
-			    "deferred open, mid=%d.\n", req->mid));
-			reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRbaduid));
-			return conn;
-		}
-
 		/* IPC services are limited */
 		if (IS_IPC(conn) && !(flags & CAN_IPC)) {
 			reply_doserror(req, ERRSRV,ERRaccess);
diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c
index 92b735f..21949f5 100644
--- a/source3/smbd/uid.c
+++ b/source3/smbd/uid.c
@@ -516,24 +516,9 @@ static bool check_user_ok_without_cache(connection_struct *conn,
 					const struct auth_serversupplied_info *server_info,
 					int snum)
 {
-	bool valid_vuid = (vuid != UID_FIELD_INVALID);
-	unsigned int i;
 	bool readonly_share;
 	bool admin_user;
-	struct vuid_cache_entry *ent;
-
-	if (valid_vuid) {
-		for (i=0; i<VUID_CACHE_SIZE; i++) {
-			ent = &conn->vuid_cache.array[i];
-			if (ent->vuid == vuid) {
-				free_conn_server_info_if_unused(conn);
-				conn->server_info = ent->server_info;
-				conn->read_only = ent->read_only;
-				conn->admin_user = ent->admin_user;
-				break;
-			}
-		}
-	}
+	struct auth_serversupplied_info *tmp_info;
 
 	if (!user_ok_token(server_info->unix_name,
 			   pdb_get_domain(server_info->sam_account),
@@ -567,43 +552,20 @@ static bool check_user_ok_without_cache(connection_struct *conn,
 		pdb_get_domain(server_info->sam_account),
 		NULL, server_info->ptok, lp_admin_users(snum));
 
-	if (valid_vuid) {
-		if (i == VUID_CACHE_SIZE) {
-			/* didn't find cache, use a new entry */
-			ent = &conn->vuid_cache.array[conn->vuid_cache.next_entry];
-
-			conn->vuid_cache.next_entry =
-				(conn->vuid_cache.next_entry + 1) % VUID_CACHE_SIZE;
-			/* didn't find the cache, free server_info. */
-			TALLOC_FREE(conn->server_info);
-		}
-
-		/*
-		 * If we found the cache, free the old one.
-		 * If we didn't find the cache, free the entry for use by 
-		 * this one. :-)
-		 */
-		TALLOC_FREE(ent->server_info);
-
-		/*
-		 * If force_user was set, all server_info's are based on the same
-		 * username-based faked one.
-		 */
-
-		ent->server_info = copy_serverinfo(
-			conn, conn->force_user ? conn->server_info : server_info);
+	/*
+	 * If force_user was set, all server_info's are based on the same
+	 * username-based faked one.
+	 */
 
-		if (ent->server_info == NULL) {
-			ent->vuid = UID_FIELD_INVALID;
-			return false;
-		}
+	tmp_info = copy_serverinfo(
+		conn, conn->force_user ? conn->server_info : server_info);
 
-		ent->vuid = vuid;
-		ent->read_only = readonly_share;
-		ent->admin_user = admin_user;
-		conn->server_info = ent->server_info;
+	if (tmp_info == NULL) {
+		return false;
 	}
-
+	
+	free_conn_server_info_if_unused(conn);
+	conn->server_info = tmp_info;
 	conn->read_only = readonly_share;
 	conn->admin_user = admin_user;
 
@@ -620,11 +582,6 @@ bool check_share_perm_without_cache(connection_struct *conn, uint16 vuid)
 	struct smbd_server_connection *sconn = smbd_server_conn;
 	user_struct *vuser = get_valid_user_struct(sconn, vuid);
 	int snum;
-	gid_t gid;
-	uid_t uid;
-	char group_c;
-	int num_groups = 0;
-	gid_t *group_list = NULL;
 
 	if (!conn) {
 		DEBUG(2,("check_share_perm_without_cache: Connection not open\n"));
@@ -651,65 +608,5 @@ bool check_share_perm_without_cache(connection_struct *conn, uint16 vuid)
 		return false;
 	}
 
-	/*
-	 * conn->server_info is now correctly set up with a copy we can mess
-	 * with for force_group etc.
-	 */
-
-	if (conn->force_user) /* security = share sets this too */ {
-		uid = conn->server_info->utok.uid;
-		gid = conn->server_info->utok.gid;
-	        group_list = conn->server_info->utok.groups;
-		num_groups = conn->server_info->utok.ngroups;
-	} else if (vuser) {
-		uid = conn->admin_user ? 0 : vuser->server_info->utok.uid;
-		gid = conn->server_info->utok.gid;
-		num_groups = conn->server_info->utok.ngroups;
-		group_list  = conn->server_info->utok.groups;
-	} else {
-		DEBUG(2,("check_share_perm_without_cache: Invalid vuid used %d in accessing "
-			 "share %s.\n",vuid, lp_servicename(snum) ));
-		return False;
-	}
-
-	/*
-	 * See if we should force group for this service.
-	 * If so this overrides any group set in the force
-	 * user code.
-	 */
-
-	if((group_c = *lp_force_group(snum))) {
-
-		SMB_ASSERT(conn->force_group_gid != (gid_t)-1);
-
-		if(group_c == '+') {
-
-			/*
-			 * Only force group if the user is a member of
-			 * the service group. Check the group memberships for
-			 * this user (we already have this) to
-			 * see if we should force the group.
-			 */
-
-			int i;
-			for (i = 0; i < num_groups; i++) {
-				if (group_list[i]
-				    == conn->force_group_gid) {
-					conn->server_info->utok.gid =
-						conn->force_group_gid;
-					gid = conn->force_group_gid;
-					gid_to_sid(&conn->server_info->ptok
-						   ->user_sids[1], gid);
-					break;
-				}
-			}
-		} else {
-			conn->server_info->utok.gid = conn->force_group_gid;
-			gid = conn->force_group_gid;
-			gid_to_sid(&conn->server_info->ptok->user_sids[1],
-				   gid);
-		}
-	}
-
 	return(True);
 }
-- 
1.5.3


--------------020706050703070905050801
Content-Type: application/x-bzip;
 name="test-shareperm.tar.bz2"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="test-shareperm.tar.bz2"

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
--------------020706050703070905050801--


More information about the samba-technical mailing list