]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Use log priorities from syslog, allow debug without recompiling
authorpcarana <pc.moreno2099@gmail.com>
Mon, 14 Oct 2019 21:19:42 +0000 (16:19 -0500)
committerpcarana <pc.moreno2099@gmail.com>
Thu, 31 Oct 2019 19:18:29 +0000 (13:18 -0600)
14 files changed:
src/config.c
src/config.h
src/config/log_conf.c
src/config/log_conf.h
src/log.c
src/log.h
src/main.c
src/object/certificate.c
src/object/crl.c
src/object/name.c
src/object/name.h
src/rtr/pdu.c
src/rtr/pdu_sender.c
src/rtr/rtr.c

index 5ef71f81863daa94f70c34e528e2900af7538c27..67b42c837a7778c13d28bdb01acc44e61c655f9d 100644 (file)
@@ -6,6 +6,7 @@
 #include <errno.h>
 #include <getopt.h>
 #include <sys/socket.h>
+#include <syslog.h>
 
 #include "common.h"
 #include "configure_ac.h"
@@ -82,7 +83,7 @@ struct rpki_config {
                /** Format in which file names will be printed. */
                enum filename_format filename_format;
                /* Log level */
-               enum log_level level;
+               uint8_t level;
                /* Log output */
                enum log_output output;
        } log;
@@ -572,7 +573,7 @@ set_default_values(void)
 
        rpki_config.log.color = false;
        rpki_config.log.filename_format = FNF_GLOBAL;
-       rpki_config.log.level = LOG_LEVEL_WARNING;
+       rpki_config.log.level = LOG_WARNING;
        rpki_config.log.output = CONSOLE;
 
        rpki_config.output.roa = NULL;
@@ -712,6 +713,7 @@ handle_flags_config(int argc, char **argv)
 
        error = validate_config();
 
+       log_start();
 end:
        if (error)
                free_rpki_config();
@@ -827,7 +829,7 @@ config_get_filename_format(void)
        return rpki_config.log.filename_format;
 }
 
-enum log_level
+uint8_t
 config_get_log_level(void)
 {
        return rpki_config.log.level;
index a7e3ab642c2f4c1266cbd0a413d40106888569b7..036a8cebb49230630140d7bdf98443a663164054 100644 (file)
@@ -33,7 +33,7 @@ unsigned int config_get_max_cert_depth(void);
 enum mode config_get_mode(void);
 bool config_get_color_output(void);
 enum filename_format config_get_filename_format(void);
-enum log_level config_get_log_level(void);
+uint8_t config_get_log_level(void);
 enum log_output config_get_log_output(void);
 char *config_get_rsync_program(void);
 struct string_array const *config_get_rsync_args(bool);
index ac9d11f53d20c45461b9047b6126bb989e14d43e..5217b9144f677255e3c7e31f8f16e573a9270be0 100644 (file)
@@ -3,6 +3,7 @@
 #include <getopt.h>
 #include <stdlib.h>
 #include <string.h>
+#include <syslog.h>
 
 #include "log.h"
 #include "config/str.h"
 #define LOG_OUTPUT_VALUE_SYSLOG "syslog"
 #define LOG_OUTPUT_VALUE_CONSOLE "console"
 
-#define DEREFERENCE(type, void_value) (*((enum log_##type *) void_value))
+#define DEREFERENCE_UINT(void_value) (*((uint8_t *) void_value))
+#define DEREFERENCE_ENUM(void_value) (*((enum log_output *) void_value))
 
 static void
 print_log_level(struct option_field const *field, void *value)
 {
        char const *str = "<unknown>";
 
-       switch (DEREFERENCE(level, value)) {
-       case LOG_LEVEL_ERROR:
+       switch (DEREFERENCE_UINT(value)) {
+       case LOG_ERR:
                str = LOG_LEVEL_VALUE_ERROR;
                break;
-       case LOG_LEVEL_WARNING:
+       case LOG_WARNING:
                str = LOG_LEVEL_VALUE_WARNING;
                break;
-       case LOG_LEVEL_INFO:
+       case LOG_INFO:
                str = LOG_LEVEL_VALUE_INFO;
                break;
-       case LOG_LEVEL_DEBUG:
+       case LOG_DEBUG:
                str = LOG_LEVEL_VALUE_DEBUG;
                break;
        }
@@ -45,7 +47,7 @@ print_log_output(struct option_field const *field, void *value)
 {
        char const *str = "<unknown>";
 
-       switch (DEREFERENCE(output, value)) {
+       switch (DEREFERENCE_ENUM(value)) {
        case SYSLOG:
                str = LOG_OUTPUT_VALUE_SYSLOG;
                break;
@@ -62,13 +64,13 @@ parse_argv_log_level(struct option_field const *field, char const *str,
     void *result)
 {
        if (strcmp(str, LOG_LEVEL_VALUE_ERROR) == 0)
-               DEREFERENCE(level, result) = LOG_LEVEL_ERROR;
+               DEREFERENCE_UINT(result) = LOG_ERR;
        else if (strcmp(str, LOG_LEVEL_VALUE_WARNING) == 0)
-               DEREFERENCE(level, result) = LOG_LEVEL_WARNING;
+               DEREFERENCE_UINT(result) = LOG_WARNING;
        else if (strcmp(str, LOG_LEVEL_VALUE_INFO) == 0)
-               DEREFERENCE(level, result) = LOG_LEVEL_INFO;
+               DEREFERENCE_UINT(result) = LOG_INFO;
        else if (strcmp(str, LOG_LEVEL_VALUE_DEBUG) == 0)
-               DEREFERENCE(level, result) = LOG_LEVEL_DEBUG;
+               DEREFERENCE_UINT(result) = LOG_DEBUG;
        else
                return pr_err("Unknown log level: '%s'", str);
 
@@ -80,9 +82,9 @@ parse_argv_log_output(struct option_field const *field, char const *str,
     void *result)
 {
        if (strcmp(str, LOG_OUTPUT_VALUE_SYSLOG) == 0)
-               DEREFERENCE(output, result) = SYSLOG;
+               DEREFERENCE_ENUM(result) = SYSLOG;
        else if (strcmp(str, LOG_OUTPUT_VALUE_CONSOLE) == 0)
-               DEREFERENCE(output, result) = CONSOLE;
+               DEREFERENCE_ENUM(result) = CONSOLE;
        else
                return pr_err("Unknown log output: '%s'", str);
 
@@ -113,7 +115,7 @@ parse_json_log_output(struct option_field const *opt, json_t *json,
 
 const struct global_type gt_log_level = {
        .has_arg = required_argument,
-       .size = sizeof(enum log_level),
+       .size = sizeof(uint8_t),
        .print = print_log_level,
        .parse.argv = parse_argv_log_level,
        .parse.json = parse_json_log_level,
index e2222dbfcb36e4ea459f78ccda6d57a8e1c3cf4b..98d405579af754e82dc3a3c7ff357902e2a41fdd 100644 (file)
@@ -3,13 +3,6 @@
 
 #include "config/types.h"
 
-enum log_level {
-       LOG_LEVEL_ERROR,
-       LOG_LEVEL_WARNING,
-       LOG_LEVEL_INFO,
-       LOG_LEVEL_DEBUG
-};
-
 enum log_output {
        SYSLOG,
        CONSOLE
index 89dbf341d59abcf9452530e6fdeec7755d0fec86..ad87d2dec0886b782d4b5d23a250ccf92bc460c5 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -42,13 +42,13 @@ log_setup(void)
        syslog_enabled = true;
 }
 
-void
+static void
 log_disable_std(void)
 {
        fprintf_enabled = false;
 }
 
-void
+static void
 log_disable_syslog(void)
 {
        if (syslog_enabled) {
@@ -57,6 +57,23 @@ log_disable_syslog(void)
        }
 }
 
+void
+log_start(void)
+{
+       switch (config_get_log_output()) {
+       case SYSLOG:
+               pr_info("Syslog log output configured; disabling logging on standard streams.");
+               pr_info("(Logs will be sent to syslog only.)");
+               log_disable_std();
+               break;
+       case CONSOLE:
+               pr_info("Console log output configured; disabling logging on syslog.");
+               pr_info("(Logs will be sent to the standard streams only.)");
+               log_disable_syslog();
+               break;
+       }
+}
+
 void
 log_teardown(void)
 {
@@ -152,6 +169,9 @@ pr_stream(int level, const char *format, va_list args)
        do {                                                            \
                va_list args;                                           \
                                                                        \
+               if (level > config_get_log_level())                     \
+                       break;                                          \
+                                                                       \
                if (syslog_enabled) {                                   \
                        va_start(args, format);                         \
                        pr_syslog(level, format, args);                 \
@@ -165,7 +185,11 @@ pr_stream(int level, const char *format, va_list args)
                }                                                       \
        } while (0)
 
-#ifdef DEBUG
+bool
+log_debug_enabled(void)
+{
+       return config_get_log_level() == LOG_DEBUG;
+}
 
 void
 pr_debug(const char *format, ...)
@@ -173,8 +197,6 @@ pr_debug(const char *format, ...)
        PR_SIMPLE(LOG_DEBUG);
 }
 
-#endif
-
 void
 pr_info(const char *format, ...)
 {
index 06e0a2e8d2381d58c0ef732c57fe9fd05a0c6a40..e490e0873316fb67127936d4ceba2e845c9fa4be 100644 (file)
--- a/src/log.h
+++ b/src/log.h
@@ -2,6 +2,7 @@
 #define SRC_LOG_H_
 
 #include <sys/cdefs.h>
+#include <stdbool.h>
 #include "incidence/incidence.h"
 
 /*
@@ -39,8 +40,7 @@
 
 /* Only call this group of functions when you know there's only one thread. */
 void log_setup(void);
-void log_disable_std(void);
-void log_disable_syslog(void);
+void log_start(void);
 void log_teardown(void);
 
 
@@ -49,12 +49,11 @@ void log_teardown(void);
  * error stack) cannot exceed 512 bytes at present.
  */
 
-#ifdef DEBUG
-void pr_debug(const char *, ...) CHECK_FORMAT(1, 2);
-#else
-#define pr_debug(...) do {} while (0)
-#endif
+/* Check if debug is enabled, useful to avoid boilerplate code */
+bool log_debug_enabled(void);
 
+/* Debug messages, useful for devs or to track a specific problem */
+void pr_debug(const char *, ...) CHECK_FORMAT(1, 2);
 /* Non-errors deemed useful to the user. */
 void pr_info(const char *, ...) CHECK_FORMAT(1, 2);
 /* Issues that did not trigger RPKI object rejection. */
index 6b05427fcd108f1678c80024ab543a6f46a53606..e5662920ef86685c83878f267535c8ba031a3e64 100644 (file)
@@ -41,19 +41,6 @@ __main(int argc, char **argv)
        if (error)
                return error;
 
-       switch (config_get_mode()) {
-       case SERVER:
-               pr_info("Server mode configured; disabling logging on standard streams.");
-               pr_info("(Logs will be sent to syslog only.)");
-               log_disable_std();
-               break;
-       case STANDALONE:
-               pr_info("Standalone mode configured; disabling logging on syslog.");
-               pr_info("(Logs will be sent to the standard streams only.)");
-               log_disable_syslog();
-               break;
-       }
-
        error = nid_init();
        if (error)
                goto revert_config;
index f52d1f4a45f6411a7cecc1707458a4b9b293c080..02eb92b582d8de91a12ab311d97c841b9714beb4 100644 (file)
@@ -48,7 +48,6 @@ struct bgpsec_ski {
 static void
 debug_serial_number(BIGNUM *number)
 {
-#ifdef DEBUG
        char *number_str;
 
        number_str = BN_bn2dec(number);
@@ -59,7 +58,6 @@ debug_serial_number(BIGNUM *number)
 
        pr_debug("serial Number: %s", number_str);
        free(number_str);
-#endif
 }
 
 static int
@@ -77,7 +75,8 @@ validate_serial_number(X509 *cert)
        if (number == NULL)
                return crypto_err("Could not parse certificate serial number");
 
-       debug_serial_number(number);
+       if (log_debug_enabled())
+               debug_serial_number(number);
 
        error = x509stack_store_serial(validation_certstack(state), number);
        if (error)
@@ -1617,14 +1616,14 @@ certificate_traverse(struct rpp *rpp_parent, struct rpki_uri *cert_uri)
        if (total_parents >= config_get_max_cert_depth())
                return pr_err("Certificate chain maximum depth exceeded.");
 
-#ifdef DEBUG
+       /* Debug cert type */
        if (IS_TA)
                pr_debug("TA Certificate '%s' {",
                    uri_get_printable(cert_uri));
        else
                pr_debug("Certificate '%s' {",
                    uri_get_printable(cert_uri));
-#endif
+
        fnstack_push_uri(cert_uri);
        memset(&refs, 0, sizeof(refs));
 
@@ -1641,7 +1640,8 @@ certificate_traverse(struct rpp *rpp_parent, struct rpki_uri *cert_uri)
                goto revert_cert;
 
        type = get_certificate_type(cert, IS_TA);
-#ifdef DEBUG
+
+       /* Debug cert type */
        switch(type) {
        case TA:
                break;
@@ -1655,7 +1655,7 @@ certificate_traverse(struct rpp *rpp_parent, struct rpki_uri *cert_uri)
                pr_debug("Type: unexpected, validated as CA");
                break;
        }
-#endif
+
        error = certificate_validate_rfc6487(cert, type);
        if (error)
                goto revert_cert;
index d2a94832d506c49fc36549ef623f382450ab00c1..53144960864fd63012120ce5ca4e5bc3c5c920ce 100644 (file)
@@ -41,7 +41,6 @@ end:
 static void
 debug_revoked(ASN1_INTEGER const *serial_int)
 {
-#ifdef DEBUG
        BIGNUM *serial_bn;
        char *serial_str;
 
@@ -61,7 +60,6 @@ debug_revoked(ASN1_INTEGER const *serial_int)
 
        free(serial_str);
 end:   BN_free(serial_bn);
-#endif
 }
 
 static int
@@ -85,7 +83,8 @@ validate_revoked(X509_CRL *crl)
                            i + 1);
                }
 
-               debug_revoked(serial_int);
+               if (log_debug_enabled())
+                       debug_revoked(serial_int);
 
                if (X509_REVOKED_get0_revocationDate(revoked) == NULL) {
                        return pr_err("CRL's revoked entry #%d lacks a revocation date.",
index a5dc7f0205b39c48eee510d7a768d1ed8c2d6e41..dc981b78339aab97045986de74cf9292387c1f1d 100644 (file)
@@ -198,11 +198,12 @@ end:      x509_name_put(parent_subject);
        return error;
 }
 
-#ifdef DEBUG
-
 void
 x509_name_pr_debug(const char *prefix, X509_NAME *name)
 {
+       if (!log_debug_enabled())
+               return;
+
        struct rfc5280_name *printable;
 
        if (name == NULL) {
@@ -216,5 +217,3 @@ x509_name_pr_debug(const char *prefix, X509_NAME *name)
        pr_debug("%s: %s", prefix, printable->commonName);
        x509_name_put(printable);
 }
-
-#endif
index a1a070d59cf07e6aaf0f640900176cb8d99eaef2..eaa4ec44aa9c4d9acaabd5ca6273487b60e32620 100644 (file)
@@ -22,10 +22,6 @@ bool x509_name_equals(struct rfc5280_name *, struct rfc5280_name *);
 /* X509_NAME utils */
 int validate_issuer_name(char const *, X509_NAME *);
 
-#ifdef DEBUG
 void x509_name_pr_debug(char const *, X509_NAME *);
-#else
-#define x509_name_pr_debug(a, b) /* Nothing */
-#endif
 
 #endif /* SRC_OBJECT_NAME_H_ */
index d69db34fe0355b5029790ae9def8fefefa1b163a..ada4723fa9c8de80f70eb992b9060e0bfb82d84c 100644 (file)
@@ -125,14 +125,13 @@ pdu_load(int fd, struct sockaddr_storage *client_addr,
                /* No error response because the PDU might have been an error */
                return error;
 
-#ifdef DEBUG
-       {
+
+       if (log_debug_enabled()) {
                char buffer[INET6_ADDRSTRLEN];
                pr_debug("Received a %s PDU from %s.",
                    pdutype2str(header.pdu_type),
                    sockaddr2str(client_addr, buffer));
        }
-#endif
 
        error = validate_rtr_version(fd, &header, hdr_bytes);
        if (error)
index 9fca99da00f6b2bd6faf73cd7e220b6405d6f440..a0cfe9bef371a88e4d351cb0f870cd09d0eecab0 100644 (file)
@@ -101,7 +101,6 @@ send_cache_response_pdu(int fd, uint8_t version)
 static void
 pr_debug_prefix4(struct ipv4_prefix_pdu *pdu)
 {
-#ifdef DEBUG
        char buffer[INET_ADDRSTRLEN];
        char const *addr_str;
 
@@ -110,7 +109,6 @@ pr_debug_prefix4(struct ipv4_prefix_pdu *pdu)
 
        pr_debug("Encoded prefix %s/%u into a PDU.", addr_str,
            pdu->prefix_length);
-#endif
 }
 
 static int
@@ -134,7 +132,8 @@ send_ipv4_prefix_pdu(int fd, uint8_t version, struct vrp const *vrp,
        len = serialize_ipv4_prefix_pdu(&pdu, data);
        if (len != RTRPDU_IPV4_PREFIX_LEN)
                pr_crit("Serialized IPv4 Prefix is %zu bytes.", len);
-       pr_debug_prefix4(&pdu);
+       if (log_debug_enabled())
+               pr_debug_prefix4(&pdu);
 
        return send_response(fd, pdu.header.pdu_type, data, len);
 }
@@ -142,7 +141,6 @@ send_ipv4_prefix_pdu(int fd, uint8_t version, struct vrp const *vrp,
 static void
 pr_debug_prefix6(struct ipv6_prefix_pdu *pdu)
 {
-#ifdef DEBUG
        char buffer[INET6_ADDRSTRLEN];
        char const *addr_str;
 
@@ -151,7 +149,6 @@ pr_debug_prefix6(struct ipv6_prefix_pdu *pdu)
 
        pr_debug("Encoded prefix %s/%u into a PDU.", addr_str,
            pdu->prefix_length);
-#endif
 }
 
 static int
@@ -175,7 +172,8 @@ send_ipv6_prefix_pdu(int fd, uint8_t version, struct vrp const *vrp,
        len = serialize_ipv6_prefix_pdu(&pdu, data);
        if (len != RTRPDU_IPV6_PREFIX_LEN)
                pr_crit("Serialized IPv6 Prefix is %zu bytes.", len);
-       pr_debug_prefix6(&pdu);
+       if (log_debug_enabled())
+               pr_debug_prefix6(&pdu);
 
        return send_response(fd, pdu.header.pdu_type, data, len);
 }
index 7b285bb52c70d3800b722bc9b88b8d43593c7507..f505009f19ab41af8de773c0f2a38494517d3d20 100644 (file)
@@ -288,13 +288,11 @@ handle_client_connections(int server_fd)
                        return -EINVAL;
                }
 
-#ifdef DEBUG
-               {
+               if (log_debug_enabled()) {
                        char buffer[INET6_ADDRSTRLEN];
                        pr_debug("Client accepted: %s",
                            sockaddr2str(&client_addr, buffer));
                }
-#endif
 
                /*
                 * Note: My gut says that errors from now on (even the unknown