[BACK]Return to sftp-client.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/sftp-client.c between version 1.110 and 1.111

version 1.110, 2013/12/04 04:20:01 version 1.111, 2013/12/05 22:59:45
Line 453 
Line 453 
         Buffer msg;          Buffer msg;
         u_int count, type, id, handle_len, i, expected_id, ents = 0;          u_int count, type, id, handle_len, i, expected_id, ents = 0;
         char *handle;          char *handle;
           int status = SSH2_FX_FAILURE;
   
           if (dir)
                   *dir = NULL;
   
         id = conn->msg_id++;          id = conn->msg_id++;
   
         buffer_init(&msg);          buffer_init(&msg);
Line 499 
Line 503 
                         fatal("ID mismatch (%u != %u)", id, expected_id);                          fatal("ID mismatch (%u != %u)", id, expected_id);
   
                 if (type == SSH2_FXP_STATUS) {                  if (type == SSH2_FXP_STATUS) {
                         int status = buffer_get_int(&msg);                          status = buffer_get_int(&msg);
   
                         debug3("Received SSH2_FXP_STATUS %d", status);                          debug3("Received SSH2_FXP_STATUS %d", status);
                           if (status == SSH2_FX_EOF)
                         if (status == SSH2_FX_EOF) {  
                                 break;                                  break;
                         } else {                          error("Couldn't read directory: %s", fx2txt(status));
                                 error("Couldn't read directory: %s",                          goto out;
                                     fx2txt(status));  
                                 do_close(conn, handle, handle_len);  
                                 free(handle);  
                                 buffer_free(&msg);  
                                 return(status);  
                         }  
                 } else if (type != SSH2_FXP_NAME)                  } else if (type != SSH2_FXP_NAME)
                         fatal("Expected SSH2_FXP_NAME(%u) packet, got %u",                          fatal("Expected SSH2_FXP_NAME(%u) packet, got %u",
                             SSH2_FXP_NAME, type);                              SSH2_FXP_NAME, type);
Line 540 
Line 536 
                         if (strchr(filename, '/') != NULL) {                          if (strchr(filename, '/') != NULL) {
                                 error("Server sent suspect path \"%s\" "                                  error("Server sent suspect path \"%s\" "
                                     "during readdir of \"%s\"", filename, path);                                      "during readdir of \"%s\"", filename, path);
                                 goto next;                          } else if (dir) {
                         }  
   
                         if (dir) {  
                                 *dir = xrealloc(*dir, ents + 2, sizeof(**dir));                                  *dir = xrealloc(*dir, ents + 2, sizeof(**dir));
                                 (*dir)[ents] = xcalloc(1, sizeof(***dir));                                  (*dir)[ents] = xcalloc(1, sizeof(***dir));
                                 (*dir)[ents]->filename = xstrdup(filename);                                  (*dir)[ents]->filename = xstrdup(filename);
Line 551 
Line 544 
                                 memcpy(&(*dir)[ents]->a, a, sizeof(*a));                                  memcpy(&(*dir)[ents]->a, a, sizeof(*a));
                                 (*dir)[++ents] = NULL;                                  (*dir)[++ents] = NULL;
                         }                          }
  next:  
                         free(filename);                          free(filename);
                         free(longname);                          free(longname);
                 }                  }
         }          }
           status = 0;
   
    out:
         buffer_free(&msg);          buffer_free(&msg);
         do_close(conn, handle, handle_len);          do_close(conn, handle, handle_len);
         free(handle);          free(handle);
   
         /* Don't return partial matches on interrupt */          if (status != 0 && dir != NULL) {
         if (interrupted && dir != NULL && *dir != NULL) {                  /* Don't return results on error */
                 free_sftp_dirents(*dir);                  free_sftp_dirents(*dir);
                   *dir = NULL;
           } else if (interrupted && dir != NULL && *dir != NULL) {
                   /* Don't return partial matches on interrupt */
                   free_sftp_dirents(*dir);
                 *dir = xcalloc(1, sizeof(**dir));                  *dir = xcalloc(1, sizeof(**dir));
                 **dir = NULL;                  **dir = NULL;
         }          }
   
         return 0;          return status;
 }  }
   
 int  int
Line 581 
Line 579 
 {  {
         int i;          int i;
   
           if (s == NULL)
                   return;
         for (i = 0; s[i]; i++) {          for (i = 0; s[i]; i++) {
                 free(s[i]->filename);                  free(s[i]->filename);
                 free(s[i]->longname);                  free(s[i]->longname);

Legend:
Removed from v.1.110  
changed lines
  Added in v.1.111