[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