allocate listen[] before writing to it...

This commit is contained in:
Yves Rutschle 2017-04-18 21:04:30 +02:00
parent cce42c6882
commit 7d561af423

View File

@ -17,7 +17,7 @@ static char* resolve_listen(const char *hostname, const char *port) {
}
static int get_listen_from_conf(const char *filename, char **listen) {
static int get_listen_from_conf(const char *filename, char **listen[]) {
config_t config;
config_setting_t *setting, *addr;
const char *hostname, *port;
@ -39,6 +39,7 @@ static int get_listen_from_conf(const char *filename, char **listen) {
setting = config_lookup(&config, "listen");
if (setting) {
len = config_setting_length(setting);
*listen = malloc(len * sizeof(**listen));
for (int i = 0; i < len; i++) {
addr = config_setting_get_elem(setting, i);
if (! (config_setting_lookup_string(addr, "host", &hostname) &&
@ -48,8 +49,8 @@ static int get_listen_from_conf(const char *filename, char **listen) {
config_setting_source_line(addr));
return -1;
} else {
listen[i] = malloc(strlen(resolve_listen(hostname, port)));
strcpy(listen[i], resolve_listen(hostname, port));
(*listen)[i] = malloc(strlen(resolve_listen(hostname, port)));
strcpy((*listen)[i], resolve_listen(hostname, port));
}
}
}
@ -59,7 +60,7 @@ static int get_listen_from_conf(const char *filename, char **listen) {
}
static int write_socket_unit(FILE *socket, char **listen, int num_addr, const char *source) {
static int write_socket_unit(FILE *socket, char *listen[], int num_addr, const char *source) {
fprintf(socket,
"# Automatically generated by systemd-sslh-generator\n\n"
@ -100,8 +101,7 @@ static int gen_sslh_config(char *runtime_unit_dir) {
fclose(config);
num_addr = get_listen_from_conf(sslh_conf, listen);
num_addr = get_listen_from_conf(sslh_conf, &listen);
if (num_addr < 0)
return -1;