From c305927d5d7e7e4a4bb13e168c7888c6fa1d7e33 Mon Sep 17 00:00:00 2001 From: jbj Date: Sat, 3 Jan 2004 21:43:10 +0000 Subject: [PATCH] Add %policy marker to suck *.te content into metadata. CVS patchset: 7062 CVS date: 2004/01/03 21:43:10 --- build/files.c | 55 ++++++++++++++++++++++++++++++++++++++++--------------- lib/rpmlib.h | 10 ++++++---- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/build/files.c b/build/files.c index 3316e5f..6cc3b3b 100644 --- a/build/files.c +++ b/build/files.c @@ -870,6 +870,7 @@ VFA_t virtualFileAttributes[] = { { "%readme", 0, RPMFILE_README }, { "%license", 0, RPMFILE_LICENSE }, { "%pubkey", 0, RPMFILE_PUBKEY }, + { "%policy", 0, RPMFILE_POLICY }, #if WHY_NOT { "%icon", 0, RPMFILE_ICON }, @@ -970,7 +971,9 @@ static int parseForSimple(/*@unused@*/Spec spec, Package pkg, char * buf, 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 */ @@ -1133,7 +1136,7 @@ static void genCpioListAndHeader(/*@partial@*/ FileList fl, 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) && @@ -1732,13 +1735,14 @@ static int recurseDir(FileList fl, const char * diskURL) } /** - * 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, @@ -1757,23 +1761,40 @@ static int processPubkeyFile(Package pkg, FileList fl, const char * fileURL) 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; @@ -2058,7 +2079,11 @@ static int processPackageFiles(Spec spec, Package pkg, 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 */ diff --git a/lib/rpmlib.h b/lib/rpmlib.h index 81ab496..ad6d4d8 100644 --- a/lib/rpmlib.h +++ b/lib/rpmlib.h @@ -415,8 +415,9 @@ typedef enum rpmTag_e { 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@*/ @@ -452,9 +453,10 @@ typedef enum rpmfileAttrs_e { 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) -- 2.7.4