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