[SCM] Samba Shared Repository - branch v3-6-test updated

Karolin Seeger kseeger at samba.org
Fri Jun 15 13:02:58 MDT 2012


The branch, v3-6-test has been updated
       via  0ace3ca Part 2 of fix for bug #8998 - Notify code can miss a ChDir.
       via  2b92491 Part 1 of fix for bug #8998 - Notify code can miss a ChDir.
      from  6330936 Fix bug #8922.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test


- Log -----------------------------------------------------------------
commit 0ace3ca03df76a1c22e112ea41d491f90afc0f94
Author: Volker Lendecke <Volker.Lendecke at SerNet.DE>
Date:   Thu Jun 14 11:26:44 2012 -0700

    Part 2 of fix for bug #8998 - Notify code can miss a ChDir.
    
    Do a ChDir for notify_onelevel.

commit 2b92491ba7cc5fd541e3f8988ecf831c3949fb00
Author: Volker Lendecke <Volker.Lendecke at SerNet.DE>
Date:   Thu Jun 14 11:24:01 2012 -0700

    Part 1 of fix for bug #8998 - Notify code can miss a ChDir.
    
    Factor out notify_parent_dir.

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/notify.c |   52 +++++++++++++++++++++++++++++++++++-------------
 1 files changed, 38 insertions(+), 14 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c
index 24385c9..d9a28eb 100644
--- a/source3/smbd/notify.c
+++ b/source3/smbd/notify.c
@@ -345,28 +345,52 @@ void remove_pending_change_notify_requests_by_fid(files_struct *fsp,
 	}
 }
 
-void notify_fname(connection_struct *conn, uint32 action, uint32 filter,
-		  const char *path)
+static void notify_parent_dir(connection_struct *conn,
+			      uint32 action, uint32 filter,
+			      const char *path)
 {
-	char *fullpath;
+	struct smb_filename smb_fname_parent;
 	char *parent;
 	const char *name;
+	char *oldwd;
 
-	if (path[0] == '.' && path[1] == '/') {
-		path += 2;
+	if (!parent_dirname(talloc_tos(), path, &parent, &name)) {
+		return;
 	}
-	if (parent_dirname(talloc_tos(), path, &parent, &name)) {
-		struct smb_filename smb_fname_parent;
 
-		ZERO_STRUCT(smb_fname_parent);
-		smb_fname_parent.base_name = parent;
+	ZERO_STRUCT(smb_fname_parent);
+	smb_fname_parent.base_name = parent;
 
-		if (SMB_VFS_STAT(conn, &smb_fname_parent) != -1) {
-			notify_onelevel(conn->notify_ctx, action, filter,
-			    SMB_VFS_FILE_ID_CREATE(conn, &smb_fname_parent.st),
-			    name);
-		}
+	oldwd = vfs_GetWd(parent, conn);
+	if (oldwd == NULL) {
+		goto done;
+	}
+	if (vfs_ChDir(conn, conn->connectpath) == -1) {
+		goto done;
+	}
+
+	if (SMB_VFS_STAT(conn, &smb_fname_parent) == -1) {
+		goto chdir_done;
+	}
+
+	notify_onelevel(conn->notify_ctx, action, filter,
+			SMB_VFS_FILE_ID_CREATE(conn, &smb_fname_parent.st),
+			name);
+chdir_done:
+	vfs_ChDir(conn, oldwd);
+done:
+	TALLOC_FREE(parent);
+}
+
+void notify_fname(connection_struct *conn, uint32 action, uint32 filter,
+		  const char *path)
+{
+	char *fullpath;
+
+	if (path[0] == '.' && path[1] == '/') {
+		path += 2;
 	}
+	notify_parent_dir(conn, action, filter, path);
 
 	fullpath = talloc_asprintf(talloc_tos(), "%s/%s", conn->connectpath,
 				   path);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list