aboutsummaryrefslogtreecommitdiff
path: root/networking/ftpd.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2009-03-17 12:23:24 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2009-03-17 12:23:24 +0000
commitedb0de4283e00bbf930af689a90d8ae01c6b017b (patch)
treebc6cfab3e84d3217f199a4401a21a57ef77f82bb /networking/ftpd.c
parente6c94a611a9f2602caeaec49eccb5a63b1877c61 (diff)
downloadbusybox-w32-edb0de4283e00bbf930af689a90d8ae01c6b017b.tar.gz
busybox-w32-edb0de4283e00bbf930af689a90d8ae01c6b017b.tar.bz2
busybox-w32-edb0de4283e00bbf930af689a90d8ae01c6b017b.zip
ftpd: implement -vv verbosity
function old new delta ftpd_main 2097 2190 +93 verbose_log - 33 +33 cmdio_write_raw 12 34 +22 cmdio_write_ok 25 45 +20 cmdio_write_error 25 45 +20 cmdio_write 62 78 +16 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 5/0 up/down: 204/0) Total: 204 bytes
Diffstat (limited to 'networking/ftpd.c')
-rw-r--r--networking/ftpd.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/networking/ftpd.c b/networking/ftpd.c
index 583d7b387..c932497e5 100644
--- a/networking/ftpd.c
+++ b/networking/ftpd.c
@@ -89,6 +89,7 @@ struct globals {
89 int local_file_fd; 89 int local_file_fd;
90 unsigned end_time; 90 unsigned end_time;
91 unsigned timeout; 91 unsigned timeout;
92 unsigned verbose;
92 off_t local_file_pos; 93 off_t local_file_pos;
93 off_t restart_pos; 94 off_t restart_pos;
94 len_and_sockaddr *local_addr; 95 len_and_sockaddr *local_addr;
@@ -158,6 +159,12 @@ replace_char(char *str, char from, char to)
158 return p - str; 159 return p - str;
159} 160}
160 161
162static void
163verbose_log(const char *str)
164{
165 bb_error_msg("%.*s", (int)strcspn(str, "\r\n"), str);
166}
167
161/* NB: status_str is char[4] packed into uint32_t */ 168/* NB: status_str is char[4] packed into uint32_t */
162static void 169static void
163cmdio_write(uint32_t status_str, const char *str) 170cmdio_write(uint32_t status_str, const char *str)
@@ -174,6 +181,8 @@ cmdio_write(uint32_t status_str, const char *str)
174 181
175 response[len++] = '\n'; /* tack on trailing '\n' */ 182 response[len++] = '\n'; /* tack on trailing '\n' */
176 xwrite(STDOUT_FILENO, response, len); 183 xwrite(STDOUT_FILENO, response, len);
184 if (G.verbose > 1)
185 verbose_log(response);
177 free(response); 186 free(response);
178} 187}
179 188
@@ -182,6 +191,8 @@ cmdio_write_ok(unsigned status)
182{ 191{
183 *(uint32_t *) G.msg_ok = status; 192 *(uint32_t *) G.msg_ok = status;
184 xwrite(STDOUT_FILENO, G.msg_ok, sizeof("NNN " MSG_OK) - 1); 193 xwrite(STDOUT_FILENO, G.msg_ok, sizeof("NNN " MSG_OK) - 1);
194 if (G.verbose > 1)
195 verbose_log(G.msg_ok);
185} 196}
186#define WRITE_OK(a) cmdio_write_ok(STRNUM32sp(a)) 197#define WRITE_OK(a) cmdio_write_ok(STRNUM32sp(a))
187 198
@@ -191,6 +202,8 @@ cmdio_write_error(unsigned status)
191{ 202{
192 *(uint32_t *) G.msg_err = status; 203 *(uint32_t *) G.msg_err = status;
193 xwrite(STDOUT_FILENO, G.msg_err, sizeof("NNN " MSG_ERR) - 1); 204 xwrite(STDOUT_FILENO, G.msg_err, sizeof("NNN " MSG_ERR) - 1);
205 if (G.verbose > 1)
206 verbose_log(G.msg_err);
194} 207}
195#define WRITE_ERR(a) cmdio_write_error(STRNUM32sp(a)) 208#define WRITE_ERR(a) cmdio_write_error(STRNUM32sp(a))
196 209
@@ -198,6 +211,8 @@ static void
198cmdio_write_raw(const char *p_text) 211cmdio_write_raw(const char *p_text)
199{ 212{
200 xwrite_str(STDOUT_FILENO, p_text); 213 xwrite_str(STDOUT_FILENO, p_text);
214 if (G.verbose > 1)
215 verbose_log(p_text);
201} 216}
202 217
203static void 218static void
@@ -885,10 +900,11 @@ cmdio_get_cmd_and_arg(void)
885 900
886 /* Trailing '\n' is already stripped, strip '\r' */ 901 /* Trailing '\n' is already stripped, strip '\r' */
887 len = strlen(cmd) - 1; 902 len = strlen(cmd) - 1;
888 while ((ssize_t)len >= 0 && cmd[len] == '\r') { 903 if ((ssize_t)len >= 0 && cmd[len] == '\r')
889 cmd[len] = '\0'; 904 cmd[len--] = '\0';
890 len--; 905
891 } 906 if (G.verbose > 1)
907 bb_error_msg("%s", cmd);
892 908
893 G.ftp_arg = strchr(cmd, ' '); 909 G.ftp_arg = strchr(cmd, ' ');
894 if (G.ftp_arg != NULL) 910 if (G.ftp_arg != NULL)
@@ -953,8 +969,8 @@ int ftpd_main(int argc, char **argv)
953 969
954 abs_timeout = 1 * 60 * 60; 970 abs_timeout = 1 * 60 * 60;
955 G.timeout = 2 * 60; 971 G.timeout = 2 * 60;
956 opt_complementary = "t+:T+"; 972 opt_complementary = "t+:T+:vv";
957 opts = getopt32(argv, "l1vS" USE_FEATURE_FTP_WRITE("w") "t:T:", &G.timeout, &abs_timeout); 973 opts = getopt32(argv, "l1vS" USE_FEATURE_FTP_WRITE("w") "t:T:", &G.timeout, &abs_timeout, &G.verbose);
958 if (opts & (OPT_l|OPT_1)) { 974 if (opts & (OPT_l|OPT_1)) {
959 /* Our secret backdoor to ls */ 975 /* Our secret backdoor to ls */
960 memset(&G, 0, sizeof(G)); 976 memset(&G, 0, sizeof(G));
@@ -964,9 +980,13 @@ int ftpd_main(int argc, char **argv)
964 argv[2] = (char*)"--"; 980 argv[2] = (char*)"--";
965 return ls_main(argc, argv); 981 return ls_main(argc, argv);
966 } 982 }
967 G.end_time = monotonic_sec() + abs_timeout; 983 if (abs_timeout | G.timeout) {
968 if (G.timeout > abs_timeout) 984 if (abs_timeout == 0)
969 G.timeout = abs_timeout + 1; 985 abs_timeout = INT_MAX;
986 G.end_time = monotonic_sec() + abs_timeout;
987 if (G.timeout > abs_timeout)
988 G.timeout = abs_timeout;
989 }
970 strcpy(G.msg_ok + 4, MSG_OK ); 990 strcpy(G.msg_ok + 4, MSG_OK );
971 strcpy(G.msg_err + 4, MSG_ERR); 991 strcpy(G.msg_err + 4, MSG_ERR);
972 992
@@ -988,6 +1008,8 @@ int ftpd_main(int argc, char **argv)
988 openlog(applet_name, LOG_PID | LOG_NDELAY, LOG_DAEMON); 1008 openlog(applet_name, LOG_PID | LOG_NDELAY, LOG_DAEMON);
989 logmode |= LOGMODE_SYSLOG; 1009 logmode |= LOGMODE_SYSLOG;
990 } 1010 }
1011 if (logmode)
1012 applet_name = xasprintf("%s[%u]", applet_name, (int)getpid());
991 1013
992 G.proc_self_fd = xopen("/proc/self", O_RDONLY | O_DIRECTORY); 1014 G.proc_self_fd = xopen("/proc/self", O_RDONLY | O_DIRECTORY);
993 1015