aboutsummaryrefslogtreecommitdiff
path: root/networking
diff options
context:
space:
mode:
authorandersen <andersen@69ca8d6d-28ef-0310-b511-8ec308f3f277>2003-07-28 07:40:39 +0000
committerandersen <andersen@69ca8d6d-28ef-0310-b511-8ec308f3f277>2003-07-28 07:40:39 +0000
commit62acfd880c121bebbe52f60a94e5d7e20ad933ca (patch)
treead6b608081a4dde117563a1f1e9a6e3892a8752c /networking
parentd6d5411285a3c1247fda3b6912cee6754e07167d (diff)
downloadbusybox-w32-62acfd880c121bebbe52f60a94e5d7e20ad933ca.tar.gz
busybox-w32-62acfd880c121bebbe52f60a94e5d7e20ad933ca.tar.bz2
busybox-w32-62acfd880c121bebbe52f60a94e5d7e20ad933ca.zip
last_patch95 from vodz:
Hi. Last patch have new libbb function vfork_rexec() for can use daemon() to uClinux system. This patched daemons: syslog, klogd, inetd, crond. This not tested! I havn`t this systems. Also. Previous patch for feature request MD5 crypt password for httpd don`t sended to this mailist on 07/15/03 (mailist have Pytom module problem?). The previous patch included, and have testing. --w vodz git-svn-id: svn://busybox.net/trunk/busybox@7119 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'networking')
-rw-r--r--networking/Config.in9
-rw-r--r--networking/Makefile.in7
-rw-r--r--networking/httpd.c64
-rw-r--r--networking/inetd.c24
4 files changed, 88 insertions, 16 deletions
diff --git a/networking/Config.in b/networking/Config.in
index 406b99163..0bd17fb63 100644
--- a/networking/Config.in
+++ b/networking/Config.in
@@ -58,6 +58,13 @@ config CONFIG_FEATURE_HTTPD_BASIC_AUTH
58 Utilizes password settings from /etc/httpd.conf for basic 58 Utilizes password settings from /etc/httpd.conf for basic
59 authentication on a per url basis. 59 authentication on a per url basis.
60 60
61config CONFIG_FEATURE_HTTPD_AUTH_MD5
62 bool " Enable support MD5 crypted password for httpd.conf"
63 default n
64 depends on CONFIG_FEATURE_HTTPD_BASIC_AUTH
65 help
66 Please help my - send patch for set this help message
67
61 68
62if !CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY 69if !CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
63config CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP 70config CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP
@@ -105,7 +112,7 @@ config CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
105 112
106config CONFIG_FEATURE_HTTPD_SET_CGI_VARS_TO_ENV 113config CONFIG_FEATURE_HTTPD_SET_CGI_VARS_TO_ENV
107 bool " Enable setting of CGI_varname=value environment vars for CGI" 114 bool " Enable setting of CGI_varname=value environment vars for CGI"
108 default y 115 default n
109 depends on CONFIG_FEATURE_HTTPD_CGI 116 depends on CONFIG_FEATURE_HTTPD_CGI
110 help 117 help
111 This option parses POST or GET arguments from a form and 118 This option parses POST or GET arguments from a form and
diff --git a/networking/Makefile.in b/networking/Makefile.in
index 7d0d0b8bc..7748d066b 100644
--- a/networking/Makefile.in
+++ b/networking/Makefile.in
@@ -53,6 +53,13 @@ NETWORKING-$(CONFIG_WGET) += wget.o
53 53
54libraries-y+=$(NETWORKING_DIR)$(NETWORKING_AR) 54libraries-y+=$(NETWORKING_DIR)$(NETWORKING_AR)
55 55
56needcrypt-y:=
57needcrypt-$(CONFIG_FEATURE_HTTPD_AUTH_MD5) := y
58
59ifeq ($(needcrypt-y),y)
60 LIBRARIES += -lcrypt
61endif
62
56$(NETWORKING_DIR)$(NETWORKING_AR): $(patsubst %,$(NETWORKING_DIR)%, $(NETWORKING-y)) 63$(NETWORKING_DIR)$(NETWORKING_AR): $(patsubst %,$(NETWORKING_DIR)%, $(NETWORKING-y))
57 $(AR) -ro $@ $(patsubst %,$(NETWORKING_DIR)%, $(NETWORKING-y)) 64 $(AR) -ro $@ $(patsubst %,$(NETWORKING_DIR)%, $(NETWORKING-y))
58 65
diff --git a/networking/httpd.c b/networking/httpd.c
index d3d88fcb6..d58414b55 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -153,12 +153,14 @@ static const char home[] = "./";
153/* Config options, disable this for do very small module */ 153/* Config options, disable this for do very small module */
154//#define CONFIG_FEATURE_HTTPD_CGI 154//#define CONFIG_FEATURE_HTTPD_CGI
155//#define CONFIG_FEATURE_HTTPD_BASIC_AUTH 155//#define CONFIG_FEATURE_HTTPD_BASIC_AUTH
156//#define CONFIG_FEATURE_HTTPD_AUTH_MD5
156 157
157#ifdef HTTPD_STANDALONE 158#ifdef HTTPD_STANDALONE
158/* standalone, enable all features */ 159/* standalone, enable all features */
159#undef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY 160#undef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
160/* unset config option for remove warning as redefined */ 161/* unset config option for remove warning as redefined */
161#undef CONFIG_FEATURE_HTTPD_BASIC_AUTH 162#undef CONFIG_FEATURE_HTTPD_BASIC_AUTH
163#undef CONFIG_FEATURE_HTTPD_AUTH_MD5
162#undef CONFIG_FEATURE_HTTPD_SET_CGI_VARS_TO_ENV 164#undef CONFIG_FEATURE_HTTPD_SET_CGI_VARS_TO_ENV
163#undef CONFIG_FEATURE_HTTPD_ENCODE_URL_STR 165#undef CONFIG_FEATURE_HTTPD_ENCODE_URL_STR
164#undef CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV 166#undef CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
@@ -168,6 +170,7 @@ static const char home[] = "./";
168#undef CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP 170#undef CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP
169/* enable all features now */ 171/* enable all features now */
170#define CONFIG_FEATURE_HTTPD_BASIC_AUTH 172#define CONFIG_FEATURE_HTTPD_BASIC_AUTH
173#define CONFIG_FEATURE_HTTPD_AUTH_MD5
171#define CONFIG_FEATURE_HTTPD_SET_CGI_VARS_TO_ENV 174#define CONFIG_FEATURE_HTTPD_SET_CGI_VARS_TO_ENV
172#define CONFIG_FEATURE_HTTPD_ENCODE_URL_STR 175#define CONFIG_FEATURE_HTTPD_ENCODE_URL_STR
173#define CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV 176#define CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
@@ -425,11 +428,11 @@ static void parse_conf(const char *path, int flag)
425 } 428 }
426 429
427 while((f = fopen(cf, "r")) == NULL) { 430 while((f = fopen(cf, "r")) == NULL) {
428 if(flag != FIRST_PARSE) { 431 if(flag == SUBDIR_PARSE || flag == FIND_FROM_HTTPD_ROOT) {
429 /* config file not found, no changes to config */ 432 /* config file not found, no changes to config */
430 return; 433 return;
431 } 434 }
432 if(config->configFile) /* if -c option given */ 435 if(config->configFile && flag == FIRST_PARSE) /* if -c option given */
433 bb_perror_msg_and_die("%s", cf); 436 bb_perror_msg_and_die("%s", cf);
434 flag = FIND_FROM_HTTPD_ROOT; 437 flag = FIND_FROM_HTTPD_ROOT;
435 cf = httpd_conf; 438 cf = httpd_conf;
@@ -1326,10 +1329,38 @@ static int checkPerm(const char *path, const char *request)
1326 if(strncmp(p0, path, l) == 0 && 1329 if(strncmp(p0, path, l) == 0 &&
1327 (l == 1 || path[l] == '/' || path[l] == 0)) { 1330 (l == 1 || path[l] == '/' || path[l] == 0)) {
1328 /* path match found. Check request */ 1331 /* path match found. Check request */
1332
1333 /* for check next /path:user:password */
1334 prev = p0;
1335#ifdef CONFIG_FEATURE_HTTPD_AUTH_MD5
1336 {
1337 char *cipher;
1338 char *pp;
1339 char *u = strchr(request, ':');
1340
1341 if(u == NULL) {
1342 /* bad request, ':' required */
1343 continue;
1344 }
1345 if(strncmp(p, request, u-request) != 0) {
1346 /* user uncompared */
1347 continue;
1348 }
1349 pp = strchr(p, ':');
1350 if(pp && pp[1] == '$' && pp[2] == '1' &&
1351 pp[3] == '$' && pp[4]) {
1352 pp++;
1353 cipher = pw_encrypt(u+1, pp);
1354 if (strcmp(cipher, pp) == 0)
1355 return 1; /* Ok */
1356 /* unauthorized */
1357 continue;
1358 }
1359 }
1360#endif
1329 if (strcmp(p, request) == 0) 1361 if (strcmp(p, request) == 0)
1330 return 1; /* Ok */ 1362 return 1; /* Ok */
1331 /* unauthorized, but check next /path:user:password */ 1363 /* unauthorized */
1332 prev = p0;
1333 } 1364 }
1334 } 1365 }
1335 } /* for */ 1366 } /* for */
@@ -1731,7 +1762,12 @@ static const char httpd_opts[]="c:d:h:"
1731#endif 1762#endif
1732#ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH 1763#ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH
1733 "r:" 1764 "r:"
1734#define OPT_INC_2 1 1765# ifdef CONFIG_FEATURE_HTTPD_AUTH_MD5
1766 "m:"
1767# define OPT_INC_2 2
1768# else
1769# define OPT_INC_2 1
1770#endif
1735#else 1771#else
1736#define OPT_INC_2 0 1772#define OPT_INC_2 0
1737#endif 1773#endif
@@ -1740,14 +1776,15 @@ static const char httpd_opts[]="c:d:h:"
1740#ifdef CONFIG_FEATURE_HTTPD_SETUID 1776#ifdef CONFIG_FEATURE_HTTPD_SETUID
1741 "u:" 1777 "u:"
1742#endif 1778#endif
1743#endif 1779#endif /* CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY */
1744 ; 1780 ;
1745 1781
1746#define OPT_CONFIG_FILE (1<<0) 1782#define OPT_CONFIG_FILE (1<<0)
1747#define OPT_DECODE_URL (1<<1) 1783#define OPT_DECODE_URL (1<<1)
1748#define OPT_HOME_HTTPD (1<<2) 1784#define OPT_HOME_HTTPD (1<<2)
1749#define OPT_ENCODE_URL (1<<(2+OPT_INC_1)) 1785#define OPT_ENCODE_URL (1<<(2+OPT_INC_1))
1750#define OPT_REALM (1<<(2+OPT_INC_1+OPT_INC_2)) 1786#define OPT_REALM (1<<(3+OPT_INC_1))
1787#define OPT_MD5 (1<<(4+OPT_INC_1))
1751#define OPT_PORT (1<<(3+OPT_INC_1+OPT_INC_2)) 1788#define OPT_PORT (1<<(3+OPT_INC_1+OPT_INC_2))
1752#define OPT_DEBUG (1<<(4+OPT_INC_1+OPT_INC_2)) 1789#define OPT_DEBUG (1<<(4+OPT_INC_1+OPT_INC_2))
1753#define OPT_SETUID (1<<(5+OPT_INC_1+OPT_INC_2)) 1790#define OPT_SETUID (1<<(5+OPT_INC_1+OPT_INC_2))
@@ -1778,6 +1815,10 @@ int httpd_main(int argc, char *argv[])
1778 long uid = -1; 1815 long uid = -1;
1779#endif 1816#endif
1780 1817
1818#ifdef CONFIG_FEATURE_HTTPD_AUTH_MD5
1819 const char *pass;
1820#endif
1821
1781 config = xcalloc(1, sizeof(*config)); 1822 config = xcalloc(1, sizeof(*config));
1782#ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH 1823#ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH
1783 config->realm = "Web Server Authentication"; 1824 config->realm = "Web Server Authentication";
@@ -1796,6 +1837,9 @@ int httpd_main(int argc, char *argv[])
1796#endif 1837#endif
1797#ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH 1838#ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH
1798 , &(config->realm) 1839 , &(config->realm)
1840# ifdef CONFIG_FEATURE_HTTPD_AUTH_MD5
1841 , &pass
1842# endif
1799#endif 1843#endif
1800#ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY 1844#ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
1801 , &s_port 1845 , &s_port
@@ -1815,6 +1859,12 @@ int httpd_main(int argc, char *argv[])
1815 return 0; 1859 return 0;
1816 } 1860 }
1817#endif 1861#endif
1862#ifdef CONFIG_FEATURE_HTTPD_AUTH_MD5
1863 if(opt & OPT_MD5) {
1864 printf("%s\n", pw_encrypt(pass, "$1$"));
1865 return 0;
1866 }
1867#endif
1818#ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY 1868#ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
1819 if(opt & OPT_PORT) 1869 if(opt & OPT_PORT)
1820 config->port = bb_xgetlarg(s_port, 10, 1, 0xffff); 1870 config->port = bb_xgetlarg(s_port, 10, 1, 0xffff);
diff --git a/networking/inetd.c b/networking/inetd.c
index 33b97ba94..af262c39c 100644
--- a/networking/inetd.c
+++ b/networking/inetd.c
@@ -806,7 +806,9 @@ inetd_main(int argc, char *argv[])
806 struct passwd *pwd; 806 struct passwd *pwd;
807 struct group *grp = NULL; 807 struct group *grp = NULL;
808 struct sigaction sa; 808 struct sigaction sa;
809 int ch, pid; 809 int pid;
810 unsigned long opt;
811 char *sq;
810 gid_t gid; 812 gid_t gid;
811 813
812#ifdef INETD_UNSUPPORT_BILTIN 814#ifdef INETD_UNSUPPORT_BILTIN
@@ -828,14 +830,21 @@ inetd_main(int argc, char *argv[])
828 LastArg = environ[-1] + strlen(environ[-1]); 830 LastArg = environ[-1] + strlen(environ[-1]);
829#endif 831#endif
830 832
831 while ((ch = getopt(argc, argv, "q:")) != EOF) 833#if defined(__uClinux__)
832 switch(ch) { 834 opt = bb_getopt_ulflags(argc, argv, "q:f", &sq);
833 case 'q': 835 if (!(opt & 4)) {
836 daemon(0, 0);
837 /* reexec for vfork() do continue parent */
838 vfork_daemon_rexec(argc, argv, "-f");
839 }
840#else
841 opt = bb_getopt_ulflags(ac, av, "q:", &sq);
842 daemon(0, 0);
843#endif /* uClinux */
844
845 if(opt & 1) {
834 global_queuelen = atoi(optarg); 846 global_queuelen = atoi(optarg);
835 if (global_queuelen < 8) global_queuelen=8; 847 if (global_queuelen < 8) global_queuelen=8;
836 break;
837 default:
838 bb_show_usage(); // "[-q len] [conf]"
839 } 848 }
840 argc -= optind; 849 argc -= optind;
841 argv += optind; 850 argv += optind;
@@ -843,7 +852,6 @@ inetd_main(int argc, char *argv[])
843 if (argc > 0) 852 if (argc > 0)
844 CONFIG = argv[0]; 853 CONFIG = argv[0];
845 854
846 daemon(0, 0);
847 openlog(bb_applet_name, LOG_PID | LOG_NOWAIT, LOG_DAEMON); 855 openlog(bb_applet_name, LOG_PID | LOG_NOWAIT, LOG_DAEMON);
848 { 856 {
849 FILE *fp; 857 FILE *fp;