Author: kalim
Date: 2005-08-25 02:55:54 +0000 (Thu, 25 Aug 2005)
New Revision: 9605

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9605

Log:
Wrote the core of the 'put' command and enabled cmd_put.

-Kalim
Modified:
   branches/SOC/SAMBA_3_0/source/client/client.c


Changeset:
Modified: branches/SOC/SAMBA_3_0/source/client/client.c
===================================================================
--- branches/SOC/SAMBA_3_0/source/client/client.c       2005-08-25 02:33:08 UTC 
(rev 9604)
+++ branches/SOC/SAMBA_3_0/source/client/client.c       2005-08-25 02:55:54 UTC 
(rev 9605)
@@ -933,6 +933,7 @@
         if (newhandle)
             close(handle);
         smbc_close(fnum);
+        SAFE_FREE(data);
         return 1;
     }
        while (1) {
@@ -944,6 +945,7 @@
             if (newhandle)
                 close(handle);
             smbc_close(fnum);
+            SAFE_FREE(data);
                        return 1;
         }
         if (n == 0)
@@ -1315,33 +1317,27 @@
        int maxwrite = io_bufsize;
        int rc = 0;
        struct timeval tp_start;
-       struct cli_state *targetcli;
-       pstring targetname;
+    struct stat stat;
        
-       if ( !cli_resolve_path( "", cli, rname, &targetcli, targetname ) ) {
-               d_printf("Failed to open %s: %s\n", rname, cli_errstr(cli));
-               return 1;
-       }
-       
        GetTimeOfDay(&tp_start);
 
        if (reput) {
-               fnum = cli_open(targetcli, targetname, O_RDWR|O_CREAT, 
DENY_NONE);
-               if (fnum >= 0) {
-                       if (!cli_qfileinfo(targetcli, fnum, NULL, &start, NULL, 
NULL, NULL, NULL, NULL) &&
-                           !cli_getattrE(targetcli, fnum, NULL, &start, NULL, 
NULL, NULL)) {
-                               d_printf("getattrib: %s\n",cli_errstr(cli));
-                               return 1;
-                       }
-               }
+        fnum = smbc_open(rname, O_RDWR|O_CREAT, 0644);
+        if (fnum < 0)
+        {
+            d_printf("%s opening remote file %s\n", strerror(errno), rname);
+            return 1;
+        }
+        if (smbc_fstat(fnum, &stat) < 0)
+        {
+            d_printf("%s trying to stat remote file %s\n", strerror(errno), 
rname);
+            smbc_close(fnum);
+            return 1;
+        }
+        start = stat.st_size;
        } else {
-               fnum = cli_open(targetcli, targetname, O_RDWR|O_CREAT|O_TRUNC, 
DENY_NONE);
+        fnum = smbc_creat(rname, 0644);
        }
-  
-       if (fnum == -1) {
-               d_printf("%s opening remote file 
%s\n",cli_errstr(targetcli),rname);
-               return 1;
-       }
 
        /* allow files to be piped into smbclient
           jdblair 24.jun.98
@@ -1356,6 +1352,8 @@
                if (f && reput) {
                        if (x_tseek(f, start, SEEK_SET) == -1) {
                                d_printf("Error seeking local file\n");
+                smbc_close(fnum);
+                x_fclose(f);
                                return 1;
                        }
                }
@@ -1363,17 +1361,30 @@
 
        if (!f) {
                d_printf("Error opening local file %s\n",lname);
+        smbc_close(fnum);
                return 1;
        }
   
-       DEBUG(1,("putting file %s as %s ",lname,
-                rname));
+       DEBUG(1,("putting file %s as %s ",lname,rname));
   
        buf = (char *)SMB_MALLOC(maxwrite);
        if (!buf) {
                d_printf("ERROR: Not enough memory!\n");
+        smbc_close(fnum);
+        if (f != x_stdin)
+            x_fclose(f);
                return 1;
        }
+    
+    if (smbc_lseek(fnum, start, SEEK_SET) < 0)
+    {
+        d_printf("%s trying to lseek remote file %s\n", strerror(errno), 
rname);
+        if (f != x_stdin)
+            x_fclose(f);
+        smbc_close(fnum);
+        SAFE_FREE(buf);
+        return 1;
+    }
        while (!x_feof(f)) {
                int n = maxwrite;
                int ret;
@@ -1387,10 +1398,10 @@
                        break;
                }
 
-               ret = cli_write(targetcli, fnum, 0, buf, nread + start, n);
+        ret = smbc_write(fnum, buf, n);
 
                if (n != ret) {
-                       d_printf("Error writing file: %s\n", cli_errstr(cli));
+                       d_printf("Error writing file: %s\n", strerror(errno));
                        rc = 1;
                        break;
                } 
@@ -1398,9 +1409,10 @@
                nread += n;
        }
 
-       if (!cli_close(targetcli, fnum)) {
-               d_printf("%s closing remote file %s\n",cli_errstr(cli),rname);
-               x_fclose(f);
+       if (smbc_close(fnum) < 0) {
+               d_printf("%s closing remote file %s\n",strerror(errno),rname);
+        if (f != x_stdin)
+            x_fclose(f);
                SAFE_FREE(buf);
                return 1;
        }
@@ -1447,8 +1459,9 @@
        pstring buf;
        char *p=buf;
        
-       pstrcpy(rname,cur_dir);
-       pstrcat(rname,"/");
+    pstrcpy(rname, "smb:");
+    pstrcat(rname, service);
+       pstrcat(rname, cur_dir);
   
        if (!next_token_nr(NULL,p,NULL,sizeof(buf))) {
                d_printf("put <filename>\n");
@@ -1461,8 +1474,6 @@
        else
                pstrcat(rname,lname);
        
-       dos_clean_name(rname);
-
        {
                SMB_STRUCT_STAT st;
                /* allow '-' to represent stdin
@@ -1474,6 +1485,7 @@
                }
        }
 
+    /*d_printf("lname: %s, rname: %s\n", lname, rname);*/
        return do_put(rname, lname, False);
 }
 
@@ -2899,7 +2911,7 @@
 /*   {"open",cmd_open,"<mask> open a file",{COMPL_REMOTE,COMPL_NONE}}, */
 /*   {"print",cmd_print,"<file name> print a file",{COMPL_NONE,COMPL_NONE}}, */
   {"prompt",cmd_prompt,"toggle prompting for filenames for mget and 
mput",{COMPL_NONE,COMPL_NONE}},  
-/*   {"put",cmd_put,"<local name> [remote name] put a 
file",{COMPL_LOCAL,COMPL_REMOTE}}, */
+  {"put",cmd_put,"<local name> [remote name] put a 
file",{COMPL_LOCAL,COMPL_REMOTE}},
   {"pwd",cmd_pwd,"show current remote directory (same as 'cd' with no 
args)",{COMPL_NONE,COMPL_NONE}},
   {"q",cmd_quit,"logoff the server",{COMPL_NONE,COMPL_NONE}},
 /*   {"queue",cmd_queue,"show the print queue",{COMPL_NONE,COMPL_NONE}}, */
@@ -3326,7 +3338,7 @@
     if (*base_directory) {
                rc = do_cd(base_directory);
                if (rc) {
-                       /*cli_cm_shutdown();*/
+                       cli_cm_shutdown();
                        return rc;
                }
        }

Reply via email to