Skip to content

Commit 1966bd5

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

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
@@ -228,6 +228,7 @@ endif
228228
install -m 0644 -t $(DESTDIR)$(docdir) COPYING README RELNOTES etc/templates/*
229229
# profiles and settings
230230
install -m 0755 -d $(DESTDIR)$(sysconfdir)/firejail
231+
install -m 0755 -d $(DESTDIR)$(sysconfdir)/firejail/firecfg.d
231232
install -m 0644 -t $(DESTDIR)$(sysconfdir)/firejail src/firecfg/firecfg.config
232233
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
233234
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
@@ -450,12 +475,15 @@ int main(int argc, char **argv) {
450475
// clear all symlinks
451476
clean();
452477

478+
// set new symlinks based on .conf files
479+
set_links_firecfg_glob(FIRECFG_CONF_GLOB);
480+
453481
// set new symlinks based on firecfg.config
454482
set_links_firecfg(FIRECFG_CFGFILE);
455483

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

0 commit comments

Comments
 (0)