diff options
-rw-r--r-- | TODO_config_nommu | 696 | ||||
-rw-r--r-- | archival/libunarchive/Kbuild | 8 | ||||
-rw-r--r-- | console-tools/openvt.c | 29 | ||||
-rw-r--r-- | e2fsprogs/fsck.c | 15 | ||||
-rw-r--r-- | include/libbb.h | 25 | ||||
-rw-r--r-- | libbb/vfork_daemon_rexec.c | 10 | ||||
-rw-r--r-- | loginutils/login.c | 35 | ||||
-rw-r--r-- | miscutils/setsid.c | 15 | ||||
-rw-r--r-- | networking/httpd.c | 14 | ||||
-rw-r--r-- | runit/sv.c | 17 |
10 files changed, 769 insertions, 95 deletions
diff --git a/TODO_config_nommu b/TODO_config_nommu new file mode 100644 index 000000000..74095aa9a --- /dev/null +++ b/TODO_config_nommu | |||
@@ -0,0 +1,696 @@ | |||
1 | # This .config compiles for NOMMU. | ||
2 | # TODO: | ||
3 | # Pick disabled applet, enable & try to make it compile & work on NOMMU | ||
4 | |||
5 | # | ||
6 | # Automatically generated make config: don't edit | ||
7 | # Busybox version: 1.6.0.svn | ||
8 | # Mon Mar 26 15:00:56 2007 | ||
9 | # | ||
10 | CONFIG_HAVE_DOT_CONFIG=y | ||
11 | |||
12 | # | ||
13 | # Busybox Settings | ||
14 | # | ||
15 | |||
16 | # | ||
17 | # General Configuration | ||
18 | # | ||
19 | # CONFIG_NITPICK is not set | ||
20 | # CONFIG_DESKTOP is not set | ||
21 | # CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set | ||
22 | # CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set | ||
23 | # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set | ||
24 | CONFIG_SHOW_USAGE=y | ||
25 | CONFIG_FEATURE_VERBOSE_USAGE=y | ||
26 | # CONFIG_FEATURE_COMPRESS_USAGE is not set | ||
27 | CONFIG_FEATURE_INSTALLER=y | ||
28 | # CONFIG_LOCALE_SUPPORT is not set | ||
29 | CONFIG_GETOPT_LONG=y | ||
30 | CONFIG_FEATURE_DEVPTS=y | ||
31 | # CONFIG_FEATURE_CLEAN_UP is not set | ||
32 | CONFIG_FEATURE_SUID=y | ||
33 | CONFIG_FEATURE_SYSLOG=y | ||
34 | # CONFIG_FEATURE_SUID_CONFIG is not set | ||
35 | # CONFIG_FEATURE_SUID_CONFIG_QUIET is not set | ||
36 | # CONFIG_FEATURE_HAVE_RPC is not set | ||
37 | # CONFIG_SELINUX is not set | ||
38 | # CONFIG_FEATURE_EXEC_PREFER_APPLETS is not set | ||
39 | CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" | ||
40 | |||
41 | # | ||
42 | # Build Options | ||
43 | # | ||
44 | # CONFIG_STATIC is not set | ||
45 | # CONFIG_BUILD_LIBBUSYBOX is not set | ||
46 | # CONFIG_FEATURE_FULL_LIBBUSYBOX is not set | ||
47 | # CONFIG_FEATURE_SHARED_BUSYBOX is not set | ||
48 | CONFIG_LFS=y | ||
49 | # CONFIG_BUILD_AT_ONCE is not set | ||
50 | |||
51 | # | ||
52 | # Debugging Options | ||
53 | # | ||
54 | # CONFIG_DEBUG is not set | ||
55 | CONFIG_WERROR=y | ||
56 | # CONFIG_NO_DEBUG_LIB is not set | ||
57 | # CONFIG_DMALLOC is not set | ||
58 | # CONFIG_EFENCE is not set | ||
59 | CONFIG_INCLUDE_SUSv2=y | ||
60 | |||
61 | # | ||
62 | # Installation Options | ||
63 | # | ||
64 | # CONFIG_INSTALL_NO_USR is not set | ||
65 | CONFIG_INSTALL_APPLET_SYMLINKS=y | ||
66 | # CONFIG_INSTALL_APPLET_HARDLINKS is not set | ||
67 | # CONFIG_INSTALL_APPLET_DONT is not set | ||
68 | CONFIG_PREFIX="./_install" | ||
69 | |||
70 | # | ||
71 | # Busybox Library Tuning | ||
72 | # | ||
73 | CONFIG_PASSWORD_MINLEN=6 | ||
74 | CONFIG_MD5_SIZE_VS_SPEED=2 | ||
75 | CONFIG_FEATURE_EDITING=y | ||
76 | # CONFIG_FEATURE_EDITING_FANCY_KEYS is not set | ||
77 | # CONFIG_FEATURE_EDITING_VI is not set | ||
78 | CONFIG_FEATURE_EDITING_HISTORY=15 | ||
79 | # CONFIG_FEATURE_EDITING_SAVEHISTORY is not set | ||
80 | # CONFIG_FEATURE_TAB_COMPLETION is not set | ||
81 | # CONFIG_FEATURE_USERNAME_COMPLETION is not set | ||
82 | # CONFIG_FEATURE_EDITING_FANCY_PROMPT is not set | ||
83 | |||
84 | # | ||
85 | # Applets | ||
86 | # | ||
87 | |||
88 | # | ||
89 | # Archival Utilities | ||
90 | # | ||
91 | CONFIG_AR=y | ||
92 | CONFIG_FEATURE_AR_LONG_FILENAMES=y | ||
93 | CONFIG_BUNZIP2=y | ||
94 | CONFIG_CPIO=y | ||
95 | # CONFIG_DPKG is not set | ||
96 | # CONFIG_DPKG_DEB is not set | ||
97 | # CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set | ||
98 | CONFIG_GUNZIP=y | ||
99 | CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y | ||
100 | CONFIG_GZIP=y | ||
101 | CONFIG_RPM2CPIO=y | ||
102 | # CONFIG_RPM is not set | ||
103 | CONFIG_TAR=y | ||
104 | CONFIG_FEATURE_TAR_CREATE=y | ||
105 | # CONFIG_FEATURE_TAR_BZIP2 is not set | ||
106 | # CONFIG_FEATURE_TAR_LZMA is not set | ||
107 | CONFIG_FEATURE_TAR_FROM=y | ||
108 | # CONFIG_FEATURE_TAR_GZIP is not set | ||
109 | # CONFIG_FEATURE_TAR_COMPRESS is not set | ||
110 | CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y | ||
111 | CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y | ||
112 | CONFIG_FEATURE_TAR_LONG_OPTIONS=y | ||
113 | CONFIG_UNCOMPRESS=y | ||
114 | CONFIG_UNLZMA=y | ||
115 | CONFIG_FEATURE_LZMA_FAST=y | ||
116 | CONFIG_UNZIP=y | ||
117 | |||
118 | # | ||
119 | # Common options for cpio and tar | ||
120 | # | ||
121 | CONFIG_FEATURE_UNARCHIVE_TAPE=y | ||
122 | # CONFIG_FEATURE_DEB_TAR_GZ is not set | ||
123 | # CONFIG_FEATURE_DEB_TAR_BZ2 is not set | ||
124 | # CONFIG_FEATURE_DEB_TAR_LZMA is not set | ||
125 | |||
126 | # | ||
127 | # Coreutils | ||
128 | # | ||
129 | CONFIG_BASENAME=y | ||
130 | CONFIG_CAL=y | ||
131 | CONFIG_CAT=y | ||
132 | CONFIG_CATV=y | ||
133 | CONFIG_CHGRP=y | ||
134 | CONFIG_CHMOD=y | ||
135 | CONFIG_CHOWN=y | ||
136 | CONFIG_CHROOT=y | ||
137 | CONFIG_CKSUM=y | ||
138 | CONFIG_CMP=y | ||
139 | CONFIG_COMM=y | ||
140 | CONFIG_CP=y | ||
141 | CONFIG_CUT=y | ||
142 | CONFIG_DATE=y | ||
143 | CONFIG_FEATURE_DATE_ISOFMT=y | ||
144 | CONFIG_DD=y | ||
145 | CONFIG_FEATURE_DD_SIGNAL_HANDLING=y | ||
146 | CONFIG_FEATURE_DD_IBS_OBS=y | ||
147 | CONFIG_DF=y | ||
148 | CONFIG_DIFF=y | ||
149 | CONFIG_FEATURE_DIFF_BINARY=y | ||
150 | CONFIG_FEATURE_DIFF_DIR=y | ||
151 | CONFIG_FEATURE_DIFF_MINIMAL=y | ||
152 | CONFIG_DIRNAME=y | ||
153 | CONFIG_DOS2UNIX=y | ||
154 | CONFIG_UNIX2DOS=y | ||
155 | CONFIG_DU=y | ||
156 | CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y | ||
157 | CONFIG_ECHO=y | ||
158 | CONFIG_FEATURE_FANCY_ECHO=y | ||
159 | CONFIG_ENV=y | ||
160 | CONFIG_FEATURE_ENV_LONG_OPTIONS=y | ||
161 | CONFIG_EXPR=y | ||
162 | CONFIG_EXPR_MATH_SUPPORT_64=y | ||
163 | CONFIG_FALSE=y | ||
164 | CONFIG_FOLD=y | ||
165 | CONFIG_HEAD=y | ||
166 | CONFIG_FEATURE_FANCY_HEAD=y | ||
167 | CONFIG_HOSTID=y | ||
168 | CONFIG_ID=y | ||
169 | CONFIG_INSTALL=y | ||
170 | CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y | ||
171 | CONFIG_LENGTH=y | ||
172 | CONFIG_LN=y | ||
173 | CONFIG_LOGNAME=y | ||
174 | CONFIG_LS=y | ||
175 | CONFIG_FEATURE_LS_FILETYPES=y | ||
176 | CONFIG_FEATURE_LS_FOLLOWLINKS=y | ||
177 | CONFIG_FEATURE_LS_RECURSIVE=y | ||
178 | CONFIG_FEATURE_LS_SORTFILES=y | ||
179 | CONFIG_FEATURE_LS_TIMESTAMPS=y | ||
180 | CONFIG_FEATURE_LS_USERNAME=y | ||
181 | CONFIG_FEATURE_LS_COLOR=y | ||
182 | CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y | ||
183 | CONFIG_MD5SUM=y | ||
184 | CONFIG_MKDIR=y | ||
185 | CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y | ||
186 | CONFIG_MKFIFO=y | ||
187 | CONFIG_MKNOD=y | ||
188 | CONFIG_MV=y | ||
189 | CONFIG_FEATURE_MV_LONG_OPTIONS=y | ||
190 | CONFIG_NICE=y | ||
191 | CONFIG_NOHUP=y | ||
192 | CONFIG_OD=y | ||
193 | CONFIG_PRINTENV=y | ||
194 | CONFIG_PRINTF=y | ||
195 | CONFIG_PWD=y | ||
196 | CONFIG_REALPATH=y | ||
197 | CONFIG_RM=y | ||
198 | CONFIG_RMDIR=y | ||
199 | CONFIG_SEQ=y | ||
200 | CONFIG_SHA1SUM=y | ||
201 | CONFIG_SLEEP=y | ||
202 | CONFIG_FEATURE_FANCY_SLEEP=y | ||
203 | CONFIG_SORT=y | ||
204 | CONFIG_FEATURE_SORT_BIG=y | ||
205 | CONFIG_SPLIT=y | ||
206 | CONFIG_STAT=y | ||
207 | CONFIG_FEATURE_STAT_FORMAT=y | ||
208 | CONFIG_STTY=y | ||
209 | CONFIG_SUM=y | ||
210 | CONFIG_SYNC=y | ||
211 | CONFIG_TAIL=y | ||
212 | CONFIG_FEATURE_FANCY_TAIL=y | ||
213 | CONFIG_TEE=y | ||
214 | CONFIG_FEATURE_TEE_USE_BLOCK_IO=y | ||
215 | CONFIG_TEST=y | ||
216 | CONFIG_FEATURE_TEST_64=y | ||
217 | CONFIG_TOUCH=y | ||
218 | CONFIG_TR=y | ||
219 | CONFIG_FEATURE_TR_CLASSES=y | ||
220 | CONFIG_FEATURE_TR_EQUIV=y | ||
221 | CONFIG_TRUE=y | ||
222 | CONFIG_TTY=y | ||
223 | CONFIG_UNAME=y | ||
224 | CONFIG_UNIQ=y | ||
225 | CONFIG_USLEEP=y | ||
226 | CONFIG_UUDECODE=y | ||
227 | CONFIG_UUENCODE=y | ||
228 | CONFIG_WATCH=y | ||
229 | CONFIG_WC=y | ||
230 | CONFIG_FEATURE_WC_LARGE=y | ||
231 | CONFIG_WHO=y | ||
232 | CONFIG_WHOAMI=y | ||
233 | CONFIG_YES=y | ||
234 | |||
235 | # | ||
236 | # Common options for cp and mv | ||
237 | # | ||
238 | CONFIG_FEATURE_PRESERVE_HARDLINKS=y | ||
239 | |||
240 | # | ||
241 | # Common options for ls, more and telnet | ||
242 | # | ||
243 | CONFIG_FEATURE_AUTOWIDTH=y | ||
244 | |||
245 | # | ||
246 | # Common options for df, du, ls | ||
247 | # | ||
248 | CONFIG_FEATURE_HUMAN_READABLE=y | ||
249 | |||
250 | # | ||
251 | # Common options for md5sum, sha1sum | ||
252 | # | ||
253 | CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y | ||
254 | |||
255 | # | ||
256 | # Console Utilities | ||
257 | # | ||
258 | CONFIG_CHVT=y | ||
259 | CONFIG_CLEAR=y | ||
260 | CONFIG_DEALLOCVT=y | ||
261 | CONFIG_DUMPKMAP=y | ||
262 | CONFIG_LOADFONT=y | ||
263 | CONFIG_LOADKMAP=y | ||
264 | CONFIG_OPENVT=y | ||
265 | CONFIG_RESET=y | ||
266 | CONFIG_RESIZE=y | ||
267 | CONFIG_FEATURE_RESIZE_PRINT=y | ||
268 | CONFIG_SETCONSOLE=y | ||
269 | # CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set | ||
270 | CONFIG_SETKEYCODES=y | ||
271 | CONFIG_SETLOGCONS=y | ||
272 | |||
273 | # | ||
274 | # Debian Utilities | ||
275 | # | ||
276 | CONFIG_MKTEMP=y | ||
277 | CONFIG_PIPE_PROGRESS=y | ||
278 | CONFIG_READLINK=y | ||
279 | CONFIG_FEATURE_READLINK_FOLLOW=y | ||
280 | CONFIG_RUN_PARTS=y | ||
281 | CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y | ||
282 | # CONFIG_START_STOP_DAEMON is not set | ||
283 | # CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set | ||
284 | # CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set | ||
285 | CONFIG_WHICH=y | ||
286 | |||
287 | # | ||
288 | # Editors | ||
289 | # | ||
290 | CONFIG_AWK=y | ||
291 | CONFIG_FEATURE_AWK_MATH=y | ||
292 | CONFIG_ED=y | ||
293 | CONFIG_PATCH=y | ||
294 | CONFIG_SED=y | ||
295 | CONFIG_VI=y | ||
296 | CONFIG_FEATURE_VI_COLON=y | ||
297 | CONFIG_FEATURE_VI_YANKMARK=y | ||
298 | CONFIG_FEATURE_VI_SEARCH=y | ||
299 | CONFIG_FEATURE_VI_USE_SIGNALS=y | ||
300 | CONFIG_FEATURE_VI_DOT_CMD=y | ||
301 | CONFIG_FEATURE_VI_READONLY=y | ||
302 | CONFIG_FEATURE_VI_SETOPTS=y | ||
303 | CONFIG_FEATURE_VI_SET=y | ||
304 | CONFIG_FEATURE_VI_WIN_RESIZE=y | ||
305 | CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y | ||
306 | CONFIG_FEATURE_ALLOW_EXEC=y | ||
307 | |||
308 | # | ||
309 | # Finding Utilities | ||
310 | # | ||
311 | CONFIG_FIND=y | ||
312 | CONFIG_FEATURE_FIND_PRINT0=y | ||
313 | CONFIG_FEATURE_FIND_MTIME=y | ||
314 | CONFIG_FEATURE_FIND_MMIN=y | ||
315 | CONFIG_FEATURE_FIND_PERM=y | ||
316 | CONFIG_FEATURE_FIND_TYPE=y | ||
317 | CONFIG_FEATURE_FIND_XDEV=y | ||
318 | CONFIG_FEATURE_FIND_NEWER=y | ||
319 | CONFIG_FEATURE_FIND_INUM=y | ||
320 | CONFIG_FEATURE_FIND_EXEC=y | ||
321 | CONFIG_FEATURE_FIND_USER=y | ||
322 | CONFIG_FEATURE_FIND_NOT=y | ||
323 | CONFIG_GREP=y | ||
324 | CONFIG_FEATURE_GREP_EGREP_ALIAS=y | ||
325 | CONFIG_FEATURE_GREP_FGREP_ALIAS=y | ||
326 | CONFIG_FEATURE_GREP_CONTEXT=y | ||
327 | CONFIG_XARGS=y | ||
328 | CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y | ||
329 | CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y | ||
330 | CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y | ||
331 | CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y | ||
332 | |||
333 | # | ||
334 | # Init Utilities | ||
335 | # | ||
336 | # CONFIG_INIT is not set | ||
337 | # CONFIG_DEBUG_INIT is not set | ||
338 | # CONFIG_FEATURE_USE_INITTAB is not set | ||
339 | # CONFIG_FEATURE_INIT_SCTTY is not set | ||
340 | # CONFIG_FEATURE_INIT_SYSLOG is not set | ||
341 | # CONFIG_FEATURE_EXTRA_QUIET is not set | ||
342 | # CONFIG_FEATURE_INIT_COREDUMPS is not set | ||
343 | # CONFIG_FEATURE_INITRD is not set | ||
344 | CONFIG_HALT=y | ||
345 | CONFIG_MESG=y | ||
346 | |||
347 | # | ||
348 | # Login/Password Management Utilities | ||
349 | # | ||
350 | CONFIG_FEATURE_SHADOWPASSWDS=y | ||
351 | CONFIG_USE_BB_SHADOW=y | ||
352 | CONFIG_USE_BB_PWD_GRP=y | ||
353 | CONFIG_ADDGROUP=y | ||
354 | CONFIG_DELGROUP=y | ||
355 | CONFIG_ADDUSER=y | ||
356 | CONFIG_DELUSER=y | ||
357 | CONFIG_GETTY=y | ||
358 | CONFIG_FEATURE_UTMP=y | ||
359 | CONFIG_FEATURE_WTMP=y | ||
360 | CONFIG_LOGIN=y | ||
361 | CONFIG_LOGIN_SCRIPTS=y | ||
362 | CONFIG_FEATURE_SECURETTY=y | ||
363 | CONFIG_PASSWD=y | ||
364 | CONFIG_FEATURE_PASSWD_WEAK_CHECK=y | ||
365 | CONFIG_SU=y | ||
366 | CONFIG_FEATURE_SU_SYSLOG=y | ||
367 | CONFIG_FEATURE_SU_CHECKS_SHELLS=y | ||
368 | CONFIG_SULOGIN=y | ||
369 | CONFIG_VLOCK=y | ||
370 | |||
371 | # | ||
372 | # Linux Ext2 FS Progs | ||
373 | # | ||
374 | CONFIG_CHATTR=y | ||
375 | CONFIG_FSCK=y | ||
376 | CONFIG_LSATTR=y | ||
377 | |||
378 | # | ||
379 | # Linux Module Utilities | ||
380 | # | ||
381 | CONFIG_INSMOD=y | ||
382 | CONFIG_FEATURE_INSMOD_VERSION_CHECKING=y | ||
383 | CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS=y | ||
384 | CONFIG_FEATURE_INSMOD_LOADINKMEM=y | ||
385 | CONFIG_FEATURE_INSMOD_LOAD_MAP=y | ||
386 | CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL=y | ||
387 | CONFIG_RMMOD=y | ||
388 | CONFIG_LSMOD=y | ||
389 | CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y | ||
390 | CONFIG_MODPROBE=y | ||
391 | CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y | ||
392 | CONFIG_FEATURE_MODPROBE_FANCY_ALIAS=y | ||
393 | |||
394 | # | ||
395 | # Options common to multiple modutils | ||
396 | # | ||
397 | CONFIG_FEATURE_CHECK_TAINTED_MODULE=y | ||
398 | CONFIG_FEATURE_2_4_MODULES=y | ||
399 | CONFIG_FEATURE_2_6_MODULES=y | ||
400 | # CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set | ||
401 | |||
402 | # | ||
403 | # Linux System Utilities | ||
404 | # | ||
405 | CONFIG_DMESG=y | ||
406 | CONFIG_FEATURE_DMESG_PRETTY=y | ||
407 | CONFIG_FBSET=y | ||
408 | CONFIG_FEATURE_FBSET_FANCY=y | ||
409 | CONFIG_FEATURE_FBSET_READMODE=y | ||
410 | CONFIG_FDFLUSH=y | ||
411 | CONFIG_FDFORMAT=y | ||
412 | CONFIG_FDISK=y | ||
413 | CONFIG_FDISK_SUPPORT_LARGE_DISKS=y | ||
414 | CONFIG_FEATURE_FDISK_WRITABLE=y | ||
415 | CONFIG_FEATURE_AIX_LABEL=y | ||
416 | CONFIG_FEATURE_SGI_LABEL=y | ||
417 | CONFIG_FEATURE_SUN_LABEL=y | ||
418 | CONFIG_FEATURE_OSF_LABEL=y | ||
419 | CONFIG_FEATURE_FDISK_ADVANCED=y | ||
420 | CONFIG_FREERAMDISK=y | ||
421 | CONFIG_FSCK_MINIX=y | ||
422 | CONFIG_MKFS_MINIX=y | ||
423 | |||
424 | # | ||
425 | # Minix filesystem support | ||
426 | # | ||
427 | CONFIG_FEATURE_MINIX2=y | ||
428 | CONFIG_GETOPT=y | ||
429 | CONFIG_HEXDUMP=y | ||
430 | CONFIG_HWCLOCK=y | ||
431 | CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y | ||
432 | CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y | ||
433 | CONFIG_IPCRM=y | ||
434 | CONFIG_IPCS=y | ||
435 | CONFIG_LOSETUP=y | ||
436 | CONFIG_MDEV=y | ||
437 | CONFIG_FEATURE_MDEV_CONF=y | ||
438 | CONFIG_FEATURE_MDEV_EXEC=y | ||
439 | CONFIG_MKSWAP=y | ||
440 | CONFIG_FEATURE_MKSWAP_V0=y | ||
441 | CONFIG_MORE=y | ||
442 | CONFIG_FEATURE_USE_TERMIOS=y | ||
443 | CONFIG_MOUNT=y | ||
444 | # CONFIG_FEATURE_MOUNT_NFS is not set | ||
445 | CONFIG_FEATURE_MOUNT_CIFS=y | ||
446 | CONFIG_FEATURE_MOUNT_FLAGS=y | ||
447 | CONFIG_FEATURE_MOUNT_FSTAB=y | ||
448 | CONFIG_PIVOT_ROOT=y | ||
449 | CONFIG_RDATE=y | ||
450 | CONFIG_READPROFILE=y | ||
451 | CONFIG_SETARCH=y | ||
452 | CONFIG_SWAPONOFF=y | ||
453 | CONFIG_SWITCH_ROOT=y | ||
454 | CONFIG_UMOUNT=y | ||
455 | CONFIG_FEATURE_UMOUNT_ALL=y | ||
456 | |||
457 | # | ||
458 | # Common options for mount/umount | ||
459 | # | ||
460 | CONFIG_FEATURE_MOUNT_LOOP=y | ||
461 | # CONFIG_FEATURE_MTAB_SUPPORT is not set | ||
462 | |||
463 | # | ||
464 | # Miscellaneous Utilities | ||
465 | # | ||
466 | CONFIG_ADJTIMEX=y | ||
467 | # CONFIG_BBCONFIG is not set | ||
468 | CONFIG_CHRT=y | ||
469 | # CONFIG_CROND is not set | ||
470 | # CONFIG_DEBUG_CROND_OPTION is not set | ||
471 | # CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set | ||
472 | # CONFIG_CRONTAB is not set | ||
473 | CONFIG_DC=y | ||
474 | # CONFIG_DEVFSD is not set | ||
475 | # CONFIG_DEVFSD_MODLOAD is not set | ||
476 | # CONFIG_DEVFSD_FG_NP is not set | ||
477 | # CONFIG_DEVFSD_VERBOSE is not set | ||
478 | # CONFIG_FEATURE_DEVFS is not set | ||
479 | CONFIG_EJECT=y | ||
480 | CONFIG_LAST=y | ||
481 | CONFIG_LESS=y | ||
482 | CONFIG_FEATURE_LESS_MAXLINES=9999999 | ||
483 | CONFIG_FEATURE_LESS_BRACKETS=y | ||
484 | CONFIG_FEATURE_LESS_FLAGS=y | ||
485 | CONFIG_FEATURE_LESS_FLAGCS=y | ||
486 | CONFIG_FEATURE_LESS_MARKS=y | ||
487 | CONFIG_FEATURE_LESS_REGEXP=y | ||
488 | CONFIG_HDPARM=y | ||
489 | CONFIG_FEATURE_HDPARM_GET_IDENTITY=y | ||
490 | CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF=y | ||
491 | CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF=y | ||
492 | CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET=y | ||
493 | CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF=y | ||
494 | CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y | ||
495 | CONFIG_MAKEDEVS=y | ||
496 | # CONFIG_FEATURE_MAKEDEVS_LEAF is not set | ||
497 | CONFIG_FEATURE_MAKEDEVS_TABLE=y | ||
498 | CONFIG_MOUNTPOINT=y | ||
499 | CONFIG_MT=y | ||
500 | CONFIG_NMETER=y | ||
501 | CONFIG_RAIDAUTORUN=y | ||
502 | CONFIG_READAHEAD=y | ||
503 | CONFIG_RUNLEVEL=y | ||
504 | CONFIG_RX=y | ||
505 | CONFIG_STRINGS=y | ||
506 | CONFIG_SETSID=y | ||
507 | # CONFIG_TASKSET is not set | ||
508 | # CONFIG_FEATURE_TASKSET_FANCY is not set | ||
509 | CONFIG_TIME=y | ||
510 | CONFIG_WATCHDOG=y | ||
511 | |||
512 | # | ||
513 | # Networking Utilities | ||
514 | # | ||
515 | CONFIG_FEATURE_IPV6=y | ||
516 | # CONFIG_VERBOSE_RESOLUTION_ERRORS is not set | ||
517 | CONFIG_ARP=y | ||
518 | CONFIG_ARPING=y | ||
519 | CONFIG_DNSD=y | ||
520 | CONFIG_ETHER_WAKE=y | ||
521 | CONFIG_FAKEIDENTD=y | ||
522 | CONFIG_FTPGET=y | ||
523 | CONFIG_FTPPUT=y | ||
524 | CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y | ||
525 | CONFIG_HOSTNAME=y | ||
526 | # CONFIG_HTTPD is not set | ||
527 | # CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set | ||
528 | # CONFIG_FEATURE_HTTPD_SETUID is not set | ||
529 | # CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set | ||
530 | # CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set | ||
531 | # CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set | ||
532 | # CONFIG_FEATURE_HTTPD_CGI is not set | ||
533 | # CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set | ||
534 | # CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set | ||
535 | # CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set | ||
536 | CONFIG_IFCONFIG=y | ||
537 | CONFIG_FEATURE_IFCONFIG_STATUS=y | ||
538 | CONFIG_FEATURE_IFCONFIG_SLIP=y | ||
539 | CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y | ||
540 | CONFIG_FEATURE_IFCONFIG_HW=y | ||
541 | CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y | ||
542 | # CONFIG_IFUPDOWN is not set | ||
543 | # CONFIG_FEATURE_IFUPDOWN_IP is not set | ||
544 | # CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set | ||
545 | # CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set | ||
546 | # CONFIG_FEATURE_IFUPDOWN_IPV4 is not set | ||
547 | # CONFIG_FEATURE_IFUPDOWN_IPV6 is not set | ||
548 | # CONFIG_FEATURE_IFUPDOWN_IPX is not set | ||
549 | # CONFIG_FEATURE_IFUPDOWN_MAPPING is not set | ||
550 | # CONFIG_INETD is not set | ||
551 | # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set | ||
552 | # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set | ||
553 | # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set | ||
554 | # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set | ||
555 | # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set | ||
556 | # CONFIG_FEATURE_INETD_RPC is not set | ||
557 | CONFIG_IP=y | ||
558 | CONFIG_FEATURE_IP_ADDRESS=y | ||
559 | CONFIG_FEATURE_IP_LINK=y | ||
560 | CONFIG_FEATURE_IP_ROUTE=y | ||
561 | CONFIG_FEATURE_IP_TUNNEL=y | ||
562 | CONFIG_FEATURE_IP_RULE=y | ||
563 | CONFIG_FEATURE_IP_SHORT_FORMS=y | ||
564 | CONFIG_IPADDR=y | ||
565 | CONFIG_IPLINK=y | ||
566 | CONFIG_IPROUTE=y | ||
567 | CONFIG_IPTUNNEL=y | ||
568 | CONFIG_IPRULE=y | ||
569 | CONFIG_IPCALC=y | ||
570 | CONFIG_FEATURE_IPCALC_FANCY=y | ||
571 | CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y | ||
572 | CONFIG_NAMEIF=y | ||
573 | CONFIG_NC=y | ||
574 | CONFIG_NC_SERVER=y | ||
575 | CONFIG_NC_EXTRA=y | ||
576 | CONFIG_NETSTAT=y | ||
577 | CONFIG_NSLOOKUP=y | ||
578 | CONFIG_PING=y | ||
579 | CONFIG_PING6=y | ||
580 | CONFIG_FEATURE_FANCY_PING=y | ||
581 | CONFIG_ROUTE=y | ||
582 | CONFIG_TELNET=y | ||
583 | CONFIG_FEATURE_TELNET_TTYPE=y | ||
584 | CONFIG_FEATURE_TELNET_AUTOLOGIN=y | ||
585 | # CONFIG_TELNETD is not set | ||
586 | # CONFIG_FEATURE_TELNETD_STANDALONE is not set | ||
587 | CONFIG_TFTP=y | ||
588 | CONFIG_FEATURE_TFTP_GET=y | ||
589 | CONFIG_FEATURE_TFTP_PUT=y | ||
590 | CONFIG_FEATURE_TFTP_BLOCKSIZE=y | ||
591 | # CONFIG_DEBUG_TFTP is not set | ||
592 | CONFIG_TRACEROUTE=y | ||
593 | # CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set | ||
594 | # CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set | ||
595 | # CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set | ||
596 | CONFIG_APP_UDHCPD=y | ||
597 | CONFIG_APP_DHCPRELAY=y | ||
598 | CONFIG_APP_DUMPLEASES=y | ||
599 | # CONFIG_APP_UDHCPC is not set | ||
600 | CONFIG_FEATURE_UDHCP_SYSLOG=y | ||
601 | # CONFIG_FEATURE_UDHCP_DEBUG is not set | ||
602 | CONFIG_FEATURE_RFC3397=y | ||
603 | CONFIG_VCONFIG=y | ||
604 | CONFIG_WGET=y | ||
605 | CONFIG_FEATURE_WGET_STATUSBAR=y | ||
606 | CONFIG_FEATURE_WGET_AUTHENTICATION=y | ||
607 | CONFIG_FEATURE_WGET_LONG_OPTIONS=y | ||
608 | # CONFIG_ZCIP is not set | ||
609 | |||
610 | # | ||
611 | # Process Utilities | ||
612 | # | ||
613 | CONFIG_FREE=y | ||
614 | CONFIG_FUSER=y | ||
615 | CONFIG_KILL=y | ||
616 | CONFIG_KILLALL=y | ||
617 | CONFIG_KILLALL5=y | ||
618 | CONFIG_PIDOF=y | ||
619 | CONFIG_FEATURE_PIDOF_SINGLE=y | ||
620 | CONFIG_FEATURE_PIDOF_OMIT=y | ||
621 | CONFIG_PS=y | ||
622 | CONFIG_FEATURE_PS_WIDE=y | ||
623 | CONFIG_RENICE=y | ||
624 | CONFIG_BB_SYSCTL=y | ||
625 | CONFIG_TOP=y | ||
626 | CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y | ||
627 | CONFIG_UPTIME=y | ||
628 | |||
629 | # | ||
630 | # Shells | ||
631 | # | ||
632 | # CONFIG_FEATURE_SH_IS_ASH is not set | ||
633 | # CONFIG_FEATURE_SH_IS_HUSH is not set | ||
634 | # CONFIG_FEATURE_SH_IS_LASH is not set | ||
635 | # CONFIG_FEATURE_SH_IS_MSH is not set | ||
636 | CONFIG_FEATURE_SH_IS_NONE=y | ||
637 | # CONFIG_ASH is not set | ||
638 | # CONFIG_ASH_JOB_CONTROL is not set | ||
639 | # CONFIG_ASH_READ_NCHARS is not set | ||
640 | # CONFIG_ASH_READ_TIMEOUT is not set | ||
641 | # CONFIG_ASH_ALIAS is not set | ||
642 | # CONFIG_ASH_MATH_SUPPORT is not set | ||
643 | # CONFIG_ASH_MATH_SUPPORT_64 is not set | ||
644 | # CONFIG_ASH_GETOPTS is not set | ||
645 | # CONFIG_ASH_BUILTIN_ECHO is not set | ||
646 | # CONFIG_ASH_BUILTIN_TEST is not set | ||
647 | # CONFIG_ASH_CMDCMD is not set | ||
648 | # CONFIG_ASH_MAIL is not set | ||
649 | # CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set | ||
650 | # CONFIG_ASH_RANDOM_SUPPORT is not set | ||
651 | # CONFIG_ASH_EXPAND_PRMT is not set | ||
652 | # CONFIG_HUSH is not set | ||
653 | # CONFIG_LASH is not set | ||
654 | CONFIG_MSH=y | ||
655 | |||
656 | # | ||
657 | # Bourne Shell Options | ||
658 | # | ||
659 | CONFIG_FEATURE_SH_EXTRA_QUIET=y | ||
660 | # CONFIG_FEATURE_SH_STANDALONE_SHELL is not set | ||
661 | |||
662 | # | ||
663 | # System Logging Utilities | ||
664 | # | ||
665 | CONFIG_SYSLOGD=y | ||
666 | CONFIG_FEATURE_ROTATE_LOGFILE=y | ||
667 | CONFIG_FEATURE_REMOTE_LOG=y | ||
668 | CONFIG_FEATURE_IPC_SYSLOG=y | ||
669 | CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 | ||
670 | CONFIG_LOGREAD=y | ||
671 | CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y | ||
672 | CONFIG_KLOGD=y | ||
673 | CONFIG_LOGGER=y | ||
674 | |||
675 | # | ||
676 | # Runit Utilities | ||
677 | # | ||
678 | # CONFIG_RUNSV is not set | ||
679 | # CONFIG_RUNSVDIR is not set | ||
680 | CONFIG_SV=y | ||
681 | # CONFIG_SVLOGD is not set | ||
682 | CONFIG_CHPST=y | ||
683 | CONFIG_SETUIDGID=y | ||
684 | CONFIG_ENVUIDGID=y | ||
685 | CONFIG_ENVDIR=y | ||
686 | CONFIG_SOFTLIMIT=y | ||
687 | # CONFIG_CHCON is not set | ||
688 | # CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set | ||
689 | # CONFIG_GETENFORCE is not set | ||
690 | # CONFIG_GETSEBOOL is not set | ||
691 | # CONFIG_LOAD_POLICY is not set | ||
692 | # CONFIG_MATCHPATHCON is not set | ||
693 | # CONFIG_RUNCON is not set | ||
694 | # CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set | ||
695 | # CONFIG_SELINUXENABLED is not set | ||
696 | # CONFIG_SETENFORCE is not set | ||
diff --git a/archival/libunarchive/Kbuild b/archival/libunarchive/Kbuild index 4e1454184..010043c4c 100644 --- a/archival/libunarchive/Kbuild +++ b/archival/libunarchive/Kbuild | |||
@@ -26,7 +26,6 @@ lib-y:= \ | |||
26 | \ | 26 | \ |
27 | data_align.o \ | 27 | data_align.o \ |
28 | find_list_entry.o \ | 28 | find_list_entry.o \ |
29 | open_transformer.o \ | ||
30 | init_handle.o | 29 | init_handle.o |
31 | 30 | ||
32 | GUNZIP_FILES:= check_header_gzip.o decompress_unzip.o | 31 | GUNZIP_FILES:= check_header_gzip.o decompress_unzip.o |
@@ -36,6 +35,13 @@ DPKG_FILES:= \ | |||
36 | get_header_tar.o \ | 35 | get_header_tar.o \ |
37 | filter_accept_list_reassign.o | 36 | filter_accept_list_reassign.o |
38 | 37 | ||
38 | # open_transformer uses fork. Compile it only if absolutely necessary | ||
39 | lib-$(CONFIG_RPM) += open_transformer.o | ||
40 | lib-$(CONFIG_FEATURE_TAR_BZIP2) += open_transformer.o | ||
41 | lib-$(CONFIG_FEATURE_TAR_LZMA) += open_transformer.o | ||
42 | lib-$(CONFIG_FEATURE_TAR_GZIP) += open_transformer.o | ||
43 | lib-$(CONFIG_FEATURE_TAR_COMPRESS) += open_transformer.o | ||
44 | |||
39 | lib-$(CONFIG_AR) += get_header_ar.o unpack_ar_archive.o | 45 | lib-$(CONFIG_AR) += get_header_ar.o unpack_ar_archive.o |
40 | lib-$(CONFIG_BUNZIP2) += decompress_bunzip2.o | 46 | lib-$(CONFIG_BUNZIP2) += decompress_bunzip2.o |
41 | lib-$(CONFIG_UNLZMA) += decompress_unlzma.o | 47 | lib-$(CONFIG_UNLZMA) += decompress_unlzma.o |
diff --git a/console-tools/openvt.c b/console-tools/openvt.c index 0584584df..882563b29 100644 --- a/console-tools/openvt.c +++ b/console-tools/openvt.c | |||
@@ -15,30 +15,21 @@ | |||
15 | int openvt_main(int argc, char **argv); | 15 | int openvt_main(int argc, char **argv); |
16 | int openvt_main(int argc, char **argv) | 16 | int openvt_main(int argc, char **argv) |
17 | { | 17 | { |
18 | int fd; | ||
19 | char vtname[sizeof(VC_FORMAT) + 2]; | 18 | char vtname[sizeof(VC_FORMAT) + 2]; |
20 | 19 | ||
21 | if (argc < 3) { | 20 | if (argc < 3) |
22 | bb_show_usage(); | 21 | bb_show_usage(); |
23 | } | 22 | |
24 | /* check for illegal vt number: < 1 or > 63 */ | 23 | /* check for illegal vt number: < 1 or > 63 */ |
25 | sprintf(vtname, VC_FORMAT, (int)xatou_range(argv[1], 1, 63)); | 24 | sprintf(vtname, VC_FORMAT, (int)xatou_range(argv[1], 1, 63)); |
26 | 25 | ||
27 | //FIXME NOMMU | 26 | bb_daemonize_or_rexec(DAEMON_CLOSE_EXTRA_FDS, argv); |
28 | if (fork() == 0) { | 27 | /* grab new one */ |
29 | /* child */ | 28 | close(0); |
30 | /* leave current vt (controlling tty) */ | 29 | xopen(vtname, O_RDWR); |
31 | setsid(); | 30 | dup2(0, STDOUT_FILENO); |
32 | /* and grab new one */ | 31 | dup2(0, STDERR_FILENO); |
33 | fd = xopen(vtname, O_RDWR); | ||
34 | /* Reassign stdin, stdout and sterr */ | ||
35 | dup2(fd, STDIN_FILENO); | ||
36 | dup2(fd, STDOUT_FILENO); | ||
37 | dup2(fd, STDERR_FILENO); | ||
38 | while (fd > 2) close(fd--); | ||
39 | 32 | ||
40 | BB_EXECVP(argv[2], &argv[2]); | 33 | BB_EXECVP(argv[2], &argv[2]); |
41 | _exit(1); | 34 | _exit(1); |
42 | } | ||
43 | return EXIT_SUCCESS; | ||
44 | } | 35 | } |
diff --git a/e2fsprogs/fsck.c b/e2fsprogs/fsck.c index c31ab3f1a..447b4d008 100644 --- a/e2fsprogs/fsck.c +++ b/e2fsprogs/fsck.c | |||
@@ -667,20 +667,9 @@ static void execute(const char *type, const char *device, const char *mntpt, | |||
667 | /* Fork and execute the correct program. */ | 667 | /* Fork and execute the correct program. */ |
668 | pid = -1; | 668 | pid = -1; |
669 | if (!noexecute) { | 669 | if (!noexecute) { |
670 | /* TODO: NOMMU friendly way (vfork)? */ | 670 | pid = spawn(argv); |
671 | pid = fork(); | ||
672 | if (pid < 0) | 671 | if (pid < 0) |
673 | bb_perror_msg_and_die("fork"); | 672 | bb_perror_msg("%s", argv[0]); |
674 | if (pid == 0) { | ||
675 | /* Child */ | ||
676 | if (!interactive) { | ||
677 | /* NB: e2fsck will complain because of this! | ||
678 | * Use "fsck -s" to avoid... */ | ||
679 | close(0); | ||
680 | } | ||
681 | BB_EXECVP(argv[0], argv); | ||
682 | bb_perror_msg_and_die("%s", argv[0]); | ||
683 | } | ||
684 | } | 673 | } |
685 | 674 | ||
686 | for (i = num_args+1; i < argc; i++) | 675 | for (i = num_args+1; i < argc; i++) |
diff --git a/include/libbb.h b/include/libbb.h index ff7d3bf1a..32e099b54 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
@@ -471,7 +471,9 @@ int bb_execvp(const char *file, char *const argv[]); | |||
471 | pid_t spawn(char **argv); | 471 | pid_t spawn(char **argv); |
472 | pid_t xspawn(char **argv); | 472 | pid_t xspawn(char **argv); |
473 | /* Helpers for daemonization. | 473 | /* Helpers for daemonization. |
474 | * | ||
474 | * bb_daemonize(flags) = daemonize, does not compile on NOMMU | 475 | * bb_daemonize(flags) = daemonize, does not compile on NOMMU |
476 | * | ||
475 | * bb_daemonize_or_rexec(flags, argv) = daemonizes on MMU (and ignores argv), | 477 | * bb_daemonize_or_rexec(flags, argv) = daemonizes on MMU (and ignores argv), |
476 | * rexec's itself on NOMMU with argv passed as command line. | 478 | * rexec's itself on NOMMU with argv passed as command line. |
477 | * Thus bb_daemonize_or_rexec may cause your <applet>_main() to be re-executed | 479 | * Thus bb_daemonize_or_rexec may cause your <applet>_main() to be re-executed |
@@ -482,7 +484,12 @@ pid_t xspawn(char **argv); | |||
482 | * Both of the above will redirect fd 0,1,2 to /dev/null and drop ctty | 484 | * Both of the above will redirect fd 0,1,2 to /dev/null and drop ctty |
483 | * (will do setsid()). | 485 | * (will do setsid()). |
484 | * | 486 | * |
487 | * forkexit_or_rexec(argv) = bare-bones "fork + parent exits" on MMU, | ||
488 | * "vfork + re-exec ourself" on NOMMU. No fd redirection, no setsid(). | ||
489 | * Currently used for openvt. On MMU ignores argv. | ||
490 | * | ||
485 | * Helper for network daemons in foreground mode: | 491 | * Helper for network daemons in foreground mode: |
492 | * | ||
486 | * bb_sanitize_stdio() = make sure that fd 0,1,2 are opened by opening them | 493 | * bb_sanitize_stdio() = make sure that fd 0,1,2 are opened by opening them |
487 | * to /dev/null if they are not. | 494 | * to /dev/null if they are not. |
488 | */ | 495 | */ |
@@ -493,16 +500,16 @@ enum { | |||
493 | DAEMON_ONLY_SANITIZE = 8, /* internal use */ | 500 | DAEMON_ONLY_SANITIZE = 8, /* internal use */ |
494 | }; | 501 | }; |
495 | #ifndef BB_NOMMU | 502 | #ifndef BB_NOMMU |
496 | #define bb_daemonize_or_rexec(flags, argv) bb_daemonize_or_rexec(flags) | 503 | void forkexit_or_rexec(void); |
497 | #define bb_daemonize(flags) bb_daemonize_or_rexec(flags, bogus) | 504 | # define forkexit_or_rexec(argv) forkexit_or_rexec() |
505 | # define bb_daemonize_or_rexec(flags, argv) bb_daemonize_or_rexec(flags) | ||
506 | # define bb_daemonize(flags) bb_daemonize_or_rexec(flags, bogus) | ||
498 | #else | 507 | #else |
499 | extern smallint re_execed; | 508 | void forkexit_or_rexec(char **argv); |
500 | pid_t BUG_fork_is_unavailable_on_nommu(void); | 509 | extern smallint re_execed; |
501 | pid_t BUG_daemon_is_unavailable_on_nommu(void); | 510 | # define fork() BUG_fork_is_unavailable_on_nommu() |
502 | pid_t BUG_bb_daemonize_is_unavailable_on_nommu(void); | 511 | # define daemon(a,b) BUG_daemon_is_unavailable_on_nommu() |
503 | #define fork() BUG_fork_is_unavailable_on_nommu() | 512 | # define bb_daemonize(a) BUG_bb_daemonize_is_unavailable_on_nommu() |
504 | #define daemon(a,b) BUG_daemon_is_unavailable_on_nommu() | ||
505 | #define bb_daemonize(a) BUG_bb_daemonize_is_unavailable_on_nommu() | ||
506 | #endif | 513 | #endif |
507 | void bb_daemonize_or_rexec(int flags, char **argv); | 514 | void bb_daemonize_or_rexec(int flags, char **argv); |
508 | void bb_sanitize_stdio(void); | 515 | void bb_sanitize_stdio(void); |
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c index c59b0b6fd..89ae9a73c 100644 --- a/libbb/vfork_daemon_rexec.c +++ b/libbb/vfork_daemon_rexec.c | |||
@@ -115,7 +115,7 @@ void vfork_daemon_rexec(int nochdir, int noclose, char **argv) | |||
115 | #endif /* BB_NOMMU */ | 115 | #endif /* BB_NOMMU */ |
116 | 116 | ||
117 | #ifdef BB_NOMMU | 117 | #ifdef BB_NOMMU |
118 | static void daemon_or_rexec(char **argv) | 118 | void forkexit_or_rexec(char **argv) |
119 | { | 119 | { |
120 | pid_t pid; | 120 | pid_t pid; |
121 | /* Maybe we are already re-execed and come here again? */ | 121 | /* Maybe we are already re-execed and come here again? */ |
@@ -135,7 +135,9 @@ static void daemon_or_rexec(char **argv) | |||
135 | bb_perror_msg_and_die("exec %s", CONFIG_BUSYBOX_EXEC_PATH); | 135 | bb_perror_msg_and_die("exec %s", CONFIG_BUSYBOX_EXEC_PATH); |
136 | } | 136 | } |
137 | #else | 137 | #else |
138 | static void daemon_or_rexec(void) | 138 | /* Dance around (void)...*/ |
139 | #undef forkexit_or_rexec | ||
140 | void forkexit_or_rexec(void) | ||
139 | { | 141 | { |
140 | pid_t pid; | 142 | pid_t pid; |
141 | pid = fork(); | 143 | pid = fork(); |
@@ -145,7 +147,7 @@ static void daemon_or_rexec(void) | |||
145 | exit(0); | 147 | exit(0); |
146 | /* child */ | 148 | /* child */ |
147 | } | 149 | } |
148 | #define daemon_or_rexec(argv) daemon_or_rexec() | 150 | #define forkexit_or_rexec(argv) forkexit_or_rexec() |
149 | #endif | 151 | #endif |
150 | 152 | ||
151 | 153 | ||
@@ -170,7 +172,7 @@ void bb_daemonize_or_rexec(int flags, char **argv) | |||
170 | fd = dup(fd); /* have 0,1,2 open at least to /dev/null */ | 172 | fd = dup(fd); /* have 0,1,2 open at least to /dev/null */ |
171 | 173 | ||
172 | if (!(flags & DAEMON_ONLY_SANITIZE)) { | 174 | if (!(flags & DAEMON_ONLY_SANITIZE)) { |
173 | daemon_or_rexec(argv); | 175 | forkexit_or_rexec(argv); |
174 | /* if daemonizing, make sure we detach from stdio */ | 176 | /* if daemonizing, make sure we detach from stdio */ |
175 | setsid(); | 177 | setsid(); |
176 | dup2(fd, 0); | 178 | dup2(fd, 0); |
diff --git a/loginutils/login.c b/loginutils/login.c index 791e44d83..3d8b8e540 100644 --- a/loginutils/login.c +++ b/loginutils/login.c | |||
@@ -337,25 +337,24 @@ auth_failed: | |||
337 | fchown(0, pw->pw_uid, pw->pw_gid); | 337 | fchown(0, pw->pw_uid, pw->pw_gid); |
338 | fchmod(0, 0600); | 338 | fchmod(0, 0600); |
339 | 339 | ||
340 | /* TODO: be nommu-friendly, use spawn? */ | ||
341 | if (ENABLE_LOGIN_SCRIPTS) { | 340 | if (ENABLE_LOGIN_SCRIPTS) { |
342 | char *script = getenv("LOGIN_PRE_SUID_SCRIPT"); | 341 | char *t_argv[2]; |
343 | if (script) { | 342 | |
344 | char *t_argv[2] = { script, NULL }; | 343 | t_argv[0] = getenv("LOGIN_PRE_SUID_SCRIPT"); |
345 | switch (fork()) { | 344 | if (t_argv[0]) { |
346 | case -1: break; | 345 | t_argv[1] = NULL; |
347 | case 0: /* child */ | 346 | setenv("LOGIN_TTY", full_tty, 1); |
348 | xchdir("/"); | 347 | setenv("LOGIN_USER", pw->pw_name, 1); |
349 | setenv("LOGIN_TTY", full_tty, 1); | 348 | setenv("LOGIN_UID", utoa(pw->pw_uid), 1); |
350 | setenv("LOGIN_USER", pw->pw_name, 1); | 349 | setenv("LOGIN_GID", utoa(pw->pw_gid), 1); |
351 | setenv("LOGIN_UID", utoa(pw->pw_uid), 1); | 350 | setenv("LOGIN_SHELL", pw->pw_shell, 1); |
352 | setenv("LOGIN_GID", utoa(pw->pw_gid), 1); | 351 | xspawn(argv); /* NOMMU-friendly */ |
353 | setenv("LOGIN_SHELL", pw->pw_shell, 1); | 352 | unsetenv("LOGIN_TTY"); |
354 | BB_EXECVP(script, t_argv); | 353 | unsetenv("LOGIN_USER"); |
355 | exit(1); | 354 | unsetenv("LOGIN_UID"); |
356 | default: /* parent */ | 355 | unsetenv("LOGIN_GID"); |
357 | wait(NULL); | 356 | unsetenv("LOGIN_SHELL"); |
358 | } | 357 | wait(NULL); |
359 | } | 358 | } |
360 | } | 359 | } |
361 | 360 | ||
diff --git a/miscutils/setsid.c b/miscutils/setsid.c index 6db07be5f..c878f524b 100644 --- a/miscutils/setsid.c +++ b/miscutils/setsid.c | |||
@@ -22,21 +22,12 @@ int setsid_main(int argc, char *argv[]) | |||
22 | if (argc < 2) | 22 | if (argc < 2) |
23 | bb_show_usage(); | 23 | bb_show_usage(); |
24 | 24 | ||
25 | if (getpgrp() == getpid()) { | 25 | /* Comment why is this necessary? */ |
26 | switch (fork()) { | 26 | if (getpgrp() == getpid()) |
27 | case -1: | 27 | forkexit_or_rexec(argv); |
28 | bb_perror_msg_and_die("fork"); | ||
29 | case 0: | ||
30 | break; | ||
31 | default: /* parent */ | ||
32 | exit(0); | ||
33 | } | ||
34 | } | ||
35 | /* child */ | ||
36 | 28 | ||
37 | setsid(); /* no error possible */ | 29 | setsid(); /* no error possible */ |
38 | 30 | ||
39 | BB_EXECVP(argv[1], argv + 1); | 31 | BB_EXECVP(argv[1], argv + 1); |
40 | |||
41 | bb_perror_msg_and_die("%s", argv[1]); | 32 | bb_perror_msg_and_die("%s", argv[1]); |
42 | } | 33 | } |
diff --git a/networking/httpd.c b/networking/httpd.c index b8d9b6b6f..8ab2bc45d 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
@@ -1938,13 +1938,6 @@ enum { | |||
1938 | OPT_FOREGROUND = 1 << p_opt_foreground, | 1938 | OPT_FOREGROUND = 1 << p_opt_foreground, |
1939 | }; | 1939 | }; |
1940 | 1940 | ||
1941 | static const char httpd_opts[] = "c:d:h:" | ||
1942 | USE_FEATURE_HTTPD_ENCODE_URL_STR("e:") | ||
1943 | USE_FEATURE_HTTPD_BASIC_AUTH("r:") | ||
1944 | USE_FEATURE_HTTPD_AUTH_MD5("m:") | ||
1945 | USE_FEATURE_HTTPD_SETUID("u:") | ||
1946 | "p:if"; | ||
1947 | |||
1948 | 1941 | ||
1949 | int httpd_main(int argc, char *argv[]); | 1942 | int httpd_main(int argc, char *argv[]); |
1950 | int httpd_main(int argc, char *argv[]) | 1943 | int httpd_main(int argc, char *argv[]) |
@@ -1970,7 +1963,12 @@ int httpd_main(int argc, char *argv[]) | |||
1970 | config->port = 80; | 1963 | config->port = 80; |
1971 | config->ContentLength = -1; | 1964 | config->ContentLength = -1; |
1972 | 1965 | ||
1973 | opt = getopt32(argc, argv, httpd_opts, | 1966 | opt = getopt32(argc, argv, "c:d:h:" |
1967 | USE_FEATURE_HTTPD_ENCODE_URL_STR("e:") | ||
1968 | USE_FEATURE_HTTPD_BASIC_AUTH("r:") | ||
1969 | USE_FEATURE_HTTPD_AUTH_MD5("m:") | ||
1970 | USE_FEATURE_HTTPD_SETUID("u:") | ||
1971 | "p:if", | ||
1974 | &(config->configFile), &url_for_decode, &home_httpd | 1972 | &(config->configFile), &url_for_decode, &home_httpd |
1975 | USE_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode) | 1973 | USE_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode) |
1976 | USE_FEATURE_HTTPD_BASIC_AUTH(, &(config->realm)) | 1974 | USE_FEATURE_HTTPD_BASIC_AUTH(, &(config->realm)) |
diff --git a/runit/sv.c b/runit/sv.c index 051e64e67..d52eb6d22 100644 --- a/runit/sv.c +++ b/runit/sv.c | |||
@@ -310,21 +310,16 @@ static int checkscript(void) | |||
310 | return 0; | 310 | return 0; |
311 | } | 311 | } |
312 | /* if (!(s.st_mode & S_IXUSR)) return 1; */ | 312 | /* if (!(s.st_mode & S_IXUSR)) return 1; */ |
313 | if ((pid = fork()) == -1) { | 313 | prog[0] = (char*)"./check"; |
314 | bb_perror_msg(WARN"cannot fork for %s/check", *service); | 314 | prog[1] = NULL; |
315 | pid = spawn(prog); | ||
316 | if (pid <= 0) { | ||
317 | bb_perror_msg(WARN"cannot %s child %s/check", "run", *service); | ||
315 | return 0; | 318 | return 0; |
316 | } | 319 | } |
317 | if (!pid) { | ||
318 | prog[0] = (char*)"./check"; | ||
319 | prog[1] = NULL; | ||
320 | close(1); | ||
321 | execve("check", prog, environ); | ||
322 | bb_perror_msg(WARN"cannot run %s/check", *service); | ||
323 | _exit(0); | ||
324 | } | ||
325 | while (wait_pid(&w, pid) == -1) { | 320 | while (wait_pid(&w, pid) == -1) { |
326 | if (errno == EINTR) continue; | 321 | if (errno == EINTR) continue; |
327 | bb_perror_msg(WARN"cannot wait for child %s/check", *service); | 322 | bb_perror_msg(WARN"cannot %s child %s/check", "wait for", *service); |
328 | return 0; | 323 | return 0; |
329 | } | 324 | } |
330 | return !wait_exitcode(w); | 325 | return !wait_exitcode(w); |