diff --git a/daemon/alix-usvd.c b/daemon/alix-usvd.c index 0fcd6d3..43160a6 100644 --- a/daemon/alix-usvd.c +++ b/daemon/alix-usvd.c @@ -44,7 +44,7 @@ #define DEFAULT_LOGFILE "alix-usvd.log" #define DEFAULT_PIDFILE "alix-usvd.pid" #define DEFAULT_SOCKET "alix-usvd.sock" -#define SENDMAIL "/usr/sbin/sendmail" +#define SENDMAIL "/usr/sbin/sendmail -t" enum { REG_STATUS = 0x00, @@ -163,31 +163,37 @@ static int check_thresholds(void) int changed = 0; if (device.uin_loss != config.uin_loss) { + log_print(LOG_INFO, "update UIN_LOSS: %d => %d", device.uin_loss, config.uin_loss); i2c_smbus_write_word_data(dev, REG_UIN_LOSS, config.uin_loss); changed = 1; } if (device.uin_restore != config.uin_restore) { + log_print(LOG_INFO, "update UIN_RESTORE: %d => %d", device.uin_restore, config.uin_restore); i2c_smbus_write_word_data(dev, REG_UIN_RESTORE, config.uin_restore); changed = 1; } if (device.ubat_full != config.ubat_full) { + log_print(LOG_INFO, "update UBAT_FULL: %d => %d", device.ubat_full, config.ubat_full); i2c_smbus_write_word_data(dev, REG_UBAT_FULL, config.ubat_full); changed = 1; } if (device.ubat_low != config.ubat_low) { + log_print(LOG_INFO, "update UBAT_LOW: %d => %d", device.ubat_low, config.ubat_low); i2c_smbus_write_word_data(dev, REG_UBAT_LOW, config.ubat_low); changed = 1; } if (device.ubat_critical != config.ubat_critical) { + log_print(LOG_INFO, "update UBAT_CRIT: %d => %d", device.ubat_critical, config.ubat_critical); i2c_smbus_write_word_data(dev, REG_UBAT_CRIT, config.ubat_critical); changed = 1; } if (device.ibat_full != config.ibat_full) { + log_print(LOG_INFO, "update IBAT_FULL: %d => %d", device.ibat_full, config.ibat_full); i2c_smbus_write_word_data(dev, REG_IBAT_FULL, config.ibat_full); changed = 1; } @@ -252,8 +258,8 @@ static void alix_state_change(int old_state, int new_state) static int mail_data; if (mail_data == 0) { - mail_from = config_get_string("global", "mail-from", NULL); - mail_to = config_get_string("global", "mail-to", NULL); + mail_from = config_get_string("alerts", "mail-from", NULL); + mail_to = config_get_string("alerts", "mail-to", NULL); mail_data = 1; } @@ -291,14 +297,14 @@ static int unix_read_cb(int fd, void *privdata) int new_state = str2state(buf); if (new_state != -1) { if (i2c_smbus_write_word_data(dev, REG_STATUS, new_state) == 0) { + alix_state_change(alix_state, new_state); alix_state = new_state; - log_print(LOG_INFO, "set state to %s", state2str(alix_state)); } int len = snprintf(buf, sizeof(buf), "%s", state2str(alix_state)); write(fd, buf, len); - } else if (strncmp(buf, "status", 6) == 0) { + } else if (strncasecmp(buf, "status", 6) == 0) { new_state = i2c_smbus_read_word_data(dev, REG_STATUS); int adc_ibat = i2c_smbus_read_word_data(dev, REG_CURRENT); int adc_ubat = i2c_smbus_read_word_data(dev, REG_UBAT); diff --git a/daemon/unixsocket.c b/daemon/unixsocket.c index f15ff81..a4ec84a 100644 --- a/daemon/unixsocket.c +++ b/daemon/unixsocket.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "logging.h" @@ -45,11 +46,13 @@ int unix_listen(const char *filename) strncpy(addr.sun_path, filename, sizeof(addr.sun_path)); int len = sizeof(addr.sun_family) + strlen(addr.sun_path); - if (unlink(addr.sun_path) == -1) { + if (unlink(addr.sun_path) == -1 && errno != ENOENT) { log_print(LOG_ERROR, "unix_listen: unlink()"); return -1; } + errno = 0; + mode_t old_umask = umask(0077); int ret = bind(sockfd, (struct sockaddr *) &addr, len); umask(old_umask);