wok annotate busybox/stuff/busybox-1.16.1-ris.u @ rev 5711

busybox: add conspy
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Jun 23 21:48:13 2010 +0200 (2010-06-23)
parents
children
rev   line source
pascal@5684 1 --- busybox-1.16.1/networking/Config.in
pascal@5684 2 +++ busybox-1.16.1/networking/Config.in
pascal@5684 3 @@ -852,6 +852,15 @@
pascal@5684 4 In other words: it should be run from inetd in nowait mode,
pascal@5684 5 or from udpsvd. Example: "udpsvd -E 0 69 tftpd DIR"
pascal@5684 6
pascal@5684 7 +config FEATURE_TFTPD_RIS
pascal@5684 8 + bool "Enable \"RIS\" support"
pascal@5684 9 + default y
pascal@5684 10 + depends on TFTPD
pascal@5684 11 + help
pascal@5684 12 + Add support for the Remote Installation Service. This allows
pascal@5684 13 + a client to get files starting with \ without respecting case.
pascal@5684 14 + Each \ will be replaced by a /.
pascal@5684 15 +
pascal@5684 16 config FEATURE_TFTP_GET
pascal@5684 17 bool "Enable \"get\" command"
pascal@5684 18 default y
pascal@5684 19
pascal@5684 20 --- busybox-1.16.1/networking/tftp.c
pascal@5684 21 +++ busybox-1.16.1/networking/tftp.c
pascal@5684 22 @@ -653,6 +653,63 @@
pascal@5684 23 #undef remote_file
pascal@5684 24 }
pascal@5684 25
pascal@5684 26 +#if ENABLE_FEATURE_TFTPD_RIS
pascal@5684 27 +#include <dirent.h>
pascal@5684 28 +
pascal@5684 29 +int lookup_entry(const char *comp, char *dest);
pascal@5684 30 +void lookup_file(char *filename);
pascal@5684 31 +
pascal@5684 32 +int lookup_entry(const char *comp, char *dest)
pascal@5684 33 +{
pascal@5684 34 + DIR *dirp;
pascal@5684 35 + struct dirent *dptr;
pascal@5684 36 + if (!dest) return 0;
pascal@5684 37 + dirp = opendir(dest[0] ? dest : ".");
pascal@5684 38 + while ((dptr = readdir(dirp))) {
pascal@5684 39 + if (!strcasecmp(dptr->d_name, comp)) {
pascal@5684 40 + if (dest[0]) strcat(dest, "/");
pascal@5684 41 + strcat(dest, dptr->d_name);
pascal@5684 42 + closedir(dirp);
pascal@5684 43 + return 1;
pascal@5684 44 + }
pascal@5684 45 + }
pascal@5684 46 + closedir(dirp);
pascal@5684 47 + return 0;
pascal@5684 48 +}
pascal@5684 49 +
pascal@5684 50 +void lookup_file(char *filename)
pascal@5684 51 +{
pascal@5684 52 + int found = 0;
pascal@5684 53 + int len = 0;
pascal@5684 54 + char dest[1024];
pascal@5684 55 + char comp[1024];
pascal@5684 56 + char *check = filename;
pascal@5684 57 + char *seek = NULL;
pascal@5684 58 +
pascal@5684 59 + dest[0] = 0;
pascal@5684 60 + check++;
pascal@5684 61 + while (*check) {
pascal@5684 62 + seek = strchr(check, '\\');
pascal@5684 63 + if (!seek) {
pascal@5684 64 + if ((*check) && (lookup_entry(check, dest)))
pascal@5684 65 + found = 1;
pascal@5684 66 + break;
pascal@5684 67 + }
pascal@5684 68 + len = seek - check;
pascal@5684 69 + memcpy(comp, check, len);
pascal@5684 70 + comp[len]=0;
pascal@5684 71 + if (!lookup_entry(comp, dest))
pascal@5684 72 + break;
pascal@5684 73 + check += len + 1;
pascal@5684 74 + }
pascal@5684 75 +
pascal@5684 76 + if (found) {
pascal@5684 77 + filename[0] = 0;
pascal@5684 78 + strcat(filename, dest);
pascal@5684 79 + }
pascal@5684 80 +}
pascal@5684 81 +#endif
pascal@5684 82 +
pascal@5684 83 #if ENABLE_TFTP
pascal@5684 84
pascal@5684 85 int tftp_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
pascal@5684 86 @@ -782,6 +839,11 @@
pascal@5684 87 goto err;
pascal@5684 88 }
pascal@5684 89 local_file = block_buf + 2;
pascal@5684 90 +#if ENABLE_FEATURE_TFTPD_RIS
pascal@5684 91 + if (local_file[0] == '\\') {
pascal@5684 92 + lookup_file(local_file);
pascal@5684 93 + }
pascal@5684 94 +#endif
pascal@5684 95 if (local_file[0] == '.' || strstr(local_file, "/.")) {
pascal@5684 96 error_msg = "dot in file name";
pascal@5684 97 goto err;