RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 05-May-2017 19:12:58 Branch: rpm-5_4 Handle: 2017050517125701 Modified files: (Branch: rpm-5_4) rpm CHANGES rpm/lib fsm.c librpm.vers poptI.c poptQV.c rpmcli.h rpmfi.c rpmfi.h rpmts.h rpm/rpmio iosm.c iosm.h Log: - cap: attach RPMTAG_FILECAPS if present and not disabled. Summary: Revision Changes Path 1.3501.2.543+1 -0 rpm/CHANGES 2.193.4.16 +16 -6 rpm/lib/fsm.c 1.77.2.6 +2 -0 rpm/lib/librpm.vers 2.57.4.4 +10 -0 rpm/lib/poptI.c 2.68.2.5 +2 -0 rpm/lib/poptQV.c 2.100.2.3 +5 -3 rpm/lib/rpmcli.h 2.160.4.8 +28 -0 rpm/lib/rpmfi.c 2.82.4.5 +16 -0 rpm/lib/rpmfi.h 2.134.2.11 +2 -2 rpm/lib/rpmts.h 1.43.2.14 +34 -10 rpm/rpmio/iosm.c 1.18.4.8 +18 -14 rpm/rpmio/iosm.h ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.3501.2.542 -r1.3501.2.543 CHANGES --- rpm/CHANGES 4 May 2017 21:00:26 -0000 1.3501.2.542 +++ rpm/CHANGES 5 May 2017 17:12:57 -0000 1.3501.2.543 @@ -1,4 +1,5 @@ 5.4.17 -> 5.4.18: + - jbj: cap: attach RPMTAG_FILECAPS if present and not disabled. - jbj: cap: parse-and-add RPMTAG_FILECAPS. - jbj: cap: wrap libcap routines. - jbj: rpmku: stub in syscall wrappers. @@ . patch -p0 <<'@@ .' Index: rpm/lib/fsm.c ============================================================================ $ cvs diff -u -r2.193.4.15 -r2.193.4.16 fsm.c --- rpm/lib/fsm.c 19 Apr 2017 20:42:15 -0000 2.193.4.15 +++ rpm/lib/fsm.c 5 May 2017 17:12:57 -0000 2.193.4.16 @@ -632,6 +632,7 @@ } fsm->iter = mapInitIterator(fi, reverse); fsm->iter->ts = rpmtsLink(ts, "mapIterator"); + fsm->nofcaps = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOCAPS); fsm->nofcontexts = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS); fsm->nofdigests = (ts != NULL && !(rpmtsFlags(ts) & RPMTRANS_FLAG_NOFDIGESTS)) @@ -875,9 +876,7 @@ if (fsm->mapFlags & IOSM_MAP_GID) st->st_gid = gid; - /* - * Set file digest (if not disabled). - */ + /* Set file digest (if not disabled). */ if (!fsm->nofdigests) { fsm->fdigestalgo = fi->digestalgo; fsm->fdigest = (fi->fdigests ? fi->fdigests[i] : NULL); @@ -889,6 +888,12 @@ fsm->digestlen = 0; fsm->digest = NULL; } + + /* Set file capabilities (if not disabled). */ + if (!fsm->nofcaps) + fsm->fcaps = (fi->fcaps ? fi->fcaps[i] : NULL); + else + fsm->fcaps = NULL; } return 0; } @@ -2039,9 +2044,7 @@ } fsm->opath = _free(fsm->opath); } - /* - * Set file security context (if not disabled). - */ + /* Set file security context (if not disabled). */ if (!rc && !getuid()) { rc = fsmMapFContext(fsm); if (!rc) @@ -2056,6 +2059,8 @@ rc = fsmNext(fsm, IOSM_CHOWN); if (!rc) rc = fsmNext(fsm, IOSM_CHMOD); + if (!rc) + rc = fsmNext(fsm, IOSM_SETCAP); if (!rc) { time_t mtime = st->st_mtime; rpmfi fi = fsmGetFi(fsm); @@ -2252,6 +2257,11 @@ case IOSM_MKNOD: rc = rpmlioMknod(rpmtsGetRdb(fsmGetTs(fsm)), fsm->path, st->st_mode, st->st_rdev); goto iosmcall; + case IOSM_SETCAP: + /* Log iff cap_set_file() will actually be called. */ + if (fsm->fcaps && *fsm->fcaps) + rc = rpmlioSetcap(rpmtsGetRdb(fsmGetTs(fsm)), fsm->path, fsm->fcaps); + goto iosmcall; case IOSM_LSTAT: case IOSM_STAT: case IOSM_READLINK: @@ . patch -p0 <<'@@ .' Index: rpm/lib/librpm.vers ============================================================================ $ cvs diff -u -r1.77.2.5 -r1.77.2.6 librpm.vers --- rpm/lib/librpm.vers 27 Jun 2016 03:10:03 -0000 1.77.2.5 +++ rpm/lib/librpm.vers 5 May 2017 17:12:57 -0000 1.77.2.6 @@ -158,6 +158,7 @@ rpmfiDX; rpmfiExclude; rpmfiFC; + rpmfiFCaps; rpmfiFClass; rpmfiFColor; rpmfiFContext; @@ -166,6 +167,7 @@ rpmfiSetFFlags; rpmfiFGroup; rpmfiFInode; + rpmfiFLangs; rpmfiFLink; rpmfiFMode; rpmfiFMtime; @@ . patch -p0 <<'@@ .' Index: rpm/lib/poptI.c ============================================================================ $ cvs diff -u -r2.57.4.3 -r2.57.4.4 poptI.c --- rpm/lib/poptI.c 27 Sep 2014 15:53:43 -0000 2.57.4.3 +++ rpm/lib/poptI.c 5 May 2017 17:12:57 -0000 2.57.4.4 @@ -180,6 +180,11 @@ ia->noDeps = 1; break; + case RPMCLI_POPT_NOCAPS: + ia->transFlags = (rpmtransFlags) + (ia->transFlags | RPMTRANS_FLAG_NOCAPS); + break; + case RPMCLI_POPT_NOCONTEXTS: ia->transFlags = (rpmtransFlags) (ia->transFlags | RPMTRANS_FLAG_NOCONTEXTS); @@ -234,6 +239,9 @@ &rpmIArgs.transFlags, RPMTRANS_FLAG_NODOCS, N_("do not install documentation"), NULL}, #ifdef NOTYET /* XXX multiple identical options forces popt callback. */ + { "nocaps", '\0', POPT_BIT_SET|POPT_ARGFLAG_TOGGLE|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOCAPS, + N_("don't install file security contexts"), NULL}, { "nocontexts", '\0', POPT_BIT_SET|POPT_ARGFLAG_TOGGLE|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags, RPMTRANS_FLAG_NOCONTEXTS, N_("don't install file security contexts"), NULL}, @@ -241,6 +249,8 @@ &rpmIArgs.transFlags, RPMTRANS_FLAG_NOFDIGESTS, N_("don't verify file digests"), NULL }, #else + { "nocaps", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOCAPS, + N_("don't verify file capabilities"), NULL }, { "nocontexts", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOCONTEXTS, N_("don't verify file security contexts"), NULL }, { "nofdigests", '\0', 0, NULL, RPMCLI_POPT_NOFDIGESTS, @@ . patch -p0 <<'@@ .' Index: rpm/lib/poptQV.c ============================================================================ $ cvs diff -u -r2.68.2.4 -r2.68.2.5 poptQV.c --- rpm/lib/poptQV.c 18 Sep 2014 17:50:32 -0000 2.68.2.4 +++ rpm/lib/poptQV.c 5 May 2017 17:12:57 -0000 2.68.2.5 @@ -434,6 +434,8 @@ { "nohmacs", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOHMACS, N_("don't verify file HMAC's"), NULL }, + { "nocaps", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOCAPS, + N_("don't verify file capabilities"), NULL }, { "nocontexts", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOCONTEXTS, N_("don't verify file security contexts"), NULL }, { "nofiles", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_FILES, @@ . patch -p0 <<'@@ .' Index: rpm/lib/rpmcli.h ============================================================================ $ cvs diff -u -r2.100.2.2 -r2.100.2.3 rpmcli.h --- rpm/lib/rpmcli.h 25 Jun 2016 09:49:39 -0000 2.100.2.2 +++ rpm/lib/rpmcli.h 5 May 2017 17:12:57 -0000 2.100.2.3 @@ -79,6 +79,7 @@ #define RPMCLI_POPT_NOCONTEXTS -1032 #define RPMCLI_POPT_TARGETPLATFORM -1033 #define RPMCLI_POPT_NOHMACS -1034 +#define RPMCLI_POPT_NOCAPS -1035 /* ==================================================================== */ /** \name RPMQV */ @@ -125,9 +126,10 @@ RPMVERIFY_MTIME = (1 << 5), /*!< from %verify(mtime) */ RPMVERIFY_MODE = (1 << 6), /*!< from %verify(mode) */ RPMVERIFY_RDEV = (1 << 7), /*!< from %verify(rdev) */ - RPMVERIFY_CAPS = (1 << 8), /*!< from %verify(caps) (unimplemented) */ - /* bits 9-13 unused, reserved for rpmVerifyAttrs */ - RPMVERIFY_HMAC = (1 << 14), + RPMVERIFY_CAPS = (1 << 8), /*!< from %verify(caps) */ + /* bits 9-12 unused, reserved for rpmVerifyAttrs */ + RPMVERIFY_ACLS = (1 << 13), /*!< from %verify(acls) (unimplemented) */ + RPMVERIFY_HMAC = (1 << 14), /*!< from %verify(hmac) */ RPMVERIFY_CONTEXTS = (1 << 15), /*!< verify: from --nocontexts */ /* bits 16-22 used in rpmVerifyFlags */ /* bits 23-27 used in rpmQueryFlags */ @@ . patch -p0 <<'@@ .' Index: rpm/lib/rpmfi.c ============================================================================ $ cvs diff -u -r2.160.4.7 -r2.160.4.8 rpmfi.c --- rpm/lib/rpmfi.c 27 Jun 2016 03:10:04 -0000 2.160.4.7 +++ rpm/lib/rpmfi.c 5 May 2017 17:12:57 -0000 2.160.4.8 @@ -479,6 +479,32 @@ return fgroup; } +const char * rpmfiFCaps(rpmfi fi) +{ + const char * fcap = NULL; + + if (fi != NULL && fi->i >= 0 && fi->i < (int)fi->fc) { + if (fi->fcaps != NULL) + fcap = fi->fcaps[fi->i]; + else + fcap = ""; + } + return fcap; +} + +const char * rpmfiFLangs(rpmfi fi) +{ + const char * flang = NULL; + + if (fi != NULL && fi->i >= 0 && fi->i < (int)fi->fc) { + if (fi->flangs != NULL) + flang = fi->flangs[fi->i]; + else + flang = ""; + } + return flang; +} + void * rpmfiBloomFN(const rpmfi fi) { /*@-assignexpose -retexpose @*/ @@ -1347,6 +1373,7 @@ fi->obnl = _free(fi->obnl); fi->odnl = _free(fi->odnl); + fi->fcaps = _free(fi->fcaps); fi->fcontexts = _free(fi->fcontexts); fi->actions = _free(fi->actions); @@ -1569,6 +1596,7 @@ _fdupedata(h, RPMTAG_FILEMTIMES, rpmuint32_t *, fi->fmtimes); _fdupedata(h, RPMTAG_FILERDEVS, rpmuint16_t *, fi->frdevs); _fdupedata(h, RPMTAG_FILEINODES, rpmuint32_t *, fi->finodes); + _fdupedata(h, RPMTAG_FILECAPS, const char **, fi->fcaps); _fdupedata(h, RPMTAG_FILECONTEXTS, const char **, fi->fcontexts); fi->replacedSizes = (rpmuint32_t *) xcalloc(fi->fc, sizeof(*fi->replacedSizes)); @@ . patch -p0 <<'@@ .' Index: rpm/lib/rpmfi.h ============================================================================ $ cvs diff -u -r2.82.4.4 -r2.82.4.5 rpmfi.h --- rpm/lib/rpmfi.h 25 Jun 2016 09:49:39 -0000 2.82.4.4 +++ rpm/lib/rpmfi.h 5 May 2017 17:12:57 -0000 2.82.4.5 @@ -479,6 +479,22 @@ extern const char * rpmfiFGroup(rpmfi fi) RPM_GNUC_PURE; +/** + * Return current file cpabilities from file info set. + * @param fi file info set + * @return current file cpabilities, "" for none, NULL on invalid + */ +extern const char * rpmfiFCaps(rpmfi fi) + RPM_GNUC_PURE; + +/** + * Return current file language(s) from file info set. + * @param fi file info set + * @return current file langs, NULL on invalid + */ +extern const char * rpmfiFLangs(rpmfi fi) + RPM_GNUC_PURE; + /** \ingroup rpmfi * Return file path Bloom filter. * @param fi file info set @@ . patch -p0 <<'@@ .' Index: rpm/lib/rpmts.h ============================================================================ $ cvs diff -u -r2.134.2.10 -r2.134.2.11 rpmts.h --- rpm/lib/rpmts.h 17 Apr 2017 18:19:07 -0000 2.134.2.10 +++ rpm/lib/rpmts.h 5 May 2017 17:12:57 -0000 2.134.2.11 @@ -87,8 +87,8 @@ RPMTRANS_FLAG_NOFDIGESTS = (1 << 27), /*!< from --nofdigests */ RPMTRANS_FLAG_NOPRETRANS = (1 << 28), /*!< from --nopretrans */ RPMTRANS_FLAG_NOPOSTTRANS = (1 << 29), /*!< from --noposttrans */ - RPMTRANS_FLAG_NOCONFIGS = (1 << 30) /*!< from --noconfigs */ - /* 31 unused */ + RPMTRANS_FLAG_NOCONFIGS = (1 << 30), /*!< from --noconfigs */ + RPMTRANS_FLAG_NOCAPS = (1 << 31) /*!< from --nocaps */ } rpmtransFlags; #define _noTransScripts \ @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/iosm.c ============================================================================ $ cvs diff -u -r1.43.2.13 -r1.43.2.14 iosm.c --- rpm/rpmio/iosm.c 3 May 2017 14:50:45 -0000 1.43.2.13 +++ rpm/rpmio/iosm.c 5 May 2017 17:12:58 -0000 1.43.2.14 @@ -7,6 +7,7 @@ #include <rpmio_internal.h> /* XXX urlPath, fdGetCpioPos */ #include <rpmcb.h> /* XXX fnpyKey */ +#include <rpmcap.h> #include <ugid.h> /* XXX unameToUid() and gnameToGid() */ #include <rpmsq.h> /* XXX rpmsqJoin()/rpmsqThread() */ @@ -64,7 +65,7 @@ #define alloca_strdup(_s) strcpy((char *)alloca(strlen(_s)+1), (_s)) -#define _IOSM_DEBUG 0 +#define _IOSM_DEBUG -1 int _iosm_debug = _IOSM_DEBUG; int _iosm_threads = 0; @@ -688,6 +689,7 @@ iosm->iter = (IOSMI_t) mapInitIterator(fi, reverse); #if defined(_USE_RPMTS) iosm->iter->ts = rpmtsLink(ts, "mapIterator"); + iosm->nofcaps = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOCAPABILITIES); iosm->nofcontexts = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS); iosm->nofdigests = (ts != NULL && !(rpmtsFlags(ts) & RPMTRANS_FLAG_NOFDIGESTS)) @@ -698,6 +700,7 @@ #undef _tsmask #else iosm->iter->ts = (void *)_ts; + iosm->nofcaps = 1; iosm->nofcontexts = 1; iosm->nofdigests = 1; iosm->commit = 1; @@ -953,9 +956,7 @@ if (iosm->mapFlags & IOSM_MAP_GID) st->st_gid = gid; - /* - * Set file digest (if not disabled). - */ + /* Set file digest (if not disabled). */ if (!iosm->nofdigests) { iosm->fdigestalgo = fi->digestalgo; iosm->fdigest = (fi->fdigests ? fi->fdigests[i] : NULL); @@ -967,6 +968,12 @@ iosm->digestlen = 0; iosm->digest = NULL; } + + /* Set file capabilities (if not disabled). */ + if (!iosm->nofcaps) + iosm->fcaps = (fi->fcaps ? fi->fcaps[i] : NULL); + else + iosm->fcaps = NULL; } return 0; } @@ -1552,6 +1559,9 @@ ((_x)[sizeof("/dev/log")-1] == '\0' || \ (_x)[sizeof("/dev/log")-1] == ';')) +static const char iosmROpenFlags[] = "rb+em.fdio"; +static const char iosmWOpenFlags[] = "wb+etIONF.fdio"; + int iosmStage(IOSM_t iosm, iosmFileStage stage) { #ifdef NOTUSED @@ -2145,6 +2155,8 @@ rc = iosmNext(iosm, IOSM_CHOWN); if (!rc) rc = iosmNext(iosm, IOSM_CHMOD); + if (!rc) + rc = iosmNext(iosm, IOSM_SETCAP); if (!rc) { time_t mtime = st->st_mtime; if (fi->fmtimes) @@ -2325,6 +2337,16 @@ default: rc = IOSMERR_RMDIR_FAILED; break; } break; + case IOSM_SETCAP: + if (iosm->fcaps == NULL || *iosm->fcaps == '\0') + break; + rc = rpmcapSetFN(iosm->path, iosm->fcaps); + if (iosm->debug && (stage & IOSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, %s) %s\n", cur, + iosm->path, iosm->fcaps, + (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = IOSMERR_SETCAP_FAILED; + break; case IOSM_LSETFCON: { const char * iosmpath = NULL; if (iosm->fcontext == NULL || *iosm->fcontext == '\0' @@ -2515,7 +2537,7 @@ break; case IOSM_ROPEN: - iosm->rfd = Fopen(iosm->path, "rb+em.fdio"); + iosm->rfd = Fopen(iosm->path, iosmROpenFlags); if (iosm->rfd == NULL || Ferror(iosm->rfd) #if defined(POSIX_FADV_WILLNEED) || Fadvise(iosm->rfd, 0, 0, POSIX_FADV_WILLNEED) @@ -2529,8 +2551,8 @@ } iosm->rfdno = Fileno(iosm->rfd); /* XXX */ if (iosm->debug && (stage & IOSM_SYSCALL)) - rpmlog(RPMLOG_DEBUG, " %8s (%s, \"r\") rfd %p rdbuf %p\n", cur, - iosm->path, iosm->rfd, iosm->rdbuf); + rpmlog(RPMLOG_DEBUG, " %8s (%s, \"%s\") rfd %p rdbuf %p\n", cur, + iosm->path, iosmROpenFlags, iosm->rfd, iosm->rdbuf); break; case IOSM_READ: iosm->rdnb = Fread(iosm->rdbuf, sizeof(*iosm->rdbuf), iosm->rdlen, iosm->rfd); @@ -2552,7 +2574,7 @@ iosm->rfdno = -1; /* XXX */ break; case IOSM_WOPEN: - iosm->wfd = Fopen(iosm->path, "wb+etIONF?.fdio"); + iosm->wfd = Fopen(iosm->path, iosmWOpenFlags); if (iosm->wfd == NULL || Ferror(iosm->wfd)) { (void) iosmNext(iosm, IOSM_WCLOSE); rc = IOSMERR_OPEN_FAILED; @@ -2560,8 +2582,8 @@ } iosm->wfdno = Fileno(iosm->wfd); /* XXX */ if (iosm->debug && (stage & IOSM_SYSCALL)) - rpmlog(RPMLOG_DEBUG, " %8s (%s, \"w\") wfd %p wrbuf %p\n", cur, - iosm->path, iosm->wfd, iosm->wrbuf); + rpmlog(RPMLOG_DEBUG, " %8s (%s, \"%s\") wfd %p wrbuf %p\n", cur, + iosm->path, iosmWOpenFlags, iosm->wfd, iosm->wrbuf); /* Pre-allocate pages to avoid ENOSPC && metadata writes by *sync() */ if (RPMFD_ISSET(iosm->wfd, FALLOCATE) @@ -2680,6 +2702,7 @@ case IOSM_LINK: return "Link"; case IOSM_MKFIFO: return "Mkfifo"; case IOSM_MKNOD: return "Mknod"; + case IOSM_SETCAP: return "Setcap"; case IOSM_LSTAT: return "Lstat"; case IOSM_STAT: return "Stat"; case IOSM_READLINK: return "Readlink"; @@ -2743,6 +2766,7 @@ case IOSMERR_COPY_FAILED: s = "copy"; break; case IOSMERR_LSETFCON_FAILED: s = "lsetfilecon"; break; case IOSMERR_RESIZE_FAILED: s = "ftruncate"; break; + case IOSMERR_SETCAP_FAILED: s = "cap_set_file"; break; case IOSMERR_HDR_SIZE: s = _("Header size too big"); break; case IOSMERR_UNKNOWN_FILETYPE: s = _("Unknown file type"); break; @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/iosm.h ============================================================================ $ cvs diff -u -r1.18.4.7 -r1.18.4.8 iosm.h --- rpm/rpmio/iosm.h 3 May 2017 14:50:45 -0000 1.18.4.7 +++ rpm/rpmio/iosm.h 5 May 2017 17:12:58 -0000 1.18.4.8 @@ -89,16 +89,17 @@ IOSMERR_COPY_FAILED = (21 | IOSMERR_CHECK_ERRNO), IOSMERR_LSETFCON_FAILED = (22 | IOSMERR_CHECK_ERRNO), IOSMERR_RESIZE_FAILED = (23 | IOSMERR_CHECK_ERRNO), + IOSMERR_SETCAP_FAILED = (24 | IOSMERR_CHECK_ERRNO), - IOSMERR_HDR_SIZE = (24 ), - IOSMERR_HDR_TRAILER = (25 ), - IOSMERR_UNKNOWN_FILETYPE= (26 ), - IOSMERR_MISSING_HARDLINK= (27 ), - IOSMERR_DIGEST_MISMATCH = (28 ), - IOSMERR_INTERNAL = (29 ), - IOSMERR_UNMAPPED_FILE = (30 ), - IOSMERR_ENOENT = (31 ), - IOSMERR_ENOTEMPTY = (32 ) + IOSMERR_HDR_SIZE = (25 ), + IOSMERR_HDR_TRAILER = (26 ), + IOSMERR_UNKNOWN_FILETYPE= (27 ), + IOSMERR_MISSING_HARDLINK= (28 ), + IOSMERR_DIGEST_MISMATCH = (29 ), + IOSMERR_INTERNAL = (30 ), + IOSMERR_UNMAPPED_FILE = (31 ), + IOSMERR_ENOENT = (32 ), + IOSMERR_ENOTEMPTY = (33 ) }; #endif @@ -152,10 +153,11 @@ IOSM_LINK = _fs(45), IOSM_MKFIFO = _fs(46), IOSM_MKNOD = _fs(47), - IOSM_LSTAT = _fs(48), - IOSM_STAT = _fs(49), - IOSM_READLINK= _fs(50), - IOSM_CHROOT = _fs(51), + IOSM_SETCAP = _fs(48), + IOSM_LSTAT = _fs(49), + IOSM_STAT = _fs(50), + IOSM_READLINK= _fs(51), + IOSM_CHROOT = _fs(52), IOSM_NEXT = _fd(65), IOSM_EAT = _fd(66), @@ -262,7 +264,8 @@ int adding; /*!< Is the rpmte element type TR_ADDED? */ int debug; /*!< Print detailed operations? */ int nofdigests; /*!< Disable file digests? */ - int nofcontexts; /*!< Disable file conexts? */ + int nofcontexts; /*!< Disable file contexts? */ + int nofcaps; /*!< Disable file capabilities? */ iosmMapFlags mapFlags; /*!< Bit(s) to control mapping. */ rpmuint32_t fdigestalgo; /*!< Digest algorithm (~= PGPHASHALGO_MD5) */ rpmuint32_t digestlen; /*!< No. of bytes in binary digest (~= 16) */ @@ -271,6 +274,7 @@ const char * fdigest; /*!< Hex digest (usually MD5, NULL disables). */ const unsigned char * digest;/*!< Bin digest (usually MD5, NULL disables). */ const char * fcontext; /*!< File security context (NULL disables). */ + const char * fcaps; /*!< File capabilities (NULL disables). */ rpmuint32_t fflags; /*!< File flags. */ iosmFileAction action; /*!< File disposition. */ @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org