Fix cache mkdir error handling

This commit is contained in:
2021-11-20 16:46:47 +01:00
parent 877ee12351
commit 81ad3fea3c

View File

@ -103,15 +103,21 @@ int cache_process() {
FILE *comp_file_br = NULL; FILE *comp_file_br = NULL;
if (compress) { if (compress) {
sprintf(buf, "%.*s/.necronda-server", cache[i].webroot_len, cache[i].filename); sprintf(buf, "%.*s/.necronda-server", cache[i].webroot_len, cache[i].filename);
mkdir(buf, 0755); if (mkdir(buf, 0755) != 0 && errno != EEXIST) {
fprintf(stderr, ERR_STR "Unable to create directory %s: %s" CLR_STR "\n", buf, strerror(errno));
goto comp_err;
}
sprintf(buf, "%.*s/.necronda-server/cache", cache[i].webroot_len, cache[i].filename); sprintf(buf, "%.*s/.necronda-server/cache", cache[i].webroot_len, cache[i].filename);
mkdir(buf, 0700); if (mkdir(buf, 0700) != 0 && errno != EEXIST) {
fprintf(stderr, ERR_STR "Unable to create directory %s: %s" CLR_STR "\n", buf, strerror(errno));
goto comp_err;
}
char *rel_path = cache[i].filename + cache[i].webroot_len + 1; char *rel_path = cache[i].filename + cache[i].webroot_len + 1;
for (int j = 0; j < strlen(rel_path); j++) { for (int j = 0; j < strlen(rel_path); j++) {
char ch = rel_path[j]; char ch = rel_path[j];
if (ch == '/') { if (ch == '/') ch = '_';
ch = '_';
}
buf[j] = ch; buf[j] = ch;
} }
buf[strlen(rel_path)] = 0; buf[strlen(rel_path)] = 0;
@ -123,7 +129,8 @@ int cache_process() {
"%.*s/.necronda-server/cache/%s.br", "%.*s/.necronda-server/cache/%s.br",
cache[i].webroot_len, cache[i].filename, buf); cache[i].webroot_len, cache[i].filename, buf);
if (p_len_gz < 0 || p_len_gz >= sizeof(filename_comp_gz) || if (p_len_gz < 0 || p_len_gz >= sizeof(filename_comp_gz) ||
p_len_br < 0 || p_len_br >= sizeof(filename_comp_br)) { p_len_br < 0 || p_len_br >= sizeof(filename_comp_br))
{
fprintf(stderr, ERR_STR "Unable to open cached file: " fprintf(stderr, ERR_STR "Unable to open cached file: "
"File name for compressed file too long" CLR_STR "\n"); "File name for compressed file too long" CLR_STR "\n");
goto comp_err; goto comp_err;