[comp.os.minix] #! interpretation in the kernel -- the source

klamer@mi.eltn.utwente.nl (Klamer Schutte) (05/07/91)

Here is the code to do #!script execution in the kernel.
All you have to do is patch mm/exec.c . Recompile exec.c, link mm,
build minix.img and you are there.

This version is for the atari. I think it will run OK on all machines and
all minix versions, provided that you adjust the macro ALIGN to get
proper alignment. (Will be different on minix-sparc!)

Beware: there is no documentation in the uud. part.
Keep this message!

How it's done:
in read_header the program is also allowed it it starts with #!.
The following 29 bytes are broken into (space-separated) parts. These
from the new, additional arguments.
In do_exec this causes a redo of trying to find a program. The new
found program is the first (zero ???) argument. This is allowed only
once. (To prevent loops!)
In patch_stack the original stack is patched so that the new arguments
are inserted in the beginning of argv[].

Note that the return value of read_header has changed. Also it has additional
arguments.

Setuid scripts are not allowed. The setuid features from the interpreter are
honoured.

Bugs: Probable. See this as a beta release. Especially out of band data and
  overflow is not tested.

Klamer (.signature at end).


table
 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
begin 644 exec.c.cdif.Z
M'YV-*@*"B.$B1H(8.7+$> &C!D,; VGHF'%#1PT:"EIH!%$&3YDQ+L8<3+BPz
M(<,; V?H@*$RA@T% 6/*G*D"IL 8,EC$0"DSXT:<+&2@U*A1 8BC*HZ"H(*Fy
M#(@W;MCDX>B&CIRI<-ZDJ0HBS1P09-Y\Z?C1A5&D+\XJ6 'B14VV()*22$)&x
M!T>/(,>PL#/0A8R!)!DZA($RADH8,G30@+B&39@V9>2 *(('#@@2:Y%FCGN9w
MR9LS=LGFW7MY<U(I9>QX30.U[U_ "@6?/&IX9>+%1QL_CFP:1!@R9,J0 3$Bv
M! @X<MZ,*3-GSM8S(.B\B=X4Q)K(;LJP,=U;3NK5K0G& &&WS=8T>%K,H0/"u
M3F3GX5W4* C#Q0S3:>&>';%U#)LZP8$@0AMMN("&"/OU]U^ /,R1QQPOK!<&t
M'0;ZD* ;_@'H% _FN8'>"V.$P08;;LA1H4TTI8CB0#@$-4-<,?G4 @@RM$@1s
M"$2U<&&& 0Z(G'(&(G@4?Q@NZ)0(<(0AQV-!JL46?V:X$9P9(#A1!1-,9#;"r
ME%N5D8"56"8 @Y9E2)F&&9DE2&423E!1!!-?S""#$$E0,<5^7&8'0A-!')'$q
M$$J!  ,>,<!@*$LPQ)#ED-K-40:**<ZTX@PPL#!##C &)",(--# 0@U#$85Gp
M&69TN=035 @1Z*JLVI" 6R"PH=R$K+GQ%)72T2$B",[IX=16(#3U6V1QI35Do
MGDY-D443JK+J+ @WO)J4K"'24>NMO.;1AAAOL,%K&KYV9:NPP4FF@K$@9 8Kn
M4UYU]14=U8F8QAEN0,:5&6](%@:-((B1!QU.R4NOO>RU$<88:)AZKI;()A $m
M$TD<X00*>*20 ,4I@- #""AT7#$(;,60L0D@^"'R#FD>9<034EP1A!1$M*?5l
M<++^]H6C9Z"0 LHJL^PRS.*RE]T=7T#6ALX\@[!RRR_';,?,QTV(\!=P6(7Tk
M64O_'/-6['EG,[F17<U6UDVWEX8<7_@+\%=)TC&UA&.L<?51:G(\!!))0*'Qj
MQDW8@,.A*6#M<]E<@^ =M1.6<76D*L8$@@TY^9UI342!\#<+.." HZB!RNH&i
M= ZVD?:_S"5]E&IH^Y=&W%_-,8;IO%I5QQCL25A[VG68@3)<(""L9 (J_$;&h
M%TJ>,<<62! AQ1=3)*%%$2_(T 4+OLEA/.YF(*\\\\X7,3T()1)O_5<;PY#Tg
M9KX!)[[Q6\#0A<8<^VYN"F R 3NL1$PWQQN0M2<O&6F@PU00]I$US,$%Q3K+f
M4>30!LMLK(&P6\\:1K<V^*$ =11D3L;@-D&UE0Y2C-.4XVY0 \S!8'*;RD$)e
M"S6>'"G0</ SVA?&\ 8XY $%=T##&ZA'!.JAP'-GV* <]+*G)GP!"E)XPA"^d
MX 0I\-"'0,P8&=8#1:@$\2X?^0(;RK2S%YZ)8Y()P<:>L(2,>8<.=9"#&U @c
MAYU)"P2EVB+X=@.^-[ '6'5PE&3(,*%]X8Q@"0P4P$;T!3/, 05W(T(2G B"b
M'.Y04-2#@1MA!; &YDM):9 *K^X00(1%9SIYC,P)O@) [] N7U-9&%NLD@?Ba
MG2$,6]'!"\TPG(V)2%9W$ X*ZN "-^P&>]0SP1R "0(L?(%.5)AD4MH51Z>(z
MI@ZZ$L,6?Q!(I0R2#84\9"(7&4GJQ2"2RMQD)]'0KX.MX9-%'.53[F"K4GY$y
M.E>IYE&^B ):@H '@C)C&="HQGJ2(9S-;&08ON(&.V)Q#- ,@S2=LK 02LIQx
M.,A)#E[4DT#!"C6_H8Y3 @HV?4GI+E8Y&'O@Y90_EJEVX&(. A<6*-=94((9w
M_ I;A@"Q(2R!>\_#T4 RY@,?@("F?[KI%/!F!"K K@WP\]KP.NK/8)J!#L$$v
M&![H$--@\E%7506!"<30G*PJP#@)"*M839"KK I36UEU71>-,T\JH0"I^)0Du
M"/9PE@3XYPV.\J<;W[@_R,#K.8U,SN<:&4!R=K2:"3AC&M=8!"<\H0A8*,(0t
MNABH/GPU719-BA'VZ4F2QLZ<<$P.4CT;2LF(@53Y<DIPUI.</ #6L]T:#@V]s
MTQ6#G:$,*T774>8P1 MBT(-SV*"NXD8UJ\!NBNS9V 7/%M.,;2MW**M<H6:@r
M$X1LKBB9!0%&A^-9CI9A6!X=3D="2CN-\JH,9P!DKU0J3UZ-X:5TZ"#I9/K3q
MF@JU>SH5&0AZ6M^@,H^H1GTA4C>FU"\PE99.A:I6I4I5X%JUCV;EZC =G"ZPp
M)H"L=C1KZ-)*1.&M;P[4*]Z$<[=6I=!SP!MK0:'D2M>CV%56>:7E7F'5UWTFo
M;+!W$"QT. FO8'VW7(A5;#\;^]C(3G9W2ND#1]C@J*ZX%:[YG"OZ7HQ7Q<D8n
MR0E@[1ALN,M>_E(,N6.!AT7<OBYTD2T)")^(X3>C-NP@K#0.@WNZPAY5*B4!m
M9[#C=%CI2EBZX<U\S==50CPB$.3A#74X3AJ]0H>O[* %&6-IDB]+M^QNUFWDl
M]"P'0\L_\Y:V7ZBE[6JM\@;7#A:V;)!M:FL;AMOF]H6\?:]R?SM?X9JSN'(Xk
M[GI\RUS@.A?,N@-A"%>4@QOH!#$HE*X,J&N8%G(.!(G=YV)14(0@#&$(19@"j
M92=--][14\WC"QSOLAS?F,*O;6\;KMQ \%PSA%A](J8>N(U'/9@"%P09P_(+i
M816$$<T*8. KPQW8788VH-(W'SW<=YL<6X(;_"H(5!IZV!T&RX3AH]>T#G:Th
M\^I 269C0RM:P5' X*Q>-0Q9E7!:RTWALCJXKF(5*R_U( ;J/2^)0JB"$7!:g
MA"XZM">.B\%B= (J%'I<VOTDX[8M6VG,MD4%/8BZU*=.]:I;_>I8S[K6L5X3f
MI:@@Y@7N:,Q7U76D;/WL:$^[VJDN:20FP0I!<%/0#/=C _\X; B&HX)+3N&3e
MI[RK%+YLS,,JR Q3>,.''T/@YGDO,@ :SDD)Z&K'((<T5"U?<,2\4@$K&CAFd
MDJ'H*IP*GOIX6,'!,<M!IY!M]53PU6%;Q)(TK2NH K[/%]"F1[U3I$-W?MJ*c
MP=\*U\*D2\*@T.!%+CRZ[U&@]*0Q/5UL<<O:IT_]ZO?@+4B).;K1<#-UCSU0b
MV(^+]<=/?J[G!P1NA[O<9\^<J&&Z^^9$ ;N!'6+KV:'^9R"BO>>+[\S(#WCMa
M1CT!43QV@&1<DP#%\SJ9P7YS0&[RM39(1E>\ RM7X!1K4% #AP9RMGOZ8RUQz
MTP+ XEE)(@>-QFFC51W%<1S)L1S-\1ROQA;H ROH$Q<)P!1.,32Q$@:'!DWNy
M(DN\0X,).(-?AX,$6&8XXE-%Z 9=((0)T'!%Z#Y'6#UG8 =;H(1,6#],V'!Ex
M8@=P8(0MX%-;V(56^(-?QUJ =7(F&' #5X1+2(9-F&JQ4WF#=7)"^ +=IA3_w
M-X!PX 8"&#Q9(8!5DVOH<X!;9"OE0SUI0#T - =P@&1W>!3X(@<HD 8]8#YIv
MP ,)N -IL (K(&YW5H@@LS&L58@H4(1I8&8@,Q#ZQCL/$S$34XAGIA2+Z$"Qu
M4B:IN%YO8 8H(#]Q$6E2J(#>YE;[5T%L,8O[!0(O<P1?P"=8X(DN-HSMMS')t
MN(Q!@ 4Z-8N.Z' &YQ[RUVZI.(O4$X <PS7"]8#MMS.P8C#785[)T6EV=A05s
M-QW*Q8L!D3%O!6S?Z!5P,&-)\5>MHT-U (=WD"_G](Z^L8<61(\J8(_M%HM(r
M47%NP(GPXX=O()%LD8EB!2L)F$"\ Y&A^(O9""L8V#LU-!4$B'#BY09<*"Y/q
MH2>R4D,(1$!QDWF242;#D8N\DB2I-U"-I!W>8I"1.(D]( .:Z ,G9 (DTS'Tp
MF#'QF#'XY(UL,8W,N /.*&7C1D\4N3=5<B5,X(EAE08:\6:9D0"-\BAH!CSQo
M^)'8.)9^&)%LL3$4R8G9:%F\$X@)J8'S<Y!_ACX>.8]X"2._!EU\B9 KL#$Qn
M():\$Y24:(F8:#VOLXF=&',:"1P!5"N[4CRO=U)?89 2>&=M*9%^J22]R#$_m
M9$498Y<S4IJ?DP(-B65:QF7'817X1X6GB&]89I>%&8>D:(JH&#)S&8-)T7!Fl
M.%AV(")UT'XBHE0F25O <GH' WKH@SZK%SOF2%_8F)%)L6GM8HQ 1"PC:6?/k
M=Q;25W[D29YE1X-B%79W)P??YW4*!'7E&9_6UW92\'9Q5P1SIY[@U51Z1SVVj
MMS:*"&$4IG*!9V$)X'+S56]HE7CO-CSQ)H4C9@:+-W>T]'AO)'G,07F6!T\Ti
M27>_P7EXX7ER)&FB1WK8>1RZIWI(QWI"\WJG92[HPH!Q\9^E WDH^IPJZGO1h
M,5[!!YT_%R-!9P.5XA(UD&P;(0-#)P,U\!?)=QQH\"#F5GN&=WLVZIRIQWO3g
MF2N[LE[5!$1Q@7A4^D96RH&]MUC9LBW=$AT*)4=<*GO,I3JLXUZEEYWJUJ,Lf
M":<&Q)&]@Y? $SSP-CX"*&+8\V:P$HGF)3R5"16[DH*823";B2XM]G3:]6/Fe
M=5@7)UY3M23EY5D,%J"Z0CT2AI*?I"O>LEY?80:B16<=ERX_*D(W@0.>@A#Cd
M45'@5SU.<09IX!ZV$H+5T5%F07;H0FE.!D8_QI_T!P+)LSS-\SP9(T;(NCW+c
MVG-E.F2.!5F256)MQ3$< VQ&2#*#8@1&  /@.JY="0+.RB=^,EG3REC5:F3;b
MAA2MIUS<"H4D,P5%H#?49*]0\#+W21[Y1*C9608CF#@@D 1:!0(Q@WD%56?!a
MFEU'L$\[.E6BBH:F^FJ5(Q3?1"E,^FQ>9ZL@@*NZRI*>Y:LO5$W"2D_$^AO&z
M&F;/JJS=TZP;DZP\ES%\P <5]BSRAP+S^C[>B@?@*J[C:@3E>JY]\B<9$SALy
M)65):U=\J@)C@(^AF9? AC)@=8")" )J #_F(WB"!RM?5%#$81R8%T#N8EZ.x
M0D,?%2*%!B\79UXC*$!EFXM4LC!+2T\HP%H8TD Z&V8B4!PB$!0P&V4URS%^w
MZJ#C8ZY1.YKUDP)("VW1MGPJ9B@EAI9_:CQW*9H+>9A=NTQTH$ZVM3H(= 33v
M<:F>AW'5P361@1S[%'MI 5;<*K/1JF+OLS$GP 5N< )4"VU&LV4W)*CT][1Au
M!KLOF[L)H)A#N0/ FSVUZ:RU>[N:R(F-^Y5NE;Q;4)M1!P(G@+W1&U9H:RUNt
M<)P RRMK8'G86[YTZ[AEJ;2.BX"5>SQJP(FS"Z'8DXII0+QA%90[L(O<NKRTs
MJ[U:E934R[_8:[LGL#.0N;UA9;\(.#[84[WQ:SYOY"O)T0( PT!;0;!D>[YBr
M!98M,*=@ 14GP!XOV62>9;L)9&&6!5;3V0)JD+M'D<+0]D*CEUS;FCO="@+Zq
M"@+Y>J_\*G=V(4GAZR@#"W &2S()*QD+:[(."[' 1[H4FU('E$"M6A-!EP.>p
M(@.&8G1>1Z#\-VN]5FO]8L-", 53( 1=$+ZARJ7 <F^2AA1@6D$;PZW*PBQGo
MS%?:PBW>$DULFE(LR<:Z-:-3"L=AG#U4@"IF'+Y:ZBWWQGNW]&\;A7D_<@9+n
M@E3GFZTH(*4-UL7EHT_+1V36>F1J$2A8V7K.JJ\]+*V1"B5V@S=Z<ZY^ SB;m
M0BDE- ,QX&S8M<6 U\4<PX 9PZUC7,9U#"MIS,=KS']M_*4+JLMRO"R';,=Hl
MFL=K6E+$;"M^+,,(*LC<6LBI$LS]:$>[LLBCZV_5\LB2$<F3?,(FYE:8;&[7k
M*U>KAP*1"\2AG,Z$2\H;8\I2<)\9D\KT=#=Y@[A[\LJ2*VR,LR(R@*0N<D*Tj
M>A1N8T&U-U[F-E/VQ7/YQ5,^!50V]5])4%3')6N$ZW?WQA8JP,7$V%\9':T5i
MO5\7/=%#M=$!5G@-K5SK'-(F?5\Y-2/ZQ5\8+50 YL+#B@)D\%X^L#&YHGCKh
M2FWM>JU!7*=MD$?L<5J^(<(+QQ[C@:?M10:HX]#Q>L\\G,]R1TTG9!=N\ZZ\g
M\@59O3%8?3:I2')V]%XSHE9'!3_K]05O(#<S[)]$%-3UEM>H4V]F?39=5#DSf
M, .S3 .VK"."Y-&73*/TM=,4C=,67=,:S=$O%-0.#=+\)](DW7X2[5\H#=DJe
M+=DM3=DPK=@SG=FBC5^@K=,LW=,GZU:6/=2C:M3O',_AM&E-O6M0/2&U.%!4d
MW3MLL#H%^<=I_7'UG%Q<O:]>C9]@[:]C'4%_;=S%O=9%K5-P+6!RG5)T;==/c
-A=>*J']\?39^C3I=!%Q<b
 a
end
-- 
Klamer Schutte
Faculty of electrical engineering -- University of Twente, The Netherlands
klamer@mi.eltn.utwente.nl	{backbone}!mcsun!mi.eltn.utwente.nl!klamer