Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.1:Staging:C
star
star-selinux.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File star-selinux.patch of Package star
--- conf/configure.in +++ conf/configure.in @@ -530,6 +530,15 @@ AC_SUBST(may_linux_src_include) +AC_CHECK_HEADERS(selinux/selinux.h) +if test "$ac_cv_header_selinux_selinux_h" = yes; then + AC_CHECKING(for SELinux support) + AC_CHECK_LIB(selinux, is_selinux_enabled, lib_selinux="-lselinux -lattr") + ac_save_LIBS="$LIBS" + LIBS="$LIBS $lib_selinux" + AC_CHECK_FUNCS(is_selinux_enabled) +fi + AC_SUBST(largefile_cc_opt) AC_SUBST(lib_crypt) @@ -545,5 +554,6 @@ AC_SUBST(lib_gen) AC_SUBST(lib_pthread) AC_SUBST(lib_rt) +AC_SUBST(lib_selinux) AC_OUTPUT(rules.cnf) --- conf/rules.cnf.in +++ conf/rules.cnf.in @@ -17,6 +17,7 @@ LIB_ACL= @lib_acl@ # Full (test/set) ACL users like star LIB_ACL_TEST= @lib_acl_test@ # Test only ACL users like libfind LIB_ATTR = @lib_attr@ +LIB_SELINUX = @lib_selinux@ LIB_SECDB = @lib_secdb@ LIB_GEN = @lib_gen@ LIB_PTHREAD = @lib_pthread@ --- star/Makefile +++ star/Makefile @@ -25,6 +25,7 @@ CPPOPTS += -DUSE_FIND CPPOPTS += -DUSE_ACL CPPOPTS += -DUSE_XATTR +CPPOPTS += -DWITH_SELINUX CPPOPTS += -DUSE_FFLAGS CPPOPTS += -DCOPY_LINKS_DELAYED CPPOPTS += -DSTAR_FAT @@ -48,7 +49,7 @@ #LIBS= -lunos #LIBS= -lschily -lc /usr/local/lib/gcc-gnulib -LIBS= -ldeflt -lrmt -lfind -lschily $(LIB_ACL) $(LIB_ATTR) $(LIB_SOCKET) $(LIB_INTL) +LIBS= -ldeflt -lrmt -lfind -lschily $(LIB_ACL) $(LIB_ATTR) $(LIB_SELINUX) $(LIB_SOCKET) $(LIB_INTL) # # Wenn -lfind, dann auch $(LIB_INTL) # --- star/extract.c +++ star/extract.c @@ -238,6 +238,16 @@ if (prblockno) (void) tblocks(); /* set curblockno */ +#ifdef WITH_SELINUX + if (!to_stdout && selinux_enabled) { + if (setselinux(&finfo) == FALSE) { + errmsgno(EX_BAD, + "Can not setup security context for '%s'. Not created.\n", + finfo.f_name); + } + } +#endif + if (is_volhdr(&finfo)) { if (!get_volhdr(&finfo, vhname)) { excomerrno(EX_BAD, --- star/pax.mk +++ star/pax.mk @@ -18,6 +18,7 @@ CPPOPTS += -DUSE_FIND CPPOPTS += -DUSE_ACL CPPOPTS += -DUSE_XATTR +CPPOPTS += -DWITH_SELINUX CPPOPTS += -DUSE_FFLAGS CPPOPTS += -DPAX CPPOPTS += -DSCHILY_PRINT @@ -35,7 +36,7 @@ HFILES= star.h starsubs.h dirtime.h xtab.h xutimes.h \ movearch.h table.h props.h fifo.h diff.h \ checkerr.h dumpdate.h bitstring.h -LIBS= -ldeflt -lrmt -lfind -lschily $(LIB_ACL) $(LIB_ATTR) $(LIB_SOCKET) $(LIB_INTL) +LIBS= -ldeflt -lrmt -lfind -lschily $(LIB_ACL) $(LIB_ATTR) $(LIB_SELINUX) $(LIB_SOCKET) $(LIB_INTL) XMK_FILE= spaxman.mk ########################################################################### --- star/star.c +++ star/star.c @@ -39,6 +39,11 @@ #include <schily/idcache.h> #include "fifo.h" /* Needed for #undef FIFO */ #include "dumpdate.h" + +#ifdef WITH_SELINUX +int selinux_enabled=0; +#endif + #ifdef USE_FIND #include <schily/walk.h> #include <schily/find.h> @@ -387,6 +392,11 @@ #endif comerr("Panic cannot set back effective uid.\n"); } + +#ifdef WITH_SELINUX + selinux_enabled = is_selinux_enabled() > 0; +#endif + my_uid = geteuid(); /* * WARNING: We now are no more able to open a new remote connection --- star/starsubs.h +++ star/starsubs.h @@ -304,6 +304,11 @@ extern BOOL get_xattr __PR((register FINFO *info)); extern BOOL set_xattr __PR((register FINFO *info)); extern void free_xattr __PR((star_xattr_t **xattr)); +#ifdef WITH_SELINUX +#include <selinux/selinux.h> +extern BOOL setselinux __PR((register FINFO *info)); +extern int selinux_enabled; +#endif #endif /* --- star/xattr.c +++ star/xattr.c @@ -196,6 +196,27 @@ #endif /* USE_XATTR */ } +#ifdef WITH_SELINUX +EXPORT BOOL +setselinux(info) + register FINFO *info; +{ +#if defined(USE_XATTR) && defined(HAVE_SETXATTR) && defined(WITH_SELINUX) + if (info->f_xattr) { + star_xattr_t *xap; + for (xap = info->f_xattr; xap->name != NULL; xap++) { + if (strcmp(xap->name, "security.selinux") == 0) { + if (setfscreatecon(xap->value)) { + return FALSE; + } + } + } + } +#endif /* USE_XATTR && WITH_SELINUX */ + return TRUE; +} +#endif + /* ARGSUSED */ EXPORT BOOL set_xattr(info) @@ -209,6 +230,10 @@ return (TRUE); for (xap = info->f_xattr; xap->name != NULL; xap++) { +#ifdef WITH_SELINUX + if (selinux_enabled && (strcmp(xap->name, "security.selinux") == 0)) + continue; +#endif if (lsetxattr(info->f_name, xap->name, xap->value, xap->value_len, 0) != 0) { if (!errhidden(E_SETXATTR, info->f_name)) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor