diff options
-rw-r--r-- | CHANGES | 1 | ||||
-rw-r--r-- | build/rpmfc.c | 19 | ||||
-rw-r--r-- | rpm.spec.in | 1 |
3 files changed, 12 insertions, 9 deletions
@@ -48,6 +48,7 @@ - debug_packages "works", but non-noarch w/o %setup has empty payload. - make dependency generation "opt-in" in order to build in distro. - fix: make sure each library has DT_NEEDED for all unresolved syms. + - generate Elf provides even if file is not executable. 4.0.4 -> 4.1: - loosely wire beecrypt library into rpm. diff --git a/build/rpmfc.c b/build/rpmfc.c index a3e7621a4..9bc236990 100644 --- a/build/rpmfc.c +++ b/build/rpmfc.c @@ -737,6 +737,7 @@ static int rpmfcELF(rpmfc fc) char buf[BUFSIZ]; const char * s; unsigned char deptype; + struct stat sb, * st = &sb; const char * soname = NULL; rpmds * depsp, this; int_32 tagN, dsContext; @@ -744,6 +745,10 @@ static int rpmfcELF(rpmfc fc) int xx; int isElf64; + /* Files with executable bit set only. */ + if (stat(fn, st) != 0) + return(-1); + fdno = open(fn, O_RDONLY); if (fdno < 0) return fdno; @@ -831,7 +836,8 @@ static int rpmfcELF(rpmfc fc) case SHT_GNU_verneed: deptype = 'R'; data = NULL; - if (!fc->skipReq) + /* Files with executable bit set only. */ + if (!fc->skipReq && (st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH))) while ((data = elf_getdata (scn, data)) != NULL) { offset = 0; for (cnt = shdr->sh_info; --cnt >= 0; ) { @@ -895,9 +901,10 @@ static int rpmfcELF(rpmfc fc) /*@innercontinue@*/ continue; /*@notreached@*/ /*@switchbreak@*/ break; case DT_NEEDED: - /* Add to package requires. */ - if (fc->skipReq) + /* Files with executable bit set only. */ + if (fc->skipReq || !(st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH))) /*@innercontinue@*/ continue; + /* Add to package requires. */ deptype = 'R'; depsp = &fc->requires; tagN = RPMTAG_REQUIRENAME; @@ -978,7 +985,6 @@ int rpmfcApply(rpmfc fc) const char * N; const char * EVR; int_32 Flags; - struct stat sb, * st = &sb; unsigned char deptype; int nddict; int previx; @@ -992,11 +998,6 @@ int rpmfcApply(rpmfc fc) for (fc->ix = 0; fc->fn[fc->ix] != NULL; fc->ix++) { rpmfcApplyTbl fcat; - /* Files with executable bit set only. */ - if (stat(fc->fn[fc->ix], st) != 0 - || !(st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH))) - continue; - for (fcat = rpmfcApplyTable; fcat->func != NULL; fcat++) { if (!(fc->fcolor->vals[fc->ix] & fcat->colormask)) /*@innercontinue@*/ continue; diff --git a/rpm.spec.in b/rpm.spec.in index 3638d87a9..c34421cd2 100644 --- a/rpm.spec.in +++ b/rpm.spec.in @@ -463,6 +463,7 @@ exit 0 * Sat Dec 14 2002 Jeff Johnson <jbj@redhat.com> 4.2-0.25 - rebuild rpm with internal dependency generation enabled. - fix: make sure each library has DT_NEEDED for all unresolved syms. +- generate Elf provides even if file is not executable. * Fri Dec 13 2002 Jeff Johnson <jbj@redhat.com> 4.2-0.24 - debug_packages "works", but non-noarch w/o %setup has empty payload. |