Add stubs and wrappers of already covered libselinux interfaces for
their `raw` counterparts.  These counterparts perform the same
operation expect for context translation.  Context translation is used
to convert SELinux MCS/MLS labales into human readable form, see
mcstransd(8).

Support the usage of those interfaces, e.g. in coreutils.
---
 lib/getfilecon.c        | 27 +++++++++++++++++++++++++++
 lib/se-label.in.h       |  7 +++++++
 lib/se-selinux.in.h     | 41 +++++++++++++++++++++++++++++++++++++++++
 m4/selinux-selinux-h.m4 |  6 ++++++
 4 files changed, 81 insertions(+)

diff --git a/lib/getfilecon.c b/lib/getfilecon.c
index 9506eb89cc..ddd7343523 100644
--- a/lib/getfilecon.c
+++ b/lib/getfilecon.c
@@ -31,11 +31,17 @@
 #endif
 
 #undef getfilecon
+#undef getfilecon_raw
 #undef lgetfilecon
+#undef lgetfilecon_raw
 #undef fgetfilecon
+#undef fgetfilecon_raw
 int getfilecon (char const *file, char **con);
+int getfilecon_raw (char const *file, char **con);
 int lgetfilecon (char const *file, char **con);
+int lgetfilecon_raw (char const *file, char **con);
 int fgetfilecon (int fd, char **con);
+int fgetfilecon_raw (int fd, char **con);
 
 /* getfilecon, lgetfilecon, and fgetfilecon can all misbehave, be it
    via an old version of libselinux where these would return 0 and set the
@@ -72,6 +78,13 @@ rpl_getfilecon (char const *file, char **con)
   return map_to_failure (ret, con);
 }
 
+int
+rpl_getfilecon_raw (char const *file, char **con)
+{
+  int ret = getfilecon_raw (file, con);
+  return map_to_failure (ret, con);
+}
+
 int
 rpl_lgetfilecon (char const *file, char **con)
 {
@@ -79,9 +92,23 @@ rpl_lgetfilecon (char const *file, char **con)
   return map_to_failure (ret, con);
 }
 
+int
+rpl_lgetfilecon_raw (char const *file, char **con)
+{
+  int ret = lgetfilecon_raw (file, con);
+  return map_to_failure (ret, con);
+}
+
 int
 rpl_fgetfilecon (int fd, char**con)
 {
   int ret = fgetfilecon (fd, con);
   return map_to_failure (ret, con);
 }
+
+int
+rpl_fgetfilecon_raw (int fd, char**con)
+{
+  int ret = fgetfilecon_raw (fd, con);
+  return map_to_failure (ret, con);
+}
diff --git a/lib/se-label.in.h b/lib/se-label.in.h
index 6455808679..d4ceb89aa6 100644
--- a/lib/se-label.in.h
+++ b/lib/se-label.in.h
@@ -57,6 +57,13 @@ selabel_lookup (_GL_ATTRIBUTE_MAYBE_UNUSED struct 
selabel_handle *hnd,
                 _GL_ATTRIBUTE_MAYBE_UNUSED int type)
 { errno = ENOTSUP; return -1; }
 
+SE_LABEL_INLINE int
+selabel_lookup_raw (_GL_ATTRIBUTE_MAYBE_UNUSED struct selabel_handle *hnd,
+                    _GL_ATTRIBUTE_MAYBE_UNUSED char **context,
+                    _GL_ATTRIBUTE_MAYBE_UNUSED char const *key,
+                    _GL_ATTRIBUTE_MAYBE_UNUSED int type)
+{ errno = ENOTSUP; return -1; }
+
 SE_LABEL_INLINE struct selabel_handle *
 selabel_open (_GL_ATTRIBUTE_MAYBE_UNUSED int backend,
               _GL_ATTRIBUTE_MAYBE_UNUSED struct selinux_opt *options,
diff --git a/lib/se-selinux.in.h b/lib/se-selinux.in.h
index baf2154cad..48e835e04d 100644
--- a/lib/se-selinux.in.h
+++ b/lib/se-selinux.in.h
@@ -63,6 +63,9 @@ struct selinux_opt;
 SE_SELINUX_INLINE int
 getcon (_GL_ATTRIBUTE_MAYBE_UNUSED char **con)
   { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
+getcon_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char **con)
+  { errno = ENOTSUP; return -1; }
 SE_SELINUX_INLINE void
 freecon (_GL_ATTRIBUTE_MAYBE_UNUSED char *con) {}
 
@@ -70,9 +73,15 @@ SE_SELINUX_INLINE int
 getfscreatecon (_GL_ATTRIBUTE_MAYBE_UNUSED char **con)
   { errno = ENOTSUP; return -1; }
 SE_SELINUX_INLINE int
+getfscreatecon_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char **con)
+  { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
 setfscreatecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
   { errno = ENOTSUP; return -1; }
 SE_SELINUX_INLINE int
+setfscreatecon_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
+  { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
 matchpathcon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file,
               _GL_ATTRIBUTE_MAYBE_UNUSED mode_t m,
               _GL_ATTRIBUTE_MAYBE_UNUSED char **con)
@@ -82,24 +91,47 @@ getfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file,
             _GL_ATTRIBUTE_MAYBE_UNUSED char **con)
   { errno = ENOTSUP; return -1; }
 SE_SELINUX_INLINE int
+getfilecon_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file,
+                _GL_ATTRIBUTE_MAYBE_UNUSED char **con)
+  { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
 lgetfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file,
              _GL_ATTRIBUTE_MAYBE_UNUSED char **con)
   { errno = ENOTSUP; return -1; }
 SE_SELINUX_INLINE int
+lgetfilecon_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file,
+                 _GL_ATTRIBUTE_MAYBE_UNUSED char **con)
+  { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
 fgetfilecon (int fd,_GL_ATTRIBUTE_MAYBE_UNUSED char **con)
   { errno = ENOTSUP; return -1; }
 SE_SELINUX_INLINE int
+fgetfilecon_raw (int fd,_GL_ATTRIBUTE_MAYBE_UNUSED char **con)
+  { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
 setfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file,
             _GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
   { errno = ENOTSUP; return -1; }
 SE_SELINUX_INLINE int
+setfilecon_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file,
+                _GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
+  { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
 lsetfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file,
              _GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
   { errno = ENOTSUP; return -1; }
 SE_SELINUX_INLINE int
+lsetfilecon_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file,
+                 _GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
+  { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
 fsetfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED int fd,
              _GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
   { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
+fsetfilecon_raw (_GL_ATTRIBUTE_MAYBE_UNUSED int fd,
+                 _GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
+  { errno = ENOTSUP; return -1; }
 
 SE_SELINUX_INLINE int
 security_check_context (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
@@ -111,11 +143,20 @@ SE_SELINUX_INLINE int
 setexeccon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
   { errno = ENOTSUP; return -1; }
 SE_SELINUX_INLINE int
+setexeccon_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con)
+  { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
 security_compute_create (_GL_ATTRIBUTE_MAYBE_UNUSED char const *scon,
                          _GL_ATTRIBUTE_MAYBE_UNUSED char const *tcon,
                          _GL_ATTRIBUTE_MAYBE_UNUSED security_class_t tclass,
                          _GL_ATTRIBUTE_MAYBE_UNUSED char **newcon)
   { errno = ENOTSUP; return -1; }
+SE_SELINUX_INLINE int
+security_compute_create_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char const *scon,
+                             _GL_ATTRIBUTE_MAYBE_UNUSED char const *tcon,
+                             _GL_ATTRIBUTE_MAYBE_UNUSED security_class_t 
tclass,
+                             _GL_ATTRIBUTE_MAYBE_UNUSED char **newcon)
+  { errno = ENOTSUP; return -1; }
 SE_SELINUX_INLINE security_class_t
 string_to_security_class (char const *name)
   { errno = ENOTSUP; return 0; }
diff --git a/m4/selinux-selinux-h.m4 b/m4/selinux-selinux-h.m4
index 2c943f1606..8f0f3112a8 100644
--- a/m4/selinux-selinux-h.m4
+++ b/m4/selinux-selinux-h.m4
@@ -27,10 +27,16 @@ AC_DEFUN([gl_HEADERS_SELINUX_SELINUX_H],
       gl_CHECK_NEXT_HEADERS([selinux/selinux.h])
       AC_DEFINE([getfilecon], [rpl_getfilecon],
                 [Always use our getfilecon wrapper.])
+      AC_DEFINE([getfilecon_raw], [rpl_getfilecon_raw],
+                [Always use our getfilecon_raw wrapper.])
       AC_DEFINE([lgetfilecon], [rpl_lgetfilecon],
                 [Always use our lgetfilecon wrapper.])
+      AC_DEFINE([lgetfilecon_raw], [rpl_lgetfilecon_raw],
+                [Always use our lgetfilecon_raw wrapper.])
       AC_DEFINE([fgetfilecon], [rpl_fgetfilecon],
                 [Always use our fgetfilecon wrapper.])
+      AC_DEFINE([fgetfilecon_raw], [rpl_fgetfilecon_raw],
+                [Always use our fgetfilecon_raw wrapper.])
     fi
 
     case "$ac_cv_search_setfilecon:$ac_cv_header_selinux_selinux_h" in
-- 
2.43.0


Reply via email to