Hi,

attached are patches that in my opinion make libipa_hbac easier to use
by external projects like pam_hbac.

[PATCH 1/4] libipa_hbac: Do not use C99
- even though we use C99 in the deamon, pam_hbac needs to run on very
  exotic platforms. I don't think the code readability is decreased too
  much

[PATCH 2/4] libipa_hbac: Add more debug messages
- just adds debug messages

[PATCH 3/4] libipa_hbac: Fix typo in constant name
- fixes a typo that breaks compilation on non-GNU systems

[PATCH 4/4] libipa_hbac: Move the library to src/lib/ipa_hbac
- This might be a bit controversial, but in my opinion a library
  shouldn't be present in the provider subdirectory. Please also note
  I added "I$(top_srcdir)/src/util", this is just so that I can copy the
  libipa_hbac code without any changes to pam_hbac (even changes to
  header file locations..)
>From 3ae3c1fba3e14d3299b121c03c166489fba55741 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhro...@redhat.com>
Date: Mon, 22 Feb 2016 09:44:19 +0100
Subject: [PATCH 1/4] libipa_hbac: Do not use C99

libipa_hbac can be used by external consumers like pam_hbac who run on
old platforms that do not support C99. Refrain from using C99 features
in that codebase.
---
 src/providers/ipa/hbac_evaluator.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/providers/ipa/hbac_evaluator.c 
b/src/providers/ipa/hbac_evaluator.c
index 
f4b76d8e6ca3b63b092f65cdb4aac9e98e8c717e..36376abb4eb834681cf62030c2bc1ba11e1369ce
 100644
--- a/src/providers/ipa/hbac_evaluator.c
+++ b/src/providers/ipa/hbac_evaluator.c
@@ -146,6 +146,8 @@ enum hbac_eval_result hbac_evaluate(struct hbac_rule 
**rules,
                                     struct hbac_eval_req *hbac_req,
                                     struct hbac_info **info)
 {
+    uint32_t i;
+
     enum hbac_error_code ret;
     enum hbac_eval_result result = HBAC_EVAL_DENY;
     enum hbac_eval_result_int intermediate_result;
@@ -163,7 +165,7 @@ enum hbac_eval_result hbac_evaluate(struct hbac_rule 
**rules,
         (*info)->rule_name = NULL;
     }
 
-    for (uint32_t i = 0; rules[i]; i++) {
+    for (i = 0; rules[i]; i++) {
         hbac_rule_debug_print(rules[i]);
         intermediate_result = hbac_evaluate_rule(rules[i], hbac_req, &ret);
         if (intermediate_result == HBAC_EVAL_UNMATCHED) {
@@ -381,6 +383,8 @@ const char *hbac_error_string(enum hbac_error_code code)
 static void hbac_request_element_debug_print(struct hbac_request_element *el,
                                              const char *label)
 {
+    int i;
+
     if (el) {
         if (el->name) {
             HBAC_DEBUG(HBAC_DBG_TRACE, "\t\t%s [%s]\n", label, el->name);
@@ -389,7 +393,7 @@ static void hbac_request_element_debug_print(struct 
hbac_request_element *el,
         if (el->groups) {
             if (el->groups[0]) {
                 HBAC_DEBUG(HBAC_DBG_TRACE, "\t\t%s_group:\n", label);
-                for (int i = 0; el->groups[i]; i++) {
+                for (i = 0; el->groups[i]; i++) {
                     HBAC_DEBUG(HBAC_DBG_TRACE, "\t\t\t[%s]\n", el->groups[i]);
                 }
             } else {
@@ -434,6 +438,8 @@ static void hbac_req_debug_print(struct hbac_eval_req *req)
 static void hbac_rule_element_debug_print(struct hbac_rule_element *el,
                                           const char *label)
 {
+    int i;
+
     if (el) {
         HBAC_DEBUG(HBAC_DBG_TRACE, "\t\tcategory [%#x] [%s]\n", el->category,
                    (el->category == HBAC_CATEGORY_ALL) ? "ALL" : "NONE");
@@ -441,7 +447,7 @@ static void hbac_rule_element_debug_print(struct 
hbac_rule_element *el,
         if (el->names) {
             if (el->names[0]) {
                 HBAC_DEBUG(HBAC_DBG_TRACE, "\t\t%s_names:\n", label);
-                for (int i = 0; el->names[i]; i++) {
+                for (i = 0; el->names[i]; i++) {
                     HBAC_DEBUG(HBAC_DBG_TRACE, "\t\t\t[%s]\n", el->names[i]);
                 }
             } else {
@@ -452,7 +458,7 @@ static void hbac_rule_element_debug_print(struct 
hbac_rule_element *el,
         if (el->groups) {
             if (el->groups[0]) {
                 HBAC_DEBUG(HBAC_DBG_TRACE, "\t\t%s_groups:\n", label);
-                for (int i = 0; el->groups[i]; i++) {
+                for (i = 0; el->groups[i]; i++) {
                     HBAC_DEBUG(HBAC_DBG_TRACE, "\t\t\t[%s]\n", el->groups[i]);
                 }
             } else {
-- 
2.4.3

>From 58bf614791539f407495a4b09cb4cccc0bf1f51f Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhro...@redhat.com>
Date: Thu, 10 Mar 2016 07:38:06 +0100
Subject: [PATCH 2/4] libipa_hbac: Add more debug messages

Adding more debug messages proved to be useful during pam_hbac
development.
---
 src/providers/ipa/hbac_evaluator.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/providers/ipa/hbac_evaluator.c 
b/src/providers/ipa/hbac_evaluator.c
index 
36376abb4eb834681cf62030c2bc1ba11e1369ce..271b170faba36fc531c312c24061e7250d5ebe93
 100644
--- a/src/providers/ipa/hbac_evaluator.c
+++ b/src/providers/ipa/hbac_evaluator.c
@@ -189,8 +189,8 @@ enum hbac_eval_result hbac_evaluate(struct hbac_rule 
**rules,
         } else {
             /* An error occurred processing this rule */
             HBAC_DEBUG(HBAC_DBG_ERROR,
-                       "Error occurred during evaluating of rule [%s].\n",
-                       rules[i]->name);
+                       "Error %d occurred during evaluating of rule [%s].\n",
+                       ret, rules[i]->name);
             result = HBAC_EVAL_ERROR;
             if (info) {
                 (*info)->code = ret;
@@ -223,13 +223,19 @@ enum hbac_eval_result_int hbac_evaluate_rule(struct 
hbac_rule *rule,
     errno_t ret;
     bool matched;
 
-    if (!rule->enabled) return HBAC_EVAL_UNMATCHED;
+    if (!rule->enabled) {
+        HBAC_DEBUG(HBAC_DBG_INFO, "Rule [%s] is not enabled\n", rule->name);
+        return HBAC_EVAL_UNMATCHED;
+    }
 
     /* Make sure we have all elements */
     if (!rule->users
      || !rule->services
      || !rule->targethosts
      || !rule->srchosts) {
+        HBAC_DEBUG(HBAC_DBG_INFO,
+                   "Rule [%s] cannot be parsed, some elements are empty\n",
+                   rule->name);
         *error = HBAC_ERROR_UNPARSEABLE_RULE;
         return HBAC_EVAL_MATCH_ERROR;
     }
@@ -239,6 +245,8 @@ enum hbac_eval_result_int hbac_evaluate_rule(struct 
hbac_rule *rule,
                                 hbac_req->user,
                                 &matched);
     if (ret != EOK) {
+        HBAC_DEBUG(HBAC_DBG_ERROR,
+                   "Cannot parse user elements of rule [%s]\n", rule->name);
         *error = HBAC_ERROR_UNPARSEABLE_RULE;
         return HBAC_EVAL_MATCH_ERROR;
     } else if (!matched) {
@@ -250,6 +258,8 @@ enum hbac_eval_result_int hbac_evaluate_rule(struct 
hbac_rule *rule,
                                 hbac_req->service,
                                 &matched);
     if (ret != EOK) {
+        HBAC_DEBUG(HBAC_DBG_ERROR,
+                   "Cannot parse service elements of rule [%s]\n", rule->name);
         *error = HBAC_ERROR_UNPARSEABLE_RULE;
         return HBAC_EVAL_MATCH_ERROR;
     } else if (!matched) {
@@ -261,6 +271,9 @@ enum hbac_eval_result_int hbac_evaluate_rule(struct 
hbac_rule *rule,
                                 hbac_req->targethost,
                                 &matched);
     if (ret != EOK) {
+        HBAC_DEBUG(HBAC_DBG_ERROR,
+                   "Cannot parse targethost elements of rule [%s]\n",
+                   rule->name);
         *error = HBAC_ERROR_UNPARSEABLE_RULE;
         return HBAC_EVAL_MATCH_ERROR;
     } else if (!matched) {
@@ -272,6 +285,9 @@ enum hbac_eval_result_int hbac_evaluate_rule(struct 
hbac_rule *rule,
                                 hbac_req->srchost,
                                 &matched);
     if (ret != EOK) {
+        HBAC_DEBUG(HBAC_DBG_ERROR,
+                   "Cannot parse srchost elements of rule [%s]\n",
+                   rule->name);
         *error = HBAC_ERROR_UNPARSEABLE_RULE;
         return HBAC_EVAL_MATCH_ERROR;
     } else if (!matched) {
-- 
2.4.3

>From 36496d9b8b7850baab9d8c67f35e5d699379c0a6 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhro...@redhat.com>
Date: Thu, 10 Mar 2016 07:45:28 +0100
Subject: [PATCH 3/4] libipa_hbac: Fix typo in constant name

On platforms without the format attribute, libhbac could not be
compiled.
---
 src/providers/ipa/ipa_hbac.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/providers/ipa/ipa_hbac.h b/src/providers/ipa/ipa_hbac.h
index 
ee5f1919b0e216bd6dc09e26b1488fc4bf2d28ef..22dd8ffc401d2e6a2b6e4f83e99447b50192102b
 100644
--- a/src/providers/ipa/ipa_hbac.h
+++ b/src/providers/ipa/ipa_hbac.h
@@ -53,7 +53,7 @@ enum hbac_debug_level {
 #ifdef HAVE_FUNCTION_ATTRIBUTE_FORMAT
 #define HBAC_ATTRIBUTE_PRINTF(a1, a2) __attribute__((format(printf, a1, a2)))
 #else
-#define HABC_ATTRIBUTE_PRINTF(a1, a2)
+#define HBAC_ATTRIBUTE_PRINTF(a1, a2)
 #endif
 
 /**
-- 
2.4.3

>From 606e66fe7c18a9e78cd1709f6a95e3a53be24991 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhro...@redhat.com>
Date: Thu, 10 Mar 2016 08:19:58 +0100
Subject: [PATCH 4/4] libipa_hbac: Move the library to src/lib/ipa_hbac

Moving the library to the lib directory will force maintainers to think
twice about changes, because it would be obvious this is a library.

Also don't use includes from sssd source tree paths, but add the util
path to Makefile's CFLAGS so that other projects can copy the
hbac_evaluator.c file verbatim.
---
 Makefile.am                                          | 18 +++++++++++-------
 configure.ac                                         |  2 +-
 src/{providers/ipa => lib/ipa_hbac}/hbac_evaluator.c |  4 ++--
 src/{providers/ipa => lib/ipa_hbac}/ipa_hbac.doxy.in |  0
 src/{providers/ipa => lib/ipa_hbac}/ipa_hbac.exports |  0
 src/{providers/ipa => lib/ipa_hbac}/ipa_hbac.h       |  0
 src/{providers/ipa => lib/ipa_hbac}/ipa_hbac.pc.in   |  0
 src/providers/ipa/ipa_access.c                       |  1 -
 src/providers/ipa/ipa_hbac_common.c                  |  1 -
 src/providers/ipa/ipa_hbac_private.h                 |  2 +-
 src/python/pyhbac.c                                  |  2 +-
 src/tests/ipa_hbac-tests.c                           |  2 +-
 12 files changed, 17 insertions(+), 15 deletions(-)
 rename src/{providers/ipa => lib/ipa_hbac}/hbac_evaluator.c (99%)
 rename src/{providers/ipa => lib/ipa_hbac}/ipa_hbac.doxy.in (100%)
 rename src/{providers/ipa => lib/ipa_hbac}/ipa_hbac.exports (100%)
 rename src/{providers/ipa => lib/ipa_hbac}/ipa_hbac.h (100%)
 rename src/{providers/ipa => lib/ipa_hbac}/ipa_hbac.pc.in (100%)

diff --git a/Makefile.am b/Makefile.am
index 
d6eb0fc732a3b566dba91952bd6598a31f8d8d3e..8b554cf6a93d141b82aad85cf67d38b3bad2b016
 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -941,18 +941,22 @@ lib_LTLIBRARIES = libipa_hbac.la \
                   libsss_nss_idmap.la \
                   $(NULL)
 
-pkgconfig_DATA += src/providers/ipa/ipa_hbac.pc
-libipa_hbac_la_DEPENDENCIES = src/providers/ipa/ipa_hbac.exports
+pkgconfig_DATA += src/lib/ipa_hbac/ipa_hbac.pc
+libipa_hbac_la_DEPENDENCIES = src/lib/ipa_hbac/ipa_hbac.exports
 libipa_hbac_la_SOURCES = \
-    src/providers/ipa/hbac_evaluator.c \
+    src/lib/ipa_hbac/hbac_evaluator.c \
     src/util/sss_utf8.c
+libipa_hbac_la_CFLAGS = \
+    $(AM_CFLAGS) \
+    -I$(top_srcdir)/src/util \
+    $(NULL)
 libipa_hbac_la_LIBADD = \
     $(UNICODE_LIBS)
 libipa_hbac_la_LDFLAGS = \
-    -Wl,--version-script,$(srcdir)/src/providers/ipa/ipa_hbac.exports \
+    -Wl,--version-script,$(srcdir)/src/lib/ipa_hbac/ipa_hbac.exports \
     -version-info 1:0:1
 
-dist_noinst_DATA += src/providers/ipa/ipa_hbac.exports
+dist_noinst_DATA += src/lib/ipa_hbac/ipa_hbac.exports
 
 pkgconfig_DATA += src/lib/idmap/sss_idmap.pc
 libsss_idmap_la_DEPENDENCIES = src/lib/idmap/sss_idmap.exports
@@ -981,7 +985,7 @@ libsss_nss_idmap_la_LDFLAGS = \
 dist_noinst_DATA += src/sss_client/idmap/sss_nss_idmap.exports
 
 include_HEADERS = \
-    src/providers/ipa/ipa_hbac.h \
+    src/lib/ipa_hbac/ipa_hbac.h \
     src/lib/idmap/sss_idmap.h \
     src/sss_client/idmap/sss_nss_idmap.h \
     $(NULL)
@@ -3556,7 +3560,7 @@ endif
 if HAVE_DOXYGEN
 docs:
        $(DOXYGEN) src/doxy.config
-       $(DOXYGEN) src/providers/ipa/ipa_hbac.doxy
+       $(DOXYGEN) src/lib/ipa_hbac/ipa_hbac.doxy
        $(DOXYGEN) src/lib/idmap/sss_idmap.doxy
        $(DOXYGEN) src/sss_client/idmap/sss_nss_idmap.doxy
 if BUILD_IFP
diff --git a/configure.ac b/configure.ac
index 
9b674ba02b2348fe2e1d61ecfc3f5084098b0f23..2c36049ca04f57fe94f359c5dc19a506dd2b9388
 100644
--- a/configure.ac
+++ b/configure.ac
@@ -443,7 +443,7 @@ AC_CONFIG_FILES([Makefile contrib/sssd.spec 
src/examples/rwtab src/doxy.config
                  src/sysv/sssd src/sysv/gentoo/sssd src/sysv/SUSE/sssd
                  po/Makefile.in src/man/Makefile src/tests/cwrap/Makefile
                  src/tests/intg/Makefile
-                 src/providers/ipa/ipa_hbac.pc src/providers/ipa/ipa_hbac.doxy
+                 src/lib/ipa_hbac/ipa_hbac.pc src/lib/ipa_hbac/ipa_hbac.doxy
                  src/lib/idmap/sss_idmap.pc src/lib/idmap/sss_idmap.doxy
                  src/sss_client/idmap/sss_nss_idmap.pc
                  src/sss_client/idmap/sss_nss_idmap.doxy
diff --git a/src/providers/ipa/hbac_evaluator.c 
b/src/lib/ipa_hbac/hbac_evaluator.c
similarity index 99%
rename from src/providers/ipa/hbac_evaluator.c
rename to src/lib/ipa_hbac/hbac_evaluator.c
index 
271b170faba36fc531c312c24061e7250d5ebe93..a71c453e3f07e9da407bb35e5e324cb27ba85e27
 100644
--- a/src/providers/ipa/hbac_evaluator.c
+++ b/src/lib/ipa_hbac/hbac_evaluator.c
@@ -28,8 +28,8 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include "providers/ipa/ipa_hbac.h"
-#include "util/sss_utf8.h"
+#include "ipa_hbac.h"
+#include "sss_utf8.h"
 
 #ifndef HAVE_ERRNO_T
 #define HAVE_ERRNO_T
diff --git a/src/providers/ipa/ipa_hbac.doxy.in 
b/src/lib/ipa_hbac/ipa_hbac.doxy.in
similarity index 100%
rename from src/providers/ipa/ipa_hbac.doxy.in
rename to src/lib/ipa_hbac/ipa_hbac.doxy.in
diff --git a/src/providers/ipa/ipa_hbac.exports 
b/src/lib/ipa_hbac/ipa_hbac.exports
similarity index 100%
rename from src/providers/ipa/ipa_hbac.exports
rename to src/lib/ipa_hbac/ipa_hbac.exports
diff --git a/src/providers/ipa/ipa_hbac.h b/src/lib/ipa_hbac/ipa_hbac.h
similarity index 100%
rename from src/providers/ipa/ipa_hbac.h
rename to src/lib/ipa_hbac/ipa_hbac.h
diff --git a/src/providers/ipa/ipa_hbac.pc.in b/src/lib/ipa_hbac/ipa_hbac.pc.in
similarity index 100%
rename from src/providers/ipa/ipa_hbac.pc.in
rename to src/lib/ipa_hbac/ipa_hbac.pc.in
diff --git a/src/providers/ipa/ipa_access.c b/src/providers/ipa/ipa_access.c
index 
ad12f21fc36e52a2e8d7affcfc7128f018c50e4c..3ec5a8df8b2cdc027860ab808b26433142c13e24
 100644
--- a/src/providers/ipa/ipa_access.c
+++ b/src/providers/ipa/ipa_access.c
@@ -30,7 +30,6 @@
 #include "providers/ldap/sdap_access.h"
 #include "providers/ipa/ipa_common.h"
 #include "providers/ipa/ipa_access.h"
-#include "providers/ipa/ipa_hbac.h"
 #include "providers/ipa/ipa_hosts.h"
 #include "providers/ipa/ipa_hbac_private.h"
 #include "providers/ipa/ipa_hbac_rules.h"
diff --git a/src/providers/ipa/ipa_hbac_common.c 
b/src/providers/ipa/ipa_hbac_common.c
index 
72a620ef0971a8bc657bd7bda3f61b4abdd614ee..82c531f15338a2ff609bd58ad449783d7a3a6af1
 100644
--- a/src/providers/ipa/ipa_hbac_common.c
+++ b/src/providers/ipa/ipa_hbac_common.c
@@ -21,7 +21,6 @@
 */
 
 #include "providers/ipa/ipa_hbac_private.h"
-#include "providers/ipa/ipa_hbac.h"
 #include "providers/ipa/ipa_common.h"
 
 static errno_t
diff --git a/src/providers/ipa/ipa_hbac_private.h 
b/src/providers/ipa/ipa_hbac_private.h
index 
c831cd5c6dd2ed1ff2bc0d649a25ae1212548dda..8fc5dc6d03cc2373e32641a399157c900ec18107
 100644
--- a/src/providers/ipa/ipa_hbac_private.h
+++ b/src/providers/ipa/ipa_hbac_private.h
@@ -24,7 +24,7 @@
 #define IPA_HBAC_PRIVATE_H_
 
 #include "providers/ipa/ipa_access.h"
-#include "providers/ipa/ipa_hbac.h"
+#include "lib/ipa_hbac/ipa_hbac.h"
 
 #define IPA_HBAC_RULE "ipaHBACRule"
 
diff --git a/src/python/pyhbac.c b/src/python/pyhbac.c
index 
820ef11b57f1226725fd7acf97598a42e6bf0bc0..eb424c6ddb8f7b44437079f0f9c7d63a583b7198
 100644
--- a/src/python/pyhbac.c
+++ b/src/python/pyhbac.c
@@ -23,7 +23,7 @@
 
 #include "util/util.h"
 #include "util/sss_python.h"
-#include "providers/ipa/ipa_hbac.h"
+#include "lib/ipa_hbac/ipa_hbac.h"
 
 #define PYTHON_MODULE_NAME  "pyhbac"
 
diff --git a/src/tests/ipa_hbac-tests.c b/src/tests/ipa_hbac-tests.c
index 
f2192a6fbc5188a7a7f6b204e03ca5961bb53f75..c8ef7fe44d41770cfeca706e6d3396a8d0e7d6cf
 100644
--- a/src/tests/ipa_hbac-tests.c
+++ b/src/tests/ipa_hbac-tests.c
@@ -27,7 +27,7 @@
 #include <talloc.h>
 
 #include "tests/common_check.h"
-#include "providers/ipa/ipa_hbac.h"
+#include "lib/ipa_hbac/ipa_hbac.h"
 
 #define HBAC_TEST_USER "testuser"
 #define HBAC_TEST_INVALID_USER "nosuchuser"
-- 
2.4.3

_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/admin/lists/sssd-devel@lists.fedorahosted.org

Reply via email to