summaryrefslogtreecommitdiff
path: root/source3/modules/vfs_scannedonly.c
diff options
context:
space:
mode:
authorolivier <olivier@virtscano.fakenet>2010-08-03 00:20:11 +0200
committerVolker Lendecke <vl@samba.org>2010-08-03 17:07:56 +0200
commit72cd5bcd58a2c85ba7257dfcfca61af3ddc1f590 (patch)
tree4b437b90bf7c3ca45c070e8c42343202d71ad581 /source3/modules/vfs_scannedonly.c
parent64b26affe0afa2999130cdd4f1d521dccd877c9c (diff)
downloadsamba-72cd5bcd58a2c85ba7257dfcfca61af3ddc1f590.tar.gz
samba-72cd5bcd58a2c85ba7257dfcfca61af3ddc1f590.tar.bz2
samba-72cd5bcd58a2c85ba7257dfcfca61af3ddc1f590.zip
make scannedonly notify the scanner if no .scanned: file was found during rename
Diffstat (limited to 'source3/modules/vfs_scannedonly.c')
-rw-r--r--source3/modules/vfs_scannedonly.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/source3/modules/vfs_scannedonly.c b/source3/modules/vfs_scannedonly.c
index 679ecc87df..b76bef41b4 100644
--- a/source3/modules/vfs_scannedonly.c
+++ b/source3/modules/vfs_scannedonly.c
@@ -1,7 +1,7 @@
/*
* scannedonly VFS module for Samba 3.5
*
- * Copyright 2007,2008,2009 (C) Olivier Sessink
+ * Copyright 2007,2008,2009,2010 (C) Olivier Sessink
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -766,6 +766,8 @@ static int scannedonly_rename(vfs_handle_struct * handle,
struct smb_filename *smb_fname_src_tmp = NULL;
struct smb_filename *smb_fname_dst_tmp = NULL;
char *cachefile_src, *cachefile_dst;
+ bool needscandst=false;
+ int ret;
TALLOC_CTX *ctx = talloc_tos();
/* Setup temporary smb_filename structs. */
@@ -777,19 +779,26 @@ static int scannedonly_rename(vfs_handle_struct * handle,
ctx,
smb_fname_dst->base_name,
STRUCTSCANO(handle->data)->p_scanned);
-
create_synthetic_smb_fname(ctx, cachefile_src,NULL,NULL,
&smb_fname_src_tmp);
create_synthetic_smb_fname(ctx, cachefile_dst,NULL,NULL,
&smb_fname_dst_tmp);
- if (SMB_VFS_NEXT_RENAME(handle, smb_fname_src_tmp, smb_fname_dst_tmp)
- != 0) {
+ ret = SMB_VFS_NEXT_RENAME(handle, smb_fname_src_tmp, smb_fname_dst_tmp);
+ if (ret == ENOENT) {
+ needscandst=true;
+ } else if (ret != 0) {
DEBUG(SCANNEDONLY_DEBUG,
- ("failed to rename %s into %s\n", cachefile_src,
- cachefile_dst));
+ ("failed to rename %s into %s error %d: %s\n", cachefile_src,
+ cachefile_dst, ret, strerror(ret)));
+ needscandst=true;
}
- return SMB_VFS_NEXT_RENAME(handle, smb_fname_src, smb_fname_dst);
+ ret = SMB_VFS_NEXT_RENAME(handle, smb_fname_src, smb_fname_dst);
+ if (ret == 0 && needscandst) {
+ notify_scanner(handle, smb_fname_dst->base_name);
+ flush_sendbuffer(handle);
+ }
+ return ret;
}
static int scannedonly_unlink(vfs_handle_struct * handle,