From 03abd073f40ee44b402366b93facd2f1ad74d59c Mon Sep 17 00:00:00 2001 From: AcruxDevelopment Date: Tue, 18 Aug 2026 17:33:43 -0300 Subject: [PATCH] Add copy-chown merge command + motd install --- cpo/cpo | Bin 0 -> 55560 bytes cpo/cpo.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ cpo/install.sh | 2 ++ motd/install.sh | 1 + motd/motd | 15 ++++++++++ 5 files changed, 92 insertions(+) create mode 100755 cpo/cpo create mode 100644 cpo/cpo.cpp create mode 100755 cpo/install.sh create mode 100644 motd/install.sh create mode 100644 motd/motd diff --git a/cpo/cpo b/cpo/cpo new file mode 100755 index 0000000000000000000000000000000000000000..c1b097117f73240564f491d4d797d6b150766e7f GIT binary patch literal 55560 zcmb<-^>JfjWMqH=CI&kO5bpr116T+`GBBLD0Oo=T2L=lUUIqsSMFs^1HU`4hDe`(Shm$Ri943?E>Qg4zf2Hb~zMsJ1$c-Q@0X0{G8DbxdRsrc@U|@jJAhjSN5Dmf)@<2QWh6i~NeJ~or zL&OuheG2&yeG2&ym2es&%%A|JL3V(c!B0z4Kx|U&3xMj2i2#|xzz`Dwu@6R@fDC0| zV1Ut3E<@nck`z#QLUa)(q0zt)1ho%W{8>Q5A4Y@H3CMJiy&?<@;B@Nl7s_z`+QifD zS}!iu%Cc>qJhLgFtqs7`hUTr`3T2hkP%?~-?XcS zf#JVuPYnYDzq|v(e^n4a10?tI!T9~4wC8^HV^5TBiaf#GEVnC}JRgQEXs0+{av z;&X!J1HgPM5T6UgcL4K^Kzwcx-vG?l0`Yl3d<8IH3B>0G@ddzqDG;9z#Ag8Wg+P3M z5dXtJkbk*Ad{Fefd;sP%f%t+T`3qqFuWAN{3?UHz0GR&?#1{tfH-P!CKzvZtyj%e0 zKLYVZLGly8{97Qt7>M5h=3fHw#XL0L7@dgzX-&a1<4D5`LjTLIS`)#%%23}%Y*nI{(}791>%FU)5`~7 zeiMkV2$H`5=2wCEN+A9LFuw@IR|fGnfcaS7Dv>Yg52fOjL zYp7xD}z0n-&A;X)^>E3wseLzcyzmVcyu0r zApo}GV0UOkw`&W?g7Yt0|Nj3ElRm@8z|eA_L<+|L%g4ab{DBc{HOTDOtY8kXX%;e#F8$pZ?8(q$gKt`k5eIf0cx zY%zndH-N;oK=vDXbRLE&l!Qovox=-ZgB3D@*qt{(dY1k9|9^rrA;&_O5V8sZkKR^LiH58KR8B!Pf}Ayx2Nu)T`+mT!wEPWn5hz81EP$p+3tmBc$f-Eit2>f4wLOX{=%IV6nP-Cz=nYRyiX45+$doN zhS!oX^P#pu%(DIc|9{Kv5`HA3x>!KTZ|Vt9y!7^-0aIW@p=n*=&;S3B>|wo6Arux* zEWcoZ2Jr+q8#4fKzHO zIFuk6?h*^cOR$gwtAcnbjD>-r<#q`V*x1hFFLptq2vpgC;^R0I1H(R0*4+=PQ(t6) zWqU!g{M#>h^lk;41W8*UPB9+3Q8s679V|Np@e35%!B<1f6yzJ?~4<1cI=Tu9U%f1wNELgM=P z3ppkRhRz!==Q1!bcy=B^ONfk23=BSYASc@bEbJI*DF_^yHkB2~fG_Hv(Y!Zr2~6B;)n%|NjY)a?hjrjRIH-q_s2jg-3Jk z3x-lQkoMPd9^IioK<0ULUIfKex9ba!&O;uZ=U-GJ833{uWNxq7N}u2mJO1JcxPAs#j-BB6g4K;63pC&sbcWsln*`PcE>+6G9tR175(rqR z;xn4z$3cZQB=zcm4F|PKU>2Z+G&EE|Fm?$8e&o!~qKZaQ@aaDXzzF$Vz# zSdN0~=m>oelJP*&aNGe@iZg(O`L~6>?+8H3g#jL&wL3gIOE-9QyMh}eO8-C(DG~JO zcHIF=LudZ}|NrtGsErC$aQEN;|2EA0Q$Wp536Jhjkj@>@82k@Xd=N=7sCNVQ7N}u3 z2T9^72Ll8DHU=Agh(UZX>taC-rxK4|P-8801Ju|ukVcSD=kXWUKjg-g^7xAqaO56;0qWhr9IF76tOS=^pnM5)w>!vI9+(?$g4%%H zt~(I%2}$Rm_~>^101A~Ge?g%Hak~b%K!PTcjUPc3-64-|Ur@RC1KJ$W{P+L=YYCX( zE>KeqD&q)pXt(PRs9m6h4aqs6#M}+)e)CT`z`yMPr~@OpGb7l6VOK-21H-;FRtARs zFM=HyUfllxD#<|U{P>IcU}u%Yf|Fi%1SpNX@aSd$=e5q`FG4^{Ef2#@g!COGcM62S zjLn1_+W}Gwc7y|mM{mFdu#ues9Is74EdFf{0?i*7;SMu_n~(=L!3}BxD3OBnAey$s z_|hT7fni@c+_0bT5x(5{2Nd`vfe=G6e5nVr7mF`ffZPZ+whC_SBABt=4jix9AqFx) z911D@K)I^h^#}hp23Q#k6@e7g$dy$`=zCE1^5_Ovc|Uf7DjHB)+4mk?nxYiou%ra4 z&LAx^6E;{gTM?8|A^8_va!J8uP};}Pf&x~QfK3dACOWXb?*HI6C^TikOEj=TP-z4z zQNRlK;&LF0aofRVDm$KAoyT9Cz-5T*k2L=G2lxfSYER6fD=OVAr5F!Xw3qy#!*5J zGe#Hw$4qiiH+mq~-$?ZoC`CX*TnW^wfVPQ1In~0Wv-X5XckBs|Uf25`ovsfiOz`M- zJpqbJUT_6{5F&91T%_H9AqElzD?R?=8mQF)QSJHytZg4GTbQ#mFd%hz(bH23$P}oX z{UF{!$&ntQW*S%o4Hu46GB@ zg6OP$bKLdM|NsB%kGuW=jTtuAzWHCu#Lo?@uOZD`xFhvI?ILI^0aRqS9w^ZSmq(q) zU+944Ko!;xk4{%m9{&JR0_kk*e+6=|>kkh|%NEui1cge3M`!H{kIvEs9^J7kJh~yn z6hA>82MxjWy6%UxB|;x~bh_SvG+JFj1^o?=PS+EV;Bq}MVFEb5SAgPMmK73`Ag!Qw zH#j8KK!RYA<1e1Efg=@SlO;IZ55p`z2kJ9}YHrsR9-X(K0a}R^pkOPK5CbApUxR!G z3Q%x7gF6MF6w&R#;n50eE5XZPNc{|w>pcGA0tc)e3Qtpz90IPn>pp`F1vUJc5anzD ztPcPRHPo~O9WvSoY7>Ck_>d8#IFO$^k9l;%+L#wTIzM@If*ScRGC)26*PI}yqvTYm z3-$j0{|~7;VKwljPzQ!x4?-On_FVwgO%K8x7+$cw1i2KFC!;|2^#*{3<9skU{+U!vnM2_>WUHdYJ=mbd>Nz0tehS{S3;)@DdMEW^@a9^n#j0;7SBMLE9Bjhz7a^bm z6Wp?cw$SE32L~&-aclhI|NqxspdJTQwHjD8BtMIR!XF&vJ75i{@=yQ&LweBA*0B?K z7!2G)dHw=qE>e_(1InSJ^m#|_+BUe^P=Vi*`0_JIc0LD{nz5+oZuIzxAO^nzRFE1;>x8DtsA zoX+DfdO^cbVAGGkFlB~h*cGpJAi)40Daif>^CwgpA6OYAT>gOr5Z$BTq6Co~YC-u0 z?m2KOh4~JDJg)%z0V$q0g1ic9+Jm}zsPX&&RKP%EE{6%?5qMl}e+r5ZNGHbo8CpEs zfmK8NqX+U2YCQLUfcYO9&r#s{4A=kXVy>1)X7r8uM* z2!OUqz&X7Slonv^7nIg8D25Tem(JraZi8z_Pz?ZfTLLH%f?MV-2TFv&wHv4`Z~no* z1Josg4*Wuz-{7!94oOh|g#li&gY1Qsc95C0e5#1afPBQfMWu*6oR(oL1F#^ zG~(j{sf)qx{sd}^SiAnh z^}_^c{eQ!w`3HZQy+^Mvs5P(yT5f|UZytgwAn;fgtj}Buid#ti2NS9Rb#pnvg)OL= z=+O--hCrnxM--*rz3+;RH}PfKmaZ+3V38!RXNqN*2do90gYz2O$ltTi_ge z{sm-k1jQK7zbF$z@YW1CH64E;2@0)l254G@j7=JV+v=d=rQ7v@Pj3RqPH;;-5NszX zCxW>S;P3|x8pJ;E=}ZNs#Ty>ozQ|48i=g)T1drw;28gjrNShThstX;OWh@m1cTvEO z0{fof)&Kvm#liIf>L`fZE98`l(q>C%g~tvo-eCE(^Z1JxkZY}7Kk!e24u!y)O&sA4 z47()49T@h-!kbO!?}N%`NV6##RMUZq2gVC%?HAbaEx5n+!lRo5Qdol1`d1c^V_@kE zGC~GQx1d&4r|Xa7u3tc<75_HYD>0zHD#S5{pmG6JUw6BH>2!SpD%`pmI$a-hyFTc2 zz0>Xbgwgd*cjz6Ec&9+O>x0)aPz@Kr8qRcwo&hC@5BvuOIxkGEM7lv488jRLZghdmvKgQj4m8bx>#oky z4;`WJJAB`P-2)1&PH<@t8q4T_3^Vd?3w_rSzzHp3LDP~iz(Z(zB|v3B=T^`f0nm&g zn0NfeTyPAuf<*bZIdJgry8xAhR6KDAX>czFTrPs$2JuC!2FM(6MRoi|HOL#Ct)Nv2 zuS-0-!E*fD7&=^^dvwEXuyB1|B7op?TDU$hl}F;EyWq~f|Np_QvEEkD03pO#$M1pC z4cG#Y<^zl#onYn!k6thhFCjsVUa)gKKy4CGm$I9|!}1U~5%9N0fy+3!!_X~G2HDZ; zy1}D&D#&7J38D)Y1vS@NApr``M%(X#1``g0W}m?g;On4aEr^3b_56-IAn6;g^&rhQ zu#zqCW(z{y1c*A27FUox@cCu%@Hse?AzgoHJqRifF?&GW5}W}o$6+yOlIg>17EnfjhK5J;8wYTax&zdO2leJb?J>xJ#_<>Hz^y_^ z@ImW&PY{*pj^LPu%uXUv9H{i`^nC#7>>Ypc z3Or;7npXxd`}q49lqo>na%fF<5j@gx{Kb{G@TwHzOGr%yY3+3$e_`|mq!AI5prNV{ z&{7iSB2b$M+yh_*D+bl2VD3K9>=7fls)u9}*9Rc&4^Y~%p!kI}F~E%g@F30wP<7$a z?F(|n2joV^3sBP>+F*lsrfWgUUcf}5k%1P&iHHU=RvBc!BWiKbS{zVU4N?x)-^7`; z%y1gtj8mo@r%X1o3@Ch%>ovd3x4az3RU+laAY7@e8mU|^82>@ZJ?U8pazGI{Uf zDDm}w%~VTGC)u`SukiXHvi?SaYA%oSBcEj-KL1o^J#_J8o#+f6=dUJ(bC*w!a5-z@ z{ejDzeL`D9*M93AZg!^EmoJO_)BEb5!DQbG&+KiY1t*o(tnvDATcWXgc4pzEj)VQR zyY+YJF7;~g`@iPYKP}H?x*A(AEx6u);bm0+k*QJHnYqdQ-U7sRgqHx7G~ znX#+CgTueP!r0X>X2dRj1BbngJlNG2;}AE-;a?FP?s3JTK2iX?y`TmA*y76?hdB>$ zh^um9H(wA(y7l44uKpyBa09K)#^z2HHtgnrh9^La@zL|q9US><5svhuj3ZwpvN13y zfp$nqLiV{_gjxhz=nE2mB@Pjv1{HtE0#Prb01*dmJOD{qK*b|8A>!&FK?Vi}WqyeI z9xaGCtc<+C3=#hVHRmH#{W2zqxEs{oEU37!AVmC+I>a2%1_qE+CkF$AAcGVGXz?_N zF8~TK1_p-791!&dQ1cCjHK*U3oAu3^Iw!Z+xe9#(HkUE(8 zi#Q?bOXMNyLFGC~K9vz7-XjGOj|T}dFfjP@Lc}*f?S+NUDX91ZIf!~6sCr&*i26&= zcmZt)0ZGk=#@7yLIH!UH85kJCq3)4Vf|vu^-~y653^j)VY7Q)Zo1o$uPD?*S5IU|_I>h8uc(En$GTe+M)?Mspwysv_~=PJ~l2GH~mYt!6^#>+jZ`(fef1I;g9(0mGN&wz}| zgZc|S9BiQOk%Ow&1}SD>V3-Rn2R=aElL8fIh>uUt&CiQ3E=epZiH~Q9j|wiyDfSF5 zF*HohNGyskDN4*NDfUcubqxwGF*Hs}EY3`h&o3@1N=?l5Ob&^64K|HWW{8jS^A0XC zkB?8Ts4z4%G=eBAE-A{)OZQC1G%Pp~WTIJ4YF>IthHDwvRwIM>_>zpG{PK8+aC~Y} zQGQW?H@T)~R=DPZ97ejk%;SCIQxZ!OT?4>&lWu^aVZ3jAa$-SZa%M>-#1&)&k4aKu zayB$@a*A;WBbJB>i4QS|cMUd=5AycI>HJ`m_+Zoc5W{#^S5P>42bUNcq-Ex$7FQOR zq~^jR)1)A=B*Qe`C$qT3I5jT??4FdIfHFwf=I0cGV{`5X$4m* zFfJ}B0-Nd=Tw)v_W@KmzaX@@>Vo7Rxeo-Y%5^g?`$;;UgLnmo2!(srjRvWnncqiuu zc?TPVvXme8pf$26N=+^;D$XoRjZeueN=+`wFRF~sEJ-a&EXgl&HgpBWo@i3bpS&qC!?rh|W-*%WK#8#82{%|&=AUULjfr7yh6t19r2di+C z5>w(6b8_;NK{YX1g;hZTB&xkhk860X5?o@EoLW>wUZ@)y#XEw05TB8m0?so5$?(z_ zN8$xXGNfiRG>-SoEy#&aNzF+uNi9mwaSiYbHi|a|i-O9b;1VOl%>3f`q{QOX_?*n7 zqC`+hotIfs25LZ6RKypg78U2`CFW$7RK}MXfc!v4P#BuU`^KlImOvr{R0)tBs^BI_ zW^sH@esW?C#1zt_#@P_H8Y9C?rpchvo?Hi@#j2reK(c=@I2VH=BtAYpCo?Izq9Q)A zxHz?_Bt9)MGbg}1IWyQGKG*=1$Z@1)aLgN;#QVk<7vyA?#3$z#loUhU=uLVknWp9z zl)zgl$VIWCNpWRvPG(*q=^Bs>YOI0sEa^T1wG@(zQWHy3U4wGT^c9wt z0%;9ZECvwU)G!8Rg47c9)()rzl95=Hni5}7Qsjvv8{x104GrR5GK)YdKRMgg$Imi8 zK0U7#+(9&o_sLJrjxWg1$xN zNe${x8BpA$HjEF372~O{LBYoH;KV^jPPfQStcWkptb#VC2v=sNNvY|XdGO*4xj=%I z5|9GWupqH0HLoNd)Wd@)Cq4Zef?L~}#Rd7r5C?*4@%+*fNNxf*UFe#Q{DaNF1wR=9 zZGsZWu%IHkl?KX5;Mx{4c0gviY>3?$oRJ7=zd%ZJBaqL7OAIYx?Yf-&^vqRJXXFv$pJc;qWLF*A=LH#Il8ppqdcIU~P3k0B>BskkI1 zSz8-4t7!(}=E7O&$;t7>Af6#eJQ>6?V{mtNjyKjbU~u>GbaIY2(la(fFpc3%LlZdD z7{N5sGi7j&h;VfBj5pMSDvpSVH`X%&8H13~vxMk|$RV@!jG;C|r1XpoQDlukGo?%n zAjk|RSr}Lum>Ad?SQ$WkRt9#kCcwH%LgVIz$6m`BN}9d z@?kWxJTFuZCdQ4%hlwL-$N(jXZz9Y9K2{Ah-x8o!$<4sP$KV4x*@=OHfsuig!3ip# zz`($;Y2q|C1_o}15UAK@FrSkl9?G8r=5sJ)LHS$2e0GLXD8E!HlaqmgjiCWgQ85npOdZ1!XKR^rPco?Qb`IQ&fb2Bh-F)V}fOEf2OFfgz(Y=-h3!0K5T z_CxuFU_LX$IVisj%x7Y_3$_17J!HHbbTAj_Ff5Q8K==WYIOtF(kQfNV#@9gydx6I2 zL1G{bnCL@3(4mxxUCN6;_ z4mx}cCa!=a4ze32u7M;D@-s}_07)F=CYZPdk~nys0aU^PNgQ-Y8C00T14$foSQ$(_ z07)ElXcg14$ewmjwwx@dG4rJE$0l zdVwSkIy?;|2EreZ#6jf!$_mt)v$BGXBC9D7tJ2CUzW_4wtgEY`39*HNLBF)PNIx?#Ij1xwRX@Yp>k%VA(CYKh0oC$TYt{rGh8Pu`X1Gh&tG(mnzEQwFe1I;}pgGQSP zxQ!gQYiVdIfX#+_0OSZQ;~t z0gdfv=I1G-73JrG6O%$F#NB0yIhiR8ir`@kSb%_24LnUDn`RU5oRL@*qN5NW0-hVx zQGkrR*;!eE13n(%C$bCy&3eHiQ6aiKvm`?SVxxks0%%Io8fLMAEhPPb1flbkHXyd0 zHPl5g1>m7g&}bS=8r_|?kN^T3uNDhVIXKfja!}}HFvQ0fbWO*6g zJ!BaI%e~RD8X&jCmsA#{YC=6W0KsSt4iT^`6l@i8^7GOaO7n^{)ALeO6f*NlVo_75 z6)2yAhfzT74QXa;0~Q8`R?zyv)&KvOurM&Bto{GrhlPP*%G&?`6Id7+yw?5yZ^OmF zuy@`6|8uw)7*aR<|9^ywfkAES|NnDX7#N(k{{O#+g@GY<>;M0ESQr@QZTVPjxW*#7_j5;g{g#_j+A zpJ8KQc(nch|1Y2h%#Q#6Mc5e_?&cN_)=l}m#*clk2cK!eV1*CrW|Njyk3=FS!|Nn2p!NBlm_y7Mf91ILx zd;b5g;b35}-1Gnc91aGC?mhqi@8Muz*s|yU|2rHE47c|D|Nn=Bfq`Z3|Nk^FZ z|Nq0uz@WA7|9=@S1_rNv|NqBuF)+04`~Sa&i-BRyzW@KtqDt9}3f z>u@tLgzW$SKZKisp=SU8{}tQ}41N3m|DVClz@T#A|NjHr3=A#@{{Mf#&A_na!2kaY zJPZtF2mk-q;9+3sJNW;<2M+_oii7|EXYepE+&cLGe+Lf(gTbNy|JU#^Fibe~|3Bz- z%YBFb|9`{7!0_wP|NlI^3=C?A|NqzFWnl0-{QtiXF9U<}k^lcoco`TXj{N^Wg_nVW z=ji|cdw3Zb%#Qy5e+R@r_WwT%9|MEjvH$;7_!t;$j{X1d0y=o}*#G}2d<+a1j{X1N z!pFeCb^QPTC43AF6374lKf=erka7I~{}+4=3{A)X|L5RmV3>3K|9=gB28JES|Nr;k zXJEK;{Qv(9eg+1P6aW8r@G~%oocRBL1wR8r$cg{|Pw+D^#|6fOdfnmwX|NnhJXW^av|3627f#J-_|Nnag7#PY<{r|r~fPrDkssH~k2rw}G zIQ9Sk7Xbzar_=xciwH6>#GL;B-$amsVb|&Z|3d^B7+#(J|Gz|#fuZ2c|Nm1285mBS z`Tu{5AOpj{Gynfz5oBOEdhY-KKY|Plch3F)FC)aju;Bdv{|-V74ExUi|DPbl!0_t) z|Njj_3=9Dm{{LSf#K6#d;s5^wLJSPcFZ}=iK!}0i;D!JH8H5=a?p*l)UqP6G;m?Kt z{~d%G7*sC)|DPbtzz}os|9?=Q>Cnah|Cb0eFuc3?|NjwT1_pym|NlP`W?(43^#4DL z2m?dsrT_m`L>L$rU;6*wMTCK2-=+WmQ$!dTUR?VBzeR+Bf$8%9|4T#|7-TO0|9?b; zfx+zZ|Nl=!7#IRB|NqY-%D^!9^8f!Tq6`eHFaQ7VBFez9^YZ`yDWVJvur@DaRS*MX zg#e>84?D*MMo7OA)SeVr`Tsw-{pG?g0BV1O`Z_u*|Nn>eJwSaZ7X}7~j%EM~4{|B#yhMDi)!`#fm z95c)yFj8y?X;Mito1}%$YhQ&F^51{z0*zo^9NI%PyTnBhKAemvp#K6$7;s1Yd z{{-g7P=p;JObiTFIOIX*cQ8Q0DG^jpy+E?VwV9a-njS#vK*tZS-SGcESltio>Of(3 zgo%OS*@plB!E4}P?ukUW=Lr)7!;=mF|AYHMF!>0CJPR`e!=nxV|AP}MOg}A>?yd7#OB*{{KG+*$qsP3<|QphlPRR_~!rr!Fw8D<|iZcuVG(x9S%BKPoB#g@jW@8wAgN1&r~$bJbavSv9C-(17pRT=Zu9^Dpmpag2}ovu z?CL?7Gl89fA!f_}{~&weZjMICZ-B~!*I~oLmG_iV+TA3^Q*Q=t9`a(YEdkD&Jav#tOCgZ4$i-H?v( zBdDGKX)7dN;quTp1%;&nI|IY7t^faD1=UkEXkmF8VU7zY1H8uu03r`E zr-Geoc6?%KxEL5DcKrVjUfU0scZbV|a4|5r z?D+p5yp|j$Ujmi}mlGvi3=DBQu-7A?v@?Z^fx&0T|Nr1U2r&JiwBv>_V+R)lL&Xl< z>GK8`149uW`5#;i3^_Y+*98*X3=A1~X7pP`Bg%e=Sg&+K-eLQW0j{;bvd}nE~F5 z0<(kZ4Ojsv9{+GNFof;I9fmSI3=9Eyi}t1_q0r|Nn#6@Wbo}#p437 z6Tsorz{9|>ZzuM)8OWatco-P=?EL>9H1-M4qmVW=xCICD#}OU|hCe(1{|E1Jf!V|4 z3bq6!|AdEuL2Vaqf3om0FevQ${~x@k1Fj#^fCTAR;bmZm+l9MbVD!txC-1H+Cz|Nn#cmcaZ8ijSQTyFg|L@G&q% z?8RL+81OMLgzbg&58!TvG)2Mj8NkQDkhJ&zfABsSm>o=zMgYkC0zSyt322`wTz>_^ z{t0{x3`h6kj;jrP3=I46$Y0=NVAzRA{sSKa!sJAOh&-sShr172CxF~^|IKEF!?b5ROOQ zM1X-IXdk5Pfrk-Nxf3G5zz~B+e~ADCLl_?UDFO@(0eIxM2tdZwaP>d02tdLIv_Bc{ zK1dfFoJK+8L52IUms_Cl0gV&Ig?|SZ8oDbTekQa55}o%9+8zaE)30 z0|&!m7N^Y|4C`1O?r<>tU==#e!LWmE2ICzLh7Ft$%^*8Km@`nhjG>zmBFMdpk#!>@ z!!amVB$Tz4k)eonDjFlG*^DM&xAE(;PG)3?V{Kw&SV=%B$O=&vRt5&=X-rF) z8D255PG)A<1M&dK@1VJA&=?VDdz`N;C1HTWPtY>l)HGsIlj+GrIW2p_ga z7>jNE{~r_1}N+jpGW?``$tQbCCQAONjZP zC08K+0z(KNx@?o-4b=VMact1pZXiVr3=H7)3s5$Q0`<{B^b6?vdRTwG0xAJpX98Lm z3{nSMBmKZ1VjoOA1ImZFy8@(`fq?-wUI3o2VqgGW^$hk;h95-#|NjvGL9Ju>0OfD- zg~&sVp&JFicOK2gGHCp^LFs8wdKr}72BnWd>1$B>8I=A8rP){@{t|=IYEaq?O1nYn zFese{rOTjn8e=3=3$j~54SR?Fi$Zv zFf}t$(9_c|t}ISTEhyHnurSk4Ov=>F%P&dQOJ)cTurg){cD6EPaCWn@z@yO3$I1YY zw7a8~Awz(tl?g+ztCaymX0Vk31Bw$e^D;~Hk|DN0*r24Fk0NT?VDGsZoaNhtcG!fw?stkDFm`HH6v;O2^nRs6Jp}`1l`P z4&*jQ24Mz;d`SKV%_)G?fYzL0Qx96x!~{C;4(fl9S`Y@UF#(AipoxR#>p|kMdJCi$ zgh6w?j0{o?8=4{Zg4_oZ2d!meWDtedDTiI}5o16vj~{}?B^Y4! z6<9k11H*Udd1C12p;_ZNPqG4f&f79Eh`r#oF$@e0U!mf%(DT+{^>YREJiuyEhJ3DAP0k4H*U|@E za};6bAB3t$&lh5#IdKLS1}UgJLF*tu<~V@QFJ)mk$N{kzw1x~M?g~}^A9}tY%={xz z@iQtA_24;r1_lNd=y`@x(hzZ2zD|USPlbjjcr7CX1H&??IQqGlZ=vGP6d~ro>;fGc)tV{M?ddW9D1JQ2B>;i_)ma}Z;^q- z3utW?C@fy#IB!-JdOqYEsQY2%_CBb%E7bjX}#=K0w=Mu>K#v2t+-4_;f(U z(a%{u1{L=bf`l7*O)>)m!yBl04O+ey7R7!JaIh%EUUc&(LdCa1%?Gb(W?*303l(1j z&F|p3eFg@Gr%-Y9^J$gEAm+P4!vVY=g@J(~6)L_Lnm)nn>=_ss`k~_J=Zl^d!|wk3 zQ1x!mas#~fhk=1XQyiq8g+Y=X5Xo49^n%tAf=mQ0`~;O7GSK*fr4uDdi23N}%4R~v(d*^o zP;vBp+NTO~KMTCS04uM4K-E7*D~C&^AohNM#tY0nGoa$nq2(=jZ8!r1!(Azm`5>R5 zVnu1};>OYt^U=?nZN#B|8dQA@wEO|Jvq3f;#-aWi4slHxh`s3N&2~e@(c|SZR2=>M zURha)IZe=Z7i@gT0V*B_t*5|iT^Se{8lmFo=kD%?imRwX(hqpe83O}@v>XG25EByv ztX~H5D+nvfLF`4(*B)}9dPI`J0IfX}0x}1r5e?smn!|!tP72CnkFQ{Ph`s3U+zb^* zKd1U9R6Gt^KETTPcm;?#=;tlZhl-=0WBd>*o*@efAMjoRP%?1+o0yd>aTF9IQsd?Q=sBv&~gvfKEI)iJs#gd)i*%< zHL(7yo(ja?Il_=|2JcH@U|@)bi9_=ptUWMU1-to=q3Y4YL0lDLz6)A<=un093((u) zQ^Dd=3_GCxUs&>;1vO_4v>pMkTV!BhcncN(2{j+qPIFL$*o)quii3)ypC3LGDvo|` z`7Nk;2(&x|^}|7K`Ue$9ZIC_5P(1Mtc-oJK*ikm^(Z?JNp6Dp2=U%+XoIQqQ+BH9r1 zo1ozgURTP%z)%1cUjcO|Y&^XKDvlmshqWR81#Q>^g(D0Dc?_pwKU=YxUm|ulfp4dXgZ$R5c zF!vPeW4E^psviA5f~z>xD;PlRMIZObg^HuMb0!#IxAzWIJ$k!E%MfDzJZO6W*3a^W zid#U(onYndG(*t%11$Cs^io6Y_CAK1gMJ>qk`csS^l~HG2vWbm&P9UNFNIL`==W1> zFv4!{8>sr7P=A5<`Z6#u@EJqwMep~u7-Ki*JXAe9T0dIZ1Y%AUwEY8GQx6J_)lhL} zXt=@Bzkw-4eG;^t3=@xlilg5r*2VyKtT5FekIlnFlZJGrO?e2|M?K0``sQEGZ- zaY<@Xd`WJ6a!!6;YB586d`fm%D&o^J z^D^TTi;5B}<5TlWiYgh>iV|~E<5Nm=b1NC*^wfe5+`fxwAB;9`s5nA zdIjJ(_R|D(>J8-FLFfU=e!<4^Xh$f!y1E8|^c$Cy7UZPHr{<*QrskD+Mu2XNC@}>K zdV0AOfUYTUbu|H;#PfY+(mJCfYC9ARhmzqoBi@LG~Jy=4BR^rs6xklt_Od z4p+tIEU+OKu+x^DLFfJl8^#BC`vn`uo5nlm7L-6;MCy5xh%-?Qkq#q87Db%?MA7-C z*i)cse0*MNIqU?}{36d}S42RN>=($fzu;_v^{{`;+eS>l7jQri(Zm+;_>%$jpkZ<{ zGv-0!&?Be8&c}H}2Ff|tWH^|p+a93B11?9vj(5izrSM22{cK@W^9&i{Q$euEgO@dSo)5YY~t&>KTFK3|}$;1t++C2WMs+Dh*8$SDS!a0pJ)S`%q%k zGi!;y&%_Wd0U1zU34(kNNlf0s=CIUc8Xpg;o`g8T5Et zNG!!0>48p`jgKOuB*b>KIkti=r3`#|2JE7mVCeb$(1rvR!jO`N1Sp)T(+q&tVZkMa zSn5VYgOpV0F>|S|0m-=x;PZq*muZ2Hzy@9Ekdc~GkXq#FlWPFFTY}J4OVH@{!qKww z4l#%i0%awX1Pf|hc?FxtyA;4Lbt3(MWoJXsiQF$H|r2)Gu*5m4YF5_=^EKBXH`^dRanEa8nm zn4Jw>{e!_5#*h)xw73e#Hy(UiBIqznPp~&(hmpsp6z9ihB<7{$KySe^#(tR?a)5&l z$tLgaI^36jz}grD!xdZ~qSm@Fy+~0DYjuNiJC@i3t2BdLorU{~I9J?}2fiu}TwVlu z2Rp)QC?uN<4Kj=4q4$`8b0*py3a~_rqm_l|8-Xs92{w#RVu+6-r#d42k}_96vv~K? z#G(`zc-ajLU}8`8$Gjti&Q1qi!2`Lb1xG1>{boR{*ENEp+BMh$d@CTVx&}obzO)4? zV8FfaGSsXCZ~4);acpP=K0!A=DK#y>DAhCAINsGYDaboG-ZLcLC)hOJ2y&evYQ{oI z#Gorb3_-~ibU6v=S{_gspsF_mpXFN&zI6{>DefBgCOq^z8Mf=FQlGWdi3hK`O)NDiB)(7_7_?<2otK z5XW5#kzry%K~7~n_|}kk_?4cZEQ-6C@0ta^HkI_ycQzue zeNJlpfG>_ixw{s8KN!vg3c4)`?OI@HJwx>Evyg~^6-|bq{D?2tT7Zh~yu@74eM6wd z{t)e;64e-_mGmG*y;Tg>;6hEAuwVq|HqZzZnN|^hy$^vp05n7d8V(0L2%KxM)BzAj z;w-b^r3P%=8q_umE}==671Uz|T>*?dM2EG*iqo}-Rvb1Zd8y#WDZ%-HU~tD3oTfp} z0Ua0*Jv<(CB{i1R487z!z&ja|&>-oQAwDXvJQq!bjPe~d?SbL}es3lCmSqQ&tA8MU z6>Q!ICj&@Z4KkZj2EE1z;zYzakT+8PAZ;WVa#1tHJV+owyH7|a5_|0&sL6=9;g*Oi zO=0c+mI_wC2o*-&Ku%LAqIDG3a=E*P!Ge$ercb3lNL=_>|O= z#LOJfm~3iVT557hW?5={QDRQXoLllb4hhA!k-9hOyUDe^Gi}wK=*Kh zu44z+OQag?n(PX?hu9)MIhg@G4GVD}&Xfpgfq@!L@gcs>u<2M(8xmBwK*x&;=ySCo z=t?-$R15C8phl0OQD!mX5^ivLirMbZDF)TOhD4Vc=p}|qpSt>r3v54j))=i_;~aT>Sz>?mPJu!XCdPZ z!6jye;4FuGKn9e_ar*$=fC7)n1e?Yq4c<|0Fx$`&RHQ*~JB9@(&ddy{RuE+isf7nP z%OgsAGVe1d&>jNKpTY+!v0o{VIm-;HZ$X7M)_VdWWd^8SX#}1`GfB=bErAF^sz1y! z(9j6fAT2G9&(6y)&%;`ZkdsFd{Zvr9n6v?R&?s;&14%dwx!_YZexdklGzG ziw}-Z&d7Gn1O)`hWk{ojurva0m%!VZup8ltQVc7Za!YecGGU1nX09P=Z5L3B9off_ z5fIRj8rGQ(EGY#vdYKGP2cYB(%0BQJ9YfIYDuLXCKF#dq>KcT*No;(*H7Ibg z%#^{35i*MZ%nDa>FVO|%0??WTNHPK^Kg12c=DDfGpzFV!Op_}r3=JV_f=diZ%V?01 z8fX?Pfu~aI5 zQ=_w?XFxI@jWBzNZD+%J%b*~o;RG5eF7vyXi$)!nO6c@ zk(loql*|wxpHy57%QoP4C$7SY{G~$9pp0)44=N9e;nf?coCS9=K~BbECxL3r2sYgo zTw-LHnO_W^1q4-3MTtd~;FdS)D7-PKZUWUQ$n6l*vc#NH(C`RZWd)>C%!OX7i#P1x z1v|KDg?-^0wxkGM{RkSrz#krDE}jD|U4XU~!6gP6Jyh)XcjL*Fh6dmwHm@wTs07qa zAhKcsb@)QSMKCA}AuaVwE=z)!L|D=hq#!WFR}jRfS5(9oq!tzD=OyN3mQ==<86XWO zfGTasR7OEb5p)Oyo~yi*gAL-bWGv`dEE(Ymnn^3khjv2a%Q92TU4u)ox6_Q`!O@Nu z9u~=oC8_E8MU{|H0n1XYK@3`~0x=gd{6*g$Dr%O7EU7|GX=vS3P#>P)G%Rcm3x{HG z0D^{6iz|yuQgaQFySuOtw;{Rf&y3UDHIk2#5NXC2jxI@Mlx(|EoyRy84M0veVI%dWv80U5!73`!csBioDU2%^OxWKDfQa)5U-s0jgT2EhWCgd~H! zS_#tU3W*Q4hzG3)OUo}RPb^A_hwU8zZL&eESV8ncNKW#g{DR$!2Gr`|L3fKFk7r_E zhXO8JafX{wd~hOY)&;a#B)G&7`!u2pc)3cvA^JFWh+%xNV?21V2YlBGH5QwCgBtFn zY+Lb$?ppyB`B)+gk^sS%D?_RV(i>0k-fKWI1A|_1Wo}7g5`$iGNfCt3fU&?wx~1op z>LrzC=A`ImrZDJ%woEbTm84dbFzA7HT7g7LQi}>0^g!w|5{ok!^inGGiYs#=bV(6J zrYyCnI5R&Fg%e-IpjVWdlL*oPWfkO8< zYC%bSNn%n?DuW)}p#?>tYl}-Np+b&Mp1LK8=^#hKc6vda4cYYtc4A^~W-^0bdVUF* z&;z>wVt-O`F@s)melBRI5rZD|Y&@`C#SnjhgGDc~q@*Y_sk9^&wzm?rZ;o6H+OG&Y z^AUDVqy+R#H3{eej<9noVCKWlMS}75z~^@{fUXt>3&GAUuz~6anGcqL66pGS(ex)k z?N5N}2j681)eE9v`-ovQ=sX(G-g?-%nXq&5KzAR5)F;C>>Vr6-eW*|xMuEW0X5DiibqG1?x4%fH;|MOw` z6`=Y-`&L0}8lW0L=h1=qFdD=LVbHlpptHhY`eEmWE-(biGB9XBHE=@18OmjVo!=S7 zz`y_sYM6f5Iix4RmxeLG&mD!B#sE5k5XJ=4NerNSOAzjdo%6W`dN2&=Tse?Jn7uH2 zV01q83{e;#c8+L{8LGFZ^1C?c{1D{(5Is*?P0z0=f!ym%0fKc%BSz-EN z{s-NG3W`(k9X|{V46t)hAHej3EQOxI2-1VDe-hM*F!#gG4~qzfSj+@F;0MBmy93H) zn1!Yvc5Yrw1Vn`i$Z-%Rm_*|;tU%L0AqJEp85kzSfR!_V?pB7dASBHF5FP`=CN%v| zpy&KO$%Ux+0ioa|G&#cgM;I6wkjsw;c@X;_FNAU$zzXMu? z!Sums5j6d<^EfmbAvU6iH=1z_QjCx=g}EPg-iZ!We+AV45YreK(9?rF)P87j2~)-Z z(+{d&;DXS!3gW}up@Bnx6x4oym_m>yEc(qEA?X(?&9GxJ#D!~`AR;bk`mu!vnis(u zKQx0Wh7ZsKB|zu7fX;Y;g*&J$0jU6`3s~5J_%QrnCWJK;c90E(i&6f9&P%|izw$gp LgD;x<(YOo%BFcMG literal 0 HcmV?d00001 diff --git a/cpo/cpo.cpp b/cpo/cpo.cpp new file mode 100644 index 0000000..7eed73e --- /dev/null +++ b/cpo/cpo.cpp @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include + +namespace fs = std::filesystem; + +// Fetches UID and GID of a reference directory +bool get_target_ownership(const fs::path& path, uid_t& uid, gid_t& gid) { + struct stat st; + if (stat(path.c_str(), &st) != 0) { + return false; + } + uid = st.st_uid; + gid = st.st_gid; + return true; +} + +// Recursively applies lchown to avoid target symlink exploitation +void apply_chown_recursive(const fs::path& target, uid_t uid, gid_t gid) { + lchown(target.c_str(), uid, gid); + + if (fs::is_directory(target) && !fs::is_symlink(target)) { + for (const auto& entry : fs::recursive_directory_iterator(target, fs::directory_options::skip_permission_denied)) { + lchown(entry.path().c_str(), uid, gid); + } + } +} + +int main(int argc, char* argv[]) { + if (argc < 3) { + std::cerr << "Usage: cpo \n"; + return 1; + } + + fs::path src = argv[1]; + fs::path dst = argv[2]; + + if (!fs::exists(src)) { + std::cerr << "Error: Source path does not exist: " << src << "\n"; + return 1; + } + + // Determine reference directory to inherit ownership from + bool dst_is_dir = fs::exists(dst) && fs::is_directory(dst); + fs::path ref_dir = dst_is_dir ? dst : (dst.parent_path().empty() ? "." : dst.parent_path()); + + uid_t uid; + gid_t gid; + if (!get_target_ownership(ref_dir, uid, gid)) { + std::cerr << "Error: Could not retrieve ownership of reference path: " << ref_dir << "\n"; + return 1; + } + + // Determine final destination path + fs::path final_dst = dst_is_dir ? (dst / src.filename()) : dst; + + // Perform copy + std::error_code ec; + fs::copy(src, final_dst, fs::copy_options::recursive | fs::copy_options::overwrite_existing, ec); + if (ec) { + std::cerr << "Copy failed: " << ec.message() << "\n"; + return 1; + } + + // Apply ownership to the copied result + apply_chown_recursive(final_dst, uid, gid); + + std::cout << "Successfully copied " << src << " -> " << final_dst + << " (Owner set to UID: " << uid << ", GID: " << gid << ")\n"; + + return 0; +} diff --git a/cpo/install.sh b/cpo/install.sh new file mode 100755 index 0000000..538d23e --- /dev/null +++ b/cpo/install.sh @@ -0,0 +1,2 @@ +g++ -std=c++17 cpo.cpp -o cpo +sudo cp cpo /usr/local/bin/ diff --git a/motd/install.sh b/motd/install.sh new file mode 100644 index 0000000..4f73c53 --- /dev/null +++ b/motd/install.sh @@ -0,0 +1 @@ +cpo motd /etc/motd diff --git a/motd/motd b/motd/motd new file mode 100644 index 0000000..2c87d20 --- /dev/null +++ b/motd/motd @@ -0,0 +1,15 @@ + -^- + _/\/_ \/\_ + (____ ))____) + / - - \ + / ( ^)-(^ ) \ + / ____v-v____ \ + \(- _- __)/ + -\- -__---/- + / / V \ \ + /__/\ / \ + = V = + _=_ _=_ + -=---______---=- + _| | | |_ + (___- -___)