diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-04-23 20:33:25 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-04-23 20:33:25 +0000 |
commit | 616dc84ff029620576cad6e2345c4de438fb3ea2 (patch) | |
tree | 3b3f7fa0e86c10bdb1340cb42513b33defde04b7 | |
parent | 7d750354839939345823f4fd6e1d98eb5b3f2fc5 (diff) |
allow "ftp -aV ftp://host/foo.tar.gz | tar xvfpz -" to work
-rw-r--r-- | usr.bin/ftp/cmds.c | 205 | ||||
-rw-r--r-- | usr.bin/ftp/complete.c | 10 | ||||
-rw-r--r-- | usr.bin/ftp/domacro.c | 22 | ||||
-rw-r--r-- | usr.bin/ftp/extern.h | 4 | ||||
-rw-r--r-- | usr.bin/ftp/fetch.c | 72 | ||||
-rw-r--r-- | usr.bin/ftp/ftp.1 | 7 | ||||
-rw-r--r-- | usr.bin/ftp/ftp.c | 115 | ||||
-rw-r--r-- | usr.bin/ftp/ftp_var.h | 4 | ||||
-rw-r--r-- | usr.bin/ftp/main.c | 43 | ||||
-rw-r--r-- | usr.bin/ftp/ruserpass.c | 24 | ||||
-rw-r--r-- | usr.bin/ftp/util.c | 76 |
11 files changed, 309 insertions, 273 deletions
diff --git a/usr.bin/ftp/cmds.c b/usr.bin/ftp/cmds.c index 23dfa9423eb..cadf58742f6 100644 --- a/usr.bin/ftp/cmds.c +++ b/usr.bin/ftp/cmds.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmds.c,v 1.19 1997/04/16 05:02:39 millert Exp $ */ +/* $OpenBSD: cmds.c,v 1.20 1997/04/23 20:32:57 deraadt Exp $ */ /* $NetBSD: cmds.c,v 1.23 1997/04/14 09:09:15 lukem Exp $ */ /* @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)cmds.c 8.6 (Berkeley) 10/9/94"; #else -static char rcsid[] = "$OpenBSD: cmds.c,v 1.19 1997/04/16 05:02:39 millert Exp $"; +static char rcsid[] = "$OpenBSD: cmds.c,v 1.20 1997/04/23 20:32:57 deraadt Exp $"; #endif #endif /* not lint */ @@ -95,18 +95,18 @@ settype(argc, argv) if (argc > 2) { char *sep; - printf("usage: %s [", argv[0]); + fprintf(ttyout, "usage: %s [", argv[0]); sep = " "; for (p = types; p->t_name; p++) { - printf("%s%s", sep, p->t_name); + fprintf(ttyout, "%s%s", sep, p->t_name); sep = " | "; } - puts(" ]"); + fputs(" ]\n", ttyout); code = -1; return; } if (argc < 2) { - printf("Using %s mode to transfer files.\n", typename); + fprintf(ttyout, "Using %s mode to transfer files.\n", typename); code = 0; return; } @@ -114,7 +114,7 @@ settype(argc, argv) if (strcmp(argv[1], p->t_name) == 0) break; if (p->t_name == 0) { - printf("%s: unknown mode.\n", argv[1]); + fprintf(ttyout, "%s: unknown mode.\n", argv[1]); code = -1; return; } @@ -220,7 +220,7 @@ setftmode(argc, argv) char *argv[]; { - printf("We only support %s mode, sorry.\n", modename); + fprintf(ttyout, "We only support %s mode, sorry.\n", modename); code = -1; } @@ -234,7 +234,7 @@ setform(argc, argv) char *argv[]; { - printf("We only support %s format, sorry.\n", formname); + fprintf(ttyout, "We only support %s format, sorry.\n", formname); code = -1; } @@ -248,7 +248,7 @@ setstruct(argc, argv) char *argv[]; { - printf("We only support %s structure, sorry.\n", structname); + fprintf(ttyout, "We only support %s structure, sorry.\n", structname); code = -1; } @@ -273,7 +273,7 @@ put(argc, argv) goto usage; if ((argc < 3 && !another(&argc, &argv, "remote-file")) || argc > 3) { usage: - printf("usage: %s local-file [ remote-file ]\n", argv[0]); + fprintf(ttyout, "usage: %s local-file [ remote-file ]\n", argv[0]); code = -1; return; } @@ -315,7 +315,7 @@ mput(argc, argv) char *tp; if (argc < 2 && !another(&argc, &argv, "local-files")) { - printf("usage: %s local-files\n", argv[0]); + fprintf(ttyout, "usage: %s local-files\n", argv[0]); code = -1; return; } @@ -464,7 +464,7 @@ getit(argc, argv, restartit, mode) goto usage; if ((argc < 3 && !another(&argc, &argv, "local-file")) || argc > 3) { usage: - printf("usage: %s remote-file [ local-file ]\n", argv[0]); + fprintf(ttyout, "usage: %s remote-file [ local-file ]\n", argv[0]); code = -1; return (0); } @@ -535,8 +535,8 @@ mabort(signo) int ointer, oconf; alarmtimer(0); - putchar('\n'); - (void)fflush(stdout); + putc('\n', ttyout); + (void)fflush(ttyout); if (mflag && fromatty) { ointer = interactive; oconf = confirmrest; @@ -567,7 +567,7 @@ mget(argc, argv) char *cp, *tp, *tp2, tmpbuf[MAXPATHLEN]; if (argc < 2 && !another(&argc, &argv, "remote-files")) { - printf("usage: %s remote-files\n", argv[0]); + fprintf(ttyout, "usage: %s remote-files\n", argv[0]); code = -1; return; } @@ -630,53 +630,53 @@ status(argc, argv) int i; if (connected) - printf("Connected %sto %s.\n", + fprintf(ttyout, "Connected %sto %s.\n", connected == -1 ? "and logged in" : "", hostname); else - puts("Not connected."); + fputs("Not connected.\n", ttyout); if (!proxy) { pswitch(1); if (connected) { - printf("Connected for proxy commands to %s.\n", + fprintf(ttyout, "Connected for proxy commands to %s.\n", hostname); } else { - puts("No proxy connection."); + fputs("No proxy connection.\n", ttyout); } pswitch(0); } - printf("Passive mode: %s.\n", onoff(passivemode)); - printf("Mode: %s; Type: %s; Form: %s; Structure: %s.\n", + fprintf(ttyout, "Passive mode: %s.\n", onoff(passivemode)); + fprintf(ttyout, "Mode: %s; Type: %s; Form: %s; Structure: %s.\n", modename, typename, formname, structname); - printf("Verbose: %s; Bell: %s; Prompting: %s; Globbing: %s.\n", + fprintf(ttyout, "Verbose: %s; Bell: %s; Prompting: %s; Globbing: %s.\n", onoff(verbose), onoff(bell), onoff(interactive), onoff(doglob)); - printf("Store unique: %s; Receive unique: %s.\n", onoff(sunique), + fprintf(ttyout, "Store unique: %s; Receive unique: %s.\n", onoff(sunique), onoff(runique)); - printf("Preserve modification times: %s.\n", onoff(preserve)); - printf("Case: %s; CR stripping: %s.\n", onoff(mcase), onoff(crflag)); + fprintf(ttyout, "Preserve modification times: %s.\n", onoff(preserve)); + fprintf(ttyout, "Case: %s; CR stripping: %s.\n", onoff(mcase), onoff(crflag)); if (ntflag) { - printf("Ntrans: (in) %s (out) %s\n", ntin, ntout); + fprintf(ttyout, "Ntrans: (in) %s (out) %s\n", ntin, ntout); } else { - puts("Ntrans: off."); + fputs("Ntrans: off.\n", ttyout); } if (mapflag) { - printf("Nmap: (in) %s (out) %s\n", mapin, mapout); + fprintf(ttyout, "Nmap: (in) %s (out) %s\n", mapin, mapout); } else { - puts("Nmap: off."); + fputs("Nmap: off.\n", ttyout); } - printf("Hash mark printing: %s; Mark count: %d; Progress bar: %s.\n", + fprintf(ttyout, "Hash mark printing: %s; Mark count: %d; Progress bar: %s.\n", onoff(hash), mark, onoff(progress)); - printf("Use of PORT cmds: %s.\n", onoff(sendport)); + fprintf(ttyout, "Use of PORT cmds: %s.\n", onoff(sendport)); #ifndef SMALL - printf("Command line editing: %s.\n", onoff(editing)); + fprintf(ttyout, "Command line editing: %s.\n", onoff(editing)); #endif /* !SMALL */ if (macnum > 0) { - puts("Macros:"); + fputs("Macros:", ttyout); for (i=0; i<macnum; i++) { - printf("\t%s\n", macros[i].mac_name); + fprintf(ttyout, "\t%s\n", macros[i].mac_name); } } code = 0; @@ -699,11 +699,11 @@ togglevar(argc, argv, var, mesg) } else if (argc == 2 && strcasecmp(argv[1], "off") == 0) { *var = 0; } else { - printf("usage: %s [ on | off ]\n", argv[0]); + fprintf(ttyout, "usage: %s [ on | off ]\n", argv[0]); return (-1); } if (mesg) - printf("%s %s.\n", mesg, onoff(*var)); + fprintf(ttyout, "%s %s.\n", mesg, onoff(*var)); return (*var); } @@ -761,7 +761,7 @@ sethash(argc, argv) if (argc == 1) hash = !hash; else if (argc != 2) { - printf("usage: %s [ on | off | bytecount ]\n", argv[0]); + fprintf(ttyout, "usage: %s [ on | off | bytecount ]\n", argv[0]); code = -1; return; } else if (strcasecmp(argv[1], "on") == 0) @@ -771,17 +771,17 @@ sethash(argc, argv) else { int nmark = atol(argv[1]); if (nmark < 1) { - printf("%s: bad bytecount value.\n", argv[1]); + fprintf(ttyout, "%s: bad bytecount value.\n", argv[1]); code = -1; return; } mark = nmark; hash = 1; } - printf("Hash mark printing %s", onoff(hash)); + fprintf(ttyout, "Hash mark printing %s", onoff(hash)); if (hash) - printf(" (%d bytes/hash mark)", mark); - puts("."); + fprintf(ttyout, " (%d bytes/hash mark)", mark); + fputs(".\n", ttyout); code = hash; } @@ -878,7 +878,7 @@ setdebug(argc, argv) int val; if (argc > 2) { - printf("usage: %s [ on | off | debuglevel ]\n", argv[0]); + fprintf(ttyout, "usage: %s [ on | off | debuglevel ]\n", argv[0]); code = -1; return; } else if (argc == 2) { @@ -889,7 +889,7 @@ setdebug(argc, argv) else { val = atoi(argv[1]); if (val < 0) { - printf("%s: bad debugging value.\n", argv[1]); + fprintf(ttyout, "%s: bad debugging value.\n", argv[1]); code = -1; return; } @@ -901,7 +901,7 @@ setdebug(argc, argv) options |= SO_DEBUG; else options &= ~SO_DEBUG; - printf("Debugging %s (debug=%d).\n", onoff(debug), debug); + fprintf(ttyout, "Debugging %s (debug=%d).\n", onoff(debug), debug); code = debug > 0; } @@ -918,14 +918,14 @@ cd(argc, argv) if ((argc < 2 && !another(&argc, &argv, "remote-directory")) || argc > 2) { - printf("usage: %s remote-directory\n", argv[0]); + fprintf(ttyout, "usage: %s remote-directory\n", argv[0]); code = -1; return; } r = command("CWD %s", argv[1]); if (r == ERROR && code == 500) { if (verbose) - puts("CWD command not recognized, trying XCWD."); + fputs("CWD command not recognized, trying XCWD.\n", ttyout); r = command("XCWD %s", argv[1]); } if (r == COMPLETE) @@ -946,7 +946,7 @@ lcd(argc, argv) if (argc < 2) argc++, argv[1] = home; if (argc != 2) { - printf("usage: %s local-directory\n", argv[0]); + fprintf(ttyout, "usage: %s local-directory\n", argv[0]); code = -1; return; } @@ -960,7 +960,7 @@ lcd(argc, argv) return; } if (getcwd(buf, sizeof(buf)) != NULL) - printf("Local directory now %s\n", buf); + fprintf(ttyout, "Local directory now %s\n", buf); else warn("getcwd: %s", argv[1]); code = 0; @@ -976,7 +976,7 @@ delete(argc, argv) { if ((argc < 2 && !another(&argc, &argv, "remote-file")) || argc > 2) { - printf("usage: %s remote-file\n", argv[0]); + fprintf(ttyout, "usage: %s remote-file\n", argv[0]); code = -1; return; } @@ -996,7 +996,7 @@ mdelete(argc, argv) char *cp; if (argc < 2 && !another(&argc, &argv, "remote-files")) { - printf("usage: %s remote-files\n", argv[0]); + fprintf(ttyout, "usage: %s remote-files\n", argv[0]); code = -1; return; } @@ -1038,7 +1038,7 @@ renamefile(argc, argv) goto usage; if ((argc < 3 && !another(&argc, &argv, "to-name")) || argc > 3) { usage: - printf("usage: %s from-name to-name\n", argv[0]); + fprintf(ttyout, "usage: %s from-name to-name\n", argv[0]); code = -1; return; } @@ -1062,7 +1062,7 @@ ls(argc, argv) if (argc < 3) argc++, argv[2] = "-"; if (argc > 3) { - printf("usage: %s remote-directory local-file\n", argv[0]); + fprintf(ttyout, "usage: %s remote-directory local-file\n", argv[0]); code = -1; return; } @@ -1080,7 +1080,7 @@ ls(argc, argv) recvrequest(cmd, argv[2], argv[1], "w", 0); /* flush results in case commands are coming from a pipe */ - fflush(stdout); + fflush(ttyout); } /* @@ -1101,7 +1101,7 @@ mls(argc, argv) goto usage; if (argc < 3 && !another(&argc, &argv, "local-file")) { usage: - printf("usage: %s remote-files local-file\n", argv[0]); + fprintf(ttyout, "usage: %s remote-files local-file\n", argv[0]); code = -1; return; } @@ -1167,8 +1167,9 @@ shell(argc, argv) if (strcmp(namep, "sh") != 0) shellnam[0] = '+'; if (debug) { - puts(shell); - (void)fflush(stdout); + fputs(shell, ttyout); + fputs("\n", ttyout); + (void)fflush(ttyout); } if (argc > 1) { execl(shell, shellnam, "-c", altarg, (char *)0); @@ -1208,7 +1209,7 @@ user(argc, argv) if (argc < 2) (void)another(&argc, &argv, "username"); if (argc < 2 || argc > 4) { - printf("usage: %s username [password] [account]\n", argv[0]); + fprintf(ttyout, "usage: %s username [password] [account]\n", argv[0]); code = -1; return; } @@ -1220,8 +1221,8 @@ user(argc, argv) } if (n == CONTINUE) { if (argc < 4) { - (void)fputs("Account: ", stdout); - (void)fflush(stdout); + (void)fputs("Account: ", ttyout); + (void)fflush(ttyout); (void)fgets(acct, sizeof(acct) - 1, stdin); acct[strlen(acct) - 1] = '\0'; argv[3] = acct; argc++; @@ -1230,7 +1231,7 @@ user(argc, argv) aflag++; } if (n != COMPLETE) { - puts("Login failed."); + fputs("Login failed.\n", ttyout); return; } if (!aflag && argc == 4) { @@ -1255,7 +1256,7 @@ pwd(argc, argv) */ verbose = 1; if (command("PWD") == ERROR && code == 500) { - puts("PWD command not recognized, trying XPWD."); + fputs("PWD command not recognized, trying XPWD.\n", ttyout); (void)command("XPWD"); } verbose = oldverbose; @@ -1272,7 +1273,7 @@ lpwd(argc, argv) char buf[MAXPATHLEN]; if (getcwd(buf, sizeof(buf)) != NULL) - printf("Local directory %s\n", buf); + fprintf(ttyout, "Local directory %s\n", buf); else warn("getcwd"); code = 0; @@ -1289,13 +1290,13 @@ makedir(argc, argv) if ((argc < 2 && !another(&argc, &argv, "directory-name")) || argc > 2) { - printf("usage: %s directory-name\n", argv[0]); + fprintf(ttyout, "usage: %s directory-name\n", argv[0]); code = -1; return; } if (command("MKD %s", argv[1]) == ERROR && code == 500) { if (verbose) - puts("MKD command not recognized, trying XMKD."); + fputs("MKD command not recognized, trying XMKD.\n", ttyout); (void)command("XMKD %s", argv[1]); } } @@ -1311,13 +1312,13 @@ removedir(argc, argv) if ((argc < 2 && !another(&argc, &argv, "directory-name")) || argc > 2) { - printf("usage: %s directory-name\n", argv[0]); + fprintf(ttyout, "usage: %s directory-name\n", argv[0]); code = -1; return; } if (command("RMD %s", argv[1]) == ERROR && code == 500) { if (verbose) - puts("RMD command not recognized, trying XRMD."); + fputs("RMD command not recognized, trying XRMD.\n", ttyout); (void)command("XRMD %s", argv[1]); } } @@ -1332,7 +1333,7 @@ quote(argc, argv) { if (argc < 2 && !another(&argc, &argv, "command line to send")) { - printf("usage: %s line-to-send\n", argv[0]); + fprintf(ttyout, "usage: %s line-to-send\n", argv[0]); code = -1; return; } @@ -1351,7 +1352,7 @@ site(argc, argv) { if (argc < 2 && !another(&argc, &argv, "arguments to SITE command")) { - printf("usage: %s line-to-send\n", argv[0]); + fprintf(ttyout, "usage: %s line-to-send\n", argv[0]); code = -1; return; } @@ -1399,7 +1400,7 @@ do_chmod(argc, argv) goto usage; if ((argc < 3 && !another(&argc, &argv, "file-name")) || argc > 3) { usage: - printf("usage: %s mode file-name\n", argv[0]); + fprintf(ttyout, "usage: %s mode file-name\n", argv[0]); code = -1; return; } @@ -1495,7 +1496,7 @@ account(argc, argv) char *ap; if (argc > 2) { - printf("usage: %s [password]\n", argv[0]); + fprintf(ttyout, "usage: %s [password]\n", argv[0]); code = -1; return; } @@ -1537,26 +1538,26 @@ doproxy(argc, argv) sig_t oldintr; if (argc < 2 && !another(&argc, &argv, "command")) { - printf("usage: %s command\n", argv[0]); + fprintf(ttyout, "usage: %s command\n", argv[0]); code = -1; return; } c = getcmd(argv[1]); if (c == (struct cmd *) -1) { - puts("?Ambiguous command."); - (void)fflush(stdout); + fputs("?Ambiguous command.\n", ttyout); + (void)fflush(ttyout); code = -1; return; } if (c == 0) { - puts("?Invalid command."); - (void)fflush(stdout); + fputs("?Invalid command.\n", ttyout); + (void)fflush(ttyout); code = -1; return; } if (!c->c_proxy) { - puts("?Invalid proxy command."); - (void)fflush(stdout); + fputs("?Invalid proxy command.\n", ttyout); + (void)fflush(ttyout); code = -1; return; } @@ -1567,8 +1568,8 @@ doproxy(argc, argv) oldintr = signal(SIGINT, proxabort); pswitch(1); if (c->c_conn && !connected) { - puts("Not connected."); - (void)fflush(stdout); + fputs("Not connected.\n", ttyout); + (void)fflush(ttyout); pswitch(0); (void)signal(SIGINT, oldintr); code = -1; @@ -1613,7 +1614,7 @@ setntrans(argc, argv) { if (argc == 1) { ntflag = 0; - puts("Ntrans off."); + fputs("Ntrans off.\n", ttyout); code = ntflag; return; } @@ -1667,12 +1668,12 @@ setnmap(argc, argv) if (argc == 1) { mapflag = 0; - puts("Nmap off."); + fputs("Nmap off.\n", ttyout); code = mapflag; return; } if ((argc < 3 && !another(&argc, &argv, "mapout")) || argc > 3) { - printf("usage: %s [mapin mapout]\n", argv[0]); + fprintf(ttyout, "usage: %s [mapin mapout]\n", argv[0]); code = -1; return; } @@ -1802,8 +1803,8 @@ LOOP: } } if (!*cp2) { - puts( -"nmap: unbalanced brackets."); + fputs( +"nmap: unbalanced brackets.\n", ttyout); return (name); } match = 1; @@ -1816,8 +1817,8 @@ LOOP: } } if (!*cp2) { - puts( -"nmap: unbalanced brackets."); + fputs( +"nmap: unbalanced brackets.\n", ttyout); return (name); } break; @@ -1903,7 +1904,7 @@ cdup(argc, argv) r = command("CDUP"); if (r == ERROR && code == 500) { if (verbose) - puts("CDUP command not recognized, trying XCUP."); + fputs("CDUP command not recognized, trying XCUP.\n", ttyout); r = command("XCUP"); } if (r == COMPLETE) @@ -1918,10 +1919,10 @@ restart(argc, argv) { if (argc != 2) - puts("restart: offset not specified."); + fputs("restart: offset not specified.\n", ttyout); else { restart_point = atol(argv[1]); - printf("Restarting at %qd. Execute get, put or append to" + fprintf(ttyout, "Restarting at %qd. Execute get, put or append to" "initiate transfer\n", restart_point); } } @@ -1945,18 +1946,18 @@ macdef(argc, argv) int c; if (macnum == 16) { - puts("Limit of 16 macros have already been defined."); + fputs("Limit of 16 macros have already been defined.\n", ttyout); code = -1; return; } if ((argc < 2 && !another(&argc, &argv, "macro name")) || argc > 2) { - printf("usage: %s macro_name\n", argv[0]); + fprintf(ttyout, "usage: %s macro_name\n", argv[0]); code = -1; return; } if (interactive) - puts( -"Enter macro line by line, terminating it with a null line."); + fputs( +"Enter macro line by line, terminating it with a null line.\n", ttyout); (void)strncpy(macros[macnum].mac_name, argv[1], sizeof(macros[macnum].mac_name) - 1); macros[macnum].mac_name[sizeof(macros[macnum].mac_name) - 1] = '\0'; @@ -1967,7 +1968,7 @@ macdef(argc, argv) tmp = macros[macnum].mac_start; while (tmp != macbuf+4096) { if ((c = getchar()) == EOF) { - puts("macdef: end of file encountered."); + fputs("macdef: end of file encountered.\n", ttyout); code = -1; return; } @@ -1990,7 +1991,7 @@ macdef(argc, argv) while ((c = getchar()) != '\n' && c != EOF) /* LOOP */; if (c == EOF || getchar() == '\n') { - puts("Macro not defined - 4K buffer exceeded."); + fputs("Macro not defined - 4K buffer exceeded.\n", ttyout); code = -1; return; } @@ -2008,13 +2009,13 @@ sizecmd(argc, argv) off_t size; if ((argc < 2 && !another(&argc, &argv, "filename")) || argc > 2) { - printf("usage: %s filename\n", argv[0]); + fprintf(ttyout, "usage: %s filename\n", argv[0]); code = -1; return; } size = remotesize(argv[1], 1); if (size != -1) - printf("%s\t%qd\n", argv[1], size); + fprintf(ttyout, "%s\t%qd\n", argv[1], size); code = size; } @@ -2029,13 +2030,13 @@ modtime(argc, argv) time_t mtime; if ((argc < 2 && !another(&argc, &argv, "filename")) || argc > 2) { - printf("usage: %s filename\n", argv[0]); + fprintf(ttyout, "usage: %s filename\n", argv[0]); code = -1; return; } mtime = remotemodtime(argv[1], 1); if (mtime != -1) - printf("%s\t%s", argv[1], asctime(localtime(&mtime))); + fprintf(ttyout, "%s\t%s", argv[1], asctime(localtime(&mtime))); code = mtime; } @@ -2061,7 +2062,7 @@ newer(argc, argv) { if (getit(argc, argv, -1, "w")) - printf("Local file \"%s\" is newer than remote file \"%s\".\n", + fprintf(ttyout, "Local file \"%s\" is newer than remote file \"%s\".\n", argv[2], argv[1]); } @@ -2077,7 +2078,7 @@ page(argc, argv) char *p, *pager; if ((argc < 2 && !another(&argc, &argv, "filename")) || argc > 2) { - printf("usage: %s filename\n", argv[0]); + fprintf(ttyout, "usage: %s filename\n", argv[0]); code = -1; return; } diff --git a/usr.bin/ftp/complete.c b/usr.bin/ftp/complete.c index 84678420633..83996b12473 100644 --- a/usr.bin/ftp/complete.c +++ b/usr.bin/ftp/complete.c @@ -1,4 +1,4 @@ -/* $OpenBSD: complete.c,v 1.6 1997/04/16 05:02:43 millert Exp $ */ +/* $OpenBSD: complete.c,v 1.7 1997/04/23 20:33:00 deraadt Exp $ */ /* $NetBSD: complete.c,v 1.7 1997/04/14 09:09:16 lukem Exp $ */ /*- @@ -39,7 +39,7 @@ #ifndef SMALL #ifndef lint -static char rcsid[] = "$OpenBSD: complete.c,v 1.6 1997/04/16 05:02:43 millert Exp $"; +static char rcsid[] = "$OpenBSD: complete.c,v 1.7 1997/04/23 20:33:00 deraadt Exp $"; #endif /* not lint */ /* @@ -118,7 +118,7 @@ complete_ambiguous(word, list, words) } } - putchar('\n'); + putc('\n', ttyout); qsort(words->sl_str, words->sl_cur, sizeof(char *), comparstr); list_vertical(words); return (CC_REDISPLAY); @@ -285,7 +285,7 @@ complete_remote(word, list) sl_add(dirlist, tcp); } if (emesg != NULL) { - printf("\n%s\n", emesg); + fprintf(ttyout, "\n%s\n", emesg); return (CC_REDISPLAY); } (void)strcpy(lastdir, dir); @@ -366,7 +366,7 @@ complete(el, ch) case 'r': /* remote complete */ case 'R': if (connected != -1) { - puts("\nMust be logged in to complete."); + fputs("\nMust be logged in to complete.\n", ttyout); return (CC_REDISPLAY); } return (complete_remote(word, dolist)); diff --git a/usr.bin/ftp/domacro.c b/usr.bin/ftp/domacro.c index dd16c312bc6..b00d82c4489 100644 --- a/usr.bin/ftp/domacro.c +++ b/usr.bin/ftp/domacro.c @@ -1,4 +1,4 @@ -/* $OpenBSD: domacro.c,v 1.5 1997/03/14 04:32:13 millert Exp $ */ +/* $OpenBSD: domacro.c,v 1.6 1997/04/23 20:33:02 deraadt Exp $ */ /* $NetBSD: domacro.c,v 1.9 1997/03/13 06:23:14 lukem Exp $ */ /* @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)domacro.c 8.3 (Berkeley) 4/2/94"; #else -static char rcsid[] = "$OpenBSD: domacro.c,v 1.5 1997/03/14 04:32:13 millert Exp $"; +static char rcsid[] = "$OpenBSD: domacro.c,v 1.6 1997/04/23 20:33:02 deraadt Exp $"; #endif #endif /* not lint */ @@ -59,7 +59,7 @@ domacro(argc, argv) struct cmd *c; if (argc < 2 && !another(&argc, &argv, "macro name")) { - printf("usage: %s macro_name\n", argv[0]); + fprintf(ttyout, "usage: %s macro_name\n", argv[0]); code = -1; return; } @@ -69,7 +69,7 @@ domacro(argc, argv) } } if (i == macnum) { - printf("'%s' macro not found.\n", argv[1]); + fprintf(ttyout, "'%s' macro not found.\n", argv[1]); code = -1; return; } @@ -121,23 +121,25 @@ TOP: makeargv(); c = getcmd(margv[0]); if (c == (struct cmd *)-1) { - puts("?Ambiguous command."); + fputs("?Ambiguous command.\n", ttyout); code = -1; } else if (c == 0) { - puts("?Invalid command."); + fputs("?Invalid command.\n", ttyout); code = -1; } else if (c->c_conn && !connected) { - puts("Not connected."); + fputs("Not connected.\n", ttyout); code = -1; } else { - if (verbose) - puts(line); + if (verbose) { + fputs(line, ttyout); + fputs("\n", ttyout); + } (*c->c_handler)(margc, margv); if (bell && c->c_bell) { - (void)putchar('\007'); + (void)putc('\007', ttyout); } (void)strcpy(line, line2); makeargv(); diff --git a/usr.bin/ftp/extern.h b/usr.bin/ftp/extern.h index 5d9b72fec4e..43861ae48d3 100644 --- a/usr.bin/ftp/extern.h +++ b/usr.bin/ftp/extern.h @@ -1,4 +1,4 @@ -/* $OpenBSD: extern.h,v 1.12 1997/04/16 05:02:46 millert Exp $ */ +/* $OpenBSD: extern.h,v 1.13 1997/04/23 20:33:04 deraadt Exp $ */ /* $NetBSD: extern.h,v 1.15 1997/04/14 09:09:17 lukem Exp $ */ /*- @@ -46,7 +46,7 @@ void aborthttp __P((int)); void account __P((int, char **)); void alarmtimer __P((int)); int another __P((int *, char ***, const char *)); -int auto_fetch __P((int, char **)); +int auto_fetch __P((int, char **, int)); void blkfree __P((char **)); void cd __P((int, char **)); void cdup __P((int, char **)); diff --git a/usr.bin/ftp/fetch.c b/usr.bin/ftp/fetch.c index b875b4cfc34..e80f2c0e702 100644 --- a/usr.bin/ftp/fetch.c +++ b/usr.bin/ftp/fetch.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fetch.c,v 1.9 1997/04/18 18:56:49 millert Exp $ */ +/* $OpenBSD: fetch.c,v 1.10 1997/04/23 20:33:06 deraadt Exp $ */ /* $NetBSD: fetch.c,v 1.6 1997/04/14 09:09:19 lukem Exp $ */ /*- @@ -38,7 +38,7 @@ */ #ifndef lint -static char rcsid[] = "$OpenBSD: fetch.c,v 1.9 1997/04/18 18:56:49 millert Exp $"; +static char rcsid[] = "$OpenBSD: fetch.c,v 1.10 1997/04/23 20:33:06 deraadt Exp $"; #endif /* not lint */ /* @@ -82,9 +82,10 @@ jmp_buf httpabort; * Returns -1 on failure, 0 on success */ int -url_get(line, proxyenv) +url_get(line, proxyenv, fd) char *line; char *proxyenv; + int fd; { struct sockaddr_in sin; int i, out, port, s; @@ -145,7 +146,7 @@ url_get(line, proxyenv) *portnum++ = '\0'; if (debug) - printf("host %s, port %s, path %s, save as %s.\n", + fprintf(ttyout, "host %s, port %s, path %s, save as %s.\n", host, portnum, path, savefile); memset(&sin, 0, sizeof(sin)); @@ -198,9 +199,10 @@ url_get(line, proxyenv) * status of "200". Proxy requests don't want leading /. */ if (!proxy) - printf("Requesting %s:%d/%s\n", line, ntohs(port), path); + fprintf(ttyout, "Requesting %s:%d/%s\n", line, ntohs(port), + path); else - printf("Requesting %s (via %s)\n", line, proxyenv); + fprintf(ttyout, "Requesting %s (via %s)\n", line, proxyenv); snprintf(buf, sizeof(buf), "GET %s%s HTTP/1.0\n\n", proxy ? "" : "/", path); buflen = strlen(buf); @@ -264,11 +266,14 @@ url_get(line, proxyenv) goto improper; /* Open the output file. */ - out = open(savefile, O_CREAT | O_WRONLY | O_TRUNC, 0666); - if (out < 0) { - warn("Can't open %s", savefile); - goto cleanup_url_get; - } + if (fd == -1) { + out = open(savefile, O_CREAT | O_WRONLY | O_TRUNC, 0666); + if (out < 0) { + warn("Can't open %s", savefile); + goto cleanup_url_get; + } + } else + out = fd; /* Trap signals */ oldintr = NULL; @@ -297,17 +302,17 @@ url_get(line, proxyenv) } if (hash && !progress) { while (bytes >= hashbytes) { - (void)putchar('#'); + (void)putc('#', ttyout); hashbytes += mark; } - (void)fflush(stdout); + (void)fflush(ttyout); } } if (hash && !progress && bytes > 0) { if (bytes < mark) - (void)putchar('#'); - (void)putchar('\n'); - (void)fflush(stdout); + (void)putc('#', ttyout); + (void)putc('\n', ttyout); + (void)fflush(ttyout); } if (len != 0) { warn("Reading from socket"); @@ -315,11 +320,12 @@ url_get(line, proxyenv) } progressmeter(1); if (verbose) - puts("Successfully retrieved file."); + fputs("Successfully retrieved file.\n", ttyout); (void)signal(SIGINT, oldintr); close(s); - close(out); + if (fd != -1) + close(out); if (proxy) free(proxy); return (0); @@ -343,8 +349,8 @@ aborthttp(notused) { alarmtimer(0); - puts("\nhttp fetch aborted."); - (void)fflush(stdout); + fputs("\nhttp fetch aborted.\n", ttyout); + (void)fflush(ttyout); longjmp(httpabort, 1); } @@ -363,9 +369,10 @@ aborthttp(notused) * Otherwise, 0 is returned if all files retrieved successfully. */ int -auto_fetch(argc, argv) +auto_fetch(argc, argv, fd) int argc; char *argv[]; + int fd; { static char lasthost[MAXHOSTNAMELEN]; char *xargv[5]; @@ -374,7 +381,7 @@ auto_fetch(argc, argv) char *ftpproxy, *httpproxy; int rval, xargc, argpos; int dirhasglob, filehasglob; - char rempath[MAXPATHLEN]; + char rempath[MAXPATHLEN], fakedev[MAXPATHLEN]; argpos = 0; @@ -408,7 +415,7 @@ auto_fetch(argc, argv) * Try HTTP URL-style arguments first. */ if (strncasecmp(line, HTTP_URL, sizeof(HTTP_URL) - 1) == 0) { - if (url_get(line, httpproxy) == -1) + if (url_get(line, httpproxy, fd) == -1) rval = argpos + 1; continue; } @@ -421,7 +428,7 @@ auto_fetch(argc, argv) host = line; if (strncasecmp(line, FTP_URL, sizeof(FTP_URL) - 1) == 0) { if (ftpproxy) { - if (url_get(line, ftpproxy) == -1) + if (url_get(line, ftpproxy, fd) == -1) rval = argpos + 1; continue; } @@ -487,7 +494,7 @@ parsed_url: } } if (debug) - printf("user %s:%s host %s port %s dir %s file %s\n", + fprintf(ttyout, "user %s:%s host %s port %s dir %s file %s\n", user, pass, host, portnum, dir, file); /* @@ -562,7 +569,7 @@ parsed_url: } if (!verbose) - printf("Retrieving %s/%s\n", dir ? dir : "", file); + fprintf(ttyout, "Retrieving %s/%s\n", dir ? dir : "", file); if (dirhasglob) { snprintf(rempath, sizeof(rempath), "%s/%s", dir, file); @@ -570,6 +577,7 @@ parsed_url: } /* Fetch the file(s). */ + xargc = 2; xargv[0] = "get"; xargv[1] = file; xargv[2] = NULL; @@ -579,10 +587,16 @@ parsed_url: ointeractive = interactive; interactive = 0; xargv[0] = "mget"; - mget(2, xargv); + mget(xargc, xargv); interactive = ointeractive; - } else - get(2, xargv); + } else { + if (fd != -1) { + xargv[2] = "-"; + xargc++; + } + xargv[3] = NULL; + get(xargc, xargv); + } if ((code / 100) != COMPLETE) rval = argpos + 1; diff --git a/usr.bin/ftp/ftp.1 b/usr.bin/ftp/ftp.1 index b64dffd452d..0c1cb0d53fb 100644 --- a/usr.bin/ftp/ftp.1 +++ b/usr.bin/ftp/ftp.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: ftp.1,v 1.11 1997/04/16 05:02:50 millert Exp $ +.\" $OpenBSD: ftp.1,v 1.12 1997/04/23 20:33:09 deraadt Exp $ .\" $NetBSD: ftp.1,v 1.20 1997/04/14 09:09:20 lukem Exp $ .\" .\" Copyright (c) 1985, 1989, 1990, 1993 @@ -1059,7 +1059,10 @@ then the equivalent of .Ic "mget file" is performed. .Pp -If the directory component of +If standard output is redirected to a non-tty device, ftp will write +the data file out to standard output. This can be used to pipe data +directly to another process. +Otherwise if the directory component of .Ic file contains no globbing characters, it is stored in the current directory as the diff --git a/usr.bin/ftp/ftp.c b/usr.bin/ftp/ftp.c index 044b3eab9b5..8a4d968f63d 100644 --- a/usr.bin/ftp/ftp.c +++ b/usr.bin/ftp/ftp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ftp.c,v 1.17 1997/04/16 05:02:54 millert Exp $ */ +/* $OpenBSD: ftp.c,v 1.18 1997/04/23 20:33:13 deraadt Exp $ */ /* $NetBSD: ftp.c,v 1.25 1997/04/14 09:09:22 lukem Exp $ */ /* @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)ftp.c 8.6 (Berkeley) 10/27/94"; #else -static char rcsid[] = "$OpenBSD: ftp.c,v 1.17 1997/04/16 05:02:54 millert Exp $"; +static char rcsid[] = "$OpenBSD: ftp.c,v 1.18 1997/04/23 20:33:13 deraadt Exp $"; #endif #endif /* not lint */ @@ -129,7 +129,7 @@ hookup(host, port) hp->h_addr_list++; memcpy(&hisctladdr.sin_addr, hp->h_addr_list[0], hp->h_length); - printf("Trying %s...\n", inet_ntoa(hisctladdr.sin_addr)); + fprintf(ttyout, "Trying %s...\n", inet_ntoa(hisctladdr.sin_addr)); (void)close(s); s = socket(hisctladdr.sin_family, SOCK_STREAM, 0); if (s < 0) { @@ -166,7 +166,7 @@ hookup(host, port) goto bad; } if (verbose) - printf("Connected to %s.\n", hostname); + fprintf(ttyout, "Connected to %s.\n", hostname); if (getreply(0) > 2) { /* read startup message from server */ if (cin) (void)fclose(cin); @@ -198,8 +198,8 @@ cmdabort(notused) { alarmtimer(0); - putchar('\n'); - (void)fflush(stdout); + putc('\n', ttyout); + (void)fflush(ttyout); abrtflag++; if (ptflag) longjmp(ptabort, 1); @@ -223,7 +223,7 @@ command(va_alist) abrtflag = 0; if (debug) { - fputs("---> ", stdout); + fputs("---> ", ttyout); #ifdef __STDC__ va_start(ap, fmt); #else @@ -231,14 +231,14 @@ command(va_alist) fmt = va_arg(ap, const char *); #endif if (strncmp("PASS ", fmt, 5) == 0) - fputs("PASS XXXX", stdout); + fputs("PASS XXXX", ttyout); else if (strncmp("ACCT ", fmt, 5) == 0) - fputs("ACCT XXXX", stdout); + fputs("ACCT XXXX", ttyout); else vprintf(fmt, ap); va_end(ap); - putchar('\n'); - (void)fflush(stdout); + putc('\n', ttyout); + (void)fflush(ttyout); } if (cout == NULL) { warnx("No control connection for command."); @@ -311,9 +311,9 @@ getreply(expecteof) } lostpeer(); if (verbose) { - puts( -"421 Service not available, remote server has closed connection."); - (void)fflush(stdout); + fputs( +"421 Service not available, remote server has closed connection.\n", ttyout); + (void)fflush(ttyout); } code = 421; return (4); @@ -323,8 +323,8 @@ getreply(expecteof) (n < '5' || !retry_connect)) { if (proxflag && (dig == 1 || (dig == 5 && verbose == 0))) - printf("%s:", hostname); - (void)putchar(c); + fprintf(ttyout, "%s:", hostname); + (void)putc(c, ttyout); } if (dig < 4 && isdigit(c)) code = code * 10 + (c - '0'); @@ -352,8 +352,8 @@ getreply(expecteof) } if (verbose > 0 || ((verbose > -1 && n == '5') && (n < '5' || !retry_connect))) { - (void)putchar(c); - (void)fflush (stdout); + (void)putc(c, ttyout); + (void)fflush (ttyout); } if (line == 0) { size_t len = cp - current_line; @@ -403,8 +403,8 @@ abortsend(notused) alarmtimer(0); mflag = 0; abrtflag = 0; - puts("\nsend aborted\nwaiting for remote to finish abort."); - (void)fflush(stdout); + fputs("\nsend aborted\nwaiting for remote to finish abort.\n", ttyout); + (void)fflush(ttyout); longjmp(sendabort, 1); } @@ -429,9 +429,9 @@ sendrequest(cmd, local, remote, printnames) oprogress = progress; if (verbose && printnames) { if (local && *local != '-') - printf("local: %s ", local); + fprintf(ttyout, "local: %s ", local); if (remote) - printf("remote: %s\n", remote); + fprintf(ttyout, "remote: %s\n", remote); } if (proxy) { proxtrans(cmd, local, remote); @@ -492,7 +492,7 @@ sendrequest(cmd, local, remote, printnames) closefunc = fclose; if (fstat(fileno(fin), &st) < 0 || (st.st_mode & S_IFMT) != S_IFREG) { - printf("%s: not a plain file.\n", local); + fprintf(ttyout, "%s: not a plain file.\n", local); (void)signal(SIGINT, oldintr); (void)signal(SIGINFO, oldinti); fclose(fin); @@ -587,17 +587,17 @@ sendrequest(cmd, local, remote, printnames) break; if (hash && (!progress || filesize < 0) ) { while (bytes >= hashbytes) { - (void)putchar('#'); + (void)putc('#', ttyout); hashbytes += mark; } - (void)fflush(stdout); + (void)fflush(ttyout); } } if (hash && (!progress || filesize < 0) && bytes > 0) { if (bytes < mark) - (void)putchar('#'); - (void)putchar('\n'); - (void)fflush(stdout); + (void)putc('#', ttyout); + (void)putc('\n', ttyout); + (void)fflush(ttyout); } if (c < 0) warn("local: %s", local); @@ -613,8 +613,8 @@ sendrequest(cmd, local, remote, printnames) if (c == '\n') { while (hash && (!progress || filesize < 0) && (bytes >= hashbytes)) { - (void)putchar('#'); - (void)fflush(stdout); + (void)putc('#', ttyout); + (void)fflush(ttyout); hashbytes += mark; } if (ferror(dout)) @@ -633,9 +633,9 @@ sendrequest(cmd, local, remote, printnames) } if (hash && (!progress || filesize < 0)) { if (bytes < hashbytes) - (void)putchar('#'); - (void)putchar('\n'); - (void)fflush(stdout); + (void)putc('#', ttyout); + (void)putc('\n', ttyout); + (void)fflush(ttyout); } if (ferror(fin)) warn("local: %s", local); @@ -693,8 +693,8 @@ abortrecv(notused) alarmtimer(0); mflag = 0; abrtflag = 0; - puts("\nreceive aborted\nwaiting for remote to finish abort."); - (void)fflush(stdout); + fputs("\nreceive aborted\nwaiting for remote to finish abort.\n", ttyout); + (void)fflush(ttyout); longjmp(recvabort, 1); } @@ -724,9 +724,9 @@ recvrequest(cmd, local, remote, lmode, printnames) is_retr = strcmp(cmd, "RETR") == 0; if (is_retr && verbose && printnames) { if (local && *local != '-') - printf("local: %s ", local); + fprintf(ttyout, "local: %s ", local); if (remote) - printf("remote: %s\n", remote); + fprintf(ttyout, "remote: %s\n", remote); } if (proxy && is_retr) { proxtrans(cmd, local, remote); @@ -896,17 +896,17 @@ recvrequest(cmd, local, remote, lmode, printnames) bytes += c; if (hash && (!progress || filesize < 0)) { while (bytes >= hashbytes) { - (void)putchar('#'); + (void)putc('#', ttyout); hashbytes += mark; } - (void)fflush(stdout); + (void)fflush(ttyout); } } if (hash && (!progress || filesize < 0) && bytes > 0) { if (bytes < mark) - (void)putchar('#'); - (void)putchar('\n'); - (void)fflush(stdout); + (void)putc('#', ttyout); + (void)putc('\n', ttyout); + (void)fflush(ttyout); } if (c < 0) { if (errno != EPIPE) @@ -950,8 +950,8 @@ done: while (c == '\r') { while (hash && (!progress || filesize < 0) && (bytes >= hashbytes)) { - (void)putchar('#'); - (void)fflush(stdout); + (void)putc('#', ttyout); + (void)fflush(ttyout); hashbytes += mark; } bytes++; @@ -975,13 +975,13 @@ break2: if (bare_lfs) { printf( "WARNING! %d bare linefeeds received in ASCII mode.\n", bare_lfs); - puts("File may not have transferred correctly."); + fputs("File may not have transferred correctly.\n", ttyout); } if (hash && (!progress || filesize < 0)) { if (bytes < hashbytes) - (void)putchar('#'); - (void)putchar('\n'); - (void)fflush(stdout); + (void)putc('#', ttyout); + (void)putc('\n', ttyout); + (void)fflush(ttyout); } if (ferror(din)) { if (errno != EPIPE) @@ -1077,7 +1077,7 @@ initconn() sizeof(on)) < 0) warn("setsockopt (ignored)"); if (command("PASV") != COMPLETE) { - puts("Passive mode refused."); + fputs("Passive mode refused.\n", ttyout); goto bad; } @@ -1091,8 +1091,8 @@ initconn() if (sscanf(pasv, "%d,%d,%d,%d,%d,%d", &a0, &a1, &a2, &a3, &p0, &p1) != 6) { - puts( -"Passive mode address scan failure. Shouldn't happen!"); + fputs( +"Passive mode address scan failure. Shouldn't happen!\n", ttyout); goto bad; } @@ -1330,8 +1330,8 @@ abortpt(notused) { alarmtimer(0); - putchar('\n'); - (void)fflush(stdout); + putc('\n', ttyout); + (void)fflush(ttyout); ptabflg++; mflag = 0; abrtflag = 0; @@ -1360,12 +1360,13 @@ proxtrans(cmd, local, remote) if (curtype != prox_type) changetype(prox_type, 1); if (command("PASV") != COMPLETE) { - puts("proxy server does not support third party transfers."); + fputs("proxy server does not support third party transfers.\n", + ttyout); return; } pswitch(0); if (!connected) { - puts("No primary connection."); + fputs("No primary connection.\n", ttyout); pswitch(1); code = -1; return; @@ -1396,7 +1397,7 @@ proxtrans(cmd, local, remote) (void)signal(SIGINT, oldintr); pswitch(1); ptflag = 0; - printf("local: %s remote: %s\n", local, remote); + fprintf(ttyout, "local: %s remote: %s\n", local, remote); return; abort: (void)signal(SIGINT, SIG_IGN); @@ -1502,7 +1503,7 @@ gunique(local) *cp++ = '.'; while (!d) { if (++count == 100) { - puts("runique: can't find unique file name."); + fputs("runique: can't find unique file name.\n", ttyout); return ((char *) 0); } *cp++ = ext; diff --git a/usr.bin/ftp/ftp_var.h b/usr.bin/ftp/ftp_var.h index 8e875ff1947..747c4d5a8b6 100644 --- a/usr.bin/ftp/ftp_var.h +++ b/usr.bin/ftp/ftp_var.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ftp_var.h,v 1.11 1997/04/16 05:02:57 millert Exp $ */ +/* $OpenBSD: ftp_var.h,v 1.12 1997/04/23 20:33:16 deraadt Exp $ */ /* $NetBSD: ftp_var.h,v 1.16 1997/04/14 09:09:23 lukem Exp $ */ /* @@ -166,3 +166,5 @@ struct macel { int macnum; /* number of defined macros */ struct macel macros[16]; char macbuf[4096]; + +FILE *ttyout; /* stdout or stderr, depending on interactive */ diff --git a/usr.bin/ftp/main.c b/usr.bin/ftp/main.c index 7601da8358a..47ca64ad8e8 100644 --- a/usr.bin/ftp/main.c +++ b/usr.bin/ftp/main.c @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.29 1997/04/11 23:14:04 millert Exp $ */ +/* $OpenBSD: main.c,v 1.30 1997/04/23 20:33:19 deraadt Exp $ */ /* $NetBSD: main.c,v 1.21 1997/04/05 03:27:39 lukem Exp $ */ /* @@ -44,7 +44,7 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 10/9/94"; #else -static char rcsid[] = "$OpenBSD: main.c,v 1.29 1997/04/11 23:14:04 millert Exp $"; +static char rcsid[] = "$OpenBSD: main.c,v 1.30 1997/04/23 20:33:19 deraadt Exp $"; #endif #endif /* not lint */ @@ -75,6 +75,7 @@ main(argc, argv) struct passwd *pw = NULL; char *cp, homedir[MAXPATHLEN]; int dumb_terminal = 0; + int outfd = -1; sp = getservbyname("ftp", "tcp"); if (sp == 0) @@ -116,8 +117,14 @@ main(argc, argv) editing = 1; /* editing mode on if from a tty */ #endif } - if (isatty(fileno(stdout)) && !dumb_terminal) + + ttyout = stdout; + if (isatty(fileno(ttyout)) && !dumb_terminal) progress = 1; /* progress bar on if going to a tty */ + else { + ttyout = stderr; + outfd = fileno(stdout); + } while ((ch = getopt(argc, argv, "adeginpPr:tvV")) != -1) { switch (ch) { @@ -210,7 +217,7 @@ main(argc, argv) if (argc > 0) { if (strchr(argv[0], ':') != NULL) { anonftp = 1; /* Handle "automatic" transfers. */ - rval = auto_fetch(argc, argv); + rval = auto_fetch(argc, argv, outfd); if (rval >= 0) /* -1 == connected and cd-ed */ exit(rval); } else { @@ -231,7 +238,7 @@ main(argc, argv) break; if (!connected) { macnum = 0; - puts("Retrying..."); + fputs("Retrying...\n", ttyout); sleep(retry_connect); } } while (!connected); @@ -314,14 +321,14 @@ cmdscanner(top) && !editing #endif /* !SMALL */ ) - (void)putchar('\n'); + (void)putc('\n', ttyout); for (;;) { #ifndef SMALL if (!editing) { #endif /* !SMALL */ if (fromatty) { - fputs(prompt(), stdout); - (void)fflush(stdout); + fputs(prompt(), ttyout); + (void)fflush(ttyout); } if (fgets(line, sizeof(line), stdin) == NULL) quit(0, 0); @@ -333,7 +340,7 @@ cmdscanner(top) break; line[num] = '\0'; } else if (num == sizeof(line) - 2) { - puts("sorry, input line too long."); + fputs("sorry, input line too long.\n", ttyout); while ((num = getchar()) != '\n' && num != EOF) /* void */; break; @@ -349,7 +356,7 @@ cmdscanner(top) if (num == 0) break; } else if (num >= sizeof(line)) { - puts("sorry, input line too long."); + fputs("sorry, input line too long.\n", ttyout); break; } memcpy(line, buf, num); @@ -363,7 +370,7 @@ cmdscanner(top) continue; c = getcmd(margv[0]); if (c == (struct cmd *)-1) { - puts("?Ambiguous command."); + fputs("?Ambiguous command.\n", ttyout); continue; } if (c == 0) { @@ -375,17 +382,17 @@ cmdscanner(top) */ if (el_parse(el, margc, margv) != 0) #endif /* !SMALL */ - puts("?Invalid command."); + fputs("?Invalid command.\n", ttyout); continue; } if (c->c_conn && !connected) { - puts("Not connected."); + fputs("Not connected.\n", ttyout); continue; } confirmrest = 0; (*c->c_handler)(margc, margv); if (bell && c->c_bell) - (void)putchar('\007'); + (void)putc('\007', ttyout); if (c->c_handler != help) break; } @@ -617,7 +624,7 @@ help(argc, argv) StringList *buf; buf = sl_init(); - printf("%sommands may be abbreviated. Commands are:\n\n", + fprintf(ttyout, "%sommands may be abbreviated. Commands are:\n\n", proxy ? "Proxy c" : "C"); for (c = cmdtab; c < &cmdtab[NCMDS]; c++) if (c->c_name && (!proxy || c->c_proxy)) @@ -635,11 +642,11 @@ help(argc, argv) arg = *++argv; c = getcmd(arg); if (c == (struct cmd *)-1) - printf("?Ambiguous help command %s\n", arg); + fprintf(ttyout, "?Ambiguous help command %s\n", arg); else if (c == (struct cmd *)0) - printf("?Invalid help command %s\n", arg); + fprintf(ttyout, "?Invalid help command %s\n", arg); else - printf("%-*s\t%s\n", HELPINDENT, + fprintf(ttyout, "%-*s\t%s\n", HELPINDENT, c->c_name, c->c_help); } } diff --git a/usr.bin/ftp/ruserpass.c b/usr.bin/ftp/ruserpass.c index 54784131553..fd9d5789a1d 100644 --- a/usr.bin/ftp/ruserpass.c +++ b/usr.bin/ftp/ruserpass.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ruserpass.c,v 1.7 1997/04/10 00:17:10 millert Exp $ */ +/* $OpenBSD: ruserpass.c,v 1.8 1997/04/23 20:33:21 deraadt Exp $ */ /* $NetBSD: ruserpass.c,v 1.13 1997/04/01 14:20:34 mrg Exp $ */ /* @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)ruserpass.c 8.4 (Berkeley) 4/27/95"; #else -static char rcsid[] = "$OpenBSD: ruserpass.c,v 1.7 1997/04/10 00:17:10 millert Exp $"; +static char rcsid[] = "$OpenBSD: ruserpass.c,v 1.8 1997/04/23 20:33:21 deraadt Exp $"; #endif #endif /* not lint */ @@ -191,12 +191,12 @@ next: if (c != ' ' && c != '\t') break; if (c == EOF || c == '\n') { - puts("Missing macdef name argument."); + fputs("Missing macdef name argument.\n", ttyout); goto bad; } if (macnum == 16) { - puts( -"Limit of 16 macros have already been defined."); + fputs( +"Limit of 16 macros have already been defined.\n", ttyout); goto bad; } tmp = macros[macnum].mac_name; @@ -206,8 +206,8 @@ next: *tmp++ = c; } if (c == EOF) { - puts( -"Macro definition missing null line terminator."); + fputs( +"Macro definition missing null line terminator.\n", ttyout); goto bad; } *tmp = '\0'; @@ -215,8 +215,8 @@ next: while ((c=getc(cfile)) != EOF && c != '\n'); } if (c == EOF) { - puts( -"Macro definition missing null line terminator."); + fputs( +"Macro definition missing null line terminator.\n", ttyout); goto bad; } if (macnum == 0) { @@ -229,8 +229,8 @@ next: tmp = macros[macnum].mac_start; while (tmp != macbuf + 4096) { if ((c=getc(cfile)) == EOF) { - puts( -"Macro definition missing null line terminator."); + fputs( +"Macro definition missing null line terminator.\n", ttyout); goto bad; } *tmp = c; @@ -244,7 +244,7 @@ next: tmp++; } if (tmp == macbuf + 4096) { - puts("4K macro buffer exceeded."); + fputs("4K macro buffer exceeded.\n", ttyout); goto bad; } break; diff --git a/usr.bin/ftp/util.c b/usr.bin/ftp/util.c index a591aefcd82..e379c882d9e 100644 --- a/usr.bin/ftp/util.c +++ b/usr.bin/ftp/util.c @@ -1,4 +1,4 @@ -/* $OpenBSD: util.c,v 1.6 1997/04/16 05:02:59 millert Exp $ */ +/* $OpenBSD: util.c,v 1.7 1997/04/23 20:33:24 deraadt Exp $ */ /* $NetBSD: util.c,v 1.7 1997/04/14 09:09:24 lukem Exp $ */ /* @@ -35,7 +35,7 @@ */ #ifndef lint -static char rcsid[] = "$OpenBSD: util.c,v 1.6 1997/04/16 05:02:59 millert Exp $"; +static char rcsid[] = "$OpenBSD: util.c,v 1.7 1997/04/23 20:33:24 deraadt Exp $"; #endif /* not lint */ /* @@ -74,7 +74,7 @@ setpeer(argc, argv) short port; if (connected) { - printf("Already connected to %s, use close first.\n", + fprintf(ttyout, "Already connected to %s, use close first.\n", hostname); code = -1; return; @@ -82,7 +82,7 @@ setpeer(argc, argv) if (argc < 2) (void)another(&argc, &argv, "to"); if (argc < 2 || argc > 3) { - printf("usage: %s host-name [port]\n", argv[0]); + fprintf(ttyout, "usage: %s host-name [port]\n", argv[0]); code = -1; return; } @@ -90,8 +90,8 @@ setpeer(argc, argv) if (argc > 2) { port = atoi(argv[2]); if (port <= 0) { - printf("%s: bad port number '%s'.\n", argv[1], argv[2]); - printf("usage: %s host-name [port]\n", argv[0]); + fprintf(ttyout, "%s: bad port number '%s'.\n", argv[1], argv[2]); + fprintf(ttyout, "usage: %s host-name [port]\n", argv[0]); code = -1; return; } @@ -135,7 +135,7 @@ setpeer(argc, argv) *cp = '\0'; } - printf("Remote system type is %s.\n", reply_string + 4); + fprintf(ttyout, "Remote system type is %s.\n", reply_string + 4); if (cp) *cp = c; } @@ -153,8 +153,8 @@ setpeer(argc, argv) type = 0; (void)strcpy(typename, "binary"); if (overbose) - printf("Using %s mode to transfer files.\n", - typename); + fprintf(ttyout, "Using %s mode to transfer files.\n", + typename); } else { if (proxy) unix_proxy = 0; @@ -162,8 +162,9 @@ setpeer(argc, argv) unix_server = 0; if (overbose && !strncmp(reply_string, "215 TOPS20", 10)) - puts( -"Remember to set tenex mode when transferring binary files from this machine."); + fputs( +"Remember to set tenex mode when transferring binary files from this machine.\n", + ttyout); } verbose = overbose; #endif /* unix || BSD */ @@ -232,9 +233,9 @@ login(host, user, pass) myname = pp->pw_name; } if (myname) - printf("Name (%s:%s): ", host, myname); + fprintf(ttyout, "Name (%s:%s): ", host, myname); else - printf("Name (%s): ", host); + fprintf(ttyout, "Name (%s): ", host); (void)fgets(tmp, sizeof(tmp) - 1, stdin); tmp[strlen(tmp) - 1] = '\0'; if (*tmp == '\0') @@ -288,10 +289,10 @@ another(pargc, pargv, prompt) int len = strlen(line), ret; if (len >= sizeof(line) - 3) { - puts("sorry, arguments too long."); + fputs("sorry, arguments too long.\n", ttyout); intr(); } - printf("(%s) ", prompt); + fprintf(ttyout, "(%s) ", prompt); line[len++] = ' '; if (fgets(&line[len], sizeof(line) - len, stdin) == NULL) intr(); @@ -382,7 +383,8 @@ remglob(argv, doswitch, errbuf) (void)unlink(temp); if (ftemp == NULL) { if (errbuf == NULL) - puts("can't find list of remote files, oops."); + fputs("can't find list of remote files, oops.\n", + ttyout); else *errbuf = "can't find list of remote files, oops."; @@ -407,8 +409,8 @@ confirm(cmd, file) if (!interactive || confirmrest) return (1); - printf("%s %s? ", cmd, file); - (void)fflush(stdout); + fprintf(ttyout, "%s %s? ", cmd, file); + (void)fflush(ttyout); if (fgets(line, sizeof(line), stdin) == NULL) return (0); switch (tolower(*line)) { @@ -416,11 +418,11 @@ confirm(cmd, file) return (0); case 'p': interactive = 0; - puts("Interactive mode: off."); + fputs("Interactive mode: off.\n", ttyout); break; case 'a': confirmrest = 1; - printf("Prompting off for duration of %s.\n", cmd); + fprintf(ttyout, "Prompting off for duration of %s.\n", cmd); break; } return (1); @@ -472,8 +474,10 @@ remotesize(file, noisy) verbose = -1; if (command("SIZE %s", file) == COMPLETE) sscanf(reply_string, "%*s %qd", &size); - else if (noisy && debug == 0) - puts(reply_string); + else if (noisy && debug == 0) { + fputs(reply_string, ttyout); + fputs("\n", ttyout); + } verbose = overbose; return (size); } @@ -508,11 +512,13 @@ remotemodtime(file, noisy) timebuf.tm_isdst = -1; rtime = mktime(&timebuf); if (rtime == -1 && (noisy || debug != 0)) - printf("Can't convert %s to a time.\n", reply_string); + fprintf(ttyout, "Can't convert %s to a time.\n", reply_string); else rtime += timebuf.tm_gmtoff; /* conv. local -> GMT */ - } else if (noisy && debug == 0) - puts(reply_string); + } else if (noisy && debug == 0) { + fputs(reply_string, ttyout); + fputs("\n", ttyout); + } verbose = overbose; return (rtime); } @@ -623,16 +629,16 @@ progressmeter(flag) snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%02d:%02d ETA", i / 60, i % 60); } - (void)write(STDOUT_FILENO, buf, strlen(buf)); + (void)write(fileno(ttyout), buf, strlen(buf)); if (flag == -1) { (void)signal(SIGALRM, updateprogressmeter); alarmtimer(1); /* set alarm timer for 1 Hz */ } else if (flag == 1) { alarmtimer(0); - (void)putchar('\n'); + (void)putc('\n', ttyout); } - fflush(stdout); + fflush(ttyout); } /* @@ -641,7 +647,7 @@ progressmeter(flag) * direction to be defined by xfer routines, and filesize and bytes * to be updated by xfer routines * If siginfo is nonzero, an ETA is displayed, and the output goes to STDERR - * instead of STDOUT. + * instead of TTYOUT. */ void ptransfer(siginfo) @@ -676,7 +682,7 @@ ptransfer(siginfo) " ETA: %02d:%02d:%02d\n", hh, remaining / 60, remaining % 60); } - (void)write(siginfo ? STDERR_FILENO : STDOUT_FILENO, buf, strlen(buf)); + (void)write(siginfo ? STDERR_FILENO : fileno(ttyout), buf, strlen(buf)); } /* @@ -707,15 +713,15 @@ list_vertical(sl) for (j = 0; j < columns; j++) { p = sl->sl_str[j * lines + i]; if (p) - fputs(p, stdout); + fputs(p, ttyout); if (j * lines + i + lines >= sl->sl_cur) { - putchar('\n'); + putc('\n', ttyout); break; } w = strlen(p); while (w < width) { w = (w + 8) &~ 7; - (void)putchar('\t'); + (void)putc('\t', ttyout); } } } @@ -730,7 +736,7 @@ setttywidth(a) { struct winsize winsize; - if (ioctl(fileno(stdout), TIOCGWINSZ, &winsize) != -1) + if (ioctl(fileno(ttyout), TIOCGWINSZ, &winsize) != -1) ttywidth = winsize.ws_col; else ttywidth = 80; @@ -759,7 +765,7 @@ void controlediting() { if (editing && el == NULL && hist == NULL) { - el = el_init(__progname, stdin, stdout); /* init editline */ + el = el_init(__progname, stdin, ttyout); /* init editline */ hist = history_init(); /* init the builtin history */ history(hist, H_EVENT, 100); /* remember 100 events */ el_set(el, EL_HIST, history, hist); /* use history */ |