httpd: do not clear environment
mount: mount helpers support (by Vladimir Dronnikov <dronnikov@gmail.ru>)
This commit is contained in:
parent
32eb1f6cb9
commit
2535f12cf2
@ -2089,7 +2089,13 @@ int httpd_main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_FEATURE_HTTPD_CGI
|
#if 0 /*was #if ENABLE_FEATURE_HTTPD_CGI*/
|
||||||
|
/* User can do it himself: 'env - PATH="$PATH" httpd'
|
||||||
|
* We don't do it because we don't want to screw users
|
||||||
|
* which want to do
|
||||||
|
* 'env - VAR1=val1 VAR2=val2 https'
|
||||||
|
* and have VAR1 and VAR2 values visible in their CGIs.
|
||||||
|
* Besides, it is also smaller. */
|
||||||
{
|
{
|
||||||
char *p = getenv("PATH");
|
char *p = getenv("PATH");
|
||||||
/* env strings themself are not freed, no need to strdup(p): */
|
/* env strings themself are not freed, no need to strdup(p): */
|
||||||
|
@ -360,6 +360,16 @@ config MOUNT
|
|||||||
NFS filesystems. Most people using BusyBox will also want to enable
|
NFS filesystems. Most people using BusyBox will also want to enable
|
||||||
the 'mount' utility.
|
the 'mount' utility.
|
||||||
|
|
||||||
|
config FEATURE_MOUNT_HELPERS
|
||||||
|
bool "Support mount helpers"
|
||||||
|
default n
|
||||||
|
depends on MOUNT
|
||||||
|
help
|
||||||
|
Enable mounting of virtual file systems via external helpers.
|
||||||
|
E.g. mount obexfs#-b00.11.22.33.44.55 /mnt will in effect call
|
||||||
|
obexfs -b00.11.22.33.44.55 /mnt
|
||||||
|
The idea is to use such virtual filesystems in /etc/fstab
|
||||||
|
|
||||||
config FEATURE_MOUNT_NFS
|
config FEATURE_MOUNT_NFS
|
||||||
bool "Support mounting NFS file systems"
|
bool "Support mounting NFS file systems"
|
||||||
default n
|
default n
|
||||||
|
@ -18,8 +18,8 @@
|
|||||||
mount_it_now() does the actual mount.
|
mount_it_now() does the actual mount.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libbb.h"
|
|
||||||
#include <mntent.h>
|
#include <mntent.h>
|
||||||
|
#include "libbb.h"
|
||||||
|
|
||||||
/* Needed for nfs support only... */
|
/* Needed for nfs support only... */
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
@ -30,20 +30,23 @@
|
|||||||
#include <rpc/pmap_prot.h>
|
#include <rpc/pmap_prot.h>
|
||||||
#include <rpc/pmap_clnt.h>
|
#include <rpc/pmap_clnt.h>
|
||||||
|
|
||||||
|
#ifndef MS_SILENT
|
||||||
|
#define MS_SILENT (1 << 15)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__dietlibc__)
|
#if defined(__dietlibc__)
|
||||||
/* 16.12.2006, Sampo Kellomaki (sampo@iki.fi)
|
/* 16.12.2006, Sampo Kellomaki (sampo@iki.fi)
|
||||||
* dietlibc-0.30 does not have implementation of getmntent_r() */
|
* dietlibc-0.30 does not have implementation of getmntent_r() */
|
||||||
/* OTOH: why we use getmntent_r instead of getmntent? TODO... */
|
|
||||||
struct mntent *getmntent_r(FILE* stream, struct mntent* result, char* buffer, int bufsize)
|
struct mntent *getmntent_r(FILE* stream, struct mntent* result, char* buffer, int bufsize)
|
||||||
{
|
{
|
||||||
/* *** XXX FIXME WARNING: This hack is NOT thread safe. --Sampo */
|
|
||||||
struct mntent* ment = getmntent(stream);
|
struct mntent* ment = getmntent(stream);
|
||||||
memcpy(result, ment, sizeof(struct mntent));
|
memcpy(result, ment, sizeof(struct mntent));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define getmntent_buf bb_common_bufsiz1
|
||||||
|
|
||||||
|
|
||||||
// Not real flags, but we want to be able to check for this.
|
// Not real flags, but we want to be able to check for this.
|
||||||
enum {
|
enum {
|
||||||
@ -186,11 +189,11 @@ static int parse_mount_options(char *options, char **unrecognized)
|
|||||||
strcpy((*unrecognized)+i, options);
|
strcpy((*unrecognized)+i, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Advance to next option, or finish
|
if (!comma)
|
||||||
if (comma) {
|
break;
|
||||||
|
// Advance to next option
|
||||||
*comma = ',';
|
*comma = ',';
|
||||||
options = ++comma;
|
options = ++comma;
|
||||||
} else break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return flags;
|
return flags;
|
||||||
@ -262,6 +265,7 @@ static int mount_it_now(struct mntent *mp, int vfsflags, char *filteropts)
|
|||||||
vfsflags, filteropts);
|
vfsflags, filteropts);
|
||||||
if (!rc || (vfsflags&MS_RDONLY) || (errno!=EACCES && errno!=EROFS))
|
if (!rc || (vfsflags&MS_RDONLY) || (errno!=EACCES && errno!=EROFS))
|
||||||
break;
|
break;
|
||||||
|
if (!(vfsflags & MS_SILENT))
|
||||||
bb_error_msg("%s is write-protected, mounting read-only",
|
bb_error_msg("%s is write-protected, mounting read-only",
|
||||||
mp->mnt_fsname);
|
mp->mnt_fsname);
|
||||||
vfsflags |= MS_RDONLY;
|
vfsflags |= MS_RDONLY;
|
||||||
@ -1399,6 +1403,27 @@ static int singlemount(struct mntent *mp, int ignore_busy)
|
|||||||
if (mp->mnt_type && strcmp(mp->mnt_type,"auto") == 0)
|
if (mp->mnt_type && strcmp(mp->mnt_type,"auto") == 0)
|
||||||
mp->mnt_type = 0;
|
mp->mnt_type = 0;
|
||||||
|
|
||||||
|
// Might this be a virtual filesystem?
|
||||||
|
|
||||||
|
if (ENABLE_FEATURE_MOUNT_HELPERS
|
||||||
|
&& (strchr(mp->mnt_fsname,'#'))
|
||||||
|
) {
|
||||||
|
char *s, *p, *args[35];
|
||||||
|
int n = 0;
|
||||||
|
for (s = p = mp->mnt_fsname; *s && n < 35-3; ++s) {
|
||||||
|
if (s[0] == '#' && s[1] != '#') {
|
||||||
|
*s = '\0';
|
||||||
|
args[n++] = p;
|
||||||
|
p = s + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
args[n++] = p;
|
||||||
|
args[n++] = mp->mnt_dir;
|
||||||
|
args[n] = NULL;
|
||||||
|
rc = wait4pid(xspawn(args));
|
||||||
|
goto report_error;
|
||||||
|
}
|
||||||
|
|
||||||
// Might this be an CIFS filesystem?
|
// Might this be an CIFS filesystem?
|
||||||
|
|
||||||
if (ENABLE_FEATURE_MOUNT_CIFS
|
if (ENABLE_FEATURE_MOUNT_CIFS
|
||||||
@ -1593,8 +1618,8 @@ int mount_main(int argc, char **argv)
|
|||||||
|
|
||||||
if (!mountTable) bb_error_msg_and_die("no %s", bb_path_mtab_file);
|
if (!mountTable) bb_error_msg_and_die("no %s", bb_path_mtab_file);
|
||||||
|
|
||||||
while (getmntent_r(mountTable, mtpair, bb_common_bufsiz1,
|
while (getmntent_r(mountTable, &mtpair[0], getmntent_buf,
|
||||||
sizeof(bb_common_bufsiz1)))
|
sizeof(getmntent_buf)))
|
||||||
{
|
{
|
||||||
// Don't show rootfs. FIXME: why??
|
// Don't show rootfs. FIXME: why??
|
||||||
// util-linux 2.12a happily shows rootfs...
|
// util-linux 2.12a happily shows rootfs...
|
||||||
@ -1657,9 +1682,9 @@ int mount_main(int argc, char **argv)
|
|||||||
|
|
||||||
// Get next fstab entry
|
// Get next fstab entry
|
||||||
|
|
||||||
if (!getmntent_r(fstab, mtcur, bb_common_bufsiz1
|
if (!getmntent_r(fstab, mtcur, getmntent_buf
|
||||||
+ (mtcur==mtpair ? sizeof(bb_common_bufsiz1)/2 : 0),
|
+ (mtcur==mtpair ? sizeof(getmntent_buf)/2 : 0),
|
||||||
sizeof(bb_common_bufsiz1)/2))
|
sizeof(getmntent_buf)/2))
|
||||||
{
|
{
|
||||||
// Were we looking for something specific?
|
// Were we looking for something specific?
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user