diff options
author | Simo Sorce <ssorce@redhat.com> | 2011-07-28 15:15:26 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2011-07-29 10:13:26 -0400 |
commit | 336879aabae137f9a81304f147fb0d43001654b0 (patch) | |
tree | 0ac8745808d88bab42409427cf425d8b75458105 | |
parent | 3654a0c49e5ef3f24e2af29b34a13ff651a94c3d (diff) | |
download | sssd-336879aabae137f9a81304f147fb0d43001654b0.tar.gz sssd-336879aabae137f9a81304f147fb0d43001654b0.tar.bz2 sssd-336879aabae137f9a81304f147fb0d43001654b0.zip |
sss_client: avoid leaking file descriptors
If a pam or nss module is dlcolse()d and unloaded we were leaking
the file descriptor used to communicate to sssd in the process.
Make sure the fucntion used to close the socket file descriptor is
called on dlclose()
Silence autoconf 2.28 warnings (Patch by Jakub Hrozek)
-rw-r--r-- | configure.ac | 12 | ||||
-rw-r--r-- | src/sss_client/common.c | 3 |
2 files changed, 15 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index 248a9ae3..770371d5 100644 --- a/configure.ac +++ b/configure.ac @@ -177,6 +177,18 @@ AC_CHECK_HEADERS([sys/inotify.h]) AC_CHECK_HEADERS([sasl/sasl.h],,AC_MSG_ERROR([Could not find SASL headers])) +AC_CACHE_CHECK([whether compiler supports __attribute__((destructor))], + sss_client_cv_attribute_destructor, + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([__attribute__((destructor)) static void cleanup(void) { }])], + sss_client_cv_attribute_destructor=yes) + ]) + +if test x"$sss_client_cv_attribute_destructor" = xyes ; then + AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1, + [whether compiler supports __attribute__((destructor))]) +fi + PKG_CHECK_MODULES([CHECK], [check >= 0.9.5], [have_check=1], [have_check=]) if test x$have_check = x; then AC_MSG_WARN([Without the 'CHECK' libraries, you will be unable to run all tests in the 'make check' suite]) diff --git a/src/sss_client/common.c b/src/sss_client/common.c index b6033055..55e393e5 100644 --- a/src/sss_client/common.c +++ b/src/sss_client/common.c @@ -53,6 +53,9 @@ int sss_cli_sd = -1; /* the sss client socket descriptor */ struct stat sss_cli_sb; /* the sss client stat buffer */ +#if HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR +__attribute__((destructor)) +#endif static void sss_cli_close_socket(void) { if (sss_cli_sd != -1) { |