86 lines
2.9 KiB
Diff
86 lines
2.9 KiB
Diff
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 <io.h> // setmode()
|
|
#endif // __CYGWIN__
|
|
|
|
+#ifdef HAVE_LIBCAP_NG
|
|
+#include <cap-ng.h>
|
|
+#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){
|