Clean up a few issues with logging in sm-notify.c.
Sometimes in sm-notify, when a system call fails the problem is reported
to stderr but not logged, and then usually sm-notify exits. In cases like
this, there are probably more hosts to notify, but sm-notify dies silently.
Make sure these errors are logged, and that the log messages explain the
nature of the problem.
Also, if sm-notify exits prematurely, make sure this is always reported at
the LOG_ERR level, not at the LOG_WARNING level.
Remove a couple of unnecessary '\n' in the arguments of nsm_log() calls --
nsm_log() already appends an '\n' to the message.
Finally, use exit() consistently in main().
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
_SM_STATE_PATH == NULL ||
_SM_DIR_PATH == NULL ||
_SM_BAK_PATH == NULL) {
_SM_STATE_PATH == NULL ||
_SM_DIR_PATH == NULL ||
_SM_BAK_PATH == NULL) {
- nsm_log(LOG_WARNING, "unable to allocate memory");
+ nsm_log(LOG_ERR, "unable to allocate memory");
exit(1);
}
strcat(strcpy(_SM_STATE_PATH, _SM_BASE_PATH), "/state");
exit(1);
}
strcat(strcpy(_SM_STATE_PATH, _SM_BASE_PATH), "/state");
usage: fprintf(stderr,
"Usage: sm-notify [-dfq] [-m max-retry-minutes] [-p srcport]\n"
" [-P /path/to/state/directory] [-v my_host_name]\n");
usage: fprintf(stderr,
"Usage: sm-notify [-dfq] [-m max-retry-minutes] [-p srcport]\n"
" [-P /path/to/state/directory] [-v my_host_name]\n");
}
if (strcmp(_SM_BASE_PATH, BASEDIR) == 0) {
}
if (strcmp(_SM_BASE_PATH, BASEDIR) == 0) {
strncpy(nsm_hostname, opt_srcaddr, sizeof(nsm_hostname)-1);
} else
if (gethostname(nsm_hostname, sizeof(nsm_hostname)) < 0) {
strncpy(nsm_hostname, opt_srcaddr, sizeof(nsm_hostname)-1);
} else
if (gethostname(nsm_hostname, sizeof(nsm_hostname)) < 0) {
- perror("gethostname");
- return 1;
+ nsm_log(LOG_ERR, "Failed to obtain name of local host: %s",
+ strerror(errno));
+ exit(1);
}
backup_hosts(_SM_DIR_PATH, _SM_BAK_PATH);
}
backup_hosts(_SM_DIR_PATH, _SM_BAK_PATH);
log_syslog = 1;
if (daemon(0, 0) < 0) {
log_syslog = 1;
if (daemon(0, 0) < 0) {
- nsm_log(LOG_WARNING, "unable to background: %s",
+ nsm_log(LOG_ERR, "unable to background: %s",
"Unable to notify %s, giving up",
hp->name);
}
"Unable to notify %s, giving up",
hp->name);
}
retry:
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0) {
retry:
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0) {
+ nsm_log(LOG_ERR, "Failed to create RPC socket: %s",
+ strerror(errno));
exit(1);
}
fcntl(sock, F_SETFL, O_NONBLOCK);
exit(1);
}
fcntl(sock, F_SETFL, O_NONBLOCK);
if (opt_srcaddr) {
struct addrinfo *ai = host_lookup(AF_INET, opt_srcaddr);
if (!ai) {
if (opt_srcaddr) {
struct addrinfo *ai = host_lookup(AF_INET, opt_srcaddr);
if (!ai) {
- nsm_log(LOG_WARNING,
- "Not a valid hostname or address: \"%s\"\n",
+ nsm_log(LOG_ERR,
+ "Not a valid hostname or address: \"%s\"",
if (opt_srcport) {
addr_set_port(&local_addr, opt_srcport);
if (bind(sock, (struct sockaddr *) &local_addr, sizeof(local_addr)) < 0) {
if (opt_srcport) {
addr_set_port(&local_addr, opt_srcport);
if (bind(sock, (struct sockaddr *) &local_addr, sizeof(local_addr)) < 0) {
+ nsm_log(LOG_ERR, "Failed to bind RPC socket: %s",
+ strerror(errno));
* packet)
*/
if (p <= end) {
* packet)
*/
if (p <= end) {
- nsm_log(LOG_DEBUG, "Host %s notified successfully", hp->name);
+ nsm_log(LOG_DEBUG, "Host %s notified successfully",
+ hp->name);
unlink(hp->path);
free(hp->name);
free(hp->path);
unlink(hp->path);
free(hp->name);
free(hp->path);
DIR *dir;
if (!(dir = opendir(dirname))) {
DIR *dir;
if (!(dir = opendir(dirname))) {
+ nsm_log(LOG_WARNING,
+ "Failed to open %s: %s", dirname, strerror(errno));
DIR *dir;
if (!(dir = opendir(dirname))) {
DIR *dir;
if (!(dir = opendir(dirname))) {
+ nsm_log(LOG_WARNING,
+ "Failed to open %s: %s", dirname, strerror(errno));
continue;
if (host == NULL)
host = calloc(1, sizeof(*host));
continue;
if (host == NULL)
host = calloc(1, sizeof(*host));
+ if (host == NULL) {
+ nsm_log(LOG_WARNING, "Unable to allocate memory");
+ return;
+ }
snprintf(path, sizeof(path), "%s/%s", dirname, de->d_name);
if (stat(path, &stb) < 0)
snprintf(path, sizeof(path), "%s/%s", dirname, de->d_name);
if (stat(path, &stb) < 0)
snprintf(newfile, sizeof(newfile),
"%s.new", _SM_STATE_PATH);
if ((fd = open(newfile, O_CREAT|O_WRONLY, 0644)) < 0) {
snprintf(newfile, sizeof(newfile),
"%s.new", _SM_STATE_PATH);
if ((fd = open(newfile, O_CREAT|O_WRONLY, 0644)) < 0) {
- nsm_log(LOG_WARNING, "Cannot create %s: %m", newfile);
+ nsm_log(LOG_ERR, "Cannot create %s: %m", newfile);
exit(1);
}
if (write(fd, &state, sizeof(state)) != sizeof(state)) {
exit(1);
}
if (write(fd, &state, sizeof(state)) != sizeof(state)) {
"Failed to write state to %s", newfile);
exit(1);
}
close(fd);
if (rename(newfile, _SM_STATE_PATH) < 0) {
"Failed to write state to %s", newfile);
exit(1);
}
close(fd);
if (rename(newfile, _SM_STATE_PATH) < 0) {
"Cannot create %s: %m", _SM_STATE_PATH);
exit(1);
}
"Cannot create %s: %m", _SM_STATE_PATH);
exit(1);
}
if (st.st_uid == 0) {
nsm_log(LOG_WARNING,
if (st.st_uid == 0) {
nsm_log(LOG_WARNING,
- "sm-notify running as root. chown %s to choose different user\n",
+ "sm-notify running as root. chown %s to choose different user",