summaryrefslogtreecommitdiff
path: root/crypto/kerberosIV/appl/ftp/ftp/ftp.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/kerberosIV/appl/ftp/ftp/ftp.c')
-rw-r--r--crypto/kerberosIV/appl/ftp/ftp/ftp.c1121
1 files changed, 556 insertions, 565 deletions
diff --git a/crypto/kerberosIV/appl/ftp/ftp/ftp.c b/crypto/kerberosIV/appl/ftp/ftp/ftp.c
index cfabda6a5688..3021a191fba2 100644
--- a/crypto/kerberosIV/appl/ftp/ftp/ftp.c
+++ b/crypto/kerberosIV/appl/ftp/ftp/ftp.c
@@ -32,42 +32,38 @@
*/
#include "ftp_locl.h"
-RCSID("$Id: ftp.c,v 1.44 1997/05/18 20:00:31 assar Exp $");
+RCSID ("$Id: ftp.c,v 1.55 1999/06/02 20:12:22 joda Exp $");
-struct sockaddr_in hisctladdr;
-struct sockaddr_in data_addr;
-int data = -1;
-int abrtflag = 0;
-jmp_buf ptabort;
-int ptabflg;
-int ptflag = 0;
-struct sockaddr_in myctladdr;
-off_t restart_point = 0;
+struct sockaddr_in hisctladdr;
+struct sockaddr_in data_addr;
+int data = -1;
+int abrtflag = 0;
+jmp_buf ptabort;
+int ptabflg;
+int ptflag = 0;
+struct sockaddr_in myctladdr;
+off_t restart_point = 0;
-FILE *cin, *cout;
+FILE *cin, *cout;
-typedef void (*sighand)(int);
+typedef void (*sighand) (int);
char *
-hookup(char *host, int port)
+hookup (char *host, int port)
{
struct hostent *hp = 0;
- int s, len, tos;
- static char hostnamebuf[80];
+ int s, len;
+ static char hostnamebuf[MaxHostNameLen];
- memset(&hisctladdr, 0, sizeof (hisctladdr));
- if(inet_aton(host, &hisctladdr.sin_addr)){
+ memset (&hisctladdr, 0, sizeof (hisctladdr));
+ if (inet_aton (host, &hisctladdr.sin_addr)) {
hisctladdr.sin_family = AF_INET;
- strncpy(hostnamebuf, host, sizeof(hostnamebuf));
+ strcpy_truncate (hostnamebuf, host, sizeof (hostnamebuf));
} else {
- hp = gethostbyname(host);
+ hp = gethostbyname (host);
if (hp == NULL) {
-#ifdef HAVE_H_ERRNO
warnx("%s: %s", host, hstrerror(h_errno));
-#else
- warnx("%s: %s", host, "unknown error");
-#endif
code = -1;
return NULL;
}
@@ -75,73 +71,75 @@ hookup(char *host, int port)
memmove(&hisctladdr.sin_addr,
hp->h_addr_list[0],
sizeof(hisctladdr.sin_addr));
- strncpy(hostnamebuf, hp->h_name, sizeof(hostnamebuf));
- hostnamebuf[sizeof(hostnamebuf) - 1] = '\0';
+ strcpy_truncate (hostnamebuf, hp->h_name, sizeof (hostnamebuf));
}
hostname = hostnamebuf;
- s = socket(hisctladdr.sin_family, SOCK_STREAM, 0);
+ s = socket (hisctladdr.sin_family, SOCK_STREAM, 0);
if (s < 0) {
- warn("socket");
+ warn ("socket");
code = -1;
return (0);
}
hisctladdr.sin_port = port;
- while (connect(s, (struct sockaddr *)&hisctladdr, sizeof (hisctladdr)) < 0) {
+ while (connect (s, (struct sockaddr *) & hisctladdr, sizeof (hisctladdr)) < 0) {
if (hp && hp->h_addr_list[1]) {
int oerrno = errno;
char *ia;
- ia = inet_ntoa(hisctladdr.sin_addr);
+ ia = inet_ntoa (hisctladdr.sin_addr);
errno = oerrno;
- warn("connect to address %s", ia);
+ warn ("connect to address %s", ia);
hp->h_addr_list++;
- memmove(&hisctladdr.sin_addr,
- hp->h_addr_list[0],
- sizeof(hisctladdr.sin_addr));
- fprintf(stdout, "Trying %s...\n",
- inet_ntoa(hisctladdr.sin_addr));
- close(s);
- s = socket(hisctladdr.sin_family, SOCK_STREAM, 0);
+ memmove (&hisctladdr.sin_addr,
+ hp->h_addr_list[0],
+ sizeof (hisctladdr.sin_addr));
+ fprintf (stdout, "Trying %s...\n",
+ inet_ntoa (hisctladdr.sin_addr));
+ close (s);
+ s = socket (hisctladdr.sin_family, SOCK_STREAM, 0);
if (s < 0) {
- warn("socket");
+ warn ("socket");
code = -1;
return (0);
}
continue;
}
- warn("connect");
+ warn ("connect");
code = -1;
goto bad;
}
len = sizeof (myctladdr);
- if (getsockname(s, (struct sockaddr *)&myctladdr, &len) < 0) {
- warn("getsockname");
+ if (getsockname (s, (struct sockaddr *) & myctladdr, &len) < 0) {
+ warn ("getsockname");
code = -1;
goto bad;
}
#if defined(IP_TOS) && defined(HAVE_SETSOCKOPT)
- tos = IPTOS_LOWDELAY;
+ {
+ int tos = IPTOS_LOWDELAY;
+
if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos, sizeof(int)) < 0)
warn("setsockopt TOS (ignored)");
+ }
#endif
- cin = fdopen(s, "r");
- cout = fdopen(s, "w");
+ cin = fdopen (s, "r");
+ cout = fdopen (s, "w");
if (cin == NULL || cout == NULL) {
- warnx("fdopen failed.");
+ warnx ("fdopen failed.");
if (cin)
- fclose(cin);
+ fclose (cin);
if (cout)
- fclose(cout);
+ fclose (cout);
code = -1;
goto bad;
}
if (verbose)
- printf("Connected to %s.\n", hostname);
- if (getreply(0) > 2) { /* read startup message from server */
+ printf ("Connected to %s.\n", hostname);
+ if (getreply (0) > 2) { /* read startup message from server */
if (cin)
- fclose(cin);
+ fclose (cin);
if (cout)
- fclose(cout);
+ fclose (cout);
code = -1;
goto bad;
}
@@ -149,21 +147,21 @@ hookup(char *host, int port)
{
int on = 1;
- if (setsockopt(s, SOL_SOCKET, SO_OOBINLINE, (char *)&on, sizeof(on))
+ if (setsockopt (s, SOL_SOCKET, SO_OOBINLINE, (char *) &on, sizeof (on))
< 0 && debug) {
- warn("setsockopt");
+ warn ("setsockopt");
}
}
-#endif /* SO_OOBINLINE */
+#endif /* SO_OOBINLINE */
return (hostname);
bad:
- close(s);
+ close (s);
return NULL;
}
int
-login(char *host)
+login (char *host)
{
char tmp[80];
char defaultpass[128];
@@ -172,94 +170,97 @@ login(char *host)
char *myname = NULL;
struct passwd *pw = k_getpwuid(getuid());
+
if (pw != NULL)
myname = pw->pw_name;
user = pass = acct = 0;
- if(do_klogin(host))
+ if(sec_login(host))
printf("\n*** Using plaintext user and password ***\n\n");
else{
- printf("Kerberos authentication successful.\n\n");
+ printf("Authentication successful.\n\n");
}
- if (ruserpass(host, &user, &pass, &acct) < 0) {
+ if (ruserpass (host, &user, &pass, &acct) < 0) {
code = -1;
return (0);
}
while (user == NULL) {
if (myname)
- printf("Name (%s:%s): ", host, myname);
+ printf ("Name (%s:%s): ", host, myname);
else
- printf("Name (%s): ", host);
- fgets(tmp, sizeof(tmp) - 1, stdin);
- tmp[strlen(tmp) - 1] = '\0';
+ printf ("Name (%s): ", host);
+ fgets (tmp, sizeof (tmp) - 1, stdin);
+ tmp[strlen (tmp) - 1] = '\0';
if (*tmp == '\0')
user = myname;
else
user = tmp;
}
- strcpy(username, user);
+ strcpy_truncate(username, user, sizeof(username));
n = command("USER %s", user);
if (n == CONTINUE) {
- if(auth_complete)
+ if(sec_complete)
pass = myname;
else if (pass == NULL) {
char prompt[128];
if(myname &&
(!strcmp(user, "ftp") || !strcmp(user, "anonymous"))){
- snprintf(defaultpass, sizeof(defaultpass), "%s@%s", myname, mydomain);
- snprintf(prompt, sizeof(prompt), "Password (%s): ", defaultpass);
+ snprintf(defaultpass, sizeof(defaultpass),
+ "%s@%s", myname, mydomain);
+ snprintf(prompt, sizeof(prompt),
+ "Password (%s): ", defaultpass);
}else{
- strcpy(defaultpass, "");
+ *defaultpass = '\0';
snprintf(prompt, sizeof(prompt), "Password: ");
}
pass = defaultpass;
- des_read_pw_string (tmp, sizeof(tmp), prompt, 0);
- if(tmp[0])
+ des_read_pw_string (tmp, sizeof (tmp), prompt, 0);
+ if (tmp[0])
pass = tmp;
}
- n = command("PASS %s", pass);
+ n = command ("PASS %s", pass);
}
if (n == CONTINUE) {
aflag++;
acct = tmp;
- des_read_pw_string(acct, 128, "Account:", 0);
- n = command("ACCT %s", acct);
+ des_read_pw_string (acct, 128, "Account:", 0);
+ n = command ("ACCT %s", acct);
}
if (n != COMPLETE) {
- warnx("Login failed.");
+ warnx ("Login failed.");
return (0);
}
if (!aflag && acct != NULL)
- command("ACCT %s", acct);
+ command ("ACCT %s", acct);
if (proxy)
return (1);
for (n = 0; n < macnum; ++n) {
if (!strcmp("init", macros[n].mac_name)) {
- strcpy(line, "$init");
+ strcpy_truncate (line, "$init", sizeof (line));
makeargv();
domacro(margc, margv);
break;
}
}
- sec_set_protection_level();
+ sec_set_protection_level ();
return (1);
}
void
-cmdabort(int sig)
+cmdabort (int sig)
{
- printf("\n");
- fflush(stdout);
+ printf ("\n");
+ fflush (stdout);
abrtflag++;
if (ptflag)
- longjmp(ptabort,1);
+ longjmp (ptabort, 1);
}
int
-command(char *fmt, ...)
+command (char *fmt,...)
{
va_list ap;
int r;
@@ -267,7 +268,7 @@ command(char *fmt, ...)
abrtflag = 0;
if (cout == NULL) {
- warn("No control connection for command");
+ warn ("No control connection for command");
code = -1;
return (0);
}
@@ -281,29 +282,26 @@ command(char *fmt, ...)
vfprintf(stdout, fmt, ap);
va_start(ap, fmt);
}
- if(auth_complete)
- krb4_write_enc(cout, fmt, ap);
- else
- vfprintf(cout, fmt, ap);
+ sec_vfprintf(cout, fmt, ap);
va_end(ap);
if(debug){
printf("\n");
fflush(stdout);
}
- fprintf(cout, "\r\n");
- fflush(cout);
+ fprintf (cout, "\r\n");
+ fflush (cout);
cpend = 1;
- r = getreply(!strcmp(fmt, "QUIT"));
+ r = getreply (!strcmp (fmt, "QUIT"));
if (abrtflag && oldintr != SIG_IGN)
- (*oldintr)(SIGINT);
- signal(SIGINT, oldintr);
+ (*oldintr) (SIGINT);
+ signal (SIGINT, oldintr);
return (r);
}
-char reply_string[BUFSIZ]; /* last line of previous reply */
+char reply_string[BUFSIZ]; /* last line of previous reply */
int
-getreply(int expecteof)
+getreply (int expecteof)
{
char *p;
char *lead_string;
@@ -311,80 +309,82 @@ getreply(int expecteof)
struct sigaction sa, osa;
char buf[1024];
- sigemptyset(&sa.sa_mask);
+ sigemptyset (&sa.sa_mask);
sa.sa_flags = 0;
sa.sa_handler = cmdabort;
- sigaction(SIGINT, &sa, &osa);
-
+ sigaction (SIGINT, &sa, &osa);
+
p = buf;
- while(1){
- c = getc(cin);
- switch(c){
+ while (1) {
+ c = getc (cin);
+ switch (c) {
case EOF:
if (expecteof) {
- sigaction(SIGINT,&osa, NULL);
+ sigaction (SIGINT, &osa, NULL);
code = 221;
return 0;
}
- lostpeer(0);
+ lostpeer (0);
if (verbose) {
- printf("421 Service not available, "
- "remote server has closed connection\n");
- fflush(stdout);
+ printf ("421 Service not available, "
+ "remote server has closed connection\n");
+ fflush (stdout);
}
code = 421;
return (4);
- break;
case IAC:
- c = getc(cin);
- if(c == WILL || c == WONT)
- fprintf(cout, "%c%c%c", IAC, DONT, getc(cin));
- if(c == DO || c == DONT)
- fprintf(cout, "%c%c%c", IAC, WONT, getc(cin));
+ c = getc (cin);
+ if (c == WILL || c == WONT)
+ fprintf (cout, "%c%c%c", IAC, DONT, getc (cin));
+ if (c == DO || c == DONT)
+ fprintf (cout, "%c%c%c", IAC, WONT, getc (cin));
continue;
case '\n':
- *p++ = 0;
+ *p++ = '\0';
if(isdigit(buf[0])){
sscanf(buf, "%d", &code);
if(code == 631){
- krb4_read_mic(buf);
+ sec_read_msg(buf, prot_safe);
sscanf(buf, "%d", &code);
lead_string = "S:";
} else if(code == 632){
- krb4_read_enc(buf);
+ sec_read_msg(buf, prot_private);
sscanf(buf, "%d", &code);
lead_string = "P:";
}else if(code == 633){
- printf("Received confidential reply!\n");
- }else if(auth_complete)
+ sec_read_msg(buf, prot_confidential);
+ sscanf(buf, "%d", &code);
+ lead_string = "C:";
+ }else if(sec_complete)
lead_string = "!!";
else
lead_string = "";
- if(verbose > 0 || (verbose > -1 && code > 499))
- fprintf(stdout, "%s%s\n", lead_string, buf);
- if(buf[3] == ' '){
- strcpy(reply_string, buf);
+ if (verbose > 0 || (verbose > -1 && code > 499))
+ fprintf (stdout, "%s%s\n", lead_string, buf);
+ if (buf[3] == ' ') {
+ strcpy (reply_string, buf);
if (code >= 200)
cpend = 0;
- sigaction(SIGINT, &osa, NULL);
+ sigaction (SIGINT, &osa, NULL);
if (code == 421)
- lostpeer(0);
+ lostpeer (0);
#if 1
- if (abrtflag &&
- osa.sa_handler != cmdabort &&
+ if (abrtflag &&
+ osa.sa_handler != cmdabort &&
osa.sa_handler != SIG_IGN)
- osa.sa_handler(SIGINT);
+ osa.sa_handler (SIGINT);
#endif
- if(code == 227){
+ if (code == 227) {
char *p, *q;
+
pasv[0] = 0;
- p = strchr(reply_string, '(');
- if(p){
+ p = strchr (reply_string, '(');
+ if (p) {
p++;
q = strchr(p, ')');
if(q){
- strncpy(pasv, p, q - p);
+ memcpy (pasv, p, q - p);
pasv[q - p] = 0;
}
}
@@ -393,7 +393,7 @@ getreply(int expecteof)
}
}else{
if(verbose > 0 || (verbose > -1 && code > 499)){
- if(auth_complete)
+ if(sec_complete)
fprintf(stdout, "!!");
fprintf(stdout, "%s\n", buf);
}
@@ -404,13 +404,13 @@ getreply(int expecteof)
*p++ = c;
}
}
-
+
}
#if 0
int
-getreply(int expecteof)
+getreply (int expecteof)
{
int c, n;
int dig;
@@ -419,24 +419,24 @@ getreply(int expecteof)
int pflag = 0;
char *cp, *pt = pasv;
- oldintr = signal(SIGINT, cmdabort);
+ oldintr = signal (SIGINT, cmdabort);
for (;;) {
dig = n = code = 0;
cp = reply_string;
- while ((c = getc(cin)) != '\n') {
- if (c == IAC) { /* handle telnet commands */
- switch (c = getc(cin)) {
+ while ((c = getc (cin)) != '\n') {
+ if (c == IAC) { /* handle telnet commands */
+ switch (c = getc (cin)) {
case WILL:
case WONT:
- c = getc(cin);
- fprintf(cout, "%c%c%c", IAC, DONT, c);
- fflush(cout);
+ c = getc (cin);
+ fprintf (cout, "%c%c%c", IAC, DONT, c);
+ fflush (cout);
break;
case DO:
case DONT:
- c = getc(cin);
- fprintf(cout, "%c%c%c", IAC, WONT, c);
- fflush(cout);
+ c = getc (cin);
+ fprintf (cout, "%c%c%c", IAC, WONT, c);
+ fflush (cout);
break;
default:
break;
@@ -446,14 +446,14 @@ getreply(int expecteof)
dig++;
if (c == EOF) {
if (expecteof) {
- signal(SIGINT,oldintr);
+ signal (SIGINT, oldintr);
code = 221;
return (0);
}
- lostpeer(0);
+ lostpeer (0);
if (verbose) {
- printf("421 Service not available, remote server has closed connection\n");
- fflush(stdout);
+ printf ("421 Service not available, remote server has closed connection\n");
+ fflush (stdout);
}
code = 421;
return (4);
@@ -462,14 +462,14 @@ getreply(int expecteof)
(verbose > -1 && n == '5' && dig > 4))) {
if (proxflag &&
(dig == 1 || dig == 5 && verbose == 0))
- printf("%s:",hostname);
- putchar(c);
+ printf ("%s:", hostname);
+ putchar (c);
}
- if (dig < 4 && isdigit(c))
+ if (dig < 4 && isdigit (c))
code = code * 10 + (c - '0');
if (!pflag && code == 227)
pflag = 1;
- if (dig > 4 && pflag == 1 && isdigit(c))
+ if (dig > 4 && pflag == 1 && isdigit (c))
pflag = 2;
if (pflag == 2) {
if (c != '\r' && c != ')')
@@ -486,11 +486,11 @@ getreply(int expecteof)
}
if (n == 0)
n = c;
- if (cp < &reply_string[sizeof(reply_string) - 1])
+ if (cp < &reply_string[sizeof (reply_string) - 1])
*cp++ = c;
}
if (verbose > 0 || verbose > -1 && n == '5') {
- putchar(c);
+ putchar (c);
fflush (stdout);
}
if (continuation && code != originalcode) {
@@ -499,112 +499,114 @@ getreply(int expecteof)
continue;
}
*cp = '\0';
- if(auth_complete){
+ if(sec_complete){
if(code == 631)
- krb4_read_mic(reply_string);
- else
- krb4_read_enc(reply_string);
+ sec_read_msg(reply_string, prot_safe);
+ else if(code == 632)
+ sec_read_msg(reply_string, prot_private);
+ else if(code == 633)
+ sec_read_msg(reply_string, prot_confidential);
n = code / 100 + '0';
}
-
if (n != '1')
cpend = 0;
- signal(SIGINT,oldintr);
+ signal (SIGINT, oldintr);
if (code == 421 || originalcode == 421)
- lostpeer(0);
+ lostpeer (0);
if (abrtflag && oldintr != cmdabort && oldintr != SIG_IGN)
- (*oldintr)(SIGINT);
+ (*oldintr) (SIGINT);
return (n - '0');
}
}
+
#endif
int
-empty(fd_set *mask, int sec)
+empty (fd_set * mask, int sec)
{
struct timeval t;
t.tv_sec = (long) sec;
t.tv_usec = 0;
- return (select(32, mask, NULL, NULL, &t));
+ return (select (32, mask, NULL, NULL, &t));
}
-jmp_buf sendabort;
+jmp_buf sendabort;
static RETSIGTYPE
-abortsend(int sig)
+abortsend (int sig)
{
mflag = 0;
abrtflag = 0;
- printf("\nsend aborted\nwaiting for remote to finish abort\n");
- fflush(stdout);
- longjmp(sendabort, 1);
+ printf ("\nsend aborted\nwaiting for remote to finish abort\n");
+ fflush (stdout);
+ longjmp (sendabort, 1);
}
#define HASHBYTES 1024
static int
-copy_stream(FILE *from, FILE *to)
+copy_stream (FILE * from, FILE * to)
{
static size_t bufsize;
static char *buf;
int n;
int bytes = 0;
- int werr;
+ int werr = 0;
int hashbytes = HASHBYTES;
struct stat st;
-
-#ifdef HAVE_MMAP
+
+#if defined(HAVE_MMAP) && !defined(NO_MMAP)
void *chunk;
#ifndef MAP_FAILED
#define MAP_FAILED (-1)
#endif
- if(fstat(fileno(from), &st) == 0 && S_ISREG(st.st_mode)){
- chunk = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fileno(from), 0);
- if (chunk != (void *)MAP_FAILED) {
+ if (fstat (fileno (from), &st) == 0 && S_ISREG (st.st_mode)) {
+ chunk = mmap (0, st.st_size, PROT_READ, MAP_SHARED, fileno (from), 0);
+ if (chunk != (void *) MAP_FAILED) {
int res;
- res = sec_write(fileno(to), chunk, st.st_size);
- if (munmap(chunk, st.st_size) < 0)
+ res = sec_write (fileno (to), chunk, st.st_size);
+ if (munmap (chunk, st.st_size) < 0)
warn ("munmap");
- sec_fflush(to);
+ sec_fflush (to);
return res;
}
}
#endif
buf = alloc_buffer (buf, &bufsize,
- fstat(fileno(from), &st) >= 0 ? &st : NULL);
+ fstat (fileno (from), &st) >= 0 ? &st : NULL);
if (buf == NULL)
return -1;
- while((n = read(fileno(from), buf, bufsize)) > 0){
- werr = sec_write(fileno(to), buf, n);
- if(werr < 0)
+ while ((n = read (fileno (from), buf, bufsize)) > 0) {
+ werr = sec_write (fileno (to), buf, n);
+ if (werr < 0)
break;
bytes += werr;
- while(hash && bytes > hashbytes){
- putchar('#');
+ while (hash && bytes > hashbytes) {
+ putchar ('#');
hashbytes += HASHBYTES;
}
}
- sec_fflush(to);
- if(n < 0)
- warn("local");
+ sec_fflush (to);
+ if (n < 0)
+ warn ("local");
- if(werr < 0){
- if(errno != EPIPE)
- warn("netout");
+ if (werr < 0) {
+ if (errno != EPIPE)
+ warn ("netout");
bytes = -1;
}
return bytes;
}
void
-sendrequest(char *cmd, char *local, char *remote, int printnames)
+sendrequest (char *cmd, char *local, char *remote, char *lmode, int printnames)
{
struct stat st;
struct timeval start, stop;
@@ -613,124 +615,123 @@ sendrequest(char *cmd, char *local, char *remote, int printnames)
int (*closefunc) (FILE *);
RETSIGTYPE (*oldintr)(), (*oldintp)();
long bytes = 0, hashbytes = HASHBYTES;
- char *lmode;
+ char *rmode = "w";
if (verbose && printnames) {
- if (local && *local != '-')
- printf("local: %s ", local);
+ if (local && strcmp (local, "-") != 0)
+ printf ("local: %s ", local);
if (remote)
- printf("remote: %s\n", remote);
+ printf ("remote: %s\n", remote);
}
if (proxy) {
- proxtrans(cmd, local, remote);
+ proxtrans (cmd, local, remote);
return;
}
if (curtype != type)
- changetype(type, 0);
+ changetype (type, 0);
closefunc = NULL;
oldintr = NULL;
oldintp = NULL;
- lmode = "w";
- if (setjmp(sendabort)) {
+
+ if (setjmp (sendabort)) {
while (cpend) {
- getreply(0);
+ getreply (0);
}
if (data >= 0) {
- close(data);
+ close (data);
data = -1;
}
if (oldintr)
- signal(SIGINT,oldintr);
+ signal (SIGINT, oldintr);
if (oldintp)
- signal(SIGPIPE,oldintp);
+ signal (SIGPIPE, oldintp);
code = -1;
return;
}
- oldintr = signal(SIGINT, abortsend);
- if (strcmp(local, "-") == 0)
+ oldintr = signal (SIGINT, abortsend);
+ if (strcmp (local, "-") == 0)
fin = stdin;
else if (*local == '|') {
- oldintp = signal(SIGPIPE,SIG_IGN);
- fin = popen(local + 1, "r");
+ oldintp = signal (SIGPIPE, SIG_IGN);
+ fin = popen (local + 1, lmode);
if (fin == NULL) {
- warn("%s", local + 1);
- signal(SIGINT, oldintr);
- signal(SIGPIPE, oldintp);
+ warn ("%s", local + 1);
+ signal (SIGINT, oldintr);
+ signal (SIGPIPE, oldintp);
code = -1;
return;
}
closefunc = pclose;
} else {
- fin = fopen(local, "r");
+ fin = fopen (local, lmode);
if (fin == NULL) {
- warn("local: %s", local);
- signal(SIGINT, oldintr);
+ warn ("local: %s", local);
+ signal (SIGINT, oldintr);
code = -1;
return;
}
closefunc = fclose;
- if (fstat(fileno(fin), &st) < 0 ||
- (st.st_mode&S_IFMT) != S_IFREG) {
- fprintf(stdout, "%s: not a plain file.\n", local);
- signal(SIGINT, oldintr);
- fclose(fin);
+ if (fstat (fileno (fin), &st) < 0 ||
+ (st.st_mode & S_IFMT) != S_IFREG) {
+ fprintf (stdout, "%s: not a plain file.\n", local);
+ signal (SIGINT, oldintr);
+ fclose (fin);
code = -1;
return;
}
}
- if (initconn()) {
- signal(SIGINT, oldintr);
+ if (initconn ()) {
+ signal (SIGINT, oldintr);
if (oldintp)
- signal(SIGPIPE, oldintp);
+ signal (SIGPIPE, oldintp);
code = -1;
if (closefunc != NULL)
- (*closefunc)(fin);
+ (*closefunc) (fin);
return;
}
- if (setjmp(sendabort))
+ if (setjmp (sendabort))
goto abort;
if (restart_point &&
- (strcmp(cmd, "STOR") == 0 || strcmp(cmd, "APPE") == 0)) {
+ (strcmp (cmd, "STOR") == 0 || strcmp (cmd, "APPE") == 0)) {
int rc;
switch (curtype) {
case TYPE_A:
- rc = fseek(fin, (long) restart_point, SEEK_SET);
+ rc = fseek (fin, (long) restart_point, SEEK_SET);
break;
case TYPE_I:
case TYPE_L:
- rc = lseek(fileno(fin), restart_point, SEEK_SET);
+ rc = lseek (fileno (fin), restart_point, SEEK_SET);
break;
}
if (rc < 0) {
- warn("local: %s", local);
+ warn ("local: %s", local);
restart_point = 0;
if (closefunc != NULL)
- (*closefunc)(fin);
+ (*closefunc) (fin);
return;
}
- if (command("REST %ld", (long) restart_point)
+ if (command ("REST %ld", (long) restart_point)
!= CONTINUE) {
restart_point = 0;
if (closefunc != NULL)
- (*closefunc)(fin);
+ (*closefunc) (fin);
return;
}
restart_point = 0;
- lmode = "r+w";
+ rmode = "r+w";
}
if (remote) {
- if (command("%s %s", cmd, remote) != PRELIM) {
- signal(SIGINT, oldintr);
+ if (command ("%s %s", cmd, remote) != PRELIM) {
+ signal (SIGINT, oldintr);
if (oldintp)
- signal(SIGPIPE, oldintp);
+ signal (SIGPIPE, oldintp);
if (closefunc != NULL)
- (*closefunc)(fin);
+ (*closefunc) (fin);
return;
}
- } else
- if (command("%s", cmd) != PRELIM) {
+ } else if (command ("%s", cmd) != PRELIM) {
signal(SIGINT, oldintr);
if (oldintp)
signal(SIGPIPE, oldintp);
@@ -738,101 +739,102 @@ sendrequest(char *cmd, char *local, char *remote, int printnames)
(*closefunc)(fin);
return;
}
- dout = dataconn(lmode);
+ dout = dataconn(rmode);
if (dout == NULL)
goto abort;
- set_buffer_size(fileno(dout), 0);
- gettimeofday(&start, (struct timezone *)0);
- oldintp = signal(SIGPIPE, SIG_IGN);
+ set_buffer_size (fileno (dout), 0);
+ gettimeofday (&start, (struct timezone *) 0);
+ oldintp = signal (SIGPIPE, SIG_IGN);
switch (curtype) {
case TYPE_I:
case TYPE_L:
errno = d = c = 0;
- bytes = copy_stream(fin, dout);
+ bytes = copy_stream (fin, dout);
break;
case TYPE_A:
- while ((c = getc(fin)) != EOF) {
+ while ((c = getc (fin)) != EOF) {
if (c == '\n') {
while (hash && (bytes >= hashbytes)) {
- putchar('#');
- fflush(stdout);
+ putchar ('#');
+ fflush (stdout);
hashbytes += HASHBYTES;
}
- if (ferror(dout))
+ if (ferror (dout))
break;
- sec_putc('\r', dout);
+ sec_putc ('\r', dout);
bytes++;
}
- sec_putc(c, dout);
+ sec_putc (c, dout);
bytes++;
}
- sec_fflush(dout);
+ sec_fflush (dout);
if (hash) {
if (bytes < hashbytes)
- putchar('#');
- putchar('\n');
- fflush(stdout);
+ putchar ('#');
+ putchar ('\n');
+ fflush (stdout);
}
- if (ferror(fin))
- warn("local: %s", local);
- if (ferror(dout)) {
+ if (ferror (fin))
+ warn ("local: %s", local);
+ if (ferror (dout)) {
if (errno != EPIPE)
- warn("netout");
+ warn ("netout");
bytes = -1;
}
break;
}
if (closefunc != NULL)
- (*closefunc)(fin);
- fclose(dout);
- gettimeofday(&stop, (struct timezone *)0);
- getreply(0);
- signal(SIGINT, oldintr);
+ (*closefunc) (fin);
+ fclose (dout);
+ gettimeofday (&stop, (struct timezone *) 0);
+ getreply (0);
+ signal (SIGINT, oldintr);
if (oldintp)
- signal(SIGPIPE, oldintp);
+ signal (SIGPIPE, oldintp);
if (bytes > 0)
- ptransfer("sent", bytes, &start, &stop);
+ ptransfer ("sent", bytes, &start, &stop);
return;
abort:
- signal(SIGINT, oldintr);
+ signal (SIGINT, oldintr);
if (oldintp)
- signal(SIGPIPE, oldintp);
+ signal (SIGPIPE, oldintp);
if (!cpend) {
code = -1;
return;
}
if (data >= 0) {
- close(data);
+ close (data);
data = -1;
}
if (dout)
- fclose(dout);
- getreply(0);
+ fclose (dout);
+ getreply (0);
code = -1;
if (closefunc != NULL && fin != NULL)
- (*closefunc)(fin);
- gettimeofday(&stop, (struct timezone *)0);
+ (*closefunc) (fin);
+ gettimeofday (&stop, (struct timezone *) 0);
if (bytes > 0)
- ptransfer("sent", bytes, &start, &stop);
+ ptransfer ("sent", bytes, &start, &stop);
}
-jmp_buf recvabort;
+jmp_buf recvabort;
void
-abortrecv(int sig)
+abortrecv (int sig)
{
mflag = 0;
abrtflag = 0;
- printf("\nreceive aborted\nwaiting for remote to finish abort\n");
- fflush(stdout);
- longjmp(recvabort, 1);
+ printf ("\nreceive aborted\nwaiting for remote to finish abort\n");
+ fflush (stdout);
+ longjmp (recvabort, 1);
}
void
-recvrequest(char *cmd, char *local, char *remote, char *lmode, int printnames)
+recvrequest (char *cmd, char *local, char *remote,
+ char *lmode, int printnames, int local_given)
{
FILE *fout, *din = 0;
int (*closefunc) (FILE *);
@@ -844,72 +846,71 @@ recvrequest(char *cmd, char *local, char *remote, char *lmode, int printnames)
struct timeval start, stop;
struct stat st;
- is_retr = strcmp(cmd, "RETR") == 0;
+ is_retr = strcmp (cmd, "RETR") == 0;
if (is_retr && verbose && printnames) {
- if (local && *local != '-')
- printf("local: %s ", local);
+ if (local && strcmp (local, "-") != 0)
+ printf ("local: %s ", local);
if (remote)
- printf("remote: %s\n", remote);
+ printf ("remote: %s\n", remote);
}
if (proxy && is_retr) {
- proxtrans(cmd, local, remote);
+ proxtrans (cmd, local, remote);
return;
}
closefunc = NULL;
oldintr = NULL;
oldintp = NULL;
tcrflag = !crflag && is_retr;
- if (setjmp(recvabort)) {
+ if (setjmp (recvabort)) {
while (cpend) {
- getreply(0);
+ getreply (0);
}
if (data >= 0) {
- close(data);
+ close (data);
data = -1;
}
if (oldintr)
- signal(SIGINT, oldintr);
+ signal (SIGINT, oldintr);
code = -1;
return;
}
- oldintr = signal(SIGINT, abortrecv);
- if (strcmp(local, "-") && *local != '|') {
- if (access(local, 2) < 0) {
- char *dir = strrchr(local, '/');
+ oldintr = signal (SIGINT, abortrecv);
+ if (!local_given || (strcmp (local, "-") && *local != '|')) {
+ if (access (local, 2) < 0) {
+ char *dir = strrchr (local, '/');
if (errno != ENOENT && errno != EACCES) {
- warn("local: %s", local);
- signal(SIGINT, oldintr);
+ warn ("local: %s", local);
+ signal (SIGINT, oldintr);
code = -1;
return;
}
if (dir != NULL)
*dir = 0;
- d = access(dir ? local : ".", 2);
+ d = access (dir ? local : ".", 2);
if (dir != NULL)
*dir = '/';
if (d < 0) {
- warn("local: %s", local);
- signal(SIGINT, oldintr);
+ warn ("local: %s", local);
+ signal (SIGINT, oldintr);
code = -1;
return;
}
if (!runique && errno == EACCES &&
- chmod(local, 0600) < 0) {
- warn("local: %s", local);
- signal(SIGINT, oldintr);
- signal(SIGINT, oldintr);
+ chmod (local, 0600) < 0) {
+ warn ("local: %s", local);
+ signal (SIGINT, oldintr);
+ signal (SIGINT, oldintr);
code = -1;
return;
}
if (runique && errno == EACCES &&
- (local = gunique(local)) == NULL) {
- signal(SIGINT, oldintr);
+ (local = gunique (local)) == NULL) {
+ signal (SIGINT, oldintr);
code = -1;
return;
}
- }
- else if (runique && (local = gunique(local)) == NULL) {
+ } else if (runique && (local = gunique (local)) == NULL) {
signal(SIGINT, oldintr);
code = -1;
return;
@@ -917,98 +918,98 @@ recvrequest(char *cmd, char *local, char *remote, char *lmode, int printnames)
}
if (!is_retr) {
if (curtype != TYPE_A)
- changetype(TYPE_A, 0);
+ changetype (TYPE_A, 0);
} else if (curtype != type)
- changetype(type, 0);
- if (initconn()) {
- signal(SIGINT, oldintr);
+ changetype (type, 0);
+ if (initconn ()) {
+ signal (SIGINT, oldintr);
code = -1;
return;
}
- if (setjmp(recvabort))
+ if (setjmp (recvabort))
goto abort;
if (is_retr && restart_point &&
- command("REST %ld", (long) restart_point) != CONTINUE)
+ command ("REST %ld", (long) restart_point) != CONTINUE)
return;
if (remote) {
- if (command("%s %s", cmd, remote) != PRELIM) {
- signal(SIGINT, oldintr);
+ if (command ("%s %s", cmd, remote) != PRELIM) {
+ signal (SIGINT, oldintr);
return;
}
} else {
- if (command("%s", cmd) != PRELIM) {
- signal(SIGINT, oldintr);
+ if (command ("%s", cmd) != PRELIM) {
+ signal (SIGINT, oldintr);
return;
}
}
- din = dataconn("r");
+ din = dataconn ("r");
if (din == NULL)
goto abort;
- set_buffer_size(fileno(din), 1);
- if (strcmp(local, "-") == 0)
+ set_buffer_size (fileno (din), 1);
+ if (local_given && strcmp (local, "-") == 0)
fout = stdout;
- else if (*local == '|') {
- oldintp = signal(SIGPIPE, SIG_IGN);
- fout = popen(local + 1, "w");
+ else if (local_given && *local == '|') {
+ oldintp = signal (SIGPIPE, SIG_IGN);
+ fout = popen (local + 1, "w");
if (fout == NULL) {
- warn("%s", local+1);
+ warn ("%s", local + 1);
goto abort;
}
closefunc = pclose;
} else {
- fout = fopen(local, lmode);
+ fout = fopen (local, lmode);
if (fout == NULL) {
- warn("local: %s", local);
+ warn ("local: %s", local);
goto abort;
}
closefunc = fclose;
}
buf = alloc_buffer (buf, &bufsize,
- fstat(fileno(fout), &st) >= 0 ? &st : NULL);
+ fstat (fileno (fout), &st) >= 0 ? &st : NULL);
if (buf == NULL)
goto abort;
- gettimeofday(&start, (struct timezone *)0);
+ gettimeofday (&start, (struct timezone *) 0);
switch (curtype) {
case TYPE_I:
case TYPE_L:
if (restart_point &&
- lseek(fileno(fout), restart_point, SEEK_SET) < 0) {
- warn("local: %s", local);
+ lseek (fileno (fout), restart_point, SEEK_SET) < 0) {
+ warn ("local: %s", local);
if (closefunc != NULL)
- (*closefunc)(fout);
+ (*closefunc) (fout);
return;
}
errno = d = 0;
- while ((c = sec_read(fileno(din), buf, bufsize)) > 0) {
- if ((d = write(fileno(fout), buf, c)) != c)
+ while ((c = sec_read (fileno (din), buf, bufsize)) > 0) {
+ if ((d = write (fileno (fout), buf, c)) != c)
break;
bytes += c;
if (hash) {
while (bytes >= hashbytes) {
- putchar('#');
+ putchar ('#');
hashbytes += HASHBYTES;
}
- fflush(stdout);
+ fflush (stdout);
}
}
if (hash && bytes > 0) {
if (bytes < HASHBYTES)
- putchar('#');
- putchar('\n');
- fflush(stdout);
+ putchar ('#');
+ putchar ('\n');
+ fflush (stdout);
}
if (c < 0) {
if (errno != EPIPE)
- warn("netin");
+ warn ("netin");
bytes = -1;
}
if (d < c) {
if (d < 0)
- warn("local: %s", local);
+ warn ("local: %s", local);
else
- warnx("%s: short write", local);
+ warnx ("%s: short write", local);
}
break;
@@ -1016,38 +1017,37 @@ recvrequest(char *cmd, char *local, char *remote, char *lmode, int printnames)
if (restart_point) {
int i, n, ch;
- if (fseek(fout, 0L, SEEK_SET) < 0)
+ if (fseek (fout, 0L, SEEK_SET) < 0)
goto done;
n = restart_point;
for (i = 0; i++ < n;) {
- if ((ch = sec_getc(fout)) == EOF)
+ if ((ch = sec_getc (fout)) == EOF)
goto done;
if (ch == '\n')
i++;
}
- if (fseek(fout, 0L, SEEK_CUR) < 0) {
- done:
- warn("local: %s", local);
+ if (fseek (fout, 0L, SEEK_CUR) < 0) {
+ done:
+ warn ("local: %s", local);
if (closefunc != NULL)
- (*closefunc)(fout);
+ (*closefunc) (fout);
return;
}
}
-
while ((c = sec_getc(din)) != EOF) {
if (c == '\n')
bare_lfs++;
while (c == '\r') {
while (hash && (bytes >= hashbytes)) {
- putchar('#');
- fflush(stdout);
+ putchar ('#');
+ fflush (stdout);
hashbytes += HASHBYTES;
}
bytes++;
- if ((c = sec_getc(din)) != '\n' || tcrflag) {
- if (ferror(fout))
+ if ((c = sec_getc (din)) != '\n' || tcrflag) {
+ if (ferror (fout))
goto break2;
- putc('\r', fout);
+ putc ('\r', fout);
if (c == '\0') {
bytes++;
goto contin2;
@@ -1056,69 +1056,68 @@ recvrequest(char *cmd, char *local, char *remote, char *lmode, int printnames)
goto contin2;
}
}
- putc(c, fout);
+ putc (c, fout);
bytes++;
- contin2: ;
+ contin2:;
}
- break2:
+break2:
if (bare_lfs) {
- printf("WARNING! %d bare linefeeds received in ASCII mode\n",
- bare_lfs);
- printf("File may not have transferred correctly.\n");
+ printf ("WARNING! %d bare linefeeds received in ASCII mode\n",
+ bare_lfs);
+ printf ("File may not have transferred correctly.\n");
}
if (hash) {
if (bytes < hashbytes)
- putchar('#');
- putchar('\n');
- fflush(stdout);
+ putchar ('#');
+ putchar ('\n');
+ fflush (stdout);
}
- if (ferror(din)) {
+ if (ferror (din)) {
if (errno != EPIPE)
- warn("netin");
+ warn ("netin");
bytes = -1;
}
- if (ferror(fout))
- warn("local: %s", local);
+ if (ferror (fout))
+ warn ("local: %s", local);
break;
}
if (closefunc != NULL)
- (*closefunc)(fout);
- signal(SIGINT, oldintr);
+ (*closefunc) (fout);
+ signal (SIGINT, oldintr);
if (oldintp)
- signal(SIGPIPE, oldintp);
- fclose(din);
- gettimeofday(&stop, (struct timezone *)0);
- getreply(0);
+ signal (SIGPIPE, oldintp);
+ fclose (din);
+ gettimeofday (&stop, (struct timezone *) 0);
+ getreply (0);
if (bytes > 0 && is_retr)
- ptransfer("received", bytes, &start, &stop);
+ ptransfer ("received", bytes, &start, &stop);
return;
abort:
/* abort using RFC959 recommended IP,SYNC sequence */
if (oldintp)
- signal(SIGPIPE, oldintr);
- signal(SIGINT, SIG_IGN);
+ signal (SIGPIPE, oldintr);
+ signal (SIGINT, SIG_IGN);
if (!cpend) {
code = -1;
- signal(SIGINT, oldintr);
+ signal (SIGINT, oldintr);
return;
}
-
abort_remote(din);
code = -1;
if (data >= 0) {
- close(data);
+ close (data);
data = -1;
}
if (closefunc != NULL && fout != NULL)
- (*closefunc)(fout);
+ (*closefunc) (fout);
if (din)
- fclose(din);
- gettimeofday(&stop, (struct timezone *)0);
+ fclose (din);
+ gettimeofday (&stop, (struct timezone *) 0);
if (bytes > 0)
- ptransfer("received", bytes, &start, &stop);
- signal(SIGINT, oldintr);
+ ptransfer ("received", bytes, &start, &stop);
+ signal (SIGINT, oldintr);
}
/*
@@ -1126,112 +1125,110 @@ abort:
* otherwise the server's connect may fail.
*/
int
-initconn(void)
+initconn (void)
{
int result, len, tmpno = 0;
int on = 1;
int a0, a1, a2, a3, p0, p1;
if (passivemode) {
- data = socket(AF_INET, SOCK_STREAM, 0);
+ data = socket (AF_INET, SOCK_STREAM, 0);
if (data < 0) {
- perror("ftp: socket");
- return(1);
+ perror ("ftp: socket");
+ return (1);
}
#if defined(SO_DEBUG) && defined(HAVE_SETSOCKOPT)
if ((options & SO_DEBUG) &&
- setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on,
- sizeof (on)) < 0)
- perror("ftp: setsockopt (ignored)");
+ setsockopt (data, SOL_SOCKET, SO_DEBUG, (char *) &on,
+ sizeof (on)) < 0)
+ perror ("ftp: setsockopt (ignored)");
#endif
- if (command("PASV") != COMPLETE) {
- printf("Passive mode refused.\n");
+ if (command ("PASV") != COMPLETE) {
+ printf ("Passive mode refused.\n");
goto bad;
}
/*
- * What we've got at this point is a string of comma
- * separated one-byte unsigned integer values.
- * The first four are the an IP address. The fifth is
- * the MSB of the port number, the sixth is the LSB.
- * From that we'll prepare a sockaddr_in.
+ * What we've got at this point is a string of comma separated
+ * one-byte unsigned integer values. The first four are the an IP
+ * address. The fifth is the MSB of the port number, the sixth is the
+ * LSB. From that we'll prepare a sockaddr_in.
*/
- if (sscanf(pasv,"%d,%d,%d,%d,%d,%d",
- &a0, &a1, &a2, &a3, &p0, &p1) != 6) {
- printf("Passive mode address scan failure. "
- "Shouldn't happen!\n");
+ if (sscanf (pasv, "%d,%d,%d,%d,%d,%d",
+ &a0, &a1, &a2, &a3, &p0, &p1) != 6) {
+ printf ("Passive mode address scan failure. "
+ "Shouldn't happen!\n");
goto bad;
}
- if(a0 < 0 || a0 > 255 ||
- a1 < 0 || a1 > 255 ||
- a2 < 0 || a2 > 255 ||
- a3 < 0 || a3 > 255 ||
- p0 < 0 || p0 > 255 ||
- p1 < 0 || p1 > 255){
- printf("Can't parse passive mode string.\n");
+ if (a0 < 0 || a0 > 255 ||
+ a1 < 0 || a1 > 255 ||
+ a2 < 0 || a2 > 255 ||
+ a3 < 0 || a3 > 255 ||
+ p0 < 0 || p0 > 255 ||
+ p1 < 0 || p1 > 255) {
+ printf ("Can't parse passive mode string.\n");
goto bad;
}
-
memset(&data_addr, 0, sizeof(data_addr));
data_addr.sin_family = AF_INET;
- data_addr.sin_addr.s_addr = htonl((a0 << 24) | (a1 << 16) |
- (a2 << 8) | a3);
- data_addr.sin_port = htons((p0 << 8) | p1);
+ data_addr.sin_addr.s_addr = htonl ((a0 << 24) | (a1 << 16) |
+ (a2 << 8) | a3);
+ data_addr.sin_port = htons ((p0 << 8) | p1);
- if (connect(data, (struct sockaddr *)&data_addr,
- sizeof(data_addr)) < 0) {
- perror("ftp: connect");
+ if (connect (data, (struct sockaddr *) & data_addr,
+ sizeof (data_addr)) < 0) {
+ perror ("ftp: connect");
goto bad;
}
#if defined(IP_TOS) && defined(HAVE_SETSOCKOPT)
on = IPTOS_THROUGHPUT;
- if (setsockopt(data, IPPROTO_IP, IP_TOS, (char *)&on,
- sizeof(int)) < 0)
- perror("ftp: setsockopt TOS (ignored)");
+ if (setsockopt (data, IPPROTO_IP, IP_TOS, (char *) &on,
+ sizeof (int)) < 0)
+ perror ("ftp: setsockopt TOS (ignored)");
#endif
- return(0);
+ return (0);
}
-
noport:
data_addr = myctladdr;
if (sendport)
- data_addr.sin_port = 0; /* let system pick one */
+ data_addr.sin_port = 0; /* let system pick one */
if (data != -1)
- close(data);
- data = socket(AF_INET, SOCK_STREAM, 0);
+ close (data);
+ data = socket (AF_INET, SOCK_STREAM, 0);
if (data < 0) {
- warn("socket");
+ warn ("socket");
if (tmpno)
sendport = 1;
return (1);
}
#if defined(SO_REUSEADDR) && defined(HAVE_SETSOCKOPT)
if (!sendport)
- if (setsockopt(data, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof (on)) < 0) {
- warn("setsockopt (reuse address)");
+ if (setsockopt (data, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof (on)) < 0) {
+ warn ("setsockopt (reuse address)");
goto bad;
}
#endif
- if (bind(data, (struct sockaddr *)&data_addr, sizeof (data_addr)) < 0) {
- warn("bind");
+ if (bind (data, (struct sockaddr *) & data_addr, sizeof (data_addr)) < 0) {
+ warn ("bind");
goto bad;
}
#if defined(SO_DEBUG) && defined(HAVE_SETSOCKOPT)
if (options & SO_DEBUG &&
- setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on, sizeof (on)) < 0)
- warn("setsockopt (ignored)");
+ setsockopt (data, SOL_SOCKET, SO_DEBUG, (char *) &on, sizeof (on)) < 0)
+ warn ("setsockopt (ignored)");
#endif
len = sizeof (data_addr);
- if (getsockname(data, (struct sockaddr *)&data_addr, &len) < 0) {
- warn("getsockname");
+ if (getsockname (data, (struct sockaddr *) & data_addr, &len) < 0) {
+ warn ("getsockname");
goto bad;
}
- if (listen(data, 1) < 0)
- warn("listen");
+ if (listen (data, 1) < 0)
+ warn ("listen");
if (sendport) {
unsigned int a = ntohl(data_addr.sin_addr.s_addr);
unsigned int p = ntohs(data_addr.sin_port);
+
result = command("PORT %d,%d,%d,%d,%d,%d",
(a >> 24) & 0xff,
(a >> 16) & 0xff,
@@ -1250,88 +1247,88 @@ noport:
sendport = 1;
#if defined(IP_TOS) && defined(HAVE_SETSOCKOPT)
on = IPTOS_THROUGHPUT;
- if (setsockopt(data, IPPROTO_IP, IP_TOS, (char *)&on, sizeof(int)) < 0)
- warn("setsockopt TOS (ignored)");
+ if (setsockopt (data, IPPROTO_IP, IP_TOS, (char *) &on, sizeof (int)) < 0)
+ warn ("setsockopt TOS (ignored)");
#endif
return (0);
bad:
- close(data), data = -1;
+ close (data), data = -1;
if (tmpno)
sendport = 1;
return (1);
}
FILE *
-dataconn(char *lmode)
+dataconn (char *lmode)
{
struct sockaddr_in from;
int s, fromlen = sizeof (from), tos;
if (passivemode)
- return (fdopen(data, lmode));
+ return (fdopen (data, lmode));
- s = accept(data, (struct sockaddr *) &from, &fromlen);
+ s = accept (data, (struct sockaddr *) & from, &fromlen);
if (s < 0) {
- warn("accept");
- close(data), data = -1;
+ warn ("accept");
+ close (data), data = -1;
return (NULL);
}
- close(data);
+ close (data);
data = s;
#if defined(IP_TOS) && defined(HAVE_SETSOCKOPT)
tos = IPTOS_THROUGHPUT;
- if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos, sizeof(int)) < 0)
- warn("setsockopt TOS (ignored)");
+ if (setsockopt (s, IPPROTO_IP, IP_TOS, (char *) &tos, sizeof (int)) < 0)
+ warn ("setsockopt TOS (ignored)");
#endif
- return (fdopen(data, lmode));
+ return (fdopen (data, lmode));
}
void
-ptransfer(char *direction, long int bytes,
- struct timeval *t0, struct timeval *t1)
+ptransfer (char *direction, long int bytes,
+ struct timeval * t0, struct timeval * t1)
{
struct timeval td;
float s;
float bs;
int prec;
char *unit;
-
+
if (verbose) {
td.tv_sec = t1->tv_sec - t0->tv_sec;
td.tv_usec = t1->tv_usec - t0->tv_usec;
- if(td.tv_usec < 0){
+ if (td.tv_usec < 0) {
td.tv_sec--;
td.tv_usec += 1000000;
}
s = td.tv_sec + (td.tv_usec / 1000000.);
- bs = bytes / (s?s:1);
- if(bs >= 1048576){
+ bs = bytes / (s ? s : 1);
+ if (bs >= 1048576) {
bs /= 1048576;
unit = "M";
prec = 2;
- }else if(bs >= 1024){
+ } else if (bs >= 1024) {
bs /= 1024;
unit = "k";
prec = 1;
- }else{
+ } else {
unit = "";
prec = 0;
}
-
- printf("%ld bytes %s in %.3g seconds (%.*f %sbyte/s)\n",
- bytes, direction, s, prec, bs, unit);
+
+ printf ("%ld bytes %s in %.3g seconds (%.*f %sbyte/s)\n",
+ bytes, direction, s, prec, bs, unit);
}
}
void
-psabort(int sig)
+psabort (int sig)
{
abrtflag++;
}
void
-pswitch(int flag)
+pswitch (int flag)
{
sighand oldintr;
static struct comvars {
@@ -1357,7 +1354,7 @@ pswitch(int flag)
struct comvars *ip, *op;
abrtflag = 0;
- oldintr = signal(SIGINT, psabort);
+ oldintr = signal (SIGINT, psabort);
if (flag) {
if (proxy)
return;
@@ -1374,8 +1371,7 @@ pswitch(int flag)
ip->connect = connected;
connected = op->connect;
if (hostname) {
- strncpy(ip->name, hostname, sizeof(ip->name) - 1);
- ip->name[strlen(ip->name)] = '\0';
+ strcpy_truncate (ip->name, hostname, sizeof (ip->name));
} else
ip->name[0] = 0;
hostname = op->name;
@@ -1401,48 +1397,44 @@ pswitch(int flag)
mcase = op->mcse;
ip->ntflg = ntflag;
ntflag = op->ntflg;
- strncpy(ip->nti, ntin, 16);
- (ip->nti)[strlen(ip->nti)] = '\0';
- strcpy(ntin, op->nti);
- strncpy(ip->nto, ntout, 16);
- (ip->nto)[strlen(ip->nto)] = '\0';
- strcpy(ntout, op->nto);
+ strcpy_truncate (ip->nti, ntin, sizeof (ip->nti));
+ strcpy_truncate (ntin, op->nti, 17);
+ strcpy_truncate (ip->nto, ntout, sizeof (ip->nto));
+ strcpy_truncate (ntout, op->nto, 17);
ip->mapflg = mapflag;
mapflag = op->mapflg;
- strncpy(ip->mi, mapin, MaxPathLen - 1);
- (ip->mi)[strlen(ip->mi)] = '\0';
- strcpy(mapin, op->mi);
- strncpy(ip->mo, mapout, MaxPathLen - 1);
- (ip->mo)[strlen(ip->mo)] = '\0';
- strcpy(mapout, op->mo);
+ strcpy_truncate (ip->mi, mapin, MaxPathLen);
+ strcpy_truncate (mapin, op->mi, MaxPathLen);
+ strcpy_truncate (ip->mo, mapout, MaxPathLen);
+ strcpy_truncate (mapout, op->mo, MaxPathLen);
signal(SIGINT, oldintr);
if (abrtflag) {
abrtflag = 0;
- (*oldintr)(SIGINT);
+ (*oldintr) (SIGINT);
}
}
void
-abortpt(int sig)
+abortpt (int sig)
{
- printf("\n");
- fflush(stdout);
+ printf ("\n");
+ fflush (stdout);
ptabflg++;
mflag = 0;
abrtflag = 0;
- longjmp(ptabort, 1);
+ longjmp (ptabort, 1);
}
void
-proxtrans(char *cmd, char *local, char *remote)
+proxtrans (char *cmd, char *local, char *remote)
{
sighand oldintr;
int secndflag = 0, prox_type, nfnd;
char *cmd2;
fd_set mask;
- if (strcmp(cmd, "RETR"))
+ if (strcmp (cmd, "RETR"))
cmd2 = "RETR";
else
cmd2 = runique ? "STOU" : "STOR";
@@ -1453,148 +1445,147 @@ proxtrans(char *cmd, char *local, char *remote)
prox_type = TYPE_A;
}
if (curtype != prox_type)
- changetype(prox_type, 1);
- if (command("PASV") != COMPLETE) {
- printf("proxy server does not support third party transfers.\n");
+ changetype (prox_type, 1);
+ if (command ("PASV") != COMPLETE) {
+ printf ("proxy server does not support third party transfers.\n");
return;
}
- pswitch(0);
+ pswitch (0);
if (!connected) {
- printf("No primary connection\n");
- pswitch(1);
+ printf ("No primary connection\n");
+ pswitch (1);
code = -1;
return;
}
if (curtype != prox_type)
- changetype(prox_type, 1);
- if (command("PORT %s", pasv) != COMPLETE) {
- pswitch(1);
+ changetype (prox_type, 1);
+ if (command ("PORT %s", pasv) != COMPLETE) {
+ pswitch (1);
return;
}
- if (setjmp(ptabort))
+ if (setjmp (ptabort))
goto abort;
- oldintr = signal(SIGINT, abortpt);
- if (command("%s %s", cmd, remote) != PRELIM) {
- signal(SIGINT, oldintr);
- pswitch(1);
+ oldintr = signal (SIGINT, abortpt);
+ if (command ("%s %s", cmd, remote) != PRELIM) {
+ signal (SIGINT, oldintr);
+ pswitch (1);
return;
}
- sleep(2);
- pswitch(1);
+ sleep (2);
+ pswitch (1);
secndflag++;
- if (command("%s %s", cmd2, local) != PRELIM)
+ if (command ("%s %s", cmd2, local) != PRELIM)
goto abort;
ptflag++;
- getreply(0);
- pswitch(0);
- getreply(0);
- signal(SIGINT, oldintr);
- pswitch(1);
+ getreply (0);
+ pswitch (0);
+ getreply (0);
+ signal (SIGINT, oldintr);
+ pswitch (1);
ptflag = 0;
- printf("local: %s remote: %s\n", local, remote);
+ printf ("local: %s remote: %s\n", local, remote);
return;
abort:
- signal(SIGINT, SIG_IGN);
+ signal (SIGINT, SIG_IGN);
ptflag = 0;
- if (strcmp(cmd, "RETR") && !proxy)
- pswitch(1);
- else if (!strcmp(cmd, "RETR") && proxy)
- pswitch(0);
- if (!cpend && !secndflag) { /* only here if cmd = "STOR" (proxy=1) */
- if (command("%s %s", cmd2, local) != PRELIM) {
- pswitch(0);
+ if (strcmp (cmd, "RETR") && !proxy)
+ pswitch (1);
+ else if (!strcmp (cmd, "RETR") && proxy)
+ pswitch (0);
+ if (!cpend && !secndflag) { /* only here if cmd = "STOR" (proxy=1) */
+ if (command ("%s %s", cmd2, local) != PRELIM) {
+ pswitch (0);
if (cpend)
- abort_remote((FILE *) NULL);
+ abort_remote ((FILE *) NULL);
}
- pswitch(1);
+ pswitch (1);
if (ptabflg)
code = -1;
- signal(SIGINT, oldintr);
+ signal (SIGINT, oldintr);
return;
}
if (cpend)
- abort_remote((FILE *) NULL);
- pswitch(!proxy);
- if (!cpend && !secndflag) { /* only if cmd = "RETR" (proxy=1) */
- if (command("%s %s", cmd2, local) != PRELIM) {
- pswitch(0);
+ abort_remote ((FILE *) NULL);
+ pswitch (!proxy);
+ if (!cpend && !secndflag) { /* only if cmd = "RETR" (proxy=1) */
+ if (command ("%s %s", cmd2, local) != PRELIM) {
+ pswitch (0);
if (cpend)
- abort_remote((FILE *) NULL);
- pswitch(1);
+ abort_remote ((FILE *) NULL);
+ pswitch (1);
if (ptabflg)
code = -1;
- signal(SIGINT, oldintr);
+ signal (SIGINT, oldintr);
return;
}
}
if (cpend)
- abort_remote((FILE *) NULL);
- pswitch(!proxy);
+ abort_remote ((FILE *) NULL);
+ pswitch (!proxy);
if (cpend) {
- FD_ZERO(&mask);
- FD_SET(fileno(cin), &mask);
- if ((nfnd = empty(&mask, 10)) <= 0) {
+ FD_ZERO (&mask);
+ FD_SET (fileno (cin), &mask);
+ if ((nfnd = empty (&mask, 10)) <= 0) {
if (nfnd < 0) {
- warn("abort");
+ warn ("abort");
}
if (ptabflg)
code = -1;
- lostpeer(0);
+ lostpeer (0);
}
- getreply(0);
- getreply(0);
+ getreply (0);
+ getreply (0);
}
if (proxy)
- pswitch(0);
- pswitch(1);
+ pswitch (0);
+ pswitch (1);
if (ptabflg)
code = -1;
- signal(SIGINT, oldintr);
+ signal (SIGINT, oldintr);
}
void
-reset(int argc, char **argv)
+reset (int argc, char **argv)
{
fd_set mask;
int nfnd = 1;
- FD_ZERO(&mask);
+ FD_ZERO (&mask);
while (nfnd > 0) {
- FD_SET(fileno(cin), &mask);
- if ((nfnd = empty(&mask,0)) < 0) {
- warn("reset");
+ FD_SET (fileno (cin), &mask);
+ if ((nfnd = empty (&mask, 0)) < 0) {
+ warn ("reset");
code = -1;
lostpeer(0);
- }
- else if (nfnd) {
+ } else if (nfnd) {
getreply(0);
}
}
}
char *
-gunique(char *local)
+gunique (char *local)
{
static char new[MaxPathLen];
- char *cp = strrchr(local, '/');
- int d, count=0;
+ char *cp = strrchr (local, '/');
+ int d, count = 0;
char ext = '1';
if (cp)
*cp = '\0';
- d = access(cp ? local : ".", 2);
+ d = access (cp ? local : ".", 2);
if (cp)
*cp = '/';
if (d < 0) {
- warn("local: %s", local);
+ warn ("local: %s", local);
return NULL;
}
- strcpy(new, local);
+ strcpy_truncate (new, local, sizeof(new));
cp = new + strlen(new);
*cp++ = '.';
while (!d) {
if (++count == 100) {
- printf("runique: can't find unique file name.\n");
+ printf ("runique: can't find unique file name.\n");
return NULL;
}
*cp++ = ext;
@@ -1603,7 +1594,7 @@ gunique(char *local)
ext = '0';
else
ext++;
- if ((d = access(new, 0)) < 0)
+ if ((d = access (new, 0)) < 0)
break;
if (ext != '0')
cp--;
@@ -1618,7 +1609,7 @@ gunique(char *local)
}
void
-abort_remote(FILE *din)
+abort_remote (FILE * din)
{
char buf[BUFSIZ];
int nfnd;
@@ -1628,31 +1619,31 @@ abort_remote(FILE *din)
* send IAC in urgent mode instead of DM because 4.3BSD places oob mark
* after urgent byte rather than before as is protocol now
*/
- snprintf(buf, sizeof(buf), "%c%c%c", IAC, IP, IAC);
- if (send(fileno(cout), buf, 3, MSG_OOB) != 3)
- warn("abort");
- fprintf(cout,"%cABOR\r\n", DM);
- fflush(cout);
- FD_ZERO(&mask);
- FD_SET(fileno(cin), &mask);
- if (din) {
- FD_SET(fileno(din), &mask);
- }
- if ((nfnd = empty(&mask, 10)) <= 0) {
+ snprintf (buf, sizeof (buf), "%c%c%c", IAC, IP, IAC);
+ if (send (fileno (cout), buf, 3, MSG_OOB) != 3)
+ warn ("abort");
+ fprintf (cout, "%cABOR\r\n", DM);
+ fflush (cout);
+ FD_ZERO (&mask);
+ FD_SET (fileno (cin), &mask);
+ if (din) {
+ FD_SET (fileno (din), &mask);
+ }
+ if ((nfnd = empty (&mask, 10)) <= 0) {
if (nfnd < 0) {
- warn("abort");
+ warn ("abort");
}
if (ptabflg)
code = -1;
- lostpeer(0);
+ lostpeer (0);
}
- if (din && FD_ISSET(fileno(din), &mask)) {
- while (read(fileno(din), buf, BUFSIZ) > 0)
- /* LOOP */;
+ if (din && FD_ISSET (fileno (din), &mask)) {
+ while (read (fileno (din), buf, BUFSIZ) > 0)
+ /* LOOP */ ;
}
- if (getreply(0) == ERROR && code == 552) {
+ if (getreply (0) == ERROR && code == 552) {
/* 552 needed for nic style abort */
- getreply(0);
+ getreply (0);
}
- getreply(0);
+ getreply (0);
}