{ "%readme", 0, RPMFILE_README },
{ "%license", 0, RPMFILE_LICENSE },
{ "%pubkey", 0, RPMFILE_PUBKEY },
+ { "%policy", 0, RPMFILE_POLICY },
#if WHY_NOT
{ "%icon", 0, RPMFILE_ICON },
specialDoc = 1;
strcat(specialDocBuf, " ");
strcat(specialDocBuf, s);
- } else if (fl->currentFlags & (RPMFILE_PUBKEY|RPMFILE_ICON)) {
+ } else
+ if (fl->currentFlags & (RPMFILE_POLICY|RPMFILE_PUBKEY|RPMFILE_ICON))
+ {
*fileName = s;
} else {
/* not in %doc, does not begin with / -- error */
sx = rpmsxNew(sxfn);
for (i = 0, flp = fl->fileList; i < fl->fileListRecsUsed; i++, flp++) {
- char *s;
+ const char *s;
/* Merge duplicate entries. */
while (i < (fl->fileListRecsUsed - 1) &&
}
/**
- * Add a pubkey to a binary package.
+ * Add a pubkey/policy/icon to a binary package.
* @param pkg
* @param fl package file tree walk data
* @param fileURL path to file, relative is builddir, absolute buildroot.
* @return 0 on success
*/
-static int processPubkeyFile(Package pkg, FileList fl, const char * fileURL)
+static int processMetadataFile(Package pkg, FileList fl, const char * fileURL,
+ rpmTag tag)
/*@globals check_fileList, rpmGlobalMacroContext, h_errno,
fileSystem, internalState @*/
/*@modifies pkg->header, *fl, fl->processingFailed,
int xx;
(void) urlPath(fileURL, &fn);
- if (*fn == '/') {
+ if (*fn == '/') {
fn = rpmGenPath(fl->buildRootURL, NULL, fn);
absolute = 1;
- } else
+ } else
fn = rpmGenPath(buildURL, NULL, fn);
- if ((rc = pgpReadPkts(fn, &pkt, &pktlen)) <= 0) {
- rpmError(RPMERR_BADSPEC, _("%s: public key read failed.\n"), fn);
- goto exit;
- }
- if (rc != PGPARMOR_PUBKEY) {
- rpmError(RPMERR_BADSPEC, _("%s: not an armored public key.\n"), fn);
+ switch (tag) {
+ default:
+ rpmError(RPMERR_BADSPEC, _("%s: can't load unknwon tag (%d).\n"),
+ fn, tag);
goto exit;
+ /*@notreached@*/
+ case RPMTAG_PUBKEYS:
+ if ((rc = pgpReadPkts(fn, &pkt, &pktlen)) <= 0) {
+ rpmError(RPMERR_BADSPEC, _("%s: public key read failed.\n"), fn);
+ goto exit;
+ }
+ if (rc != PGPARMOR_PUBKEY) {
+ rpmError(RPMERR_BADSPEC, _("%s: not an armored public key.\n"), fn);
+ goto exit;
+ }
+ apkt = pgpArmorWrap(PGPARMOR_PUBKEY, pkt, pktlen);
+ break;
+ case RPMTAG_POLICIES:
+ if ((rc = rpmioSlurp(fn, &pkt, &pktlen)) != 0) {
+ rpmError(RPMERR_BADSPEC, _("%s: *.te policy read failed.\n"), fn);
+ goto exit;
+ }
+ apkt = (const char *) pkt; /* XXX unsigned char */
+ pkt = NULL;
+ break;
}
- apkt = pgpArmorWrap(PGPARMOR_PUBKEY, pkt, pktlen);
- xx = headerAddOrAppendEntry(pkg->header, RPMTAG_PUBKEYS,
+ xx = headerAddOrAppendEntry(pkg->header, tag,
RPM_STRING_ARRAY_TYPE, &apkt, 1);
rc = 0;
dupAttrRec(&fl.cur_ar, specialDocAttrRec);
} else if (fl.currentFlags & RPMFILE_PUBKEY) {
/*@-nullstate@*/ /* FIX: pkg->fileFile might be NULL */
- (void) processPubkeyFile(pkg, &fl, fileName);
+ (void) processMetadataFile(pkg, &fl, fileName, RPMTAG_PUBKEYS);
+/*@=nullstate@*/
+ } else if (fl.currentFlags & RPMFILE_POLICY) {
+/*@-nullstate@*/ /* FIX: pkg->fileFile might be NULL */
+ (void) processMetadataFile(pkg, &fl, fileName, RPMTAG_POLICIES);
/*@=nullstate@*/
} else {
/*@-nullstate@*/ /* FIX: pkg->fileFile might be NULL */
RPMTAG_DEPENDSDICT = 1145,
RPMTAG_SOURCEPKGID = 1146,
RPMTAG_FILECONTEXTS = 1147,
- RPMTAG_FSCONTEXTS = 1148,
- RPMTAG_RECONTEXTS = 1149,
+ RPMTAG_FSCONTEXTS = 1148, /*!< extension */
+ RPMTAG_RECONTEXTS = 1149, /*!< extension */
+ RPMTAG_POLICIES = 1150, /*!< selinux *.te policy file. */
/*@-enummemuse@*/
RPMTAG_FIRSTFREE_TAG /*!< internal */
/*@=enummemuse@*/
RPMFILE_GHOST = (1 << 6), /*!< from %%ghost */
RPMFILE_LICENSE = (1 << 7), /*!< from %%license */
RPMFILE_README = (1 << 8), /*!< from %%readme */
- RPMFILE_EXCLUDE = (1 << 9), /*!< from %%exclude */
+ RPMFILE_EXCLUDE = (1 << 9), /*!< from %%exclude, internal */
RPMFILE_UNPATCHED = (1 << 10), /*!< placeholder (SuSE) */
- RPMFILE_PUBKEY = (1 << 11) /*!< from %%pubkey */
+ RPMFILE_PUBKEY = (1 << 11), /*!< from %%pubkey */
+ RPMFILE_POLICY = (1 << 12) /*!< from %%policy */
} rpmfileAttrs;
#define RPMFILE_ALL ~(RPMFILE_NONE)