diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-03-17 12:23:24 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-03-17 12:23:24 +0000 |
commit | edb0de4283e00bbf930af689a90d8ae01c6b017b (patch) | |
tree | bc6cfab3e84d3217f199a4401a21a57ef77f82bb /networking/ftpd.c | |
parent | e6c94a611a9f2602caeaec49eccb5a63b1877c61 (diff) | |
download | busybox-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.c | 40 |
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 | ||
162 | static void | ||
163 | verbose_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 */ |
162 | static void | 169 | static void |
163 | cmdio_write(uint32_t status_str, const char *str) | 170 | cmdio_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 | |||
198 | cmdio_write_raw(const char *p_text) | 211 | cmdio_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 | ||
203 | static void | 218 | static 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 | ||