mirror of
https://github.com/yrutschle/sslh.git
synced 2025-06-02 08:31:06 +03:00
allocate listen[] before writing to it...
This commit is contained in:
parent
cce42c6882
commit
7d561af423
@ -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;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user