[prev in list] [next in list] [prev in thread] [next in thread]
List: rpm-cvs
Subject: [CVS] RPM: rpm-4_5: rpm/ CHANGES rpm/lib/ package.c rpm/rpmio/ librpmi...
From: "Jeff Johnson" <jbj () rpm5 ! org>
Date: 2008-06-22 19:28:55
Message-ID: 20080622192855.6B3E534844C () rpm5 ! org
[Download RAW message or body]
RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 22-Jun-2008 21:28:55
Branch: rpm-4_5 Handle: 2008062219285202
Modified files: (Branch: rpm-4_5)
rpm CHANGES
rpm/lib package.c
rpm/rpmio librpmio.vers rpmdav.c rpmio.h rpmrpc.c
rpm/tools rpmmtree.c rpmrepo.c
Log:
- fix: python ts.hdrFromFdno(fdno) segfault.
- use Realpath(3) so that RPMTAG_PACKAGEORIGIN has absolute path.
- rpmio: add Realpath(3).
Summary:
Revision Changes Path
1.1360.2.113+3 -0 rpm/CHANGES
2.134.2.5 +1 -1 rpm/lib/package.c
2.2.2.5 +2 -0 rpm/rpmio/librpmio.vers
2.32.2.6 +7 -0 rpm/rpmio/rpmdav.c
1.51.2.5 +7 -0 rpm/rpmio/rpmio.h
2.49.2.4 +91 -0 rpm/rpmio/rpmrpc.c
2.1.6.4 +2 -2 rpm/tools/rpmmtree.c
1.1.2.10 +0 -1 rpm/tools/rpmrepo.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1360.2.112 -r1.1360.2.113 CHANGES
--- rpm/CHANGES 22 Jun 2008 18:12:24 -0000 1.1360.2.112
+++ rpm/CHANGES 22 Jun 2008 19:28:52 -0000 1.1360.2.113
@@ -1,4 +1,7 @@
4.4.9 -> 4.5:
+ - jbj: fix: python ts.hdrFromFdno(fdno) segfault.
+ - jbj: use Realpath(3) so that RPMTAG_PACKAGEORIGIN has absolute path.
+ - jbj: rpmio: add Realpath(3).
- robert: python: backport rpm.archscore() and rpm.platformscore()
for smart depsolving usage
- robert: rpmrepo: enable/disable sqlite dependent on rest of rpm
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/package.c
============================================================================
$ cvs diff -u -r2.134.2.4 -r2.134.2.5 package.c
--- rpm/lib/package.c 27 May 2008 15:52:56 -0000 2.134.2.4
+++ rpm/lib/package.c 22 Jun 2008 19:28:52 -0000 2.134.2.5
@@ -959,7 +959,7 @@
int ut = urlPath(origin, &lpath);
ut = ut; /* XXX keep gcc quiet. */
if (lpath && *lpath != '/') {
- char * rpath = realpath(origin, NULL);
+ char * rpath = Realpath(origin, NULL);
(void) headerSetOrigin(h, rpath);
rpath = _free(rpath);
} else
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/librpmio.vers
============================================================================
$ cvs diff -u -r2.2.2.4 -r2.2.2.5 librpmio.vers
--- rpm/rpmio/librpmio.vers 5 Jun 2008 20:00:19 -0000 2.2.2.4
+++ rpm/rpmio/librpmio.vers 22 Jun 2008 19:28:53 -0000 2.2.2.5
@@ -39,6 +39,7 @@
davOpendir;
davRead;
davReaddir;
+ davRealpath;
davRename;
davReq;
davResp;
@@ -142,6 +143,7 @@
prpsoffsets64;
Readdir;
Readlink;
+ Realpath;
Rename;
_RequestPass;
Rmdir;
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/rpmdav.c
============================================================================
$ cvs diff -u -r2.32.2.5 -r2.32.2.6 rpmdav.c
--- rpm/rpmio/rpmdav.c 10 Jun 2008 08:27:45 -0000 2.32.2.5
+++ rpm/rpmio/rpmdav.c 22 Jun 2008 19:28:53 -0000 2.32.2.6
@@ -1829,3 +1829,10 @@
/*@=kepttrans@*/
}
/*@=modfilesys@*/
+
+char * davRealpath(const char * path, char * resolved_path)
+{
+assert(resolved_path == NULL); /* XXX no POSIXly broken realpath(3) here. */
+ /* XXX TODO: handle redirects. For now, just dupe the path. */
+ return xstrdup(path);
+}
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/rpmio.h
============================================================================
$ cvs diff -u -r1.51.2.4 -r1.51.2.5 rpmio.h
--- rpm/rpmio/rpmio.h 31 May 2008 18:59:06 -0000 1.51.2.4
+++ rpm/rpmio/rpmio.h 22 Jun 2008 19:28:53 -0000 1.51.2.5
@@ -409,6 +409,13 @@
/*@modifies *dir, errno, fileSystem @*/;
/**
+ * realpath(3) clone.
+ */
+char * Realpath(const char * path, /*@out@*/ /*@null@*/ char * resolved_path)
+ /*@globals errno, fileSystem, internalState @*/
+ /*@modifies *resolved_path, errno, fileSystem, internalState @*/;
+
+/**
* lseek(2) clone.
* @todo Implement SEEK_HOLE/SEEK_DATA.
*/
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/rpmrpc.c
============================================================================
$ cvs diff -u -r2.49.2.3 -r2.49.2.4 rpmrpc.c
--- rpm/rpmio/rpmrpc.c 31 May 2008 18:59:06 -0000 2.49.2.3
+++ rpm/rpmio/rpmrpc.c 22 Jun 2008 19:28:53 -0000 2.49.2.4
@@ -1286,6 +1286,15 @@
}
/*@=boundswrite@*/
+
+static char * ftpRealpath(const char * path, /*@null@*/ char * resolved_path)
+ /*@*/
+{
+assert(resolved_path == NULL); /* XXX no POSIXly broken realpath(3) here. */
+ /* XXX TODO: handle redirects. For now, just dupe the path. */
+ return xstrdup(path);
+}
+
int Stat(const char * path, struct stat * st)
{
const char * lpath;
@@ -1776,6 +1785,88 @@
return closedir(dir);
}
+char * Realpath(const char * path, /*@null@*/ char * resolved_path)
+{
+ const char * lpath;
+ int ut = urlPath(path, &lpath);
+ char * rpath;
+
+if (_rpmio_debug)
+fprintf(stderr, "*** Realpath(%s, %s)\n", path, (resolved_path ? resolved_path : "NULL"));
+/*@-nullpass@*/
+ /* XXX if POSIXly broken realpath(3) is desired, do that. */
+ /* XXX note: preserves current rpmlib realpath(3) usage cases. */
+ if (path == NULL || resolved_path != NULL)
+ return realpath(path, resolved_path);
+/*@=nullpass@*/
+
+ switch (ut) {
+ case URL_IS_FTP:
+ return ftpRealpath(path, resolved_path);
+ /*@notreached@*/ break;
+ case URL_IS_HTTPS:
+ case URL_IS_HTTP:
+ case URL_IS_HKP:
+#ifdef WITH_NEON
+ return davRealpath(path, resolved_path);
+ /*@notreached@*/ break;
+#endif
+ /*@fallthrough@*/
+ default:
+ return xstrdup(path);
+ /*@notreached@*/ break;
+ case URL_IS_DASH:
+ /* non-GLIBC systems => EINVAL. non-linux systems => EINVAL */
+#if defined(__linux__)
+ lpath = "/dev/stdin";
+#else
+ lpath = NULL;
+#endif
+ break;
+ case URL_IS_PATH: /* XXX note: file:/// prefix is dropped. */
+ case URL_IS_UNKNOWN:
+ path = lpath;
+ break;
+ }
+
+ if (lpath == NULL || *lpath == '/')
+/*@-nullpass@*/ /* XXX glibc extension */
+ rpath = realpath(lpath, resolved_path);
+/*@=nullpass@*/
+ else {
+ char * t;
+#if defined(__GLIBC__)
+ char * dn = NULL;
+#else
+ char dn[PATH_MAX];
+ dn[0] = '\0';
+#endif
+ /*
+ * Using realpath on lpath isn't correct if the lpath is a symlink,
+ * especially if the symlink is a dangling link. What we
+ * do instead is use realpath() on `.' and then append lpath to
+ * the result.
+ */
+ if ((t = realpath(".", dn)) != NULL) {
+/*@-mods@*/ /* XXX no rpmGlobalMacroContext mods please. */
+ rpath = (char *) rpmGetPath(t, "/", lpath, NULL);
+ /* XXX preserve the pesky trailing '/' */
+ if (lpath[strlen(lpath)-1] == '/') {
+ char * s = rpath;
+ rpath = rpmExpand(s, "/", NULL);
+ s = _free(s);
+ }
+/*@=mods@*/
+ } else
+ rpath = NULL;
+#if defined(__GLIBC__)
+ t = _free(t);
+#endif
+ }
+
+ return rpath;
+}
+
off_t Lseek(int fdno, off_t offset, int whence)
{
if (_rpmio_debug)
@@ .
patch -p0 <<'@@ .'
Index: rpm/tools/rpmmtree.c
============================================================================
$ cvs diff -u -r2.1.6.3 -r2.1.6.4 rpmmtree.c
--- rpm/tools/rpmmtree.c 16 Jun 2008 13:22:26 -0000 2.1.6.3
+++ rpm/tools/rpmmtree.c 22 Jun 2008 19:28:54 -0000 2.1.6.4
@@ -3742,9 +3742,9 @@
/* Convert to absolute/clean/malloc'd path. */
if (lpath[0] != '/') {
/* XXX GLIBC: realpath(path, NULL) return malloc'd */
- rpath = realpath(lpath, NULL);
+ rpath = Realpath(lpath, NULL);
if (rpath == NULL)
- rpath = realpath(lpath, fullpath);
+ rpath = Realpath(lpath, fullpath);
if (rpath == NULL)
mtree_error("Realpath(%s): %s", lpath, strerror(errno));
lpath = rpmGetPath(rpath, NULL);
@@ .
patch -p0 <<'@@ .'
Index: rpm/tools/rpmrepo.c
============================================================================
$ cvs diff -u -r1.1.2.9 -r1.1.2.10 rpmrepo.c
--- rpm/tools/rpmrepo.c 21 Jun 2008 19:45:19 -0000 1.1.2.9
+++ rpm/tools/rpmrepo.c 22 Jun 2008 19:28:54 -0000 1.1.2.10
@@ -2,7 +2,6 @@
* \file rpmio/rpmrepo.c
*/
-#define Realpath realpath
#define Closedir closedir
#define rpmioInit rpmcliInit
@@ .
______________________________________________________________________
RPM Package Manager http://rpm5.org
CVS Sources Repository rpm-cvs@rpm5.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic