changeset 11792:3f075467f0f5

selinux-at: remove redundant m4 code, add documentation * modules/selinux-at (configure.ac): Remove redundant code. LIB_SELINUX is already set via the dependent module, selinux-h. (Include): Add quotes around selinux-at.h. * lib/selinux-at.h: Add documentation. Reported by Bruno Haible in http://marc.info/?l=gnulib-bug&m=124958988300749
author Jim Meyering <meyering@redhat.com>
date Fri, 07 Aug 2009 10:57:17 +0200
parents 20dfb1cf7571
children d4b2d7a95227
files ChangeLog lib/selinux-at.h modules/selinux-at
diffstat 3 files changed, 44 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2009-08-07  Jim Meyering  <meyering@redhat.com>
+
+	selinux-at: remove redundant m4 code, add documentation
+	* modules/selinux-at (configure.ac): Remove redundant code.
+	LIB_SELINUX is already set via the dependent module, selinux-h.
+	(Include): Add quotes around selinux-at.h.
+	* lib/selinux-at.h: Add documentation.
+	Reported by Bruno Haible in
+	http://marc.info/?l=gnulib-bug&m=124958988300749
+
 2009-08-07  Bruno Haible  <bruno@clisp.org>
 
 	Avoid link error on MacOS X 10.3 and 10.4.
--- a/lib/selinux-at.h
+++ b/lib/selinux-at.h
@@ -17,7 +17,36 @@
 #include <selinux/selinux.h>
 #include <selinux/context.h>
 
-int  getfileconat (int fd, char const *file, security_context_t *con);
-int lgetfileconat (int fd, char const *file, security_context_t *con);
-int  setfileconat (int fd, char const *file, security_context_t con);
-int lsetfileconat (int fd, char const *file, security_context_t con);
+/* These are the dir-fd-relative variants of the functions without the
+   "at" suffix.  For example, getfileconat (AT_FDCWD, file, &c) is usually
+   equivalent to getfileconat (file, &c).  The emulation is accomplished
+   by first attempting getfilecon ("/proc/self/fd/DIRFD/FILE", &c).
+   Failing that, simulate it via save_cwd/fchdir/getfilecon/restore_cwd.
+   If either the save_cwd or the restore_cwd fails (relatively unlikely),
+   then give a diagnostic and exit nonzero.  */
+
+/* dir-fd-relative getfilecon.  Set *CON to the SELinux security context
+   of the file specified by DIRFD and FILE and return the length of *CON.
+   DIRFD and FILE are interpreted as for fstatat[*].  A non-NULL *CON
+   must be freed with freecon.  Upon error, set *CON to NULL, set errno
+   and return -1.
+   [*] with flags=0 here, with flags=AT_SYMLINK_NOFOLLOW for lgetfileconat  */
+int  getfileconat (int dirfd, char const *file, security_context_t *con);
+
+/* dir-fd-relative lgetfilecon.  This function is just like getfileconat,
+   except when DIRFD and FILE specify a symlink:  lgetfileconat operates on
+   the symlink, while getfileconat operates on the referent of the symlink.  */
+int lgetfileconat (int dirfd, char const *file, security_context_t *con);
+
+/* dir-fd-relative setfilecon.  Set the SELinux security context of
+   the file specified by DIRFD and FILE to CON.  DIRFD and FILE are
+   interpreted as for fstatat[*].  Upon success, return 0.
+   Otherwise, return -1 and set errno.  */
+int  setfileconat (int dirfd, char const *file, security_context_t con);
+
+/* dir-fd-relative lsetfilecon.  This function is just like setfileconat,
+   except that rather than dereferencing a symlink, this function affects it. */
+/* dir-fd-relative lsetfilecon.  This function is just like setfileconat,
+   except when DIRFD and FILE specify a symlink:  lsetfileconat operates on
+   the symlink, while setfileconat operates on the referent of the symlink.  */
+int lsetfileconat (int dirfd, char const *file, security_context_t con);
--- a/modules/selinux-at
+++ b/modules/selinux-at
@@ -12,18 +12,11 @@
 configure.ac:
 AC_CHECK_HEADERS([selinux/flask.h])
 AC_LIBOBJ([selinux-at])
-gl_save_LIBS=$LIBS
-  LIB_SELINUX=
-  AC_SEARCH_LIBS([setfilecon], [selinux],
-                 [test "$ac_cv_search_setfilecon" = "none required" ||
-                  LIB_SELINUX=$ac_cv_search_setfilecon])
-  AC_SUBST(LIB_SELINUX)
-LIBS=$gl_save_LIBS
 
 Makefile.am:
 
 Include:
-selinux-at.h
+"selinux-at.h"
 
 License:
 GPL