1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

s3: Fix bug 7338, smbget skips leading slash when using a custom outputfile

This commit is contained in:
Volker Lendecke 2010-07-04 11:32:50 +02:00
parent 285176cbc9
commit 9e3fc22c60

View File

@ -49,7 +49,8 @@ static const char *username = NULL, *password = NULL, *workgroup = NULL;
static int nonprompt = 0, quiet = 0, dots = 0, keep_permissions = 0, verbose = 0, send_stdout = 0;
static int blocksize = SMB_DEFAULT_BLOCKSIZE;
static int smb_download_file(const char *base, const char *name, int recursive, int resume, char *outfile);
static int smb_download_file(const char *base, const char *name, int recursive,
int resume, int toplevel, char *outfile);
static int get_num_cols(void)
{
@ -135,7 +136,10 @@ static int smb_download_dir(const char *base, const char *name, int resume)
/* List files in directory and call smb_download_file on them */
dirhandle = smbc_opendir(path);
if(dirhandle < 1) {
if(errno == ENOTDIR) return smb_download_file(base, name, 1, resume, NULL);
if (errno == ENOTDIR) {
return smb_download_file(base, name, 1, resume,
0, NULL);
}
fprintf(stderr, "Can't open directory %s: %s\n", path, strerror(errno));
return 1;
}
@ -165,7 +169,8 @@ static int smb_download_dir(const char *base, const char *name, int resume)
break;
case SMBC_FILE:
ret = smb_download_file(base, newname, 1, resume, NULL);
ret = smb_download_file(base, newname, 1, resume, 0,
NULL);
break;
case SMBC_FILE_SHARE:
@ -266,7 +271,9 @@ static void print_progress(const char *name, time_t start, time_t now, off_t sta
/* Return 1 on error, 0 on success. */
static int smb_download_file(const char *base, const char *name, int recursive, int resume, char *outfile) {
static int smb_download_file(const char *base, const char *name, int recursive,
int resume, int toplevel, char *outfile)
{
int remotehandle, localhandle;
time_t start_time = time(NULL);
const char *newpath;
@ -322,7 +329,9 @@ static int smb_download_file(const char *base, const char *name, int recursive,
if(newpath)newpath++; else newpath = base;
} else newpath = name;
if(newpath[0] == '/')newpath++;
if (!toplevel && (newpath[0] == '/')) {
newpath++;
}
/* Open local file according to the mode */
if(update) {
@ -659,7 +668,8 @@ int main(int argc, const char **argv)
while ( (file = poptGetArg(pc)) ) {
if (!recursive)
ret = smb_download_file(file, "", recursive, resume, outputfile);
ret = smb_download_file(file, "", recursive, resume,
1, outputfile);
else
ret = smb_download_dir(file, "", resume);
}