Skip to content

Commit 7df284c

Browse files
committed
firecfg: turn constant strings into constants
Instead of using asprintf + free. Also, use LIBDIR instead of hardcoded "/usr/lib" for fzenity.
1 parent 3c352bb commit 7df284c

File tree

2 files changed

+23
-42
lines changed

2 files changed

+23
-42
lines changed

src/firecfg/firecfg.h

+5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@
3737
#include "../include/common.h"
3838
#define MAX_BUF 4096
3939

40+
#define FIRECFG_CFGFILE SYSCONFDIR "/firecfg.config"
41+
#define FIREJAIL_EXEC PREFIX "/bin/firejail"
42+
#define FIREJAIL_WELCOME_SH LIBDIR "/firejail/firejail-welcome.sh"
43+
#define FZENITY_EXEC LIBDIR "/firejail/fzenity"
44+
#define ZENITY_EXEC "/usr/bin/zenity"
4045

4146
// main.c
4247
extern int arg_debug;

src/firecfg/main.c

+18-42
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,6 @@ static void list(void) {
7676
exit(1);
7777
}
7878

79-
char *firejail_exec;
80-
if (asprintf(&firejail_exec, "%s/bin/firejail", PREFIX) == -1)
81-
errExit("asprintf");
82-
8379
struct dirent *entry;
8480
while ((entry = readdir(dir)) != NULL) {
8581
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
@@ -92,7 +88,7 @@ static void list(void) {
9288
if (is_link(fullname)) {
9389
char* fname = realpath(fullname, NULL);
9490
if (fname) {
95-
if (strcmp(fname, firejail_exec) == 0)
91+
if (strcmp(fname, FIREJAIL_EXEC) == 0)
9692
printf("%s\n", fullname);
9793
free(fname);
9894
}
@@ -101,7 +97,6 @@ static void list(void) {
10197
}
10298

10399
closedir(dir);
104-
free(firejail_exec);
105100
}
106101

107102
static void clean(void) {
@@ -114,10 +109,6 @@ static void clean(void) {
114109
exit(1);
115110
}
116111

117-
char *firejail_exec;
118-
if (asprintf(&firejail_exec, "%s/bin/firejail", PREFIX) == -1)
119-
errExit("asprintf");
120-
121112
struct dirent *entry;
122113
while ((entry = readdir(dir)) != NULL) {
123114
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
@@ -130,7 +121,7 @@ static void clean(void) {
130121
if (is_link(fullname)) {
131122
char* fname = realpath(fullname, NULL);
132123
if (fname) {
133-
if (strcmp(fname, firejail_exec) == 0) {
124+
if (strcmp(fname, FIREJAIL_EXEC) == 0) {
134125
char *ptr = strrchr(fullname, '/');
135126
assert(ptr);
136127
ptr++;
@@ -147,7 +138,6 @@ static void clean(void) {
147138
}
148139

149140
closedir(dir);
150-
free(firejail_exec);
151141
printf("\n");
152142
}
153143

@@ -175,24 +165,16 @@ static void set_file(const char *name, const char *firejail_exec) {
175165
free(fname);
176166
}
177167

178-
// parse /etc/firejail/firecfg.config file
179-
static void set_links_firecfg(void) {
180-
char *cfgfile;
181-
if (asprintf(&cfgfile, "%s/firecfg.config", SYSCONFDIR) == -1)
182-
errExit("asprintf");
183-
184-
char *firejail_exec;
185-
if (asprintf(&firejail_exec, "%s/bin/firejail", PREFIX) == -1)
186-
errExit("asprintf");
168+
// parse a single config file
169+
static void set_links_firecfg(const char *cfgfile) {
170+
printf("Configuring symlinks in %s based on %s\n", arg_bindir, cfgfile);
187171

188-
// parse /etc/firejail/firecfg.config file
189172
FILE *fp = fopen(cfgfile, "r");
190173
if (!fp) {
191174
perror("fopen");
192175
fprintf(stderr, "Error: cannot open %s\n", cfgfile);
193176
exit(1);
194177
}
195-
printf("Configuring symlinks in %s based on firecfg.config\n", arg_bindir);
196178

197179
char buf[MAX_BUF];
198180
int lineno = 0;
@@ -223,12 +205,10 @@ static void set_links_firecfg(void) {
223205
continue;
224206

225207
// set link
226-
set_file(start, firejail_exec);
208+
set_file(start, FIREJAIL_EXEC);
227209
}
228210

229211
fclose(fp);
230-
free(cfgfile);
231-
free(firejail_exec);
232212
}
233213

234214
// parse ~/.config/firejail/ directory
@@ -245,10 +225,6 @@ static void set_links_homedir(const char *homedir) {
245225
return;
246226
}
247227

248-
char *firejail_exec;
249-
if (asprintf(&firejail_exec, "%s/bin/firejail", PREFIX) == -1)
250-
errExit("asprintf");
251-
252228
// parse ~/.config/firejail/ directory
253229
printf("\nConfiguring symlinks in %s based on local firejail config directory\n", arg_bindir);
254230

@@ -280,12 +256,10 @@ static void set_links_homedir(const char *homedir) {
280256
}
281257

282258
*ptr = '\0';
283-
set_file(exec, firejail_exec);
259+
set_file(exec, FIREJAIL_EXEC);
284260
free(exec);
285261
}
286262
closedir(dir);
287-
288-
free(firejail_exec);
289263
}
290264

291265
static const char *get_sudo_user(void) {
@@ -449,15 +423,17 @@ int main(int argc, char **argv) {
449423
}
450424

451425
if (arg_guide) {
426+
const char *zenity_exec;
427+
if (arg_debug)
428+
zenity_exec = FZENITY_EXEC;
429+
else
430+
zenity_exec = ZENITY_EXEC;
431+
452432
char *cmd;
453-
if (arg_debug) {
454-
if (asprintf(&cmd, "sudo %s/firejail/firejail-welcome.sh /usr/lib/firejail/fzenity %s %s", LIBDIR, SYSCONFDIR, user) == -1)
433+
if (asprintf(&cmd, "sudo %s %s %s %s",
434+
FIREJAIL_WELCOME_SH, zenity_exec, SYSCONFDIR, user) == -1)
455435
errExit("asprintf");
456-
}
457-
else {
458-
if (asprintf(&cmd, "sudo %s/firejail/firejail-welcome.sh /usr/bin/zenity %s %s", LIBDIR, SYSCONFDIR, user) == -1)
459-
errExit("asprintf");
460-
}
436+
461437
int status = system(cmd);
462438
if (status == -1) {
463439
fprintf(stderr, "Error: cannot run firejail-welcome.sh\n");
@@ -474,8 +450,8 @@ else {
474450
// clear all symlinks
475451
clean();
476452

477-
// set new symlinks based on /etc/firejail/firecfg.config
478-
set_links_firecfg();
453+
// set new symlinks based on firecfg.config
454+
set_links_firecfg(FIRECFG_CFGFILE);
479455

480456
if (getuid() == 0) {
481457
// add user to firejail access database - only for root

0 commit comments

Comments
 (0)