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

Diff for /src/usr.bin/ssh/sftp.c between version 1.56.2.3 and 1.57

version 1.56.2.3, 2005/09/02 03:45:00 version 1.57, 2004/11/05 12:19:56
Line 145 
Line 145 
 static void  static void
 killchild(int signo)  killchild(int signo)
 {  {
         if (sshpid > 1) {          if (sshpid > 1)
                 kill(sshpid, SIGTERM);                  kill(sshpid, SIGTERM);
                 waitpid(sshpid, NULL, 0);  
         }  
   
         _exit(1);          _exit(1);
 }  }
Line 157 
Line 155 
 cmd_interrupt(int signo)  cmd_interrupt(int signo)
 {  {
         const char msg[] = "\rInterrupt  \n";          const char msg[] = "\rInterrupt  \n";
         int olderrno = errno;  
   
         write(STDERR_FILENO, msg, sizeof(msg) - 1);          write(STDERR_FILENO, msg, sizeof(msg) - 1);
         interrupted = 1;          interrupted = 1;
         errno = olderrno;  
 }  }
   
 static void  static void
Line 261 
Line 257 
                 return (xstrdup(path));                  return (xstrdup(path));
   
         len = strlen(strip);          len = strlen(strip);
         if (strncmp(path, strip, len) == 0) {          if (strip != NULL && strncmp(path, strip, len) == 0) {
                 if (strip[len - 1] != '/' && path[len] == '/')                  if (strip[len - 1] != '/' && path[len] == '/')
                         len++;                          len++;
                 return (xstrdup(path + len));                  return (xstrdup(path + len));
Line 352 
Line 348 
   
         /* Check for flags */          /* Check for flags */
         if (cp++[0] == '-') {          if (cp++[0] == '-') {
                 for (; strchr(WHITESPACE, *cp) == NULL; cp++) {                  for(; strchr(WHITESPACE, *cp) == NULL; cp++) {
                         switch (*cp) {                          switch (*cp) {
                         case 'l':                          case 'l':
                                 *lflag &= ~VIEW_FLAGS;                                  *lflag &= ~VIEW_FLAGS;
Line 399 
Line 395 
 {  {
         const char *cp = *cpp, *end;          const char *cp = *cpp, *end;
         char quot;          char quot;
         u_int i, j;          int i, j;
   
         cp += strspn(cp, WHITESPACE);          cp += strspn(cp, WHITESPACE);
         if (!*cp) {          if (!*cp) {
Line 659 
Line 655 
 static int  static int
 do_ls_dir(struct sftp_conn *conn, char *path, char *strip_path, int lflag)  do_ls_dir(struct sftp_conn *conn, char *path, char *strip_path, int lflag)
 {  {
         int n;          int n, c = 1, colspace = 0, columns = 1;
         u_int c = 1, colspace = 0, columns = 1;  
         SFTP_DIRENT **d;          SFTP_DIRENT **d;
   
         if ((n = do_readdir(conn, path, &d)) != 0)          if ((n = do_readdir(conn, path, &d)) != 0)
                 return (n);                  return (n);
   
         if (!(lflag & LS_SHORT_VIEW)) {          if (!(lflag & LS_SHORT_VIEW)) {
                 u_int m = 0, width = 80;                  int m = 0, width = 80;
                 struct winsize ws;                  struct winsize ws;
                 char *tmp;                  char *tmp;
   
Line 743 
Line 738 
     int lflag)      int lflag)
 {  {
         glob_t g;          glob_t g;
         u_int i, c = 1, colspace = 0, columns = 1;          int i, c = 1, colspace = 0, columns = 1;
         Attrib *a = NULL;          Attrib *a;
   
         memset(&g, 0, sizeof(g));          memset(&g, 0, sizeof(g));
   
         if (remote_glob(conn, path, GLOB_MARK|GLOB_NOCHECK|GLOB_BRACE,          if (remote_glob(conn, path, GLOB_MARK|GLOB_NOCHECK|GLOB_BRACE,
             NULL, &g) || (g.gl_pathc && !g.gl_matchc)) {              NULL, &g)) {
                 if (g.gl_pathc)  
                         globfree(&g);  
                 error("Can't ls: \"%s\" not found", path);                  error("Can't ls: \"%s\" not found", path);
                 return (-1);                  return (-1);
         }          }
Line 760 
Line 753 
                 goto out;                  goto out;
   
         /*          /*
          * If the glob returns a single match and it is a directory,           * If the glob returns a single match, which is the same as the
          * then just list its contents.           * input glob, and it is a directory, then just list its contents
          */           */
         if (g.gl_matchc == 1) {          if (g.gl_pathc == 1 &&
                 if ((a = do_lstat(conn, g.gl_pathv[0], 1)) == NULL) {              strncmp(path, g.gl_pathv[0], strlen(g.gl_pathv[0]) - 1) == 0) {
                   if ((a = do_lstat(conn, path, 1)) == NULL) {
                         globfree(&g);                          globfree(&g);
                         return (-1);                          return (-1);
                 }                  }
                 if ((a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) &&                  if ((a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) &&
                     S_ISDIR(a->perm)) {                      S_ISDIR(a->perm)) {
                         int err;  
   
                         err = do_ls_dir(conn, g.gl_pathv[0], strip_path, lflag);  
                         globfree(&g);                          globfree(&g);
                         return (err);                          return (do_ls_dir(conn, path, strip_path, lflag));
                 }                  }
         }          }
   
         if (!(lflag & LS_SHORT_VIEW)) {          if (!(lflag & LS_SHORT_VIEW)) {
                 u_int m = 0, width = 80;                  int m = 0, width = 80;
                 struct winsize ws;                  struct winsize ws;
   
                 /* Count entries for sort and find longest filename */                  /* Count entries for sort and find longest filename */
Line 794 
Line 785 
                 colspace = width / columns;                  colspace = width / columns;
         }          }
   
         for (i = 0; g.gl_pathv[i] && !interrupted; i++, a = NULL) {          for (i = 0; g.gl_pathv[i] && !interrupted; i++) {
                 char *fname;                  char *fname;
   
                 fname = path_strip(g.gl_pathv[i], strip_path);                  fname = path_strip(g.gl_pathv[i], strip_path);
Line 811 
Line 802 
                          * that the server returns as well as the filenames.                           * that the server returns as well as the filenames.
                          */                           */
                         memset(&sb, 0, sizeof(sb));                          memset(&sb, 0, sizeof(sb));
                         if (a == NULL)                          a = do_lstat(conn, g.gl_pathv[i], 1);
                                 a = do_lstat(conn, g.gl_pathv[i], 1);  
                         if (a != NULL)                          if (a != NULL)
                                 attrib_to_stat(a, &sb);                                  attrib_to_stat(a, &sb);
                         lname = ls_file(fname, &sb, 1);                          lname = ls_file(fname, &sb, 1);
Line 1230 
Line 1220 
         char *dir = NULL;          char *dir = NULL;
         char cmd[2048];          char cmd[2048];
         struct sftp_conn *conn;          struct sftp_conn *conn;
         int err, interactive;          int err;
         EditLine *el = NULL;          EditLine *el = NULL;
         History *hl = NULL;          History *hl = NULL;
         HistEvent hev;          HistEvent hev;
Line 1266 
Line 1256 
                 if (remote_is_dir(conn, dir) && file2 == NULL) {                  if (remote_is_dir(conn, dir) && file2 == NULL) {
                         printf("Changing to: %s\n", dir);                          printf("Changing to: %s\n", dir);
                         snprintf(cmd, sizeof cmd, "cd \"%s\"", dir);                          snprintf(cmd, sizeof cmd, "cd \"%s\"", dir);
                         if (parse_dispatch_command(conn, cmd, &pwd, 1) != 0) {                          if (parse_dispatch_command(conn, cmd, &pwd, 1) != 0)
                                 xfree(dir);  
                                 xfree(pwd);  
                                 return (-1);                                  return (-1);
                         }  
                 } else {                  } else {
                         if (file2 == NULL)                          if (file2 == NULL)
                                 snprintf(cmd, sizeof cmd, "get %s", dir);                                  snprintf(cmd, sizeof cmd, "get %s", dir);
Line 1289 
Line 1276 
         setvbuf(stdout, NULL, _IOLBF, 0);          setvbuf(stdout, NULL, _IOLBF, 0);
         setvbuf(infile, NULL, _IOLBF, 0);          setvbuf(infile, NULL, _IOLBF, 0);
   
         interactive = !batchmode && isatty(STDIN_FILENO);  
         err = 0;          err = 0;
         for (;;) {          for (;;) {
                 char *cp;                  char *cp;
Line 1299 
Line 1285 
                 signal(SIGINT, SIG_IGN);                  signal(SIGINT, SIG_IGN);
   
                 if (el == NULL) {                  if (el == NULL) {
                         if (interactive)                          printf("sftp> ");
                                 printf("sftp> ");  
                         if (fgets(cmd, sizeof(cmd), infile) == NULL) {                          if (fgets(cmd, sizeof(cmd), infile) == NULL) {
                                 if (interactive)                                  printf("\n");
                                         printf("\n");  
                                 break;                                  break;
                         }                          }
                         if (!interactive) { /* Echo command */                          if (batchmode) /* Echo command */
                                 printf("sftp> %s", cmd);                                  printf("%s", cmd);
                                 if (strlen(cmd) > 0 &&  
                                     cmd[strlen(cmd) - 1] != '\n')  
                                         printf("\n");  
                         }  
                 } else {                  } else {
                         if ((line = el_gets(el, &count)) == NULL || count <= 0) {                          if ((line = el_gets(el, &count)) == NULL || count <= 0)
                                 printf("\n");  
                                 break;                                  break;
                         }  
                         history(hl, &hev, H_ENTER, line);                          history(hl, &hev, H_ENTER, line);
                         if (strlcpy(cmd, line, sizeof(cmd)) >= sizeof(cmd)) {                          if (strlcpy(cmd, line, sizeof(cmd)) >= sizeof(cmd)) {
                                 fprintf(stderr, "Error: input line too long\n");                                  fprintf(stderr, "Error: input line too long\n");
Line 1338 
Line 1316 
         }          }
         xfree(pwd);          xfree(pwd);
   
         if (el != NULL)  
                 el_end(el);  
   
         /* err == 1 signifies normal "quit" exit */          /* err == 1 signifies normal "quit" exit */
         return (err >= 0 ? 0 : -1);          return (err >= 0 ? 0 : -1);
 }  }
Line 1470 
Line 1445 
   
                         /* Allow "-" as stdin */                          /* Allow "-" as stdin */
                         if (strcmp(optarg, "-") != 0 &&                          if (strcmp(optarg, "-") != 0 &&
                             (infile = fopen(optarg, "r")) == NULL)                             (infile = fopen(optarg, "r")) == NULL)
                                 fatal("%s (%s).", strerror(errno), optarg);                                  fatal("%s (%s).", strerror(errno), optarg);
                         showprogress = 0;                          showprogress = 0;
                         batchmode = 1;                          batchmode = 1;
                         addargs(&args, "-obatchmode yes");  
                         break;                          break;
                 case 'P':                  case 'P':
                         sftp_direct = optarg;                          sftp_direct = optarg;

Legend:
Removed from v.1.56.2.3  
changed lines
  Added in v.1.57