Lines Matching +full:remote +full:- +full:pid
3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
69 #include "sftp-common.h"
70 #include "sftp-client.h"
71 #include "sftp-usergroup.h"
79 /* PID of ssh transport process */
80 static volatile pid_t sshpid = -1;
114 int (*)(const char *, int), glob_t *); /* proto for sftp-glob.c */
122 #define LS_LONG_VIEW 0x0001 /* Full view ala ls -l */
123 #define LS_SHORT_VIEW 0x0002 /* Single row view ala ls -1 */
176 #define REMOTE 1 macro
181 { "cd", I_CHDIR, REMOTE, NOARGS },
182 { "chdir", I_CHDIR, REMOTE, NOARGS },
183 { "chgrp", I_CHGRP, REMOTE, NOARGS },
184 { "chmod", I_CHMOD, REMOTE, NOARGS },
185 { "chown", I_CHOWN, REMOTE, NOARGS },
186 { "copy", I_COPY, REMOTE, LOCAL },
187 { "cp", I_COPY, REMOTE, LOCAL },
188 { "df", I_DF, REMOTE, NOARGS },
189 { "dir", I_LS, REMOTE, NOARGS },
191 { "get", I_GET, REMOTE, LOCAL },
197 { "ln", I_LINK, REMOTE, REMOTE },
199 { "ls", I_LS, REMOTE, NOARGS },
201 { "mkdir", I_MKDIR, REMOTE, NOARGS },
202 { "mget", I_GET, REMOTE, LOCAL },
203 { "mput", I_PUT, LOCAL, REMOTE },
205 { "put", I_PUT, LOCAL, REMOTE },
206 { "pwd", I_PWD, REMOTE, NOARGS },
208 { "reget", I_REGET, REMOTE, LOCAL },
209 { "rename", I_RENAME, REMOTE, REMOTE },
210 { "reput", I_REPUT, LOCAL, REMOTE },
211 { "rm", I_RM, REMOTE, NOARGS },
212 { "rmdir", I_RMDIR, REMOTE, NOARGS },
213 { "symlink", I_SYMLINK, REMOTE, REMOTE },
217 { NULL, -1, -1, -1 }
223 pid_t pid; in killchild() local
225 pid = sshpid; in killchild()
226 if (pid > 1) { in killchild()
227 kill(pid, SIGTERM); in killchild()
228 (void)waitpid(pid, NULL, 0); in killchild()
239 while (waitpid(sshpid, NULL, WUNTRACED) == -1 && errno == EINTR) in suspchild()
251 (void)write(STDERR_FILENO, msg, sizeof(msg) - 1); in cmd_interrupt()
266 pid_t pid; in sigchld_handler() local
270 while ((pid = waitpid(sshpid, NULL, WNOHANG)) == -1 && errno == EINTR) in sigchld_handler()
272 if (pid == sshpid) { in sigchld_handler()
274 (void)write(STDERR_FILENO, msg, sizeof(msg) - 1); in sigchld_handler()
275 sshpid = -1; in sigchld_handler()
286 "cd path Change remote directory to 'path'\n" in help()
287 "chgrp [-h] grp path Change group of file 'path' to 'grp'\n" in help()
288 "chmod [-h] mode path Change permissions of file 'path' to 'mode'\n" in help()
289 "chown [-h] own path Change owner of file 'path' to 'own'\n" in help()
290 "copy oldpath newpath Copy remote file\n" in help()
291 "cp oldpath newpath Copy remote file\n" in help()
292 "df [-hi] [path] Display statistics for current directory or\n" in help()
295 "get [-afpR] remote [local] Download file\n" in help()
298 "lls [ls-options [path]] Display local directory listing\n" in help()
300 "ln [-s] oldpath newpath Link remote file (-s for symlink)\n" in help()
302 "ls [-1afhlnrSt] [path] Display remote directory listing\n" in help()
304 "mkdir path Create remote directory\n" in help()
306 "put [-afpR] local [remote] Upload file\n" in help()
307 "pwd Display remote working directory\n" in help()
309 "reget [-fpR] remote [local] Resume download file\n" in help()
310 "rename oldpath newpath Rename remote file\n" in help()
311 "reput [-fpR] local [remote] Resume upload file\n" in help()
312 "rm path Delete remote file\n" in help()
313 "rmdir path Remove remote directory\n" in help()
314 "symlink oldpath newpath Symlink remote file\n" in help()
326 pid_t pid; in local_do_shell() local
334 if ((pid = fork()) == -1) in local_do_shell()
337 if (pid == 0) { in local_do_shell()
338 /* XXX: child has pipe fds to ssh subproc open - issue? */ in local_do_shell()
340 debug3("Executing %s -c \"%s\"", shell, args); in local_do_shell()
341 execl(shell, shell, "-c", args, (char *)NULL); in local_do_shell()
350 while (waitpid(pid, &status, 0) == -1) in local_do_shell()
368 /* XXX: quoting - rip quoting code from ftp? */ in local_do_ls()
386 if (strip[len - 1] != '/' && path[len] == '/') in path_strip()
405 while ((ch = getopt(argc, argv, "afPpRr")) != -1) { in parse_getput_flags()
422 error("%s: Invalid flag -%c", cmd, optopt); in parse_getput_flags()
423 return -1; in parse_getput_flags()
440 while ((ch = getopt(argc, argv, "s")) != -1) { in parse_link_flags()
446 error("%s: Invalid flag -%c", cmd, optopt); in parse_link_flags()
447 return -1; in parse_link_flags()
464 while ((ch = getopt(argc, argv, "l")) != -1) { in parse_rename_flags()
470 error("%s: Invalid flag -%c", cmd, optopt); in parse_rename_flags()
471 return -1; in parse_rename_flags()
488 while ((ch = getopt(argc, argv, "1Safhlnrt")) != -1) { in parse_ls_flags()
523 error("ls: Invalid flag -%c", optopt); in parse_ls_flags()
524 return -1; in parse_ls_flags()
541 while ((ch = getopt(argc, argv, "hi")) != -1) { in parse_df_flags()
550 error("%s: Invalid flag -%c", cmd, optopt); in parse_df_flags()
551 return -1; in parse_df_flags()
568 while ((ch = getopt(argc, argv, "h")) != -1) { in parse_ch_flags()
574 error("%s: Invalid flag -%c", cmd, optopt); in parse_ch_flags()
575 return -1; in parse_ch_flags()
591 while ((ch = getopt(argc, argv, "")) != -1) { in parse_no_flags()
594 error("%s: Invalid flag -%c", cmd, optopt); in parse_no_flags()
595 return -1; in parse_no_flags()
641 if (stat(path, &sb) == -1) in local_is_dir()
664 err = -1; in process_get()
675 err = -1; in process_get()
684 err = -1; in process_get()
713 fflag || global_fflag, 0, 0) == -1) in process_get()
714 err = -1; in process_get()
718 fflag || global_fflag, 0) == -1) in process_get()
719 err = -1; in process_get()
752 err = -1; in process_put()
764 err = -1; in process_put()
769 if (stat(g.gl_pathv[i], &sb) == -1) { in process_put()
770 err = -1; in process_put()
779 err = -1; in process_put()
810 fflag || global_fflag, 0, 0) == -1) in process_put()
811 err = -1; in process_put()
815 fflag || global_fflag, 0) == -1) in process_put()
816 err = -1; in process_put()
832 int rmul = sort_flag & LS_REVERSE_SORT ? -1 : 1; in sdirent_comp()
834 #define NCMP(a,b) (a == b ? 0 : (a < b ? 1 : -1)) in sdirent_comp()
836 return (rmul * strcmp(a->filename, b->filename)); in sdirent_comp()
838 return (rmul * NCMP(a->a.mtime, b->a.mtime)); in sdirent_comp()
840 return (rmul * NCMP(a->a.size, b->a.size)); in sdirent_comp()
864 if (d[n]->filename[0] != '.' || (lflag & LS_SHOW_ALL)) in do_ls_dir()
865 m = MAXIMUM(m, strlen(d[n]->filename)); in do_ls_dir()
873 if (ioctl(fileno(stdin), TIOCGWINSZ, &ws) != -1) in do_ls_dir()
893 if (d[n]->filename[0] == '.' && !(lflag & LS_SHOW_ALL)) in do_ls_dir()
896 tmp = sftp_path_append(path, d[n]->filename); in do_ls_dir()
907 attrib_to_stat(&d[n]->a, &sb); in do_ls_dir()
915 mprintf("%s\n", d[n]->longname); in do_ls_dir()
917 mprintf("%-*s", colspace, fname); in do_ls_dir()
940 const char *ap = sort_glob->gl_pathv[a]; in sglob_comp()
941 const char *bp = sort_glob->gl_pathv[b]; in sglob_comp()
942 const struct stat *as = sort_glob->gl_statv[a]; in sglob_comp()
943 const struct stat *bs = sort_glob->gl_statv[b]; in sglob_comp()
944 int rmul = sort_flag & LS_REVERSE_SORT ? -1 : 1; in sglob_comp()
946 #define NCMP(a,b) (a == b ? 0 : (a < b ? 1 : -1)) in sglob_comp()
951 if (timespeccmp(&as->st_mtim, &bs->st_mtim, ==)) in sglob_comp()
953 return timespeccmp(&as->st_mtim, &bs->st_mtim, <) ? in sglob_comp()
954 rmul : -rmul; in sglob_comp()
956 return (rmul * NCMP(as->st_mtime, bs->st_mtime)); in sglob_comp()
961 return (rmul * NCMP(as->st_size, bs->st_size)); in sglob_comp()
991 return -1; in do_globbed_ls()
1002 S_ISDIR(g.gl_statv[0]->st_mode)) { in do_globbed_ls()
1008 if (ioctl(fileno(stdin), TIOCGWINSZ, &ws) != -1) in do_globbed_ls()
1051 ruser_name(g.gl_statv[i]->st_uid), in do_globbed_ls()
1052 rgroup_name(g.gl_statv[i]->st_gid)); in do_globbed_ls()
1056 mprintf("%-*s", colspace, fname); in do_globbed_ls()
1085 if (sftp_statvfs(conn, path, &st, 1) == -1) in do_df()
1086 return -1; in do_df()
1091 (unsigned long long)(100 * (st.f_files - st.f_ffree) / in do_df()
1098 (unsigned long long)(100 * (st.f_blocks - st.f_bfree) / in do_df()
1106 (unsigned long long)(st.f_files - st.f_ffree), in do_df()
1114 fmt_scaled((st.f_blocks - st.f_bfree) * st.f_frsize, s_used); in do_df()
1127 (st.f_blocks - st.f_bfree) / 1024), in do_df()
1176 * Split a string into an argument vector using sh(1)-style quoting,
1182 * Returns NULL on error or a NULL-terminated array of arguments.
1204 if (strlen(arg) > sizeof(argvs) - 1) { in makeargv()
1253 * double-escaped glob sequence - in makeargv()
1257 if (j >= sizeof(argvs) - 5) in makeargv()
1278 * escaped glob sequence - in makeargv()
1327 if (j >= sizeof(argvs) - 3) in makeargv()
1356 * Check for leading '-' (disable error processing) and '@' (suppress in parse_args()
1362 if (*cp == '-') { in parse_args()
1378 return -1; in parse_args()
1392 } else if (cmdnum == -1) { in parse_args()
1394 return -1; in parse_args()
1408 aflag, fflag, pflag, rflag)) == -1) in parse_args()
1409 return -1; in parse_args()
1411 if (argc - optidx < 1) { in parse_args()
1414 return -1; in parse_args()
1418 if (argc - optidx > 1) { in parse_args()
1425 if ((optidx = parse_link_flags(cmd, argv, argc, sflag)) == -1) in parse_args()
1426 return -1; in parse_args()
1429 if ((optidx = parse_no_flags(cmd, argv, argc)) == -1) in parse_args()
1430 return -1; in parse_args()
1433 if ((optidx = parse_rename_flags(cmd, argv, argc, lflag)) == -1) in parse_args()
1434 return -1; in parse_args()
1437 if ((optidx = parse_no_flags(cmd, argv, argc)) == -1) in parse_args()
1438 return -1; in parse_args()
1440 if (argc - optidx < 2) { in parse_args()
1443 return -1; in parse_args()
1459 if ((optidx = parse_no_flags(cmd, argv, argc)) == -1) in parse_args()
1460 return -1; in parse_args()
1462 if (argc - optidx < 1) { in parse_args()
1467 return -1; in parse_args()
1476 iflag)) == -1) in parse_args()
1477 return -1; in parse_args()
1479 if (argc - optidx < 1) in parse_args()
1487 if ((optidx = parse_ls_flags(argv, argc, lflag)) == -1) in parse_args()
1488 return(-1); in parse_args()
1490 if (argc - optidx > 0) in parse_args()
1505 if ((optidx = parse_ch_flags(cmd, argv, argc, hflag)) == -1) in parse_args()
1506 return -1; in parse_args()
1508 if (argc - optidx < 1) in parse_args()
1518 return -1; in parse_args()
1524 if (argc - optidx < 2) { in parse_args()
1527 return -1; in parse_args()
1537 if ((optidx = parse_no_flags(cmd, argv, argc)) == -1) in parse_args()
1538 return -1; in parse_args()
1581 case -1: in parse_dispatch_command()
1583 err = -1; in parse_dispatch_command()
1676 /* Strip pwd off beginning of non-absolute paths */ in parse_dispatch_command()
1697 if (chdir(path1) == -1) { in parse_dispatch_command()
1704 if (mkdir(path1, 0777) == -1) { in parse_dispatch_command()
1744 err = -1; in parse_dispatch_command()
1751 "remote file \"%s\"", g.gl_pathv[i]); in parse_dispatch_command()
1753 err = -1; in parse_dispatch_command()
1777 mprintf("Remote working directory: %s\n", *pwd); in parse_dispatch_command()
1782 err = -1; in parse_dispatch_command()
1814 return (-1); in parse_dispatch_command()
1840 if (ioctl(fileno(stdin), TIOCGWINSZ, &ws) != -1) in complete_display()
1843 m = m > len ? m - len : 0; in complete_display()
1854 mprintf("%-*s", colspace, tmp); in complete_display()
1952 if (el_insertstr(el, tmp + cmdlen) == -1) in complete_cmd_parse()
1960 if (lastarg || *(lf->cursor) != ' ') in complete_cmd_parse()
1963 if (y > 0 && el_insertstr(el, argterm) == -1) in complete_cmd_parse()
1974 * local or remote files. The "cmdarg" argument specifies the actual argument
1982 return -1; in complete_is_remote()
1994 return -1; in complete_is_remote()
2000 char *file, int remote, int lastarg, char quote, int terminated) in complete_match() argument
2018 if (remote != LOCAL) { in complete_match()
2070 if (tmplen > (filelen - cesc)) { in complete_match()
2071 tmp2 = tmp + filelen - cesc; in complete_match()
2075 if ((clen = mblen(tmp2 + i, len - i)) < 0 || in complete_match()
2076 (size_t)clen > sizeof(ins) - 2) in complete_match()
2091 if (el_insertstr(el, ins) == -1) in complete_match()
2098 if (el_insertstr(el, ins + 1) == -1) in complete_match()
2110 if (*(lf->cursor - 1) != '/' && in complete_match()
2111 (lastarg || *(lf->cursor) != ' ')) in complete_match()
2114 if (i > 0 && el_insertstr(el, ins) == -1) in complete_match()
2124 /* tab-completion hook function, called via libedit */
2139 cursor = lf->cursor - lf->buffer; in complete()
2141 memcpy(line, lf->buffer, cursor); in complete()
2147 len = lf->lastchar - lf->buffer; in complete()
2149 memcpy(line, lf->buffer, len); in complete()
2164 } else if (carg == 1 && cursor > 0 && line[cursor - 1] != ' ') { in complete()
2171 int remote = 0; in complete() local
2175 if (carg > 1 && line[cursor-1] != ' ') in complete()
2176 filematch = argv[carg - 1]; in complete()
2180 if (argv[i][0] != '-') in complete()
2188 if (line[cursor - 1] == ' ') in complete()
2191 remote = complete_is_remote(argv[0], cmdarg); in complete()
2193 if ((remote == REMOTE || remote == LOCAL) && in complete()
2194 complete_match(el, complete_ctx->conn, in complete()
2195 *complete_ctx->remote_pathp, filematch, in complete()
2196 remote, carg == argc, quote, terminated) != 0) in complete()
2234 el_set(el, EL_ADDFN, "ftp-complete", in interactive_loop()
2239 el_set(el, EL_BIND, "^I", "ftp-complete", NULL); in interactive_loop()
2240 /* enable ctrl-left-arrow and ctrl-right-arrow */ in interactive_loop()
2241 el_set(el, EL_BIND, "\\e[1;5C", "em-next-word", NULL); in interactive_loop()
2242 el_set(el, EL_BIND, "\\e\\e[C", "em-next-word", NULL); in interactive_loop()
2243 el_set(el, EL_BIND, "\\e[1;5D", "ed-prev-word", NULL); in interactive_loop()
2244 el_set(el, EL_BIND, "\\e\\e[D", "ed-prev-word", NULL); in interactive_loop()
2246 el_set(el, EL_BIND, "^w", "ed-delete-prev-word", NULL); in interactive_loop()
2268 return (-1); in interactive_loop()
2273 global_aflag ? " -a" : "", dir, in interactive_loop()
2298 if (sigaction(SIGINT, &sa, NULL) == -1) { in interactive_loop()
2355 return (err >= 0 ? 0 : -1); in interactive_loop()
2365 if ((pipe(pin) == -1) || (pipe(pout) == -1)) in connect_to_server()
2374 if (socketpair(AF_UNIX, SOCK_STREAM, 0, inout) == -1) in connect_to_server()
2380 if ((sshpid = fork()) == -1) in connect_to_server()
2383 if ((dup2(c_in, STDIN_FILENO) == -1) || in connect_to_server()
2384 (dup2(c_out, STDOUT_FILENO) == -1)) { in connect_to_server()
2424 "usage: %s [-46AaCfNpqrv] [-B buffer_size] [-b batchfile] [-c cipher]\n" in usage()
2425 " [-D sftp_server_command] [-F ssh_config] [-i identity_file]\n" in usage()
2426 " [-J destination] [-l limit] [-o ssh_option] [-P port]\n" in usage()
2427 " [-R num_requests] [-S program] [-s subsystem | sftp_server]\n" in usage()
2428 " [-X sftp_option] destination\n", in usage()
2436 int r, in, out, ch, err, tmp, port = -1, noisy = 0; in main()
2459 addargs(&args, "-oForwardX11 no"); in main()
2460 addargs(&args, "-oPermitLocalCommand no"); in main()
2461 addargs(&args, "-oClearAllForwardings yes"); in main()
2467 "1246AafhNpqrvCc:D:i:l:o:s:S:b:B:F:J:P:R:X:")) != -1) { in main()
2474 addargs(&args, "-%c", ch); in main()
2482 addargs(&args, "-%c", ch); in main()
2489 addargs(&args, "-%c", ch); in main()
2498 addargs(&args, "-v"); in main()
2521 /* Allow "-" as stdin */ in main()
2522 if (strcmp(optarg, "-") != 0 && in main()
2527 addargs(&args, "-obatchmode yes"); in main()
2565 /* Please keep in sync with ssh.c -X */ in main()
2569 r = -1; in main()
2572 if (r == -1) { in main()
2586 fatal("Invalid -X option"); in main()
2596 addargs(&args, "-oForwardAgent no"); in main()
2612 case -1: in main()
2616 if (tmp != -1) in main()
2640 if (port != -1) in main()
2641 addargs(&args, "-oPort %d", port); in main()
2643 addargs(&args, "-l"); in main()
2647 /* no subsystem if the server-spec contains a '/' */ in main()
2649 addargs(&args, "-s"); in main()
2651 addargs(&args, "--"); in main()
2659 fatal_r(r, "Parse -D arguments"); in main()
2661 fatal("No sftp server specified via -D"); in main()
2690 while (waitpid(sshpid, NULL, 0) == -1 && sshpid > 1) in main()