Author: kalim
Date: 2005-07-25 05:30:40 +0000 (Mon, 25 Jul 2005)
New Revision: 8751

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

Log:
Added initialization stuff for libsmb
'cd' command updated

-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-07-25 04:39:20 UTC 
(rev 8750)
+++ branches/SOC/SAMBA_3_0/source/client/client.c       2005-07-25 05:30:40 UTC 
(rev 8751)
@@ -5,6 +5,7 @@
    Copyright (C) Simo Sorce               2001-2002
    Copyright (C) Jelmer Vernooij          2003
    Copyright (C) Gerald (Jerry) Carter    2004
+   Copyright (C) Kalim Moghul             2005
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -23,8 +24,10 @@
 
 #define NO_SYSLOG
 
-#include "includes.h"
+#include <includes.h>
+#include <libsmbclient.h>
 #include "client/client_proto.h"
+#include "client/get_auth_data_fn.h"
 #ifndef REGISTER
 #define REGISTER 0
 #endif
@@ -35,7 +38,7 @@
 extern BOOL in_client;
 static int port = 0;
 pstring cur_dir = "\\";
-static pstring cd_path = "";
+//static pstring cd_path = "";
 static pstring service;
 static pstring desthost;
 static pstring username;
@@ -258,33 +261,60 @@
        struct cli_state *targetcli;
        SMB_STRUCT_STAT sbuf;
        uint32 attributes;
+    int dh;
        int ret = 1;
-      
-       dos_format(newdir);
+    
+       unix_format(newdir);
 
        /* Save the current directory in case the new directory is invalid */
 
        pstrcpy(saved_dir, cur_dir);
 
-       if (*p == '\\')
+       if (*p == '/')
                pstrcpy(cur_dir,p);
        else
                pstrcat(cur_dir,p);
 
-       if (*(cur_dir+strlen(cur_dir)-1) != '\\') {
-               pstrcat(cur_dir, "\\");
+       if (*(cur_dir+strlen(cur_dir)-1) != '/') {
+               pstrcat(cur_dir, "/");
        }
        
-       dos_clean_name(cur_dir);
+    /*dos_clean_name(cur_dir);
        pstrcpy( dname, cur_dir );
        pstrcat(cur_dir,"\\");
-       dos_clean_name(cur_dir);
-       
-       if ( !cli_resolve_path( "", cli, dname, &targetcli, targetpath ) ) {
+       dos_clean_name(cur_dir);*/
+    
+    
+    /* TODO: cleanup debugging print statements*/
+    /*d_printf("service: %s\n", service);
+    d_printf("desthost: %s\n", desthost);
+    d_printf("username: %s\n", username);
+    d_printf("calling_name: %s\n", calling_name);
+    d_printf("cur_dir: %s\n", cur_dir);*/
+
+    /* Format the directory in a libmsmbclient friendly way */    
+    unix_clean_name(cur_dir);
+       pstrcpy( dname, cur_dir );    
+    pstrcpy(targetpath, "smb:");
+    pstrcat(targetpath, service);
+       pstrcat(targetpath, dname);
+    unix_format(targetpath);
+    /*d_printf("Saved: %s\n", cur_dir);
+    d_printf("Result: %s\n", targetpath);*/
+    
+       /*if ( !cli_resolve_path( "", cli, dname, &targetcli, targetpath ) ) {
                d_printf("cd %s: %s\n", dname, cli_errstr(cli));
                pstrcpy(cur_dir,saved_dir);
                goto out;
-       }
+       }*/
+    dh = smbc_opendir(targetpath);
+    if (dh < 0)
+    {
+        d_printf("%s changing to directory %s\n", strerror(errno), cur_dir);
+        pstrcpy(cur_dir, saved_dir);
+        return 1;
+    }
+    smbc_closedir(dh);
 
        
        if ( strequal(targetpath,"\\" ) )
@@ -292,7 +322,7 @@
                
        /* use a trans2_qpathinfo to test directories for modern servers */
        
-       if ( targetcli->protocol >= PROTOCOL_LANMAN2 ) {
+       /*if ( targetcli->protocol >= PROTOCOL_LANMAN2 ) {
                if ( !cli_qpathinfo_basic( targetcli, targetpath, &sbuf, 
&attributes ) ) {
                        d_printf("cd %s: %s\n", dname, cli_errstr(targetcli));
                        pstrcpy(cur_dir,saved_dir);
@@ -313,13 +343,11 @@
                        pstrcpy(cur_dir,saved_dir);
                        goto out;
                }
-       }
+       }*/
 
        ret = 0;
 
 out:
-       
-       pstrcpy(cd_path,cur_dir);
        return ret;
 }
 
@@ -2427,7 +2455,6 @@
        
        if (next_token_nr(NULL,buf,NULL,sizeof(buf)))
                chdir(buf);
-    d_printf("Local directory now %s\n", sys_getwd(d));
        DEBUG(2,("the local directory is now %s\n",sys_getwd(d)));
 
        return 0;
@@ -2714,6 +2741,8 @@
   {"history",cmd_history,"displays the command 
history",{COMPL_NONE,COMPL_NONE}},
   {"lcd",cmd_lcd,"[directory] change/report the local current working 
directory",{COMPL_LOCAL,COMPL_NONE}},
   {"link",cmd_link,"<oldname> <newname> create a UNIX hard 
link",{COMPL_REMOTE,COMPL_REMOTE}},
+  {"listconnect",cmd_list_connect,"list open 
connections",{COMPL_NONE,COMPL_NONE}},
+  {"logon",cmd_logon,"establish new logon",{COMPL_NONE,COMPL_NONE}},
   {"lowercase",cmd_lowercase,"toggle lowercasing of filenames for 
get",{COMPL_NONE,COMPL_NONE}},  
   {"ls",cmd_dir,"<mask> list the contents of the current 
directory",{COMPL_REMOTE,COMPL_NONE}},
   {"mask",cmd_select,"<mask> mask all filenames against 
this",{COMPL_REMOTE,COMPL_NONE}},
@@ -2739,6 +2768,7 @@
   {"rm",cmd_del,"<mask> delete all matching files",{COMPL_REMOTE,COMPL_NONE}},
   {"rmdir",cmd_rmdir,"<directory> remove a directory",{COMPL_NONE,COMPL_NONE}},
   {"setmode",cmd_setmode,"filename <setmode string> change modes of 
file",{COMPL_REMOTE,COMPL_NONE}},
+  {"showconnect",cmd_show_connect,"display the current active 
connection",{COMPL_NONE,COMPL_NONE}},
   {"stat",cmd_stat,"filename Do a UNIX extensions stat call on a 
file",{COMPL_REMOTE,COMPL_REMOTE}},
   {"symlink",cmd_symlink,"<oldname> <newname> create a UNIX 
symlink",{COMPL_REMOTE,COMPL_REMOTE}},
   {"tar",cmd_tar,"tar <c|x>[IXFqbgNan] current directory to/from <file 
name>",{COMPL_NONE,COMPL_NONE}},
@@ -2746,9 +2776,6 @@
   {"translate",cmd_translate,"toggle text translation for 
printing",{COMPL_NONE,COMPL_NONE}},
   {"volume",cmd_volume,"print the volume name",{COMPL_NONE,COMPL_NONE}},
   {"vuid",cmd_vuid,"change current vuid",{COMPL_NONE,COMPL_NONE}},
-  {"logon",cmd_logon,"establish new logon",{COMPL_NONE,COMPL_NONE}},
-  {"listconnect",cmd_list_connect,"list open 
connections",{COMPL_NONE,COMPL_NONE}},
-  {"showconnect",cmd_show_connect,"display the current active 
connection",{COMPL_NONE,COMPL_NONE}},
   
   /* Yes, this must be here, see crh's comment above. */
   {"!",NULL,"run a shell command on the local system",{COMPL_NONE,COMPL_NONE}},
@@ -2766,7 +2793,7 @@
        int cmd=0;
        int tok_len = strlen(tok);
        
-       while (commands[i].fn != NULL) {
+       while ((commands[i].fn != NULL) || (strequal(commands[i].name, "!"))) {
                if (strequal(commands[i].name,tok)) {
                        matches = 1;
                        cmd = i;
@@ -3103,9 +3130,11 @@
                int i;
                
                /* display a prompt */
-               slprintf(the_prompt, sizeof(the_prompt)-1, "smb: %s> ", 
cur_dir);
-               cline = smb_readline(the_prompt, readline_callback, 
completion_fn);
-                       
+               slprintf(the_prompt, sizeof(the_prompt)-1, "smb: %s> ", 
cur_dir);        
+               /* Removed callback since we don't need to swallow keepalives 
with libsmbclient */
+        /*cline = smb_readline(the_prompt, readline_callback, completion_fn);*/
+        cline = smb_readline(the_prompt, NULL, completion_fn);
+        
                if (!cline) break;
                
                pstrcpy(line, cline);
@@ -3115,7 +3144,7 @@
                        system(line + 1);
                        continue;
                }
-      
+        
                /* and get the first part of the command */
                ptr = line;
                if (!next_token_nr(&ptr,tok,NULL,sizeof(tok))) continue;
@@ -3139,18 +3168,31 @@
 {
        int rc = 0;
 
-       cli = cli_cm_open(desthost, service, True);
-       if (!cli) {
+    /*cli = cli_cm_open(desthost, service, True);
+    if (!cli) {
                return 1;
-       }
-
-       if (*base_directory) {
+       }*/
+    /* FIXME: get_auth_datafn should turn local echo off for passwords, cf. 
smbwrapper */
+    rc = smbc_init(get_auth_data_fn, 0);   /* Initialize libsmbclient */
+    if (rc < 0)
+    {
+        d_printf("Error initializing libsmbclient: %s\n", strerror(errno));
+        return 1;
+    }
+    
+    if (*base_directory) {
                rc = do_cd(base_directory);
                if (rc) {
-                       cli_cm_shutdown();
+                       /*cli_cm_shutdown();*/
                        return rc;
                }
        }
+    else    /* start the auth fn*/
+    {
+        rc = do_cd("/");
+        if (rc)
+            return rc;
+    }
        
        if (cmdstr) {
                rc = process_command_string(cmdstr);

Reply via email to