From 256de48f601e9b89f13f79f1a2119141c12c4bbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Mon, 13 May 2013 16:30:13 +0000 Subject: [PATCH 01/23] Location of Windows folder was Harcoded previously. Now it is fixed (thanks to Virginio) --- rdptransport/java/src/es/virtualcable/rdp/WindowsApplet.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rdptransport/java/src/es/virtualcable/rdp/WindowsApplet.java b/rdptransport/java/src/es/virtualcable/rdp/WindowsApplet.java index d89699ae..a2e46204 100644 --- a/rdptransport/java/src/es/virtualcable/rdp/WindowsApplet.java +++ b/rdptransport/java/src/es/virtualcable/rdp/WindowsApplet.java @@ -10,7 +10,7 @@ import es.virtualcable.rdp.util; public class WindowsApplet implements OsApplet { - private static final String MSTSC_CMD = "c:\\windows\\system32\\mstsc.exe"; + private static final String MSTSC_CMD_REL = "\\system32\\mstsc.exe"; private Hashtable params; private String scrWidth; @@ -108,6 +108,7 @@ public class WindowsApplet implements OsApplet { private void executeTunnel() throws IOException { String java = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java.exe"; + String MSTSC_CMD = System.getenv("SystemRoot") + MSTSC_CMD_REL; String [] cmd = { java, "-jar", jarFileName, tunPort, MSTSC_CMD, rdpFileName }; ProcessBuilder pb = new ProcessBuilder( cmd ); Map env = pb.environment(); @@ -120,6 +121,7 @@ public class WindowsApplet implements OsApplet { private void executeDirect() throws IOException { + String MSTSC_CMD = System.getenv("SystemRoot") + MSTSC_CMD_REL; Runtime.getRuntime().exec( MSTSC_CMD + " \"" + rdpFileName + "\"" ); } From 4b9d21942c83c927e2135d8e0adbd3427fd29ee4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Mon, 13 May 2013 16:33:49 +0000 Subject: [PATCH 02/23] --- rdptransport/java/jar/rdp.jar | Bin 23243 -> 25324 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rdptransport/java/jar/rdp.jar b/rdptransport/java/jar/rdp.jar index 3a7060dd09a86be0a6ba44e2908fddba59091d6d..34a19c8792f350e7f07f01b0ebe404854df9990a 100644 GIT binary patch delta 5647 zcmaJ_bySpF_a3^tQ#u6c5C%!%Tp!z+15Jv4Jno7cUI|mGO}lW#6K`!6ZoO>t1M^29y*U9x)5FDnPZ

L>9B2&Ynb{ofs5S~6UQ40zyK!>3 zGH94b5oJ5zbp|gS%Lk1!q#rm@8@wa->E5&2wm9Fux=A2@r zyHzJ6UAgBa_z-FU6W87VUIa6(>&5fBxH5=`-CI-g$7>!CGx}yyuBM{y6|H6BTzPv> zgAk+C(LT63ViPmo0dEg^m@yQ;?4gQ}@UWANDTBfKExs-%br!Q9J!hKUQ>k;{!G$Il zqyjj&cZ%tl!_p`o8R53Y$?S?OSno;IA@+OdkUl~vxI?lW zBd$mALKXJrpbZtyA>CvCPIO?LR?)G!VsEk}xrKoC;=G*qsZ^K4!$U%CAc4Klh&RnCxx$IAlim)*OlfNzT57)!Ki92|Jcg4RpoR!UgUXnv(AD@Och2WV0KNTY!$~75K^$CfQU7C}LcWSitWix7 z|1MPv5;7fa>tq-Wffjnn?mZVysI&bGrTXywEH4Rl2ay?)MGjuCOXZG)Il^A2WJVv@ zU}b-f>;n9IObJU@24B(rWhm(LzDMl~TQrSZ?I5j|IL}kcnC-f6VT%sD0|mZOeIGOc(( zwYHdj@vLA8MKtcPLTP*x1u=#6r)TQ0pekrew?%7Zoe`<1laa_^&Z8ZIYM`0EN4@P7 zxZNA`U<^!fmT!;jo8Dp>eyiwc;Bl@W>DF=Nx3sf`cMM7tot}EvzbKUYE&nPnq^JYAFzGa2I_v#Z;ajM6+6*L%bu!iP&(XRu z6BE0o9uq~+FB@e64jcZ!hSqEt1@BBgT>;I&)x%M#pV$qtnIe07hh0Oo{|~z)f8LFM zL03mtM$q2!LsxIn^yc_QMpA5sgABZfj|6X?X(tD&F~=qWo1XSz#VN6xovlCyfv8RLLl%Mc=^_*ninoM60R&(gx%pQ>H8`Ny^}%A#e&{iEScPv+YooX z`x#zPd;eJb@L2mC2X?lEi`=wo0-PpOCmwYkF$l4o0Z4xsJ_?B#uR~PB<^kNks_QT4Pm;73)&}9D0 ze&{i^e(2t+4SO0mkxerBti0TBMD--U;DII+7X@&kjit>fRXcyje@xpdEuqO+*bEug zI6ULJ^&RH?LMuNcC#`zgDB9EUhpDe1zn}nLjy#9pm#Mc2->&VbMxk-ZTN8BIkrUgq^9%nz7Aj0WltVg^t@?;WvcXMoyNX4@bNC5Mq3XE zTA*ilH7e!f5ILA1Wfppnk^jv2fx!^$%w6)Z4dHICvEV(;+~!k4-&(6yBL+$w>Vo-X zBI2gcv#3&+=vKH&1fiBwXly`r^KU}-P?~LykbJ*fXfX9#?r1z0Bvly94kF%AWu>f|tp{57DTrl628fe>ydX zXu8P1te@c;Gfc_fUd>xn(E= zG4&|sTUh7V`5J*u!c8t)O@}cVt$WR=_nUh29zSA_rH3+4iUSXPZRbC`u+=2S=mZUN zEd-R?~Ka7U;}#DtlXLm@ysVX>%0Nly$EV9&n!Mq{M_UYpDQ5S>k4F1$$~#5CiKW4U74L zxA}O<<#ivGJvMD7AJsGWlxpOXm^Mpmo7_ANIu-}I$ZLf-qHJZW^wA=z1-DC}kd1AW z_DbhT0Y}?~VDlDJEs$ARqqb2#J3m zk9B(#&BU(zc?@Ztj6PR3+Q> z5?QxT3^fOc? ztB)(OOsGv0D8jYLSkarRQtsoO2GRnp#Fiv;-W}@U;84=Z5cmqWh?|uf3KI5!=35kB zZ6unohkt=fTg2{FnZTGDHGP|&leaVk8kbvOWaNWLp4Q+}q8KQ>*7SI=<2m{?H+PnL zE}V->(3Z_A4}q*YGFaITS4lw%f1cc4+Y~%+NI6x><@TOn)cLbG5EqxRgFbHk_@gCEV6 zSR^Y~Nc&LEh0eyhYuQc;ewAVvcu~Rc=DgIAmMiPpo+i{1`zcrJy(@#SjqiMWWs;01 z-O}*&r=Es|h=~^6zH{WaAv7I$KFzNhu+nvv(rdfgfyWx+BF=u{Cf6eK^ z^3L$???@;|aZ1=QRW7fEVRM?96MB3(@g+s|MD7I2z_uWQl@}r5PlTu4G-XXkAV8so z`+QqMpUP)Pcf?%^zJO6NPAsqxuQ6+94j$4(<9y0SXaw6k3`OLheQl_HLfjKL+}_7J zAuLGm%{@DPf|c373a71(LrkI{Cer%O)Y0w;(Pga~DwGGnM%r5)A6PXVRvwITUAjNu znLQMBdt9DCSZ&KxhTwR#-s>eH9g`P_NDks%VU+z;m8`#=U>~u=VJq$~u1=U_wjT4I z8PaCGG8FejC8n-RdB3V~(;!bvwOYb<#VIZis+QUllEgA9+7H*Z{NS)+6jvb8Hz_yU z?_Z1nS_>q=I+g{GL#$KNtqkGO>`=O8c15-DuWy6yDaTACXACM;uo&)u9-!!2pcDsV7ueeS5oWioN8)sE)`Q= zGezyXP+Q{bY)K)+@L*VuolCaf$;S>$welyI$qu%`ZELRFu7__P(L#5#3!D>cz5#YO zD`#6`Mye)3^G;lV9|t;R1>oRUH`V$Aq@*SNOSS(?K@n{vKfyrut$9>o_dvN8=M?%7VP$YVoV@IH# zftP6x&s?a&ca=G(&n<)MvZCEA5MtGB3$9j0iha&5)#P|#{*)KEK2O;%7MB@zPPC5J)FZVv?w>};e=q4Ut$54|N`!xI< zrk0hZIlVQ#o%3?LC{~u2uiK+zgpZr~gWCz`I-f~tZU}jz*tlbuNL6a`kiKq^zMXz2 zc6zNG1@wE5KsW@r*R3~bDL%4SpSCVJ%>F&{ic0~tCR-+HwVk(ta9OT;Z{wQu+_d-J zHApy%I*P0VOcga5?C#4qg4vtm82^A5*7oQsy+<_7EAU13hgFUd=fdOwRL^P8557EF zqc3+MC7I`;355!hPVw(`LW-nALX*x`s3dArN2%#SeRVzSeBV(jQPpYDQr#t4uQs{$ zRThRJ{C&HxdYSDVz}y6Bk0Nklvg<5-!RnwP&&a7pLDHi}f6&>&Cy4<3<;~(67|-zr zs@(vj*&{REL@hwh@hR4fR$_YD26xmGD?^oAfqv*ztf%&PYs(wr`^|4xDQ7MXjKw2H zw4q`V&X=pzL@l$X*snn$1n`o) zPCA(jel_-k^9YfMn?a*<<1&3(m@8u+^EOqF(bpz(QqlXn>XLP;tu3EnJ3NlAr9MZP zE@EK<6Gj_ryN7Pq{IvU7i|@fzOPe+HJ)wqOB&5l@WT5iK7vgZ^EZvKDp?qb7b}d88 z%7)SpMGc3TF{Y4mPM~Ecv5i0o0_HZOf1Y@A=c0HR?MBX(xEqskW1*_Q7zDH2F zJn}A3G@E|(-L16t*6Wo%lKq&m6DeSbEq6g_o#`_20cdBg&x!ORHrn?(=j5$X9)*))W+G zkc2834Woelp6peDqK3zO$wFzU1f!A}@LxwBT!pGQYDQ@6GQkkXA@50lbjooM z>lTimU5R$a8wUSaY2(Nrb{x6wqvLghk*Jup2MsFoTESn@-$qi5m#>c3h7_n*^$A;@UbS=evxczb#Uv;?>PkRl`08#g~MPYPEeusebAyO zu~2y$AiA30-dNgCoS$NVi<@Ed6|!Z>d$32i>Mg;~XtT;`E7x!w8pJzwgOEvnN_KyWEq9U~90X#% z6ZMdgNdbS$dViAIpR&u}%lM8d{7>Zjp9b^q`ae0vPwM;kBEF-^|E|{|)|L6Q!!Pa; z4WdRK!GITm?)};meE80n!h>)B*T*rSMouJvvm5;NUd4bK|dA0st(3f5V-{NcHOg8x3fGB?`$64J_S-jgbHVrhg=wG5t!!0aO1<^hQ^* z&bsU9LjVBK|06M)`B$PjEjIVR_wu+0x6T|N0Fb8z0GR(#7fC91tRvlkj{`A`2uq1)58r6iGRnO?_yvh_?Rv?xt1y#`p;UTyXX2&q5Ev|)B6vQ CL=Bq& delta 3506 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 oIb4+cf1j92*{?@Y_PKDWj;t3EaGG Date: Mon, 13 May 2013 16:34:03 +0000 Subject: [PATCH 03/23] Location of Windows folder was Harcoded previously. Now it is fixed (thanks to Virginio) --- server/src/uds/transports/RDP/applet/rdp.jar | Bin 25206 -> 25324 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/server/src/uds/transports/RDP/applet/rdp.jar b/server/src/uds/transports/RDP/applet/rdp.jar index 33330f7d83f84282727544399dade73a843f68b7..34a19c8792f350e7f07f01b0ebe404854df9990a 100644 GIT binary patch delta 14632 zcmZvDWmF#9vMuf|!9BQpaCdiicX#=);1J-$-66O`aCdiicX!Ck-sg>X_dfS^|LN5| zXIG8t>M^R;TJy0V^n3smNl^wI0s{o*&k3JcDIAYP0g!VkW5Nj7@w0d(YCWDjK_pf^ zmc=R!ClV8Up}GWvfEx^uLfKz3uxM@Z=$XHq;`KV(*Nnr!F@7f(OvJ?W@QA82}mrP8%YF+l`t2KIbk6p9)xn(VO8&@Q7VKi#46=HAD`n6c#3~}a#4X#E3nrHu+$+6MH@$*Nf z0o?SE{bBa~ufn57A;Fq6SJrQ~8r(_;JdZ)7`>KhI_723{;Y7QVzKCrj zTsp6MRkG4@t}%*wb~T?w@+i<1)|Nqak%useRsh5^uyK+wq{?s7p6uf`Li)rS`=3ZE z)VMihK7`a6s_p_0JQt4&v|80XtGly>LR)8|alLx^ml+-XckfsWv6mIm3_|Q(8*{nU zIfFN~mvAk%V`_VBK|TCc&5~`3fNS?5%b>N4gfq39JDcu$XRU7KWf~~~Y9RIHSJjPG$G6QFEO-im zc@nnZbGniqUy(OL`wwcjIUH(t;$M3l?cKqJkahq7{45Re`S5RiXo56}keD_|@(Ul0Ro+mG@CiO!rEy}*;2(S!xwvQX$U zpUR%XOi7ShPDqLPaqb6j^ZsjLmR@D&-BGoRZ^C}u62cSsIF0aK5fd&#PL8h}?gM7R zcH|R%D)4zv=(e+;i>xGl&zd?!NJl>D#Mu2(OFX$ZM-I|ctIWml!`t862-_L|0dTNp z;L3shNjUZW%0CPKi%_(BbL3vL^t21x^9-L8b$||t>Uo>?oDL2vJc0+O?=?dyQ}q+< zlmdrupNtVYrm~W0DgX~z5vu%@$e!BP&N5iCDdIfGl~>M+V-bCWiqZ8+swZg~WzZ&- z#B;P}IA3@j_#RvSwJ(e5C(V|vI$-VGxgppbQvOpZP_aG1 zHKfdC884hrfu(HyYpXZ1ZIaQs^5DW7!Z`PhoJ0Os)4j?VKE0wlmj=9)mHF_k=xg+B z69)ALbC{t-a!pP)f-hS2wp*r3KTwxh$@#{P|%MR~m(1+?kzqLgOmjf|hb*-4K* zqa%`N?j#S}=NO-91F(8UFo08mjJ0zVmaQ)&^5;O%ag?ikC66hdeNQ-N#)r^cKT1FP zh2=mLwEcwCq7*4RV-|hDkqO*c=n83uyy=}<@J61$O$q#!njvQMSeWjAa#I`fzjL$x zE94h2fIX-KuD{dMYBr~St9svI&lCWjt7)sNUTEHQ)8!=lSfRCq9Q_FAGTVr%8dV}D#M=GWAcJPM!IZi(ILk)%XkVS!gi$2w@d9Yr|w$jm)T1P9(FnX zRKJ=u#{0D)Z~L9qD(F*eboUp6a_wJDZ#-4(l$o5GsJnR|sDFMOXc%Do)wRzbXSc!s z>8uX0Qn-Ex+71%puPfjVG;X~uA{W^IjQWuI|1+wGM5BfN`+hwe4mT|7UwDvz9Hc-Y z9IX0eQYg^>kaNix0qQRv=u0>qCiJWcgLGh^#;`$XCc$<}v)_cwson7vY4h|r^TL!~_b?jyk1{>D zni;D$KSl+h_5L(gr^TP96Y*Wb>v(KYO0MB`>v(x1r~0)ETdz3pjMn5@jH~##l57qc&)xPJKUsC+D~_BP$Y8~&Y5wdVlgoui* z5z;eT9Fed7oSWoiE76@hxw{*ZwW^jX$j(PQfu?n|)Psd;2vNp&X7B@bRoi@pR?Bp< zgCRDumPR>obN;ZjJisNa7%=tg-sR)M%9J+~5dfvkcy4wSwI`#SrcJU___Lm)M?%9+ zue-P%_n4k*tso(?_&4JTQ0+QfRYV`X$ZU)^NcM303 zurrl<%Yvx6R$El5-XaD*a9Y4Pa)Z8M#=S z3b5A_vw=QI6I2R4Nw}01pvA!?C)pzYUL(Pn(#R~m6hvRJo>)l1OGA@ibC6(3!&J&! zmh^yHPR!A1(?F9qF&q)(B8lNz+z5M1uD1NGWIx1)T;{S`BOFb5Mchxya%z&EI-=}W zb2Y-8Fk^u-7p01`WCi!44;&3le)Ngk8E}Vn_flscMgQu(VgVzSgD8+9{@8d`-*{fj zr#-TAYsNd8Yr2qEycf#BslHOO?pOSC6hd$#;l>Jf<_m4PThzxzJq zGe$p-uh9G1 z10A1+gRF>Hg_l;@gRrF9eJlBBA-1uVvAT4KPHKG4x*pwHaY4odrz?Xyf#S6t!{Ca> zRQWSQ=THz`3S8(0x9HN2%^HSoTmUh{P8f@ScY&FDiWI;5p)*}eT_jQ7=v}hzw~|gl zn#Zo+mkpZ37rr4Z@rnF)rjQH86=Az7TIXkX|IWA&UrG+d{^nHppBA|rv z_yj(yueB5nQB-)QJ4upCW1ywtXPo5tFZ4&PMQ~4nQE=XvVu_o3}g5A zE7AtZ(#Vb-RIuph?{3rITQ5%8Skf-3@#RaE*l|mDFH5xtP;Z8_`v9l+ zY38BSZ~UjcuDrtX0oysel)OlRU(|28h{k@E^w*%A{Svr0Mr|@-M&2XmjY`=?aR`$@ z5lhzhstD*|elo%&?3VLPwYV8taZgV3$@FNTtVLpE87*)3?}%k+4@AtY#&gJr{%y98 zW9yvYmVRO+?1)b(S_iPoDkSGx{94H|`G98e0^&4y4aOgitb}@|r9fm}{Ue@X$Di~X zeMgHoJS_EC#53BHFi5xoc^j2i8r78RlGz_J;+@|&L_K`@%Prj})%RP9ctG?s-#0Oo zFqG7tUNaojr)I%HaoqlaD(v|$dMxfdT?!~%`ToD@SqleQ&tL%DvK7Q=U)1Dcl{s(T zz8T05$9s2jvB$8=eykuszNAs}@_(PYLgmWrMYobJmKe5M=*hlL=`U}Kq-2G?8e{#P z|G>uDekeRT@xsck#OchS=g86-^~;sDGwlrOHT;<4@W%bHJg42BykO0d_JW|D0m+zB z0)aGw$8!M3nWYJ^_OlN^+l}Q*Zq6`LwbA%x-!m?2Q!L=e_F1L{U;P{6s~3(&rOpWV zQbL~_B`>S%-7nSbc+@YpI|7zDc~Imj+>@?ITNSJxkxmeiDtNtHWxG5+y;};;4130y zDpp4iy1hO~*1bfZQry1mJD8cSJ{(JteD5lCvlnaQ7SBfj-|$`Ju3?EOvv#`kt!vbW zMgC#JX3)XU4WUKV-Yc|sAE?OJ44ls4?_pGnY9XtECQMtxu8{#@C$$>ux+l#!kgP$C z-vqDv+UYkZn4hkV-5Gy!?V@CPi03%V1TPY0&BjSx=3L_*!OvYy+1@e5Dm5qH{XRpQ zA&Azl7fyVWtC#;(acC*jnZrt7twV|k>-k;xqe}NTSWEv@O)TyOBH!ND@`0pwuR)gI zv%_!bzse*JC`r>C7!VLos|054zFCAZJZjG6JdV<|H6FPZ^CFvNv3EOh4R zP-N~kC@f%sviL{L-jc}XhjN?kLfeInA_){u#wBft^1yFVStyKg*izVQwQKV+8;fqh zDya+x`;FGi1O_L)j1d2)P8=%;U~1PZEz?!D&*ZPC?2Bv{2FB0*5epDHbm+cm00eHO z?r!RZw-;*?8*))a2v4HiISX)O#dh?z7Y1&gkoiYiL}D6_{5ijCzcd;iTB?ry&Shqo zd@iYtHyKx8YcQY6*c;!{BtkVN47V07849gL`R2ZcM!wNt9$hefL zdoG4b^wycl!*q7A_gWH;Q@6A>ANabZ#7RTGPfP2bnJgUcjo znXPY9tn7xZO_^A6LJs}K^hXcxw=bnRJP zFt{^jhV=GdCnxQsEIQCf0lLknxf`OuSj0?5?IuxYd$tkzto&aZDO``Z zkSn9;>29_b_?#IhbeLt|C<@~DO3m6tcvq6r)t-FJZ;u&RbsDB9B+!T~sbLH4m)I5V zm$|CPcYdd&>KqW^*!@UJs*+8u{{5SzHde>e1lve2LKOQ0tiEc09gy0rB9cr?W|R{M zdTudJ1-Rh%6}x|dt;n1sTMicT`mi^vqQa^HPuSywvhVYuMnaEG$}8uoqHcl*D-+qY z=V4u2)09$HIj1jhHY;{$Ht`!=B2@8oOi*C(umRhP~$*8R0tdoZ}(L2+mX`I4# zj4Se7eDh*=(Xdoj1!QZ4dr^CT%aMM;tGv@qvr0=vAgbLWROTT?gZy z=_hbsSDGU@okU(ia`I4YBIo8GHu@QxWARAkY}@1_;qv|CDxX)(m&om&Zi!ON5se6T zua6GPjC8JBqDUUpB^(M?d#G~%-j?63M{@Fr?zGrqLf2k(12BMsI`ox+ZNE@1Lya=g zRXH{T=%H06)gL|^6Y5q;vQ`w6sIMAYi$c5mI#+x~PR*^ch!LNm_m(OPF(btg1*@Xn z*%VG~Esc0v2RELXt*KxdHPZNyUQI4$@!gd#tw#Z`bO3=MC$D7$hCga5?BQ3+NPI@gpm9`=xQvO?s-Q5~~m2YOOVK$H>hNPy~k6EH4m zp)tHbRbsal!g=N@FNNapXVOjcJwj!E*Jz_#U~+dGK_4_1%I&5+T1eD}ivTt4qm zch0r~wf^AEc^_pH4;N#>YVg34dM4EVLTdS*k1JjqwAD=)({)N6jXEM%L0X~-(gmAU zSXb{>2;gSP7IqZ2E(uGMgHY!Jp*}9KYk;=l+-NcqLrvR5^!n*Jj7c9em6?1LN&Kot z*KC)_On60!L*oNIro(lmY?A!FEm7($=Y#?iluSPT@lAuUyGm>b*~&U%>4qqTJ63Xq z(NNLf-*g-Cr{*yCWVc0J2X&1-Fiq>6T}mm#6d^s)>*Cvgw0 zUzuFCc84Essfjx9ge($#j|nFgz?~kOFjk}v%>{%am8rfG0=f->lFeM{HEbl(j@#&0&QiZbYG0d?% zm0<$ywK7w>s&V|qarz-(@~w%= z=(t4!*}W~0;TX1(77g{T|GmbN=1{27*Ex`6lOEnN1h!<`Wu$8wC90dXKr5|A&7^tB zj1dPlO3X&HLADJ8QV9VS%TBj9%l(M&bmGl0&5FB->Km&DwOM6!5|W5(Bt$tz3c!wc zXXF*t){3u%nKU`_z^FEQG)c!M9Iqcvt5J6im}NQE6EhnjGe9F!k({7`FMr^I(80ie zR$Kveojvgt=S#87Q(D8zOY@vKEz!gdEIwUt!=`DisJX2jP_@5n4i;!4X6GwPOC>L@ zincIKE;O?+kfU)IL_iKr_jQy-1~3sC%OyXYT$0)ixL(@$CqN#sMg@+I9sNQgLRsMY zg7ZS!@Sd=)@6A}8{axd#$t27+>nYK!OWetSwK(23LeS_D2G489i(E##c4Tn;s@JtP zfe zHInK$1y+svSOW$J?o~~A0VWc8cWGEH*nm-=o_x+P#QXi;33dZv_jSR+WUu$&q22=M z3}6NgX>ukn;EoFy2vn(s9=yhz%CD7>>pWI)|2dNKAyu8ud#=zL)Jo$! zUZ9d1_ruE<4uBpj0~nl?+s5mZ>57HjDq-o6#MNkcDTL+a3*AbneX1mtDPO(v0tn!U zoFugh`?X=H{ZwR3&L@R?@F^;#`R@G_!wh91Z<_J#7}ocQR30gIZ>qHn^K&W!Ksc1f z+y%hxak+tgHv|I=xt7j*$0!5omBMFpg**MfSJeV`03{%wYx^A)kKnC&+>ckE!+zS7 zc_AUjQEk>>v<1ioPoxY8Uu@aC_**L+xex&LPVW{Pb|M$ppJy0{zf~E$$ZQ1AFdvkp z{11D^evHVOu_2a9%W*j-CC*Ek}S-(6I*5qiiwnxETh=lT$OU3KD>^; zO8PCd0ATbn@_Ir~o$@>ul9z4y#n9CBSaHqgBaXjjb954$L(~{3TevCx64j`TQ(lT# zVX42V33fBClI7p`Okw1OjIW10GIekBgQdQRihuWYa-ZRf@$<<vYTshUtuP|!DQo53kg zc=|?>KH$w!(wfE$p)2xh#?-NOTyhcYl2LNQ;oy$_Ql^MSj&POq@6Zhx z`~`m4IdhkTM~w=5LKk??V8J_4tB|~fd|}nrj62bf;J$J`m_ID5ca$#Nc)x`2-U!lX z!;E)p=3?#zBFRE<-y}*Grlba?y2C{@a05^jt>UGmd_;=G5Tkxgbe3bo}%yWvE#1sS+!`7*cXcV=#LnNo}kC zq}$Msvxs|FrQ}A zov>v0;#_q~?lFwL?(5!~sb}D(pOT$d@D%?Fx_ZP$Sw^yAj=?1CMlUuDl_hfCw(3u{ zcefC>7Xxuf`o&U0!Z@6&0{QzfI)0KzKIiZ9j7i5BS@TwkRxW41!TxGaMR5iY8V!*^ zK*aF>*_}rJHFZzRBLc96LPJ9e-hmTlko+1h7^Fl@oCjN|MGR%&Xz!2}}Z7?#pC8`Zu2*ja|{atp*p4o)yIKHIzggo!udI~^t=)%ZDjsn=gi)a*h zyKzWZ&t+8%ozaYN-eg>u45Ny*+D^Vq$@Gh-mA%#esP!^7tK+N<#8Z~`zRU}?tO)$%)iDN$afmhv!>Hz2)4RH7=utL)!KxuCvLPKym8QJ%kS`8`RAUjyZi$F(_Chz%$j&251`Yb_J+g7y?2CY?zqPTLrZ=NbT$VH)GRAE{cJ1SD?)2h~&ppka`yV0qvAax8D1Rn%M`AOS`Q>OO9nCJUm579gr(i zx8iW{NnaRQ4GobUtRg7Wllv!xP{Hs3mG1ca92!F zBsh)D)G8T9>e@;#%k}H>?ugdF>f!1qVMQoml0&uDrqLkY`s4GMaBcGE7hI~s!($T& zA$zm8a~o7>v!V>BueM8s9wh5gM%)7hjpEO0^#G*56ueslzO*;{>sA>-XBDfXyVoON zgKJ3sP;jO{ahY;2EL_4}j-bV1HK#Bs+5?lB9IfdFN~eKF1f+I1v<9teW6#&nI<_EB z*{yN&ARv(Rym`om3P~$ti*mu5=vw~{KpOPW+)RvZ$Yh2Tg~^W&EGL^u%5cTZ(s5G@oOA5g;B3u4Z<$+w93G6n5y&U~7+G zDO7B6Aoe!%UhS?)5pp5e9DiFGXkL$;ZC4q30Lu%(>p}Ev3vGtYRFTYV=c;%i8`1v`3VxL!2?vm&bzL7f#9O=}L=xfNl#olNOTzZ=3Pj!x z4vBDMUvN|q)}PekVOytRI$~R?TADiHwlBHYgn+&=g5CQ8)3A8)4KD_MC3jCg$kJ*o zviR<$xxo!>z<<1Zhk8* zR5I?g+SW-Z;T@V2SsL~&+v721Ndok2v0jImre~UH17j#{3AQLDWFubk0*RzzXH&CA zC9BEL8`=wUu%CZIgkPrn(0KvSehYA3!>cOcnPHo(Yl zQzLebh>@@=A0oqPgo3sPB&@D`K?_?dae*z-SY`z9r zTvvn&?C(>{%EmoOr2Qa`KDEa+Mp8Z!*yBP3z*_fintP;PTWvOo-8`jQnFn?4I?y>> z#_{3Xp5~U=CD*@#oF3LJwZ~4@&Z)23(1QHFP_8V|3<~|IQ)9uvC?Bq}Wx-KgO{ohl#&SFWaoOkID&i_J7qvlQ}k`?U2Aar|y$UO=M?I zd$HDKUmU~E!cmP1XA;E`(NC=RU((ZOB9AZXMM*NojhCE(9g;6Owg+s=>f7ahw`)xm z8f$v2IMJIUpvOE4*Gi8Y9@}H-|COKaZdR9ATPHZn-In=heF6Iz#l`F}V;DtKaw&{F z9*N*=#LJp)AW~baTN$SV9IReGDY3j_UGB}SJk6o8`_^|iBCF?%#|qUVB~yqP9p2Ggt)=@|iCe9xH!oEfhE!MU9~ zRFih4seTYH3of1B42o0VPqoUkAHtGK#rbU#Ta-h73WkKG+->9VHl$DC5~>e14(v0% zgV#XF;X|f7@smFv(y2+Wk83dxorVsQSz2k*A!qPK!pG(|8hLBVsgJot&HrM>xccR* zez(5D>xZ;;SXK{UxITce7}08T&d$`6^%Jpnhh0=m&a6D3i*_^7mi}ZJww;f6QJU#! zk3*wr%iF+NncrH-{*8P1m()A#(XBQtFqe$tcIvIM6)INi*xQ z(o*J1{@zacrXGR}EHCOM5PD>mrM!5E;|%D$v>IY?(wxfi zH_CLhuK`XNtQ{&muVC!C!dYf@4t7s39p9Mo&vQ0fG;22x>j?+KwENI8QdKb3t9}J@ z19fv$9t*;lDn~8a$F`)j1-~Vd`O*-t1Ic_ji18;;`H4`(eT4_8l6Zrl!B6|V<|V*R zHEv6PK+OZHkCcdzOSdKq{5f+8rwTp=m5zRF522sOPTvUdgqS0B@rJZ6?w0MMzP~!A zC~iIzbj*AUD)DoO-c|5@dE4oOiAoW!7r9#w1K|uk)htEcMq=N@DN`%>afh0Zttlv* zEpg7!5AtQldwy43d=ZqbhD1A>XV`_Z)}K@RnrQ~`n~I^|slsrtKH*m9hE9EtOE(07 zwlrlDlN!`${3S{PelhBxMb&ou$%2S`07d46-`{yNguw}`)vDY42BImvWQI&%m`ydP zG7rucUM-K24euil_Z((n*V(#_RrLq0NJ=+?n;~%np%Z2p9u8}CDlyWJsEg+?X={Z@ z`BPHB-gQU|#_wJcDm0bSnY(As-bC%7-`ibO#pBkKpF;$UjsSFNgYLjlDMk}uDB))m z)=bro;S2mX{RZ{E2o2B7Y14IU&*JpGC==K!r33uWL3E7>QUrNPd1E@R4%fq&Hh5cv z5sJjA6fR_-w{Rp%)HjR6?h82N>deG%G~c%YtelLuMziEvv|=}<)4rRL;a$^u`nM?F zuTi)KA3M^h5sz5t;qV0?Mr|J#d_>B{#ouKqhnUS~Dwb*g-P@ z(C-#Dil^zU`@u#D28ErnH6;bkhwy79=UD`f>M9j}l97MKdjNI}J=BaY*(e+(R4FMj zF5&t)7g010DJyZxT7wp3FoV10EZynavl%wEo&o@i^u7A@asJK0*fRS*zGXf&bg@PCy^ zp(j$3HO_X=DYU3|=XBW8W(jN(3`l@VP}FvWQKag}C#js(RCY{IhLNDwfM>f8nodqG z&V#n|28npfS<$mHV~ly9>wG!PaOixwbQm=7d#IlRYf(aY$%Cx`G_uCm$DWy0ijL#T zEu(T~$KG>|oZn}=avS;hC&JEWH%)5Cha}Gr&7?_6cx|? zG~L>LG@5ct*wX_G#cO7@Xjj!H*0k;@<4GF#RG;OsC$DP?gab8Lb*_|hwjH(`_Le7| zH8G>$_2Pa~Mc~;3NR5rPHVJA_r)O#8xU!pba;arEt%J+=64p?Rj2+1pKXFwB0Om)R zht?rT7&Gvtf2qzj&q;A_+Jkl!J+ugFdC=HH=N8O}f~&teU7+0^OfuDo=Tan0w8V?j zn3Izh$g>z5(yJ*-a#aR&bEErXqqS~|LV`irqXc9+uqlNB0z$OqAY2qPB3|+5jf^3| zc!OdapzDAIO+KopjCS->Jodk0GmqlUHbX?}tIm94G;@vAwQru|T!SxG?5~yuN7n?> z9w%YXZK+wF36~ltAGmO;L%ga7CF>EB*7bW0+EPYX0w`=bozU%zqtM))*E19uPLtr3 z(Djz37`aCPEqr|6#L*k>n;u_pQe4QJeLCU8$q{)TF#kj^-x5aWvfPrQzvS zYK)={z>F$(& zi3MWPlOJ$L8wtcR$;hN`^()~QEF9m__A^*|L(^LT6xM2sxPBe`t3hJZ<0p+^3(A0B z>$akVRE{BmdSBhL8FRSV>zw~!o2L?pJLgph#(ss=sq)K zR_jeKaHs@@&yvmJ7}^&CN<+Z{rHo$(b$J-a(XEQ+1g;fmJ(4>o4wWi8xDmdqZpo@?V+yv0dYV zX;YYQ>#2IykN<#{<)tDUwAh-!74B;f!*EgtbZRKqMgHa(VmrDzvYatSc8PZSgpr^` z?+&}>@%Pmql?Ap%fesIH@-J+O(QLZ0o_rgIo*Q#mI& zzwQc=-m{1>!M$=oPpyJKzr!xPGII{!M1Q_RCzWISnza4Bu=22C9#NR_ zpCZjWD{v=5l>-$yW|d?N9&=Th>L4^3@L1Wc*lVs~i_BGLK#4{Y7U_=zI3Lou9dPAN zNXy5K7YVkSk|GbQ_-b-j{*1m#!Wy4`+RTb$v%Yzx8G&(E%YG$gGaBVuLNWLAYtac! zeAfNJ5)KD})=85?dJC!!!u!vDrk75+DAz(B1YZqO%O6JvEi2sy!%pMf1|#t?fM*Bn zwmB$&!C-fMz9xs3z2Qz0aDl{f{NM7i4ouf%iczMCaqM~>g>t^!phLap>yN)-%hgWX>-Tnz z#@;wo=nqUNEvT(*>Gvwgy+eNj0b#3Bp(Zq3QZh58GAt=#2{(5J=UNhBkN7Kd0=f~u zd#2u>4I;ZjM*F93;I-+q$bV$WB=(tMN>VSDQ(X3&;fxPJcs;Zt{Fw!QR2Z_wM9d3G zk{hJJCL$3zX7gY}K{@EX!s--WQD4L2NbQZwqVJYY`++Y-#3V+peme*>2Ml_a@!`8w zVlS16#u%tFj{It;DlWxzTNjoO*81Vix?#Igu8s*|K~Arq=PsAOi9st0u0z{=!FRNR zI} zV^g1;G;%8OGN(?#n&iAf;8*dQ3^bkbuxp}zb@EL3U^D;av@*85Uk(rdrh8PO`pZ0U z)|^rSMMb9@K?-?UIkXJST7l!TMnZj5*3rr zG&_HJAUBqB2Py>?m#4s`kU+5kMK(iHiXo6|u^8xOz@u%}l9d_XRun06z+~Bzm8axt zgEh>Sr{I^&vdQ7NFY>j-r0GiYC74GM3zCTjcm}pfti?W*QLWZhnahl6uu?9tE<7Oq`pJ}eR zeU82$z>Sum5LF4ippaH2)Ib3R^q;>~E8S^-J~JshG6^gm4Pjc}1Cx&SW8cx@_0O32mGMi}bxb))5w32R25FI`+S%`}0XvV>;%(A?&=7eBr>nvfH+ksm5afK3~^~V_l(-H8NG{q;Hy739g)KVGSd(DC7no?=i zdGYE-JhdM!0Cg$s$*k-YMd2YQVJW_VwVzqVxv0aGmjv**Qf0speTf$Q))|ruAB&#R z&o$3uIKkic&r<7{z8`er0z-vrz=-ui13CF43UKR$VYz%W>*VpN(FMA!oR|6WiK%y^ zpMKLBLo1n(+1+?99C5Kgo39Qd^b>m%^`2pD+tpZ-01hhir-M|;tDJ$hW<0nDMdmW$ zJpVt_&Wfd5G~#MB^KX$##ll&P;%cav>c`0Y(|6B?*B;dV4Xu;VcjaD)t}nTCfkeI#$w4VrT+lQJ--Ga83PwI1CF%u*1tzN(coE*2`S+0sV)vqS zKq8-A^l@Wg!S|O6O+QdR`1YkwK)c23t?HTNf_nQb1#(uPf{)f#p#$o{Ym0x^X8;v+ zKd4{wQeE&WH<$IqtDf_`!U@(vYPlHcXe(%i87OisSY@C1;<#N4;fCgv#|q*%v2nhN zJR)PYbRoQK5uR)bX#M?54HVSIWzwo400-)zoH4w6xXv^=l3~fWaJ^k7_bBFdQo{bq zT`AWnuXC(FiV#mwzTKg3g(od?cSc?6KZGu{@fR0&!WW}Ww6Q50DqHl{Vo)zYE~lX! zm3ab}tg45yR&g?CFN2FZpbJ*}QVr$!EA_eyAF&fwHR2XKW7`_9ND4XvDjvx)0So>? zoYstc7u?rK8~r>F-s>gJyLzt_?K)eb(D$gkrCZ;_?o~Xi`D33>2sf*@qV8TlJT(Cz zMAJmQWUperia7%k4_v;ozbW{u0C+!6w|3Bz8q;45Xrrt<)iq9X3fWC`V77KF&#Tx7bW>wijdh$ z{>0ockk|Q->@!lOXw{Yq5ilhB`Hd0-6vAqx6&s8kz%p&yna#3Sam0%*!YLFD+QWhJ zU2#ag-V5WX||h>QWGs>Qodd`!JkK*>h0amljS zx=0HN@`O=LP{^qyZQj9@Kt%fc_X$R||OEAMgwFpLU5bBo#)jclE zpx4gp>|oA$m+=kFu1fe2AgT(Fl!#b({dE;Dhw7Kpk7b>fl5qP0!$_AyE}A|&EGLbY ztQ67_X^o09F0lHqsReyUm}8Y(x8I}0ik3?*?a)?px-?ZI!4cr~grH%QF!h+f`q7if zeg2l!k0LmAhZ)w#tis}}^O}ef`JtCLHz&ruKzGcR+ko@_w~hk$LJZ%^1Q7%T1?Rup zv-(Aq3h@7k4nj2`{;v=rR!jds8iV?4?LaWtzm#NutAv2wdRzv7js6HT{+})b?H>{a z5D?uz0th)VRUvvQd2vP+DG7NoWd;>-MHx^q43PiPrTtSXf&MQ(8W2sN6!2H$Sj~E# z&hkh1fdvNwg8DDaBs2(!vZsMw56I&w}mw%f0i+-H6J%#Wd926$ya|F?0`f2?Ma{R`ts_qXv;I%FWM5d!gF3ta!~;VJ(Grsnw@ ztiXf*7x-`M|I8@ze}Th+JBDn3TVHiVywv^^zJNbpk?LOfYII9}anX(? zCl6B~mct|?CrT8fTSdY{z;pWwAE633bZH?}n}0hx=+4Q7uV4~K4iq5=S$W?*_jHH8 zv{Qb<8>~T%YdU;Ce?P}%nmy?!r$HdctCQWP?yI#Q5;xw?UDg-C*u8D{!ys_Vo@}+_ zA2)h99-tQm3@V;Z{T8y3N>a$6ri!sG)V`H>z! zZ?bk{{5sKePap62c~w*umhy3lz+PQuNbsYun11IPkS3Po?l_XC>=;R*qk3~qKbhFi zc@bKMHqiy)NE{_24)ejO0HOiluBRLj|TN0lMrQs7#b{(ht4}u zC902>0PGPr8@*4hgkrcxRv`aTA=g)zF~2?96qSM@iHhA0JE`v;PK;@b-e1PE4b~rV zF=aLvo<^V0u*0_n#jRmr%2EkF!O;IAZ`p2Q>Id%acVuXLpvSbPhOKaE({|#_8NfQa zg|FLcuK_R-V~xJ1YWQ)3#F4!Lw$!!Lzi5d=1xK}~Xt2!;2y7>VS%rj+hj}g=-E}>v zR^8rZpODoQVc}Lav9Smtz`%N;z`*`{`T!jur~s-78De-amoGFg#C*3ik#td|mGY>y zp%efpai6QXIJQGF4mPBykY~`jb!K8?GymHL?Q};?0t$2yWs?hc#Y%mf#~;XtcVgLkn>?Yc20Wc{av^`a$lg)P_ICXl(*` z3RL~T>2-G_2iOMpz*?E;#iRMK)wVE{%$3|lH&f9Vnm#W@d=)5(o%h+Nv(fem+y#i= z-|41U-D729w196({f=P;)gxcIbcAxeCoEK-5*Xn2Cv7}*EVCNS&O5o*FZdF9CyX+Q zSg`Xmm(jkJY>u;-;-;CR5AZ8s(TY*Ws<+H7@;IsnE3R+a{dCE2VvSY28oE}<@KQS?a%U9$2-b<5cvmF0GIX4M;5FB6zU zvd+p7vrN^$_Bhjx1}V5~HYKFzgVBAa9hOf<4KeM% zCwRzbIa~mBs^qNfIuVjFv^*mSMf*S!{axxnmw|!w0aCiSST-n&*DE> z@de=jk(?+gGOCXjmeh6(~dZ$tg6H~3xSSS}2`6$I=gHwwfS@Mci zxLD6;jkMD#8pzC5Zyy{ulYqLaCc2o#@;LDb{S{P~w zyeBM@rfTYtte0c18yz`EqN-!-TZVPig+s|Q31`YhxiGg9Z5&x6hgIug`f20!vL*F9`0=Ly@& z%>`pCbuM`-$z6Q9IOxpH9s5Ino2UC#YR|;*z^*6hZy1$_>0aypf>x9Ou9o0Pyn>+FbstuA;HX~df)`QCIIXraqH)urjJqW zOx2dkIyJdg1NS%!30s7*gi#%t9eF|jj(K62rNHj#fyMJiDi{+PxmZVq>Ix^}i zg}o%{zk{BFKN$p&G+thj`3LJrq>(H*B7c{5IK2!&#qV3iNys?sZzRXRK`aWkR*PHm+~z; z+Y(dS@E~>AObz7;Ls8iartw!CNSZlx7b752S)Ex+u%=DA&%8l$(E}nJzR~PR8bN8& zkbydY!<87I>pebZXb3;ecg>-M>t*|dKT1aj_Y_GNA>OICAVY7A*c4|$Ebo0qM;ASi zikQzRTXG$xv+$)Vi!O-QPFn)_4ITa|8^RMu znq%tPU)=@=o@=$HeCNBG;%ZYZkJPHzzU)z*&I7L5|HkdGL?L>Nue41QDejS@~f z1DM%>QLrusb8qF0^(weFMdc|SvS@mEtW+ef4Y=OeUtIR`K=LLUogzEEg}Bp!>Y!O3 zV(O~SB4E8U01USUzho{%w%6DF8@&P39#VTxY$Ync(?v6$_eS1sCQC^mSYm;{B8l-(C_Kq z)Hf}o3TQnEPjy}6Pw-nMT0TM~Jr%b&tj9Xg%s#JiLc_!5rOw`jnUa3Q-N{#oyvr5# z%eKY-lXY0H2)1Pwzn+k`kc(Ag)wh`7yR|RfvyitQvI4>(p!UUC0DW>NZ%WlR_s-LR z1l(&HOdYILm_rRCOU_Cjd}w@Ejpo1`YR0Nqr9xSE)ng3Ix)^jnvUmU09qBmLbW``P zQS_iQAe@m!L3B_rKF-AFCoKk;Al@6|0iua2C6|E2&Qo9^{e+@2d6Gl-r_VsWw(2-+ z>&lFQv(YII1B{Kd=D7O^)sCHC?`f<64_W++AcWr1?jwCJRdY**InL3$3(>(#~q0xcEr zWd|vPNf?3Ozqxl172uvT=%(upy$IoU;1Wf>#{(|+F8RO=^rjAsn5>o6*-0JsN!x0{ z3~LjIZzyu6V%-xT1`DFdl`EK1d$+RY^}=A?2t_95pWN@WDLqxMm+rZiwy*>I!*T0* zXCqJS4g!e%5VIdqg;gy(C71L8bCMEn5VX*%PT3ZU9tN0B-0oGntz$3vB{AQxz=INF z^kQ)@$>X07k2ub4p+aQ*P*8WsF@n(&IC8$AnKhtpnF~pv7xG`IhkV9+vJZ-=VzbPg zo_{L98Z(T0Wgoie#fNc6>$P_=N=5eu9E|D>!|d)PA{6x|#u-mt4CCjrM%>(h){7#PcD~b6&iEuQ{Z+mVVB?T4#$eU48rZNhh zk`@BFS!odv86t&c3!>a)*j)?%rU<`@9aIyCn>2M&6!9RG93kofV8(w^?_+d3x^yZ{ z4jWO8Qu^Wwnfp!m5zU(Xnt(K0_tJCrotu>1bw3=gUTo&U6@_gLBLsJEb5?!AG~t@s zMMw$1#;lZ?55*Ja6nR~MZ6wrp-h!34F~O%l!bMbP7p&@HfAX5`V0~C|9bKY;U(7ap z)potm`~+2HZUpK9kf78|6M(R*dU`XHpzh4PznM#%XL#5+hro%Rtfl=@(1i+e@QU0cfJh{46G3K-~Q5H z2MFw6h4PPV?aAt6@8Jc^W+DLu1{ukEzyEe<3~X#OkgpgS6VPG8G+YXFrVX(orv0|b zQD3ANLQfNM^2_lERM9#9t33&sUVeT?!_J-_dN>lz4g-mtRg#I39c3o95IMN;hy8O1 zRZ-EcIHGgjO5Kyqd38e)?oRikdEiABzo*UbEKb`l&mmTmpnHBW#({GH8dsPNBQ9yP zF{^7a@OM}Pwy);uqYvk5=43H5YecBnFLKZIxRS{UxuC5caz=R{DF{*!cHoiV1np?e&44HvTrA;_+)Zb=k&9e9=HJ$-n_^72!oTaotCy$ba zw+>irtI5&TyV_beJYfTnw-RF9-7kEGl#F3To5-l%7j%j(6quEXdKySkp#c zrNo~fZ%^$3d2sL=SMTj-WwvVEk@(&zr^D>5KbQe)*rzIF>5~ctRY3@ zDLT}JF+@-=I^@Ba6FWmBzM(+sK2aLO5CoSG_Xy=0*yO>Rhk-%_Ezd?0h-=r4=j{A> zROXZ}*o_VE5hp@<9p=9yz5pB+W^lI)f%v3j8S=3^RnFf9E8jd)@UW)9T@Hq`g4*Su$3^QDKYPFeNqloYCYYr%!iY8|cT*Bf}1eQW4{o?$c8 zrwcY5uZ;1za1YmWm3kP-P_Ds``)IDOrlc++`P*Dy`fwWFPQ%EegydIIB?cHT3xQk@ zIyf>vnE0E=ML9q@OcloIY~4=>l9t5HS3_)l7*~F9k`T%OPwM4^Gp{iZYpPS8TG&8* z&f^Xkl&NSD(w;Hm06alXmu8<%(hwe+t4=P1QS*qftQr9Q~ z=MhK60XOt((D@@B*BKflF76sXYS&Wqc)I0iXSo;Fo)^|0$hn+68km#d) zB`X5I?uN2HrCD))1I~P z`+qM=w~Av}JJefNSY-(=Jk4j1`)v1(m&>NjB&pofrf_8a5VVT{=TK6_1W|k&Wc*FD zAsJ`S8YhjHP%ptIb_*0TxSUkZDcP1Ib%_actX8uN)Z)b-D!DvDBgxtyIa0FO;(R17 zXQ#jf+!`9kLMRUR8~I5L+pe;Ggv2YW3>P?Eo4b6Zg{9~f?ZR`^3*=Y;=dPsN-Q!%p9fiz7W zEoZPDtvu&9y5kSxj;O(Ex;gvR+3s2pRzCpoPYf908GPrp%Kh;&?DX^WgWiynb=NyA{`-+)vDZ+TngxO{-PPI&ar-N&yu^IzRea$Rkw|kc|+tiqyMqH)?j+=9rQ)( zfxPU66E8LQgX_|Ct~Sp*Vs-@h;Tq;mI5DA7BV7)nsHjY}0@-XY&U2(S>795ruGEJr zmKZwK?1v5_x;9!F)7oE2SjhzRJ(9cwcq1-w-CpH{c*T8!*2Hv{Ji~1whhG7H;lF>& zWJjOru-L}y5&D-AQCJ6(J50hSKyTn$e#L0xu z-5R+F$QomPvX`m7ccD`rKY^!~v)dq!~j zYqdSN)F9$BI>w?@oxVn7DLOid7th5ceKbOK8wFmX!yB6`jBQ{-{tTjQ}2oJHm z!7-8HoQ(*OXn(ZnF#lUK4LV9JfCe2gx*~R~uvk@)p7 zw$N*Tk`REg0O@@8viwE5{SYY{g+SM(n!HV_S&6#(Z1lR;`6GaY;$Q$7P^aWz;?I^n z{q@)adeeY&Ltenr@+mH$e?}6siC2O5m)Pc16dQ!HwhAqrf16U^HMCSvbQOF^x$?+J@TG;X$)o8OyBi2`eb(Qzzkg%& zMLSqIeuOpGJ~fxNUEyL7FkyIhz4-iWCEWhA@)5iI28e@ftB8fb?p|~7`5=XoDjnB1GY^%i95Mw}jav7I?Uc{HIj?4xtFgCJc zQgdMqyjVCz>{o3GSuGKqr`v?F5(@vtLTXt+*Sb72(eh_x!0Q!w+2N3cV9g9q znNA6lY1QkL?FGsCUXRrL6-#+puOs`03fGcn zp9#s=Y@91^oB;782glr%E{l5K+M$ zc$4w$;+kNtY>OubfR{v;t?jmK>agvQ8F=_>miQNz@fl`CfuWp`^b{RcL8Aw z>p@t94&d&pUTo+``NgzsZa9KpEWgp83WNt+o#hT>N6R%6032C}V`=zTjIq+VEmC%e zAogTrV=ajwj0zno3~Y->*xd~us~yz3bmVjfUxb3XHH@W+&%6-IZ9E{wStbdR9_<(4~a zZ3OvB3=Y%&CV=PmI`rYX#n@|C_^{WNgDAI;Lug!o(~9pEjZqq^LK<=@iiK(*V4a~U zPj@|xc?Ya1hH{1G+(vGMtZh^D#sclzv-N8XlAQ*rnmARNsrH{6Y7zq7v1B0w_MKzl zr)d3GX{fl%c~}Orb2TaGR*KSDYtt{q7FE_-ys6Vy7}UKNCR=9>cJ|v| zYUIm&eZwEl8Ak8hT^)cz%s`A2x{awq;o4SrC+S zEP(bnLaR+&iaN&q=Ns}413Xu9+QEs6wADq1CdO!p8_}xXSz${mah;z=Lz&9f__Ld| zv7c_8D1Cs6#mOyb8~_59JR@o>YnK1?D%5ldKp;!Ltp!@Ug&k_b{Wj7PPvSf#mScg7T{2K6%uhNi}aNH5!AC7!FDICT7CzCw^`Zy9<1 zjvzv*z-)#$T?$+{y#YMw=vHLk+S)jP|-IJ5);U78E! z&$&I}zi}v;Vf=sLP}+ZRC{RI=4X}ztMTG`OBZk3F8x4gnmxusG#YIj}C>O4keTp)= zW8<5hPOa9s*mR%laACpf>}X%%Jg5+*Q6=0^C0z7iU*_C+U;9vG_i-`lltit#{r$9q zck^ZAp=p|PNBDNK(d13=`tRHETN zzKDiJx9WJ#X}D`+(bDK^SA$L7D3-^u{M!VOD`u|RBHD2^_Ek6=qUe_{GIRW!4wC+Ef%HcHTsvn-iaT8^Atug1FUhX==fW#+sP=NM(Q|O8OT%!oF85HX+FmZRm5m za!wmWtXa@xT}$I6(Z0U)tX~jl&160&U_Mf57-T-o?>QgcRmeP8`IXw@Tp+CDIWilf z_v>gWwgd?SGLzWncxec_h#m~cqM7~5A+dB`!Ob2cSD&yj|BcEGF+eM?BNrQKo0z*V zlex2E0*by*HXisrAVU1)CvD(?AmQfDxC?ms;#!1ST0N3Fax(Fafn+8IU7mIII^=1l#7-sOoJ=RVD! zUvOYrWxyQjaXGq@7)}!L1vVvneGX%E$MzgjDyo#yGF#=x{~f47&q;-jhMs1at7(YX zPjLT;^03uvDXUu&hCYA?ShFICQ$PUHQJNm>g+7I49U8^}W22<5f+E9m)Tv{Oh7 zvk})kQx{!GxaMi5IOmR8PP4QRXU>u(H$lpEsS{n8*8q?hu2O1ZCw4tx%iqmjuv+zq z-u5N*L)}nJ(_2mw0D(Wi4Duz@CcggF;0?H6-;H$F5cBN zQXFlZ#sjp-Ruw4?<12!0$2yH-#~NRdh*BJ(BP#I~5BX$J`O%3VfR?R$d@fs_eu-*L z%sSWs)Iwt(SnOwX*)&n()1I;msg58$lUi0P`l&07 zR4zVW&V!4(6GxH8DlWuoYZ!y9&GP)G)hpFIz+ua_G>?x5drw`0xD1t(@D z6ky2Iualp0lpUZ+E1bROy|g9yi^$WEcaDEFBE?P6qX$r;bs}#fZn@E@&9-Bz^F#Q^ zPpI;om4<<aCU$076u81r5%z9((*=7cfjEyymhhMfY%*R;C0?AxLf`vEX4OI2y>v zHF}0N+=0Bn&6i|_0C!*MFDcb%rd!S^5MGMtQ_yQ&*^;pp53PA{%@H@F`L2zIkpah^ z3oST#{XFiuL|8w;G2o=Gl%@}FkgF6o_uVT{XS?K?xGhbx@#SU7)pQe+1;g4R2SD?C zu8WC9GCB51OCY5T-!WPlPTHSSs>h%{EZ-4DhCUHA6q}QUm!hR5(3fo ze99quI_+^M(j|RK=5OH9flS!o z$HTap{8yHY=oA8fi&%1l!Ovb%6M&0#U1b*3~6z*6~v z#$Bc6bR?yM7G^HDf)V;BEwX`rML#!w)T+IokzW=)tI~-geZf+Hd@c}UWGRH2&e~Uq zHsl{a&|6*c!gBsPd0kr$Z{&q__VwnIL%mK;X2}$@ZpXou{-|e#-!nxQvyQFt-sshI z(ogR(e~){NV?wo`igh{ldrkmITXCnX1&wQ5$)%jBxY+A+b1{U{)89k8D_nX3t59t; zGl58g=Y!+JS26BsbM_upS0YUJsWfQB!zR_KCfVj?B7%x%`1&%OOp5p=d(LnqX|kZk7@ja)dRK0@Miuvtcp}sSSBRPe$1^AwodrW7hvoqP%m=_6u(`VImU!21 znH&qa!GgPd54B7@{G+$L*k10uAWpRt`(bPH+w^6 zE~sxCX&X~y`y6R|USwM?@=`yS?HpZ!wscQjXiJlHEMMeQvpZQjc%USNJN7wE_00z7 zZcXG)3g<2`#y~ipR0Z%;P-^&NkIjJp^_A^-?S}Ds_-dT;mxTW=@2$){U(R(0dzk3u zevNEA8J!ArIfUYhHyAJMu|G5Ez?nk_rCNy$>cOrQyPBd>j_N7PAR0@La%unML}j?0 z)ysU`+NdXNT?j7d5^eSaj%5hG(jxO`#`W42($bE;(Wh?A06QV!fW!uk^9q&D z4o6+OX(r?$2IUF^$|d9tj#sSUtR!Sp^zbZWjzlisXSY1Cw=j)UI4v_Wwa>j`$Ue}= zZv2g%95bO65a0Wdye#Ny;nh>V7^ZPf;EAHDMrA){GB~J4u^dy}To$$&`sa z0&Y1UbNIE(UU`LnO0#z@%toEQ-0nAaDR%6D#aLXv0u%b;d`ziq896ms`x(BAGl103V`URHSGOTZD2j|64Rw6MhqWEI zp%&EM6^IKjn!$xyqLMXKmJMs~m|2KopVXFO8R29>tDIdZe@t75-^SW(KUZ8c zK)#o|+CGQC)A-oHX*-pb&VQ53d5|@}40wHw1#`h_2ZYZ+>8w6ImNlGUS1Qd3WYq1t zFyL+ir*Mj&JzC?=pwZFba%)xeui{dKNj3v-BeJQQ4a}sAiUMy2y&<&u#|ftqxrkRe zyMq=y=T~<-AtE#DZ)k;SY0=8KOqVaLZgNuYQ1sJ3Ip@jb3D~wSLHRndu+aG(DFuB` zA${080vKs>W{Bi8c6@R~ywyos4Y-rn^=$Gi0b!=Lb7t3lse(V(K2zR9Dz5^5Qvj#+_LMp~6EwXD1VXiZ6|}VM5-?fWE|@W~0Khytrlcq(k{o!^={2%xGGervqp9Jp z;0WeOSd@qwe?eZqV>tS6kdG^m*G(h&?b`RX1x#l?LWJo%6lqY-AvM{yhYv>*Uo1su z`5Krx8scvSS372J0H*@6w>mQ@%?Zm|IzDwav3iW78Pu*0D7U23jIFHhZnSXB=4HvH z0S*Us4A`@kS2Y6@&_6Zx-uIH(4O#2DG!-OH6*}ow2gXK=oNl#g&e89;H97}Y2N8Cj z>7HQr@gT{4X-U~w(~&oYY=)20q35%+;N4JYtTLLKDz=+aV63)y3Ml^>sf1+7YMOq4 zMGKwUpuONoDigjkt!n@tf(h%ESUUS#7f@>4c0?>Sl~WHy+}!JU(#FbbuGLMP4Z{)G zIx-rCU&B2ELqaLYNfF|=+J9}-j>D>^75;F+^e*K!L!YpMlV1@p#94P?!As+V*~usU z-g`WGdiWEmu=T1i40t+(d}%@9+GDQE=7!py1ujDUjYAEs^gH2gVKxa&qE-eA7a)3G zT!}djuH+_1*nG!ieYi!^TE>Xhw*6YU$~gH~pyMUj2F}1Ve3}Ex*?{#a$CVF0q{DR+ zSJ=Vjqwkinc*p#51>A6Nc(~Vu@2+@QqNBCuRKy;eT0;t<)OEoAGdU#c>~GM-ZRYR#$%TplH2f`iG zo^!M9dU|b_!`?-q}}3A8j*Naw47wl^hrJ)hvxnAH zCg%QIm8ThF%-p2y9-$$1dzuK<-Jjw?GI{PKE4`Jrq~EXmACZrq!m-tOF9DemN}n&> zX)maelx{G_wyrT?L}ZciN075<&5~TVAj(`MaPtRYtZq7@W3Me1@3A_wLp#abN;k)< zZ!9!M_2}h?lF}Qp?*b$Wc2&rMF~p6Qskn^$F=@L)I5fZ+xgneKaTW?&S{VUGIJv z={5Q^ow!^6O9sa!0{EGTo10lf;73nXSa;%|SdPa11HmIB%qJJ#6u?xjlH5RZBf%r# z;F#cNCx#zAY?r=XnHb~zLz3?%WS}#eeP$!p*=}FEwKjEVVh$!H?%Tm;x*ST} z?b!t(LDk^HWv=)uEMU=;%zEeLku^V+(Jdj9aiCOMnz?N0BdrDVgE70+sHdAGxJgGqb*04I$}G0jB+$+YW0&BU&FrY_l9 zE}nHrll>*sk@_sL6r(q<)a3GakhYRJ+)@DYy1i@fZs*gw6ChnI^*ffWA7k$JnSoRl zy^{KH(6F_jN}!L4&Fwv?Ciw zyOwMb5tdllAwY*FkEOntjOcOh&+8}oVe7GS8@i@BeHn{ooAW$kS=zL{q}0qL_{j9; zE-v=1V%1Sb-U)e-QVqUGAN5pJLnyO%DP!F;LKzpPZdDLG%eNBHf@BxfF*)!#irO2S zV;A{)*r6mu)&G+@g-iLCBF6wJwq0vLxz>-FA5VN%{(!bi`Af9G>Lk5Gv#hlSwSd{i zAhD%`AP1zPoD;UHrTug(MQ$eaBL=|e%_gSq1rHyc;^G_jAa2=|>Ka!vqb8l68>b*% zmwi@Hl0QRW%OQ`AdxIi>0{L^)a%AEmZZixt=l!(;yc&ajO!lY2B6Wov2tx)eoLGj6 zBkv#TC4em&=OeJ&n);e>68iYXxEBF{_NzzqNDXd?qs(42qJLu{ciL;6%x;VL*Z$Wl zLz!9hZrAG<>T*<#)J+Yi?|%;c9&B2Ai{laXHq`GR42Et;VrJ{a_CT{YQQlG$H+E-H zmHY{f<<6SUUmV(t7n_8g3{xDq;Vz?!w49-}9RNiN&RV5k5S;gnvM_9}*w#bu9GE!? z*7A=DQzT6HNx<*>e{rtdvO^WO_toJ$&F1v9O~tP8EOEygvgC=@d&0ES)hnWNu5gBb z>pz&$V3`*drQ}AYQ#MqaY)WTiDw-OHoAYp@@r7HaLl%rFc_C0ZMnhq&`rWf6C%PrraeeNXJ39bBW1$`?gY6>2lI)m%u|+n$?V@x@dK=9# ztHtID^s7U@c(jnpw;Hn;lBYti(0Kh<5K~C@d$G#{S4xSVuKJ0T7(3u3hEX=hd>1(V zoV0Bx$;FgS4nj+(zhAdKBU+>`8_AH;+g$fU`Lk8^q@n6pwqD6>o=xo7;Id^#NdYK1 z{mzkeKD5fD9*O!c9Iz(8dOQ#Q{GOYNFjFB(as8yI8qUy(Rn-<+BX{guAg(d% z5R)U$jBm<1`Wiw@+eQHpJDtkQi4$dL3wCS}@4ZAOVF``;DaYL>QDwD0Ncfr!#4DRSW25A)uiE(%)81jQEi-x+->SvtBQt#4l8&BIb5K3Q5e%hEZ2Xo=CCp$Q_8_+0XiS zr3h`MLLt#J(C-}39y{2JzevI=?Bdt$5xLy>x?qgI=T?xI@z7spK;XJD;sE|zi=gV~RxCgWIp7$T4HEGHc*Expzw zPG%CgUq#wUe1V>%1^c^kqVtCXiidrSheIbu!SL?rLjiS2gi=VEQn)S{gpWs!=!OG6 zR0DJYgODo>Q#&|USkD8tGXPeTq0mPfpO}kno~z(n_CML|oNR@QmU@moBF^|Sjf;GF z-aC0s;9nX{h?Zd7+Ib?_&wPkxY1~WhdDe?MVd>AziRMWp4Ftn6LH-cV{jGd%hDKWYExFDY>9_A&=Z@zZ0p;&_bIB`AS!`#N%&K zpRHLSml1U22P+$?G5{i$8}aK>wV2PI;OpX(>H9#G`CqlN^@@e5K=j(I7N9k4A3L&l zN4K1gT0eyjasjM6`gIlo`zjd&%c?^h;V3jr;)f_cg6N?i6w>Q1XuMH(Sco&(=h7|ox~BbEna0Xjj=ei?E&chDSSl)WGiZAr8`lLrT7#P+U=apLq+3^W zb|{q4F3_g;JOZflYSb1E+`>l)iiZK{IJef(iRg+f#8j0F02g?=gG#a2j&R!YUC6QN z7^w<_(voRD5{9}5akL>JIOM&#qMJu5xfy+e?qdWeQ-772pR2SlIKu!S{$jBRTCZ;+ z$Y5Y)c>f8D=u>UZ8fS1Pnq<^)46DlzN zm1GA7W(<@wA^*=a|E4iu{?{`&z$g=ne~1g!CIsN~z)=&jf7G)-suU2;^nX+)Qv&cz zpzQxu9Zd;fAJDHX zpG^rMtSEqi6jVSab0o6AWQc!f4wC#=<0ML886_E`nj$y^7T7;zxWA+QJH+!hq40l8 z8nDicgY0jx=idI1{< Zf9iJ({?roy;|(!@OBQG_*2aJP_&-n@83+IX From 6270119d2b421f83205875124fa0739826b653e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Tue, 14 May 2013 11:54:51 +0000 Subject: [PATCH 04/23] Fixed groups on internal auth --- server/src/uds/auths/InternalDB/Authenticator.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/src/uds/auths/InternalDB/Authenticator.py b/server/src/uds/auths/InternalDB/Authenticator.py index 9c5a8dfb..2d05a0bd 100644 --- a/server/src/uds/auths/InternalDB/Authenticator.py +++ b/server/src/uds/auths/InternalDB/Authenticator.py @@ -82,10 +82,12 @@ class InternalDBAuth(Authenticator): # and access will be denied try: usr = auth.users.get(name=username, state=State.ACTIVE) + groups = usr.groups.all() usr.id = None if usr.real_name.strip() == '': usr.real_name = usr.name usr.name = newUsername + usr.groups = groups usr.save() except: logger.exception('Exception') From 2271f737141b42be51f387c0f8952a095c65ebe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Tue, 14 May 2013 12:10:02 +0000 Subject: [PATCH 05/23] Fixed internal db with different user for each ip --- .../src/uds/auths/InternalDB/Authenticator.py | 7 +- .../0015_auto__add_field_user_parent.py | 238 ++++++++++++++++++ server/src/uds/models.py | 10 +- 3 files changed, 251 insertions(+), 4 deletions(-) create mode 100644 server/src/uds/migrations/0015_auto__add_field_user_parent.py diff --git a/server/src/uds/auths/InternalDB/Authenticator.py b/server/src/uds/auths/InternalDB/Authenticator.py index 2d05a0bd..5ac99fdb 100644 --- a/server/src/uds/auths/InternalDB/Authenticator.py +++ b/server/src/uds/auths/InternalDB/Authenticator.py @@ -82,12 +82,12 @@ class InternalDBAuth(Authenticator): # and access will be denied try: usr = auth.users.get(name=username, state=State.ACTIVE) - groups = usr.groups.all() + parent = usr.id usr.id = None if usr.real_name.strip() == '': usr.real_name = usr.name usr.name = newUsername - usr.groups = groups + usr.parent = parent usr.save() except: logger.exception('Exception') @@ -103,6 +103,9 @@ class InternalDBAuth(Authenticator): if len(usr) == 0: return False usr = usr[0] + if usr.parent != -1: # Direct auth not allowed for "derived" users + return False + # Internal Db Auth has its own groups, and if it active it is valid if usr.password == hashlib.sha1(credentials).hexdigest(): groupsManager.validate([g.name for g in usr.groups.all()]) diff --git a/server/src/uds/migrations/0015_auto__add_field_user_parent.py b/server/src/uds/migrations/0015_auto__add_field_user_parent.py new file mode 100644 index 00000000..a0b5609e --- /dev/null +++ b/server/src/uds/migrations/0015_auto__add_field_user_parent.py @@ -0,0 +1,238 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'User.parent' + db.add_column(u'uds_user', 'parent', + self.gf('django.db.models.fields.IntegerField')(default=-1), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'User.parent' + db.delete_column(u'uds_user', 'parent') + + + models = { + u'uds.authenticator': { + 'Meta': {'ordering': "(u'name',)", 'object_name': 'Authenticator'}, + 'comments': ('django.db.models.fields.TextField', [], {'default': "u''"}), + 'data': ('django.db.models.fields.TextField', [], {'default': "u''"}), + 'data_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'priority': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}), + 'small_name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '32', 'db_index': 'True'}) + }, + u'uds.cache': { + 'Meta': {'object_name': 'Cache', 'db_table': "u'uds_utility_cache'"}, + 'created': ('django.db.models.fields.DateTimeField', [], {}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}), + 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'validity': ('django.db.models.fields.IntegerField', [], {'default': '60'}), + 'value': ('django.db.models.fields.TextField', [], {'default': "u''"}) + }, + u'uds.config': { + 'Meta': {'unique_together': "((u'section', u'key'),)", 'object_name': 'Config', 'db_table': "u'uds_configuration'"}, + 'crypt': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}), + 'long': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'section': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'value': ('django.db.models.fields.TextField', [], {'default': "u''"}) + }, + u'uds.delayedtask': { + 'Meta': {'object_name': 'DelayedTask'}, + 'execution_delay': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'execution_time': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'insert_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'instance': ('django.db.models.fields.TextField', [], {}), + 'tag': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + u'uds.deployedservice': { + 'Meta': {'object_name': 'DeployedService', 'db_table': "u'uds__deployed_service'"}, + 'assignedGroups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "u'deployedServices'", 'symmetrical': 'False', 'db_table': "u'uds__ds_grps'", 'to': u"orm['uds.Group']"}), + 'cache_l1_srvs': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'cache_l2_srvs': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'comments': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '256'}), + 'current_pub_revision': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'initial_srvs': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'max_srvs': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128'}), + 'osmanager': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'deployedServices'", 'null': 'True', 'to': u"orm['uds.OSManager']"}), + 'service': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'deployedServices'", 'null': 'True', 'to': u"orm['uds.Service']"}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'A'", 'max_length': '1', 'db_index': 'True'}), + 'state_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1972, 7, 1, 0, 0)'}), + 'transports': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "u'deployedServices'", 'symmetrical': 'False', 'db_table': "u'uds__ds_trans'", 'to': u"orm['uds.Transport']"}) + }, + u'uds.deployedservicepublication': { + 'Meta': {'ordering': "(u'publish_date',)", 'object_name': 'DeployedServicePublication', 'db_table': "u'uds__deployed_service_pub'"}, + 'data': ('django.db.models.fields.TextField', [], {'default': "u''"}), + 'deployed_service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'publications'", 'to': u"orm['uds.DeployedService']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'publish_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'revision': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'P'", 'max_length': '1', 'db_index': 'True'}), + 'state_date': ('django.db.models.fields.DateTimeField', [], {}) + }, + u'uds.group': { + 'Meta': {'ordering': "(u'name',)", 'unique_together': "((u'manager', u'name'),)", 'object_name': 'Group'}, + 'comments': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '256'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['uds.Group']", 'symmetrical': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_meta': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}), + 'manager': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'groups'", 'to': u"orm['uds.Authenticator']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'A'", 'max_length': '1', 'db_index': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "u'groups'", 'symmetrical': 'False', 'to': u"orm['uds.User']"}) + }, + u'uds.log': { + 'Meta': {'object_name': 'Log'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'data': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'level': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'owner_id': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}), + 'owner_type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'source': ('django.db.models.fields.CharField', [], {'default': "u'internal'", 'max_length': '16', 'db_index': 'True'}) + }, + u'uds.network': { + 'Meta': {'object_name': 'Network'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}), + 'net_end': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}), + 'net_start': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}), + 'net_string': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128'}), + 'transports': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "u'networks'", 'symmetrical': 'False', 'db_table': "u'uds_net_trans'", 'to': u"orm['uds.Transport']"}) + }, + u'uds.osmanager': { + 'Meta': {'ordering': "(u'name',)", 'object_name': 'OSManager'}, + 'comments': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'data': ('django.db.models.fields.TextField', [], {'default': "u''"}), + 'data_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) + }, + u'uds.provider': { + 'Meta': {'ordering': "(u'name',)", 'object_name': 'Provider'}, + 'comments': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'data': ('django.db.models.fields.TextField', [], {'default': "u''"}), + 'data_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) + }, + u'uds.scheduler': { + 'Meta': {'object_name': 'Scheduler'}, + 'frecuency': ('django.db.models.fields.PositiveIntegerField', [], {'default': '86400'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_execution': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}), + 'next_execution': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1972, 7, 1, 0, 0)', 'db_index': 'True'}), + 'owner_server': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '64', 'db_index': 'True'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'X'", 'max_length': '1', 'db_index': 'True'}) + }, + u'uds.service': { + 'Meta': {'ordering': "(u'name',)", 'unique_together': "((u'provider', u'name'),)", 'object_name': 'Service'}, + 'comments': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'data': ('django.db.models.fields.TextField', [], {'default': "u''"}), + 'data_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'provider': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'services'", 'to': u"orm['uds.Provider']"}) + }, + u'uds.statscounters': { + 'Meta': {'object_name': 'StatsCounters', 'db_table': "u'uds_stats_c'"}, + 'counter_type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'owner_id': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}), + 'owner_type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'stamp': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}), + 'value': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}) + }, + u'uds.statsevents': { + 'Meta': {'object_name': 'StatsEvents', 'db_table': "u'uds_stats_e'"}, + 'event_type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'owner_id': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}), + 'owner_type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'stamp': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}) + }, + u'uds.storage': { + 'Meta': {'object_name': 'Storage'}, + 'attr1': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'data': ('django.db.models.fields.TextField', [], {'default': "u''"}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}), + 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}) + }, + u'uds.transport': { + 'Meta': {'ordering': "(u'name',)", 'object_name': 'Transport'}, + 'comments': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'data': ('django.db.models.fields.TextField', [], {'default': "u''"}), + 'data_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'nets_positive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'priority': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}) + }, + u'uds.uniqueid': { + 'Meta': {'ordering': "(u'-seq',)", 'unique_together': "((u'basename', u'seq'),)", 'object_name': 'UniqueId'}, + 'assigned': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'db_index': 'True'}), + 'basename': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'owner': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128', 'db_index': 'True'}), + 'seq': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}), + 'stamp': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}) + }, + u'uds.user': { + 'Meta': {'ordering': "(u'name',)", 'unique_together': "((u'manager', u'name'),)", 'object_name': 'User'}, + 'comments': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_access': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1972, 7, 1, 0, 0)'}), + 'manager': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'users'", 'to': u"orm['uds.Authenticator']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'parent': ('django.db.models.fields.IntegerField', [], {'default': '-1'}), + 'password': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128'}), + 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'staff_member': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '1', 'db_index': 'True'}) + }, + u'uds.userpreference': { + 'Meta': {'object_name': 'UserPreference'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'module': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'preferences'", 'to': u"orm['uds.User']"}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}) + }, + u'uds.userservice': { + 'Meta': {'ordering': "(u'creation_date',)", 'object_name': 'UserService', 'db_table': "u'uds__user_service'"}, + 'cache_level': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'data': ('django.db.models.fields.TextField', [], {'default': "u''"}), + 'deployed_service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'userServices'", 'to': u"orm['uds.DeployedService']"}), + 'friendly_name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'in_use': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'in_use_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1972, 7, 1, 0, 0)'}), + 'os_state': ('django.db.models.fields.CharField', [], {'default': "'P'", 'max_length': '1'}), + 'publication': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'userServices'", 'null': 'True', 'to': u"orm['uds.DeployedServicePublication']"}), + 'src_hostname': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '64'}), + 'src_ip': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '15'}), + 'state': ('django.db.models.fields.CharField', [], {'default': "'P'", 'max_length': '1', 'db_index': 'True'}), + 'state_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'unique_id': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128', 'db_index': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "u'userServices'", 'null': 'True', 'blank': 'True', 'to': u"orm['uds.User']"}) + } + } + + complete_apps = ['uds'] \ No newline at end of file diff --git a/server/src/uds/models.py b/server/src/uds/models.py index 54728e68..3527508c 100644 --- a/server/src/uds/models.py +++ b/server/src/uds/models.py @@ -671,6 +671,7 @@ class User(models.Model): staff_member = models.BooleanField(default = False) # Staff members can login to admin is_admin = models.BooleanField(default = False) # is true, this is a super-admin last_access = models.DateTimeField(default=NEVER) + parent = models.IntegerField(default=-1) class Meta: ''' @@ -741,12 +742,17 @@ class User(models.Model): ''' returns the groups (and metagroups) this user belongs to ''' + if self.parent != -1: + usr = User.objects.get(id=self.parent) + else: + usr = self + grps = list() - for g in self.groups.filter(is_meta=False): + for g in usr.groups.filter(is_meta=False): grps += (g.id,) yield g # Locate metagroups - for g in Group.objects.filter(manager__id=self.manager.id, is_meta=True): + for g in Group.objects.filter(manager__id=usr.manager.id, is_meta=True): gn = g.groups.filter(id__in=grps).count() if gn == g.groups.count(): # If a meta group is empty, all users belongs to it. we can use gn != 0 to check that if it is empty, is not valid # This group matches From a4cc0a47f254b92b4f828c720fc37a54a59f1704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Tue, 14 May 2013 12:16:33 +0000 Subject: [PATCH 06/23] Updated so, when a parent is deleted, all children are also deleted. --- server/src/uds/models.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/uds/models.py b/server/src/uds/models.py index 3527508c..476fc2fd 100644 --- a/server/src/uds/models.py +++ b/server/src/uds/models.py @@ -778,6 +778,9 @@ class User(models.Model): # be removed toDelete.getManager().removeUser(toDelete.name) + # now removes all "child" of this user, if it has children + User.objects.filter(parent=toDelete.id).delete() + # Remove related logs log.clearLogs(toDelete) From 45ad85025d57defa2028af123a0e485d2fc94532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Tue, 14 May 2013 17:38:55 +0000 Subject: [PATCH 07/23] Fixed rdesktop folders redirection --- rdptransport/java/jar/rdp.jar | Bin 25324 -> 25330 bytes .../src/es/virtualcable/rdp/LinuxApplet.java | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/rdptransport/java/jar/rdp.jar b/rdptransport/java/jar/rdp.jar index 34a19c8792f350e7f07f01b0ebe404854df9990a..f13cdcaad9a75e1fd99571c0e54e3788b5b04761 100644 GIT binary patch delta 5466 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 Date: Tue, 14 May 2013 17:39:20 +0000 Subject: [PATCH 08/23] Fixed rdesktop folders redirection (signed jar only) --- server/src/uds/models.py | 5 ++++- server/src/uds/transports/RDP/applet/rdp.jar | Bin 25324 -> 25330 bytes 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/server/src/uds/models.py b/server/src/uds/models.py index 476fc2fd..e4dfc6e9 100644 --- a/server/src/uds/models.py +++ b/server/src/uds/models.py @@ -743,7 +743,10 @@ class User(models.Model): returns the groups (and metagroups) this user belongs to ''' if self.parent != -1: - usr = User.objects.get(id=self.parent) + try: + usr = User.objects.get(id=self.parent) + except: # If parent do not exists + usr = self else: usr = self diff --git a/server/src/uds/transports/RDP/applet/rdp.jar b/server/src/uds/transports/RDP/applet/rdp.jar index 34a19c8792f350e7f07f01b0ebe404854df9990a..f13cdcaad9a75e1fd99571c0e54e3788b5b04761 100644 GIT binary patch delta 5466 zcmZ8lWmpvrus)<94TqK%kd_dUK9qFlp^qRT-Mt_n4Z@+jySqa;C?PE%odO~q(p>br z&wak{?*5r~cIKVgeP(x`cYYy|juA*WstPEmU=YT`IhtM>i^Bv=irAMu2cxfasNYM5 z*r~mv9TP9W-G~T^N5-UKOhb~S!xd=63^HDprP`-boxI&XDqH`pTg}STccJ0`jP2*o zGl&n#{(&0?EWT6JVJ`c+?Ya%mL#hgIK7KpMq>rXx3stheGLX&CCzbRvp;>t}UK}>N zq+bhbgF9``q<8~2>LXFt=PD5FbgV(jP$IH7sFw2Lx|%vZdM11r7D5v1UYf{N$5&)t zx*`I8Vp|pp9XLgHhb)E0i`wruCEt1h$np;TYJz=Cg5-U1oha7IdfciWY-Dgs6 zPs(RU4#8qTQ7rmrO8welBg?!x8GSLh0!gD}f1W^bJ^ErhnJbh!c}=Z*CQi#x(T6W7 zgz_HNvytS2@s(C+!0P$(SZ4^$U3}|KIcp#AaA$RcVznm2y*LLl>R(YK76Npg;p$>c&A}l9==N~Rq zne)W$Q>gl~U1HmflS|-R7O6WmH2<#LU#Dcsz+r-4-+q08kMo#CCKa;ntyeY7Co(?S zt7xOu)8rkh1Rhc0qJ{WGn7udASx_V8q~OY?-f-M)^I(zo)!X2#Lu8)JwbZ`nhz-0x*H>loJQg1~Fxyd9J|w4;^dY^W4c;tDHxgQ})I!{%)V-qA;y<;ny$}Ivy5chWYeMIE{aoxhh;9_!&V= zor-!?N!X96I$#Y>PMtGT+9Gs+39Z@{j4*?ca(3iu{ajK^)3mFh!4twWohoUU9I|iM zc|$N;Kyj!qIj!8JNxxopxMKVSABeRx1SsFtW4V6{eKFr#R(X>1QTa3vE|0g6n$r%C zY{-Qkpnjwp&9)02g6~Mx=%liVhFj<5+I7v*{xFG9wEvq#^nbo&bu?(C$N>7} zs}pIqb2|ekC8jI$q_U}>hmuNg3W>S;c?r@|@M|r05mD*x-b?c+oRARM;_-XRBp~4~ zZEErK{-U1P(EHNdHp>7FA_|XON@>dS z6?)=(oiwG=lb7o$QNhfyi6)PJi;*L5c=f((CiAz|26y2E1GR3 zToH$|?);Gk8p;ExQ^e6k{$u?0cH)Wt1$FlX?2rCl<|G%w{A<|IvmyO8QW>@}{u;sT zmAHQmejx)a6s+`0c!G=ofaRh2+4XMANY1;V)vE$u2KkqCKdp8Q+DWw@5jETOFJm7rgeMkypp*O+a^s-oZh^6fw=VCaXDt?Y;xMi zvkbHPnZd|wC-;#O;E9`ZKD*fNcVxo?vqr5n`Z)Y-eajNP~tl&ucmcO zRGErM-&uvYMnY!j zx-{HwL0;x{hUQea5+8)yyonIGOcB*Y_UBuo1PqF1X;5t!FfAqWJ`QR@AD=g;$hT39 zOQe9mLE@4xlAJ--&>=bD7uK+F5W4xQHp?RMavj&y@Y_8}jkrl7G_3EVOW@wT(eiBe z?m>#|wFPQp0|`>+gXy6KaTXxFMyWZA3jILVXA zP#niqzL=e9`wiD&3mAAzbhGfUqgy6_A#?a{hO;orWb6N0?kTnzn)L>9M)dpuYMcX^ z1YCfqdkXjz>A~6c=+R1p{+`0$%}|%Zym;^F!x7?oJbl`uk18`a1x0z zI*Xh4CvqMd+T9zqbNOeD>?Q=RAFhg`{}^4lMTU&ZGcI5bnC4n?xP@-G4qT$3i;8Et z^N3Mgyh7q2dU*(;XoqCR;H7!!$|wf=iaBEhTs{LB3FB{)vc#zGA4Q@iceo~ACZZ^Mp3Ukh|Jh=<@J*<*lu9VX7wGWW`6oTa?dro zji@p5o(YAN3|(;>fF^CH(uL=spF(`D`EFddFaHAOK z60kPr6QEbBN={>=j843avtM~B=Q^eULH}%bd084(CD+UPi-nr~>PHh=w2OX8gP$%d zIp@^6gYeEQOBb(z@cvtP*kLhM!N=!P*JiWgbU1eu@i}fz{P(T!I~0ce0B&1GLm!18#ufP(=b zG5CUutW5*`F5KVkiD0{T^ZLp@9SXql`ukml&9dpr!OkEq*Q%K^;_2Ev&J9DIYDkh} zU5S*Usp(1<*$cEpp?;A&z3h_S2n7aVvFQ%Lr1#wNlPJ~MEpP8G%7y5<&k{TJwLolg z8GqHPv3ZY2#z0v!e`!7I(EPg#ccObB;C`dfEqr{tkO>3KZRp^T!ay#1|259l(sHXO z1Ep8%!uaO7KaJ`wnmW@`cMJwpaOi~{S1b-`0!;x_jNcKja!{9(1okB zkE+rgE>3gyOB_a+90^=4;Ky#rV|O}qKD>~23@%~9g}%(TI(F>m(Y8j&_HmDY8vrfqc^E<>QwvY`;xdD$ha3UZ52)t;Im4dRwpY@#eBv;u{jon z8+IUq7LOvb;DVVA2p#h+QMcNo=NYf&Xk{E3SctnS{}2o;g%7*J%uAC7e-CPLWgKV~ zXC@t>(NA1`6pNUAh03|s^8|gu(J6ARq9sSK-2&Z$(O(SE$Jfgv5lYf$KOMsstw*Sq z$AIftiFdam^dN|9SOhkQ{hj`bAyDYUl6b8_L&O{VRWEEZ2q_PP-cOo|q{Z_il z<#e%|4EuN&7a8`2Ju?}>C#gynhI7IRz!!JrDmd&H&6?PvEY5Lj{%bo@cp}eZK$a!Y3e4Fkx#v z-FW4oSzP1mO`i;J)2P_Sd91UM+Kq`_fR1w+f5O1|VwL9qxU@$Pe;Wiyhg@<6-hqjI+*p3Qq<($)CnQN5Nxal=YANspQ>(f+iXiPUZn zw=MqXhCGinH=6x%f=hgJFXx#(VC!1_6CCS{@TO#bKi00 zQbI1PWn!xQ_a0i_5SO^pPib?L^zz}qE%vx;GBq1QEiDk}^4~(E=Grs|iW%?9j@Uh2 zVcIw13#G+u&H6UrG*uP*a)LAjNl<85^fkh^n3>|WGuTm|%Z^n46|{HA5m0o=322t? zGcxy>s=0eK=5w2+dJpym`Cu_F zOBI-P1$4~esp(BNuJscSy+iq-rJ96b|HK9H#c7s*vP&u?i7Is&Ge&~{jkBaomthMN zVT9Quz_nm7cL6WZ8D5rP1;FbAxoIE1JPO5k?>y^^U}WA0w>{PYk5`Z+n`Lc1(TZ(U z@bJ#h_)XUmUzu2HiZ!gd!b2rmmbeg4l+~u88MgRykf}uEQb;;s+f;Wud`_XXeA|s~ zb63{t7EkVSxhz zJtqHu(yvZIvjXL>X1mrw`$y@aK#l*=b>{l-kue{ZauR>{E$~CbS2Tanzcnu*=--DS zT-JyV<4?>VsR?&9B0&PfLyhSF@WU&ND3QkC14gue(XR&tfnyl|gV>BIk&@xB{})*s zQ$9K+0D;ua9N@I3WV8?25_pw6kA7i*K%Dp>(9?g{1Tm1qMaY@pKaH{f5?>lqBAe2~ zz3HFA*-ig($(c|h$1uQ47--p46_Aj@pnukle`uu;*bOGQAdvJE5QyPFv|jKU6P~}N zRmJ*VJ;nloz7c~!%>RjD6M8634mT3Q|5J8RO5__oI1-E+{v3)9_k;a&Ur`TkBmDy3tDzf{2#rqjwo&^xh+c7%e&pqacZaX!Y0vH$GJm|g@1DsC7}{Xz=#ou zSCKGv(9$crbLNJP!A%kt{S6J;!bs+)a%bEaz#YQwAXW0!Ntj(j-HWy{4EmAZ`l|6; zYI@5{PPrr+8b5!^KlpFR{O{aXTg-asGPKgM(s4IyXm(T(b==S$DXWg4B&PpLBKZ8k z#(Y&`SzJaB5Cy-m=#Adh?8}GQU=W+?^Szl9&R@lO^aBH4-O>lA#?jrgNIo% zcAXfEK2rL2Zd+}@k2g-QGGP42k24GfE(V#Z3@U$S9o6TpSIf(N+4dHF=xijVvnG8K z!nUfPB;@MGA{EKJtP()-wO7*Y99pWO2Jw#5hPr&YX4WLfD{-_BsfhlGpM-EA*#`8p zMv$T&s`)O8!p9goM9#0ttkXqg}VP?p_&P>vz2bN+6yA{Ns2xD+q3OY}q?@piZ64w750%i^O% z?=YjXN(813- zS{WOrdbhsxz@h2k!Wk_QSayt6EOdvzpe;c0g30xY=lLi-j}J@zig;sdXdci7!Q@Do zWib()mT<&dw$qhDC*x7g{)p(*7S8r7#JkwLyiHPlp~Z}3ydgH} zttpDKq)J8-ErfO*>5frbt!`^V+Uj`t@aCfD3;-;wwmVo@|EeCOBS0L%BV;8)WS=LG z$>nwh+vv#gK;(5;PDbA#7mhgcGNGvE!}T(+fW+0elf=Jq`gs)&^Mx6Rv$F#r497Hy zKcasNyhEO@$p32Ylw>bRTXEzGlQ+{$-n8_=m?)*RXG4I#CPiKrS1$u!!s$F2kJn~l z-r{uEOz78pftf^iHybg09rXmoX~-yuL`+PKAA%&t7nF7}}+HBmd+-j5&-;uBQ!+(O>JRojxM$h)21 zvHJFX`If6NhrEn0=IF>2{>;1RY&g5)Sruvv)V$US)^1Gn`bCF`->5#1oOcisaVr~m zCK^`cH3f=f(h@0}<7jwE=9~=Q(d{0;AnunsfVkyySg)YsWT5$nUR9vf>9NSg*nO%j zD?!65Tl}6RPUA<)K>o-=IZ~*Sq*8{@Atbom`F$t6=}Wa4wS<$Icwer}CRv3v%)qn8 zcFef-1^(`kF&X0UlRe;NMx$lawX&m;=dnSId)uD>!sa^3zF~^Q_}Is9^I~ZqlR`Ff zJ=_km1G$Qu8b_AWD27uMspVfc#fMZEiLL(}sqUPQo6v-2Yf%oh=BL(r&ZmDyjtst7 zfv>a1N+rK=K8^Dqf&nVE0UjUK9X(@codbYm*IgkSG2RGGl(aR-wJlO2{Yrkclf08^ z*S;$T&vig`LY3`-P^Li8x)tGe_%vI(ruCsg_4=FKG>)>_vUWh!`kiVW7OMGb`3mH0 zoL>CM$X1Ex$mgKn^$J)HYXQ==O&@55CO+LO0QH_eM9cmy#4wvN8lRg&GzI>*5P`S< zu}W4TEdb$)?Zy!3@p~pq!o0z-<7XQhK_pqT*itD!X1(CGnYE$SP{2vGPLIigbCvM> z*IF&oC*LVBdA?`!_@Ff1mF30Y?mcz2qR9!jZ0k%*GPpo{YNmPTbrgP@%d8+rXJ1?&r9wx zM;X;nnLXxEP8DF*(Xh<&$f$T& z7!ipbg$$*ne9FOdd5INukv$D{un~&89Bn@PneNtnhH>kLy*jQ$1L|~$&vFP#5Y?gy zmGRp)s3-jlkSPj@toS3z-kqZ?Zz;HcU=qPtR?VPkLRd268{+t^8mrFpJBFz`5xVBzgK7pg3C$2yN;hU_xxzj3-Lf z)A^grx0jl1BUU!xM}AVj^@*id5USt5H`K@(@uX!MWqUucm5?;Zs+q&lY-joc?)|i;JT6rWw?pyL?D8~Od)r? zw9})`8OPw3K)|Dr_$s^#09s6 z-D%goDY?E`+4m=d1Ut?=BBxA~)q}^9^krdwW!);3B*}B;?Xa(@y&^$iX9*7~*H1B& zKAv;w+JaljL^@Q^DODk^Ljfd_uAjx%3o4br2baxA`B+fQ=b znq$pl}&=>oDW32mAft{)L zwc5lQvB5sWJvQYp1!RBf;4+G2iMWS%gkkf7MR0W)D{wJC--@^DQ+nW-1UvSA7*%~< z5!87ve29AR?0!=fTL$90?@3;i#1E#4dxWB^pGIo!zVD@(dl|Fa!1rX)o^q=u;{MvDT>$o^TDKmOvO{55cZWP`JMrRz zq!Iae&-#_vJ_uk6w*3Ls_pR)IgQxL`o4wm^aezUgqcMWoLl@C(q+1dFN4!UDeQ(`< z*pkdE*5evqnTx75VqZEiz}Ujzvl<8I{R4`CBtj0oEK#3QuH=Knq9<E-i-QDb=mD=ovVz;JA$mqFM^s#MwS1)EX6j=b+xOb!%NiV1t}VF%#0toN({2J-Wy zf6UbE;Nw|CJRpe6=8{K0>Fi!7V`a4>122Q+=5wu^RMAYSM>uud$dcNyP?G*(=^{N1 z?Ulmdg2J$9fzM&V>Pc^9I$A}K;yOX6iVF9Rbc5Q;wE`czEfeY9&z2eJ%ynz#c5j?j zb3Ibf{idD69AQb&qxmv3cqvL>oPsQFhV?rU&5SPhT6hZL1l6kDZfoRBCRqXFqGXMT z4x~ry^cel>@|H?`pUaS-80vsl<%}rdusSS0rJ7+CO-S3S6{UBYTUa-aqCPBtu&3(O z7vo(39{tRbzsZ}Bd9*f3FMiKtv&Jp0j>3%i@^h!~Su-TYJ5QQ8z=+NM&H7s1bSvze zM}I4PGi<6gN;V)Q3@~#;tDUTQe(;Y*I1fAI*3-;eGar3{nY<_285It``qL zr^>JU@+x|L_31lWW$!x^7LL)8o!JF~KX5BC?;6kcfTVBB@Uk4-R2F zCdv^fjMJmC&!Yacp)XHi(Jf(po#+E1Q-Ms*H|gq09X2#7JQKxWOs5Tff7czq;|5~Z zsn`>(9%mYooUmj_H<*r@RdGY?g%~;cTKgVtv%<9DEUoyv_P3b=t!nSzFsd>OKjk$1 z)s3`8bo&;`Fg{1oO%^?ggXs(P);Ds0Dx`Tnr=S^X^5&)Jyz_LiA`T z5VN|qC{;KKtmw?!sFO`@cLe%A}O8ZXL*fD>f<6cZYC65FqlRG7WY6h)uS(8Skk-R5TxxjEJ$w_d#BA$5roT_E z784O&JX!=^xI6eoLnN)iI;4IGx{ACK zgo5~_`L%C(5rz+AvvYRLX{qXi)CvAnoJyF=iYtaxTnJ13bcd{*R!~44C)Q~;MOWxz zS{s}V(0Gudi-wek8re*ti6(7K^O_zaX|n~5yta3fYnRzMdsBG^g{&A7aR0lA+V{CyN25-!Pq@EWnV@Q)h}u2_hU=L~*s9Zt zhD2vEWF|6h8&5yK?mHtU>?fDy-`+EIYB@L*saa zOd%5uEL+-P`t=h@INR=JOe2WEg|NSLKi*d{*>6~i!G9h4^Ql-w=(dn$=y^>c!p->A ztR3~NW?*`GG>OgrO?kU}jdTwnC4Gf~ri=?B~o+A1J>^s{lR~DDk^u#c;Rf02(BY}Y{tKSKs&h)x zH~mX1!wl7z+^H>L4!E0K)*4~!2UCx1=|a?&Otus&PBPerMP6sLv=g?Weqa0$Zh#~049<=U^D``$`C0{t{JuFd3f z*stUwUw?RpsIaM4Q*5kv%}&VHpqKC4TkoM=ozhOW zx~z57^<2TZ(t4GEzOVWc2*rs_^e@43+t}>F z^HA3^ri;eR0e;v6!g_zCJ54euXVV)Hr#KXtX>3rN6B*ZrC^iCd&-g@;6z` zbE8;0uM2Fs4&uh^#D0}BSrIxTCFwYD4)q+<+N523SNxQ%uK~Nn2AixLfa*}1=y$1O znm0zjm?nAnv|pwqhuP8~O&*k`D4nH@XTFLtBB!XHVk_-Ih*NY!EQx#~&4xHhEeak+ zLYIYoV(!neF?FJrRlQ^Uc4%+V+80}9x#wZtW*y`Z-eUMhe%F+7Vqz(BBG$^3j;jh) z2c3V_XN+J%^PBKK&UC!9fILP)Tk}rn5@(FwPBh1Vt=?n( z*c4Q9!k&Q`4-AoT6k6Gp+9#dwlswJ5=UetT{`V%+ zLfK->;rW%XF#?Nuh`F8p{Aqx8c9-(8WPrvW@Z(Yh=*`yR5>;|_+Bu9b#`rbi2l$b+v=%D$Jg9wI|kGust`f zX-RUoAU9JRm^B&5B83m!&pmlCtXfD}X0H{6&uX4qt=t7xFkma07ZOJnnK}ux0io@?mN8S&QZKDSr@%GrD(M?_W^-XurYldF0OC>UU8JQGhvAGg z&_YDPe7j}A)YCb|I##j)cw9)>mI`0a8d^3g?Q(Fw@y@q}BR{ccw!UM(D1RuAjw2MV z^!DNV@=3lx8pA?37{NLg2LUHGm?(cm{%rK-&v}-ML=`j6# zd}udry%zTo1Ae#P()mbt_D+lC0q?S2WDg>y6vW2NqA+(p1Ip&E_jog9R#y<|+GP># z^;43!!-dwvs4g>=tyj&cq(~A_$?@)E$2!e-l;p41F;DZS3NS8|GubW1`q4PVL{ND= zf@B)#eU4WGtdQ$J8s;(gwtVovnbVZg%2fCb#3;Uj=8TR$l^W;Y5c^O?e|d|j^t(?P z9jr*Ou*m8E5B62+=%a9M!42CO_#et6Fopex>72|$00cMfIEC9*3-Sai$^6&*C+|{X z{quT;)HG*h`5W_3%%u8f2o@y}DGa3H(^kg@P-Fe4<97pz3T2`@X(BfOO-qP{Me(l* zgGjVF3-jNYjpQF_x*K*4x?$IU$H*c{VJx?>c^?MCPC-Kc*K@z|ej#IFOt)hw7zn^h zk1U7ZMgD*>-b#ONBpBPRBx1pED`{DP0CDWMQi#RfTPgiU^5wsk1}#8;=@z+jBk@Sz zO3ZL(mcQHk=NWVUD}_j<+rUO83go;6@og?M?j#t~n>>PUa_0V5@MGi`xWw(UTW}Bn zV}v9(7WjY16} Date: Thu, 16 May 2013 10:37:33 +0000 Subject: [PATCH 09/23] * Fixed a bug that made deployed services from services that do not need publication appear as much times as valid groups for that deployed service * Removed annoying exception logging (user creation for internaldb when user already exists, but error is managed so it do no have to be logged) * Minor aesthetic fix on User class * Fixed name generators so if it consumes all range, an exception is generated * Fixed ovirt linked vm so it treats no more names error * Fixed user modify operation, so if user is derived Groups are not saved (they will be got from parent user) --- server/src/uds/auths/InternalDB/Authenticator.py | 2 +- server/src/uds/core/auths/User.py | 4 +--- server/src/uds/core/util/UniqueNameGenerator.py | 2 ++ server/src/uds/models.py | 2 +- .../src/uds/services/OVirt/OVirtLinkedDeployment.py | 13 +++++++++++-- server/src/uds/xmlrpc/auths/Users.py | 2 +- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/server/src/uds/auths/InternalDB/Authenticator.py b/server/src/uds/auths/InternalDB/Authenticator.py index 5ac99fdb..6d6defa9 100644 --- a/server/src/uds/auths/InternalDB/Authenticator.py +++ b/server/src/uds/auths/InternalDB/Authenticator.py @@ -90,7 +90,7 @@ class InternalDBAuth(Authenticator): usr.parent = parent usr.save() except: - logger.exception('Exception') + pass # User already exists username = newUsername return username diff --git a/server/src/uds/core/auths/User.py b/server/src/uds/core/auths/User.py index caabbaf7..de69f0b6 100644 --- a/server/src/uds/core/auths/User.py +++ b/server/src/uds/core/auths/User.py @@ -86,9 +86,7 @@ class User(object): else: # From db usr = DbUser.objects.get(pk=self._dbUser.id) - self._groups = [] - for g in usr.getGroups(): - self._groups.append(Group(g)) + self._groups = [Group(g) for g in usr.getGroups()] return self._groups diff --git a/server/src/uds/core/util/UniqueNameGenerator.py b/server/src/uds/core/util/UniqueNameGenerator.py index 83927836..fd882900 100644 --- a/server/src/uds/core/util/UniqueNameGenerator.py +++ b/server/src/uds/core/util/UniqueNameGenerator.py @@ -42,6 +42,8 @@ class UniqueNameGenerator(UniqueIDGenerator): super(UniqueNameGenerator, self).__init__('name', owner, ) def __toName(self, seq, length): + if seq == -1: + raise KeyError('No more names available. Please, increase service digits.') return "%s%0*d" % (self._baseName, length, seq) def get(self, baseName, length=5): diff --git a/server/src/uds/models.py b/server/src/uds/models.py index e4dfc6e9..8bc0b49a 100644 --- a/server/src/uds/models.py +++ b/server/src/uds/models.py @@ -1073,7 +1073,7 @@ class DeployedService(models.Model): # Now get deployed services that DO NOT NEED publication doNotNeedPublishing = [ t.type() for t in services.factory().servicesThatDoNotNeedPublication() ] list2 = DeployedService.objects.filter(assignedGroups__in=groups, assignedGroups__state__exact=State.ACTIVE, service__data_type__in=doNotNeedPublishing, state = State.ACTIVE) - return [ r for r in list1 ] + [ r for r in list2 ] + return list(set([ r for r in list1 ] + [ r for r in list2 ])) def publish(self): diff --git a/server/src/uds/services/OVirt/OVirtLinkedDeployment.py b/server/src/uds/services/OVirt/OVirtLinkedDeployment.py index d099a146..d4a6ef83 100644 --- a/server/src/uds/services/OVirt/OVirtLinkedDeployment.py +++ b/server/src/uds/services/OVirt/OVirtLinkedDeployment.py @@ -42,6 +42,8 @@ logger = logging.getLogger(__name__) opCreate, opStart, opStop, opSuspend, opRemove, opWait, opError, opFinish, opRetry, opChangeMac = range(10) +NO_MORE_NAMES = 'NO-NAME-ERROR' + class OVirtLinkedDeployment(UserDeployment): ''' This class generates the user consumable elements of the service tree. @@ -103,7 +105,10 @@ class OVirtLinkedDeployment(UserDeployment): generate more names. (Generator are simple utility classes) ''' if self._name == '': - self._name = self.nameGenerator().get( self.service().getBaseName(), self.service().getLenName() ) + try: + self._name = self.nameGenerator().get( self.service().getBaseName(), self.service().getLenName() ) + except KeyError: + return NO_MORE_NAMES return self._name @@ -323,7 +328,11 @@ class OVirtLinkedDeployment(UserDeployment): Deploys a machine from template for user/cache ''' templateId = self.publication().getTemplateId() - name = self.service().sanitizeVmName(self.getName()) # oVirt don't let us to create machines with more than 15 chars!!! + name = self.getName() + if name == NO_MORE_NAMES: + raise Exception('No more names available for this service. (Increase digits for this service to fix)') + + name = self.service().sanitizeVmName(name) # oVirt don't let us to create machines with more than 15 chars!!! comments = 'UDS Linked clone' self._vmid = self.service().deployFromTemplate(name, comments, templateId) diff --git a/server/src/uds/xmlrpc/auths/Users.py b/server/src/uds/xmlrpc/auths/Users.py index 0e914a94..fe0ba9ef 100644 --- a/server/src/uds/xmlrpc/auths/Users.py +++ b/server/src/uds/xmlrpc/auths/Users.py @@ -138,7 +138,7 @@ def modifyUser(credentials, usr): user.state = usr['state'] user.save() # Now add/removes groups acordly - if auth.isExternalSource == False: + if auth.isExternalSource == False and user.parent == -1: newGrps = {} knownGrps = user.groups.all() # Add new groups, and keep a dict of all groups selected From c733822cafa16b3cc7a78e7ece07ed20a9627cbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Thu, 30 May 2013 12:10:24 +0000 Subject: [PATCH 10/23] * Updated jar to fix smartcards redirection on linux --- server/src/uds/transports/RDP/applet/rdp.jar | Bin 25330 -> 25354 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/server/src/uds/transports/RDP/applet/rdp.jar b/server/src/uds/transports/RDP/applet/rdp.jar index f13cdcaad9a75e1fd99571c0e54e3788b5b04761..22b7de9048079e47015fcce3eabea55c7febe491 100644 GIT binary patch delta 5470 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 E02XWv9smFU delta 5500 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 S5yg6hh!Z$I`ijBd8vh63ZwIdc From f16de6baf7de4ff8bd0ea9483eea71e190dfaa9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Thu, 30 May 2013 12:11:15 +0000 Subject: [PATCH 11/23] Fixed smartcard redirection on linux (forgot to add parameter in case of smartcards). Thanks to Virginio for reporting :-) --- rdptransport/java/src/es/virtualcable/rdp/LinuxApplet.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rdptransport/java/src/es/virtualcable/rdp/LinuxApplet.java b/rdptransport/java/src/es/virtualcable/rdp/LinuxApplet.java index befc08a0..4d67c41c 100644 --- a/rdptransport/java/src/es/virtualcable/rdp/LinuxApplet.java +++ b/rdptransport/java/src/es/virtualcable/rdp/LinuxApplet.java @@ -94,6 +94,9 @@ public class LinuxApplet implements OsApplet { else exec.add("-g" + width + "x" + height); + if (redirectSmartcards) + exec.add("-r scard"); + exec.add("-TUDS-RDP"); exec.add("-P"); From 34a4b8b4dc95769b20931e8975a33eb194540d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Thu, 30 May 2013 12:11:30 +0000 Subject: [PATCH 12/23] Fixed smartcard redirection on linux (forgot to add parameter in case of smartcards). Thanks to Virginio for reporting :-) --- rdptransport/java/jar/rdp.jar | Bin 25330 -> 25354 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rdptransport/java/jar/rdp.jar b/rdptransport/java/jar/rdp.jar index f13cdcaad9a75e1fd99571c0e54e3788b5b04761..22b7de9048079e47015fcce3eabea55c7febe491 100644 GIT binary patch delta 5470 zcmZ9QbyQT{*T;vUyTPHmVFUqbr8}e*Wv8OoL@29%u=_Bs zh8NAgEF`IJfw?S6z=5zja+B;;w9X-#zOq&Z!^K9L?|)!c%T4cM&<8|95}L2$#+ukx zGJ{{;Zge65kzlpVGGy1+r`M>bmcm#=IILHRVQ*aqoLO>p zozN?av~=`Br3(Z0MhKMib{0;H;-(d?kg?~vH}sxqK{5`vy%UM7*y@AL^~X7!P#T^c z{LFxIi{DBLp?waRuIid`&p&A|sHIV<f2;Q!wrR&ELjy<4Lpl8I;FT z0xH=ySgqaC%uuK*u}Zr^Z{kgC8&D@i{&V$nl077#y{>HWKBubvbX0fK-9RVew~j{l~FLSrgwDRZoA{Hsq0d2ZKK8Pm-7B zA|GAVv>sgEIqm>tKN6#|8dRbE^9`LVU1kyKo?+*fpm-s5P@MB}T_bjQ7)S~p z2EWnr(yp4_+R58^iAnn_h7E8_Y`JGHz%;W@?+z{C+)Dc(_6`oPKB)Zw`ea@xm6+Bu zGmNO8hu09yb0mg1q2jxcR>(Tlp+9 z&)7`bz67^_{N&ieN~39y3AX`TXYebeCgvquj)(SqI6NrRj-PvBrm#v0V1BM6xkwbP z8UuwfCiK5lZ>+TAm`5Wy^xw%4a||BtSXO#})c4|wC~`a;?M%;#d@s$Pxww_9-&q>} zghiYPF_BC5UO^+RWKU%MIC}b^VMIc2EaV+-t-?~84Q!(Q&sljDTAs=lWvbCe3#hC` zt5B?!&w{g=k$}=T1ogq}!)~P8!MtvsVL6mgreuz4*)0P%*dmwuNXmP48fz=VB7e=b zneer{NMJ(_j%op6H^esPnx!bjdC4FD(rDXccRNYLiWFZPsBNb7wiwy>laP+!o@TJe z8)={|aT8%i^onAB;ub>z+}{7kPw?L+1j92nJRX}6g8bhmL};m^MJ5G8@2$wDl=YS! z_B7|y{PuUDk>rXq;D-8}*C#Wp%ET{5jlFkt3VMHvUMSZu$cK?rkM1SuJa-(9JFe8sntx=R7ZMPb`mPDtzbc2gr1Nw%+ zwQ!_f`RV(9Qc|wZ`*UtZ%r?fG2ePX4I0%ow2r61#k-?u_vbrfq(<`Y56%w82!m`q+>^TGScaH(VmPjj#8W_LqOO7 z^REH>EF%C#_odMBdT0g73qzty6OVK&VI{=9NjkkfXZSvr!WCPRJn^?S|S?% zS3&4hoK1nXq>-Q{LduR^H9#v0H?nYxX?`_UwNEu7cIgzKxA`snm_bK1JmxJT89r>N z8RO7|Eh|y|>?)$+ngi7as;Up^MaQ*G%_&pqn`6w1hdoX7N;4R zR>~Jbpw?iovR=6=?1V+54r5`Gex8p^_WUlWHDl89!hHL&tfUuxA<5w?_Iackn$V6+ zk>?VG)xSy(&;uNs)*x>iD^++*eOy-zncU4tuQKArS+C$Wd(HeWg=P%Fs(1?(`Y2sg zGER!DUf73(c*F7Ky9}RW*+7HKWEs=Di%$k)z0`39sL=?p=D1l`%wnFLIV+A|(Oc_6p zZtMa4b+Y}9Dl-$DVikV-r+=28*63(Q;TjVz(ujJqksN4M7#zX*EjTbTAx^Zjjq$h4 zI<|;xVTKU~kAVB&=t;_TrDjP-riIz~%T};+^`HX$qEo%kIfpuIL%vt#hO)h#`(>I^ zaM)4#Rv4xO>!J5rh#!<)Ag+3jc%dWaaHij4HYeA(n;PX5^~OvHG_0f+y?c*nv*MzG zs2x#p!{?jf-WOF*=;zL49zEYk$-c)!J+mchqkKKiTKGtu$S z*YJgk_O@Ea(Eh7}YB`^Vr8W=7pi58jm;>zF5DHl=U)310*s>S#Gq33bd)&cXTIaXAGl4A^3wh{&G=E$bpg3W!8iOu=DpaC%*?g{F{)usK zSQGnT!peS}P}BzqQ|C=qI6u~+gbp5 z!E`-*b<}txh!Mu6wiJ%|x)s{VO>TmBt}Fe%Q>;icyN(WjMN{k_l#QPoN~TRkc1*9u zF}D&)b6tlffjN2CuFZKTZRg!HgTL8+YlK97X{9@6G6d7(x)Pk zyftNqeTh3SfGfT2xR_;Qp9OL-cjK(i9qRqsSQSVsR>GQ_ojtR|z-$!VNzkl!kC}L@ zuS%ey(}pF7JF6bL545%7Un@7&?pHds_KHvzw4j5&!SPCYR-RuX;XY4w?>Shs$LVO_ z1mI2h$T$ZHMNTa>W?PJUHl~E*#c7mGAkvlD*v^6Vywm|A*Sz~uD#e%d`IN4X->9W< z*+_Xk>G4RloW2XwXsdbY&h#XGSznk!JXk$FtCu&Ki-0BWBEC^~a4%gcU77to2Pyws z$7wh;s28s(H3Iu^DtDCVPGXq{vsvBbAosU(_{dNl22O(>*in)6MNq^tC1pHCvF`T! z`+*xKjD8P%;|kgvHoDS?@*efP{srot@3uz0)W-4{I9t7;w{=p{2ovXtJtx@dqH@c= z#-F-SF}QQS-dQ$_x=)O?~P?S>F|CH zWIvVJHa{IXEB1pwQW%`gUhRRh#IUE`hUIPb-1(3qHNs|oM<+kuQelEg^RzMHt*#6- z#VPw!lKG1YKiwRLs7;koMV6dAfv@?;y-Pn-G{*2YeXcSEqZy`LB(4a!!W^p=|19g2 zyRI5hH6V>a@w~{Ku$pa9I*lzRiu!dOCkmLZc9`yLZENznpMhB)iGP1M^Q$A-Q z)2aW7dlji6i0Mn^)IaxHNTu{s6JsqeG}1V=y-X3YCGT~m47ZO!FUPMwtmWo8wZbcs zJT~I}yY9kli8~qYB88k0qCBM#A^oT#Cbrx$>Y*H~v$e5aR{xT1IvgCsHfHnhwl^9E z_ZUo|{H!Ey{FH83Rq|Ujwh*gA-2Qpjh^_%5*Gn??;LI&%Tz^_sy&2sFUFMBEXa&EU z;LG^YRKY@JiJYklA-{Kbg1?Nr^ux}zvB2}bi+$6SG!>fu`75h8t-TNas z$43`tHq8btx8udC@(9m%#qquUNsLpt z!wsx4??A&|Bz#i0UR;E! z6}_zhzT(?1S3cH1LEQN>$hf52FV?@l+s)i)-hbE-T}mrx2+@Rhv%}BFY&5NPesOvi zpzW6WLtfDX17?ejw=e9oY7}B1Rbq6qewwWey#~qzjnCT}TwY*$B_~=FPglA-c5v=? z*osX%cB7k7S#bKLPuY;cp`KI@o(M;tDUD?`Z2RTni$ThCLBd@q_QW2!8i(Ed6}SuC z;)i(jbs8cOja`$w1XZ*2T;^Gx_)F`Ihcj+X;>B%La0Jw9Vu3<<2Q3^VTa6ZDL+(;r zgD5#~w3v6XQRj|zW$V=8H!q()Miu&{8MSjB#Gsqza73YEt7>Kd^&zu40*Pe%VSF4#YQ<*v@~B*bWX|`f zbh@A$UZlmpmxX5s)jTp%EGyCa?gP7zv!>My<+>BEh*1;7+25!(jqCm$>@QJGfMEhD zBXP*hXkPa^(i#^pBmi5#B6=es-c;fzyC_qLp;HYGzX(=(Qy|Ld$gIgpH*fQs{v%n1 zxKF`8{r6v;wgz;iDnqu!W_dwe>y8!j_A;W)l`@O8H8fIb&|S~h_R^wo7Y)B7eO zq%pU^It9sTusf;- z%PCZl6pSalbNm8++aJoYeZoYH!ENaFfOmt2Kh!j{!&TAf z?1Jw@^Z|WjP*7VMGP)7{iGMksf!(m8Xbnw7GRSK0EHYxNhvH^YIWIy`KQHE6uA=M9 zXtwd;x-sG(l7%I^BeZ)5Xg23ir*nwC){OLP{xZ1_ytClOxsqMKbFz#~_K9!qDg_8% zhTF3c{wl&YgNaUmYyf}@^#2rL)f-JX;**p^&_(`70HQ;T|B-uk`awXn$1$D6-w_P# z!cgeR`74ECFO3Ay|E@eKO_-;V0QI8?lqh>~n9B30kV!EB0DQo|pK;iz5zSM~ZsO|b zvqx+o>1B&^5J+wBPQfe=+f674_8UkQ{yf2Bz@fX{Fg4|(cW}+xJhJWGz E02XWv9smFU delta 5500 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 S5yg6hh!Z$I`ijBd8vh63ZwIdc From ed69006a844e18064d6ac51a4659da4d0b6508bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Tue, 4 Jun 2013 14:07:47 +0000 Subject: [PATCH 13/23] Fixed smartcard redirection on linux (forgot to add parameter in case of smartcards). Thanks to Virginio for reporting :-) --- server/src/uds/transports/RDP/applet/rdp.jar | Bin 25354 -> 25350 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/server/src/uds/transports/RDP/applet/rdp.jar b/server/src/uds/transports/RDP/applet/rdp.jar index 22b7de9048079e47015fcce3eabea55c7febe491..f79446d0a1595c782a2e73fd0af440baec0e1d92 100644 GIT binary patch delta 4249 zcmZ8kXH*kw*9{=O_uiXykRnAvi6B)VKrTf>kzN895fGF}C_<1LqzO_5Btb5O-V_W$ ziu7{ny$VS0<-@qvyRP5NpR>=i&z>_gXJ+jOfg^~-5l|cJ6Ww3}kX@f!uds>KqOdM# zzAO{T?8^_$K-MX9ZX$9ivvqj*J!#>4tsfj+z8FUlv@3;f?=yakNhfx%*El`@aje0D zj-isfc5z}m|_91ZrZ0Z#L~Sv&fgbpNhtp@3u4SZ z5cte6x>m=fLp4F_AwIF?QMdoDyA;;E`1D8fl_?$33VfGk{sxYXAcKL9<$(D%#T)H8 zPb1gKJ8!?Bn)oAmz;SUJtLL6#HFK3~{|0QBSj&+g74!<tF zkwd0Jy@WfUe(-Py$Q3PPe-+f35|Z6j_CdTp#@N#9pF>`VAdSV~zzrwr@ANleri8i# ze&2F|oN)}(Z}!|1SidpXeg0~O5GndLBKREnXv%0)+yAWSEqe6srjOfz9b2VULaR;Q z#zYf#@0|4`_jgOF(;M_5n}fw==E!56Q$pzm-(l6#f9!Zufmv-&5A|Wm+|4&IDWUKd zZ4YF=N^~;RNasL6kmz8E@!1M0yueIxX2Qduvd;-s$?2W3BCNsTKxsceb8n}eh#43Pg2N+QgW3Y2e|;|)^L6b&vn>Z{E0TGL1meB#&3d}m+J*N;1E%1f^SGdI7=R>UU>-X&azqdmBaN(Wt><`x_(X5Vxax~(WzFK8t2z^v5H=hS}cn_ z;$$_?*ySWUL*9hb^rS@|_&OJktE->OV72=U6$1~|1x9*1PmifLO&#mfRA0O85a5^gC6RioV$Dd3YMZ)~>IR8dDlaj)t>>DCG~GM4^m^xlzARCO?d8|-T3t4<^~hEM zL0>^fHsRKh}5GKwj29k0S=?45XiEzK116v>8en^h5Be z!Pm{s68*2)>t5MlSfmj(C+39Il$humV2r5E2!93mYzwVA9$*L=BuVkha_nm4_`q90 zf&d?639gdigDA;QH26S8?J*@jNYhpzhOr#@%P`j5fnIW2)m&^RPK9m0_NQe#R@3d= z;axm-CekRdooEV2s<0!MXP~p$7D=@e-wPS!oY;u2y6MDoCh2*O1w(QEGSZ5>=N6-( z%?A_tM@1ywl(V+%`+KStBv`kUx{*DKOB?_AD?4EcXmSaz6LLgx*@caV?abU6 zdL*YXHKbgsO(gTpfyDqfa0MFvN~A`+xxtBUMIGw`%1q9Q%|t%U7FF7*>hoCZCF8W1 z^$}Y7bL#w#cC3tx!#@;_5gHa?ZTWkvQTo0X}h})|<&bRWG4o zV(^MCVoSw66QMOjQ?n=R-WqN&=lC+KHv3-0(^Bvd>4Pcwc~^`BBEfZ*#aA`q;Nxx6 z-jtUf&+q$yhv%8yM}<-{9MWq;y;3Ip4Nv^FAwnbEGt5k}4qEpVOzJ?vhUK7bLJRdd zmF5kIRC_>w^yE{FSSx6EH_=f^-Z{!Slyjx@>%Z*1g_*TW`jm#smu%l*l^NApqV|PW z>m@8tmdc_UbVs|sg=K~}UYflb>sd`}#8g~nRalO8Itmw@yGbC^eeU{qQuqV9bjt|> zm8@AVl$Cp?#TkKzic04ht*y{r6=CyFS^1S?!$|B9vn*wz%N0>ua$})}e5?-+E&~qlm3(S|0c}OZ|G@kzr zK`lQ!-$^W(H4gFo7Oy|V#wW$=c0T=OENt=n3bT@ywB7T9bB2t_{l3nY+=@QKuoe2a z@a{d=xNvZGJI8?+%w#6&wAxUjn)_TyqF>wuCzxVV`IhNpx4 z+xEce#9pH7a+=K-)+f2RKB{Iv7F39|IeLq0eHtQ@GSaow#oKgxZ4yFxm~vNKcHXYR zAJ8NAV{yBb$4|&#qU7!sm%|HOOti4sOs>s?oe|Z2+5MR=CO~ZV%B|eGa&Y>b%=20W zgVnPWSa^pE79`ldTDH6XIgR%UECpU+xq=vq_vVT9Zt`}NmKR3Fq^s?Jn9TL0YJ;^S5xiWIMsV~?zwHF>f;pf+K zrOQYTRa%GAIZhZ-m?R>j4w0CWwZ`0m*aLZ3UL<3=qqgK<$O;)YV35tWkG;AeRQ2_i z$~5XyV|uXZd5N{ouvO!LIBk}8gum8IUI60N)_T!_yZ|7o>C_3*d+3H*ELQv>=sWcA zK;O4}Sg4$m2+esLlknOy8f-7+u_7`FmqssJZ-O)VmhX=Yv|DBs_9IsMBU$_6QtM!6 z6nS|xoLH%Ug#>DWo?pO!i>kIkJQ>gavEjnf$idax@@w_)#7fJ>+?~I57|q%*1!)a2 zZ0D?`*y!i*xn~_3HZIOJkn#6}nAx;y`T!3#*@DfsyH*-;9_>D5ha!_jSy=K-dyDa4 zS#;KYc-7cQ&s@Qw5U#2yapZjq(Rd9kp}(2ZHkiJsGFA5D1)1r1{EpHl1Mz$*SuRu4<2swUnr=fvs)HUE$`&owm#hN zIxe{6>RFSS9XvhSX1_Rl@u9+hkVe8W@%!kO`%A0I5-TUfLw>Hsg(53;ulIqHu%Ni5MutD+Aiash=0?)@U;V-oL2AlI$&qji>KVf2mZ*|_Pvzvi$&URI$7yqKP|GN42qq_2U-3D2)%(O`Zh@l}B>mUmd^ zp+N}`EVl!tW@U67DHc35$k7hlO$eQMVBqKbjM%$-0_(5P2c<6$)!_$j$V-;7`2dwjwUq1^`b+l&no{iu^g=5 z6?wXZ7=QJgIm^|8iZ#S-_^($e1;-1A0NDsajr$(=hU&vVImAwiGM#F}$jYB?sSkE$ zdwz4cgo1ME2DOf86XWSxx`U@;SM;G93=Nd5tmO~o(qzw_U6GCMO$Ocmb08;G#&k14N%u0#y z&V}8A__y)lx3c|hbHc3Qgyh$IR89Q$14#o>!6Uo{L>fbw2_Q&k2tPiDcUs5eTTX)eNDQ#{>X?z#klY0VKaY z3sTRH15XSf(Q(Ya77M(-CeI(lctJcd!;S?{e9%T!Wp~}178d{@_y;ja5>G6Zq(x@g zQ{h`Q*1)PzPyztM%m9GsA7lw6pS==Z@V_rY_zw<38!y{K^<)-ESt}moT?bBlt+fLuA)VEAN(h8e-@Ya2RGpLJ&mh4(XDV?vRE-1XN031nC+S1cnfl?(Xi8kQ5{o z0jWFi-S6Jl@7{C%S$psGtY@vg_c_03MRa0Cc4Cogs$k=Q00fx#zI$UlDGx%;weS%L zZz%|Q`4Uzu*bvA|o9gvEmp2L6`?8wRJbQ_tt)H#Cw2AAz~8GoMz`nmOnu^FY(tNKZH75OjjfWe zb+U~yE_x-O7ql*QY?RMf+Lt#aO_{FC=IWz(K@MkMwVQ~e|3K5jrjOvFUrHYXV2gaD zk2Vw@TtsFNP9a@&XS(EXkFig7O z_>7*N)1{N?j|gHon&=a{zY4=o`!X%!-B!BUwX5@CB;j(D)%px>3csZ;KdQbTRb?H9&Ps@UR^&I+s=((4*!?5z7If@~o*VOGW? zP*=QK`tLt85CT%?GWQAIg-lkoPkHC<;^OfUvJT@JFQ}0yE+PdCFv7E7t{j=89PQsSDW+cI%x8*()+T(uV{)hLTlhAz* zgoo!RMzhlSaH>9$6Um__O%;3s{A!mvMj!ytf&&2jb$gJGKw*ThRF0YrRt$j$rChnY z;O*>Y>Eh7bM?3kfJPlh)igR^FK^sFKe+KY&giL^b2PyK&?x!=7Mht0W!ruIWC|h*= z5ozW<^<|rX2S)K0gNxTqma5itGL$QdZPQK(>xB}Vd$p)>&yIhN@r8%9RF}?Q=2W!o z4;g$5_7`4v0zF1(EkN+#G`352`$YjO>73=P6K!ry^Y4zF=YJ;Gyc&*DFb{0h@D288 z#vQD2HtCj&m-%fa@ybI}_sZSVWdoq_iU$9-sa^Bd>u*+^!u^M;zq3FF2c)^hcz!so zOou|S6YN$W6B)6cu*bT7dKJ@a8>rQL#O%LfA%Jrl>n$sUDEHJhr*}U8TG|UqPc*>p zd({hYyj6j0Vp`|a0JbrTqBiXAt|a!Tdf;4I!R=WWz4hl%bxYd4E^A3)WE42CRp4o$ zoC8Bk*f8kO&?E$S05NZVAJ+0J-lg$2n~oDP+8%C~A)=g`h)T8|iRgT>^Sx9rVMfqW zd5Iaob4MQ`GY^WQmVkCAcq2p7C2XK|QT5qwx8N}-YUDM+fuSwq zR$4GmQ4_4kO^$MpR|Gx@!CP}*=f+>^XYc_GanIofh|P*y>J zQeR_EHC=54mp1AaNHz&SNg=c!p)sD}y}jX)f!o ztpCy^$y&zKyk(CD>POxZ&ueqYH1erCj2vQ5cnibb7J?~%o35L0t|w{R(oyOG^(<9w zif{wt@9T?g>4f<_mIFG_)Kh1~d{xOyT;s||I|YybgkN7pI67n12XhsTaQ}T3@&Efz zR>6)-2Si-jGEAr$E;?`N%%%lxZz7@?Ri@yzHK&jErk2!b1c%K0H}vznem*!-tC>@J z$;djim85^iE#<4KneFMiZ1s-xV0UqbZVY8Ajepa_4?*Lv=gga)O%1*@^=Z=`!t2!Y z`r_D_=vtj_a+GVrS=+b#8mCKX^0J4H4)$()#;cIW-t60V1r1IzEX;?3Pf%TGG8Tx* zb_x66*#t;=ZA-*x*$qV5kCVRc%>937he6C0b=7LYUf3*CTslz8Z&&XRl zA@>NZc+NUnzH8drlOC;f=6Y{mqgZLzv~%DCm4G!E`>LNFl08qEdBXX;(;E)cJv=v< zdfs?6hax=F89&a)b0uCf10VfV{zTAj|E^~7C(-4TFK@2QZ}a_lTiD%eb4+yEhiHFu z@Ks`5T|i`ETy#L57_Mlgr;0ar_31e?%e0@J?N@Ue(+&-wZ_Elj`>s3g!}o+^hKJKy zxgxMaBQ2;A(J>)AXI(N|scAmDm-mMUNO$9Kc~N_7?E?Wkm1&B#N^dAV2cFXBQ;Feq?>k1Rkh-SKm-B-=JEm$@lOJ4_b4DsJp~ zu|`8mz!xWzKH|`dV%k#8I_~muP+vP~G_%W`@Y)>M4{6{NsIMs$NrN>ayQaJ=+@ajU zXnq>Daq=nXGt*Z&9*?1c4+JVbeF_OP{mJa9xGw2cWLCBkX&x&{aDJiX6NHt}n8U1h zX4prEk99`T@0&P&a6f@_l6z1cUTO>2h@-3yM|*+3y*3tn$oFxF`Dj&})}v_%-!u@) z(?Pa0vt#&cbxAa>NR?z}diubTh`8>-##@~l@7PfrV+|^8{bmwH@@cJzZJ>j#$a0y5 zUXSX&onNGy*i(+jWPU01Wr)0DY42HaNamUU{O zdgfR+K0BCpv6?9nk*#$_oL9@nV2vIocJ7g;KTuo@G_%nD224`uh3D8SlB1cJAjAto zzAVd%-4bus7444viV=^$(jLVWxXx8t&b7E!P@$=;B`m>m#!B(2x3!3Ix3eEH*3jMx zPZ1}nvS^s?!|QZa{}rR0U7DZ(?z;R9cJe2&9&>)S40f8xY@VHrnwA_Fi4uor^Huub zEpTn=HIw+;-f`PuN{zIi-O$g=vsNDE*4eLnYhxgv;+h?wWQ7nc4>HK%ivFfPq{5qn z68(_(qibPYU3-|~TflLqSPa*MyYw*??4?Vk%GsiRna7eTOD)bYg2Io%m88KQug&b~ zXkm|m%V<9L@do#WLqflrrL{v+?@;dqG$Tv5Amv>aE{E1x+`}ksG2%cL*PfY2_ti_{ z>u*&FMVY0xl&T=G8&Quw$qNLCc0qr2lPosOXcipPq98Qe7aaxJ(iidqg~~aDAe3tO zedFjtZb6zu`{@V0<;b!14}Bl<=Y!t9ovIBKX#8S?Hf!Q&qst%)< z*B9@%Fug$ZxI06Ut8(>s#|;9ou4svA#Dt;Fzq86CIwOX!`g6cULrYg)OvosGE1_T^ zS}LtDyc{L49qI?3)R%=k3L3H3b`QmhQU@6!3kZXUoDQOtDmLvN!ne;t1@fkF$?4Vw zS3Y=dX0A4DU#&h^NXxGc*Fksip$~`cb?o$i@%!f!Y?cHYJ>&$2Oc$B0A30@xQI0jL zkmOJZ(rM!AGEt+dyVG3jE=cT`oM=Zg`N`X*m4CCrCLqVdVq-suo2C!gz(+M(dA)|QB@YaiRBs+i`4S!MZB zF09M)#^O*fO)G^QfcMYHyNb2iMl1S*7%0 zmWcNa_-(UbE`v1ZT_$x04NH>%2K!yG1R^_#7`$7z|C!ERIe-v3`{vI33wqbFk|p+q z=C(gn61k<#b-#{$b-sokZ_gb_F0`HSU4{(vP)vO1{$ z+zOO!iq_a3T28+NN}>_uStCtDwh+gAyJga}Gl9D$lldL!LS2!qEDA@RT~n3PVubGJ z0OVzy9lK5h>_VzMR#S{@d$rOcuH#QwuyiFAk-1SRt#fWh!;0Uo?ub+Y72NJ2=&`g^ zeQ}V&ynF$XekJ_%QJCuE{0FyOcy#zVX6^rQzG5hs3drB){QRrU!Gxnkz2AYx5)}$t zaVb}Fl7GoGQ}@ zph*-)^SR#DFDW2R)*pEt(c!lIPA>?zT3Kci?v1a_yH8z-CyQ3ugiLk^Nh5Mx!zjcz zeh8w^dm^Cgd)zcc0#CfIC{76|`|GC`d>g-Y!piI1+$jSaQ~%!n2pT-rF0O+p+G`RpDKORgCL1a#gwi`|CE7LfPX$uFmg*xPDhGg zNnIYUt)!qXrv=lN*Hpm*f&l;1^-A9eGi0=>C;}t9q)P>NQtx5}B^?m}K>5#LfDwEE zKy9e?wDh&Ik;E-p~|7 z$&o1*B-hgk7K}is_|5DSaq8>Yn}Gj3^jm)gj6%9w2(ew)HtR zxd}LD!FI!ZiQynIK*ky~ASDf`k&2ciH~8m!!UR;9qGJ9}VIZR$=U7YH8%O4dZ~z}> bqopx@EaWdDZ)1!j6uECnfp_}kdgZ?WT}Guu From 9089065069e10a054b9cd96570b784ac8e7bda1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Tue, 4 Jun 2013 14:07:58 +0000 Subject: [PATCH 14/23] Fixed smartcard redirection on linux (forgot to add parameter in case of smartcards). Thanks to Virginio for reporting :-) --- rdptransport/java/jar/rdp.jar | Bin 25354 -> 25350 bytes .../src/es/virtualcable/rdp/LinuxApplet.java | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/rdptransport/java/jar/rdp.jar b/rdptransport/java/jar/rdp.jar index 22b7de9048079e47015fcce3eabea55c7febe491..f79446d0a1595c782a2e73fd0af440baec0e1d92 100644 GIT binary patch delta 4249 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 bqopx@EaWdDZ)1!j6uECnfp_}kdgZ?WT}Guu diff --git a/rdptransport/java/src/es/virtualcable/rdp/LinuxApplet.java b/rdptransport/java/src/es/virtualcable/rdp/LinuxApplet.java index 4d67c41c..92e1a966 100644 --- a/rdptransport/java/src/es/virtualcable/rdp/LinuxApplet.java +++ b/rdptransport/java/src/es/virtualcable/rdp/LinuxApplet.java @@ -95,7 +95,7 @@ public class LinuxApplet implements OsApplet { exec.add("-g" + width + "x" + height); if (redirectSmartcards) - exec.add("-r scard"); + exec.add("-rscard"); exec.add("-TUDS-RDP"); exec.add("-P"); From b2b747a099968a9e7f26119fc13f2dcbabcc6a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Mon, 10 Jun 2013 08:08:30 +0000 Subject: [PATCH 15/23] Fixed length of username & groupname fields of regex ldap authenticator --- server/src/uds/auths/RegexLdap/Authenticator.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/server/src/uds/auths/RegexLdap/Authenticator.py b/server/src/uds/auths/RegexLdap/Authenticator.py index 87cc4cea..5bbfa6d8 100644 --- a/server/src/uds/auths/RegexLdap/Authenticator.py +++ b/server/src/uds/auths/RegexLdap/Authenticator.py @@ -55,8 +55,8 @@ class RegexLdap(auths.Authenticator): ldapBase = gui.TextField(length=64, label = _('Base'), order = 7, tooltip = _('Common search base (used for "users" and "groups"'), required = True) userClass = gui.TextField(length=64, label = _('User class'), defvalue = 'posixAccount', order = 8, tooltip = _('Class for LDAP users (normally posixAccount)'), required = True) userIdAttr = gui.TextField(length=64, label = _('User Id Attr'), defvalue = 'uid', order = 9, tooltip = _('Attribute that contains the user id'), required = True) - userNameAttr = gui.TextField(length=64, label = _('User Name Attr'), multiline=2, defvalue = 'uid', order = 10, tooltip = _('Attributes that contains the user name (list of comma separated values)'), required = True) - groupNameAttr = gui.TextField(length=64, label = _('Group Name Attr'), multiline=2, defvalue = 'cn', order = 11, tooltip = _('Attribute that contains the group name'), required = True) + userNameAttr = gui.TextField(length=640, label = _('User Name Attr'), multiline=2, defvalue = 'uid', order = 10, tooltip = _('Attributes that contains the user name (list of comma separated values)'), required = True) + groupNameAttr = gui.TextField(length=640, label = _('Group Name Attr'), multiline=2, defvalue = 'cn', order = 11, tooltip = _('Attribute that contains the group name'), required = True) #regex = gui.TextField(length=64, label = _('Regular Exp. for groups'), defvalue = '^(.*)', order = 12, tooltip = _('Regular Expression to extract the group name'), required = True) typeName = _('Regex LDAP Authenticator') @@ -129,7 +129,7 @@ class RegexLdap(auths.Authenticator): res = [] for line in field.splitlines(): equalPos = line.find('=') - if line.find('=') != -1: + if equalPos != -1: attr = line[:equalPos] else: attr = line @@ -137,11 +137,10 @@ class RegexLdap(auths.Authenticator): return res def __processField(self, field, attributes): - import re res = [] for line in field.splitlines(): equalPos = line.find('=') - if line.find('=') != -1: + if equalPos != -1: attr, pattern = (line[:equalPos], line[equalPos+1:]) attr = attr.lower() # if pattern do not have groups, define one with full re From 8d9b8252374f852f5ac41fe1d35096646d2ebd1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Wed, 19 Jun 2013 08:33:15 +0000 Subject: [PATCH 16/23] * Added new global config var for time elapsed before services in use for old publications are removed * Added support for removal of services from old publications in use once a configured time is elapsed --- server/src/uds/core/managers/PublicationManager.py | 2 +- server/src/uds/core/util/Config.py | 4 ++++ server/src/uds/core/workers/PublicationCleaner.py | 14 +++++++++----- server/src/uds/models.py | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/server/src/uds/core/managers/PublicationManager.py b/server/src/uds/core/managers/PublicationManager.py index 5e708719..26292ce2 100644 --- a/server/src/uds/core/managers/PublicationManager.py +++ b/server/src/uds/core/managers/PublicationManager.py @@ -88,7 +88,7 @@ class PublicationFinishChecker(DelayedTask): if State.isPreparing(prevState): dsp.deployed_service.publications.filter(state=State.USABLE).update(state=State.REMOVABLE) dsp.setState(State.USABLE) - dsp.deployed_service.markOldDeployedServicesAsRemovables(dsp) + dsp.deployed_service.markOldUserServicesAsRemovables(dsp) elif State.isRemoving(prevState): dsp.setState(State.REMOVED) else: # State is canceling diff --git a/server/src/uds/core/util/Config.py b/server/src/uds/core/util/Config.py index 5b7034b0..cd73b65e 100644 --- a/server/src/uds/core/util/Config.py +++ b/server/src/uds/core/util/Config.py @@ -238,6 +238,10 @@ class GlobalConfig(object): # Allowed "trusted sources" for request TRUSTED_SOURCES = Config.section(SECURITY_SECTION).value('Trusted Hosts', '*') + # How long will a service "in use" be allowed to exists once a new publication is launched, defaults to 3 days + # This is expressed in hours + KEEP_IN_USE_HOURS = Config.section(GLOBAL_SECTION).value('Keep In Use Hours', '72') + initDone = False @staticmethod diff --git a/server/src/uds/core/workers/PublicationCleaner.py b/server/src/uds/core/workers/PublicationCleaner.py index c68fe13b..a14a1f17 100644 --- a/server/src/uds/core/workers/PublicationCleaner.py +++ b/server/src/uds/core/workers/PublicationCleaner.py @@ -52,7 +52,7 @@ class PublicationInfoItemsCleaner(Job): super(PublicationInfoItemsCleaner,self).__init__(environment) def run(self): - removeFrom = getSqlDatetime() - timedelta(seconds = GlobalConfig.KEEP_INFO_TIME.getInt()) + removeFrom = getSqlDatetime() - timedelta(seconds = GlobalConfig.KEEP_INFO_TIME.getInt(True)) DeployedServicePublication.objects.filter(state__in=State.INFO_STATES, state_date__lt=removeFrom).delete() class PublicationCleaner(Job): @@ -63,13 +63,17 @@ class PublicationCleaner(Job): super(PublicationCleaner,self).__init__(environment) def run(self): - removables = DeployedServicePublication.objects.filter(state=State.REMOVABLE)[0:3] + removables = DeployedServicePublication.objects.filter(state=State.REMOVABLE) for removable in removables: try: PublicationManager.manager().unpublish(removable) except PublishException: # Can say that it cant be removed right now logger.debug('Delaying removal') pass - - - \ No newline at end of file + # Now check too long "in use" services for all publications + now = getSqlDatetime() + removeFrom = now - timedelta(hours = GlobalConfig.KEEP_IN_USE_HOURS.getInt(True)) + for dsp in removables.filter(state_date__lt=removeFrom): + dsp.deployed_service.filter(in_use=True).update(in_use=False, state_date=now) + dsp.deployed_service.markOldUserServicesAsRemovables(dsp) + diff --git a/server/src/uds/models.py b/server/src/uds/models.py index 8bc0b49a..e6d5df49 100644 --- a/server/src/uds/models.py +++ b/server/src/uds/models.py @@ -1006,7 +1006,7 @@ class DeployedService(models.Model): self.setState(State.REMOVED) - def markOldDeployedServicesAsRemovables(self, activePub): + def markOldUserServicesAsRemovables(self, activePub): ''' Used when a new publication is finished. From 687d63556c80062442a37bd77cb7f5de7e870f52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Wed, 19 Jun 2013 08:45:42 +0000 Subject: [PATCH 17/23] Updated guacamole js part to 0.7.2 --- guacamole-tunnel/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guacamole-tunnel/pom.xml b/guacamole-tunnel/pom.xml index 172e5c08..7a245c7c 100644 --- a/guacamole-tunnel/pom.xml +++ b/guacamole-tunnel/pom.xml @@ -69,7 +69,7 @@ net.sourceforge.guacamole guacamole-common-js - 0.7.1 + 0.7.2 zip runtime From 4ee51ac268a34894b34609fe3b4e5a4462633ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Wed, 19 Jun 2013 10:02:40 +0000 Subject: [PATCH 18/23] Fixed duplicated configuration key (in fact, two different keys that means same thing... :-) ) --- server/src/uds/core/util/Config.py | 4 ---- server/src/uds/core/workers/PublicationCleaner.py | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/server/src/uds/core/util/Config.py b/server/src/uds/core/util/Config.py index cd73b65e..5b7034b0 100644 --- a/server/src/uds/core/util/Config.py +++ b/server/src/uds/core/util/Config.py @@ -238,10 +238,6 @@ class GlobalConfig(object): # Allowed "trusted sources" for request TRUSTED_SOURCES = Config.section(SECURITY_SECTION).value('Trusted Hosts', '*') - # How long will a service "in use" be allowed to exists once a new publication is launched, defaults to 3 days - # This is expressed in hours - KEEP_IN_USE_HOURS = Config.section(GLOBAL_SECTION).value('Keep In Use Hours', '72') - initDone = False @staticmethod diff --git a/server/src/uds/core/workers/PublicationCleaner.py b/server/src/uds/core/workers/PublicationCleaner.py index a14a1f17..056b8fc2 100644 --- a/server/src/uds/core/workers/PublicationCleaner.py +++ b/server/src/uds/core/workers/PublicationCleaner.py @@ -72,7 +72,7 @@ class PublicationCleaner(Job): pass # Now check too long "in use" services for all publications now = getSqlDatetime() - removeFrom = now - timedelta(hours = GlobalConfig.KEEP_IN_USE_HOURS.getInt(True)) + removeFrom = now - timedelta(hours = GlobalConfig.SESSION_EXPIRE_TIME.getInt(True)) for dsp in removables.filter(state_date__lt=removeFrom): dsp.deployed_service.filter(in_use=True).update(in_use=False, state_date=now) dsp.deployed_service.markOldUserServicesAsRemovables(dsp) From 7ca448d9261d0e1ea1023cd8789be83f43013fd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Wed, 19 Jun 2013 10:49:40 +0000 Subject: [PATCH 19/23] Fixed a bug in UserServiceManager that on "checkForRemoval" it reloads the User Service, and looses the referenced passed in. This makes that when the service must be removed, and a reference was passed in that was also saved later, the service was not marked correctly for removal. --- server/src/uds/core/managers/UserServiceManager.py | 5 ++--- server/src/uds/osmanagers/LinuxOsManager/LinuxOsManager.py | 2 ++ .../src/uds/osmanagers/WindowsOsManager/WindowsOsManager.py | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/server/src/uds/core/managers/UserServiceManager.py b/server/src/uds/core/managers/UserServiceManager.py index a53cb8f1..24ae1320 100644 --- a/server/src/uds/core/managers/UserServiceManager.py +++ b/server/src/uds/core/managers/UserServiceManager.py @@ -447,14 +447,13 @@ class UserServiceManager(object): UserServiceOpChecker.makeUnique(uService, ui, state) return False - @transaction.commit_on_success def checkForRemoval(self, uService): - uService = UserService.objects.select_for_update().get(id=uService.id) + #uService = UserService.objects.select_for_update().get(id=uService.id) if uService.publication == None: return if uService.publication.id != uService.deployed_service.activePublication().id: logger.debug('Old revision of user service, marking as removable: {0}'.format(uService)) - uService.setState(State.REMOVABLE) + uService.remove() def notifyReadyFromOsManager(self, uService, data): diff --git a/server/src/uds/osmanagers/LinuxOsManager/LinuxOsManager.py b/server/src/uds/osmanagers/LinuxOsManager/LinuxOsManager.py index d14d2f15..e972cb2d 100644 --- a/server/src/uds/osmanagers/LinuxOsManager/LinuxOsManager.py +++ b/server/src/uds/osmanagers/LinuxOsManager/LinuxOsManager.py @@ -137,8 +137,10 @@ class LinuxOsManager(osmanagers.OSManager): notifyReady = True self.notifyIp(service.unique_id, si, data) service.updateData(si) + service.setInUse(inUse) service.setOsState(state) + # If notifyReady is not true, save state, let UserServiceManager do it for us else if doRemove is True: service.remove() diff --git a/server/src/uds/osmanagers/WindowsOsManager/WindowsOsManager.py b/server/src/uds/osmanagers/WindowsOsManager/WindowsOsManager.py index 6f415e88..b9680802 100644 --- a/server/src/uds/osmanagers/WindowsOsManager/WindowsOsManager.py +++ b/server/src/uds/osmanagers/WindowsOsManager/WindowsOsManager.py @@ -153,8 +153,10 @@ class WindowsOsManager(osmanagers.OSManager): notifyReady = True self.notifyIp(service.unique_id, si, data) service.updateData(si) + service.setInUse(inUse) service.setOsState(state) + # If notifyReady is not true, save state, let UserServiceManager do it for us else if doRemove is True: service.remove() From 32d951a43ce5c4586e6ce819e212d5f2391ffffc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Wed, 19 Jun 2013 10:58:34 +0000 Subject: [PATCH 20/23] --- server/src/uds/core/managers/UserServiceManager.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/uds/core/managers/UserServiceManager.py b/server/src/uds/core/managers/UserServiceManager.py index 24ae1320..98404a19 100644 --- a/server/src/uds/core/managers/UserServiceManager.py +++ b/server/src/uds/core/managers/UserServiceManager.py @@ -448,6 +448,10 @@ class UserServiceManager(object): return False def checkForRemoval(self, uService): + ''' + This method is used by UserService when a request for setInUse(False) is made + This checks that the service can continue existing or not + ''' #uService = UserService.objects.select_for_update().get(id=uService.id) if uService.publication == None: return From 9b99b8f1bdd1712c70c7d332f52360617e7b00fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Thu, 20 Jun 2013 09:03:50 +0000 Subject: [PATCH 21/23] * Added "development" method for user machines * Fixed publications clean up on new publication & session expiration * Added "forgotten" unicode method to DeployedPublication --- .../uds/core/workers/PublicationCleaner.py | 5 ++-- server/src/uds/models.py | 3 +++ .../xmlrpc/services/UserDeployedServices.py | 23 +++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/server/src/uds/core/workers/PublicationCleaner.py b/server/src/uds/core/workers/PublicationCleaner.py index 056b8fc2..272b37ce 100644 --- a/server/src/uds/core/workers/PublicationCleaner.py +++ b/server/src/uds/core/workers/PublicationCleaner.py @@ -74,6 +74,7 @@ class PublicationCleaner(Job): now = getSqlDatetime() removeFrom = now - timedelta(hours = GlobalConfig.SESSION_EXPIRE_TIME.getInt(True)) for dsp in removables.filter(state_date__lt=removeFrom): - dsp.deployed_service.filter(in_use=True).update(in_use=False, state_date=now) - dsp.deployed_service.markOldUserServicesAsRemovables(dsp) + activePub = dsp.deployed_service.activePublication() + dsp.deployed_service.userServices.filter(in_use=True).update(in_use=False, state_date=now) + dsp.deployed_service.markOldUserServicesAsRemovables(activePub) diff --git a/server/src/uds/models.py b/server/src/uds/models.py index e6d5df49..f15bf35c 100644 --- a/server/src/uds/models.py +++ b/server/src/uds/models.py @@ -1279,6 +1279,9 @@ class DeployedServicePublication(models.Model): logger.debug('Deleted publication {0}'.format(toDelete)) + def __unicode__(self): + return 'Publication {0}, rev {1}, state {2}'.format(self.deployed_service.name, self.revision, State.toString(self.state)) + # Connects a pre deletion signal to Authenticator diff --git a/server/src/uds/xmlrpc/services/UserDeployedServices.py b/server/src/uds/xmlrpc/services/UserDeployedServices.py index b8d5e199..05460782 100644 --- a/server/src/uds/xmlrpc/services/UserDeployedServices.py +++ b/server/src/uds/xmlrpc/services/UserDeployedServices.py @@ -153,6 +153,28 @@ def getUserDeployedServiceError(credentials, idService): raise FindException(_('User deployed service not found!!!')) return error +@needs_credentials +def develAction(credentials, action, ids ): + logger.debug('Devel action invoked: {0} for {1}'.format(action, ids)) + try: + for uds in UserService.objects.filter(id__in=ids): + if action == "inUse": + logger.debug('Setting {0} to in use'.format(uds.friendly_name)) + uds.setInUse(True) + elif action == "releaseInUse": + logger.debug('Releasing in use from {0}'.format(uds.friendly_name)) + uds.setState(State.USABLE) + uds.setInUse(False) + else: + logger.debug('Setting {0} to usable'.format(uds.friendly_name)) + uds.setState(State.USABLE) + if uds.needsOsManager(): + uds.setOsState(State.USABLE) + uds.save() + except UserService.DoesNotExist: + raise FindException(_('User deployed service not found!!!')) + return True + # Registers XML RPC Methods def registerUserDeployedServiceFunctions(dispatcher): dispatcher.register_function(getCachedDeployedServices, 'getCachedDeployedServices') @@ -161,3 +183,4 @@ def registerUserDeployedServiceFunctions(dispatcher): dispatcher.register_function(assignDeployedService, 'assignDeployedService') dispatcher.register_function(removeUserService, 'removeUserService') dispatcher.register_function(getUserDeployedServiceError, 'getUserDeployedServiceError') + dispatcher.register_function(develAction, "develAction") From 278c091dace627b1c1b8c3c338f1e341c39edc9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Thu, 20 Jun 2013 09:19:57 +0000 Subject: [PATCH 22/23] * Added "development menu", to help on development issues (needs to be activated with param --enableDevel or --enableDebug) --- client/administration/UdsAdmin/Program.cs | 10 + .../UdsAdmin/Properties/Settings.Designer.cs | 20 +- .../UdsAdmin/Properties/Settings.settings | 3 + .../UdsAdmin/Strings.Designer.cs | 321 ++++++++++-------- client/administration/UdsAdmin/Strings.resx | 9 + client/administration/UdsAdmin/app.config | 3 + .../UdsAdmin/controls/panel/DeployedPanel.cs | 34 ++ .../controls/panel/DeployedServicePanel.resx | 24 +- .../controls/panel/DeployedServicesPanel.resx | 24 +- .../UdsAdmin/forms/DeployedServiceForm.cs | 4 + .../UdsAdmin/forms/DeployedServiceForm.resx | 12 +- .../UdsAdmin/forms/MainForm.Designer.cs | 1 + .../UdsAdmin/forms/MainForm.resx | 43 ++- .../administration/UdsAdmin/gui/ActionTree.cs | 3 + .../UdsAdmin/gui/MenusManager.cs | 2 + .../UdsAdmin/xmlrpc/IUDSAdmin.cs | 7 + .../UdsAdmin/xmlrpc/UDSAdminService.cs | 7 + 17 files changed, 323 insertions(+), 204 deletions(-) diff --git a/client/administration/UdsAdmin/Program.cs b/client/administration/UdsAdmin/Program.cs index d320101e..f37b2913 100644 --- a/client/administration/UdsAdmin/Program.cs +++ b/client/administration/UdsAdmin/Program.cs @@ -44,6 +44,16 @@ namespace UdsAdmin [STAThread] static void Main() { + string[] args = Environment.GetCommandLineArgs(); + + foreach (string arg in args) + { + if (arg == "--enabledebug" || arg == "--enabledevel") + UdsAdmin.Properties.Settings.Default.debug = true; + else if (arg == "--disabledebug" || arg == "--disabledevel") + UdsAdmin.Properties.Settings.Default.debug = false; + } + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); CultureInfo culture = new CultureInfo(UdsAdmin.Properties.Settings.Default.Locale); diff --git a/client/administration/UdsAdmin/Properties/Settings.Designer.cs b/client/administration/UdsAdmin/Properties/Settings.Designer.cs index cb37f139..96680d06 100644 --- a/client/administration/UdsAdmin/Properties/Settings.Designer.cs +++ b/client/administration/UdsAdmin/Properties/Settings.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// Este código fue generado por una herramienta. -// Versión de runtime:4.0.30319.18034 +// This code was generated by a tool. +// Runtime Version:4.0.30319.296 // -// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si -// se vuelve a generar el código. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -127,5 +127,17 @@ namespace UdsAdmin.Properties { return ((int)(this["StatsItems"])); } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool debug { + get { + return ((bool)(this["debug"])); + } + set { + this["debug"] = value; + } + } } } diff --git a/client/administration/UdsAdmin/Properties/Settings.settings b/client/administration/UdsAdmin/Properties/Settings.settings index 6442bb46..daf20307 100644 --- a/client/administration/UdsAdmin/Properties/Settings.settings +++ b/client/administration/UdsAdmin/Properties/Settings.settings @@ -29,5 +29,8 @@ 200 + + False + \ No newline at end of file diff --git a/client/administration/UdsAdmin/Strings.Designer.cs b/client/administration/UdsAdmin/Strings.Designer.cs index 13faa855..38ab9f7d 100644 --- a/client/administration/UdsAdmin/Strings.Designer.cs +++ b/client/administration/UdsAdmin/Strings.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// Este código fue generado por una herramienta. -// Versión de runtime:4.0.30319.18034 +// This code was generated by a tool. +// Runtime Version:4.0.30319.296 // -// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si -// se vuelve a generar el código. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -13,12 +13,12 @@ namespace UdsAdmin { ///

- /// Clase de recurso fuertemente tipado, para buscar cadenas traducidas, etc. + /// A strongly-typed resource class, for looking up localized strings, etc. /// - // StronglyTypedResourceBuilder generó automáticamente esta clase - // a través de una herramienta como ResGen o Visual Studio. - // Para agregar o quitar un miembro, edite el archivo .ResX y, a continuación, vuelva a ejecutar ResGen - // con la opción /str o recompile su proyecto de VS. + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] @@ -33,7 +33,7 @@ namespace UdsAdmin { } /// - /// Devuelve la instancia de ResourceManager almacenada en caché utilizada por esta clase. + /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ namespace UdsAdmin { } /// - /// Reemplaza la propiedad CurrentUICulture del subproceso actual para todas las - /// búsquedas de recursos mediante esta clase de recurso fuertemente tipado. + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Enabled. + /// Looks up a localized string similar to Enabled. /// internal static string active { get { @@ -70,7 +70,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Allowed Groups. + /// Looks up a localized string similar to Allowed Groups. /// internal static string allowedGroups { get { @@ -79,7 +79,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Groups allowed to access this service. + /// Looks up a localized string similar to Groups allowed to access this service. /// internal static string allowedGroupsToolTip { get { @@ -88,7 +88,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a The application will exit now. + /// Looks up a localized string similar to The application will exit now. /// internal static string appWillTerminate { get { @@ -97,7 +97,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Assigned Services. + /// Looks up a localized string similar to Assigned Services. /// internal static string assignedServices { get { @@ -106,7 +106,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Shows services of this kind currently assigned to users. + /// Looks up a localized string similar to Shows services of this kind currently assigned to users. /// internal static string assignedServicesToolTip { get { @@ -115,7 +115,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Assign Service to user. + /// Looks up a localized string similar to Assign Service to user. /// internal static string assignToUser { get { @@ -124,7 +124,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Authenticators. + /// Looks up a localized string similar to Authenticators. /// internal static string authenticators { get { @@ -133,7 +133,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a The credentials provided are no longer valid. + /// Looks up a localized string similar to The credentials provided are no longer valid. /// internal static string authFailed { get { @@ -142,7 +142,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Blocked. + /// Looks up a localized string similar to Blocked. /// internal static string blocked { get { @@ -151,7 +151,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Cache. + /// Looks up a localized string similar to Cache. /// internal static string cache { get { @@ -160,7 +160,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a The cache has been flushed. + /// Looks up a localized string similar to The cache has been flushed. /// internal static string cacheFlushed { get { @@ -169,7 +169,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Cache Level. + /// Looks up a localized string similar to Cache Level. /// internal static string cacheLevel { get { @@ -178,7 +178,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Services currently in cache. + /// Looks up a localized string similar to Services currently in cache. /// internal static string cacheServicesToolTip { get { @@ -187,7 +187,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Cancel. + /// Looks up a localized string similar to Cancel. /// internal static string cancel { get { @@ -196,7 +196,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Can't Connect to server. Please, check server and retry. + /// Looks up a localized string similar to Can't Connect to server. Please, check server and retry. /// internal static string cantConnect { get { @@ -205,7 +205,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a This authenticator do not allows the creation of new groups at administration interface. + /// Looks up a localized string similar to This authenticator do not allows the creation of new groups at administration interface. /// internal static string cantCreateGroups { get { @@ -214,7 +214,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a This authenticator do not allows the creation of new users at administration interface. + /// Looks up a localized string similar to This authenticator do not allows the creation of new users at administration interface. /// internal static string cantCreateUsers { get { @@ -223,7 +223,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a This authenticator do not allows the modification of users at administration interface. + /// Looks up a localized string similar to This authenticator do not allows the modification of users at administration interface. /// internal static string cantModifyUsers { get { @@ -232,7 +232,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Do you really want to change current interface language?. Changes will take effect on next restart. + /// Looks up a localized string similar to Do you really want to change current interface language?. Changes will take effect on next restart. /// internal static string changeLanguage { get { @@ -241,7 +241,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Check authenticator. + /// Looks up a localized string similar to Check authenticator. /// internal static string checkAuthenticator { get { @@ -250,7 +250,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Check OS Manager. + /// Looks up a localized string similar to Check OS Manager. /// internal static string checkOSManager { get { @@ -259,7 +259,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Check service provider. + /// Looks up a localized string similar to Check service provider. /// internal static string checkServiceProvider { get { @@ -268,7 +268,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Are you sure do you want to delete selected items?. + /// Looks up a localized string similar to Are you sure do you want to delete selected items?. /// internal static string confirmDelete { get { @@ -277,7 +277,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Connectivity. + /// Looks up a localized string similar to Connectivity. /// internal static string connectivity { get { @@ -286,7 +286,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Delete. + /// Looks up a localized string similar to Delete. /// internal static string deleteItem { get { @@ -295,7 +295,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Deletion failed. + /// Looks up a localized string similar to Deletion failed. /// internal static string deletionFailed { get { @@ -304,7 +304,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Deployed Service. + /// Looks up a localized string similar to Deployed Service. /// internal static string deployedService { get { @@ -313,7 +313,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Deployed Services. + /// Looks up a localized string similar to Deployed Services. /// internal static string deployedServices { get { @@ -322,7 +322,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Disable. + /// Looks up a localized string similar to Disable. /// internal static string disable { get { @@ -331,7 +331,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Downloaded {0} KB of {1} KB at {2:0.00} KB/s. + /// Looks up a localized string similar to Downloaded {0} KB of {1} KB at {2:0.00} KB/s. /// internal static string downloadInfo { get { @@ -340,7 +340,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Do you want to download and install the new version?. + /// Looks up a localized string similar to Do you want to download and install the new version?. /// internal static string downloadQuery { get { @@ -349,7 +349,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Duplicated item. + /// Looks up a localized string similar to Duplicated item. /// internal static string duplicatedItem { get { @@ -358,7 +358,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Enable. + /// Looks up a localized string similar to Enable. /// internal static string enable { get { @@ -367,7 +367,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Error. + /// Looks up a localized string similar to Error. /// internal static string error { get { @@ -376,7 +376,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Get Error Information. + /// Looks up a localized string similar to Get Error Information. /// internal static string errorInfo { get { @@ -385,7 +385,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Exit. + /// Looks up a localized string similar to Exit. /// internal static string exit { get { @@ -394,7 +394,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Field '{0}' is required. + /// Looks up a localized string similar to Field '{0}' is required. /// internal static string fieldRequired { get { @@ -403,7 +403,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a The item do not exists anymore. Please, refresh gui (F5). + /// Looks up a localized string similar to The item do not exists anymore. Please, refresh gui (F5). /// internal static string findFailed { get { @@ -412,7 +412,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Group. + /// Looks up a localized string similar to Group. /// internal static string group { get { @@ -421,7 +421,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Group is not a Meta group!!!. + /// Looks up a localized string similar to Group is not a Meta group!!!. /// internal static string groupIsNotMeta { get { @@ -430,7 +430,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You need to select a group. + /// Looks up a localized string similar to You need to select a group. /// internal static string groupRequired { get { @@ -439,7 +439,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Groups. + /// Looks up a localized string similar to Groups. /// internal static string groups { get { @@ -448,7 +448,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Id. + /// Looks up a localized string similar to Id. /// internal static string id { get { @@ -457,7 +457,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Import text file. + /// Looks up a localized string similar to Import text file. /// internal static string import { get { @@ -466,7 +466,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Text Files|*.txt|All files|*.*. + /// Looks up a localized string similar to Text Files|*.txt|All files|*.*. /// internal static string importFilter { get { @@ -475,7 +475,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Disabled. + /// Looks up a localized string similar to Disabled. /// internal static string inactive { get { @@ -484,7 +484,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Invalid credentials. + /// Looks up a localized string similar to Invalid credentials. /// internal static string invalidCredentials { get { @@ -493,7 +493,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Invalid Ip Address. + /// Looks up a localized string similar to Invalid Ip Address. /// internal static string invalidIpAddress { get { @@ -502,7 +502,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Language. + /// Looks up a localized string similar to Language. /// internal static string language { get { @@ -511,7 +511,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Legend. + /// Looks up a localized string similar to Legend. /// internal static string legend { get { @@ -520,7 +520,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Manage groups for this authenticator. + /// Looks up a localized string similar to Manage groups for this authenticator. /// internal static string manageGroups { get { @@ -529,7 +529,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Manage users for this authenticator. + /// Looks up a localized string similar to Manage users for this authenticator. /// internal static string manageUsers { get { @@ -538,7 +538,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Modification failed. + /// Looks up a localized string similar to Modification failed. /// internal static string modificationFailed { get { @@ -547,7 +547,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Modifying. + /// Looks up a localized string similar to Modifying. /// internal static string modifying { get { @@ -556,7 +556,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Modify. + /// Looks up a localized string similar to Modify. /// internal static string modifyItem { get { @@ -565,7 +565,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a The field 'name' is required. + /// Looks up a localized string similar to The field 'name' is required. /// internal static string nameRequired { get { @@ -574,7 +574,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You need to set up at least an Authenticator before using this.. + /// Looks up a localized string similar to You need to set up at least an Authenticator before using this.. /// internal static string needsAuthenticators { get { @@ -583,7 +583,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You need to set up at least an OS Manager before using this.. + /// Looks up a localized string similar to You need to set up at least an OS Manager before using this.. /// internal static string needsOsManagers { get { @@ -592,7 +592,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You need to set up at least a Service before using this.. + /// Looks up a localized string similar to You need to set up at least a Service before using this.. /// internal static string needsServices { get { @@ -601,7 +601,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You should set up at least a transport before using this.. + /// Looks up a localized string similar to You should set up at least a transport before using this.. /// internal static string needsTransports { get { @@ -610,7 +610,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Transport not active for selected networks. + /// Looks up a localized string similar to Transport not active for selected networks. /// internal static string negativeNetCheck { get { @@ -619,7 +619,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Network End. + /// Looks up a localized string similar to Network End. /// internal static string netEnd { get { @@ -628,7 +628,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Network end must be greater than network start. + /// Looks up a localized string similar to Network end must be greater than network start. /// internal static string netRangeError { get { @@ -637,7 +637,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Network Start. + /// Looks up a localized string similar to Network Start. /// internal static string netStart { get { @@ -646,7 +646,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Neworks. + /// Looks up a localized string similar to Neworks. /// internal static string networks { get { @@ -655,7 +655,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a New. + /// Looks up a localized string similar to New. /// internal static string newItem { get { @@ -664,7 +664,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a New meta group. + /// Looks up a localized string similar to New meta group. /// internal static string newMetaGroup { get { @@ -673,7 +673,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a New Service Provider. + /// Looks up a localized string similar to New Service Provider. /// internal static string newServiceProvider { get { @@ -682,7 +682,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a A new version of UDS Admin is required to communicate with server. + /// Looks up a localized string similar to A new version of UDS Admin is required to communicate with server. /// internal static string newVersionRequired { get { @@ -691,7 +691,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a No. + /// Looks up a localized string similar to No. /// internal static string no { get { @@ -700,7 +700,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Occupied. + /// Looks up a localized string similar to Occupied. /// internal static string occopied { get { @@ -709,7 +709,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a OS Manager. + /// Looks up a localized string similar to OS Manager. /// internal static string osManager { get { @@ -718,7 +718,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a OS Managers. + /// Looks up a localized string similar to OS Managers. /// internal static string osManagers { get { @@ -727,7 +727,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Owner. + /// Looks up a localized string similar to Owner. /// internal static string owner { get { @@ -736,7 +736,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Transport active for selected networks. + /// Looks up a localized string similar to Transport active for selected networks. /// internal static string positiveNetCheck { get { @@ -745,7 +745,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Publication Failed. + /// Looks up a localized string similar to Publication Failed. /// internal static string publicationFailed { get { @@ -754,7 +754,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Publications. + /// Looks up a localized string similar to Publications. /// internal static string publications { get { @@ -763,7 +763,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Publications done from this deployed service. + /// Looks up a localized string similar to Publications done from this deployed service. /// internal static string publicationsToolTip { get { @@ -772,7 +772,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Publish. + /// Looks up a localized string similar to Publish. /// internal static string publish { get { @@ -781,7 +781,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Generate a new publication for this service?. + /// Looks up a localized string similar to Generate a new publication for this service?. /// internal static string publishQuestion { get { @@ -790,7 +790,16 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Are you sure do you want to remove this item?. + /// Looks up a localized string similar to Release "In use" state. + /// + internal static string releaseInUse { + get { + return ResourceManager.GetString("releaseInUse", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Are you sure do you want to remove this item?. /// internal static string removeQuestion { get { @@ -799,7 +808,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Test unsuccessful. + /// Looks up a localized string similar to Test unsuccessful. /// internal static string resultTestError { get { @@ -808,7 +817,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Test successful. + /// Looks up a localized string similar to Test successful. /// internal static string resultTestOk { get { @@ -817,7 +826,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Search Group. + /// Looks up a localized string similar to Search Group. /// internal static string searchGroup { get { @@ -826,7 +835,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Search User. + /// Looks up a localized string similar to Search User. /// internal static string searchUser { get { @@ -835,7 +844,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Select only one item to perform this operation.. + /// Looks up a localized string similar to Select only one item to perform this operation.. /// internal static string selectOnlyOne { get { @@ -844,7 +853,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Service Providers. + /// Looks up a localized string similar to Service Providers. /// internal static string serviceProviders { get { @@ -853,7 +862,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You need to select a service. + /// Looks up a localized string similar to You need to select a service. /// internal static string serviceRequired { get { @@ -862,7 +871,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Services. + /// Looks up a localized string similar to Services. /// internal static string services { get { @@ -871,7 +880,25 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a An small name with at most 8 chars and using A-Z,a-z,0-9 -_ chars is required. + /// Looks up a localized string similar to Force to Active. + /// + internal static string setActive { + get { + return ResourceManager.GetString("setActive", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Simulate "In use". + /// + internal static string setInUse { + get { + return ResourceManager.GetString("setInUse", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An small name with at most 8 chars and using A-Z,a-z,0-9 -_ chars is required. /// internal static string smallNameRequired { get { @@ -880,7 +907,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Src Host. + /// Looks up a localized string similar to Src Host. /// internal static string sourceHost { get { @@ -889,7 +916,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Src IP. + /// Looks up a localized string similar to Src IP. /// internal static string sourceIp { get { @@ -898,7 +925,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You need to specify the authenticator to be used. + /// Looks up a localized string similar to You need to specify the authenticator to be used. /// internal static string specifyAuthenticator { get { @@ -907,7 +934,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You need to specify the service to be used. + /// Looks up a localized string similar to You need to specify the service to be used. /// internal static string specifyBaseService { get { @@ -916,7 +943,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You need to specify the OS Manager to be used. + /// Looks up a localized string similar to You need to specify the OS Manager to be used. /// internal static string specifyOsManager { get { @@ -925,7 +952,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Active. + /// Looks up a localized string similar to Active. /// internal static string stateActive { get { @@ -934,7 +961,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Blocked. + /// Looks up a localized string similar to Blocked. /// internal static string stateBlocked { get { @@ -943,7 +970,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Canceled. + /// Looks up a localized string similar to Canceled. /// internal static string stateCanceled { get { @@ -952,7 +979,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Canceling. + /// Looks up a localized string similar to Canceling. /// internal static string stateCanceling { get { @@ -961,7 +988,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Error. + /// Looks up a localized string similar to Error. /// internal static string stateError { get { @@ -970,7 +997,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Inactive. + /// Looks up a localized string similar to Inactive. /// internal static string stateInactive { get { @@ -979,7 +1006,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Launching publication. + /// Looks up a localized string similar to Launching publication. /// internal static string stateLaunching { get { @@ -988,7 +1015,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Generating. + /// Looks up a localized string similar to Generating. /// internal static string statePreparing { get { @@ -997,7 +1024,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Waiting for removal. + /// Looks up a localized string similar to Waiting for removal. /// internal static string stateRemovable { get { @@ -1006,7 +1033,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Removed. + /// Looks up a localized string similar to Removed. /// internal static string stateRemoved { get { @@ -1015,7 +1042,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Removing. + /// Looks up a localized string similar to Removing. /// internal static string stateRemoving { get { @@ -1024,7 +1051,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Unknown. + /// Looks up a localized string similar to Unknown. /// internal static string stateUnknown { get { @@ -1033,7 +1060,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Ready. + /// Looks up a localized string similar to Ready. /// internal static string stateUsable { get { @@ -1042,7 +1069,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Assign New Group. + /// Looks up a localized string similar to Assign New Group. /// internal static string titleAssignNewGroup { get { @@ -1051,7 +1078,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Assign Service. + /// Looks up a localized string similar to Assign Service. /// internal static string titleAssignService { get { @@ -1060,7 +1087,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Authenticator. + /// Looks up a localized string similar to Authenticator. /// internal static string titleAuthenticator { get { @@ -1069,7 +1096,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Configuration. + /// Looks up a localized string similar to Configuration. /// internal static string titleConfiguration { get { @@ -1078,7 +1105,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Deployed Service. + /// Looks up a localized string similar to Deployed Service. /// internal static string titleDeployedService { get { @@ -1087,7 +1114,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Downloader. + /// Looks up a localized string similar to Downloader. /// internal static string titleDownloader { get { @@ -1096,7 +1123,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Group. + /// Looks up a localized string similar to Group. /// internal static string titleGroup { get { @@ -1105,7 +1132,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Login to UDS Administration. + /// Looks up a localized string similar to Login to UDS Administration. /// internal static string titleLogin { get { @@ -1114,7 +1141,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a UDS Administration Client. + /// Looks up a localized string similar to UDS Administration Client. /// internal static string titleMain { get { @@ -1123,7 +1150,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Network. + /// Looks up a localized string similar to Network. /// internal static string titleNetwork { get { @@ -1132,7 +1159,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a OS Manager. + /// Looks up a localized string similar to OS Manager. /// internal static string titleOsManager { get { @@ -1141,7 +1168,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Service. + /// Looks up a localized string similar to Service. /// internal static string titleService { get { @@ -1150,7 +1177,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Service Provider. + /// Looks up a localized string similar to Service Provider. /// internal static string titleServiceProvider { get { @@ -1159,7 +1186,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Transport. + /// Looks up a localized string similar to Transport. /// internal static string titleTransport { get { @@ -1168,7 +1195,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a User. + /// Looks up a localized string similar to User. /// internal static string titleUser { get { @@ -1177,7 +1204,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a User Preferences. + /// Looks up a localized string similar to User Preferences. /// internal static string titleUserPreferences { get { @@ -1186,7 +1213,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You need to select a transport. + /// Looks up a localized string similar to You need to select a transport. /// internal static string transportRequired { get { @@ -1195,7 +1222,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Transports. + /// Looks up a localized string similar to Transports. /// internal static string transports { get { @@ -1204,7 +1231,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a User. + /// Looks up a localized string similar to User. /// internal static string user { get { @@ -1213,7 +1240,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a User Preferences. + /// Looks up a localized string similar to User Preferences. /// internal static string userPreferences { get { @@ -1222,7 +1249,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a You need to select an user. + /// Looks up a localized string similar to You need to select an user. /// internal static string userRequired { get { @@ -1231,7 +1258,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Users. + /// Looks up a localized string similar to Users. /// internal static string users { get { @@ -1240,7 +1267,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a There are errors in the data provided. + /// Looks up a localized string similar to There are errors in the data provided. /// internal static string validationFailed { get { @@ -1249,7 +1276,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a View. + /// Looks up a localized string similar to View. /// internal static string view { get { @@ -1258,7 +1285,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Waiting OS To Get Ready. + /// Looks up a localized string similar to Waiting OS To Get Ready. /// internal static string waitingOsReady { get { @@ -1267,7 +1294,7 @@ namespace UdsAdmin { } /// - /// Busca una cadena traducida similar a Yes. + /// Looks up a localized string similar to Yes. /// internal static string yes { get { diff --git a/client/administration/UdsAdmin/Strings.resx b/client/administration/UdsAdmin/Strings.resx index 9c99485b..2278e05a 100644 --- a/client/administration/UdsAdmin/Strings.resx +++ b/client/administration/UdsAdmin/Strings.resx @@ -522,4 +522,13 @@ Are you sure do you want to delete selected items? + + Release "In use" state + + + Force to Active + + + Simulate "In use" + \ No newline at end of file diff --git a/client/administration/UdsAdmin/app.config b/client/administration/UdsAdmin/app.config index 19f947c9..aa70e0c6 100644 --- a/client/administration/UdsAdmin/app.config +++ b/client/administration/UdsAdmin/app.config @@ -34,6 +34,9 @@ 320 + + False + diff --git a/client/administration/UdsAdmin/controls/panel/DeployedPanel.cs b/client/administration/UdsAdmin/controls/panel/DeployedPanel.cs index 27f258f4..5a6ef280 100644 --- a/client/administration/UdsAdmin/controls/panel/DeployedPanel.cs +++ b/client/administration/UdsAdmin/controls/panel/DeployedPanel.cs @@ -65,6 +65,15 @@ namespace UdsAdmin.controls.panel ToolStripMenuItem assign = new ToolStripMenuItem(Strings.assignToUser); assign.Click += assignToUser; assign.Image = Images.new16; _assignMenu.Items.AddRange(new ToolStripItem[] { assign }); + if (UdsAdmin.Properties.Settings.Default.debug == true) + { + ToolStripSeparator sep = new ToolStripSeparator(); + ToolStripMenuItem debug1 = new ToolStripMenuItem(Strings.setActive); debug1.Name = UdsAdmin.gui.ActionTree.SET_ACTIVE_ACTION; debug1.Click += develMenu; + ToolStripMenuItem debug2 = new ToolStripMenuItem(Strings.setInUse); debug2.Name = UdsAdmin.gui.ActionTree.SET_INUSE_ACTION; debug2.Click += develMenu; + ToolStripMenuItem debug3 = new ToolStripMenuItem(Strings.releaseInUse); debug3.Name = UdsAdmin.gui.ActionTree.RELEASE_INUSE_ACTION; debug3.Click += develMenu; + _deleteMenu.Items.AddRange(new ToolStripItem[] { sep, debug1, debug2, debug3 }); + } + // Adapt listview to cache or users if (cache) { @@ -158,6 +167,31 @@ namespace UdsAdmin.controls.panel updateList(); } + private void develMenu(object sender, EventArgs e) + { + ToolStripMenuItem s = (ToolStripMenuItem)sender; + + if (listView.SelectedItems.Count == 0) + return; + + string[] ids = new string[listView.SelectedItems.Count]; + int n = 0; + + foreach (ListViewItem i in listView.SelectedItems) + ids[n++] = (string)i.Tag; + + try + { + xmlrpc.UdsAdminService.DevelAction(s.Name, ids); + } + catch (CookComputing.XmlRpc.XmlRpcFaultException ex) + { + gui.UserNotifier.notifyRpcException(ex); + } + + updateList(); + } + private void infoItem(object sender, EventArgs e) { string id = (string)listView.SelectedItems[0].Tag; diff --git a/client/administration/UdsAdmin/controls/panel/DeployedServicePanel.resx b/client/administration/UdsAdmin/controls/panel/DeployedServicePanel.resx index a8065c2c..2628d467 100644 --- a/client/administration/UdsAdmin/controls/panel/DeployedServicePanel.resx +++ b/client/administration/UdsAdmin/controls/panel/DeployedServicePanel.resx @@ -907,7 +907,7 @@ 0, 0, 0, 0 - 721, 69 + 721, 70 0 @@ -916,7 +916,7 @@ logViewer1 - UdsAdmin.controls.panel.LogViewer, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null + UdsAdmin.controls.panel.LogViewer, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null splitContainer1.Panel2 @@ -937,7 +937,7 @@ 1 - 721, 474 + 721, 475 397 @@ -952,7 +952,7 @@ splitContainer1 - UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null + UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null tabPage1 @@ -961,13 +961,13 @@ 0 - 4, 23 + 4, 22 3, 3, 3, 3 - 727, 480 + 727, 481 0 @@ -997,7 +997,7 @@ 3, 240 - 715, 231 + 715, 232 8 @@ -1006,7 +1006,7 @@ inUseChart - UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null + UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null tableLayoutPanel2 @@ -1030,7 +1030,7 @@ assignedChart - UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null + UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null tableLayoutPanel2 @@ -1048,7 +1048,7 @@ 2 - 721, 474 + 721, 475 7 @@ -1069,13 +1069,13 @@ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="inUseChart" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="assignedChart" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Percent,50,Percent,50" /></TableLayoutSettings> - 4, 23 + 4, 22 3, 3, 3, 3 - 727, 480 + 727, 481 1 diff --git a/client/administration/UdsAdmin/controls/panel/DeployedServicesPanel.resx b/client/administration/UdsAdmin/controls/panel/DeployedServicesPanel.resx index 95d19d83..ebace8a2 100644 --- a/client/administration/UdsAdmin/controls/panel/DeployedServicesPanel.resx +++ b/client/administration/UdsAdmin/controls/panel/DeployedServicesPanel.resx @@ -196,7 +196,7 @@ 0, 0, 0, 0 - 723, 93 + 723, 94 0 @@ -205,7 +205,7 @@ logViewer1 - UdsAdmin.controls.panel.LogViewer, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null + UdsAdmin.controls.panel.LogViewer, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null splitContainer1.Panel2 @@ -226,7 +226,7 @@ 1 - 723, 476 + 723, 477 375 @@ -241,7 +241,7 @@ splitContainer1 - UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null + UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null tabPage1 @@ -250,13 +250,13 @@ 0 - 4, 23 + 4, 22 3, 3, 3, 3 - 729, 482 + 729, 483 0 @@ -295,7 +295,7 @@ assignedChart - UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null + UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null tableLayoutPanel1 @@ -310,7 +310,7 @@ 3, 241 - 717, 232 + 717, 233 1 @@ -319,7 +319,7 @@ inUseChart - UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null + UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null tableLayoutPanel1 @@ -337,7 +337,7 @@ 2 - 723, 476 + 723, 477 0 @@ -358,13 +358,13 @@ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="assignedChart" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="inUseChart" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100,Absolute,20" /><Rows Styles="Percent,50,Percent,50" /></TableLayoutSettings> - 4, 23 + 4, 22 3, 3, 3, 3 - 729, 482 + 729, 483 1 diff --git a/client/administration/UdsAdmin/forms/DeployedServiceForm.cs b/client/administration/UdsAdmin/forms/DeployedServiceForm.cs index 10a962c3..6ee35a78 100644 --- a/client/administration/UdsAdmin/forms/DeployedServiceForm.cs +++ b/client/administration/UdsAdmin/forms/DeployedServiceForm.cs @@ -183,6 +183,10 @@ namespace UdsAdmin.forms if (cacheServicesBox.Value > maxServicesBox.Value) maxServicesBox.Value = cacheServicesBox.Value; + // If no L1 cache, L2 cache will not be used, so we reset it to 0 + if (cacheL2ServicesBox.Value > 0 && cacheServicesBox.Value == 0) + cacheL2ServicesBox.Value = 0; + _dps.initialServices = (int)initialServicesBox.Value; _dps.cacheL1 = (int)cacheServicesBox.Value; _dps.cacheL2 = (int)cacheL2ServicesBox.Value; diff --git a/client/administration/UdsAdmin/forms/DeployedServiceForm.resx b/client/administration/UdsAdmin/forms/DeployedServiceForm.resx index a334cd10..d82e9758 100644 --- a/client/administration/UdsAdmin/forms/DeployedServiceForm.resx +++ b/client/administration/UdsAdmin/forms/DeployedServiceForm.resx @@ -415,13 +415,13 @@ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label3" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label1" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="osManagerCombo" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="baseServiceCombo" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="label9" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label8" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="nameBox" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="commentsBox" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="Percent,25,Percent,25,Percent,25,Percent,25" /></TableLayoutSettings> - 4, 23 + 4, 22 3, 3, 3, 3 - 440, 197 + 440, 198 0 @@ -529,13 +529,13 @@ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label4" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="allowedTransports" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100,Absolute,20" /><Rows Styles="Absolute,24,Percent,100" /></TableLayoutSettings> - 4, 23 + 4, 22 3, 3, 3, 3 - 440, 197 + 440, 198 1 @@ -829,13 +829,13 @@ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="cacheL2ServicesBox" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="cacheL2Label" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="cacheServicesBox" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="label5" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="cacheLabel" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="initialServicesBox" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="label7" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="maxServicesBox" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="Percent,25,Percent,25,Percent,25,Percent,25" /></TableLayoutSettings> - 4, 23 + 4, 22 3, 3, 3, 3 - 440, 197 + 440, 198 2 diff --git a/client/administration/UdsAdmin/forms/MainForm.Designer.cs b/client/administration/UdsAdmin/forms/MainForm.Designer.cs index 5cca2682..6cb276bc 100644 --- a/client/administration/UdsAdmin/forms/MainForm.Designer.cs +++ b/client/administration/UdsAdmin/forms/MainForm.Designer.cs @@ -72,6 +72,7 @@ // resources.ApplyResources(this.treeActions, "treeActions"); this.treeActions.HideSelection = false; + this.treeActions.MinimumSize = new System.Drawing.Size(200, 4); this.treeActions.Name = "treeActions"; this.treeActions.ShowNodeToolTips = true; this.treeActions.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeActions_BeforeExpand); diff --git a/client/administration/UdsAdmin/forms/MainForm.resx b/client/administration/UdsAdmin/forms/MainForm.resx index 271e299a..14f7da81 100644 --- a/client/administration/UdsAdmin/forms/MainForm.resx +++ b/client/administration/UdsAdmin/forms/MainForm.resx @@ -123,7 +123,7 @@ - 0, 50 + 0, 49 Fill @@ -131,11 +131,8 @@ 0, 0 - - 200, 4 - - 200, 376 + 200, 377 @@ -184,7 +181,7 @@ 32 - 610, 376 + 610, 377 146 @@ -199,7 +196,7 @@ splitContainer1 - UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null + UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null $this @@ -238,61 +235,61 @@ 133, 17 - 102, 22 + 92, 22 Exit - 42, 21 + 37, 20 File - 127, 22 + 116, 22 English - 127, 22 + 116, 22 Spanish - 127, 22 + 116, 22 French - 127, 22 + 116, 22 German - 165, 22 + 148, 22 Language - 165, 22 + 148, 22 Configuration - 165, 22 + 148, 22 About - 52, 21 + 48, 20 Tools @@ -301,7 +298,7 @@ 0, 0 - 610, 25 + 610, 24 1 @@ -322,13 +319,13 @@ 3 - 106, 22 + 98, 22 New - 106, 22 + 98, 22 103, 20 @@ -340,13 +337,13 @@ 32, 19 - 126, 22 + 115, 22 Spanish - 126, 22 + 115, 22 English @@ -379,7 +376,7 @@ Clears the cache - 0, 25 + 0, 24 610, 25 diff --git a/client/administration/UdsAdmin/gui/ActionTree.cs b/client/administration/UdsAdmin/gui/ActionTree.cs index e910b400..1429c125 100644 --- a/client/administration/UdsAdmin/gui/ActionTree.cs +++ b/client/administration/UdsAdmin/gui/ActionTree.cs @@ -72,6 +72,9 @@ namespace UdsAdmin.gui public const string DELETE_ACTION = "delete"; public const string CHECK_ACTION = "test"; public const string PUBLISH_ACTION = "publish"; + public const string SET_ACTIVE_ACTION = "activate"; + public const string SET_INUSE_ACTION = "inUse"; + public const string RELEASE_INUSE_ACTION = "releaseInUse"; private static Dictionary stCache = new Dictionary(); diff --git a/client/administration/UdsAdmin/gui/MenusManager.cs b/client/administration/UdsAdmin/gui/MenusManager.cs index d609d7bd..569b867e 100644 --- a/client/administration/UdsAdmin/gui/MenusManager.cs +++ b/client/administration/UdsAdmin/gui/MenusManager.cs @@ -209,6 +209,7 @@ namespace UdsAdmin.gui ContextMenuStrip menu = new ContextMenuStrip(); ToolStripMenuItem modify = new ToolStripMenuItem(Strings.modifyItem); modify.Name = ActionTree.MODIFY_ACTION; modify.Click += action; ToolStripMenuItem delete = new ToolStripMenuItem(Strings.deleteItem); delete.Name = ActionTree.DELETE_ACTION; delete.Click += action; + menu.Items.AddRange(new ToolStripItem[] { modify, delete}); if (dps.info.needsPublication) { @@ -216,6 +217,7 @@ namespace UdsAdmin.gui ToolStripMenuItem publish = new ToolStripMenuItem(Strings.publish); publish.Name = ActionTree.PUBLISH_ACTION; publish.Click += action; menu.Items.AddRange(new ToolStripItem[] {sep, publish }); } + return menu; } diff --git a/client/administration/UdsAdmin/xmlrpc/IUDSAdmin.cs b/client/administration/UdsAdmin/xmlrpc/IUDSAdmin.cs index 76785f38..232d5719 100644 --- a/client/administration/UdsAdmin/xmlrpc/IUDSAdmin.cs +++ b/client/administration/UdsAdmin/xmlrpc/IUDSAdmin.cs @@ -354,6 +354,13 @@ namespace UdsAdmin.xmlrpc GuiFieldValue[] InvokeChooseCallback(string credentials, string name, GuiFieldValue[] parameters); + + // Devel stuff + [XmlRpcMethod("develAction")] + bool DevelAction(string credentials, string action, string[] ids); + + + } } diff --git a/client/administration/UdsAdmin/xmlrpc/UDSAdminService.cs b/client/administration/UdsAdmin/xmlrpc/UDSAdminService.cs index d8bd0165..b56b0718 100644 --- a/client/administration/UdsAdmin/xmlrpc/UDSAdminService.cs +++ b/client/administration/UdsAdmin/xmlrpc/UDSAdminService.cs @@ -768,5 +768,12 @@ namespace UdsAdmin.xmlrpc } + + // Devel stuff + public static bool DevelAction(string action, string[] ids) + { + return s.DevelAction(credentials, action, ids); + } + } } From 8ca12ddbc69defa200391c6edba42747df885f7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez?= Date: Fri, 21 Jun 2013 07:52:08 +0000 Subject: [PATCH 23/23] Added Reference URL for .rdp files (just for not forgetting it) --- rdptransport/java/src/es/virtualcable/rdp/WinRdpFile.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rdptransport/java/src/es/virtualcable/rdp/WinRdpFile.java b/rdptransport/java/src/es/virtualcable/rdp/WinRdpFile.java index 2b5f2831..63da6b40 100644 --- a/rdptransport/java/src/es/virtualcable/rdp/WinRdpFile.java +++ b/rdptransport/java/src/es/virtualcable/rdp/WinRdpFile.java @@ -1,5 +1,7 @@ package es.virtualcable.rdp; +// More info about RDP files: http://technet.microsoft.com/en-us/library/ff393699%28WS.10%29.aspx + import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter;