From 6b8d91e94cca8e1233526d4892bdf0ac9d4a61c3 Mon Sep 17 00:00:00 2001 From: auric Date: Wed, 28 Feb 2024 20:43:02 -0600 Subject: [PATCH] Cleanup and buildup --- bin/fex | Bin 26992 -> 28008 bytes bin/install | Bin 20664 -> 0 bytes inc/debug.h | 3 ++- inc/fex.h | 13 +++++++------ inc/install.h | 10 ++++++++++ obj/fex.o | Bin 11896 -> 13136 bytes obj/install.o | Bin 2648 -> 4696 bytes obj/sanity.o | Bin 9016 -> 8656 bytes src/fex.c | 38 ++++++++++++++++++++++++++++++-------- src/install.c | 15 ++++++--------- src/sanity.c | 10 ++++------ 11 files changed, 59 insertions(+), 30 deletions(-) delete mode 100755 bin/install create mode 100644 inc/install.h diff --git a/bin/fex b/bin/fex index c40c485d133add1f8c50e8524de4e03d43051790..968664c553601f33a307668aa0f8006fd07ac979 100755 GIT binary patch literal 28008 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 NZBl<%nnD`M{uc@w2|EA) literal 26992 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 diff --git a/bin/install b/bin/install deleted file mode 100755 index 2df8112fe6695ae86b9624c87636611eb48b3dee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20664 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

tksA-KhJLHz$`+O>NbFM+TiN1b z16xjIRJGl4rQI{qXGi0`*lCut#jU45k{C>2iyI75;k{8|u~!so-iYCaam@T4AC5MyLxWr&@rc9X2 z*2|`j#79!m-j;JW^-;N^wbV;&y_4|>1A=XM7#&v~ppH@$!@bzjhwj7%)3Lan*(``+ zB8lE;WG@-@4N?aEO|rqcOk$W1k|mabK)A zYWIfIVKh<%4OkDhCyoq*&|ruGLI;P?3gIDor3R`$J`&NR#q7Ol+I*NBDlrLEIkCZL zJdxQOiE3!L(3n&*(in?lPvqcWAi^345<}6(@CYVpZ8`B4dqpA#5D)k_iXhFr7h=FK`#V;icK?VkCCQQDAF4|;Dx$|JI>yGjwQ@m4$$(^pF{5a&0MGhn%r$%f?Np~5!W_KA6 zLk?QP3T6)rIa|!b#wqAmW%Q?noYkK)-h{qBqkmJ#S^b;Fs99t-W%Q#a$yxoV`Ax{# z`oC#DpQ~qB*5N)vx$8RWP}Wm)Xd5~-Q-PJ43Y`UFW9)JMC`#I{O~k%W*ZceXEdK-G zR*s!!>9M^6D>(i8mc}ayM@ia=7GjiYf%~v8Js1>XCi^wGO8g#kLj9m~zS1mF_RfB_ z04Mu{%HC4;D+R8E9I{o}>vfj?CG4}nsr}CK=?PVrnNti_tuybRKL)(gz-(0Q$@pZi z`xY>pM5v zOx-JkdiT8896#+YpHa195B)j&^|M+if5WDFxvf8AEvku%TPOWzfEWs%zOg@JNp+H) z+>Z}o`sRGQHA`Y<;=2@G5Uc&^ z7Y<5S;UE|7uir0e`Z5{iBxn4tg^u3cXn*~_M$@^u1nUo(oc+HEF!`@ndi{P&({6>6KYnUCCw_kljAEjy%U<`@ z^`Crl6V;WQ#vtVSTlzkxsP4b^QE=w=^5+i!VP&AH?yvUOvZi-9{PlfQQ=gho+F#eN z<+~mJdVQg3p*B?1+5f**{(AhFr3@84sYFej{`6Ba#ZUX|b(^O2iYGTY{U3)i*Z*xx zT5C!_pXMeVH;p|9rVNJ;lYZZ;|4)+BUdx)&E0ppafBioAbOS&nZ6~Fytnr^gL32;n zuh+Ag|9eH9L(=n8`{{8!1|6AbfBk=F#_2~iq-Wi%%70bHQ!?65 z)At$j%g(x2X&9nF~zEt`f+R)K{4b!?^^U6e!rS$Fz>3xUNA+r8i{1>c~{sBoc zxznFyM;C?dR^>mTlyyL9ouKD^wXnil2v9wD6(oq&E~Vp+3LPSzt!DOrY@_tw=WuX{ G?0*1pj_#8H diff --git a/inc/debug.h b/inc/debug.h index 92c125c..564ba28 100644 --- a/inc/debug.h +++ b/inc/debug.h @@ -6,11 +6,12 @@ #define DEBUG_H #include "nprint.h" +#include "config.h" #ifdef debugEnabled #define DEBUG_PRINT(fmt, ...) nprint("D", fmt, ##__VA_ARGS__) #else - #define DEBUG_PRINT(fmg, ...) void(0) + #define DEBUG_PRINT(fmt, ...) do {} while (0) #endif #endif //DEBUG_H diff --git a/inc/fex.h b/inc/fex.h index a54731b..87fa092 100644 --- a/inc/fex.h +++ b/inc/fex.h @@ -7,14 +7,15 @@ enum Flags { FLAG_INSTALL = 1 << 0, - FLAG_SOURCE = 1 << 1, - FLAG_UNINSTALL = 1 << 2, - FLAG_LIST = 1 << 3, - FLAG_SEARCH = 1 << 4, - FLAG_FORCE = 1 << 5, - FLAG_UPGRADE = 1 << 6, + //FLAG_SOURCE = 1 << 1, + //FLAG_UNINSTALL = 1 << 1, + FLAG_LIST = 1 << 1, + FLAG_SEARCH = 1 << 2, + FLAG_FORCE = 1 << 3, + FLAG_UPGRADE = 1 << 4, }; extern char* flagNames[]; +extern int flagSource, flagUninstall; #endif //FEX_H diff --git a/inc/install.h b/inc/install.h new file mode 100644 index 0000000..75d05bf --- /dev/null +++ b/inc/install.h @@ -0,0 +1,10 @@ +// +// Created by auric on 2/28/24. +// + +#ifndef INSTALL_H +#define INSTALL_H + +int installPackages(char** package, int pkgCount, int source, int uninstall); + +#endif //INSTALL_H diff --git a/obj/fex.o b/obj/fex.o index 010945917bce66dfe54615a99e71a46651ca8585..da546d454bfd714d444d4578ef75f06fb7e20e5b 100644 GIT binary patch literal 13136 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 diff --git a/obj/sanity.o b/obj/sanity.o index c05da53d1f1e42e2ebcbac31e59ee2edf6150673..019585921582936ad56601c6c93a5132a8636c79 100644 GIT binary patch delta 3789 zcmZ9O3pi9;8^>o)E;Ft(2HUuk%Dq9y$bFnb;bI;c>H#!yt^#FATaRFq1m zBy#EyZx$qE5$U+PKQI4c?nj10;V7R`vU(m+qwUT#G?WrgnZ&Eo;}cN2ItUBltj;`JSDC7PV1vXx{{)5!3) zI-M`CzB51dFlU1Hhpk4u{Hx;6xt@{yrsCvy$;~8hB_|nV^shDj-Md`ZBeUY#4XMLo zDpC4Q0cLs5{hL-~-5=Rl<1VeS&E|H;#b7(f@S`tME3DtOPlUTQhj}^=xOa3LoG{Li zc;q0xxo`AQ;n&00?UmHG?`^0&^QPyhTjWg2^Yib&SzRYjo}4NAD^-}9k$-bp+xsDk!#AnH zxb_j>i391%2ON@iNVpFL^be6@^GYX-Z4`4e%3eKcyuhXv9_9po@e0Zhjw$!dlw&c! zNpc=Wy~}-2WE!;IV(dx|8k1Q1g{ToRJ|{N#JjXP{yz#&H?y`+H^bHI=kgW3>A1;3F zQODes5SO5GRV0iwT9a0_v!OY(F{_d|a!9l&)+@R;O1E>g#k8Qb(YMei#ueQsC-r7+ z2y*;>tK!p{!)oNLu#!rH@cw_sg5t5z8D`%x5>25J&|aoWkw&P ziMpExtB7!x_cM|QRHf@upVE3(?H+z$F;I28%+fUKNCKz1dvd_EF`F~Cgzpm!&IEdXv?!MNz8rG%gvRa?e>7hy5xGedM{?;Gc zW0V8;$-n#M*W)HK3F|1U_6IlB_eIImZ1Zn2ws5l&5++c^)A2bxin5Q94MOJaLHcL5 zCw8}-incm>pOrSji4BN9ugbU=I)1t=e!rUy8d&*L?o&lpNF1TsW^t#T&zUrXhdj&H zcKvR9g*bH9Jl=fzvE(Yw=w_#e2jNe|VgeFnVuF$nx&##8>UqmMv{Ite!$#8D;hV(K zSVG0Q6_bY8P>J)yCBZ@SZ>T4$*L)a_9nedFHFK(kxxa%ZklLqhqK~?Vm ztJ`Vfh+kJX%fewoq(n7S_lbV1?xsCO9RJL~MlUByDi@MXq_@ zE2ra)IA)#2E*-Wvp5CnRKX`LEjylt!VKS}iiO-W@Cb;}5{9#9(_F&hA-epL&T$mKM zm#1_eUbL-tsg^mr^XbEOo}(KrvxqeHx%{O`Do|@0v$3;UN-C~75`mxuwOM3~ON3KTpnV^K>xi*9p{+}vGuTKr4Z`GVeZ4drFm6CnZYqNJ*eRfC`!-!>?e6!|7h5g5>ck(vFK9hYn{}Q5dG}Y zo15>9WgD#DW=KyNelM;q^{NzGo^nHpD1)^{E*!(*HOU8j> zPB3=;nTb~`@yY_^%KQX)GN%y~gvg@ON?7phcYZkl(q&O30er;xQJ4(>@G65AStmpp zC{Xaam~t75Wm8dl67;d-kBlIJ-SNv7aH%NyIaJ*Mi;99ODuo^n{ep%3ML;i>Z4UbH z7gEgtRSueC{)U ze#3v=d1-J#0NyNziDnn@g^9?xffd{h&m%ZhXn=~Mhz{sgL^&o4eDLOC?81vRQN%6z1jWbf-l~E9g>Xl67S;Ppsqs zx*8La1#C4ttWKY=+tlpHg6-%6=;})MbcIxS4r~|@1E~}SX)QpE1geJ1o)__{}1og0*3$q delta 4097 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 diff --git a/src/fex.c b/src/fex.c index 83723c3..f4b1019 100644 --- a/src/fex.c +++ b/src/fex.c @@ -5,22 +5,25 @@ #include #include #include +#include #include -#include +#include "sanity.h" #include "config.h" #include "debug.h" #include "fex.h" +#include "install.h" void help() { nprint("E", "Usage: fex (OPT) (PACKAGES)"); } -char* flagNames[] = {"INSTALL", "SOURCE", "UNINSTALL", "LIST", "SEARCH", "FORCE", "UPGRADE"}; +char* flagNames[] = {"INSTALL","LIST", "SEARCH", "FORCE", "UPGRADE"}; int main(int argc, char** argv) { unsigned int flags = 0; char* packages[argc - 1]; int pkgCount = 0; + int flagSource, flagUninstall = 0; if (argc < 2) { help(); @@ -35,10 +38,12 @@ int main(int argc, char** argv) { flags |= FLAG_INSTALL; break; case 'S': // source, 1 - flags |= FLAG_SOURCE; + //flags |= FLAG_SOURCE; + flagSource = 1; break; case 'r': // remove, 2 - flags |= FLAG_UNINSTALL; + //flags |= FLAG_UNINSTALL; + flagUninstall = 1; break; case 'l': // list, 3 flags |= FLAG_LIST; @@ -69,7 +74,7 @@ int main(int argc, char** argv) { #ifdef debugEnabled DEBUG_PRINT("sysSanity: %d", sysSanity); - unsigned int flagValues[] = {0b0000001, 0b0000010, 0b0000100, 0b0001000, 0b0010000, 0b0100000, 0b1000000}; + unsigned int flagValues[] = {0b00001, 0b00010, 0b00100, 0b01000, 0b10000}; int numFlags = sizeof(flagValues) / sizeof(flagValues[0]); for(int i = 0; i < numFlags; i++) { if (flags & flagValues[i]) { @@ -86,9 +91,26 @@ int main(int argc, char** argv) { /* End Prelogic */ DEBUG_PRINT("[!] Break parselogic"); - for(int i = 0; i < numFlags; i++) { - DEBUG_PRINT("Iterating over %s", flagNames[i]); - + if(flags & FLAG_LIST) { + DEBUG_PRINT("HIT: List"); + // list packages + } + if(flags & FLAG_SEARCH) { + DEBUG_PRINT("HIT: Search"); + // search packages + } + if(!(getuid())) { + if (flags & FLAG_INSTALL) { + DEBUG_PRINT("HIT: Install. Source: %d; Uninstall: %d", flagSource, flagUninstall); + installPackages(packages, pkgCount, flagSource, flagUninstall); + } + if(flags & FLAG_UPGRADE) { + DEBUG_PRINT("HIT: Upgrade"); + //upgrade + } + } else { + nprint("E", "Superuser permissions required for this operation."); + return 1; } return 0; } \ No newline at end of file diff --git a/src/install.c b/src/install.c index c13d784..dbdde75 100644 --- a/src/install.c +++ b/src/install.c @@ -2,14 +2,11 @@ Created by auric on 2/21/24. */ +#include "../inc/debug.h" -#include -#include -#include -#include -/* Prototype main for suite instead of a unified manager. Obviously never developed -int main() { - nprint("I", "Information"); +int installPackages(char** packages, int pkgCount, int source, int uninstall) { + for(int i = 0; i < pkgCount; i++) { + DEBUG_PRINT("PACKAGE: %s", packages[i]); + DEBUG_PRINT("pkgCount ('i'): %d", i); + } } - */ - diff --git a/src/sanity.c b/src/sanity.c index ba82188..685f400 100644 --- a/src/sanity.c +++ b/src/sanity.c @@ -13,8 +13,6 @@ * exist, and if the owner can write to them. This notably does not check if the program is run as superuser. */ -/* For a root check - simply use conditional checking for a zero value in some way, such as !(getuid()) */ - int isSysSane() { struct stat conStat, exeStat, utiStat, libStat, hdrStat; int result = 0; @@ -34,12 +32,12 @@ int isSysSane() { } int isSyntaxSane(unsigned int flags, int pkgCount) { - if((flags & FLAG_INSTALL) && (flags & FLAG_UNINSTALL)) { - nprint("E", "You cannot install and uninstall at the same time"); // TODO: allow for this to happen by parsing the flags in order. e.g fex -i japes -u japes2 should install japes and uninstall japes2 + /*if((flags & FLAG_INSTALL)) { + nprint("E", "You cannot install and uninstall at the same time"); // Sequential parsing of flags would leave so many ambiguous cases and expand these checks greatly. Not worth it without extensive research return 1; - } + }*/ - if(((flags & FLAG_INSTALL) || (flags & FLAG_UNINSTALL)) && (pkgCount == 0)) { + if((flags & FLAG_INSTALL) && (pkgCount == 0)) { nprint("E", "You must specify at least one package"); return 1; }