From 62162e3a49cd8db335733664d07ffd747a065928 Mon Sep 17 00:00:00 2001 From: "Kelvin M. Klann" Date: Fri, 30 Jun 2023 17:00:01 -0300 Subject: firecfg: turn constant strings into constants Instead of using asprintf + free. Also, use LIBDIR instead of hardcoded "/usr/lib" for fzenity. --- src/firecfg/firecfg.h | 6 +++++ src/firecfg/main.c | 62 ++++++++++++++++----------------------------------- 2 files changed, 25 insertions(+), 43 deletions(-) diff --git a/src/firecfg/firecfg.h b/src/firecfg/firecfg.h index 8f74a1198..6e17c20cf 100644 --- a/src/firecfg/firecfg.h +++ b/src/firecfg/firecfg.h @@ -37,6 +37,12 @@ #include "../include/common.h" #define MAX_BUF 4096 +#define FIRECFG_CFGFILE SYSCONFDIR "/firecfg.config" +#define FIREJAIL_EXEC PREFIX "/bin/firejail" +#define FIREJAIL_WELCOME_SH LIBDIR "/firejail/firejail-welcome.sh" +#define FZENITY_EXEC LIBDIR "/firejail/fzenity" +#define ZENITY_EXEC "/usr/bin/zenity" +#define SUDO_EXEC "sudo" // main.c extern int arg_debug; diff --git a/src/firecfg/main.c b/src/firecfg/main.c index 90cea6d52..0d995a6dd 100644 --- a/src/firecfg/main.c +++ b/src/firecfg/main.c @@ -76,10 +76,6 @@ static void list(void) { exit(1); } - char *firejail_exec; - if (asprintf(&firejail_exec, "%s/bin/firejail", PREFIX) == -1) - errExit("asprintf"); - struct dirent *entry; while ((entry = readdir(dir)) != NULL) { if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) @@ -92,7 +88,7 @@ static void list(void) { if (is_link(fullname)) { char* fname = realpath(fullname, NULL); if (fname) { - if (strcmp(fname, firejail_exec) == 0) + if (strcmp(fname, FIREJAIL_EXEC) == 0) printf("%s\n", fullname); free(fname); } @@ -101,7 +97,6 @@ static void list(void) { } closedir(dir); - free(firejail_exec); } static void clean(void) { @@ -114,10 +109,6 @@ static void clean(void) { exit(1); } - char *firejail_exec; - if (asprintf(&firejail_exec, "%s/bin/firejail", PREFIX) == -1) - errExit("asprintf"); - struct dirent *entry; while ((entry = readdir(dir)) != NULL) { if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) @@ -130,7 +121,7 @@ static void clean(void) { if (is_link(fullname)) { char* fname = realpath(fullname, NULL); if (fname) { - if (strcmp(fname, firejail_exec) == 0) { + if (strcmp(fname, FIREJAIL_EXEC) == 0) { char *ptr = strrchr(fullname, '/'); assert(ptr); ptr++; @@ -147,7 +138,6 @@ static void clean(void) { } closedir(dir); - free(firejail_exec); printf("\n"); } @@ -175,24 +165,16 @@ static void set_file(const char *name, const char *firejail_exec) { free(fname); } -// parse /etc/firejail/firecfg.config file -static void set_links_firecfg(void) { - char *cfgfile; - if (asprintf(&cfgfile, "%s/firecfg.config", SYSCONFDIR) == -1) - errExit("asprintf"); - - char *firejail_exec; - if (asprintf(&firejail_exec, "%s/bin/firejail", PREFIX) == -1) - errExit("asprintf"); +// parse a single config file +static void set_links_firecfg(const char *cfgfile) { + printf("Configuring symlinks in %s based on %s\n", arg_bindir, cfgfile); - // parse /etc/firejail/firecfg.config file FILE *fp = fopen(cfgfile, "r"); if (!fp) { perror("fopen"); fprintf(stderr, "Error: cannot open %s\n", cfgfile); exit(1); } - printf("Configuring symlinks in %s based on firecfg.config\n", arg_bindir); char buf[MAX_BUF]; int lineno = 0; @@ -223,12 +205,10 @@ static void set_links_firecfg(void) { continue; // set link - set_file(start, firejail_exec); + set_file(start, FIREJAIL_EXEC); } fclose(fp); - free(cfgfile); - free(firejail_exec); } // parse ~/.config/firejail/ directory @@ -245,10 +225,6 @@ static void set_links_homedir(const char *homedir) { return; } - char *firejail_exec; - if (asprintf(&firejail_exec, "%s/bin/firejail", PREFIX) == -1) - errExit("asprintf"); - // parse ~/.config/firejail/ directory printf("\nConfiguring symlinks in %s based on local firejail config directory\n", arg_bindir); @@ -280,12 +256,10 @@ static void set_links_homedir(const char *homedir) { } *ptr = '\0'; - set_file(exec, firejail_exec); + set_file(exec, FIREJAIL_EXEC); free(exec); } closedir(dir); - - free(firejail_exec); } static const char *get_sudo_user(void) { @@ -449,18 +423,20 @@ int main(int argc, char **argv) { } if (arg_guide) { + const char *zenity_exec; + if (arg_debug) + zenity_exec = FZENITY_EXEC; + else + zenity_exec = ZENITY_EXEC; + char *cmd; -if (arg_debug) { - if (asprintf(&cmd, "sudo %s/firejail/firejail-welcome.sh /usr/lib/firejail/fzenity %s %s", LIBDIR, SYSCONFDIR, user) == -1) + if (asprintf(&cmd, "%s %s %s %s %s", + SUDO_EXEC, FIREJAIL_WELCOME_SH, zenity_exec, SYSCONFDIR, user) == -1) errExit("asprintf"); -} -else { - if (asprintf(&cmd, "sudo %s/firejail/firejail-welcome.sh /usr/bin/zenity %s %s", LIBDIR, SYSCONFDIR, user) == -1) - errExit("asprintf"); -} + int status = system(cmd); if (status == -1) { - fprintf(stderr, "Error: cannot run firejail-welcome.sh\n"); + fprintf(stderr, "Error: cannot run %s\n", FIREJAIL_WELCOME_SH); exit(1); } free(cmd); @@ -474,8 +450,8 @@ else { // clear all symlinks clean(); - // set new symlinks based on /etc/firejail/firecfg.config - set_links_firecfg(); + // set new symlinks based on firecfg.config + set_links_firecfg(FIRECFG_CFGFILE); if (getuid() == 0) { // add user to firejail access database - only for root -- cgit v1.2.3-54-g00ecf