diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-08-25 18:25:24 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-08-25 18:25:24 +0000 |
| commit | 737d131e5e7a795ef771f987d7b02cbf4fa670d6 (patch) | |
| tree | 0a7acc833d9ee4fa873ec4c15ff60b692bef420e /applets | |
| parent | 52226771760063acdc89ef4f8e531b595ae4232b (diff) | |
| download | busybox-w32-737d131e5e7a795ef771f987d7b02cbf4fa670d6.tar.gz busybox-w32-737d131e5e7a795ef771f987d7b02cbf4fa670d6.tar.bz2 busybox-w32-737d131e5e7a795ef771f987d7b02cbf4fa670d6.zip | |
support "#!/bin/busybox"-style wrappers. Needed for SELinux.
Patch by Yuichi Nakamura <ynakam@hitachisoft.jp>
Diffstat (limited to 'applets')
| -rw-r--r-- | applets/applets.c | 7 | ||||
| -rwxr-xr-x | applets/install.sh | 82 |
2 files changed, 53 insertions, 36 deletions
diff --git a/applets/applets.c b/applets/applets.c index 6de6db3cd..c2040b9a3 100644 --- a/applets/applets.c +++ b/applets/applets.c | |||
| @@ -600,9 +600,10 @@ static int busybox_main(char **argv) | |||
| 600 | /* "busybox <applet> arg1 arg2 ..." */ | 600 | /* "busybox <applet> arg1 arg2 ..." */ |
| 601 | argv++; | 601 | argv++; |
| 602 | } | 602 | } |
| 603 | /* we want "<argv[0]>: applet not found", not "busybox: ..." */ | 603 | /* We support "busybox /a/path/to/applet args..." too. Allows for |
| 604 | applet_name = argv[0]; | 604 | * "#!/bin/busybox"-style wrappers */ |
| 605 | run_applet_and_exit(argv[0], argv); | 605 | applet_name = bb_get_last_path_component(argv[0]); |
| 606 | run_applet_and_exit(applet_name, argv); | ||
| 606 | bb_error_msg_and_die("applet not found"); | 607 | bb_error_msg_and_die("applet not found"); |
| 607 | } | 608 | } |
| 608 | 609 | ||
diff --git a/applets/install.sh b/applets/install.sh index b02350262..e94b2b98e 100755 --- a/applets/install.sh +++ b/applets/install.sh | |||
| @@ -5,19 +5,23 @@ export LC_CTYPE=POSIX | |||
| 5 | 5 | ||
| 6 | prefix=${1} | 6 | prefix=${1} |
| 7 | if [ -z "$prefix" ]; then | 7 | if [ -z "$prefix" ]; then |
| 8 | echo "usage: applets/install.sh DESTINATION [--symlinks/--hardlinks]" | 8 | echo "usage: applets/install.sh DESTINATION [--symlinks/--hardlinks/--scriptwrapper]" |
| 9 | exit 1; | 9 | exit 1; |
| 10 | fi | 10 | fi |
| 11 | h=`sort busybox.links | uniq` | 11 | h=`sort busybox.links | uniq` |
| 12 | scriptwrapper="n" | ||
| 12 | cleanup="0" | 13 | cleanup="0" |
| 13 | noclobber="0" | 14 | noclobber="0" |
| 14 | case "$2" in | 15 | case "$2" in |
| 15 | --hardlinks) linkopts="-f";; | 16 | --hardlinks) linkopts="-f";; |
| 16 | --symlinks) linkopts="-fs";; | 17 | --symlinks) linkopts="-fs";; |
| 17 | --cleanup) cleanup="1";; | 18 | --scriptwrapper) scriptwrapper="y";swrapall="y";; |
| 18 | --noclobber) noclobber="1";; | 19 | --sw-sh-hard) scriptwrapper="y";linkopts="-f";; |
| 19 | "") h="";; | 20 | --sw-sh-sym) scriptwrapper="y";linkopts="-fs";; |
| 20 | *) echo "Unknown install option: $2"; exit 1;; | 21 | --cleanup) cleanup="1";; |
| 22 | --noclobber) noclobber="1";; | ||
| 23 | "") h="";; | ||
| 24 | *) echo "Unknown install option: $2"; exit 1;; | ||
| 21 | esac | 25 | esac |
| 22 | 26 | ||
| 23 | if [ -n "$DO_INSTALL_LIBS" ] && [ "$DO_INSTALL_LIBS" != "n" ]; then | 27 | if [ -n "$DO_INSTALL_LIBS" ] && [ "$DO_INSTALL_LIBS" != "n" ]; then |
| @@ -52,6 +56,7 @@ if [ "$cleanup" = "1" ] && [ -e "$prefix/bin/busybox" ]; then | |||
| 52 | cd "$pd" | 56 | cd "$pd" |
| 53 | done | 57 | done |
| 54 | ` | 58 | ` |
| 59 | exit 0 | ||
| 55 | fi | 60 | fi |
| 56 | 61 | ||
| 57 | rm -f $prefix/bin/busybox || exit 1 | 62 | rm -f $prefix/bin/busybox || exit 1 |
| @@ -61,33 +66,44 @@ install -m 755 busybox $prefix/bin/busybox || exit 1 | |||
| 61 | for i in $h; do | 66 | for i in $h; do |
| 62 | appdir=`dirname $i` | 67 | appdir=`dirname $i` |
| 63 | mkdir -p $prefix/$appdir || exit 1 | 68 | mkdir -p $prefix/$appdir || exit 1 |
| 64 | if [ "$2" = "--hardlinks" ]; then | 69 | if [ "$scriptwrapper" = "y" ]; then |
| 65 | bb_path="$prefix/bin/busybox" | 70 | if [ "$swrapall" != "y" ] && [ "$i" = "/bin/sh" ]; then |
| 66 | else | 71 | ln $linkopts busybox $prefix$i || exit 1 |
| 67 | case "$appdir" in | 72 | else |
| 68 | /) | 73 | rm -f $prefix$i |
| 69 | bb_path="bin/busybox" | 74 | echo "#!/bin/busybox" > $prefix$i |
| 70 | ;; | 75 | chmod +x $prefix/$i |
| 71 | /bin) | 76 | fi |
| 72 | bb_path="busybox" | 77 | echo " $prefix$i" |
| 73 | ;; | ||
| 74 | /sbin) | ||
| 75 | bb_path="../bin/busybox" | ||
| 76 | ;; | ||
| 77 | /usr/bin|/usr/sbin) | ||
| 78 | bb_path="../../bin/busybox" | ||
| 79 | ;; | ||
| 80 | *) | ||
| 81 | echo "Unknown installation directory: $appdir" | ||
| 82 | exit 1 | ||
| 83 | ;; | ||
| 84 | esac | ||
| 85 | fi | ||
| 86 | if [ "$noclobber" = "0" ] || [ ! -e "$prefix$i" ]; then | ||
| 87 | echo " $prefix$i -> $bb_path" | ||
| 88 | ln $linkopts $bb_path $prefix$i || exit 1 | ||
| 89 | else | 78 | else |
| 90 | echo " $prefix$i already exists" | 79 | if [ "$2" = "--hardlinks" ]; then |
| 80 | bb_path="$prefix/bin/busybox" | ||
| 81 | else | ||
| 82 | case "$appdir" in | ||
| 83 | /) | ||
| 84 | bb_path="bin/busybox" | ||
| 85 | ;; | ||
| 86 | /bin) | ||
| 87 | bb_path="busybox" | ||
| 88 | ;; | ||
| 89 | /sbin) | ||
| 90 | bb_path="../bin/busybox" | ||
| 91 | ;; | ||
| 92 | /usr/bin|/usr/sbin) | ||
| 93 | bb_path="../../bin/busybox" | ||
| 94 | ;; | ||
| 95 | *) | ||
| 96 | echo "Unknown installation directory: $appdir" | ||
| 97 | exit 1 | ||
| 98 | ;; | ||
| 99 | esac | ||
| 100 | fi | ||
| 101 | if [ "$noclobber" = "0" ] || [ ! -e "$prefix$i" ]; then | ||
| 102 | echo " $prefix$i -> $bb_path" | ||
| 103 | ln $linkopts $bb_path $prefix$i || exit 1 | ||
| 104 | else | ||
| 105 | echo " $prefix$i already exists" | ||
| 106 | fi | ||
| 91 | fi | 107 | fi |
| 92 | done | 108 | done |
| 93 | 109 | ||
