diff -urp smartmontools-5.38.orig/configure.in smartmontools-5.38/configure.in --- smartmontools-5.38.orig/configure.in 2009-08-16 07:42:57.000000000 -0400 +++ smartmontools-5.38/configure.in 2009-08-21 12:07:15.000000000 -0400 @@ -143,6 +143,40 @@ if test "$with_selinux" = "yes"; then AC_DEFINE(WITH_SELINUX, [1], [Define to 1 if SELinux support is enabled]) fi + AC_ARG_WITH(libcap-ng, + [ --with-libcap-ng=[auto/yes/no] Add Libcap-ng support [default=auto]],, + with_libcap_ng=auto) + +# Check for Libcap-ng API +# +# libcap-ng detection + +if test x$with_libcap_ng = xno ; then + have_libcap_ng=no; +else + # Start by checking for header file + AC_CHECK_HEADER(cap-ng.h, capng_headers=yes, capng_headers=no) + + # See if we have libcap-ng library + AC_CHECK_LIB(cap-ng, capng_clear, CAPNG_LDADD=-lcap-ng,) + + # Check results are usable + if test x$with_libcap_ng = xyes -a x$CAPNG_LDADD = x ; then + AC_MSG_ERROR(libcap-ng support was requested and the library was not found) + fi + if test x$CAPNG_LDADD != x -a $capng_headers = no ; then + AC_MSG_ERROR(libcap-ng libraries found but headers are missing) + fi +fi +AC_SUBST(CAPNG_LDADD) +AC_MSG_CHECKING(whether to use libcap-ng) +if test x$CAPNG_LDADD != x ; then + AC_DEFINE(HAVE_LIBCAP_NG,1,[libcap-ng support]) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi + if test "$prefix" = "NONE"; then dnl no prefix and no mandir, so use ${prefix}/share/man as default if test "$mandir" = '${prefix}/man'; then diff -urp smartmontools-5.38.orig/Makefile.am smartmontools-5.38/Makefile.am --- smartmontools-5.38.orig/Makefile.am 2009-08-16 07:42:57.000000000 -0400 +++ smartmontools-5.38/Makefile.am 2009-08-21 11:28:22.000000000 -0400 @@ -35,7 +35,7 @@ smartd_SOURCES = smartd.cpp \ utility.cpp \ utility.h -smartd_LDADD = @os_deps@ @os_libs@ +smartd_LDADD = @os_deps@ @os_libs@ @CAPNG_LDADD@ smartd_DEPENDENCIES = @os_deps@ EXTRA_smartd_SOURCES = os_darwin.cpp \ diff -urp smartmontools-5.38.orig/smartd.cpp smartmontools-5.38/smartd.cpp --- smartmontools-5.38.orig/smartd.cpp 2009-08-16 07:42:57.000000000 -0400 +++ smartmontools-5.38/smartd.cpp 2009-08-21 11:28:22.000000000 -0400 @@ -74,6 +74,10 @@ extern "C" int __stdcall FreeConsole(voi #include // setmode() #endif // __CYGWIN__ +#ifdef HAVE_LIBCAP_NG +#include +#endif //LIBCAP_NG + // locally included files #include "int64.h" #include "atacmds.h" @@ -4408,6 +4412,14 @@ static int smartd_main(int argc, char ** // don't exit on bad checksums con->checksumfail=0; + +#ifdef HAVE_LIBCAP_NG + // Drop capabilities + capng_clear(CAPNG_SELECT_BOTH); + capng_update(CAPNG_ADD, (capng_type_t)(CAPNG_EFFECTIVE|CAPNG_PERMITTED), + CAP_SYS_ADMIN); + capng_apply(CAPNG_SELECT_BOTH); +#endif // the main loop of the code while (1){