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

Reply via email to