summaryrefslogtreecommitdiffstats
path: root/daemons/execd
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--daemons/execd/Makefile.am43
-rw-r--r--daemons/execd/cts-exec-helper.c34
-rw-r--r--daemons/execd/execd_commands.c53
-rw-r--r--daemons/execd/pacemaker-execd.c10
-rw-r--r--daemons/execd/remoted_pidone.c18
-rw-r--r--daemons/execd/remoted_tls.c42
6 files changed, 118 insertions, 82 deletions
diff --git a/daemons/execd/Makefile.am b/daemons/execd/Makefile.am
index 466f0df..ab8544f 100644
--- a/daemons/execd/Makefile.am
+++ b/daemons/execd/Makefile.am
@@ -1,5 +1,5 @@
#
-# Copyright 2012-2021 the Pacemaker project contributors
+# Copyright 2012-2023 the Pacemaker project contributors
#
# The version control history for this file may have further details.
#
@@ -12,18 +12,20 @@ include $(top_srcdir)/mk/man.mk
halibdir = $(CRM_DAEMON_DIR)
-halib_PROGRAMS = pacemaker-execd cts-exec-helper
+halib_PROGRAMS = pacemaker-execd \
+ cts-exec-helper
EXTRA_DIST = pacemaker-remoted.8.inc
pacemaker_execd_CFLAGS = $(CFLAGS_HARDENED_EXE)
pacemaker_execd_LDFLAGS = $(LDFLAGS_HARDENED_EXE)
-pacemaker_execd_LDADD = $(top_builddir)/lib/common/libcrmcommon.la \
- $(top_builddir)/lib/services/libcrmservice.la \
- $(top_builddir)/lib/fencing/libstonithd.la
-pacemaker_execd_SOURCES = pacemaker-execd.c execd_commands.c \
- execd_alerts.c
+pacemaker_execd_LDADD = $(top_builddir)/lib/fencing/libstonithd.la
+pacemaker_execd_LDADD += $(top_builddir)/lib/services/libcrmservice.la
+pacemaker_execd_LDADD += $(top_builddir)/lib/common/libcrmcommon.la
+pacemaker_execd_SOURCES = pacemaker-execd.c \
+ execd_commands.c \
+ execd_alerts.c
if BUILD_REMOTE
sbin_PROGRAMS = pacemaker-remoted
@@ -34,22 +36,27 @@ initdir = $(INITDIR)
init_SCRIPTS = pacemaker_remote
endif
-pacemaker_remoted_CPPFLAGS = -DPCMK__COMPILE_REMOTE $(AM_CPPFLAGS)
+pacemaker_remoted_CPPFLAGS = -DPCMK__COMPILE_REMOTE \
+ $(AM_CPPFLAGS)
pacemaker_remoted_CFLAGS = $(CFLAGS_HARDENED_EXE)
pacemaker_remoted_LDFLAGS = $(LDFLAGS_HARDENED_EXE)
-pacemaker_remoted_LDADD = $(pacemaker_execd_LDADD) \
- $(top_builddir)/lib/lrmd/liblrmd.la
-pacemaker_remoted_SOURCES = $(pacemaker_execd_SOURCES) \
- remoted_tls.c remoted_pidone.c remoted_proxy.c
+pacemaker_remoted_LDADD = $(top_builddir)/lib/fencing/libstonithd.la
+pacemaker_remoted_LDADD += $(top_builddir)/lib/services/libcrmservice.la
+pacemaker_remoted_LDADD += $(top_builddir)/lib/lrmd/liblrmd.la
+pacemaker_remoted_LDADD += $(top_builddir)/lib/common/libcrmcommon.la
+pacemaker_remoted_SOURCES = $(pacemaker_execd_SOURCES) \
+ remoted_tls.c \
+ remoted_pidone.c \
+ remoted_proxy.c
endif
-cts_exec_helper_LDADD = $(top_builddir)/lib/common/libcrmcommon.la \
- $(top_builddir)/lib/lrmd/liblrmd.la \
- $(top_builddir)/lib/cib/libcib.la \
- $(top_builddir)/lib/services/libcrmservice.la \
- $(top_builddir)/lib/pengine/libpe_status.la
+cts_exec_helper_LDADD = $(top_builddir)/lib/pengine/libpe_status.la
+cts_exec_helper_LDADD += $(top_builddir)/lib/cib/libcib.la
+cts_exec_helper_LDADD += $(top_builddir)/lib/lrmd/liblrmd.la
+cts_exec_helper_LDADD += $(top_builddir)/lib/services/libcrmservice.la
+cts_exec_helper_LDADD += $(top_builddir)/lib/common/libcrmcommon.la
cts_exec_helper_SOURCES = cts-exec-helper.c
noinst_HEADERS = pacemaker-execd.h
@@ -59,6 +66,7 @@ CLEANFILES = $(man8_MANS)
# Always create a symlink for the old pacemaker_remoted name, so that bundle
# container images using a current Pacemaker will run on cluster nodes running
# Pacemaker 1 (>=1.1.17).
+.PHONY: install-exec-hook
install-exec-hook:
if BUILD_LEGACY_LINKS
cd $(DESTDIR)$(CRM_DAEMON_DIR) && rm -f lrmd && $(LN_S) pacemaker-execd lrmd
@@ -67,6 +75,7 @@ if BUILD_REMOTE
cd $(DESTDIR)$(sbindir) && rm -f pacemaker_remoted && $(LN_S) pacemaker-remoted pacemaker_remoted
endif
+.PHONY: uninstall-hook
uninstall-hook:
if BUILD_LEGACY_LINKS
cd $(DESTDIR)$(CRM_DAEMON_DIR) && rm -f lrmd
diff --git a/daemons/execd/cts-exec-helper.c b/daemons/execd/cts-exec-helper.c
index 2af5e16..6ebbedf 100644
--- a/daemons/execd/cts-exec-helper.c
+++ b/daemons/execd/cts-exec-helper.c
@@ -443,9 +443,9 @@ static int
generate_params(void)
{
int rc = pcmk_rc_ok;
- pe_working_set_t *data_set = NULL;
+ pcmk_scheduler_t *scheduler = NULL;
xmlNode *cib_xml_copy = NULL;
- pe_resource_t *rsc = NULL;
+ pcmk_resource_t *rsc = NULL;
GHashTable *params = NULL;
GHashTable *meta = NULL;
GHashTableIter iter;
@@ -467,27 +467,29 @@ generate_params(void)
}
// Calculate cluster status
- data_set = pe_new_working_set();
- if (data_set == NULL) {
- crm_crit("Could not allocate working set");
+ scheduler = pe_new_working_set();
+ if (scheduler == NULL) {
+ crm_crit("Could not allocate scheduler data");
return ENOMEM;
}
- pe__set_working_set_flags(data_set, pe_flag_no_counts|pe_flag_no_compat);
- data_set->input = cib_xml_copy;
- data_set->now = crm_time_new(NULL);
- cluster_status(data_set);
+ pe__set_working_set_flags(scheduler,
+ pcmk_sched_no_counts|pcmk_sched_no_compat);
+ scheduler->input = cib_xml_copy;
+ scheduler->now = crm_time_new(NULL);
+ cluster_status(scheduler);
// Find resource in CIB
- rsc = pe_find_resource_with_flags(data_set->resources, options.rsc_id,
- pe_find_renamed|pe_find_any);
+ rsc = pe_find_resource_with_flags(scheduler->resources, options.rsc_id,
+ pcmk_rsc_match_history
+ |pcmk_rsc_match_basename);
if (rsc == NULL) {
crm_err("Resource does not exist in config");
- pe_free_working_set(data_set);
+ pe_free_working_set(scheduler);
return EINVAL;
}
// Add resource instance parameters to options.params
- params = pe_rsc_params(rsc, NULL, data_set);
+ params = pe_rsc_params(rsc, NULL, scheduler);
if (params != NULL) {
g_hash_table_iter_init(&iter, params);
while (g_hash_table_iter_next(&iter, (gpointer *) &key,
@@ -498,7 +500,7 @@ generate_params(void)
// Add resource meta-attributes to options.params
meta = pcmk__strkey_table(free, free);
- get_meta_attributes(meta, rsc, NULL, data_set);
+ get_meta_attributes(meta, rsc, NULL, scheduler);
g_hash_table_iter_init(&iter, meta);
while (g_hash_table_iter_next(&iter, (gpointer *) &key,
(gpointer *) &value)) {
@@ -509,7 +511,7 @@ generate_params(void)
}
g_hash_table_destroy(meta);
- pe_free_working_set(data_set);
+ pe_free_working_set(scheduler);
return rc;
}
@@ -587,7 +589,7 @@ main(int argc, char **argv)
goto done;
}
options.api_call = "exec";
- options.action = "monitor";
+ options.action = PCMK_ACTION_MONITOR;
options.exec_call_opts = lrmd_opt_notify_orig_only;
}
diff --git a/daemons/execd/execd_commands.c b/daemons/execd/execd_commands.c
index fa2761e..cf4503a 100644
--- a/daemons/execd/execd_commands.c
+++ b/daemons/execd/execd_commands.c
@@ -213,7 +213,7 @@ log_finished(const lrmd_cmd_t *cmd, int exec_time_ms, int queue_time_ms)
int log_level = LOG_INFO;
GString *str = g_string_sized_new(100); // reasonable starting size
- if (pcmk__str_eq(cmd->action, "monitor", pcmk__str_casei)) {
+ if (pcmk__str_eq(cmd->action, PCMK_ACTION_MONITOR, pcmk__str_casei)) {
log_level = LOG_DEBUG;
}
@@ -253,7 +253,7 @@ log_execute(lrmd_cmd_t * cmd)
{
int log_level = LOG_INFO;
- if (pcmk__str_eq(cmd->action, "monitor", pcmk__str_casei)) {
+ if (pcmk__str_eq(cmd->action, PCMK_ACTION_MONITOR, pcmk__str_casei)) {
log_level = LOG_DEBUG;
}
@@ -264,9 +264,9 @@ log_execute(lrmd_cmd_t * cmd)
static const char *
normalize_action_name(lrmd_rsc_t * rsc, const char *action)
{
- if (pcmk__str_eq(action, "monitor", pcmk__str_casei) &&
+ if (pcmk__str_eq(action, PCMK_ACTION_MONITOR, pcmk__str_casei) &&
pcmk_is_set(pcmk_get_ra_caps(rsc->class), pcmk_ra_cap_status)) {
- return "status";
+ return PCMK_ACTION_STATUS;
}
return action;
}
@@ -517,7 +517,7 @@ schedule_lrmd_cmd(lrmd_rsc_t * rsc, lrmd_cmd_t * cmd)
/* The controller expects the executor to automatically cancel
* recurring operations before a resource stops.
*/
- if (pcmk__str_eq(cmd->action, "stop", pcmk__str_casei)) {
+ if (pcmk__str_eq(cmd->action, PCMK_ACTION_STOP, pcmk__str_casei)) {
cancel_all_recurring(rsc, NULL);
}
@@ -844,7 +844,8 @@ action_complete(svc_action_t * action)
if (pcmk__str_eq(rclass, PCMK_RESOURCE_CLASS_SYSTEMD, pcmk__str_casei)) {
if (pcmk__result_ok(&(cmd->result))
- && pcmk__strcase_any_of(cmd->action, "start", "stop", NULL)) {
+ && pcmk__strcase_any_of(cmd->action, PCMK_ACTION_START,
+ PCMK_ACTION_STOP, NULL)) {
/* systemd returns from start and stop actions after the action
* begins, not after it completes. We have to jump through a few
* hoops so that we don't report 'complete' to the rest of pacemaker
@@ -852,7 +853,7 @@ action_complete(svc_action_t * action)
*/
goagain = true;
cmd->real_action = cmd->action;
- cmd->action = strdup("monitor");
+ cmd->action = strdup(PCMK_ACTION_MONITOR);
} else if (cmd->real_action != NULL) {
// This is follow-up monitor to check whether start/stop completed
@@ -860,7 +861,8 @@ action_complete(svc_action_t * action)
goagain = true;
} else if (pcmk__result_ok(&(cmd->result))
- && pcmk__str_eq(cmd->real_action, "stop", pcmk__str_casei)) {
+ && pcmk__str_eq(cmd->real_action, PCMK_ACTION_STOP,
+ pcmk__str_casei)) {
goagain = true;
} else {
@@ -878,9 +880,11 @@ action_complete(svc_action_t * action)
if ((cmd->result.execution_status == PCMK_EXEC_DONE)
&& (cmd->result.exit_status == PCMK_OCF_NOT_RUNNING)) {
- if (pcmk__str_eq(cmd->real_action, "start", pcmk__str_casei)) {
+ if (pcmk__str_eq(cmd->real_action, PCMK_ACTION_START,
+ pcmk__str_casei)) {
cmd->result.exit_status = PCMK_OCF_UNKNOWN_ERROR;
- } else if (pcmk__str_eq(cmd->real_action, "stop", pcmk__str_casei)) {
+ } else if (pcmk__str_eq(cmd->real_action, PCMK_ACTION_STOP,
+ pcmk__str_casei)) {
cmd->result.exit_status = PCMK_OCF_OK;
}
}
@@ -891,12 +895,12 @@ action_complete(svc_action_t * action)
#if SUPPORT_NAGIOS
if (rsc && pcmk__str_eq(rsc->class, PCMK_RESOURCE_CLASS_NAGIOS, pcmk__str_casei)) {
- if (action_matches(cmd, "monitor", 0)
+ if (action_matches(cmd, PCMK_ACTION_MONITOR, 0)
&& pcmk__result_ok(&(cmd->result))) {
/* Successfully executed --version for the nagios plugin */
cmd->result.exit_status = PCMK_OCF_NOT_RUNNING;
- } else if (pcmk__str_eq(cmd->action, "start", pcmk__str_casei)
+ } else if (pcmk__str_eq(cmd->action, PCMK_ACTION_START, pcmk__str_casei)
&& !pcmk__result_ok(&(cmd->result))) {
#ifdef PCMK__TIME_USE_CGT
goagain = true;
@@ -1007,11 +1011,11 @@ stonith_action_complete(lrmd_cmd_t *cmd, int exit_status,
/* This should be possible only for probes in practice, but
* interpret for all actions to be safe.
*/
- if (pcmk__str_eq(cmd->action, CRMD_ACTION_STATUS,
+ if (pcmk__str_eq(cmd->action, PCMK_ACTION_MONITOR,
pcmk__str_none)) {
exit_status = PCMK_OCF_NOT_RUNNING;
- } else if (pcmk__str_eq(cmd->action, CRMD_ACTION_STOP,
+ } else if (pcmk__str_eq(cmd->action, PCMK_ACTION_STOP,
pcmk__str_none)) {
exit_status = PCMK_OCF_OK;
@@ -1035,11 +1039,12 @@ stonith_action_complete(lrmd_cmd_t *cmd, int exit_status,
// Certain successful actions change the known state of the resource
if ((rsc != NULL) && pcmk__result_ok(&(cmd->result))) {
- if (pcmk__str_eq(cmd->action, "start", pcmk__str_casei)) {
+ if (pcmk__str_eq(cmd->action, PCMK_ACTION_START, pcmk__str_casei)) {
pcmk__set_result(&rsc->fence_probe_result, CRM_EX_OK,
PCMK_EXEC_DONE, NULL); // "running"
- } else if (pcmk__str_eq(cmd->action, "stop", pcmk__str_casei)) {
+ } else if (pcmk__str_eq(cmd->action, PCMK_ACTION_STOP,
+ pcmk__str_casei)) {
pcmk__set_result(&rsc->fence_probe_result, CRM_EX_ERROR,
PCMK_EXEC_NO_FENCE_DEVICE, NULL); // "not running"
}
@@ -1235,7 +1240,7 @@ execute_stonith_action(lrmd_rsc_t *rsc, lrmd_cmd_t *cmd)
stonith_t *stonith_api = get_stonith_connection();
- if (pcmk__str_eq(cmd->action, "monitor", pcmk__str_casei)
+ if (pcmk__str_eq(cmd->action, PCMK_ACTION_MONITOR, pcmk__str_casei)
&& (cmd->interval_ms == 0)) {
// Probes don't require a fencer connection
stonith_action_complete(cmd, rsc->fence_probe_result.exit_status,
@@ -1249,16 +1254,17 @@ execute_stonith_action(lrmd_rsc_t *rsc, lrmd_cmd_t *cmd)
"No connection to fencer");
return;
- } else if (pcmk__str_eq(cmd->action, "start", pcmk__str_casei)) {
+ } else if (pcmk__str_eq(cmd->action, PCMK_ACTION_START, pcmk__str_casei)) {
rc = execd_stonith_start(stonith_api, rsc, cmd);
if (rc == pcmk_ok) {
do_monitor = TRUE;
}
- } else if (pcmk__str_eq(cmd->action, "stop", pcmk__str_casei)) {
+ } else if (pcmk__str_eq(cmd->action, PCMK_ACTION_STOP, pcmk__str_casei)) {
rc = execd_stonith_stop(stonith_api, rsc);
- } else if (pcmk__str_eq(cmd->action, "monitor", pcmk__str_casei)) {
+ } else if (pcmk__str_eq(cmd->action, PCMK_ACTION_MONITOR,
+ pcmk__str_casei)) {
do_monitor = TRUE;
} else {
@@ -1297,7 +1303,7 @@ execute_nonstonith_action(lrmd_rsc_t *rsc, lrmd_cmd_t *cmd)
#if SUPPORT_NAGIOS
/* Recurring operations are cancelled anyway for a stop operation */
if (pcmk__str_eq(rsc->class, PCMK_RESOURCE_CLASS_NAGIOS, pcmk__str_casei)
- && pcmk__str_eq(cmd->action, "stop", pcmk__str_casei)) {
+ && pcmk__str_eq(cmd->action, PCMK_ACTION_STOP, pcmk__str_casei)) {
cmd->result.exit_status = PCMK_OCF_OK;
cmd_finalize(cmd, rsc);
@@ -1474,6 +1480,7 @@ process_lrmd_signon(pcmk__client_t *client, xmlNode *request, int call_id,
int rc = pcmk_ok;
time_t now = time(NULL);
const char *protocol_version = crm_element_value(request, F_LRMD_PROTOCOL_VERSION);
+ const char *start_state = pcmk__env_option(PCMK__ENV_NODE_START_STATE);
if (compare_version(protocol_version, LRMD_MIN_PROTOCOL_VERSION) < 0) {
crm_err("Cluster API version must be greater than or equal to %s, not %s",
@@ -1503,6 +1510,10 @@ process_lrmd_signon(pcmk__client_t *client, xmlNode *request, int call_id,
crm_xml_add(*reply, F_LRMD_PROTOCOL_VERSION, LRMD_PROTOCOL_VERSION);
crm_xml_add_ll(*reply, PCMK__XA_UPTIME, now - start_time);
+ if (start_state) {
+ crm_xml_add(*reply, PCMK__XA_NODE_START_STATE, start_state);
+ }
+
return rc;
}
diff --git a/daemons/execd/pacemaker-execd.c b/daemons/execd/pacemaker-execd.c
index 83a8cd7..e7e30eb 100644
--- a/daemons/execd/pacemaker-execd.c
+++ b/daemons/execd/pacemaker-execd.c
@@ -493,26 +493,28 @@ main(int argc, char **argv, char **envp)
pcmk__cli_init_logging(EXECD_NAME, args->verbosity);
crm_log_init(NULL, LOG_INFO, TRUE, FALSE, argc, argv, FALSE);
+ // ocf_log() (in resource-agents) uses the capitalized env options below
option = pcmk__env_option(PCMK__ENV_LOGFACILITY);
if (!pcmk__str_eq(option, PCMK__VALUE_NONE,
pcmk__str_casei|pcmk__str_null_matches)
&& !pcmk__str_eq(option, "/dev/null", pcmk__str_none)) {
- setenv("HA_LOGFACILITY", option, 1); /* Used by the ocf_log/ha_log OCF macro */
+
+ pcmk__set_env_option("LOGFACILITY", option, true);
}
option = pcmk__env_option(PCMK__ENV_LOGFILE);
if (!pcmk__str_eq(option, PCMK__VALUE_NONE,
pcmk__str_casei|pcmk__str_null_matches)) {
- setenv("HA_LOGFILE", option, 1); /* Used by the ocf_log/ha_log OCF macro */
+ pcmk__set_env_option("LOGFILE", option, true);
if (pcmk__env_option_enabled(crm_system_name, PCMK__ENV_DEBUG)) {
- setenv("HA_DEBUGLOG", option, 1); /* Used by the ocf_log/ha_debug OCF macro */
+ pcmk__set_env_option("DEBUGLOG", option, true);
}
}
#ifdef PCMK__COMPILE_REMOTE
if (options.port != NULL) {
- setenv("PCMK_remote_port", options.port, 1);
+ pcmk__set_env_option(PCMK__ENV_REMOTE_PORT, options.port, false);
}
#endif // PCMK__COMPILE_REMOTE
diff --git a/daemons/execd/remoted_pidone.c b/daemons/execd/remoted_pidone.c
index 4f914eb..08271bf 100644
--- a/daemons/execd/remoted_pidone.c
+++ b/daemons/execd/remoted_pidone.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2017-2020 the Pacemaker project contributors
+ * Copyright 2017-2023 the Pacemaker project contributors
*
* The version control history for this file may have further details.
*
@@ -203,10 +203,14 @@ remoted_spawn_pidone(int argc, char **argv, char **envp)
* from /etc/pacemaker/pcmk-init.env, which could be useful for testing or
* containers with a custom PID 1 script that launches pacemaker-remoted.
*/
- const char *pid1 = (getpid() == 1)? "full" : getenv("PCMK_remote_pid1");
+ const char *pid1 = "default";
- if (pid1 == NULL) {
- return;
+ if (getpid() != 1) {
+ pid1 = pcmk__env_option(PCMK__ENV_REMOTE_PID1);
+ if (!pcmk__str_any_of(pid1, "full", "vars", NULL)) {
+ // Default, unset, or invalid
+ return;
+ }
}
/* When a container is launched, it may be given specific environment
@@ -217,7 +221,7 @@ remoted_spawn_pidone(int argc, char **argv, char **envp)
*/
load_env_vars("/etc/pacemaker/pcmk-init.env");
- if (strcmp(pid1, "full")) {
+ if (strcmp(pid1, "vars") == 0) {
return;
}
@@ -226,7 +230,7 @@ remoted_spawn_pidone(int argc, char **argv, char **envp)
* explicitly configured in the container's environment.
*/
if (pcmk__env_option(PCMK__ENV_LOGFILE) == NULL) {
- pcmk__set_env_option(PCMK__ENV_LOGFILE, "/var/log/pcmk-init.log");
+ pcmk__set_env_option(PCMK__ENV_LOGFILE, "/var/log/pcmk-init.log", true);
}
sigfillset(&set);
@@ -242,7 +246,7 @@ remoted_spawn_pidone(int argc, char **argv, char **envp)
// Child remains as pacemaker-remoted
return;
case -1:
- perror("fork");
+ crm_err("fork failed: %s", pcmk_rc_str(errno));
}
/* Parent becomes the reaper of zombie processes */
diff --git a/daemons/execd/remoted_tls.c b/daemons/execd/remoted_tls.c
index c65e3f3..23a2dcf 100644
--- a/daemons/execd/remoted_tls.c
+++ b/daemons/execd/remoted_tls.c
@@ -273,39 +273,44 @@ bind_and_listen(struct addrinfo *addr)
fd = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
if (fd < 0) {
- crm_perror(LOG_ERR, "Listener socket creation failed");
- return -1;
+ rc = errno;
+ crm_err("Listener socket creation failed: %", pcmk_rc_str(rc));
+ return -rc;
}
/* reuse address */
optval = 1;
rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
if (rc < 0) {
- crm_perror(LOG_ERR, "Local address reuse not allowed on %s", buffer);
+ rc = errno;
+ crm_err("Local address reuse not allowed on %s: %s", buffer, pcmk_rc_str(rc));
close(fd);
- return -1;
+ return -rc;
}
if (addr->ai_family == AF_INET6) {
optval = 0;
rc = setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &optval, sizeof(optval));
if (rc < 0) {
- crm_perror(LOG_INFO, "Couldn't disable IPV6-only on %s", buffer);
+ rc = errno;
+ crm_err("Couldn't disable IPV6-only on %s: %s", buffer, pcmk_rc_str(rc));
close(fd);
- return -1;
+ return -rc;
}
}
if (bind(fd, addr->ai_addr, addr->ai_addrlen) != 0) {
- crm_perror(LOG_ERR, "Cannot bind to %s", buffer);
+ rc = errno;
+ crm_err("Cannot bind to %s: %s", buffer, pcmk_rc_str(rc));
close(fd);
- return -1;
+ return -rc;
}
if (listen(fd, 10) == -1) {
- crm_perror(LOG_ERR, "Cannot listen on %s", buffer);
+ rc = errno;
+ crm_err("Cannot listen on %s: %s", buffer, pcmk_rc_str(rc));
close(fd);
- return -1;
+ return -rc;
}
return fd;
}
@@ -325,12 +330,15 @@ get_address_info(const char *bind_name, int port, struct addrinfo **res)
snprintf(port_str, sizeof(port_str), "%d", port);
rc = getaddrinfo(bind_name, port_str, &hints, res);
- if (rc) {
+ rc = pcmk__gaierror2rc(rc);
+
+ if (rc != pcmk_rc_ok) {
crm_err("Unable to get IP address(es) for %s: %s",
- (bind_name? bind_name : "local node"), gai_strerror(rc));
- return -EADDRNOTAVAIL;
+ (bind_name? bind_name : "local node"), pcmk_rc_str(rc));
+ return rc;
}
- return pcmk_ok;
+
+ return pcmk_rc_ok;
}
int
@@ -340,7 +348,7 @@ lrmd_init_remote_tls_server(void)
int port = crm_default_remote_port();
struct addrinfo *res = NULL, *iter;
gnutls_datum_t psk_key = { NULL, 0 };
- const char *bind_name = getenv("PCMK_remote_address");
+ const char *bind_name = pcmk__env_option(PCMK__ENV_REMOTE_ADDRESS);
static struct mainloop_fd_callbacks remote_listen_fd_callbacks = {
.dispatch = lrmd_remote_listen,
@@ -371,7 +379,7 @@ lrmd_init_remote_tls_server(void)
}
gnutls_free(psk_key.data);
- if (get_address_info(bind_name, port, &res) != pcmk_ok) {
+ if (get_address_info(bind_name, port, &res) != pcmk_rc_ok) {
return -1;
}
@@ -391,7 +399,7 @@ lrmd_init_remote_tls_server(void)
if (iter->ai_family == filter) {
ssock = bind_and_listen(iter);
}
- if (ssock != -1) {
+ if (ssock >= 0) {
break;
}