Skip to content

Commit 88b92fa

Browse files
committed
firecfg: parse config files in /etc/firejail/firecfg.d
As suggested by @WhyNotHugo[1]. [1] netblue30#2097 (comment)
1 parent 1b1ee42 commit 88b92fa

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ endif
232232
install -m 0644 -t $(DESTDIR)$(docdir) COPYING README RELNOTES etc/templates/*
233233
# profiles and settings
234234
install -m 0755 -d $(DESTDIR)$(sysconfdir)/firejail
235+
install -m 0755 -d $(DESTDIR)$(sysconfdir)/firejail/firecfg.d
235236
install -m 0644 -t $(DESTDIR)$(sysconfdir)/firejail src/firecfg/firecfg.config
236237
install -m 0644 -t $(DESTDIR)$(sysconfdir)/firejail etc/profile-a-l/*.profile etc/profile-m-z/*.profile etc/inc/*.inc etc/net/*.net etc/firejail.config
237238
sh -c "if [ ! -f $(DESTDIR)/$(sysconfdir)/firejail/login.users ]; then install -c -m 0644 etc/login.users $(DESTDIR)/$(sysconfdir)/firejail/.; fi;"

src/firecfg/firecfg.h

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

40+
// config files
4041
#define FIRECFG_CFGFILE SYSCONFDIR "/firecfg.config"
42+
#define FIRECFG_CONF_GLOB SYSCONFDIR "/firecfg.d/*.conf"
43+
44+
// programs
4145
#define FIREJAIL_EXEC PREFIX "/bin/firejail"
4246
#define FIREJAIL_WELCOME_SH LIBDIR "/firejail/firejail-welcome.sh"
4347
#define FZENITY_EXEC LIBDIR "/firejail/fzenity"

src/firecfg/main.c

+29-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
#include "firecfg.h"
2222
#include "../include/firejail_user.h"
23+
#include <glob.h>
24+
2325
int arg_debug = 0;
2426
char *arg_bindir = "/usr/local/bin";
2527
int arg_guide = 0;
@@ -209,6 +211,29 @@ static void set_links_firecfg(const char *cfgfile) {
209211
}
210212

211213
fclose(fp);
214+
printf("\n");
215+
}
216+
217+
// parse all config files matching pattern
218+
static void set_links_firecfg_glob(const char *pattern) {
219+
printf("Looking for config files in %s\n", pattern);
220+
221+
glob_t globbuf;
222+
int globerr = glob(pattern, 0, NULL, &globbuf);
223+
if (globerr == GLOB_NOMATCH) {
224+
fprintf(stderr, "No matches for glob pattern %s\n", pattern);
225+
goto out;
226+
} else if (globerr != 0) {
227+
fprintf(stderr, "Warning: Failed to match glob pattern %s: %s\n",
228+
pattern, strerror(errno));
229+
goto out;
230+
}
231+
232+
size_t i;
233+
for (i = 0; i < globbuf.gl_pathc; i++)
234+
set_links_firecfg(globbuf.gl_pathv[i]);
235+
out:
236+
globfree(&globbuf);
212237
}
213238

214239
// parse ~/.config/firejail/ directory
@@ -448,12 +473,15 @@ int main(int argc, char **argv) {
448473
// clear all symlinks
449474
clean();
450475

476+
// set new symlinks based on .conf files
477+
set_links_firecfg_glob(FIRECFG_CONF_GLOB);
478+
451479
// set new symlinks based on firecfg.config
452480
set_links_firecfg(FIRECFG_CFGFILE);
453481

454482
if (getuid() == 0) {
455483
// add user to firejail access database - only for root
456-
printf("\nAdding user %s to Firejail access database in %s/firejail.users\n", user, SYSCONFDIR);
484+
printf("Adding user %s to Firejail access database in %s/firejail.users\n", user, SYSCONFDIR);
457485
// temporarily set the umask, access database must be world-readable
458486
mode_t orig_umask = umask(022);
459487
firejail_user_add(user);

0 commit comments

Comments
 (0)