aboutsummaryrefslogtreecommitdiffstats
path: root/src/fbuilder/build_home.c
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@yahoo.com>2018-08-28 13:04:13 -0400
committerLibravatar netblue30 <netblue30@yahoo.com>2018-08-28 13:04:13 -0400
commit8ce3b7ab971d6ab02463fd6c7591a73465526cb1 (patch)
tree2df83450626433978a970dbae4fb38d84754600e /src/fbuilder/build_home.c
parentmemory leaks (diff)
downloadfirejail-8ce3b7ab971d6ab02463fd6c7591a73465526cb1.tar.gz
firejail-8ce3b7ab971d6ab02463fd6c7591a73465526cb1.tar.zst
firejail-8ce3b7ab971d6ab02463fd6c7591a73465526cb1.zip
fbuider cleanup
Diffstat (limited to 'src/fbuilder/build_home.c')
-rw-r--r--src/fbuilder/build_home.c38
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
50void process_home(char *fname, FILE *fp, char *home, int home_len) { 50void 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
162void build_home(char *fname, FILE *fp, FILE *fpo) { 161void 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