Thanks for the clarification. ACK then. -- Samuli Seppänen Community Manager OpenVPN Technologies, Inc
irc freenode net: mattock > I wrote this in the introduction of the patch set. > > There are two approaches to detecting dependencies: > > 1. Detect all compile time dependences- you detect headers and > libraries, this is probably the safest way to go, but makes the code > very complex. > > 2. Detect library only - you assume that if library is present, the > functionality exists, this is what important... no need to check for > header, most probably this exists as well. This makes the code > simpler, in the risk of compile failure if header is missing. > > In all project I wrote build for (opensc, uswsusp, ntfs3g, ecryptfs) > we took the 2nd approach, and it is fine. > > Alon. > > 2012/3/8 Samuli Seppänen <sam...@openvpn.net>: >> Looks like a cleaner implementation than the earlier one. I take it >> AC_CHECK_HEADER is not anymore needed to detect selinux.h, but why exactly? >> >> Besides that I give this one an ACK. >> >> -- >> Samuli Seppänen >> Community Manager >> OpenVPN Technologies, Inc >> >> irc freenode net: mattock >> >>> Signed-off-by: Alon Bar-Lev <alon.bar...@gmail.com> >>> --- >>> configure.ac | 35 +++++++++++++++-------------------- >>> src/openvpn/Makefile.am | 1 + >>> src/openvpn/init.c | 4 ++-- >>> src/openvpn/options.c | 6 +++--- >>> src/openvpn/options.h | 2 +- >>> src/openvpn/syshead.h | 2 +- >>> 6 files changed, 23 insertions(+), 27 deletions(-) >>> >>> diff --git a/configure.ac b/configure.ac >>> index 98615c6..2388f17 100644 >>> --- a/configure.ac >>> +++ b/configure.ac >>> @@ -215,7 +215,7 @@ AC_ARG_ENABLE( >>> >>> AC_ARG_ENABLE( >>> [selinux], >>> - [AS_HELP_STRING([--disable-selinux], [disable SELinux support])], >>> + [AS_HELP_STRING([--enable-selinux], [enable SELinux support])], >>> , >>> [enable_selinux="no"] >>> ) >>> @@ -619,6 +619,13 @@ AC_CHECK_LIB( >>> ) >>> AC_SUBST([SOCKETS_LIBS]) >>> >>> +AC_CHECK_LIB( >>> + [selinux], >>> + [setcon], >>> + [SELINUX_LIBS="-lselinux"] >>> +) >>> +AC_SUBST([SELINUX_LIBS]) >>> + >>> case "${with_mem_check}" in >>> valgrind) >>> AC_CHECK_HEADER( >>> @@ -826,25 +833,6 @@ if test "${enable_crypto}" = "yes"; then >>> fi >>> fi >>> >>> -dnl >>> -dnl check for SELinux library and headers >>> -dnl >>> -if test "${enable_selinux}" = "yes"; then >>> - AC_CHECK_HEADER( >>> - [selinux/selinux.h], >>> - [AC_CHECK_LIB( >>> - [selinux], >>> - [setcon], >>> - [ >>> - LIBS="${LIBS} -lselinux" >>> - AC_DEFINE(HAVE_SETCON, 1, [SELinux support]) >>> - ], >>> - [AC_MSG_RESULT([SELinux library not found.])] >>> - )], >>> - [AC_MSG_ERROR([SELinux headers not found.])] >>> - ) >>> -fi >>> - >>> if test -n "${SP_PLATFORM_WINDOWS}"; then >>> AC_DEFINE_UNQUOTED([PATH_SEPARATOR], ['\\\\'], [Path separator]) #" >>> AC_DEFINE_UNQUOTED([PATH_SEPARATOR_STR], ["\\\\"], [Path separator]) >>> #" >>> @@ -896,6 +884,12 @@ else >>> fi >>> fi >>> >>> +if test "${enable_selinux}" = "yes"; then >>> + test -z "${SELINUX_LIBS}" && AC_MSG_ERROR([libselinux required but >>> missing]) >>> + OPTIONAL_SELINUX_LIBS="${SELINUX_LIBS}" >>> + AC_DEFINE([ENABLE_SELINUX], [1], [SELinux support]) >>> +fi >>> + >>> if test "${enable_pedantic}" = "yes"; then >>> enable_strict="yes" >>> CFLAGS="${CFLAGS} -ansi -pedantic" >>> @@ -922,6 +916,7 @@ AC_SUBST([TAP_WIN_MIN_MAJOR]) >>> AC_SUBST([TAP_WIN_MIN_MINOR]) >>> >>> AC_SUBST([OPTIONAL_DL_LIBS]) >>> +AC_SUBST([OPTIONAL_SELINUX_LIBS]) >>> >>> AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"]) >>> >>> diff --git a/src/openvpn/Makefile.am b/src/openvpn/Makefile.am >>> index 86abd09..a3f8b3a 100644 >>> --- a/src/openvpn/Makefile.am >>> +++ b/src/openvpn/Makefile.am >>> @@ -97,6 +97,7 @@ openvpn_SOURCES = \ >>> cryptoapi.h cryptoapi.c >>> openvpn_LDADD = \ >>> $(SOCKETS_LIBS) \ >>> + $(OPTIONAL_SELINUX_LIBS) \ >>> $(OPTIONAL_DL_LIBS) >>> if WIN32 >>> openvpn_SOURCES += openvpn_win32_resources.rc >>> diff --git a/src/openvpn/init.c b/src/openvpn/init.c >>> index b8f57b2..0c995ff 100644 >>> --- a/src/openvpn/init.c >>> +++ b/src/openvpn/init.c >>> @@ -1038,7 +1038,7 @@ do_uid_gid_chroot (struct context *c, bool no_delay) >>> mstats_open(c->options.memstats_fn); >>> #endif >>> >>> -#ifdef HAVE_SETCON >>> +#ifdef ENABLE_SELINUX >>> /* Apply a SELinux context in order to restrict what OpenVPN can do >>> * to _only_ what it is supposed to do after initialization is >>> complete >>> * (basically just network I/O operations). Doing it after chroot >>> @@ -2465,7 +2465,7 @@ do_option_warnings (struct context *c) >>> msg (M_WARN, "WARNING: --ping should normally be used with >>> --ping-restart or --ping-exit"); >>> >>> if (o->username || o->groupname || o->chroot_dir >>> -#ifdef HAVE_SETCON >>> +#ifdef ENABLE_SELINUX >>> || o->selinux_context >>> #endif >>> ) >>> diff --git a/src/openvpn/options.c b/src/openvpn/options.c >>> index d7f848e..4e95b83 100644 >>> --- a/src/openvpn/options.c >>> +++ b/src/openvpn/options.c >>> @@ -316,7 +316,7 @@ static const char usage_message[] = >>> "--user user : Set UID to user after initialization.\n" >>> "--group group : Set GID to group after initialization.\n" >>> "--chroot dir : Chroot to this directory after initialization.\n" >>> -#ifdef HAVE_SETCON >>> +#ifdef ENABLE_SELINUX >>> "--setcon context: Apply this SELinux context after initialization.\n" >>> #endif >>> "--cd dir : Change to this directory before initialization.\n" >>> @@ -1477,7 +1477,7 @@ show_settings (const struct options *o) >>> SHOW_STR (groupname); >>> SHOW_STR (chroot_dir); >>> SHOW_STR (cd_dir); >>> -#ifdef HAVE_SETCON >>> +#ifdef ENABLE_SELINUX >>> SHOW_STR (selinux_context); >>> #endif >>> SHOW_STR (writepid); >>> @@ -4525,7 +4525,7 @@ add_option (struct options *options, >>> } >>> options->cd_dir = p[1]; >>> } >>> -#ifdef HAVE_SETCON >>> +#ifdef ENABLE_SELINUX >>> else if (streq (p[0], "setcon") && p[1]) >>> { >>> VERIFY_PERMISSION (OPT_P_GENERAL); >>> diff --git a/src/openvpn/options.h b/src/openvpn/options.h >>> index 6af4b3a..57b88b7 100644 >>> --- a/src/openvpn/options.h >>> +++ b/src/openvpn/options.h >>> @@ -310,7 +310,7 @@ struct options >>> const char *groupname; >>> const char *chroot_dir; >>> const char *cd_dir; >>> -#ifdef HAVE_SETCON >>> +#ifdef ENABLE_SELINUX >>> char *selinux_context; >>> #endif >>> const char *writepid; >>> diff --git a/src/openvpn/syshead.h b/src/openvpn/syshead.h >>> index 1ad81d8..cac4757 100644 >>> --- a/src/openvpn/syshead.h >>> +++ b/src/openvpn/syshead.h >>> @@ -176,7 +176,7 @@ >>> #include <sys/epoll.h> >>> #endif >>> >>> -#ifdef HAVE_SETCON >>> +#ifdef ENABLE_SELINUX >>> #include <selinux/selinux.h> >>> #endif >>>