From 80c28cb819975b88fcc4ccacdf5bb261e890da54 Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Tue, 1 Sep 2009 14:01:52 -0700 Subject: [PATCH] Finished off ajaxterm module --- "ajaxterm/\\" | 23 +++++++++++++++++ ajaxterm/ajaxterm/ajaxterm.css | 2 +- ajaxterm/ajaxterm/qweb.pyc | Bin 0 -> 57662 bytes ajaxterm/config | 1 + ajaxterm/config.info | 1 + ajaxterm/index.cgi | 45 ++++++++++++++++++++++++++++++--- ajaxterm/lang/en | 4 +++ ajaxterm/module.info | 2 +- ajaxterm/proxy.cgi | 8 ++++++ 9 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 "ajaxterm/\\" create mode 100644 ajaxterm/ajaxterm/qweb.pyc create mode 100644 ajaxterm/config create mode 100644 ajaxterm/config.info create mode 100644 ajaxterm/lang/en diff --git "a/ajaxterm/\\" "b/ajaxterm/\\" new file mode 100644 index 000000000..5dbd2e887 --- /dev/null +++ "b/ajaxterm/\\" @@ -0,0 +1,23 @@ +#!/usr/local/bin/perl +# Start the Ajaxterm webserver on a random port, then print an iframe for +# a URL that proxies to it + +BEGIN { push(@INC, ".."); }; +use WebminCore; +use Socket; +&init_config(); + +&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1); + +# Check for python +if (!&has_command("python")) { + &ui_print_endpage(&text('index_epython', "python")); + } + +# Pick a free port +&get_miniserv_config(\%miniserv); + +# Show the iframe + +&ui_print_footer("/", $text{'index'}); + diff --git a/ajaxterm/ajaxterm/ajaxterm.css b/ajaxterm/ajaxterm/ajaxterm.css index b9a5f8771..8042fb2a5 100644 --- a/ajaxterm/ajaxterm/ajaxterm.css +++ b/ajaxterm/ajaxterm/ajaxterm.css @@ -58,7 +58,7 @@ pre.term span.b5 { background-color: #b0b; } pre.term span.b6 { background-color: #0bb; } pre.term span.b7 { background-color: #bbb; } -body { background-color: #888; } +body { background-color: #ffffff; } #term { float: left; } diff --git a/ajaxterm/ajaxterm/qweb.pyc b/ajaxterm/ajaxterm/qweb.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e1bf090781b32008934484b079126ad3e71adb6 GIT binary patch literal 57662 zcmdVD3!Ge6UgvkKyY*_lAJ)TTm5p4*zyj4Vx2s;cfT ztGlYZZ?)92tsy)1WWvIS*RUJN4loN$vLTy+ELoNS*#!n>1Ivc}0Lv@zVR>%I?h+P0 zY(kO^`TlFbj7>x%era(=jouTRdeFX9`L^Baoz#^n6QBEBg(zp03CPR?&G;#-pQTZ;JB`cz@O3t1}HuDSfQ> z#h&E+op1fcoqFpp>VwH7BRiD5nIvx{$;Z#%mDE=`X>~X0?xeoPNo%`F_ayaoP8#ke zy(g)!chZJ#(!EK2W74=QnPjpybyLepeRI;d+o@Z+srM!It;rNk*_OP?tnN+f+mpuq z&a|VO>4BtvN78t}sXM!=`;z)D*Sx!%^k7ooQ+$4BH+6qfzpF^SyPGrOlVq&?;d6~kaYI*KjXS&@gU#ez}dimw)PG|1P(b20{uO5yUhuaHNqxE)ebgnU%DL8cG(MKO0 zEuWis?)1gsT6=b`+G$>zX_T*0@nli)!E&=xo?B>NY1SK5(keGwyz4A1);fy|jdG`5 zo?mR%F3(&mUs`O=)b;Ujb#88^S);UeD=XIsnpvmWnku&^pBx@8KU6+mo@q`^cdj-R zmKPfHi;b*Pp02j)GmVAvh}#r+T^3Vg%c><;j`Fxn2beoyEEGn>fR z^VbS+bKeC$GtDaP$vkdFJL>I5*4p0%Ab(e{cB+EWGF@wA8E^wg^RLxuOaWOyS*uxV z08m$(o$2zK^u=sATdYl&t66#C!!Mk<^h%@FIjHFInc8$?_L`amV9>FX&m21b(rM~G zx6tf#m;+jRywz#b*cTevVl$)Ck;ZJb3B=5lkDo0s)*DxZ76*ohpKs4L=BiVTC(AkF z&>22FJd=ND?9o_{b{49&(c$4|8SvRByLk4N*(a56^h&dF)v?2K({oQZ>tjdDF5sfk z`olt@@`PZ4*`Pl!G+T>H2g@&3YiB0PA2Y1gu1#HSwhkEQUj)L+negvgdlAIB!eDmF zGYuxJn3hKlKgy5-NHa4~10e_?AOI>)wr6JA6g35Eddf4f^0n7q8-AdCb*cd#2H|+? z4mBB*Q6cG}BZnV9OrsA^y~@W#%C9b6nKULYe^m?gRN`o3sVdCOMla2@r}*r!BhaYf z>({Rj4dfguY_ z`770>vyFw>^3~}kaI=^JQkuCNDGh)ENj=%V+L~!s>mFE$(?=T%nb4EAJ}G2-s60VK zYK`*Cqn`fBTXp}&K3|M4UkZw>xi~d7b?Xui&0XXD;Rf%EG3_PYSk7Z_Q_f>Im*XVB zjE>|zFaQ?=`-}(JfRRN%7aDWztO-527QlJ3U0W2XF+DFv=@vzS7>ljTqv@&RCto~u zxU1>zEdv;y~S(~jxGjNci zYU9njfOu3m-Uf11!Bo`HSfZY+e60b2sW-FQVrEdtrrV3KwrSD#R=M5kRj#l5*{hzR zqN8drjIupSj}B$cDX~TUf3Zt1Zv1kt3GYy1@yTepx=@>LUTI`ZgPHsZh%98k)d67- z-SDTN`@(_AM%BEzS};LT=lHN(orBSs^EAv4vN9yFG1I2}FSW<`!Z|$A;PugP!|s@Vn-VLcOXZFh$*@>%ApWU!8k2l9s3832p4yBzAYLA>7Kb%tzE86HChdreS6_xxtrFNjGpd(cQr#G>ShSpqGArv&0^88 zI+c|hOOiU99V7>Rp|Pkp7An=ekp%w~K?A8C^(L`+ zZ(US!K8omoQ_w;O9YF=Pk|q6fl~dLv>BPutim0LCCdKcB3f@TYdMSB5Nh)YW2^xdy z9Cz3mA}Zl(M4$L6Ys^fh$|1cXg6t5n(Zy_G)WaxhW1JbS!ZkaPpk74aCE}*ORw~U_ zvs0+6^2pcP!N7PEXfQZ+GqE;%`d33*%()QBk((2M+X=iCmX(<0~BXv_u@-h$< zG%&KB&K&wkNepyuc&d6<+)#~OC1~~6QeHpIsX3Z8!`uWB+QRI=GSCNYOmRRPqnEd~ z0~C2omUM)#V8=1x(r8|0)*2PRs$F*%q$74k|cdC!) zS|F#5MM4}6!pFeP2{&{++s!9|5u%Q$7k${^c~9>k$Gh1p!Hs(r6@D|1nR=Q4ncMi? zOb*Muq&G|uJrIhog}i7!SMfi{?d}-CAxO?gixo>Z6TF*k7ZSVem)h-_zr{nQu}{FI zwF4vSL{3G;o-37(=BrXc`(B*kF;x>&kp{Ob-Kp3v1)2oSU0?9d33#dkUgejGh^;QI z8(6oQ-|BU146s%T(QyUCrFvXV2<3^`rGqrtC2Gh+h0n?{#gEEzF zbqaP;OoQ-NjHKHg*^$(38pKqJSx~QbCUu(yv4_H2HLBT%fCG!wG9cY#Te5iJ;4DhZ zO|PX?maAn6frXHrT|-4eXWu(pood$h+GN#}JrKG>0?Q?9TS6{3QFhyt6u-2HqF!z< zb|gfOAd$Dqt#<1WvJEC332YAXnd*tR5|Z<_H43AcdA8nslJA)L&Go> z6!K7%%iV1n#CDa5q!eGJJ z2@UXP8DIzwnAaQ-mR1He=ZXv!5n!j3z~q;fWZ@mUK9oQ>$pI>#ym()7eO2=Ms-(Fl zfu{?**F(CY(yNkf^B+h`{60BEz7HhV`DnE;Eb`sk1l|BwK0>NklYng^66=+T6vZic zO>%6$mYmC*1jG&Xw`A?xw}k4{lAoj{Kbd@T?QOPXL$u`IBXE|~hE^I`auiOQ`y(xEC4KOiFEpmGfS`R*>W`~Mf`}wI zxa22IwOjhbL_#Wo5&+NbVPGGcFp#v)IR^OvmxcZNKm;T<5CO19br?(#;F?25W`nps z+WS_SAQ45TrIQ*Q$VyX4`@RIS16dK#K=YspVWxaqBxfJ8b10NUIwG?k%?v?u4OT z2;Q>{eASCS>Fsen@{8b|qg^o;T{7{{D60Tj;f8)18H4P0A_7@MWmnNH+UEfzM=oOO z%br%`p}ew^rdmM!c?w-|^E4Gb5@4k*J*_l;w>yxQT>m-Wuef!Re&6-hsnB0~H(F=0 zeEHO_eC$-{uk^KUh`4^L$AI@FkwAzp)V1$|RzaxxX#E}mCb~}x0}3=1s<$)rAVKDM zb`N2wbp=l>@7|fMORF0avm-!(r2LXYtb_I-E15Qb|vs*&Ks5e z8g=J7)b`R{!Q(^`MBF?YCHfQ6BV81mV;C%ILc-@T3N1?=G-1zE%`$?iz(-m?fS}Z0 z0%j$cz;{?NhBc@T%U?*D)0nQ-Bul&f!CJA5HxgLLn$iVW(prgUk~Pkkn$$+$IXZc`2wq-tavizm8i+ZdlBct_f? z`Tx{azywL@Y)_gyRCb7QYr zH2?2IWWB?!_e+WU@M+XHluE|6$nF*nBGX9k9)}tOtrB`ncTigd>$V+~_hn;(Z$JZB z7CK370bC$2A_raWc=p;{BfVcKD)Q{9kDaZIpE-G|BZ>FK$>V2_S0+xKID7icxRY)F zNp~o_#E9c(XcAJ`^Y z0r_A@>3+->yD&&@8+f3!hIji19xkQheC@fcNem}2$YuQw^U-p!O zW1~be$?Q%WeQHEQot`8x1bSVx?pY1^KBYH8wpX;0ueq7QQrVmf`W{h%zhkLDDM}Q4 z1&n?|vC|4JDmX)6VR?#m2v&~L=al-mQdN%ARs@kRQ%VVt$sQykh!oV_g95f0HEW39 zmcHLw;;M zvy5PR6)Fgjh-DZi1smzd72tZA#5zcC;;MRaNr7h16h?GqkOwUKE19Ey3P+J5SGzQ0 zBEZrq?$d8zcggdjxlx^-7tv{rnrDZp*%Kp|Te{sgj9y_FwpgsMLuxm{{7OA`A@beo zgUl{ed!PEC@k`!$%Y|YTF&RzQ6!mFw?{?EQ?>%FVnm&2|E!wU&dDJCo!kK%t7EI`l zJ=oDd{8$@9?(D*qVeK!lH+}3<6F~#^y&IiT?W zj~E&5 z{dV&y`Pl30lO`R0iImjn&4~QN$^0K+rnEOIoK ziigSO0-jMKcSSi`?67oR6xOcSi+7lOgLNovT@;6*3zrQ`7y8svO}|##U9Q-NBWa=3 z9v+c)5UXoKg7kud0|YLp)}Fg&p*;PllGN}QuwPmy5V;SXU=g=PCp}G4Do+UKJlU){ zr-hrvIXo~L>7;T=0M1NX~vpJ`X_5Qk(HPX45!$^9978X}5gj=)e zqv!ej9}w9%Nuv{tblVVg-h(K<8i9L@e_Qx}6MrSBuR%modBu2Y{VURG4GnQUHNtS@X7m0-+C$tOk`YRRdN;K)Gm4)B!+Wl;{ z?i(Pj5Kd@_q$eZ;=x|ti_w?kOw;m?!_v$yJ(Jw79a(c$6<5)|&Q~!{`dn_au85pg6 zm{JM3#wXS-17ZeAu?8KaKp6TL2sSs!7_{PL4T{K%1lGL+_msxH7@h7>yY3_~DXvsl zOu#Kb(;U75#}pe?@Vo+x;F45(UIMA6IaDyyowgq56=Vt)6XQ@_ByQLjP{4zDSQFzhi+qt|NG;Mw9P4;rJ9uz(Y*y+M~4%`W!17rt03HXQS0sDqv zv_KHf2ka8_@~{dC=L6W~fZY*rK_KUPxd=$9$bOcfOw-EKjTszdz0S=dWCJgK92yV5 zbo}h|mDA(Tp23TJ?{U<4w9X{{$#NnyLl*SWTD;eRM==UJ(hp5_aH?@ z%Ca)qHNu~4Z1M2o!ptL;X_g~L_TqIQzdbg;>^=C}{_6fG_aEJVJ#yyl%Erd_9zKkJ zUye$g}h6^-bA2l*`iL;R6g!=mufmBo$HHm<8M1mp{fkyF zDw-!E7>Mb0GNoX#)2gFNA5T9^Xh9;JVT76W#-s+qJk)Wv9GTH}$H=dW;V}oyaPbTy zm6GLUoeE?PM^0(9`tbR0@+$q$6-YBr{|12p+`(-?xwhv$w9Go-a?$1hv&UP(7C$J874UF*_ti2zvTZsicTUCj%cjkOF5t^GHO^)QWDNJa|? ziI?0DAUb^G(vR@AZz1p7^vLga`H(HL*VJf@Aqutr(~qP8aRHtTe9PCv4L|9r4}av; z#MxeR!Z6U7UrCD!$kYzE*ZLZ!VG*Iz?*zY0wiKZcFav^NJIWWrS)f4p*PCK+wOpO+ z2dG}gM(YP;Ll6iQR0ulq681O*Olbhd!&cM9h14>_r+AZolY%a~^nsTE+E}WF0)L>W zVlAhMKM^BwB}3$9T-Vr$UnU^b8br^{gj;)vrK&tmKT3q*nUfS1!&T}VA>Qngu4>W* z@eqLn#TuRB!2SZ{T_2;p;jlt;b@OMaquI2Y5okR;WOZ--9;bQ z^c17JJ6s2-<(0%Uruv559-4rA0o-Yd+J=%Hf#mn@qQVJ}Z%z~Gj;1yT*~5puq7n4U z^YJab@{li7TiEgiH@E?q>ZSh$59zlmu$G~T2`%Fb#4IV#%~(%xyk1|?EUC;-YnCLY zB+Sl6TkP*e3D}KoewgQt%$uE2G+RPD<QUhiqnt?&ky856=B?tic70fm<)UY0At} zYy)5lm|+rjSvO!x`qnm0|DFy}SFJU{?*sB3O4AthNy8o~4Qh2^%HPjF1P_ z-|Z43OXcF*a)iraJM77_DQ}4-&2^NopGWF5MAUsl_}h<^Kn(bj;~axzyYCwb;5=&X zvf9QOs}k5hAi;n&3>D)6B_kvQ{8}K`HvdfWNe?jg8xagv62ydr__1V=JxugivnAKW z4$D(xd#9WAdZWdfF>AkGT`ODRcXafr;9TlddaGFwsG9EgY{=nB>@Ng0@!1y@`(6dw zR**iX;M*0PRv-?%;>nSp@#i!-R#S3ge~L`5(t9#_`i*)Nkfh(Cz;N{4idjH66?ISl zJEi?Sf?mrUyA4r81ety2Nv5U3)oWIl?pTAsj3~W%?S@U8*O`q>|eThzyNbyh?(vyEM+{H5H~`7m>f72T&LY zm3SD!AdjYph=)|8R~8Hvag~Z7iAQE6!pIC^jLb;l5kUrz2m*UVaJh;IF2NBg>|OK( z5Y|4D983*yc6-u{%KFr-dtKI#&6X2Jw$S`oGFn3niBntHOj^D3C)RC;cqJf@6{od4 zAyzK3)v0b_w3cO2x*&#!ylhXpi!z#+gz(lWMvWpyyHt7pnTvFJ*o=CP6>enu1LRBp z0YML#ZUc@4wcjN;dJhrtR{r8fnE#b(R>VslMU!uR)SdNN9+>sEJnM?d&*#&RGF~vr z$SL=dBOVyu$Qn69lVIu*TXKh$Rbk*{C~)xgqG``TRn>?53nirg8nN^rDfm$ZKcwJ) zRPe(Jgm3Am2*Tv9cBidw8j;(j-|3I>?GF?T@jFd zKc#%9Dph5xOWU?@UT@GgfdV6IB>RuB>luF8n*=$1Vz7Kl3Q2G1oDm3#z5W%l!vK;6 zMS)mB&7dg6(eoizUK&s$L?!kXKvZIHfgL%e+mj8t5*rI_3s8ROiVq@Ts{!P0GY#nx zQ`-7$x3QWjH&#?28p{X7bB(1tsJ*ds>^89UCn)qMidkD-stxg6{0v#2Ct*6MAngs@ z8W8Ib)XP&W3@8O?H!&?p5c=)vn5GKW%f(Aaz-u!TD$rdlo>THIfgR>mTfCH=X+9c9@ zi~`p+CiH@GZ1}R1424v3!X4yVhFNx0=o|^w8IVx=sHonhmLfz-dy{k<^D{^RU)KDD z>}#qiIv{>5J!N1`=}u(2uDU7Y^Su2zKCC~fMk!;6>=JEO)W%H|@GAujC4JO<6)*I2 zgW5!vrZv5gqcVIlo#;(g%YN0M%rC8Yn9Z+}xA6DrEuye_(=VO-14U791qbXcj*y5*i^gT;v+ zSfD)yKuB}5*FEe_@F8CA)n5oT&k_l(Bj0;$9#>0#=azmUC)pTfA=40O=<<}7V}HnN zAFPmc^}FvjOrhKDK_Gx?QzGWuJz9+>8y`ct?MSIb=SYD?0LAFsI3+^P$Z5AIhCX-J z@_KBW#;_pD;%o(Wz=|!A^#6}jofUOAkRr&7zZYkYc+JhLgg{8f1 z{<{(6k#$4i9rg^{9>^rx&?T+UQPk4=a;p?Hz-Y9ugcV9Ofe@Gtx{9Y6N%1UqZ78Z9 z9KyR5$B!0}j8wT%KxdpUXT>rtl?3x*&&p-}Nuaj|2;Gv*zqeFE1By37Rs0p51}Hl> z&QyHbUMRj6YDY2HvUq{@5uuCJqCzSNUq-#b%_H8h@F$;Rn`J=p`&0&&8$7UgM9H)h zvqQ9Vejivs!)Tw|40_Nf9Eb6{6!F}qZU)U1g$flQ!~z|Rk{u&)^b;?C;)D0!_h9+r z!ykP4_@VRFL$4k=^!`H^Uq0OT@Y<1s?|ba}g~NG3-v=IM_xX9==~R8Kl<{KqmNuX(0zWHrcP!cMJ*2tbSwVj;k8G4~)wG50DhSC&*@FwI|3%!B6vP;DVM zwG>+^x3saKP{ifUvW-R*>$Hr+j#7<*@hXB^cY)$Y?15sp*7Savtl^!f4_892 z?EctO^3=+mYNg6eqJ4^X=itYA=s-3Q`=JyO=~Ee&-pmCSE!ZV6vMj*{FG>aJc|QnB z44!KppnU*A5dIoPMTAMD^YA^qr^uT7C~2vJr;Xl3mwysD+2YWjbN*rG{^7uT$Ww03 zM~(^)Dr&OXrw|@Dt264_*#$h}|1l9O3C26?3|SwTnA;fn%!`a||C2tMRAAKnQN@0W z;N29tK1F%EnS(-008u~{z~@fKc7ZVKM;dg?b4*6Z&We0Z1oRz$$`hUA?Ca z>7$fin3em0P__2@eH&d?3l36zK^Ih$(z-4C01r2`47w~C-&za}mG}y>Niw%wA4@I8 zaT;o2ZdM|eA6p@rHeCNdPpl)rm|tvn8kM=3#jFnwC8Ms`cJGri4y%uADK0@o+ky%n zOtEW}346W3tv8&v3r4?ADG#eYVVcg*=vudQ;Ao9R|IrXX!!P@93Azv?gO-n|faASc zSlr(XYgU-G(01O*!5Ok_g&nK!$PA^R4TWWk&0`#&K?;Xu#PJy%mJ!Ei(2_VlgTpf7 z_>3JggGrLfUPF`>Ca6<(7Rk{f&WW%wPbQtdN7R+xlRk?ld9H9$ENX|2;HuwvM8(0f zPxh>GP~Fw?Vu$nhID*UD`+FzQ>Bw1~K<9R-yywrp_`*Ss;L{ngWjtwg7A+@5hV91( zcx67S78607dC@!O@@>z(&>|h@T5$ZT&t;VdX{cc&E>psa=R#L1o~@E~o0@-AC}u^b zP|J9Vv&4u*iUueSA9GC3L*Z)V0`JeyHH*_1>39tB{pBk!@8=xVnFh`j`!9}psupHO zUYi@MPU;N2gITq@Fm@2lv9WOJ+SoyMf{z_!GkWXt2ROK(T2W`OG{$o8q5ElqMqzAk zQRdTpP%B)A?!QG-p5T-2HI$ zsqzU+Yl~Pz()#3n8>47JWt$S?LNUTlTfWTTXKkIqa5XyLs%h3 zJzm*OW*U(f({b31o&L&D(ta-+o*$90FZsjE(|h8J!fg)61`8`#3bFVdn?J{~fzms? zOtc5>5^kE;fdYf60^=Zcgx>?!4eHQtXWrpY%u9dF6Q*rh4f)412}j+_k6421cq)EQ zR|xne_GJurV#~FX4#E%jTNKj(hik*%BG$LB@seJgR`59jFKtv~a%9T(^Ci1JIJ&r! ziL!j+U=Z%Kg zUumK&zs!SI`I%3Km~ak1eug!sh9PDUcWQ{`-j8`pwq5?SomMb_b;x!nX6)XM7lO4R z28A?yQ}Xfms9Ow=gA4K%fHHk6?^}p}76rR|7u5|FOniSeY2~76z$jl z?!$YD+yGfxM^bM82hpo3$X}Aj2Cyw@kPF_bA{maGE6H_qDx{Q5J8QsV0E#tQ$xZgQGhY@+u!EdXlEDjz8U&Tz4(Lz0b}}G3cjE~ z$hIQb+)4p`+ft%6*VJXfQi7r1v!zZe!JR%v&+3%y)DAyv-~i{T;T=@EX% zB9>Xi-_zsE1bs~0B;_mh;;jHS{nvW?Bl?VA1n*qb>f8Xj(crJrlx(MBzI%*=rXwbzHw6$8Pk{tDQ*aWXEpeWW zG%rty-dOWuHlaexsEj12kY$Yl)}pB&ERI z2)dy_e3u5SV3T*=f^JOph6E*%3c0(RJ{7I~E!I_qCXybbIJi!wIy0v^wj7uG}Nrz&3WrUd;*ThyG$%V90Ydb!Ba zd$mR7`|EB~wvu!m*C~7wdev=HK2kR6%dU>8RM6%++g%I*SC74oQ=d+aKw0pFPW6JK8O4w4?dcb*%~7AfM#kJ&C`QM!U?N)JLbd1nO=xfhkI2-XOA8^60bPxrC|%}dwsf%O{IM4 z^K7~gD%6%=?~5O&?$~Uv?sE)ZoZfbU2Y)wPT}r=) zhwzG#XcPNTtOP?fZhcb7MZNex75u4!|4YIDqu_fLd|JVu5p;*a11bAfOw1+D1#h`} z25aR<*leNTKE|ZV7QRn}@gy&FfX&_feW3IJyHj;k%}%^G_n^()MQj@$D>}4BM(|<& zZsh$&Qa6_#ES({|v$SboBl~B>jr-hLzEO{&uCedvw-x&x1;4A{_Z0j~1;4N0Un%%E z3jRRB|E}N<75rNTf281#75qB|cQ8sl0n@Q}ZZ=4NgQ6bO2s}V!^}VYHICx{@x;1#Z ztitPMkiTpBe@K^q@ONn4I>Vc;Df3c}09Jrz-tibMg2Mvjun)`zkO+`K5txGQ2M9G} zAbn03uV5e$oq<>&+lzt?B};#x4DzvNi6v15D%gDRdwC4?1zE&YJG`J^y>h4RC>v^gJR7PXDw&w7X-wZ23^=@Z7f zOh>)=#=GL8*%2^x^583rvvXtnHQ@UX&W*i%@jxu@9xtvD>0W}?;l|7GcF+wTy~}Hn zMLN1P#Mfi?-Sc|5d^*+Pj7}D179`XQw_IH~z&coY(;H3HpfKg=?;;O>9H*0beP+GD)9SV7&bn#RTI$ z!e@ds*PcrsQnCr)M~RsNPxy#^9sAW=BQnltC{6YJR4?xQ>a^?a*s=UR7538#R;<3O zfd0Y$6=C=zBqkg0LhxG)4b$~q8~wjL4s|Hk9#gf=gj=9z+SjseV5rpfcbkYy&T1+} ze>7~*@ax|@e3QQ$c=;xNMK%~J0uqMn(rS4TX;f=8%}a@E`CseL*#}8MIFwPqCxeJU z42ALW4fdHrTaFD;?f~?I2xekrOCqa@aM0Zl0^lN8RWTPURh-_9wUu{W_ zL3fs(G|>S26P#KPCKnKPOmyJ>)UQn*SbRWi(GXjPAYa%vOY>KuASB>=ic}d9$VNoi zQpln(uY4nfhyY}P0x&co=RhN&E4Wt03DuHwc!2~%uMxK(L+70o&wKEg=g_~h3?6N;baniGccy9kr4~sh2B_AVJZ#h^$NIFP36!9-pj9=H{Vbl;=B-qNbgB z%Q!weT4obFgsXkLTMlEuS@2z=pz?)b|uZ-%EM*q z^k!##ES6BeGan1JYlqJr(91pkWS0h0FYfG$wLDM+FzJuwHhDLYG#;ztYlwdM+^J_K zPM=oAQzosEX>m$s0N>|16uT zVc*Z6J^NDS#F;Z6I(@47K`L^dm#c>+wbS6?2Qn$14{~z(NH^_(UDP?CCjEG2;%s_) z{5fARvhT>Fk1U~)F<}2mQO<+hulxZ%-j~gYo!|7QE?%$lU_A;{1MhX25>4S!4y{&N}cdL(UsMJQwceg|SxX0#dxaE91 zaW8#ZEvbc6PaVoL3r6zC!EK0xgM2$gkbQ+pfk6zx3VK`q6Y%>u zun!Jg=daFk+*c|i7)SgbE^WaxLCnHs^ZyBc*`E+dtTT}Z4L7v^1>~q8`Exn~HeOlQ zYkw)|4?ZKbO1M9i%(1tQ*?^LgCJ!G{p?wiq>#dgBvRpjx5#LZAt_s~9Wk8&IZwHcN zA|9fEZ2d;y>%I!=jddD&*QKBASYSs&o;x<}}SH!m3hcd3fZ5-sF(nBUQ2g|dI8CS5$cc-bXN(Z?N zodg>w$Byu{&?p`ZrKgtWIGiH$0jOuE7Y~+?zMosIukha!N6SZ^c=ElEJbC0u`MDR* z8s=YGs7}pR?Ltx1=(YL3koLu@{|P|l?OPXlPb%+P2C>^XXlvYwR3L9oR8t{DI!gX! zxUTDr(}Sd@M-&`Y@LmOv5-h{noOt*cE2(%z`FVQGq9sIEaK<mmlY`x-??tbps;a4r03pAF$A;ZHgAeB$4T7 z92IvAK}_p0pboY&kdg~x;MQQ=wS6`R88OhhgoZ4dA<2M-U@F?v5UzF{L(J7EP-)QX zW74ExaTs6S3KQmXar<=UBv+(qQbS$4qPmE~47*eXGPXq8= zvvwHp(?N`6PQlsdbuijT1ud+R5%x`fAA=TJLw=tRUO)e>heBXjh1K!)Vv?W(GT7$H$L zHfTT4t%kFy-8Jt)p^>}t=k5UQR^iIShMKN)r~$tPtdXiwX2K*;^@Cw$-;yCQM5i)u z4UShY8E!DyJ^IKD6YW1k$;cie=?hF|NT7nPW+u_-MNP0M)@+p(M$WeONo=M$P6lmf zC4ZV$pPBH5&*>R`q%!KLkXam1W>Ti6I(NTx(I-}>PpAp+S1?|bah21s10iZNZ4MJq ztFvoy>l;@ocC>(ky#P#a#)VOP{6657F+dOiA*$*nxLTTt>YfLUy=x6rn|D%iXV2cgSp#CfW7` zzwCzzggQRYLU{7oWa(?;STx*H0o{Vw0sSX0K3e!9qr(QI$sH*&TKWjWD1tY@?Vjv> zbASub;>t>%p;kIpQU~Xn9tDJn>O-k*GBq5~2bMG>@l?8ifX^U8Z|XWe>7ju@UxWMz^I17+ynY1=T~{1_DvE8WniP&Fn8Km zuP1$cLLcuW0MGrTCrDTQy1G z6+H*YbZ{l@!2GK)Rh#;x@-a10_~ivXI+D$SUX7Ks(oCMaiLr`TDp%B6O-M3$BYdgZ z>4KW0*S+92#zhBEFQ}#=N?KjoFz7Z2zH|{qP37wkxdN*0C(?x~K@uRvPE>PRqEDS)eA3Y z0kjm-Lyt_Vb>4lQDtm7j9lH%!&M4(oRVvD?jn!jIWrL-av%ye&jSf(7F~ z({zXr{v!kJPpj90*5vI#8`bzmy0#puS3dUw>Cf~vNYh;WP7u!|FbbGWXaVE4mSO#{ zM*yCi(&UiB2_t4gu%ck|%y2;`EUZlO+((lIw=4Ipl;{_i5K2h?YIViD9&zQ40nfZZ zKtFd!7#iXm>cY}Uj;C)V2>EwRwCffvW3Pbr%y;4$0+&``iX5f4*leCxHuO9C#yIY0W-#W(*QiCd~}@T zDW8a-vk-{m!^9(}AQ0as@k(Z$>;i;b^e699xmrFq@!V;ax81{hO@1L?w(if^B z=8bjr$wsxaxX>s+ck1lH@=IqX&U$%V5ifJkau{*bYx`IWrrY(bIP4%}?O)3)ao|C2 z11t_dxYDdQs8xV*Xr_5Nj!T$0H8H_OwdFIHUcs-iJkn^g>b_8Jx9kESD}W3HjoEU0 zq1Tsx5W=yaz{M{qY_;eJtGk#Sgq*6s7Pi+ouhH-xST72PiU3iAEx?p9d? zHzwdc+&5Muc~J+;%SEvR{>A~HG1lFq9NO4qrph`gF>cf?hucK2j>ARkD6v(qF4Ut< z8kzFQ2_}%#vSeAtp^^1fG|`@Il$GHM`?$;0*jI^N7K(zAkTov4u8i9&8c&vcjdd>% zPn<|kzr-cL$6q|v*RJj@F@0(IRTGtuq^Em@xFNOnET@<<>fX*#9zoM<>vW6$n)@0b z6+iot7ha&O7s`{1Gc!6IgF&~$NKD`e*SpR=IXXJcO2Q~m%w+eq#UHDY@;!)y6c zgDM;4r=3|I9IdIoO2w6zL5PQ`FK-vJ%Pe73f#jE-f63r^xYyfgImn=rI=I7R!VFJB zU*n7?-3)%xH1*}khq717Y-3@nAqN>1r%CUkSUy;%UpO_<%g&{47?K%q<3(S=d|r9s zG-wJW9#$E>r(*iLub)+!@jmbvubM74l&@g4mm=R+c)f9HacblMWkVC_I;W-RfRnN; zf@(VyAZzpn!(Sfnp*b$gUQaH!jp8>AYe4~owMABA8XiA5@hI7d0jBGUJl1(T*ZK-M zUZ9yF&t6F39@L=0p)|QgeH|*&i$#jQw&DzgU6MPLyn1n~Z@L7o+`sfIFCu-IzrEFm z^r^GR=s`xpfhoRlx8s$FVtM}~tbv{R(Eb}6ZAF$@pdv>LFR4q5lau{tu!t5lJ96L3 zL>!qcY_1Dh+|MVVM9kq2>1lwy;O1s zsjqi^%y=)}9-Pl`(9Yr3S@HXl7Ok;44>u23a3hQ;p$aqI70$z6gvnx?y?mgHuVuU9MdRV<%bB>#s>;}^j@Z<%Mg zQUQN~*V#(t7b(AJqP3=r$5L@1_=FTkTWhSFG^ljjJ~}c}k7@DG9- zai`Qctop_B0*8~Rty)Xi-={3#Q05$D)%mIT!=mL+6z3pgc_>UKDm-7nyvjx9hKOG! zE&Vb6GbHJ-R*cO@vA3afrg11sCHHh=2Yd%6GU ztm9P!oA8srnLf(h1(O7DQFKyW$tj7V?+#@%hRA_x;SYLKe=~^QM}^BMN1$ft>^IOl zL#q0meigyHP4H4t(LYpM1(I^La%^lf(THoDe?1BAoQer%T+ok8a5PQrJ zYqwPZ>PCo#yy!d~T;o~UWI3Kq%wd6)4j1EIuh987rZS|c{uu4AU zdg^WSuP2|x-wL~=meR?RU)Ly`Mlx(0%D(JLj@1deq|~$vv~lT}I@jYHHc(34&~gHb zl&mm_hUm8GU(?8cN`clO4a}mxD}vw)l=R0M^BqKdC)q#&!*_99@sZMvH#w1)o14`L z<{?QxsX)+RTu2#+#PeucY>R8Jd5*nvMwq@zp+B!S%DRvnP6pV2F|c6+_RhhYz(qob z2GUS+7l10`F*Xtw4r!BIHf%7lvCWPY+8V*^V#>!zMT(DdKma0l`$urkVZN8Y-ibg1 z6fB+c3%-!C>v4k_yC(48Sz~t~ACl#B{c+T=69+GF2nN7*Qg&&+;omvrDEUttb}+a2 zMmCP_fM&549*5<#$!}>~cagIm?%K*FcKiV#?CVlK_EO-J!qyR;SpM^|Lv4fIseM(8 zI*!?94?6(y_13;N_5uDQxaua6A6^onq$r%n;_UM%iTr%EN8Z=$5bM>Dr^jACHr2@$ zyV!uX>t2#|Pr!QDC2J-v*-R5QB`u18=@FZT=kTH3&4<{fHh=+%{cuG~25w zCtfc!V+)JF-gBp3mO#zE^x`W~D&C&+(J18DE@vnlrR7J%L7nnCENS?8o){6V$2#$e zGvjAZjiZ>J8h`HW^R^1g!f`k*p%Q~Ha-9A6OQ*u!c^#=;Tay=2`o&e@x=F7+l=}#P zneWD76Ss}SMC77Ue0h=`CvEP(MahL$0lk7{>C^HLF)g`plVBXje*7RAgSkltyxeHa zRW8j`TbJ`2;oA3ma(B#!WZ_&H+sm!rOnU0@ZNB-l77thl-?B!o!p8LluPE;-f`v)$v5y@jwyJ(gFVxTYW9 z&?vl?*}z}hKwxUfpiFV;t=^tIe)hQE;;qrhEY*f1^PI{aB$&;n{6Dwmc=w>jvm(ts z{TjyEO_o%LLQ?UiWuN1l5q`HVwQD6nV^opXX+_qX|Ce_7ne4k;R!Q*aWS8H<;$+8YcvzO6p;CvS-)hgU9B7B(d9Byti8idwJ0ZKxL3U4jEjV z>~T}PH3U+53|bYWNDXAWE%~=3P5k7do9LzPkx(3O0cC;$L}Z5uUGL*N{P9kaHD%i+ z8@D3tyNHz7X+Z^a-QLRW3(*^BsWQgJ;$f97QR zSze4hqI6NMbe_O;DhydcalcJ(zFlv`Q$$K-Xx6cX>38Ur=wteM0#h>|{GEPYFTB_8 zZ!6aI$M)`=+@zFm9Lds0l;z7RK$1|`mS{^ESA}Wpx`|V-#@*4&v*t!ZOIyp|2v9KlJ1eKnAoS^ ztUig=*h4MV`dJ(c`b|ZBg@xJE*tIZQgzg!XJ>5xRP9^!-myr))%6yBRf zsmHnTcO^W*Hm3WiAp0l<7FS5#!NTgD-2HJ6oS+QtzmJR1?)Dy%&BPFF;T0R<5Ak<9 zIXA)?wv+x4wg#(LK$9D1N@ccAw;aYi!xklE(@ zLy!dRjmxv*%L!$>W!8dnP=>dT^figwtlT7oXsW5kFVPSBPQ<)W3br37IK?w+tTWDvB>_q;?F`BP7v zN%=1#)8 zVM|vEZS}SlkGRN`RTciv?xuwd3>dexS)NgW9cZ5nkm4n2qM)|owniemDUM44>Bxb^ zha6{EiQ6;+Vk>T2UEno?uKckx!rEPaooQl6j_ljZdR23Zb1`eE6paOrMfcrk$2tofSU=55+zdwx@cNOPGVaTc zjdrFv#h$FgS=kloqxw^RQ(qR1OafB!YZ>jSW0%OxZ+JM=sCV2q^I>eGnIjpCV4)a( zoJxGcv(s6tTIktYoph;PzZSaar969Vy+N zY+z&MCNN>R^dbI7(YRqvL|VR}mVZE+0i=IfMETS2R%4|E_c;Q7PLKR?jk2Pwo&x3t9anT~?d z9=twUq+Y}{$n|U`{qZC>YSZn{+|Z}B6f9%N34Yl>WhA3dbC}N*!%X{yQfcYqPBy0o z(NA7{emV8;ZX!9Dl&+z$K~xY@AUk9(otvM**Ap=VUr+2u{2`(Av96VtTG&1CMN1W^ zYY-nO9)u1t0J;(a4fIWt##h5!&@fG5U@i!S?AU_dA-9OS@eQZz1{Lz|Efhv|VvELJ z!!Pm_jS|t?s^$fc%GWtDg9TCL5CiF}sGnG$Jc)d+qIfZ!Z>jZD7~Ztqt58YV{!hz& zCoHQh?9(FO&ZN0Vm8lIDN&Ln@6U6#X#!0m!$`#6EW~R^fNmTrT>je6Jo_~ zS?eNSRN6fX{)vJQDfk`*rxi&1OaHC{tw{DAPui6YJV39a99oWeRfFSE%C)R_31@|y zg~IpM!rMnk(0NXrWnu|J8!vTU({D>* zrCM+t&@9$vO;LZDoF2qVMSd2Q%Dc0gmFi;V@9YsEYR30qkf8XTAf6po>%xix8KIqm zY1v9F2+2?uxQIMb?4l8zjQecbM~@sWzsR;e9G)7iy|m!qGuP~*@aU08xQ%Bq2c{R= zHQyx^Jj0VMK~gkvVckE`4}@xr*w7-UqFhZq>t5V`o^=}gnfQEqiq~Ixu2-R{-4>KEb^KB{8_W(n1We= z=L7bLlb+#IyWh&-Zzg`J*+R!~0R=TYtD`dTqB_*2l^WuG^;?k406kMH4ZJ0gK3Tv! zQZ;CkG~C2SZnDkliqu0N)ZwYBx39Kj^8TXcOFlu#`i3K#L~BeK(qB{T*A@IGK@S3N6AaU9 zl=4|x<5L1wKe2l4&WG3Czu|pcd0683w@un+v2KqpLfkN9vzR<{<>dT4?vgW&g_;II ze<&tAvLr<}aI%8%yptoL0NpqF3K=E5wlPVEUzU$k(yL*)T?oQzfU`VLU6{9;qBv4>iP+OKA|>8ewn+1h?#hp6}d09 z89b0X75rjglG(e%qFiuZV!m+pkJVB&ED2u*5i=<@Zs*@7!YqhL0Toc5P?aHDHeDe* zLdm4rDkc+%9M61l)zUFhs*@KV^Xb3n#Nh_i(}hiJMg`C6JWKZY92 zQ8Bt)nwpTl`5dE4E(j_umvV{eBt8jn<2Fu}&2v4FrhNIj*&(f)EhB|a5J>hs`&5c; z*`^v9`byXH-5a6o6JfaVyO4$atgMA-B+QSk8XD7p(=bE-5^vIN1U8)1)B-%`II(l3 z%8v!QpVBmn6X>SQ_n?BVVa-mL(Q2(ur-qov3hy+*p4{U^uAu-hiu~(x)^n`~y?Kq< z5;EG*BISmqa$R$-#qH;w?`>?SLj_U_Y_3XJ3>%ax%Gw;t-bsIosEN7`8)z?f`s5IO zpGtaI5zcAY|G9=>EhTAV+YS~nO>R`a5Yb(JnuxqEy70`|7#Ms3PLf!f)L4WVM(5F{ z>_VYeoU~C094c(wl9T&dK}OgttCs2VWAcdFn7k+(`UYq~ipVr|-zq;iar_4Ak%7nf|K+l7i$8)OY5& zd_Q+&+||n%sYTx1d0w5WxF?U7h~G(^ll%raZ~2(~jiAip!nR$8s40WyJz*4B8gmn9 ztzB-4lNY(G4?`^f$cdKDYfKU}m44ov)XVDXu4D5TO6S!6ZF*(GP6IguF-*HV%v#na zOZ()Abn@aoxd1mx+#E8?a3zaJ&VQ(a2HUS@n8%q5Q?@&+#8<&b=ThE-dy za%?8!jSD4$o}P1!*|Z-U3k&Uq%+>)v+qb5}HhWGd(%MTeF~6(U3W-w}7F(4zJBiZo z5?Xkv9XO8-;trIkJlvR)AQz zu}@6ztQ>r2p!}auEvEb(j7Qd_f>TpPNg}9S1!?53=~Yt(q0bl(~*3#bm)J@ z6z=A))~~i>2id^!ed`D0jw3sX&b{7kcCXW|P4#JRkLn9Pg*@hYCg@$Y*{ch|i`IiY z?-Ezi?AO~`PG3t83)xa_`m1f1AcuBo4Su-SusDRLr~duE=K5bLu$|2CW0(>Ur5dJm zgMy73FiPwTZbMfPhx(FcUv@kEMh8*aHgJmfDtt%pXP>+{Tbx<48QC_ zf<~dY#WtGYa&NK;#uECQyd9DfMomff&9uC{ywKrt{>Nw1h;CK1V+qD__RnJft9pBOnq6MSeqHT`^`X}u7&nCmaN4$y;4WXSQapQ~%51`7f0g!NvC&qC zbN4rIhV5OxTwGbyy58;NcK&12Y5%?}<XUI6w%XjBELXfL zT&a}D#yD`hq5>+F{jpJ2S@g#w{pP7udn+-yb8`oJrLy&mktk-uJKER=r(MNrBCUh@ zH94lT%#gG+_~I5f%|*BA8c5~Jx76lyBc98(&C<&c7SkbEh*?pq&1Pz%9{LGXPY7H; zKp-IwHPoUxQVH57YX(SVICtfKAMzaZ;zk95!ZJmLg%eRaFboC7+TFh-Zc^W~5!mr1 z6&jjpn70+6n*JWiJ!LL3fILZa&SHdcAl*VjWaLEyP_w#{{xS5B5UTXbyYGF4NMPRc7gupF1D4^dXaqEajzG3AN z+Yi!s_)@@7Siw_0LlV*1KE(+){Pza4rmxg9d~id|KZiTj5bKQU7XG&GmPQSKSHe5= zkt{wvYl3`4#?!M5F7iq~_?Dbw;ZDQfCwn*Q7Rd#^A~?`XHnQxir(2oXben=6cFGoL z=`=;pPtrfu{0Y|NLq1uzV0Zl4%IR^O|Lhob=ER3|2KTAsFZ!AFwz)=QL6-9Lr})fb zCju_4OelM5{LI-2K8f=q$5aE56&qkCYg0{A9a&!k)zUBPrO+CZnhFqeqZ8z@qFwp2 zUP^HLP~+OAHs>6Gid4q=)h?*9RO7;%X-X8X6eUifeShM18wjXD42*1-NxOo?1q`^yic!{A(a` z%p5LuRcIfRSF8i_pHTCEQKbsO0^c4|j8%ms{it4iUcsO7Xq;P`ojJ@o%xRfaC)8f@ z>A!J)sxa}ioZC95q=8#$t92L3Wl2lPk)$4e5Bm4((R1+Yiv5NHPs9Ob_6p7`is^v0 zIMv5KyPl^1RcRIlcBofkamLN?AokR0ID6RP*gHoNGx=i(QHwZ5y+RAKCka*$JW%=> zU|$zQZY};_wf({EKe>Hu`+eJ|cdpy{h0PD`tnS>jeeKTSotwA+S#osG>3i?oefR$d D`}biR literal 0 HcmV?d00001 diff --git a/ajaxterm/config b/ajaxterm/config new file mode 100644 index 000000000..6091b45d2 --- /dev/null +++ b/ajaxterm/config @@ -0,0 +1 @@ +timeout=120 diff --git a/ajaxterm/config.info b/ajaxterm/config.info new file mode 100644 index 000000000..7472cef64 --- /dev/null +++ b/ajaxterm/config.info @@ -0,0 +1 @@ +timeout=Idle timeout before closing connection,0,5,,seconds diff --git a/ajaxterm/index.cgi b/ajaxterm/index.cgi index ee7d27ff9..11b5eac46 100755 --- a/ajaxterm/index.cgi +++ b/ajaxterm/index.cgi @@ -10,7 +10,8 @@ use Socket; &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1); # Check for python -if (!&has_command("python")) { +$python = &has_command("python"); +if (!$python) { &ui_print_endpage(&text('index_epython', "python")); } @@ -28,14 +29,24 @@ while(1) { close(TEST); # Run the Ajaxterm webserver -system("cd $module_root_directory/ajaxterm ; python ajaxterm.py --port $port --log >/tmp/ajaxterm.out 2>&1 /dev/null"); + #untie(*STDERR); open(STDERR, ">/dev/null"); + untie(*STDOUT); open(STDOUT, ">/tmp/ajaxterm.out"); + untie(*STDERR); open(STDERR, ">/tmp/ajaxterm.out"); + exec($python, "ajaxterm.py", "--port", $port, "--log"); + exit(1); + } # Wait for it to come up $try = 0; while(1) { my $err; &open_socket("localhost", $port, TEST2, \$err); - last if ($err); + last if (!$err); $try++; if ($try > 30) { &error(&text('index_estart', 30, $port)); @@ -45,8 +56,34 @@ while(1) { close(TEST2); # Show the iframe +print "
\n"; print "\n"; + "width=580 height=420 frameborder=0>
\n"; +print "\n"; +print "
\n"; + +# Fork process that checks for inactivity +if (!fork()) { + untie(*STDIN); close(STDIN); + untie(*STDOUT); close(STDOUT); + untie(*STDERR); close(STDERR); + $statfile = "$ENV{'WEBMIN_VAR'}/$module_name/$port"; + while(1) { + my @st = stat($statfile); + if (@st && time() - $st[9] > $config{'timeout'}) { + # No activity + last; + } + if (!kill(0, $pid)) { + # Dead + last; + } + sleep(10); + } + unlink($statfile); + kill('KILL', $pid); + exit(0); + } &ui_print_footer("/", $text{'index'}); diff --git a/ajaxterm/lang/en b/ajaxterm/lang/en new file mode 100644 index 000000000..472a76d22 --- /dev/null +++ b/ajaxterm/lang/en @@ -0,0 +1,4 @@ +index_title=Text Login +index_epython=Ajaxterm requires Python to run, but the $1 command was not found on your system. +index_estart=Ajaxterm did not start accepting connections on port $2 after $1 seconds. +index_popup=Open in separate window .. diff --git a/ajaxterm/module.info b/ajaxterm/module.info index cc40db91b..41be6f85c 100644 --- a/ajaxterm/module.info +++ b/ajaxterm/module.info @@ -1,2 +1,2 @@ -desc=AJAX Login +desc=Text Login name=ajaxterm diff --git a/ajaxterm/proxy.cgi b/ajaxterm/proxy.cgi index 89c47e7db..02377a35a 100755 --- a/ajaxterm/proxy.cgi +++ b/ajaxterm/proxy.cgi @@ -45,3 +45,11 @@ while($buf = &read_http_connection($con, 1024)) { } &close_http_connection($con); +# Touch status file to indicate it is still running +$statusdir = $ENV{'WEBMIN_VAR'}."/".$module_name; +if (!-d $statusdir) { + &make_dir($statusdir, 0700); + } +&open_tempfile(TOUCH, ">$statusdir/$port", 0, 1); +&close_tempfile(TOUCH); +