Hello,

attached patch hides all symbols except dynamic_driver_{init,destroy}. Feedback
is appreciated.

Regards, Adam

-- 
Adam Tkac, Red Hat, Inc.
>From 126929489baf4f69fe0444860776f7e76c1411f2 Mon Sep 17 00:00:00 2001
From: Adam Tkac <von...@gmail.com>
Date: Wed, 17 Oct 2012 13:00:31 +0200
Subject: [PATCH] Hide all symbols except dynamic_driver_{init,destroy}

Signed-off-by: Adam Tkac <von...@gmail.com>
---
 configure.ac      | 15 +++++++++++++++
 src/ldap_driver.c | 10 ++++++++--
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index cff5526..30a7374 100644
--- a/configure.ac
+++ b/configure.ac
@@ -30,6 +30,21 @@ AC_TYPE_SIZE_T
 # Checks for library functions.
 AC_CHECK_FUNCS([memset strcasecmp strncasecmp])
 
+# Check if build chain supports symbol visibility
+AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
+SAVED_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -fvisibility=hidden"
+AC_TRY_COMPILE([
+       extern __attribute__((__visibility__("hidden"))) int hidden;
+       extern __attribute__((__visibility__("default"))) int def;
+       extern __attribute__((__visibility__("hidden"))) int fhidden(void);
+       extern __attribute__((__visibility__("default"))) int fdef(void);
+],[],
+[AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_VISIBILITY], 1, [Define if compiler supports -fvisibility])],
+[CFLAGS="$SAVED_CFLAGS"
+ AC_MSG_RESULT([no])])
+
 # Check version of libdns
 AC_MSG_CHECKING([libdns version])
 AC_TRY_RUN([
diff --git a/src/ldap_driver.c b/src/ldap_driver.c
index 3a80223..99a8421 100644
--- a/src/ldap_driver.c
+++ b/src/ldap_driver.c
@@ -52,6 +52,12 @@
 #include "util.h"
 #include "zone_manager.h"
 
+#ifdef HAVE_VISIBILITY
+#define VISIBLE __attribute__((__visibility__("default")))
+#else
+#define VISIBLE
+#endif
+
 #define LDAPDB_MAGIC                   ISC_MAGIC('L', 'D', 'P', 'D')
 #define VALID_LDAPDB(ldapdb) \
        ((ldapdb) != NULL && (ldapdb)->common.impmagic == LDAPDB_MAGIC)
@@ -1315,7 +1321,7 @@ static dns_dbimplementation_t *ldapdb_imp;
 const char *ldapdb_impname = "dynamic-ldap";
 
 
-isc_result_t
+VISIBLE isc_result_t
 dynamic_driver_init(isc_mem_t *mctx, const char *name, const char * const 
*argv,
                    dns_dyndb_arguments_t *dyndb_args)
 {
@@ -1360,7 +1366,7 @@ dynamic_driver_init(isc_mem_t *mctx, const char *name, 
const char * const *argv,
        return result;
 }
 
-void
+VISIBLE void
 dynamic_driver_destroy(void)
 {
        /* Only unregister the implementation if it was registered by us. */
-- 
1.7.11.7

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to