X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fftpsbr.c;h=7d6d72b4722281bd21c9f49c5c343eaea4623f5b;hp=fb306f47dc30f3913129d70037005df4d612c77e;hb=714b5c530ece27ea2835a313013f5b770163403c;hpb=ced6090a330d3d83d0bce709f756aa3d7d65fea4 diff --git a/uip/ftpsbr.c b/uip/ftpsbr.c index fb306f4..7d6d72b 100644 --- a/uip/ftpsbr.c +++ b/uip/ftpsbr.c @@ -31,46 +31,46 @@ extern int v_verbose; #include #define start_tcp_client(res) \ - socket (res->ai_family, res->ai_socktype, res->ai_protocol) + socket(res->ai_family, res->ai_socktype, res->ai_protocol) #define join_tcp_server(fd, sock, len) \ - connect ((fd), (struct sockaddr *) (sock), len) + connect((fd), (struct sockaddr *) (sock), len) /* ** prototypes */ -int ftp_get (char *, char *, char *, char *, char *, char *, int, int); -int ftp_trans (char *, char *, char *, char *, char *, char *, char *, +int ftp_get(char *, char *, char *, char *, char *, char *, int, int); +int ftp_trans(char *, char *, char *, char *, char *, char *, char *, int, int); /* ** static prototypes */ -static int start_tcp_server (struct sockaddr_in *, int, int, int); -static void _asnprintf (char *, int, char *, va_list); -static int ftp_quit (void); -static int ftp_read (char *, char *, char *, int); -static int initconn (void); -static int dataconn (void); -static int command (int arg1, ...); -static int vcommand (int, va_list); -static int getreply (int, int); +static int start_tcp_server(struct sockaddr_in *, int, int, int); +static void _asnprintf(char *, int, char *, va_list); +static int ftp_quit(void); +static int ftp_read(char *, char *, char *, int); +static int initconn(void); +static int dataconn(void); +static int command(int arg1, ...); +static int vcommand(int, va_list); +static int getreply(int, int); static int -start_tcp_server (struct sockaddr_in *sock, int backlog, int opt1, int opt2) +start_tcp_server(struct sockaddr_in *sock, int backlog, int opt1, int opt2) { int eindex, sd; - if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == NOTOK) + if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == NOTOK) return NOTOK; - if (bind (sd, (struct sockaddr *) sock, sizeof *sock) == NOTOK) { + if (bind(sd, (struct sockaddr *) sock, sizeof *sock) == NOTOK) { eindex = errno; - close (sd); + close(sd); errno = eindex; } else { - listen (sd, backlog); + listen(sd, backlog); } return sd; @@ -80,7 +80,7 @@ start_tcp_server (struct sockaddr_in *sock, int backlog, int opt1, int opt2) static int __len__; #define join_tcp_client(fd,sock) \ - accept ((fd), (struct sockaddr *) (sock), \ + accept((fd), (struct sockaddr *) (sock), \ (__len__ = sizeof *(sock), &__len__)) #define read_tcp_socket read @@ -88,7 +88,7 @@ static int __len__; #define close_tcp_socket close static void -_asnprintf (char *bp, int len_bp, char *what, va_list ap) +_asnprintf(char *bp, int len_bp, char *what, va_list ap) { int eindex, len; char *fmt; @@ -96,7 +96,7 @@ _asnprintf (char *bp, int len_bp, char *what, va_list ap) eindex = errno; *bp = '\0'; - fmt = va_arg (ap, char *); + fmt = va_arg(ap, char *); if (fmt) { vsnprintf(bp, len_bp, fmt, ap); @@ -109,16 +109,16 @@ _asnprintf (char *bp, int len_bp, char *what, va_list ap) char *s; if (*what) { - snprintf (bp, len_bp, " %s: ", what); - len = strlen (bp); + snprintf(bp, len_bp, " %s: ", what); + len = strlen(bp); bp += len; len_bp -= len; } if ((s = strerror(eindex))) - strncpy (bp, s, len_bp); + strncpy(bp, s, len_bp); else - snprintf (bp, len_bp, "Error %d", eindex); - bp += strlen (bp); + snprintf(bp, len_bp, "Error %d", eindex); + bp += strlen(bp); } errno = eindex; @@ -126,22 +126,22 @@ _asnprintf (char *bp, int len_bp, char *what, va_list ap) int -ftp_get (char *host, char *user, char *password, char *cwd, +ftp_get(char *host, char *user, char *password, char *cwd, char *remote, char *local, int ascii, int stayopen) { - return ftp_trans (host, user, password, cwd, remote, local, + return ftp_trans(host, user, password, cwd, remote, local, "RETR", ascii, stayopen); } int -ftp_trans (char *host, char *user, char *password, char *cwd, char *remote, +ftp_trans(char *host, char *user, char *password, char *cwd, char *remote, char *local, char *cmd, int ascii, int stayopen) { int result; if (stayopen <= 0) { - result = ftp_quit (); + result = ftp_quit(); if (host == NULL) return result; } @@ -159,32 +159,35 @@ ftp_trans (char *host, char *user, char *password, char *cwd, char *remote, result = getaddrinfo(host, "ftp", &hints, &res); if (result) { - fprintf(stderr, "%s/ftp: %s\n", host, gai_strerror(result)); + fprintf(stderr, "%s/ftp: %s\n", + host, gai_strerror(result)); return NOTOK; } - if ((ftp_fd = start_tcp_client (res)) == NOTOK) { - perror (host); + if ((ftp_fd = start_tcp_client(res)) == NOTOK) { + perror(host); freeaddrinfo(res); return NOTOK; } - if (join_tcp_server (ftp_fd, res->ai_addr, res->ai_addrlen) == NOTOK) { - perror (host); + if (join_tcp_server(ftp_fd, res->ai_addr, res->ai_addrlen) + == NOTOK) { + perror(host); freeaddrinfo(res); - close_tcp_socket (ftp_fd), ftp_fd = NOTOK; + close_tcp_socket(ftp_fd), ftp_fd = NOTOK; return NOTOK; } freeaddrinfo(res); - getreply (1, 0); + getreply(1, 0); if (v_verbose) { - fprintf (stdout, "Connected to %s\n", host); - fflush (stdout); + fprintf(stdout, "Connected to %s\n", host); + fflush(stdout); } if (user) { - if ((result = command (0, "USER %s", user)) == CONTINUE) - result = command (1, "PASS %s", password); + if ((result = command (0, "USER %s", user)) + == CONTINUE) + result = command(1, "PASS %s", password); if (result != COMPLETE) { result = NOTOK; goto out; @@ -196,41 +199,41 @@ ftp_trans (char *host, char *user, char *password, char *cwd, char *remote, } if (cwd && ((result = command (0, "CWD %s", cwd)) != COMPLETE - && result != CONTINUE)) { + && result != CONTINUE)) { result = NOTOK; goto out; } - if (command (1, ascii ? "TYPE A" : "TYPE I") != COMPLETE) { + if (command(1, ascii ? "TYPE A" : "TYPE I") != COMPLETE) { result = NOTOK; goto out; } - result = ftp_read (remote, local, cmd, ascii); + result = ftp_read(remote, local, cmd, ascii); out: ; if (result != OK || !stayopen) - ftp_quit (); + ftp_quit(); return result; } static int -ftp_quit (void) +ftp_quit(void) { int n; if (ftp_fd == NOTOK) return OK; - n = command (1, "QUIT"); - close_tcp_socket (ftp_fd), ftp_fd = NOTOK; + n = command(1, "QUIT"); + close_tcp_socket(ftp_fd), ftp_fd = NOTOK; return (n == 0 || n == COMPLETE ? OK : NOTOK); } static int -ftp_read (char *remote, char *local, char *cmd, int ascii) +ftp_read(char *remote, char *local, char *cmd, int ascii) { int istdio = 0, istore; register int cc; @@ -238,33 +241,33 @@ ftp_read (char *remote, char *local, char *cmd, int ascii) char buffer[BUFSIZ]; FILE *fp = NULL; - if (initconn () == NOTOK) + if (initconn() == NOTOK) goto bad; v_noise = v_verbose; - if (command (-1, *remote ? "%s %s" : "%s", cmd, remote) != PRELIM) + if (command(-1, *remote ? "%s %s" : "%s", cmd, remote) != PRELIM) goto bad; expectingreply++; - if (dataconn () == NOTOK) { + if (dataconn() == NOTOK) { bad: ; if (fp && !istdio) - fclose (fp); + fclose(fp); if (data_fd != NOTOK) - close_tcp_socket (data_fd), data_fd = NOTOK; + close_tcp_socket(data_fd), data_fd = NOTOK; if (expectingreply) - getreply (-2, 0); + getreply(-2, 0); return NOTOK; } - istore = !strcmp (cmd, "STOR"); + istore = !strcmp(cmd, "STOR"); - if ((istdio = !strcmp (local, "-"))) + if ((istdio = !strcmp(local, "-"))) fp = istore ? stdin : stdout; else - if ((fp = fopen (local, istore ? "r" : "w")) == NULL) { - perror (local); + if ((fp = fopen(local, istore ? "r" : "w")) == NULL) { + perror(local); goto bad; } @@ -273,46 +276,48 @@ bad: ; int c; FILE *out; - if (!(out = fdopen (data_fd, "w"))) { - perror ("fdopen"); + if (!(out = fdopen(data_fd, "w"))) { + perror("fdopen"); goto bad; } - while ((c = getc (fp)) != EOF) { + while ((c = getc(fp)) != EOF) { if (c == '\n') - putc ('\r', out); - if (putc (c, out) == EOF) { - perror ("putc"); - fclose (out); + putc('\r', out); + if (putc(c, out) == EOF) { + perror("putc"); + fclose(out); data_fd = NOTOK; goto bad; } } - fclose (out); + fclose(out); data_fd = NOTOK; } else { - while ((cc = fread (buffer, sizeof *buffer, sizeof buffer, fp)) > 0) - if (write_tcp_socket (data_fd, buffer, cc) != cc) { - perror ("write_tcp_socket"); + while ((cc = fread(buffer, sizeof *buffer, + sizeof buffer, fp)) > 0) + if (write_tcp_socket(data_fd, buffer, cc) + != cc) { + perror("write_tcp_socket"); goto bad; } - close_tcp_socket (data_fd), data_fd = NOTOK; + close_tcp_socket(data_fd), data_fd = NOTOK; } } else { if (ascii) { int c; FILE *in; - if (!(in = fdopen (data_fd, "r"))) { - perror ("fdopen"); + if (!(in = fdopen(data_fd, "r"))) { + perror("fdopen"); goto bad; } - while ((c = getc (in)) != EOF) { + while ((c = getc(in)) != EOF) { if (c == '\r') - switch (c = getc (in)) { + switch (c = getc(in)) { case EOF: case '\0': c = '\r'; @@ -322,91 +327,93 @@ bad: ; break; default: - putc ('\r', fp); + putc('\r', fp); break; } - if (putc (c, fp) == EOF) { - perror ("putc"); - fclose (in); + if (putc(c, fp) == EOF) { + perror("putc"); + fclose(in); data_fd = NOTOK; goto bad; } } - fclose (in); + fclose(in); data_fd = NOTOK; } else { - while ((cc = read_tcp_socket (data_fd, buffer, sizeof buffer)) > 0) - if (fwrite (buffer, sizeof *buffer, cc, fp) == 0) { - perror ("fwrite"); + while ((cc = read_tcp_socket(data_fd, buffer, + sizeof buffer)) > 0) + if (fwrite(buffer, sizeof *buffer, cc, fp) + == 0) { + perror("fwrite"); goto bad; } if (cc < 0) { - perror ("read_tcp_socket"); + perror("read_tcp_socket"); goto bad; } - close_tcp_socket (data_fd), data_fd = NOTOK; + close_tcp_socket(data_fd), data_fd = NOTOK; } } if (!istdio) - fclose (fp); + fclose(fp); v_noise = v_verbose; - return (getreply (1, 0) == COMPLETE ? OK : NOTOK); + return (getreply(1, 0) == COMPLETE ? OK : NOTOK); } #define UC(b) (((int) b) & 0xff) static int -initconn (void) +initconn(void) { int len; register char *a, *p; struct sockaddr_in in_socket; - if (getsockname (ftp_fd, (struct sockaddr *) &in_socket, + if (getsockname(ftp_fd, (struct sockaddr *) &in_socket, (len = sizeof(in_socket), &len)) == NOTOK) { - perror ("getsockname"); + perror("getsockname"); return NOTOK; } in_socket.sin_port = 0; - if ((data_fd = start_tcp_server (&in_socket, 1, 0, 0)) == NOTOK) { - perror ("start_tcp_server"); + if ((data_fd = start_tcp_server(&in_socket, 1, 0, 0)) == NOTOK) { + perror("start_tcp_server"); return NOTOK; } - if (getsockname (data_fd, (struct sockaddr *) &in_socket, + if (getsockname(data_fd, (struct sockaddr *) &in_socket, (len = sizeof in_socket, &len)) == NOTOK) { - perror ("getsockname"); + perror("getsockname"); return NOTOK; } a = (char *) &in_socket.sin_addr; p = (char *) &in_socket.sin_port; - if (command (1, "PORT %d,%d,%d,%d,%d,%d", - UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]), - UC(p[0]), UC(p[1])) == COMPLETE) + if (command(1, "PORT %d,%d,%d,%d,%d,%d", + UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]), + UC(p[0]), UC(p[1])) == COMPLETE) return OK; return NOTOK; } static int -dataconn (void) +dataconn(void) { int fd; struct sockaddr_in in_socket; - if ((fd = join_tcp_client (data_fd, &in_socket)) == NOTOK) { - perror ("join_tcp_client"); + if ((fd = join_tcp_client(data_fd, &in_socket)) == NOTOK) { + perror("join_tcp_client"); return NOTOK; } - close_tcp_socket (data_fd); + close_tcp_socket(data_fd); data_fd = fd; return OK; @@ -414,20 +421,20 @@ dataconn (void) static int -command (int arg1, ...) +command(int arg1, ...) { int val; va_list ap; - va_start (ap, arg1); - val = vcommand (arg1, ap); - va_end (ap); + va_start(ap, arg1); + val = vcommand(arg1, ap); + va_end(ap); return val; } static int -vcommand (int complete, va_list ap) +vcommand(int complete, va_list ap) { int len; char buffer[BUFSIZ]; @@ -435,24 +442,24 @@ vcommand (int complete, va_list ap) if (ftp_fd == NOTOK) return NOTOK; - _asnprintf (buffer, sizeof(buffer), NULL, ap); + _asnprintf(buffer, sizeof(buffer), NULL, ap); if (v_debug) - fprintf (stderr, "<--- %s\n", buffer); + fprintf(stderr, "<--- %s\n", buffer); - strcat (buffer, "\r\n"); - len = strlen (buffer); + strcat(buffer, "\r\n"); + len = strlen(buffer); - if (write_tcp_socket (ftp_fd, buffer, len) != len) { - perror ("write_tcp_socket"); + if (write_tcp_socket(ftp_fd, buffer, len) != len) { + perror("write_tcp_socket"); return NOTOK; } - return (getreply (complete, !strcmp (buffer, "QUIT"))); + return(getreply(complete, !strcmp(buffer, "QUIT"))); } static int -getreply (int complete, int expecteof) +getreply(int complete, int expecteof) { for (;;) { register int code, dig, n; @@ -466,11 +473,11 @@ getreply (int complete, int expecteof) for (;;) { unsigned char c; - if (read_tcp_socket (ftp_fd, &c, 1) < 1) { + if (read_tcp_socket(ftp_fd, &c, 1) < 1) { if (expecteof) return OK; - perror ("read_tcp_socket"); + perror("read_tcp_socket"); return DONE; } if (c == '\n') @@ -481,7 +488,7 @@ getreply (int complete, int expecteof) if (dig < 4) { if (isdigit(c)) code = code * 10 + (c - '0'); - else if (isspace (c)) + else if (isspace(c)) /* XXX: naughty FTP... */ continuation++; } else @@ -492,21 +499,21 @@ getreply (int complete, int expecteof) } if (v_debug) - fprintf (stderr, "---> %s\n", buffer); + fprintf(stderr, "---> %s\n", buffer); if (continuation) continue; n -= '0'; if (v_noise) { - fprintf (stdout, "%s\n", buffer); - fflush (stdout); + fprintf(stdout, "%s\n", buffer); + fflush(stdout); v_noise = 0; } else if ((complete == -1 && n != PRELIM) || (complete == 0 && n != CONTINUE && n != COMPLETE) || (complete == 1 && n != COMPLETE)) - fprintf (stderr, "%s\n", buffer); + fprintf(stderr, "%s\n", buffer); return n; }