On 2013-09-16 Mon 13:00 PM |, Antoine Jacoutot wrote:
>
> Heh, very interesting trick ;-)
> But I don't think that is 100% full proof as is.
>
> e.g.
> $ head -n 1 /usr/local/bin/xml2-config | cut -d! -f2
> /bin/sh
> You have a white space before the interpreter.
>
> If you can improve that and make sure it works with all similar rc scripts
> then I think it is definitely something that should be looked into.
> Thanks.
>
Well spotted Antoine.
I wrote a test script with various shebang lines of:
#![space]/bin/ksh
#![space][space]/bin/ksh
#![space][tab]/bin/ksh -x
#![tab]/bin/ksh -x
#![space]/usr/bin/perl
#![space][space]/usr/bin/perl
#![space][tab]/usr/bin/perl -T
#![tab][tab][tab]/usr/bin/perl -T
This seems to work with these test scenarios
(as seen in /var/run/rc.d/rcshebangtester):
Index: rc.subr
===================================================================
RCS file: /cvs/src/etc/rc.d/rc.subr,v
retrieving revision 1.70
diff -u -r1.70 rc.subr
--- rc.subr 11 Jul 2013 09:34:33 -0000 1.70
+++ rc.subr 16 Sep 2013 12:09:42 -0000
@@ -221,4 +221,9 @@
unset _rcflags _rcuser
pexp="${daemon}${daemon_flags:+ ${daemon_flags}}"
+file ${daemon} | fgrep -q script &&
+{
+ shebang=$(head -n 1 ${daemon} | cut -d! -f2 | sed 's/^[[:blank:]]*//')
+ pexp="${shebang} ${pexp}"
+}
rcexec="su -l -c ${daemon_class} -s /bin/sh ${daemon_user} -c"
Would it also be worthwhile verifying the 1st element of $shebang is
executable before prefixing $pexp?
Cheers,
--
Craig Skinner | http://twitter.com/Craig_Skinner | http://linkd.in/yGqkv7