|
|
|
@ -130,9 +130,21 @@ FILE *mosquitto__fopen(const char *path, const char *mode, bool restrict_read)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
if(mode[0] == 'r'){
|
|
|
|
|
FILE *fptr;
|
|
|
|
|
|
|
|
|
|
if(restrict_read){
|
|
|
|
|
mode_t old_mask;
|
|
|
|
|
|
|
|
|
|
old_mask = umask(0077);
|
|
|
|
|
fptr = fopen(path, mode);
|
|
|
|
|
umask(old_mask);
|
|
|
|
|
}else{
|
|
|
|
|
fptr = fopen(path, mode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct stat statbuf;
|
|
|
|
|
if(stat(path, &statbuf) < 0){
|
|
|
|
|
if(fstat(fileno(fptr), &statbuf) < 0){
|
|
|
|
|
fclose(fptr);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -140,22 +152,10 @@ FILE *mosquitto__fopen(const char *path, const char *mode, bool restrict_read)
|
|
|
|
|
#ifdef WITH_BROKER
|
|
|
|
|
log__printf(NULL, MOSQ_LOG_ERR, "Error: %s is not a file.", path);
|
|
|
|
|
#endif
|
|
|
|
|
fclose(fptr);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(restrict_read){
|
|
|
|
|
FILE *fptr;
|
|
|
|
|
mode_t old_mask;
|
|
|
|
|
|
|
|
|
|
old_mask = umask(0077);
|
|
|
|
|
fptr = fopen(path, mode);
|
|
|
|
|
umask(old_mask);
|
|
|
|
|
|
|
|
|
|
return fptr;
|
|
|
|
|
}else{
|
|
|
|
|
return fopen(path, mode);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|