diff options
Diffstat (limited to 'src/fbuilder/build_home.c')
-rw-r--r-- | src/fbuilder/build_home.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/src/fbuilder/build_home.c b/src/fbuilder/build_home.c index b582b89bf..7470a8d10 100644 --- a/src/fbuilder/build_home.c +++ b/src/fbuilder/build_home.c | |||
@@ -47,18 +47,17 @@ static void load_whitelist_common(void) { | |||
47 | fclose(fp); | 47 | fclose(fp); |
48 | } | 48 | } |
49 | 49 | ||
50 | void process_home(char *fname, FILE *fp, char *home, int home_len) { | 50 | void process_home(const char *fname, char *home, int home_len) { |
51 | assert(fname); | 51 | assert(fname); |
52 | assert(fp); | ||
53 | assert(home); | 52 | assert(home); |
54 | assert(home_len); | 53 | assert(home_len); |
55 | 54 | ||
56 | // process trace file | 55 | // process trace file |
57 | /* FILE *fp = fdopen(fd, "r"); */ | 56 | FILE *fp = fopen(fname, "r"); |
58 | /* if (!fp) { */ | 57 | if (!fp) { |
59 | /* fprintf(stderr, "Error: cannot open %s\n", fname); */ | 58 | fprintf(stderr, "Error: cannot open %s\n", fname); |
60 | /* exit(1); */ | 59 | exit(1); |
61 | /* } */ | 60 | } |
62 | 61 | ||
63 | char buf[MAX_BUF]; | 62 | char buf[MAX_BUF]; |
64 | while (fgets(buf, MAX_BUF, fp)) { | 63 | while (fgets(buf, MAX_BUF, fp)) { |
@@ -154,15 +153,13 @@ void process_home(char *fname, FILE *fp, char *home, int home_len) { | |||
154 | free(dir); | 153 | free(dir); |
155 | 154 | ||
156 | } | 155 | } |
157 | /* fclose(fp); */ | 156 | fclose(fp); |
158 | } | 157 | } |
159 | 158 | ||
160 | 159 | ||
161 | // process fname, fname.1, fname.2, fname.3, fname.4, fname.5 | 160 | // process fname, fname.1, fname.2, fname.3, fname.4, fname.5 |
162 | void build_home(char *fname, FILE *fp, FILE *fpo) { | 161 | void build_home(const char *fname, FILE *fp) { |
163 | assert(fname); | 162 | assert(fname); |
164 | assert(fp); | ||
165 | assert(fpo); | ||
166 | 163 | ||
167 | // load whitelist common | 164 | // load whitelist common |
168 | load_whitelist_common(); | 165 | load_whitelist_common(); |
@@ -177,7 +174,7 @@ void build_home(char *fname, FILE *fp, FILE *fpo) { | |||
177 | int home_len = strlen(home); | 174 | int home_len = strlen(home); |
178 | 175 | ||
179 | // run fname | 176 | // run fname |
180 | process_home(fname, fp, home, home_len); | 177 | process_home(fname, home, home_len); |
181 | 178 | ||
182 | // run all the rest | 179 | // run all the rest |
183 | struct stat s; | 180 | struct stat s; |
@@ -186,22 +183,17 @@ void build_home(char *fname, FILE *fp, FILE *fpo) { | |||
186 | char *newname; | 183 | char *newname; |
187 | if (asprintf(&newname, "%s.%d", fname, i) == -1) | 184 | if (asprintf(&newname, "%s.%d", fname, i) == -1) |
188 | errExit("asprintf"); | 185 | errExit("asprintf"); |
189 | if (stat(newname, &s) == 0) { | 186 | if (stat(newname, &s) == 0) |
190 | int nfd = open(newname, O_RDONLY); | 187 | process_home(newname, home, home_len); |
191 | FILE *nfp = fdopen(nfd, "r"); | ||
192 | process_home(newname, nfp, home, home_len); | ||
193 | fclose(nfp); | ||
194 | unlink(newname); | ||
195 | } | ||
196 | free(newname); | 188 | free(newname); |
197 | } | 189 | } |
198 | 190 | ||
199 | // print the out list if any | 191 | // print the out list if any |
200 | if (db_out) { | 192 | if (db_out) { |
201 | filedb_print(db_out, "whitelist ~/", fpo); | 193 | filedb_print(db_out, "whitelist ~/", fp); |
202 | fprintf(fpo, "include /etc/firejail/whitelist-common.inc\n"); | 194 | fprintf(fp, "include /etc/firejail/whitelist-common.inc\n"); |
203 | } | 195 | } |
204 | else | 196 | else |
205 | fprintf(fpo, "private\n"); | 197 | fprintf(fp, "private\n"); |
206 | 198 | ||
207 | } | 199 | } \ No newline at end of file |