[SCM] Samba Shared Repository - branch v3-5-test updated
Karolin Seeger
kseeger at samba.org
Sun Jun 17 13:06:48 MDT 2012
The branch, v3-5-test has been updated
via dfa5366 Fix for bug #8998 - Notify code can miss a ChDir.
from c615d8e Fix bug #8994 - winbind normalize names.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-test
- Log -----------------------------------------------------------------
commit dfa5366a6ee418d6292c1832520c0c1bd974af49
Author: Volker Lendecke <Volker.Lendecke at SerNet.DE>
Date: Thu Jun 14 12:07:33 2012 -0700
Fix for bug #8998 - Notify code can miss a ChDir.
-----------------------------------------------------------------------
Summary of changes:
source3/smbd/notify.c | 55 ++++++++++++++++++++++++++++++++++++------------
1 files changed, 41 insertions(+), 14 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c
index a53f3fb..1f664d0 100644
--- a/source3/smbd/notify.c
+++ b/source3/smbd/notify.c
@@ -366,28 +366,55 @@ 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)) {
+ DEBUG(1, ("Can't get parent dirname, giving up\n"));
+ 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) {
+ DEBUG(1, ("vfs_GetWd failed!\n"));
+ goto done;
+ }
+ if (vfs_ChDir(conn, conn->connectpath) == -1) {
+ DEBUG(1, ("Could not chdir to connect path!\n"));
+ 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 = NULL;
+
+ 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