fix confparser leaks reported by scan-build, add scan script

This commit is contained in:
2019-01-09 22:44:55 +02:00
parent 1c7b7335e6
commit 579f56df35
5 changed files with 26 additions and 5 deletions

View File

@@ -118,7 +118,7 @@ void confexport(void)
conf.rmps.client_poolsize
);
}
/*
static int fopen_and_mkdir(const char *dir)
{
char tmp[256];
@@ -154,7 +154,7 @@ static int fopen_and_mkdir(const char *dir)
fclose(fp);
return 0;
}
*/
static int test_conf_perms(char *config)
{
@@ -167,22 +167,26 @@ static int test_conf_perms(char *config)
if (errno == ENOENT) {
enumtostr(confresult, CONF_MISSING);
log(ERROR, confresult, config);
free(config_copy);
return 1;
}
} else {
if (!S_ISREG(s.st_mode)) {
enumtostr(confresult, CONF_NOTFILE);
log(ERROR, confresult, config);
//free(config_copy);
return 1;
}
if (!(0400 & s.st_mode)) {
enumtostr(confresult, CONF_PERM);
log(ERROR, confresult, config);
free(config_copy);
return 1;
}
if (access(config, R_OK) != 0) {
enumtostr(confresult, CONF_NOT_READABLE);
log(ERROR, confresult, config);
free(config_copy);
return 1;
}
if (s.st_uid != 0) {
@@ -204,18 +208,21 @@ static int test_conf_perms(char *config)
if (errno == ENOENT) {
enumtostr(confresult, CONF_DIR_MISSING);
log(ERROR, confresult, config_copy);
free(config_copy);
return 1;
}
} else {
if (!S_ISDIR(s.st_mode)) {
enumtostr(confresult, CONF_DIR_NOTDIR);
log(ERROR, confresult, config_copy);
free(config_copy);
return 1;
}
if (!(0400 & s.st_mode) ||
!(0100 & s.st_mode)) {
enumtostr(confresult, CONF_DIR_PERM);
log(ERROR, confresult, config_copy);
free(config_copy);
return 1;
}
if (s.st_uid != 0) {
@@ -230,6 +237,7 @@ static int test_conf_perms(char *config)
log(WARNING, confresult, config_copy);
}
}
free(config_copy);
return 0; /* conf is readable */
}