aboutsummaryrefslogtreecommitdiffstats
path: root/src/fbuilder/build_bin.c
diff options
context:
space:
mode:
authorLibravatar ಚಿರಾಗ್ ನಟರಾಜ್ <chiraag.nataraj@gmail.com>2018-08-16 09:42:58 -0400
committerLibravatar ಚಿರಾಗ್ ನಟರಾಜ್ <chiraag.nataraj@gmail.com>2018-08-16 09:42:58 -0400
commitb0f49116fb026fe08fc30c495c637c42ed3195ad (patch)
tree0656986b7e39f857f48c576f7671a29001a56ace /src/fbuilder/build_bin.c
parentharden private-home mounting, small improvements (diff)
downloadfirejail-b0f49116fb026fe08fc30c495c637c42ed3195ad.tar.gz
firejail-b0f49116fb026fe08fc30c495c637c42ed3195ad.tar.zst
firejail-b0f49116fb026fe08fc30c495c637c42ed3195ad.zip
Generate temporary filenames instead of using a fixed one (fixes #2083)
Diffstat (limited to 'src/fbuilder/build_bin.c')
-rw-r--r--src/fbuilder/build_bin.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/fbuilder/build_bin.c b/src/fbuilder/build_bin.c
index 1230fb780..602610750 100644
--- a/src/fbuilder/build_bin.c
+++ b/src/fbuilder/build_bin.c
@@ -21,15 +21,16 @@
21 21
22static FileDB *bin_out = NULL; 22static FileDB *bin_out = NULL;
23 23
24static void process_bin(const char *fname) { 24static void process_bin(char *fname, FILE *fp) {
25 assert(fname); 25 assert(fname);
26 assert(fp);
26 27
27 // process trace file 28 // process trace file
28 FILE *fp = fopen(fname, "r"); 29 /* FILE *fp = fdopen(fd, "r"); */
29 if (!fp) { 30 /* if (!fp) { */
30 fprintf(stderr, "Error: cannot open %s\n", fname); 31 /* fprintf(stderr, "Error: cannot open %s\n", fname); */
31 exit(1); 32 /* exit(1); */
32 } 33 /* } */
33 34
34 char buf[MAX_BUF]; 35 char buf[MAX_BUF];
35 while (fgets(buf, MAX_BUF, fp)) { 36 while (fgets(buf, MAX_BUF, fp)) {
@@ -90,16 +91,18 @@ static void process_bin(const char *fname) {
90 bin_out = filedb_add(bin_out, ptr); 91 bin_out = filedb_add(bin_out, ptr);
91 } 92 }
92 93
93 fclose(fp); 94 /* fclose(fp); */
94} 95}
95 96
96 97
97// process fname, fname.1, fname.2, fname.3, fname.4, fname.5 98// process fname, fname.1, fname.2, fname.3, fname.4, fname.5
98void build_bin(const char *fname, FILE *fp) { 99void build_bin(char *fname, FILE *fp, FILE *fpo) {
99 assert(fname); 100 assert(fname);
101 assert(fp);
102 assert(fpo);
100 103
101 // run fname 104 // run fname
102 process_bin(fname); 105 process_bin(fname, fp);
103 106
104 // run all the rest 107 // run all the rest
105 struct stat s; 108 struct stat s;
@@ -109,18 +112,23 @@ void build_bin(const char *fname, FILE *fp) {
109 if (asprintf(&newname, "%s.%d", fname, i) == -1) 112 if (asprintf(&newname, "%s.%d", fname, i) == -1)
110 errExit("asprintf"); 113 errExit("asprintf");
111 if (stat(newname, &s) == 0) 114 if (stat(newname, &s) == 0)
112 process_bin(newname); 115 {
116 int nfd = open(newname, O_RDONLY);
117 FILE *nfp = fdopen(nfd, "r");
118 process_bin(newname, nfp);
119 fclose(nfp);
120 }
113 free(newname); 121 free(newname);
114 } 122 }
115 123
116 if (bin_out) { 124 if (bin_out) {
117 fprintf(fp, "private-bin "); 125 fprintf(fpo, "private-bin ");
118 FileDB *ptr = bin_out; 126 FileDB *ptr = bin_out;
119 while (ptr) { 127 while (ptr) {
120 fprintf(fp, "%s,", ptr->fname); 128 fprintf(fpo, "%s,", ptr->fname);
121 ptr = ptr->next; 129 ptr = ptr->next;
122 } 130 }
123 fprintf(fp, "\n"); 131 fprintf(fpo, "\n");
124 fprintf(fp, "# private-lib\n"); 132 fprintf(fpo, "# private-lib\n");
125 } 133 }
126} 134}