diff options
author | netblue30 <netblue30@yahoo.com> | 2017-12-10 08:32:24 -0500 |
---|---|---|
committer | netblue30 <netblue30@yahoo.com> | 2017-12-10 08:32:24 -0500 |
commit | 49901c87601a0ae9f734854f2dd521541582c046 (patch) | |
tree | daa8189d2fcf4a7b559392a09e391781d9d62f14 /src/firecfg | |
parent | fix (and harden) kmail - #1541 (diff) | |
download | firejail-49901c87601a0ae9f734854f2dd521541582c046.tar.gz firejail-49901c87601a0ae9f734854f2dd521541582c046.tar.zst firejail-49901c87601a0ae9f734854f2dd521541582c046.zip |
new fix for #1670
Diffstat (limited to 'src/firecfg')
-rw-r--r-- | src/firecfg/desktop_files.c | 29 |
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 | } |