summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Ambach <ambi@samba.org>2018-10-22 16:28:21 +0200
committerKarolin Seeger <kseeger@samba.org>2019-01-07 10:29:29 +0100
commit7aba48de14f133b23839dc831beb562005a448a5 (patch)
tree9ce7f2a4b4d98b03e292e95821761206930a9ec7
parent6058729541ae217c0c128c83925943f31eb60149 (diff)
downloadsamba-7aba48de14f133b23839dc831beb562005a448a5.tar.gz
s3:utils/smbget add error handling for mkdir() calls
Signed-off-by: Christian Ambach <ambi@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org> (cherry picked from commit b89732c31be350828110fe46f2c655f77cb488f3)
-rwxr-xr-xsource3/script/tests/test_smbget.sh24
-rw-r--r--source3/utils/smbget.c10
2 files changed, 33 insertions, 1 deletions
diff --git a/source3/script/tests/test_smbget.sh b/source3/script/tests/test_smbget.sh
index 05925f33a01..3f0aac53ad3 100755
--- a/source3/script/tests/test_smbget.sh
+++ b/source3/script/tests/test_smbget.sh
@@ -134,6 +134,27 @@ test_recursive_U()
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'
+ 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_resume()
{
clear_download_area
@@ -222,6 +243,9 @@ 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 "resume download" test_resume \
|| failed=`expr $failed + 1`
diff --git a/source3/utils/smbget.c b/source3/utils/smbget.c
index 4653c6894e0..ca4bf310466 100644
--- a/source3/utils/smbget.c
+++ b/source3/utils/smbget.c
@@ -190,7 +190,15 @@ 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);