mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2026-02-01 17:42:28 +00:00
coroparse: Check icmap_set results
Signed-off-by: Jan Friesse <jfriesse@redhat.com> Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
This commit is contained in:
parent
20bd68b3fb
commit
ffb759cd7d
200
exec/coroparse.c
200
exec/coroparse.c
@ -527,6 +527,9 @@ static int main_config_parser_cb(const char *path,
|
||||
struct key_value_list_item *kv_item;
|
||||
struct qb_list_head *iter, *tmp_iter;
|
||||
int uid, gid;
|
||||
cs_error_t cs_err;
|
||||
|
||||
cs_err = CS_OK;
|
||||
|
||||
switch (type) {
|
||||
case PARSER_CB_START:
|
||||
@ -548,7 +551,9 @@ static int main_config_parser_cb(const char *path,
|
||||
if (safe_atoq(value, &val, val_type) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_uint32_r(config_map, path, val);
|
||||
if ((cs_err = icmap_set_uint32_r(config_map, path, val)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
break;
|
||||
@ -561,7 +566,9 @@ static int main_config_parser_cb(const char *path,
|
||||
if (safe_atoq(value, &val, val_type) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_uint32_r(config_map, path, val);
|
||||
if ((cs_err = icmap_set_uint32_r(config_map, path, val)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
|
||||
@ -575,7 +582,9 @@ static int main_config_parser_cb(const char *path,
|
||||
if (safe_atoq(value, &val, val_type) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_uint8_r(config_map, path, val);
|
||||
if ((cs_err = icmap_set_uint8_r(config_map, path, val)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
break;
|
||||
@ -587,7 +596,9 @@ static int main_config_parser_cb(const char *path,
|
||||
if (safe_atoq(value, &val, val_type) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_uint32_r(config_map, path, val);
|
||||
if ((cs_err = icmap_set_uint32_r(config_map, path, val)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
if ((strcmp(path, "quorum.device.master_wins") == 0)) {
|
||||
@ -595,7 +606,9 @@ static int main_config_parser_cb(const char *path,
|
||||
if (safe_atoq(value, &val, val_type) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_uint8_r(config_map, path, val);
|
||||
if ((cs_err = icmap_set_uint8_r(config_map, path, val)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
break;
|
||||
@ -633,7 +646,9 @@ static int main_config_parser_cb(const char *path,
|
||||
if (safe_atoq(value, &val, val_type) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_uint32_r(config_map,path, val);
|
||||
if ((cs_err = icmap_set_uint32_r(config_map,path, val)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
if (strcmp(path, "totem.knet_compression_level") == 0) {
|
||||
@ -641,14 +656,18 @@ static int main_config_parser_cb(const char *path,
|
||||
if (safe_atoq(value, &val, val_type) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_int32_r(config_map, path, val);
|
||||
if ((cs_err = icmap_set_int32_r(config_map, path, val)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
if (strcmp(path, "totem.config_version") == 0) {
|
||||
if (str_to_ull(value, &ull) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_uint64_r(config_map, path, ull);
|
||||
if ((cs_err = icmap_set_uint64_r(config_map, path, ull)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
if (strcmp(path, "totem.ip_version") == 0) {
|
||||
@ -867,7 +886,9 @@ static int main_config_parser_cb(const char *path,
|
||||
}
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "uidgid.config.uid.%u",
|
||||
uid);
|
||||
icmap_set_uint8_r(config_map, key_name, 1);
|
||||
if ((cs_err = icmap_set_uint8_r(config_map, key_name, 1)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
} else if (strcmp(key, "gid") == 0) {
|
||||
gid = gid_determine(value);
|
||||
@ -877,7 +898,9 @@ static int main_config_parser_cb(const char *path,
|
||||
}
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "uidgid.config.gid.%u",
|
||||
gid);
|
||||
icmap_set_uint8_r(config_map, key_name, 1);
|
||||
if ((cs_err = icmap_set_uint8_r(config_map, key_name, 1)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
} else {
|
||||
*error_string = "uidgid: Only uid and gid are allowed items";
|
||||
@ -922,12 +945,16 @@ static int main_config_parser_cb(const char *path,
|
||||
goto atoi_error;
|
||||
}
|
||||
|
||||
icmap_set_uint32_r(config_map, key_name, val);
|
||||
if ((cs_err = icmap_set_uint32_r(config_map, key_name, val)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
|
||||
if (add_as_string) {
|
||||
icmap_set_string_r(config_map, key_name, value);
|
||||
if ((cs_err = icmap_set_string_r(config_map, key_name, value)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
};
|
||||
add_as_string = 0;
|
||||
}
|
||||
break;
|
||||
@ -937,7 +964,9 @@ static int main_config_parser_cb(const char *path,
|
||||
if (safe_atoq(value, &val, val_type) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_uint32_r(config_map,path, val);
|
||||
if ((cs_err = icmap_set_uint32_r(config_map,path, val)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
break;
|
||||
@ -947,7 +976,9 @@ static int main_config_parser_cb(const char *path,
|
||||
if (str_to_ull(value, &ull) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_uint64_r(config_map,path, ull);
|
||||
if ((cs_err = icmap_set_uint64_r(config_map,path, ull)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
break;
|
||||
@ -957,14 +988,18 @@ static int main_config_parser_cb(const char *path,
|
||||
if (str_to_ull(value, &ull) != 0) {
|
||||
goto atoi_error;
|
||||
}
|
||||
icmap_set_uint64_r(config_map,path, ull);
|
||||
if ((cs_err = icmap_set_uint64_r(config_map,path, ull)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
add_as_string = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (add_as_string) {
|
||||
icmap_set_string_r(config_map, path, value);
|
||||
if ((cs_err = icmap_set_string_r(config_map, path, value)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PARSER_CB_SECTION_START:
|
||||
@ -1042,71 +1077,107 @@ static int main_config_parser_cb(const char *path,
|
||||
if (data->bindnetaddr != NULL) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.bindnetaddr",
|
||||
data->linknumber);
|
||||
icmap_set_string_r(config_map, key_name, data->bindnetaddr);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, data->bindnetaddr);
|
||||
|
||||
free(data->bindnetaddr);
|
||||
data->bindnetaddr = NULL;
|
||||
|
||||
if (cs_err != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
|
||||
if (data->mcastaddr != NULL) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.mcastaddr",
|
||||
data->linknumber);
|
||||
icmap_set_string_r(config_map, key_name, data->mcastaddr);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, data->mcastaddr);
|
||||
|
||||
free(data->mcastaddr);
|
||||
data->mcastaddr = NULL;
|
||||
|
||||
if (cs_err != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
|
||||
if (data->broadcast != NULL) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.broadcast",
|
||||
data->linknumber);
|
||||
icmap_set_string_r(config_map, key_name, data->broadcast);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, data->broadcast);
|
||||
|
||||
free(data->broadcast);
|
||||
data->broadcast = NULL;
|
||||
|
||||
if (cs_err != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
|
||||
if (data->mcastport > -1) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.mcastport",
|
||||
data->linknumber);
|
||||
icmap_set_uint16_r(config_map, key_name, data->mcastport);
|
||||
if ((cs_err = icmap_set_uint16_r(config_map, key_name,
|
||||
data->mcastport)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
|
||||
if (data->ttl > -1) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.ttl",
|
||||
data->linknumber);
|
||||
icmap_set_uint8_r(config_map, key_name, data->ttl);
|
||||
if ((cs_err = icmap_set_uint8_r(config_map, key_name, data->ttl)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
if (data->knet_link_priority > -1) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.knet_link_priority",
|
||||
data->linknumber);
|
||||
icmap_set_uint8_r(config_map, key_name, data->knet_link_priority);
|
||||
if ((cs_err = icmap_set_uint8_r(config_map, key_name,
|
||||
data->knet_link_priority)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
if (data->knet_ping_interval > -1) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.knet_ping_interval",
|
||||
data->linknumber);
|
||||
icmap_set_uint32_r(config_map, key_name, data->knet_ping_interval);
|
||||
if ((cs_err = icmap_set_uint32_r(config_map, key_name,
|
||||
data->knet_ping_interval)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
if (data->knet_ping_timeout > -1) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.knet_ping_timeout",
|
||||
data->linknumber);
|
||||
icmap_set_uint32_r(config_map, key_name, data->knet_ping_timeout);
|
||||
if ((cs_err = icmap_set_uint32_r(config_map, key_name,
|
||||
data->knet_ping_timeout)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
if (data->knet_ping_precision > -1) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.knet_ping_precision",
|
||||
data->linknumber);
|
||||
icmap_set_uint32_r(config_map, key_name, data->knet_ping_precision);
|
||||
if ((cs_err = icmap_set_uint32_r(config_map, key_name,
|
||||
data->knet_ping_precision)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
if (data->knet_pong_count > -1) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.knet_pong_count",
|
||||
data->linknumber);
|
||||
icmap_set_uint32_r(config_map, key_name, data->knet_pong_count);
|
||||
if ((cs_err = icmap_set_uint32_r(config_map, key_name,
|
||||
data->knet_pong_count)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
if (data->knet_transport) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.knet_transport",
|
||||
data->linknumber);
|
||||
icmap_set_string_r(config_map, key_name, data->knet_transport);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, data->knet_transport);
|
||||
free(data->knet_transport);
|
||||
|
||||
if (cs_err != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
|
||||
ii = 0;
|
||||
@ -1116,12 +1187,16 @@ static int main_config_parser_cb(const char *path,
|
||||
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.member.%u",
|
||||
data->linknumber, ii);
|
||||
icmap_set_string_r(config_map, key_name, kv_item->value);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, kv_item->value);
|
||||
|
||||
free(kv_item->value);
|
||||
free(kv_item->key);
|
||||
free(kv_item);
|
||||
ii++;
|
||||
|
||||
if (cs_err != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
@ -1137,19 +1212,26 @@ static int main_config_parser_cb(const char *path,
|
||||
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "logging.logger_subsys.%s.%s",
|
||||
data->subsys, kv_item->key);
|
||||
icmap_set_string_r(config_map, key_name, kv_item->value);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, kv_item->value);
|
||||
|
||||
free(kv_item->value);
|
||||
free(kv_item->key);
|
||||
free(kv_item);
|
||||
|
||||
if (cs_err != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "logging.logger_subsys.%s.subsys",
|
||||
data->subsys);
|
||||
icmap_set_string_r(config_map, key_name, data->subsys);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, data->subsys);
|
||||
|
||||
free(data->subsys);
|
||||
|
||||
if (cs_err != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
break;
|
||||
case MAIN_CP_CB_DATA_STATE_LOGGING_DAEMON:
|
||||
if (data->logging_daemon_name == NULL) {
|
||||
@ -1184,38 +1266,52 @@ static int main_config_parser_cb(const char *path,
|
||||
kv_item->key);
|
||||
}
|
||||
}
|
||||
icmap_set_string_r(config_map, key_name, kv_item->value);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, kv_item->value);
|
||||
|
||||
free(kv_item->value);
|
||||
free(kv_item->key);
|
||||
free(kv_item);
|
||||
|
||||
if (cs_err != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
}
|
||||
|
||||
if (data->subsys == NULL) {
|
||||
if (strcmp(data->logging_daemon_name, "corosync") != 0) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "logging.logging_daemon.%s.name",
|
||||
data->logging_daemon_name);
|
||||
icmap_set_string_r(config_map, key_name, data->logging_daemon_name);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, data->logging_daemon_name);
|
||||
}
|
||||
} else {
|
||||
if (strcmp(data->logging_daemon_name, "corosync") == 0) {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "logging.logger_subsys.%s.subsys",
|
||||
data->subsys);
|
||||
icmap_set_string_r(config_map, key_name, data->subsys);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, data->subsys);
|
||||
|
||||
} else {
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "logging.logging_daemon.%s.%s.subsys",
|
||||
data->logging_daemon_name, data->subsys);
|
||||
icmap_set_string_r(config_map, key_name, data->subsys);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, data->subsys);
|
||||
|
||||
if (cs_err != CS_OK) {
|
||||
free(data->subsys);
|
||||
free(data->logging_daemon_name);
|
||||
|
||||
goto icmap_set_error;
|
||||
}
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "logging.logging_daemon.%s.%s.name",
|
||||
data->logging_daemon_name, data->subsys);
|
||||
icmap_set_string_r(config_map, key_name, data->logging_daemon_name);
|
||||
cs_err = icmap_set_string_r(config_map, key_name, data->logging_daemon_name);
|
||||
}
|
||||
}
|
||||
|
||||
free(data->subsys);
|
||||
free(data->logging_daemon_name);
|
||||
|
||||
if (cs_err != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
break;
|
||||
case MAIN_CP_CB_DATA_STATE_NODELIST_NODE:
|
||||
data->node_number++;
|
||||
@ -1264,6 +1360,17 @@ atoi_error:
|
||||
key, min_val, max_val, value);
|
||||
*error_string = formated_err;
|
||||
|
||||
return (0);
|
||||
|
||||
icmap_set_error:
|
||||
if (snprintf(formated_err, sizeof(formated_err),
|
||||
"Can't store key \"%s\" into icmap, returned error is %s",
|
||||
key, cs_strerror(cs_err)) >= sizeof(formated_err)) {
|
||||
*error_string = "Can't format parser error message";
|
||||
} else {
|
||||
*error_string = formated_err;
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -1278,6 +1385,10 @@ static int uidgid_config_parser_cb(const char *path,
|
||||
{
|
||||
char key_name[ICMAP_KEYNAME_MAXLEN];
|
||||
int uid, gid;
|
||||
static char formated_err[256];
|
||||
cs_error_t cs_err;
|
||||
|
||||
cs_err = CS_OK;
|
||||
|
||||
switch (type) {
|
||||
case PARSER_CB_START:
|
||||
@ -1293,7 +1404,9 @@ static int uidgid_config_parser_cb(const char *path,
|
||||
}
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "uidgid.config.uid.%u",
|
||||
uid);
|
||||
icmap_set_uint8_r(config_map, key_name, 1);
|
||||
if ((cs_err = icmap_set_uint8_r(config_map, key_name, 1)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
} else if (strcmp(path, "uidgid.gid") == 0) {
|
||||
gid = gid_determine(value);
|
||||
if (gid == -1) {
|
||||
@ -1302,7 +1415,9 @@ static int uidgid_config_parser_cb(const char *path,
|
||||
}
|
||||
snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "uidgid.config.gid.%u",
|
||||
gid);
|
||||
icmap_set_uint8_r(config_map, key_name, 1);
|
||||
if ((cs_err = icmap_set_uint8_r(config_map, key_name, 1)) != CS_OK) {
|
||||
goto icmap_set_error;
|
||||
}
|
||||
} else {
|
||||
*error_string = "uidgid: Only uid and gid are allowed items";
|
||||
return (0);
|
||||
@ -1319,6 +1434,17 @@ static int uidgid_config_parser_cb(const char *path,
|
||||
}
|
||||
|
||||
return (1);
|
||||
|
||||
icmap_set_error:
|
||||
if (snprintf(formated_err, sizeof(formated_err),
|
||||
"Can't store key \"%s\" into icmap, returned error is %s",
|
||||
key, cs_strerror(cs_err)) >= sizeof(formated_err)) {
|
||||
*error_string = "Can't format parser error message";
|
||||
} else {
|
||||
*error_string = formated_err;
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int read_uidgid_files_into_icmap(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user