|
Packit Service |
db8df9 |
/*
|
|
Packit Service |
db8df9 |
* Intel(R) Enclosure LED Utilities
|
|
Packit Service |
db8df9 |
*
|
|
Packit Service |
db8df9 |
* Copyright (C) 2017-2019 Intel Corporation.
|
|
Packit Service |
db8df9 |
* Copyright (C) 2009 Karel Zak <kzak@redhat.com>
|
|
Packit Service |
db8df9 |
*
|
|
Packit Service |
db8df9 |
* SPDX-License-Identifier: GPL-2.0
|
|
Packit Service |
db8df9 |
*
|
|
Packit Service |
db8df9 |
* Contains code from util-linux/libblkid/src/config.c
|
|
Packit Service |
db8df9 |
* originally released under LGPL.
|
|
Packit Service |
db8df9 |
*/
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
#include <stdio.h>
|
|
Packit Service |
db8df9 |
#include <string.h>
|
|
Packit Service |
db8df9 |
#include <stdlib.h>
|
|
Packit Service |
db8df9 |
#include <unistd.h>
|
|
Packit Service |
db8df9 |
#include <fcntl.h>
|
|
Packit Service |
db8df9 |
#include <ctype.h>
|
|
Packit Service |
db8df9 |
#include <sys/mman.h>
|
|
Packit Service |
db8df9 |
#include <sys/types.h>
|
|
Packit Service |
db8df9 |
#include <errno.h>
|
|
Packit Service |
db8df9 |
#include <stdint.h>
|
|
Packit Service |
db8df9 |
#include <stdarg.h>
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
#include "config_file.h"
|
|
Packit Service |
db8df9 |
#include "utils.h"
|
|
Packit Service |
db8df9 |
#include "status.h"
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
/**
|
|
Packit Service |
db8df9 |
* @brief Pointer to global ledmon configuration.
|
|
Packit Service |
db8df9 |
*
|
|
Packit Service |
db8df9 |
* This is a pointer to structure that contains settings of ledmon behavior
|
|
Packit Service |
db8df9 |
* read from configuration file.
|
|
Packit Service |
db8df9 |
*/
|
|
Packit Service |
db8df9 |
struct ledmon_conf conf;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
const char *log_level_map[] = {
|
|
Packit Service |
db8df9 |
[LOG_LEVEL_QUIET] = "QUIET",
|
|
Packit Service |
db8df9 |
[LOG_LEVEL_ERROR] = "ERROR",
|
|
Packit Service |
db8df9 |
[LOG_LEVEL_WARNING] = "WARNING",
|
|
Packit Service |
db8df9 |
[LOG_LEVEL_INFO] = "INFO",
|
|
Packit Service |
db8df9 |
[LOG_LEVEL_DEBUG] = "DEBUG",
|
|
Packit Service |
db8df9 |
[LOG_LEVEL_ALL] = "ALL"
|
|
Packit Service |
db8df9 |
};
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
static int parse_bool(char *s)
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
if (*s && (!strcasecmp(s, "enabled") ||
|
|
Packit Service |
db8df9 |
!strcasecmp(s, "true") ||
|
|
Packit Service |
db8df9 |
!strcasecmp(s, "yes") ||
|
|
Packit Service |
db8df9 |
!strcasecmp(s, "1")))
|
|
Packit Service |
db8df9 |
return 1;
|
|
Packit Service |
db8df9 |
else if (*s && (!strcasecmp(s, "disabled") ||
|
|
Packit Service |
db8df9 |
!strcasecmp(s, "false") ||
|
|
Packit Service |
db8df9 |
!strcasecmp(s, "no") ||
|
|
Packit Service |
db8df9 |
!strcasecmp(s, "0")))
|
|
Packit Service |
db8df9 |
return 0;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
fprintf(stderr, "Unknown bool value: %s\n", s);
|
|
Packit Service |
db8df9 |
return -1;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
static void parse_list(struct list *list, char *s)
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
list_erase(list);
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
while (s && *s) {
|
|
Packit Service |
db8df9 |
char *sep;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
sep = strchr(s, ',');
|
|
Packit Service |
db8df9 |
if (sep)
|
|
Packit Service |
db8df9 |
*sep = '\0';
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
list_append(list, str_dup(s));
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (sep)
|
|
Packit Service |
db8df9 |
s = sep + 1;
|
|
Packit Service |
db8df9 |
else
|
|
Packit Service |
db8df9 |
break;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
int _map_log_level(char *conf_log_level)
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
size_t i = 1;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
while (i < sizeof(log_level_map)/sizeof(char *)) {
|
|
Packit Service |
db8df9 |
if (strcasecmp(log_level_map[i], conf_log_level) == 0)
|
|
Packit Service |
db8df9 |
return i;
|
|
Packit Service |
db8df9 |
i++;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
return 0;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
void _set_log_level(char *s)
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
int log_level;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
log_level = _map_log_level(s);
|
|
Packit Service |
db8df9 |
if (log_level)
|
|
Packit Service |
db8df9 |
conf.log_level = log_level;
|
|
Packit Service |
db8df9 |
else if (sscanf(s, "%d", &log_level) == 1 &&
|
|
Packit Service |
db8df9 |
log_level >= LOG_LEVEL_QUIET &&
|
|
Packit Service |
db8df9 |
log_level <= LOG_LEVEL_ALL)
|
|
Packit Service |
db8df9 |
conf.log_level = log_level;
|
|
Packit Service |
db8df9 |
else
|
|
Packit Service |
db8df9 |
log_warning("Log level given in config file (%s) is incorrect! Using default log level: %s",
|
|
Packit Service |
db8df9 |
s, log_level_map[conf.log_level]);
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
static int parse_next(FILE *fd)
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
char buf[BUFSIZ];
|
|
Packit Service |
db8df9 |
char *s;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
/* read the next non-blank non-comment line */
|
|
Packit Service |
db8df9 |
do {
|
|
Packit Service |
db8df9 |
if (fgets(buf, sizeof(buf), fd) == NULL)
|
|
Packit Service |
db8df9 |
return feof(fd) ? 0 : -1;
|
|
Packit Service |
db8df9 |
s = strchr(buf, '\n');
|
|
Packit Service |
db8df9 |
if (!s) {
|
|
Packit Service |
db8df9 |
/* Missing final newline? Otherwise extremely */
|
|
Packit Service |
db8df9 |
/* long line - assume file was corrupted */
|
|
Packit Service |
db8df9 |
if (feof(fd))
|
|
Packit Service |
db8df9 |
s = strchr(buf, '\0');
|
|
Packit Service |
db8df9 |
else {
|
|
Packit Service |
db8df9 |
fprintf(stderr, "config file: missing newline at line '%s'.",
|
|
Packit Service |
db8df9 |
buf);
|
|
Packit Service |
db8df9 |
return -1;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
*s = '\0';
|
|
Packit Service |
db8df9 |
if (--s >= buf && *s == '\r')
|
|
Packit Service |
db8df9 |
*s = '\0';
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
s = buf;
|
|
Packit Service |
db8df9 |
while (*s == ' ' || *s == '\t') /* skip space */
|
|
Packit Service |
db8df9 |
s++;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
} while (*s == '\0' || *s == '#');
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (!strncmp(s, "INTERVAL=", 9)) {
|
|
Packit Service |
db8df9 |
s += 9;
|
|
Packit Service |
db8df9 |
if (*s) {
|
|
Packit Service |
db8df9 |
if (sscanf(s, "%d", &conf.scan_interval) != 1 ||
|
|
Packit Service |
db8df9 |
conf.scan_interval < LEDMON_MIN_SLEEP_INTERVAL)
|
|
Packit Service |
db8df9 |
conf.scan_interval = LEDMON_MIN_SLEEP_INTERVAL;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
} else if (!strncmp(s, "LOG_LEVEL=", 10)) {
|
|
Packit Service |
db8df9 |
s += 10;
|
|
Packit Service |
db8df9 |
_set_log_level(s);
|
|
Packit Service |
db8df9 |
} else if (!strncmp(s, "LOG_PATH=", 9)) {
|
|
Packit Service |
db8df9 |
s += 9;
|
|
Packit Service |
db8df9 |
if (*s)
|
|
Packit Service |
db8df9 |
set_log_path(s);
|
|
Packit Service |
db8df9 |
} else if (!strncmp(s, "BLINK_ON_MIGR=", 14)) {
|
|
Packit Service |
db8df9 |
s += 14;
|
|
Packit Service |
db8df9 |
conf.blink_on_migration = parse_bool(s);
|
|
Packit Service |
db8df9 |
if (conf.blink_on_migration < 0)
|
|
Packit Service |
db8df9 |
return -1;
|
|
Packit Service |
db8df9 |
} else if (!strncmp(s, "BLINK_ON_INIT=", 14)) {
|
|
Packit Service |
db8df9 |
s += 14;
|
|
Packit Service |
db8df9 |
conf.blink_on_init = parse_bool(s);
|
|
Packit Service |
db8df9 |
if (conf.blink_on_init < 0)
|
|
Packit Service |
db8df9 |
return -1;
|
|
Packit Service |
db8df9 |
} else if (!strncmp(s, "REBUILD_BLINK_ON_ALL=", 21)) {
|
|
Packit Service |
db8df9 |
s += 21;
|
|
Packit Service |
db8df9 |
conf.rebuild_blink_on_all = parse_bool(s);
|
|
Packit Service |
db8df9 |
if (conf.rebuild_blink_on_all < 0)
|
|
Packit Service |
db8df9 |
return -1;
|
|
Packit Service |
db8df9 |
} else if (!strncmp(s, "RAID_MEMBERS_ONLY=", 18)) {
|
|
Packit Service |
db8df9 |
s += 18;
|
|
Packit Service |
db8df9 |
conf.raid_members_only = parse_bool(s);
|
|
Packit Service |
db8df9 |
if (conf.raid_members_only < 0)
|
|
Packit Service |
db8df9 |
return -1;
|
|
Packit Service |
db8df9 |
} else if (!strncmp(s, "WHITELIST=", 10)) {
|
|
Packit Service |
db8df9 |
s += 10;
|
|
Packit Service |
db8df9 |
if (*s)
|
|
Packit Service |
db8df9 |
parse_list(&conf.cntrls_whitelist, s);
|
|
Packit Service |
db8df9 |
} else if (!strncmp(s, "BLACKLIST=", 10)) {
|
|
Packit Service |
db8df9 |
s += 10;
|
|
Packit Service |
db8df9 |
if (*s)
|
|
Packit Service |
db8df9 |
parse_list(&conf.cntrls_blacklist, s);
|
|
Packit Service |
db8df9 |
} else {
|
|
Packit Service |
db8df9 |
fprintf(stderr, "config file: unknown option '%s'.\n", s);
|
|
Packit Service |
db8df9 |
return -1;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
return 0;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
void ledmon_free_config(void)
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
list_erase(&conf.cntrls_blacklist);
|
|
Packit Service |
db8df9 |
list_erase(&conf.cntrls_whitelist);
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (conf.log_path)
|
|
Packit Service |
db8df9 |
free(conf.log_path);
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
/* return real config data or built-in default */
|
|
Packit Service |
db8df9 |
int ledmon_read_config(const char *filename)
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
FILE *f;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (!filename || (filename && access(filename, F_OK) < 0)) {
|
|
Packit Service |
db8df9 |
if (filename)
|
|
Packit Service |
db8df9 |
fprintf(stdout, "%s: does not exist, using global config file\n",
|
|
Packit Service |
db8df9 |
filename);
|
|
Packit Service |
db8df9 |
filename = LEDMON_DEF_CONF_FILE;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
f = fopen(filename, "re");
|
|
Packit Service |
db8df9 |
if (!f) {
|
|
Packit Service |
db8df9 |
fprintf(stdout, "%s: does not exist, using built-in defaults\n",
|
|
Packit Service |
db8df9 |
filename);
|
|
Packit Service |
db8df9 |
} else {
|
|
Packit Service |
db8df9 |
while (!feof(f)) {
|
|
Packit Service |
db8df9 |
if (parse_next(f)) {
|
|
Packit Service |
db8df9 |
fprintf(stderr, "%s: parse error\n", filename);
|
|
Packit Service |
db8df9 |
ledmon_free_config();
|
|
Packit Service |
db8df9 |
fclose(f);
|
|
Packit Service |
db8df9 |
return STATUS_CONFIG_FILE_ERROR;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
fclose(f);
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (!list_is_empty(&conf.cntrls_whitelist) &&
|
|
Packit Service |
db8df9 |
!list_is_empty(&conf.cntrls_blacklist))
|
|
Packit Service |
db8df9 |
fprintf(stdout, "Both whitelist and blacklist are specified - ignoring blacklist.");
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
return STATUS_SUCCESS;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
static char *conf_list_to_str(struct list *list)
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
char buf[BUFSIZ];
|
|
Packit Service |
db8df9 |
char *elem;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
memset(buf, 0, sizeof(buf));
|
|
Packit Service |
db8df9 |
list_for_each(list, elem) {
|
|
Packit Service |
db8df9 |
if (elem) {
|
|
Packit Service |
db8df9 |
int curr = strlen(buf);
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
snprintf(buf + curr, sizeof(buf) - curr, "%s,", elem);
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
return str_dup(buf);
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
int ledmon_write_shared_conf(void)
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
char buf[BUFSIZ];
|
|
Packit Service |
db8df9 |
char *whitelist = NULL;
|
|
Packit Service |
db8df9 |
char *blacklist = NULL;
|
|
Packit Service |
db8df9 |
void *shared_mem_ptr;
|
|
Packit Service |
db8df9 |
int fd = shm_open(LEDMON_SHARE_MEM_FILE, O_RDWR | O_CREAT, 0644);
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (fd == -1)
|
|
Packit Service |
db8df9 |
return STATUS_FILE_OPEN_ERROR;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (ftruncate(fd, sizeof(buf)) != 0) {
|
|
Packit Service |
db8df9 |
close(fd);
|
|
Packit Service |
db8df9 |
return STATUS_FILE_WRITE_ERROR;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
shared_mem_ptr = mmap(NULL, sizeof(buf), PROT_WRITE, MAP_SHARED, fd, 0);
|
|
Packit Service |
db8df9 |
if (shared_mem_ptr == MAP_FAILED) {
|
|
Packit Service |
db8df9 |
close(fd);
|
|
Packit Service |
db8df9 |
return STATUS_FILE_WRITE_ERROR;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
snprintf(buf, sizeof(buf),
|
|
Packit Service |
db8df9 |
"BLINK_ON_INIT=%d\n", conf.blink_on_init);
|
|
Packit Service |
db8df9 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
|
Packit Service |
db8df9 |
"BLINK_ON_MIGR=%d\n", conf.blink_on_migration);
|
|
Packit Service |
db8df9 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
|
Packit Service |
db8df9 |
"LOG_LEVEL=%u\n", conf.log_level);
|
|
Packit Service |
db8df9 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
|
Packit Service |
db8df9 |
"LOG_PATH=%s\n", conf.log_path);
|
|
Packit Service |
db8df9 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
|
Packit Service |
db8df9 |
"RAID_MEMBERS_ONLY=%d\n", conf.raid_members_only);
|
|
Packit Service |
db8df9 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
|
Packit Service |
db8df9 |
"REBUILD_BLINK_ON_ALL=%d\n", conf.rebuild_blink_on_all);
|
|
Packit Service |
db8df9 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
|
Packit Service |
db8df9 |
"INTERVAL=%d\n", conf.scan_interval);
|
|
Packit Service |
db8df9 |
whitelist = conf_list_to_str(&conf.cntrls_whitelist);
|
|
Packit Service |
db8df9 |
if (whitelist) {
|
|
Packit Service |
db8df9 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
|
Packit Service |
db8df9 |
"WHITELIST=%s\n", whitelist);
|
|
Packit Service |
db8df9 |
free(whitelist);
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
blacklist = conf_list_to_str(&conf.cntrls_blacklist);
|
|
Packit Service |
db8df9 |
if (blacklist) {
|
|
Packit Service |
db8df9 |
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
|
|
Packit Service |
db8df9 |
"BLACKLIST=%s\n", blacklist);
|
|
Packit Service |
db8df9 |
free(blacklist);
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
memcpy(shared_mem_ptr, buf, strlen(buf));
|
|
Packit Service |
db8df9 |
munmap(shared_mem_ptr, strlen(buf));
|
|
Packit Service |
db8df9 |
close(fd);
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
return STATUS_SUCCESS;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
int ledmon_remove_shared_conf(void)
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
return shm_unlink(LEDMON_SHARE_MEM_FILE);
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
#ifdef _TEST_CONFIG
|
|
Packit Service |
db8df9 |
/*
|
|
Packit Service |
db8df9 |
* usage: ledmon_conf_test [<filename>]
|
|
Packit Service |
db8df9 |
*/
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
int main(int argc, char *argv[])
|
|
Packit Service |
db8df9 |
{
|
|
Packit Service |
db8df9 |
char *filename = NULL;
|
|
Packit Service |
db8df9 |
char *s;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (argc == 2)
|
|
Packit Service |
db8df9 |
filename = argv[1];
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (ledmon_read_config(filename) != STATUS_SUCCESS)
|
|
Packit Service |
db8df9 |
return EXIT_FAILURE;
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
printf("INTERVAL: %d\n", conf.scan_interval);
|
|
Packit Service |
db8df9 |
printf("LOG_LEVEL: %d\n", conf.log_level);
|
|
Packit Service |
db8df9 |
printf("LOG_PATH: %s\n", conf.log_path);
|
|
Packit Service |
db8df9 |
printf("BLINK_ON_MIGR: %d\n", conf.blink_on_migration);
|
|
Packit Service |
db8df9 |
printf("BLINK_ON_INIT: %d\n", conf.blink_on_init);
|
|
Packit Service |
db8df9 |
printf("REBUILD_BLINK_ON_ALL: %d\n", conf.rebuild_blink_on_all);
|
|
Packit Service |
db8df9 |
printf("RAID_MEMBERS_ONLY: %d\n", conf.raid_members_only);
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (list_is_empty(&conf.cntrls_whitelist))
|
|
Packit Service |
db8df9 |
printf("WHITELIST: NONE\n");
|
|
Packit Service |
db8df9 |
else {
|
|
Packit Service |
db8df9 |
printf("WHITELIST: ");
|
|
Packit Service |
db8df9 |
list_for_each(&conf.cntrls_whitelist, s)
|
|
Packit Service |
db8df9 |
printf("%s, ", s);
|
|
Packit Service |
db8df9 |
printf("\n");
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
if (list_is_empty(&conf.cntrls_blacklist))
|
|
Packit Service |
db8df9 |
printf("BLACKLIST: NONE\n");
|
|
Packit Service |
db8df9 |
else {
|
|
Packit Service |
db8df9 |
printf("BLACKLIST: ");
|
|
Packit Service |
db8df9 |
list_for_each(&conf.cntrls_blacklist, s)
|
|
Packit Service |
db8df9 |
printf("%s, ", s);
|
|
Packit Service |
db8df9 |
printf("\n");
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
|
|
Packit Service |
db8df9 |
ledmon_free_config();
|
|
Packit Service |
db8df9 |
return EXIT_SUCCESS;
|
|
Packit Service |
db8df9 |
}
|
|
Packit Service |
db8df9 |
#endif
|