]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
logging: fix get_log_group()
authorTomas Krizek <tomas.krizek@nic.cz>
Thu, 8 Jul 2021 11:30:22 +0000 (13:30 +0200)
committerTomas Krizek <tomas.krizek@nic.cz>
Thu, 29 Jul 2021 09:42:33 +0000 (11:42 +0200)
To ensure all log groups have been properly defined, iterate over the
entire enum. If a value is missing, assert will be triggered.

Also fixes groups with number >=32 (32bit value was used to test
whether group is set before).

daemon/engine.c
lib/log.c
lib/log.h

index 95bdc69d009d48da29c8fcea20c69af4b0552474..8207474d6b1e8f157fb0450418310c6c8f06d4b5 100644 (file)
@@ -217,17 +217,17 @@ static int l_del_log_group(lua_State *L)
 
 static int l_get_log_group(lua_State *L)
 {
-       int grp = 1;
-       char *name = kr_log_grp2name(grp);
+       char* name;
 
        lua_newtable(L);
-       while (name) {
+       for (int grp = LOG_GRP_SYSTEM; grp <= LOG_GRP_DEVEL; grp++) {
+               name = kr_log_grp2name(grp);
+               if (kr_fails_assert(name))
+                       continue;
                if (kr_log_group_is_set(grp)) {
                        lua_pushboolean(L, true);
                        lua_setfield(L, -2, name);
                }
-               ++grp;
-               name = kr_log_grp2name(grp);
        }
 
        return 1;
index 5ccfc6616f42d85ada0d264a905d77feaf2749c5..7f556a05c0dd1607d8f92d7cb64524b83ffbfeca 100644 (file)
--- a/lib/log.c
+++ b/lib/log.c
@@ -81,7 +81,7 @@ syslog_code_t prioritynames[] = {
 };
 #endif
 
-int kr_log_group_is_set(log_groups_t group)
+log_groups_t kr_log_group_is_set(log_groups_t group)
 {
        return kr_log_groups & (1ULL << group);
 }
@@ -145,6 +145,9 @@ char *kr_log_level2name(log_level_t level)
 
 log_level_t kr_log_name2level(const char *name)
 {
+       if (kr_fails_assert(name))
+               return -1;
+
        for (int i = 0; prioritynames[i].c_name; ++i)
        {
                if (strcmp(prioritynames[i].c_name, name) == 0)
@@ -167,7 +170,7 @@ char *kr_log_grp2name(log_groups_t group)
 
 log_groups_t kr_log_name2grp(const char *name)
 {
-       if (!name)
+       if (kr_fails_assert(name))
                return 0;
 
        for (int i = 0; log_group_names[i].g_name; ++i)
index efd17bc8aecb6e23a6b51cbbd34463d141634553..e50b6d2cad8226130ad6953835254c4595df508e 100644 (file)
--- a/lib/log.h
+++ b/lib/log.h
@@ -30,7 +30,7 @@ typedef struct {
 /* Don't forget add *_TAG below, log_group_names[] item (log.c) and generate
  * new kres-gen.lua */
 enum kr_log_groups_type {
-       LOG_GRP_SYSTEM = 1,
+       LOG_GRP_SYSTEM = 1,  /* Must be first in enum. */
        LOG_GRP_CACHE,
        LOG_GRP_IO,
        LOG_GRP_NETWORK,
@@ -118,7 +118,7 @@ enum kr_log_groups_type {
 KR_EXPORT
 extern log_groups_t kr_log_groups;
 KR_EXPORT
-int kr_log_group_is_set(log_groups_t group);
+log_groups_t kr_log_group_is_set(log_groups_t group);
 KR_EXPORT
 void kr_log_add_group(log_groups_t group);
 KR_EXPORT