[CVS] RPM: rpm-5_3: rpm/lib/ rpmds.c rpm/rpmdb/ rpmevr.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Per Ãyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 13-Jul-2011 16:50:20 Branch: rpm-5_3 Handle: 2011071314502000 Modified files: (Branch: rpm-5_3) rpm/lib rpmds.c rpm/rpmdb rpmevr.c Log: fix regression introduced in previous commit Summary: RevisionChanges Path 2.167.2.17 +4 -3 rpm/lib/rpmds.c 1.36.2.5+4 -3 rpm/rpmdb/rpmevr.c patch -p0 <<'@@ .' Index: rpm/lib/rpmds.c $ cvs diff -u -r2.167.2.16 -r2.167.2.17 rpmds.c --- rpm/lib/rpmds.c 12 Jul 2011 10:45:03 - 2.167.2.16 +++ rpm/lib/rpmds.c 13 Jul 2011 14:50:20 - 2.167.2.17 @@ -4333,9 +4333,10 @@ case 'D':ix = RPMEVR_D; /*@switchbreak@*/break; } #if defined(RPM_VENDOR_MANDRIVA) /* mdvbz#55810 */ - if(ix == RPMEVR_R && (bFlags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL)) - && *(b->F[ix]) == '\0') - break; + if(ix >= RPMEVR_R && (bFlags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL)) + && !(ix == RPMEVR_D && (bFlags & RPMSENSE_LESS)) + && *(b->F[ix]) == '\0') + break; if (a->F[ix] && b->F[ix]) #else if (a->F[ix] && *a->F[ix] && b->F[ix] && *b->F[ix]) @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmevr.c $ cvs diff -u -r1.36.2.4 -r1.36.2.5 rpmevr.c --- rpm/rpmdb/rpmevr.c12 Jul 2011 10:45:04 - 1.36.2.4 +++ rpm/rpmdb/rpmevr.c13 Jul 2011 14:50:20 - 1.36.2.5 @@ -286,9 +286,10 @@ case 'D': ix = RPMEVR_D; /*@switchbreak@*/break; } #if defined(RPM_VENDOR_MANDRIVA) /* mdvbz#55810 */ - if(ix == RPMEVR_R && (b->Flags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL)) - && *(b->F[ix]) == '\0') - break; + if(ix >= RPMEVR_R && (b->Flags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL)) + && !(ix == RPMEVR_D && (b->Flags & RPMSENSE_LESS)) + && *(b->F[ix]) == '\0') + break; #endif rc = compare_values(a->F[ix], b->F[ix]); @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_3: rpm/lib/ rpmds.c rpmfc.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Per Ãyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 28-Apr-2011 17:49:04 Branch: rpm-5_3 Handle: 2011042815490400 Modified files: (Branch: rpm-5_3) rpm/lib rpmds.c rpmfc.c Log: queued changes for fixing uClibc() dependencies and also devel() dependencies, sorry for big commit.. Summary: RevisionChanges Path 2.167.2.15 +78 -11 rpm/lib/rpmds.c 1.73.2.10 +36 -1 rpm/lib/rpmfc.c patch -p0 <<'@@ .' Index: rpm/lib/rpmds.c $ cvs diff -u -r2.167.2.14 -r2.167.2.15 rpmds.c --- rpm/lib/rpmds.c 16 Apr 2011 14:39:46 - 2.167.2.14 +++ rpm/lib/rpmds.c 28 Apr 2011 15:49:04 - 2.167.2.15 @@ -2906,7 +2906,7 @@ if (isElf64) { /* XXX: eehhk, would've been nice with consistency, mandriva legacy... :| */ if (!devel && s[strlen(s)-1] != ')') - (void) stpcpy( stpcpy(tmp, s), "()(64bit)"); + tmp = stpcpy( stpcpy(tmp, s), "()(64bit)"); else { tmp = stpcpy(tmp, s); if (devel) @@ -2985,8 +2985,11 @@ scn = gelf_offscn (elf, phdr->p_offset); shdr = gelf_getshdr(scn, &shdr_mem); data = elf_getdata (scn, data); - interp_name = strdup(data->d_buf); - goto end; + if (data && data->d_buf) { + interp_name = strdup(data->d_buf); + goto end; + } + /* no 'data' most likely implies that this is an elf interpreter itself */ } if (elf_getshdrstrndx (elf, &shstrndx) >= 0) @@ -3006,6 +3009,15 @@ for (cnt = 0; cnt <= dynsize; ++cnt) { dyn = gelf_getdyn (data, cnt, &dyn_mem); + /* if this an elf interpeter, the only thing we want is to find SONAME + * and return it + */ + if (phdr) { + if (dyn->d_tag != DT_SONAME) + continue; + interp_name = strdup(elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val)); + goto end; + } if (rpath == NULL) { if (dyn->d_tag == DT_RPATH) rpath = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val); @@ -3015,7 +3027,7 @@ cnt = -1; continue; } - else if (rpath && DT_NEEDED == dyn->d_tag) { + else if (rpath && dyn->d_tag == DT_NEEDED) { char *tmp, *tmp2; char buf[1024]; char path[1024] = ""; @@ -3073,6 +3085,7 @@ strcpy(tmp, path_n); strcat(tmp, "/"); strcat(tmp, libpath); + if (stat(tmp, &statbuf) == 0 && statbuf.st_mode & S_IRUSR) { path[0] = '\0'; break; @@ -3504,6 +3517,7 @@ char buf[BUFSIZ]; const char * s; int is_executable; +int is_symlink; const char * soname = NULL; rpmds ds; int xx; @@ -3529,12 +3543,6 @@ if ((s = strrchr(fn, '.')) && strcmp(s, ".so")) return 0; -if ((lnklen = readlink(fn, path, MAXPATHLEN - 1)) == -1) { - warn("%s", fn); - return -1; -} -path[lnklen] = '\0'; - /*@-castfcnptr@*/ if (_rpmds_debug < 0) fprintf(stderr, "*** rpmdsELF(%s, %d, %p, %p)\n", fn, flags, (void *)add, context); @@ -3545,6 +3553,62 @@ if (lstat(fn, st) != 0) return -1; is_executable = (int)(st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)); + is_symlink = S_ISLNK(st->st_mode); +} + +if (is_symlink) { +#ifdef NOT_YET + if ((lnklen = readlink(fn, path, MAXPATHLEN - 1)) == -1) { + warn("%s", fn); + return -1; + } + /* XXX: unused, path should expand to absolute path... */ + path[lnklen] = '\0'; +#endif +} else { + FILE *fp = fopen(fn, "r"); + char buf[BUFSIZ]; + char *in; + stpcpy(path, fn); + fn = NULL; + if (fp == NULL || ferror(fp)) { + if (fp) (void) fclose(fp); + return -1; + } + /* try resolve ld scripts + * certainly *not* state of the art, but sho
[CVS] RPM: rpm-5_3: rpm/lib/ rpmds.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Per Ãyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 16-Apr-2011 16:39:46 Branch: rpm-5_3 Handle: 2011041614394600 Modified files: (Branch: rpm-5_3) rpm/lib rpmds.c Log: fix typo inverting (64bit) mark Summary: RevisionChanges Path 2.167.2.14 +1 -1 rpm/lib/rpmds.c patch -p0 <<'@@ .' Index: rpm/lib/rpmds.c $ cvs diff -u -r2.167.2.13 -r2.167.2.14 rpmds.c --- rpm/lib/rpmds.c 16 Apr 2011 14:29:44 - 2.167.2.13 +++ rpm/lib/rpmds.c 16 Apr 2011 14:39:46 - 2.167.2.14 @@ -2903,7 +2903,7 @@ tmp = stpcpy(tmp, "devel("); } #if !defined(__alpha__) && !defined(__sun) -if (!isElf64) { +if (isElf64) { /* XXX: eehhk, would've been nice with consistency, mandriva legacy... :| */ if (!devel && s[strlen(s)-1] != ')') (void) stpcpy( stpcpy(tmp, s), "()(64bit)"); @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_3: rpm/lib/ rpmds.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Per Ãyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 11-Apr-2011 07:10:20 Branch: rpm-5_3 Handle: 2011041105102000 Modified files: (Branch: rpm-5_3) rpm/lib rpmds.c Log: fix segfault in case 's == NULL', also use strrchr() rather than rindex() Summary: RevisionChanges Path 2.167.2.12 +2 -3 rpm/lib/rpmds.c patch -p0 <<'@@ .' Index: rpm/lib/rpmds.c $ cvs diff -u -r2.167.2.11 -r2.167.2.12 rpmds.c --- rpm/lib/rpmds.c 10 Apr 2011 22:57:27 - 2.167.2.11 +++ rpm/lib/rpmds.c 11 Apr 2011 05:10:20 - 2.167.2.12 @@ -3283,7 +3283,7 @@ /** \ingroup rpmds * Extract dependencies from a symlink. - * XXX Prototype added to keep GCC quite and avoid adding a symbol. + * XXX Prototype added to keep GCC quiet and avoid adding a symbol. * @param fn file name * @param flags 1: skip provides 2: skip requires * @param *add add(arg, ds) saves next provide/require symlink dependency. @@ -3331,8 +3331,7 @@ ARGV_t deps = NULL; /* Filename must end with ".so" to be devel(...) dependency. */ -s = rindex(fn, '.'); -if (strcmp(s, ".so")) +if ((s = strrchr(fn, '.')) && strcmp(s, ".so")) return 0; if ((lnklen = readlink(fn, path, MAXPATHLEN - 1)) == -1) { @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_3: rpm/lib/ rpmds.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Per Ãyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 10-Apr-2011 08:57:34 Branch: rpm-5_3 Handle: 2011041006573400 Modified files: (Branch: rpm-5_3) rpm/lib rpmds.c Log: filter out some redundant devel(...) dependencies Summary: RevisionChanges Path 2.167.2.10 +23 -10 rpm/lib/rpmds.c patch -p0 <<'@@ .' Index: rpm/lib/rpmds.c $ cvs diff -u -r2.167.2.9 -r2.167.2.10 rpmds.c --- rpm/lib/rpmds.c 10 Apr 2011 06:06:17 - 2.167.2.9 +++ rpm/lib/rpmds.c 10 Apr 2011 06:57:34 - 2.167.2.10 @@ -2905,21 +2905,19 @@ if (!devel && s[strlen(s)-1] != ')') (void) stpcpy( stpcpy(tmp, s), "()(64bit)"); else { - char *suffix; tmp = stpcpy(tmp, s); - if (devel && (suffix = strstr(t, ".so"))) - tmp = suffix; + if (devel) + tmp = strstr(t, ".so"); tmp = stpcpy(tmp, "(64bit)"); } }else #endif tmp = stpcpy(tmp, s); if (devel) { - char *suffix; - tmp = stpcpy(tmp, s); - if (devel && (suffix = strstr(t, ".so"))) + char *suffix = strstr(t, ".so"); + if (suffix) tmp = suffix; - (void) stpcpy(tmp, ")"); + tmp = stpcpy(tmp, ")"); } return t; @@ -3283,8 +3281,16 @@ int skipR = (flags & RPMELF_FLAG_SKIPREQUIRES); int lnklen; char path[MAXPATHLEN]; +/* + * We filter out these as they come with glibc, making dependencies on + * them rather redundant. + */ +const char *filterRequires[] = {"ld-linux", "ld64-linux" "libBrokenLocale.so", + "libanl.so", "libc.so", "libcidn.so", "libcrypt.so", "libdl.so", "libm.so", + "libnsl.so", "libnss_compat.so", "libnss_dns.so", "libnss_files.so", + "libnss_hesiod.so", "libnss_nis.so", "libnss_nisplus.so", "libpthread.so", + "libresolv.so", "librt.so", "libutil.so", "libthread_db.so"}; ARGV_t deps = NULL; -size_t nb = strlen(fn); /* Filename must end with ".so" to be devel(...) dependency. */ s = rindex(fn, '.'); @@ -3358,7 +3364,13 @@ s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val); assert(s != NULL); buf[0] = '\0'; - argvAdd(&deps, s); + + for (i = 0; i < (int)(sizeof(filterRequires)/sizeof(filterRequires[0])); i++) + if (!strncmp(s, filterRequires[i], strlen(filterRequires[i]))) + break; + + if (sizeof(filterRequires)/sizeof(filterRequires[0]) == i) + argvAdd(&deps, s); /*@switchbreak@*/ break; case DT_SONAME: gotSONAME = 1; @@ -3366,6 +3378,7 @@ assert(s != NULL); /* Add next provide dependency. */ buf[0] = '\0'; + if (!skipP) { ds = rpmdsSingle(RPMTAG_PROVIDENAME, sonameDep(buf, s, isElf64, 1), @@ -3384,7 +3397,7 @@ /*@=uniondef @*/ exit: -if (gotSONAME) +if (gotSONAME && !skipR) for (i = 0, cnt = argvCount(deps); i < cnt; i++) { ds = rpmdsSingle(RPMTAG_REQUIRENAME, sonameDep(buf, deps[i], isElf64, 1), @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_3: rpm/lib/ rpmds.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Per Ãyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 10-Apr-2011 08:06:17 Branch: rpm-5_3 Handle: 2011041006061700 Modified files: (Branch: rpm-5_3) rpm/lib rpmds.c Log: filename must end with '.so' to be a devel(...) dependency Summary: RevisionChanges Path 2.167.2.9 +6 -0 rpm/lib/rpmds.c patch -p0 <<'@@ .' Index: rpm/lib/rpmds.c $ cvs diff -u -r2.167.2.8 -r2.167.2.9 rpmds.c --- rpm/lib/rpmds.c 10 Apr 2011 05:54:55 - 2.167.2.8 +++ rpm/lib/rpmds.c 10 Apr 2011 06:06:17 - 2.167.2.9 @@ -3284,6 +3284,12 @@ int lnklen; char path[MAXPATHLEN]; ARGV_t deps = NULL; +size_t nb = strlen(fn); + +/* Filename must end with ".so" to be devel(...) dependency. */ +s = rindex(fn, '.'); +if (strcmp(s, ".so")) + return 0; if ((lnklen = readlink(fn, path, MAXPATHLEN - 1)) == -1) { warn("%s", fn); @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_3: rpm/lib/ rpmds.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Per Ãyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 10-Apr-2011 07:54:56 Branch: rpm-5_3 Handle: 2011041005545500 Modified files: (Branch: rpm-5_3) rpm/lib rpmds.c Log: return -1, not 0 on readlink() failure Summary: RevisionChanges Path 2.167.2.8 +1 -1 rpm/lib/rpmds.c patch -p0 <<'@@ .' Index: rpm/lib/rpmds.c $ cvs diff -u -r2.167.2.7 -r2.167.2.8 rpmds.c --- rpm/lib/rpmds.c 10 Apr 2011 05:53:25 - 2.167.2.7 +++ rpm/lib/rpmds.c 10 Apr 2011 05:54:55 - 2.167.2.8 @@ -3287,7 +3287,7 @@ if ((lnklen = readlink(fn, path, MAXPATHLEN - 1)) == -1) { warn("%s", fn); - return 0; + return -1; } path[lnklen] = '\0'; @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_3: rpm/lib/ rpmds.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Per Ãyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 10-Apr-2011 07:53:25 Branch: rpm-5_3 Handle: 2011041005532500 Modified files: (Branch: rpm-5_3) rpm/lib rpmds.c Log: return 0, not RPMRC_FAIL on readlink() failure Summary: RevisionChanges Path 2.167.2.7 +1 -1 rpm/lib/rpmds.c patch -p0 <<'@@ .' Index: rpm/lib/rpmds.c $ cvs diff -u -r2.167.2.6 -r2.167.2.7 rpmds.c --- rpm/lib/rpmds.c 10 Apr 2011 05:25:06 - 2.167.2.6 +++ rpm/lib/rpmds.c 10 Apr 2011 05:53:25 - 2.167.2.7 @@ -3287,7 +3287,7 @@ if ((lnklen = readlink(fn, path, MAXPATHLEN - 1)) == -1) { warn("%s", fn); - return RPMRC_FAIL; + return 0; } path[lnklen] = '\0'; @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_3: rpm/lib/ rpmds.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Per Ãyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 25-Jan-2011 15:48:13 Branch: rpm-5_3 Handle: 2011012514481000 Modified files: (Branch: rpm-5_3) rpm/lib rpmds.c Log: handle missing release & distepoch in rpmdsCompare() as well Summary: RevisionChanges Path 2.167.2.5 +7 -0 rpm/lib/rpmds.c patch -p0 <<'@@ .' Index: rpm/lib/rpmds.c $ cvs diff -u -r2.167.2.4 -r2.167.2.5 rpmds.c --- rpm/lib/rpmds.c 4 Nov 2010 21:34:03 - 2.167.2.4 +++ rpm/lib/rpmds.c 25 Jan 2011 14:48:10 - 2.167.2.5 @@ -3849,7 +3849,14 @@ case 'R':ix = RPMEVR_R; /*@switchbreak@*/break; case 'D':ix = RPMEVR_D; /*@switchbreak@*/break; } +#if defined(RPM_VENDOR_MANDRIVA) /* mdvbz#55810 */ + if(ix >= RPMEVR_R && (bFlags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL)) + && *(b->F[ix]) == '\0') + break; + if (a->F[ix] && b->F[ix]) +#else if (a->F[ix] && *a->F[ix] && b->F[ix] && *b->F[ix]) +#endif /*@i@*/ sense = EVRcmp(a->F[ix], b->F[ix]); if (sense) break; @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm-5_3: rpm/lib/ rpmds.c
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: 25-Oct-2010 07:26:17 Branch: rpm-5_3 Handle: 2010102505261700 Modified files: (Branch: rpm-5_3) rpm/lib rpmds.c Log: - indiana: -lelf doesn't support ELF notes. Summary: RevisionChanges Path 2.167.2.3 +2 -0 rpm/lib/rpmds.c patch -p0 <<'@@ .' Index: rpm/lib/rpmds.c $ cvs diff -u -r2.167.2.2 -r2.167.2.3 rpmds.c --- rpm/lib/rpmds.c 18 Sep 2010 19:47:29 - 2.167.2.2 +++ rpm/lib/rpmds.c 25 Oct 2010 05:26:17 - 2.167.2.3 @@ -2991,6 +2991,7 @@ continue; /*...@notreached@*/ /*...@switchbreak@*/ break; case SHT_NOTE: +#if !defined(__sun__)/* XXX OpenIndiana is ELF notes challenged. */ if (!(shdr->sh_flags & SHF_ALLOC)) continue; data = NULL; @@ -3034,6 +3035,7 @@ } } } +#endif /* @defined(__sun__) */ /*...@switchbreak@*/ break; case SHT_GNU_verdef: data = NULL; @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org