|
20 | 20 |
|
21 | 21 | #include "firecfg.h"
|
22 | 22 | #include "../include/firejail_user.h"
|
| 23 | +#include <glob.h> |
| 24 | + |
23 | 25 | int arg_debug = 0;
|
24 | 26 | char *arg_bindir = "/usr/local/bin";
|
25 | 27 | int arg_guide = 0;
|
@@ -209,6 +211,29 @@ static void set_links_firecfg(const char *cfgfile) {
|
209 | 211 | }
|
210 | 212 |
|
211 | 213 | 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); |
212 | 237 | }
|
213 | 238 |
|
214 | 239 | // parse ~/.config/firejail/ directory
|
@@ -448,12 +473,15 @@ int main(int argc, char **argv) {
|
448 | 473 | // clear all symlinks
|
449 | 474 | clean();
|
450 | 475 |
|
| 476 | + // set new symlinks based on .conf files |
| 477 | + set_links_firecfg_glob(FIRECFG_CONF_GLOB); |
| 478 | + |
451 | 479 | // set new symlinks based on firecfg.config
|
452 | 480 | set_links_firecfg(FIRECFG_CFGFILE);
|
453 | 481 |
|
454 | 482 | if (getuid() == 0) {
|
455 | 483 | // 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); |
457 | 485 | // temporarily set the umask, access database must be world-readable
|
458 | 486 | mode_t orig_umask = umask(022);
|
459 | 487 | firejail_user_add(user);
|
|
0 commit comments