X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=networking%2Fftpgetput.c;h=35b4e4b6487b3ccb790956f5a9c21f887a0bacb5;hb=179e88bec91cfe58096900dc5509a080ff37b083;hp=c68d0ace2e5fce17f0255689692d1450e81236f1;hpb=0ef64bdb40c54681e8dd5ab8df42ac88e4ab1d4a;p=oweals%2Fbusybox.git diff --git a/networking/ftpgetput.c b/networking/ftpgetput.c index c68d0ace2..35b4e4b64 100644 --- a/networking/ftpgetput.c +++ b/networking/ftpgetput.c @@ -12,8 +12,67 @@ * * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ +//config:config FTPGET +//config: bool "ftpget" +//config: default y +//config: help +//config: Retrieve a remote file via FTP. +//config: +//config:config FTPPUT +//config: bool "ftpput" +//config: default y +//config: help +//config: Store a remote file via FTP. +//config: +//config:config FEATURE_FTPGETPUT_LONG_OPTIONS +//config: bool "Enable long options in ftpget/ftpput" +//config: default y +//config: depends on LONG_OPTS && (FTPGET || FTPPUT) + +//applet:IF_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpget)) +//applet:IF_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpput)) + +//kbuild:lib-$(CONFIG_FTPGET) += ftpgetput.o +//kbuild:lib-$(CONFIG_FTPPUT) += ftpgetput.o + +//usage:#define ftpget_trivial_usage +//usage: "[OPTIONS] HOST [LOCAL_FILE] REMOTE_FILE" +//usage:#define ftpget_full_usage "\n\n" +//usage: "Download a file via FTP\n" +//usage: IF_FEATURE_FTPGETPUT_LONG_OPTIONS( +//usage: "\n -c,--continue Continue previous transfer" +//usage: "\n -v,--verbose Verbose" +//usage: "\n -u,--username USER Username" +//usage: "\n -p,--password PASS Password" +//usage: "\n -P,--port NUM Port" +//usage: ) +//usage: IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS( +//usage: "\n -c Continue previous transfer" +//usage: "\n -v Verbose" +//usage: "\n -u USER Username" +//usage: "\n -p PASS Password" +//usage: "\n -P NUM Port" +//usage: ) +//usage: +//usage:#define ftpput_trivial_usage +//usage: "[OPTIONS] HOST [REMOTE_FILE] LOCAL_FILE" +//usage:#define ftpput_full_usage "\n\n" +//usage: "Upload a file to a FTP server\n" +//usage: IF_FEATURE_FTPGETPUT_LONG_OPTIONS( +//usage: "\n -v,--verbose Verbose" +//usage: "\n -u,--username USER Username" +//usage: "\n -p,--password PASS Password" +//usage: "\n -P,--port NUM Port" +//usage: ) +//usage: IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS( +//usage: "\n -v Verbose" +//usage: "\n -u USER Username" +//usage: "\n -p PASS Password" +//usage: "\n -P NUM Port number" +//usage: ) #include "libbb.h" +#include "common_bufsiz.h" struct globals { const char *user; @@ -22,13 +81,10 @@ struct globals { FILE *control_stream; int verbose_flag; int do_continue; - char buf[1]; /* actually [BUFSZ] */ + char buf[4]; /* actually [BUFSZ] */ } FIX_ALIASING; -#define G (*(struct globals*)&bb_common_bufsiz1) +#define G (*(struct globals*)bb_common_bufsiz1) enum { BUFSZ = COMMON_BUFSIZE - offsetof(struct globals, buf) }; -struct BUG_G_too_big { - char BUG_G_too_big[sizeof(G) <= COMMON_BUFSIZE ? 1 : -1]; -}; #define user (G.user ) #define password (G.password ) #define lsa (G.lsa ) @@ -36,7 +92,10 @@ struct BUG_G_too_big { #define verbose_flag (G.verbose_flag ) #define do_continue (G.do_continue ) #define buf (G.buf ) -#define INIT_G() do { } while (0) +#define INIT_G() do { \ + setup_common_bufsiz(); \ + BUILD_BUG_ON(sizeof(G) > COMMON_BUFSIZE); \ +} while (0) static void ftp_die(const char *msg) NORETURN; @@ -67,7 +126,7 @@ static int ftpcmd(const char *s1, const char *s2) } do { - strcpy(buf, "EOF"); + strcpy(buf, "EOF"); /* for ftp_die */ if (fgets(buf, BUFSZ - 2, control_stream) == NULL) { ftp_die(NULL); } @@ -151,7 +210,7 @@ TODO2: need to stop ignoring IP address in PASV response. *buf_ptr = '\0'; port_num += xatoul_range(buf_ptr + 1, 0, 255) * 256; - set_nport(lsa, htons(port_num)); + set_nport(&lsa->u.sa, htons(port_num)); return xconnect_stream(lsa); } @@ -278,7 +337,6 @@ static const char ftpgetput_longopts[] ALIGN1 = int ftpgetput_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int ftpgetput_main(int argc UNUSED_PARAM, char **argv) { - unsigned opt; const char *port = "ftp"; /* socket to ftp server */ @@ -307,7 +365,7 @@ int ftpgetput_main(int argc UNUSED_PARAM, char **argv) applet_long_options = ftpgetput_longopts; #endif opt_complementary = "-2:vv:cc"; /* must have 2 to 3 params; -v and -c count */ - opt = getopt32(argv, "cvu:p:P:", &user, &password, &port, + getopt32(argv, "cvu:p:P:", &user, &password, &port, &verbose_flag, &do_continue); argv += optind;