aboutsummaryrefslogtreecommitdiffstats
path: root/src/firecfg/desktop_files.c
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@yahoo.com>2017-12-10 08:32:24 -0500
committerLibravatar netblue30 <netblue30@yahoo.com>2017-12-10 08:32:24 -0500
commit49901c87601a0ae9f734854f2dd521541582c046 (patch)
treedaa8189d2fcf4a7b559392a09e391781d9d62f14 /src/firecfg/desktop_files.c
parentfix (and harden) kmail - #1541 (diff)
downloadfirejail-49901c87601a0ae9f734854f2dd521541582c046.tar.gz
firejail-49901c87601a0ae9f734854f2dd521541582c046.tar.zst
firejail-49901c87601a0ae9f734854f2dd521541582c046.zip
new fix for #1670
Diffstat (limited to 'src/firecfg/desktop_files.c')
-rw-r--r--src/firecfg/desktop_files.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/firecfg/desktop_files.c b/src/firecfg/desktop_files.c
index 7e30857c5..af509da13 100644
--- a/src/firecfg/desktop_files.c
+++ b/src/firecfg/desktop_files.c
@@ -108,6 +108,7 @@ void fix_desktop_files(char *homedir) {
108 char *user_apps_dir; 108 char *user_apps_dir;
109 if (asprintf(&user_apps_dir, "%s/.local/share/applications", homedir) == -1) 109 if (asprintf(&user_apps_dir, "%s/.local/share/applications", homedir) == -1)
110 errExit("asprintf"); 110 errExit("asprintf");
111 printf("\nFixing desktop files in %s\n", user_apps_dir);
111 if (stat(user_apps_dir, &sb) == -1) { 112 if (stat(user_apps_dir, &sb) == -1) {
112 char *tmp; 113 char *tmp;
113 if (asprintf(&tmp, "%s/.local", homedir) == -1) 114 if (asprintf(&tmp, "%s/.local", homedir) == -1)
@@ -115,18 +116,19 @@ void fix_desktop_files(char *homedir) {
115 int rv = mkdir(tmp, 0755); 116 int rv = mkdir(tmp, 0755);
116 (void) rv; 117 (void) rv;
117 free(tmp); 118 free(tmp);
118 119
119 if (asprintf(&tmp, "%s/.local/share", homedir) == -1) 120 if (asprintf(&tmp, "%s/.local/share", homedir) == -1)
120 errExit("asprintf"); 121 errExit("asprintf");
121 rv = mkdir(tmp, 0755); 122 rv = mkdir(tmp, 0755);
122 (void) rv; 123 (void) rv;
123 free(tmp); 124 free(tmp);
124 125
125 rv = mkdir(user_apps_dir, 0700); 126 rv = mkdir(user_apps_dir, 0700);
126 if (rv) { 127 if (rv) {
127 fprintf(stderr, "Error: cannot create ~/.local/application directory\n");
128 perror("mkdir"); 128 perror("mkdir");
129 exit(1); 129 fprintf(stderr, "Warning: cannot create ~/.local/share/application directory, desktop files fixing skipped...\n");
130 free(user_apps_dir);
131 return;
130 } 132 }
131 rv = chmod(user_apps_dir, 0700); 133 rv = chmod(user_apps_dir, 0700);
132 (void) rv; 134 (void) rv;
@@ -135,15 +137,18 @@ void fix_desktop_files(char *homedir) {
135 // source 137 // source
136 DIR *dir = opendir("/usr/share/applications"); 138 DIR *dir = opendir("/usr/share/applications");
137 if (!dir) { 139 if (!dir) {
138 perror("Error: cannot open /usr/share/applications directory"); 140 perror("opendir");
139 exit(1); 141 fprintf(stderr, "Warning: cannot open /usr/share/applications directory, desktop files fixing skipped...\n");
142 free(user_apps_dir);
143 return;
140 } 144 }
141 if (chdir("/usr/share/applications")) { 145 if (chdir("/usr/share/applications")) {
142 perror("Error: cannot chdir to /usr/share/applications"); 146 perror("chdir");
143 exit(1); 147 fprintf(stderr, "Warning: cannot chdir to /usr/share/applications, desktop files fixing skipped...\n");
148 free(user_apps_dir);
149 return;
144 } 150 }
145 151
146 printf("\nFixing desktop files in %s\n", user_apps_dir);
147 // copy 152 // copy
148 struct dirent *entry; 153 struct dirent *entry;
149 while ((entry = readdir(dir)) != NULL) { 154 while ((entry = readdir(dir)) != NULL) {
@@ -177,7 +182,7 @@ void fix_desktop_files(char *homedir) {
177 /* coverity[toctou] */ 182 /* coverity[toctou] */
178 int fd = open(filename, O_RDONLY); 183 int fd = open(filename, O_RDONLY);
179 if (fd == -1) { 184 if (fd == -1) {
180 fprintf(stderr, "Error: cannot open /usr/share/applications/%s\n", filename); 185 fprintf(stderr, "Warning: cannot open /usr/share/applications/%s\n", filename);
181 continue; 186 continue;
182 } 187 }
183 188
@@ -263,13 +268,13 @@ void fix_desktop_files(char *homedir) {
263 268
264 FILE *fpin = fopen(filename, "r"); 269 FILE *fpin = fopen(filename, "r");
265 if (!fpin) { 270 if (!fpin) {
266 fprintf(stderr, "Error: cannot open /usr/share/applications/%s\n", filename); 271 fprintf(stderr, "Warning: cannot open /usr/share/applications/%s\n", filename);
267 continue; 272 continue;
268 } 273 }
269 274
270 FILE *fpout = fopen(outname, "w"); 275 FILE *fpout = fopen(outname, "w");
271 if (!fpout) { 276 if (!fpout) {
272 fprintf(stderr, "Error: cannot open ~/.local/share/applications/%s\n", outname); 277 fprintf(stderr, "Warning: cannot open ~/.local/share/applications/%s\n", outname);
273 fclose(fpin); 278 fclose(fpin);
274 continue; 279 continue;
275 } 280 }