r6348: Fix for bug #2605 reported by Daniel Patterson <Daniel_Patterson@national...
authorJeremy Allison <jra@samba.org>
Fri, 15 Apr 2005 00:39:03 +0000 (00:39 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:56:37 +0000 (10:56 -0500)
Ensure smbclient doesn't perform commands if the "chdir" fails in a scripted set.
Jeremy.
(This used to be commit 644608ea7db6d8d73a8c028a82cd0767ffe32af6)

source3/client/client.c

index 604bf0989a8f5cec5045bc36214bfab1af3126d5..be17488919df38f08ad368f97dca275a9dd678b3 100644 (file)
@@ -260,6 +260,7 @@ static int do_cd(char *newdir)
        struct cli_state *targetcli;
        SMB_STRUCT_STAT sbuf;
        uint32 attributes;
+       int ret = 1;
       
        dos_format(newdir);
 
@@ -305,21 +306,23 @@ static int do_cd(char *newdir)
                        pstrcpy(cur_dir,saved_dir);
                        goto out;
                }               
-       }
-       else {
+       } else {
                pstrcat( targetpath, "\\" );
                dos_clean_name( targetpath );
                
                if ( !cli_chkpath(targetcli, targetpath) ) {
                        d_printf("cd %s: %s\n", dname, cli_errstr(targetcli));
                        pstrcpy(cur_dir,saved_dir);
+                       goto out;
                }
        }
 
+       ret = 0;
+
 out:
+       
        pstrcpy(cd_path,cur_dir);
-
-       return 0;
+       return ret;
 }
 
 /****************************************************************************
@@ -3170,7 +3173,13 @@ static int process(char *base_directory)
                return 1;
        }
 
-       if (*base_directory) do_cd(base_directory);
+       if (*base_directory) {
+               rc = do_cd(base_directory);
+               if (rc) {
+                       cli_cm_shutdown();
+                       return rc;
+               }
+       }
        
        if (cmdstr) {
                rc = process_command_string(cmdstr);
@@ -3233,7 +3242,13 @@ static int do_tar_op(char *base_directory)
 
        recurse=True;
 
-       if (*base_directory) do_cd(base_directory);
+       if (*base_directory)  {
+               ret = do_cd(base_directory);
+               if (ret) {
+                       cli_cm_shutdown();
+                       return ret;
+               }
+       }
        
        ret=process_tar();