Enlightenment CVS committal

Author  : chaos
Project : e17
Module  : apps/evfs

Dir     : e17/apps/evfs/src/plugins/file


Modified Files:
        evfs_fs_posix.c evfs_fs_samba.c evfs_fs_sftp.c evfs_fs_tar.c 
        evfs_fs_vfolder.c 


Log Message:
* Handle auth requests/responses

===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/plugins/file/evfs_fs_posix.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- evfs_fs_posix.c     25 Jul 2007 17:00:54 -0000      1.9
+++ evfs_fs_posix.c     13 Aug 2007 03:05:21 -0000      1.10
@@ -57,7 +57,7 @@
 int evfs_file_write(evfs_filereference * file, char *bytes, long size);
 int evfs_file_create(evfs_filereference * file);
 int evfs_file_mkdir(evfs_filereference * file);
-void evfs_dir_list(evfs_client * client, evfs_filereference* ref,
+void evfs_dir_list(evfs_client * client, evfs_command* command,
                    Ecore_List ** directory_list);
 
         /*Internal functions */
@@ -507,7 +507,7 @@
 }
 
 void
-evfs_dir_list(evfs_client * client, evfs_filereference* file,
+evfs_dir_list(evfs_client * client, evfs_command* command,
               Ecore_List ** directory_list)
 {
    struct dirent *de;
@@ -515,6 +515,8 @@
    DIR *dir;
    Ecore_List *files = ecore_list_new();
    char full_name[PATH_MAX];
+
+   evfs_filereference* file = command->file_command.files[0];
 
    dir = opendir(file->path);
    while ((de = readdir(dir)))
===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/plugins/file/evfs_fs_samba.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- evfs_fs_samba.c     11 Aug 2007 10:39:03 -0000      1.14
+++ evfs_fs_samba.c     13 Aug 2007 03:05:22 -0000      1.15
@@ -49,10 +49,12 @@
 static SMBCCTX *smb_context = NULL;
 Ecore_List *auth_cache;
 
+Ecore_List* auth_command_list;
+
 int smb_next_fd;
 Ecore_Hash *smb_fd_hash;
 
-static void smb_evfs_dir_list(evfs_client * client, evfs_filereference* 
command,
+static void smb_evfs_dir_list(evfs_client * client, evfs_command* command,
                               Ecore_List ** directory_list);
 int smb_evfs_file_stat(evfs_command * command, struct stat *file_stat, int);
 int evfs_file_open(evfs_client * client, evfs_filereference * file);
@@ -65,6 +67,8 @@
 int smb_evfs_file_rename(evfs_client* client, evfs_command* command);
 int smb_evfs_file_mkdir(evfs_filereference * file);
 int evfs_file_remove(char *file);
+void
+evfs_auth_push(evfs_command* command);
 
 int
 evfs_client_disconnect(evfs_client * client)
@@ -73,6 +77,53 @@
           client->id);*/
 }
 
+typedef struct {
+       evfs_command* command;
+       evfs_client* client;
+} smb_auth_struct;
+
+smb_auth_struct* evfs_smb_auth_top_get()
+{
+       smb_auth_struct* as = NULL;
+       
+       if (ecore_list_count(auth_command_list) >0) {            
+               ecore_list_first_goto(auth_command_list);
+               as = ecore_list_current(auth_command_list);
+               printf("Request for top auth item (count %d): com: %p, cli: 
%p\n",ecore_list_count(auth_command_list), as->command, as->client);
+               return ecore_list_current(auth_command_list);
+       }
+
+       return NULL;
+}
+
+void evfs_smb_auth_push(evfs_command* command, evfs_client* client)
+{
+       smb_auth_struct* as = NEW(smb_auth_struct);
+       as->command = command;
+       as->client = client;
+       ecore_list_prepend(auth_command_list, as);
+
+       printf("Pushed comm: %p, cli: %p to stack\n", command, client);
+}
+
+void evfs_smb_auth_pop(evfs_command* command)
+{
+       smb_auth_struct* it;
+       ecore_list_first_goto(auth_command_list);
+
+       while ( (it=ecore_list_next(auth_command_list))) {
+               if (it->command = command) {
+                       printf("Popped comm: %p, cli: %p from stack\n", 
it->command, it->client);       
+                       
+                       ecore_list_first_remove(auth_command_list);
+                       free(it);                       
+                       return;
+               }
+       }
+       
+       printf("EVFS_SMB: error: Could not find command in auth list\n");
+}
+
 void
 evfs_auth_structure_add(Ecore_List * cache, char *username, char *password,
                         char *path)
@@ -159,9 +210,19 @@
      } else {
             /*Otherwise - fail - ask user -try again - TODO
              */
+            /*strcpy(username, "anonymous");
+            strcpy(password, "anonymous");*/
 
-            strcpy(username, "anonymous");
-            strcpy(password, "anonymous");
+            /*Don't auth for ADMIN shares*/
+            if (!strstr(share, "$")) {
+                    printf("Sending auth request to client...\n");
+                    smb_auth_struct* as = evfs_smb_auth_top_get();
+                    if (as) {
+                            
evfs_auth_failure_event_create(as->client,as->command);
+                    } else {
+                            printf("No command to request auth for in 
stack.\n");
+                    }
+            }
      }
 
 }
@@ -191,12 +252,16 @@
 
    functions->evfs_file_mkdir = &smb_evfs_file_mkdir;
    functions->evfs_file_remove = &evfs_file_remove;
+   functions->evfs_auth_push = &evfs_auth_push;
+   
    printf("Samba stat func at '%p'\n", &smb_evfs_file_stat);
 
    auth_cache = ecore_list_new();
    smb_fd_hash = ecore_hash_new(ecore_direct_hash, ecore_direct_compare);
    smb_next_fd = 0;
 
+   auth_command_list = ecore_list_new();
+
    smb_context = smbc_new_context();
    if (smb_context != NULL)
      {
@@ -220,17 +285,28 @@
    return "smb";
 }
 
+void
+evfs_auth_push(evfs_command* command)
+{
+       evfs_auth_structure_add(auth_cache, 
command->file_command.files[0]->username, 
+                       command->file_command.files[0]->password,
+                       command->file_command.files[0]->path);
+}
+
 int 
 smb_evfs_file_rename(evfs_client* client, evfs_command* command)
 {
        int err;
 
+       evfs_smb_auth_push(command, client);
+
        /*TODO: Check that these files are on same filesystem.
         * This should really be a per-plugin function called from the top 
level*/
        err = smb_context->rename(smb_context, 
command->file_command.files[0]->path, 
                        smb_context,
                        command->file_command.files[1]->path);
 
+       evfs_smb_auth_pop(command);
        return err;
 }
 
@@ -289,18 +365,21 @@
 }
 
 static void
-smb_evfs_dir_list(evfs_client * client, evfs_filereference * file,
+smb_evfs_dir_list(evfs_client * client, evfs_command * command,
                   /*Returns.. */
                   Ecore_List ** directory_list)
 {
 
    char dir_path[PATH_MAX];
-
    int size;
    SMBCFILE *dir = NULL;
    struct smbc_dirent *entry = NULL;
+   evfs_filereference* file = command->file_command.files[0];
+   
    Ecore_List *files = ecore_list_new();
 
+   evfs_smb_auth_push(command,client);
+
    /*Does this command have an attached authentication object? */
    if (file->username)
      {
@@ -346,16 +425,26 @@
                   else if (entry->smbc_type == SMBC_LINK)
                      reference->file_type = EVFS_FILE_LINK;
 
-                  size =
-                     (sizeof(char) *
-                      strlen(file->path)) +
-                     (sizeof(char) * strlen(entry->name)) + (sizeof(char) * 2);
-                  reference->path = malloc(size);
-
-                  snprintf(reference->path, size, "%s/%s",
-                           file->path, entry->name);
+                 /*If the entry is a server, rewrite to remove the workgroup,
+                  * if any*/
+                  if (entry->smbc_type != SMBC_SERVER) {
+                         size =
+                            (sizeof(char) *
+                             strlen(file->path)) +
+                            (sizeof(char) * strlen(entry->name)) + 
(sizeof(char) * 2);
+                         reference->path = malloc(size);
+
+                         snprintf(reference->path, size, "%s/%s",
+                                  file->path, entry->name);
+                 } else {
+                         size = (sizeof(char) + (sizeof(char) * 
strlen(entry->name)) + (sizeof(char) * 2));
+                          reference->path = malloc(size);
+
+                         snprintf(reference->path, size, "/%s",
+                                  entry->name);                                
          
+                 }
 
-                  /*printf("File '%s' is of type '%d'\n", reference->path, 
reference->file_type); */
+                  /*printf("File '%s' is of type '%d'\n", reference->path, 
reference->file_type);*/
 
                   reference->plugin_uri = strdup("smb");
                   ecore_list_append(files, reference);
@@ -374,6 +463,7 @@
                strerror(errno));
      }
 
+    evfs_smb_auth_pop(command);
 }
 
 int
===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/plugins/file/evfs_fs_sftp.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- evfs_fs_sftp.c      25 Jul 2007 17:00:54 -0000      1.9
+++ evfs_fs_sftp.c      13 Aug 2007 03:05:22 -0000      1.10
@@ -794,7 +794,7 @@
 /*----------------------------------------------------------------*/
 
 void
-evfs_dir_list(evfs_client * client, evfs_filereference* ref, Ecore_List ** 
directory_list);
+evfs_dir_list(evfs_client * client, evfs_command* command, Ecore_List ** 
directory_list);
 int evfs_file_open(evfs_client * client, evfs_filereference * file);
 int evfs_file_close(evfs_filereference * file);
 int evfs_file_seek(evfs_filereference * file, long offset, int whence);
@@ -1089,7 +1089,7 @@
 }
 
 void
-evfs_dir_list(evfs_client * client, evfs_filereference* iref,
+evfs_dir_list(evfs_client * client, evfs_command* command,
                   /*Returns.. */
                   Ecore_List ** directory_list)
 {
@@ -1101,6 +1101,8 @@
        
        char* host, *schar;
        SftpConnection* conn = NULL;
+
+        evfs_filereference* iref = command->file_command.files[0];
 
        sftp_split_host_path(iref->path, &host,&schar);
 
===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/plugins/file/evfs_fs_tar.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- evfs_fs_tar.c       29 Jul 2007 10:10:37 -0000      1.10
+++ evfs_fs_tar.c       13 Aug 2007 03:05:22 -0000      1.11
@@ -90,7 +90,7 @@
 int evfs_file_read(evfs_filereference * file, char *bytes, long size);
 int evfs_file_write(evfs_filereference * file, char *bytes, long size);
 int evfs_file_create(evfs_filereference * file);
-void evfs_dir_list(evfs_client * client, evfs_filereference * file,
+void evfs_dir_list(evfs_client * client, evfs_command * command,
                    Ecore_List ** directory_list);
 
 struct tar_file
@@ -420,7 +420,7 @@
 }
 
 void
-evfs_dir_list(evfs_client * client, evfs_filereference *ref,
+evfs_dir_list(evfs_client * client, evfs_command* command,
 /*Returns..*/
               Ecore_List ** directory_list)
 {
@@ -430,6 +430,8 @@
    Ecore_List *keys;
    Ecore_List *files = ecore_list_new();
    char *key;
+
+   evfs_filereference* ref = command->file_command.files[0];
 
    printf("Listing tar file dir: '%s'\n", ref->path);
 
===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/plugins/file/evfs_fs_vfolder.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- evfs_fs_vfolder.c   25 Jul 2007 17:00:54 -0000      1.18
+++ evfs_fs_vfolder.c   13 Aug 2007 03:05:22 -0000      1.19
@@ -44,7 +44,7 @@
 //#define EVFS_PLUGIN_VFOLDER_QUERIES_ID "/Queries"
 #define MAX_GROUP_LENGTH 255
 
-void evfs_dir_list(evfs_client * client, evfs_filereference* ref,
+void evfs_dir_list(evfs_client * client, evfs_command* command,
               Ecore_List ** directory_list);
 
 int
@@ -71,13 +71,14 @@
 
 
 void
-evfs_dir_list(evfs_client * client, evfs_filereference* file,
+evfs_dir_list(evfs_client * client, evfs_command* command,
               Ecore_List ** directory_list)
 {
    Ecore_List *files = ecore_list_new();
    evfs_filereference* ref;
    char* path;
 
+   evfs_filereference* file = command->file_command.files[0];
    path = file->path;
 
    /*We should make this generic - perhaps a plugin system*/



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to