The branch, v4-9-test has been updated
       via  41889196769 s3:utils/smbget fix recursive download with empty 
source directories
       via  b9a1a179e62 s3:utils/smbget add error handling for mkdir() calls
       via  a5c8e943d34 s3:script/tests reduce code duplication
      from  2c51c8f8ac1 VERISON: Bump version up to 4.9.5...

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-9-test


- Log -----------------------------------------------------------------
commit 41889196769973e879657df2bf36cce6ea86eeb8
Author: Christian Ambach <a...@samba.org>
Date:   Tue Oct 23 20:05:04 2018 +0200

    s3:utils/smbget fix recursive download with empty source directories
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=13199
    Signed-off-by: Christian Ambach <a...@samba.org>
    Reviewed-by: Andreas Schneider <a...@samba.org>
    
    Autobuild-User(master): Andreas Schneider <a...@cryptomilk.org>
    Autobuild-Date(master): Fri Oct 26 09:58:07 CEST 2018 on sn-devel-144
    
    (cherry picked from commit fce0d1b290c7a2205f2454b268b55909d1044f1b)
    
    Autobuild-User(v4-9-test): Karolin Seeger <ksee...@samba.org>
    Autobuild-Date(v4-9-test): Mon Jan  7 14:23:36 CET 2019 on sn-devel-144

commit b9a1a179e62b14e3831fbd12a50df0c52b8d372d
Author: Christian Ambach <a...@samba.org>
Date:   Mon Oct 22 16:28:21 2018 +0200

    s3:utils/smbget add error handling for mkdir() calls
    
    Signed-off-by: Christian Ambach <a...@samba.org>
    Reviewed-by: Andreas Schneider <a...@samba.org>
    (cherry picked from commit b89732c31be350828110fe46f2c655f77cb488f3)

commit a5c8e943d34e0118ab0f98cb3ae77a8333e4fd92
Author: Christian Ambach <a...@samba.org>
Date:   Mon Oct 22 16:22:00 2018 +0200

    s3:script/tests reduce code duplication
    
    Signed-off-by: Christian Ambach <a...@samba.org>
    Reviewed-by: Andreas Schneider <a...@samba.org>
    (cherry picked from commit 525b19fafb43bd97e3dfc1d3e7dc13955c0f387f)

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

Summary of changes:
 source3/script/tests/test_smbget.sh | 86 ++++++++++++++++++++++++++++++++-----
 source3/utils/smbget.c              | 11 ++++-
 2 files changed, 85 insertions(+), 12 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/script/tests/test_smbget.sh 
b/source3/script/tests/test_smbget.sh
index f21a131f840..b0ff75f5eb5 100755
--- a/source3/script/tests/test_smbget.sh
+++ b/source3/script/tests/test_smbget.sh
@@ -37,15 +37,18 @@ create_test_data()
 
 remove_test_data()
 {
-       rm -rf dir1 dir2 testfile
        pushd $WORKDIR
        rm -rf dir1 dir2 testfile
        popd
 }
 
+clear_download_area() {
+       rm -rf dir1 dir2 testfile dir001 dir004
+}
+
 test_singlefile_guest()
 {
-       [ -e testfile ] && rm testfile
+       clear_download_area
        echo "$SMBGET -v -a smb://$SERVER_IP/smbget/testfile"
        $SMBGET -v -a smb://$SERVER_IP/smbget/testfile
        if [ $? -ne 0 ]; then
@@ -62,7 +65,7 @@ test_singlefile_guest()
 
 test_singlefile_U()
 {
-       [ -e testfile ] && rm testfile
+       clear_download_area
        $SMBGET -v -U$USERNAME%$PASSWORD smb://$SERVER_IP/smbget/testfile
        if [ $? -ne 0 ]; then
                echo 'ERROR: RC does not match, expected: 0'
@@ -78,7 +81,7 @@ test_singlefile_U()
 
 test_singlefile_smburl()
 {
-       [ -e testfile ] && rm testfile
+       clear_download_area
        $SMBGET -w $DOMAIN smb://$USERNAME:$PASSWORD@$SERVER_IP/smbget/testfile
        if [ $? -ne 0 ]; then
                echo 'ERROR: RC does not match, expected: 0'
@@ -94,7 +97,7 @@ test_singlefile_smburl()
 
 test_singlefile_rcfile()
 {
-       [ -e testfile ] && rm testfile
+       clear_download_area
        echo "user $USERNAME%$PASSWORD" > $TMPDIR/rcfile
        $SMBGET -vn -f $TMPDIR/rcfile smb://$SERVER_IP/smbget/testfile
        rc=$?
@@ -113,9 +116,28 @@ test_singlefile_rcfile()
 
 test_recursive_U()
 {
-       [ -e testfile ] && rm testfile
-       [ -d dir1 ] && rm -rf dir1
-       [ -d dir2 ] && rm -rf dir2
+       clear_download_area
+       $SMBGET -v -R -U$USERNAME%$PASSWORD smb://$SERVER_IP/smbget/
+       if [ $? -ne 0 ]; then
+               echo 'ERROR: RC does not match, expected: 0'
+               return 1
+       fi
+
+       cmp --silent $WORKDIR/testfile ./testfile && \
+       cmp --silent $WORKDIR/dir1/testfile1 ./dir1/testfile1 && \
+       cmp --silent $WORKDIR/dir2/testfile2 ./dir2/testfile2
+       if [ $? -ne 0 ]; then
+               echo 'ERROR: file content does not match'
+               return 1
+       fi
+
+       return 0
+}
+
+test_recursive_existing_dir()
+{
+       clear_download_area
+       mkdir dir1
        $SMBGET -v -R -U$USERNAME%$PASSWORD smb://$SERVER_IP/smbget/
        if [ $? -ne 0 ]; then
                echo 'ERROR: RC does not match, expected: 0'
@@ -133,9 +155,42 @@ test_recursive_U()
        return 0
 }
 
+
+test_recursive_with_empty() # see Bug 13199
+{
+       clear_download_area
+       # create some additional empty directories
+       mkdir -p $WORKDIR/dir001/dir002/dir003
+       mkdir -p $WORKDIR/dir004/dir005/dir006
+       $SMBGET -v -R -U$USERNAME%$PASSWORD smb://$SERVER_IP/smbget/
+       rc=$?
+       rm -rf $WORKDIR/dir001
+       rm -rf $WORKDIR/dir004
+       if [ $rc -ne 0 ]; then
+               echo 'ERROR: RC does not match, expected: 0'
+               return 1
+       fi
+
+       cmp --silent $WORKDIR/testfile ./testfile && \
+       cmp --silent $WORKDIR/dir1/testfile1 ./dir1/testfile1 && \
+       cmp --silent $WORKDIR/dir2/testfile2 ./dir2/testfile2
+       if [ $? -ne 0 ]; then
+               echo 'ERROR: file content does not match'
+               return 1
+       fi
+
+       if [ ! -d dir001/dir002/dir003 ] || [ ! -d dir004/dir005/dir006 ]; then
+               echo 'ERROR: empty directories are not present'
+               return 1
+       fi
+
+       return 0
+}
+
+
 test_resume()
 {
-       [ -e testfile ] && rm testfile
+       clear_download_area
        cp $WORKDIR/testfile .
        truncate -s 1024 testfile
        $SMBGET -v -r -U$USERNAME%$PASSWORD smb://$SERVER_IP/smbget/testfile
@@ -155,6 +210,7 @@ test_resume()
 
 test_resume_modified()
 {
+       clear_download_area
        dd if=/dev/urandom bs=1024 count=2 of=testfile
        $SMBGET -v -r -U$USERNAME%$PASSWORD smb://$SERVER_IP/smbget/testfile
        if [ $? -ne 1 ]; then
@@ -167,7 +223,7 @@ test_resume_modified()
 
 test_update()
 {
-       [ -e testfile ] && rm testfile
+       clear_download_area
        $SMBGET -v -U$USERNAME%$PASSWORD smb://$SERVER_IP/smbget/testfile
        if [ $? -ne 0 ]; then
                echo 'ERROR: RC does not match, expected: 0'
@@ -220,6 +276,12 @@ testit "download single file with rcfile" 
test_singlefile_rcfile \
 testit "recursive download" test_recursive_U \
        || failed=`expr $failed + 1`
 
+testit "recursive download (existing target dir)" test_recursive_existing_dir \
+       || failed=`expr $failed + 1`
+
+testit "recursive download with empty directories" test_recursive_with_empty \
+       || failed=`expr $failed + 1`
+
 testit "resume download" test_resume \
        || failed=`expr $failed + 1`
 
@@ -229,7 +291,9 @@ testit "resume download (modified file)" 
test_resume_modified \
 testit "update" test_update \
        || failed=`expr $failed + 1`
 
-popd
+clear_download_area
+
+popd # TMPDIR
 
 remove_test_data
 
diff --git a/source3/utils/smbget.c b/source3/utils/smbget.c
index 4653c6894e0..49cca4efa2a 100644
--- a/source3/utils/smbget.c
+++ b/source3/utils/smbget.c
@@ -190,13 +190,22 @@ static bool smb_download_dir(const char *base, const char 
*name, int resume)
        while (*relname == '/') {
                relname++;
        }
-       mkdir(relname, 0755);
+
+       if (strlen(relname) > 0) {
+               int rc = mkdir(relname, 0755);
+               if (rc == -1 && errno != EEXIST) {
+                       fprintf(stderr, "Can't create directory %s: %s\n",
+                               relname, strerror(errno));
+                       return false;
+               }
+       }
 
        tmpname = SMB_STRDUP(name);
 
        while ((dirent = smbc_readdir(dirhandle))) {
                char *newname;
                if (!strcmp(dirent->name, ".") || !strcmp(dirent->name, "..")) {
+                       ok = true;
                        continue;
                }
                if (asprintf(&newname, "%s/%s", tmpname, dirent->name) == -1) {


-- 
Samba Shared Repository

Reply via email to