projects
/
oweals
/
busybox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ifupdown: improve compatibility with Debian
[oweals/busybox.git]
/
networking
/
tftp.c
diff --git
a/networking/tftp.c
b/networking/tftp.c
index f52e49d51f07ceca64a7d504b893c4fa3b1ec513..ce48a1edd5f5089f5a68ea3467c9b5d8f59465c9 100644
(file)
--- a/
networking/tftp.c
+++ b/
networking/tftp.c
@@
-23,7
+23,6
@@
//usage: "[OPTIONS] HOST [PORT]"
//usage:#define tftp_full_usage "\n\n"
//usage: "Transfer a file from/to tftp server\n"
//usage: "[OPTIONS] HOST [PORT]"
//usage:#define tftp_full_usage "\n\n"
//usage: "Transfer a file from/to tftp server\n"
-//usage: "\nOptions:"
//usage: "\n -l FILE Local FILE"
//usage: "\n -r FILE Remote FILE"
//usage: IF_FEATURE_TFTP_GET(
//usage: "\n -l FILE Local FILE"
//usage: "\n -r FILE Remote FILE"
//usage: IF_FEATURE_TFTP_GET(
@@
-43,15
+42,16
@@
//usage: "\n"
//usage: "tftpd should be used as an inetd service.\n"
//usage: "tftpd's line for inetd.conf:\n"
//usage: "\n"
//usage: "tftpd should be used as an inetd service.\n"
//usage: "tftpd's line for inetd.conf:\n"
-//usage: " 69 dgram udp nowait root tftpd tftpd /files/to/serve\n"
+//usage: " 69 dgram udp nowait root tftpd tftpd
-l
/files/to/serve\n"
//usage: "It also can be ran from udpsvd:\n"
//usage: " udpsvd -vE 0.0.0.0 69 tftpd /files/to/serve\n"
//usage: "It also can be ran from udpsvd:\n"
//usage: " udpsvd -vE 0.0.0.0 69 tftpd /files/to/serve\n"
-//usage: "\nOptions:"
//usage: "\n -r Prohibit upload"
//usage: "\n -c Allow file creation via upload"
//usage: "\n -u Access files as USER"
//usage: "\n -r Prohibit upload"
//usage: "\n -c Allow file creation via upload"
//usage: "\n -u Access files as USER"
+//usage: "\n -l Log to syslog (inetd mode requires this)"
#include "libbb.h"
#include "libbb.h"
+#include <syslog.h>
#if ENABLE_FEATURE_TFTP_GET || ENABLE_FEATURE_TFTP_PUT
#if ENABLE_FEATURE_TFTP_GET || ENABLE_FEATURE_TFTP_PUT
@@
-92,6
+92,7
@@
enum {
TFTPD_OPT_r = (1 << 8) * ENABLE_TFTPD,
TFTPD_OPT_c = (1 << 9) * ENABLE_TFTPD,
TFTPD_OPT_u = (1 << 10) * ENABLE_TFTPD,
TFTPD_OPT_r = (1 << 8) * ENABLE_TFTPD,
TFTPD_OPT_c = (1 << 9) * ENABLE_TFTPD,
TFTPD_OPT_u = (1 << 10) * ENABLE_TFTPD,
+ TFTPD_OPT_l = (1 << 11) * ENABLE_TFTPD,
};
#if ENABLE_FEATURE_TFTP_GET && !ENABLE_FEATURE_TFTP_PUT
};
#if ENABLE_FEATURE_TFTP_GET && !ENABLE_FEATURE_TFTP_PUT
@@
-455,6
+456,7
@@
static int tftp_protocol(
finished = 1;
}
cp += len;
finished = 1;
}
cp += len;
+ IF_FEATURE_TFTP_PROGRESS_BAR(G.pos += len;)
}
send_pkt:
/* Send packet */
}
send_pkt:
/* Send packet */
@@
-476,8
+478,6
@@
static int tftp_protocol(
xsendto(socket_fd, xbuf, send_len, &peer_lsa->u.sa, peer_lsa->len);
#if ENABLE_FEATURE_TFTP_PROGRESS_BAR
xsendto(socket_fd, xbuf, send_len, &peer_lsa->u.sa, peer_lsa->len);
#if ENABLE_FEATURE_TFTP_PROGRESS_BAR
- if (ENABLE_TFTP && remote_file) /* tftp */
- G.pos = (block_nr - 1) * (uoff_t)blksize;
if (is_bb_progress_inited(&G.pmt))
tftp_progress_update();
#endif
if (is_bb_progress_inited(&G.pmt))
tftp_progress_update();
#endif
@@
-621,6
+621,7
@@
static int tftp_protocol(
if (sz != blksize) {
finished = 1;
}
if (sz != blksize) {
finished = 1;
}
+ IF_FEATURE_TFTP_PROGRESS_BAR(G.pos += sz;)
continue; /* send ACK */
}
/* Disabled to cope with servers with Sorcerer's Apprentice Syndrome */
continue; /* send ACK */
}
/* Disabled to cope with servers with Sorcerer's Apprentice Syndrome */
@@
-782,10
+783,15
@@
int tftpd_main(int argc UNUSED_PARAM, char **argv)
peer_lsa->len = our_lsa->len;
/* Shifting to not collide with TFTP_OPTs */
peer_lsa->len = our_lsa->len;
/* Shifting to not collide with TFTP_OPTs */
- opt = option_mask32 = TFTPD_OPT | (getopt32(argv, "rcu:", &user_opt) << 8);
+ opt = option_mask32 = TFTPD_OPT | (getopt32(argv, "rcu:
l
", &user_opt) << 8);
argv += optind;
argv += optind;
- if (argv[0])
- xchdir(argv[0]);
+ if (opt & TFTPD_OPT_l) {
+ openlog(applet_name, LOG_PID, LOG_DAEMON);
+ logmode = LOGMODE_SYSLOG;
+ }
+ if (argv[0]) {
+ xchroot(argv[0]);
+ }
result = recv_from_to(STDIN_FILENO, block_buf, sizeof(block_buf),
0 /* flags */,
result = recv_from_to(STDIN_FILENO, block_buf, sizeof(block_buf),
0 /* flags */,
@@
-808,7
+814,8
@@
int tftpd_main(int argc UNUSED_PARAM, char **argv)
goto err;
}
mode = local_file + strlen(local_file) + 1;
goto err;
}
mode = local_file + strlen(local_file) + 1;
- if (mode >= block_buf + result || strcmp(mode, "octet") != 0) {
+ /* RFC 1350 says mode string is case independent */
+ if (mode >= block_buf + result || strcasecmp(mode, "octet") != 0) {
goto err;
}
# if ENABLE_FEATURE_TFTP_BLOCKSIZE
goto err;
}
# if ENABLE_FEATURE_TFTP_BLOCKSIZE