diff options
author | olivier <olivier@virtscano.fakenet> | 2010-08-03 00:20:11 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2010-08-03 17:07:56 +0200 |
commit | 72cd5bcd58a2c85ba7257dfcfca61af3ddc1f590 (patch) | |
tree | 4b437b90bf7c3ca45c070e8c42343202d71ad581 /source3/modules | |
parent | 64b26affe0afa2999130cdd4f1d521dccd877c9c (diff) | |
download | samba-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')
-rw-r--r-- | source3/modules/vfs_scannedonly.c | 23 |
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, |