RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  Module: rpm                              Date:   18-Mar-2008 19:42:40
  Branch: HEAD                             Handle: 2008031818423900

  Modified files:
    rpm/rpmio               rpmmtree.c

  Log:
    - jbj: rpmmtree: add digest verifies for spec <-> spec nodes.

  Summary:
    Revision    Changes     Path
    1.36        +66 -69     rpm/rpmio/rpmmtree.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmmtree.c
  ============================================================================
  $ cvs diff -u -r1.35 -r1.36 rpmmtree.c
  --- rpm/rpmio/rpmmtree.c      18 Mar 2008 17:37:30 -0000      1.35
  +++ rpm/rpmio/rpmmtree.c      18 Mar 2008 18:42:39 -0000      1.36
  @@ -390,6 +390,38 @@
       return k->val;
   }
   
  +static /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ const char *
  +algo2tagname(uint32_t algo)
  +     /[EMAIL PROTECTED]/
  +{
  +    const char * tagname = NULL;
  +
  +    switch (algo) {
  +    case PGPHASHALGO_MD5:    tagname = "md5digest";          break;
  +    case PGPHASHALGO_SHA1:   tagname = "sha1digest";         break;
  +    case PGPHASHALGO_RIPEMD160:      tagname = "rmd160digest";       break;
  +    case PGPHASHALGO_MD2:    tagname = "md2digest";          break;
  +    case PGPHASHALGO_TIGER192:       tagname = "tiger192digest";     break;
  +    case PGPHASHALGO_HAVAL_5_160: tagname = "haval160digest";        break;
  +    case PGPHASHALGO_SHA256: tagname = "sha256digest";       break;
  +    case PGPHASHALGO_SHA384: tagname = "sha384digest";       break;
  +    case PGPHASHALGO_SHA512: tagname = "sha512digest";       break;
  +    case PGPHASHALGO_MD4:    tagname = "md4digest";          break;
  +    case PGPHASHALGO_RIPEMD128:      tagname = "rmd128digest";       break;
  +    case PGPHASHALGO_CRC32:  tagname = "crc32";              break;
  +    case PGPHASHALGO_ADLER32:        tagname = "adler32";            break;
  +    case PGPHASHALGO_CRC64:  tagname = "crc64";              break;
  +    case PGPHASHALGO_JLU32:  tagname = "jlu32";              break;
  +    case PGPHASHALGO_SHA224: tagname = "sha224digest";       break;
  +    case PGPHASHALGO_RIPEMD256:      tagname = "rmd256digest";       break;
  +    case PGPHASHALGO_RIPEMD320:      tagname = "rmd320digest";       break;
  +    case PGPHASHALGO_SALSA10:        tagname = "salsa10";            break;
  +    case PGPHASHALGO_SALSA20:        tagname = "salsa20";            break;
  +    default:                 tagname = NULL;                 break;
  +    }
  +    return tagname;
  +}
  +
   #if defined(HAVE_ST_FLAGS)
   static const char *
   flags_to_string(u_long fflags)
  @@ -1756,16 +1788,18 @@
            printf(" uid=%lu", (unsigned long) n->sb.st_uid);
       }
   
  -#ifdef       NOTYET
  -    if (KF_ISSET(keys, MD5))
  -     printf(" md5digest=%s", n->md5digest);
  -    if (KF_ISSET(keys, SHA1))
  -     printf(" sha1digest=%s", n->sha1digest);
  -    if (KF_ISSET(keys, RMD160))
  -     printf(" rmd160digest=%s", n->rmd160digest);
  -    if (KF_ISSET(keys, SHA256))
  -     printf(" sha256digest=%s", n->sha256digest);
  -#endif
  +    /* Output all the digests. */
  +    if (KF_ISSET(keys, DIGEST)) {
  +     int i;
  +
  +     if (n->algos != NULL)
  +     for (i = 0; i < (int) n->algos->nvals; i++) {
  +         uint32_t algo = n->algos->vals[i];
  +         const char * tagname = algo2tagname(algo);
  +         if (tagname != NULL)
  +             printf(" %s=%s", tagname, n->digests[i]);
  +     }
  +    }
   
   #if defined(HAVE_ST_FLAGS)
       if (KF_ISSET(keys, FLAGS))
  @@ -1851,16 +1885,24 @@
       if (FF(n1, n2, MTREE_KEYS_UNAME, sb.st_uid))
        differs |= MTREE_KEYS_UNAME;
   
  -#ifdef       NOTYET
  -    if (FS(n1, n2, MTREE_KEYS_MD5, md5digest))
  -     differs |= MTREE_KEYS_MD5;
  -    if (FS(n1, n2, MTREE_KEYS_SHA1, sha1digest))
  -     differs |= MTREE_KEYS_SHA1;
  -    if (FS(n1, n2, MTREE_KEYS_RMD160, rmd160digest))
  -     differs |= MTREE_KEYS_RMD160;
  -    if (FS(n1, n2, MTREE_KEYS_SHA256, sha256digest))
  -     differs |= MTREE_KEYS_SHA256;
  -#endif
  +    /* Compare all the digests. */
  +    if (KF_ISSET(n1->flags, DIGEST) || KF_ISSET(n2->flags, DIGEST)) {
  +     if ((KF_ISSET(n1->flags, DIGEST) != KF_ISSET(n2->flags, DIGEST))
  +      || (n1->algos == NULL || n2->algos == NULL)
  +      || (n1->algos->nvals != n2->algos->nvals))
  +         differs |= MTREE_KEYS_DIGEST;
  +     else {
  +         int i;
  +
  +         for (i = 0; i < (int) n1->algos->nvals; i++) {
  +             if ((n1->algos->vals[i] == n2->algos->vals[i])
  +              && !strcmp(n1->digests[i], n2->digests[i]))
  +                 continue;
  +             differs |= MTREE_KEYS_DIGEST;
  +             break;
  +         }
  +     }
  +    }
   
   #if defined(HAVE_ST_FLAGS)
       if (FF(n1, n2, MTREE_KEYS_FLAGS, sb.st_flags))
  @@ -2588,7 +2630,6 @@
                const char * digest = NULL;
                size_t digestlen = 0;
                uint32_t algo;
  -             const char * tagname;
   
                algo = fts->algos->vals[i];
                fdFiniDigest(fd, algo, &digest, &digestlen, asAscii);
  @@ -2598,59 +2639,15 @@
                if (digest == NULL)
                    mtree_error("%s: %s", fts_accpath, Fstrerror(fd));
   #endif
  -             tagname = NULL;
  -             switch (algo) {
  -             case PGPHASHALGO_MD5:
  -                 tagname = "md5digest";      /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_SHA1:
  -                 tagname = "sha1digest";     /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_RIPEMD160:
  -                 tagname = "rmd160digest";   /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_MD2:
  -                 tagname = "md2digest";      /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_TIGER192:
  -                 tagname = "tiger192digest"; /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_HAVAL_5_160:
  -                 tagname = "haval160digest"; /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_SHA256:
  -                 tagname = "sha256digest";   /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_SHA384:
  -                 tagname = "sha384digest";   /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_SHA512:
  -                 tagname = "sha512digest";   /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_MD4:
  -                 tagname = "md4digest";      /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_RIPEMD128:
  -                 tagname = "rmd128digest";   /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_CRC32:
  -                 tagname = "crc32";          /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_ADLER32:
  -                 tagname = "adler32";        /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_CRC64:
  -                 tagname = "crc64";          /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_JLU32:
  -                 tagname = "jlu32";          /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_SHA224:
  -                 tagname = "sha224digest";   /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_RIPEMD256:
  -                 tagname = "rmd256digest";   /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_RIPEMD320:
  -                 tagname = "rmd320digest";   /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_SALSA10:
  -                 tagname = "salsa10";        /[EMAIL PROTECTED]@*/ break;
  -             case PGPHASHALGO_SALSA20:
  -                 tagname = "salsa20";        /[EMAIL PROTECTED]@*/ break;
  -             default:
  -                 tagname = NULL;
  +             {   const char * tagname = algo2tagname(algo);
  +                 if (tagname != NULL)
  +                     output(indent, &offset, "%s=%s", tagname, digest);
                }
  -             if (tagname != NULL)
  -                 output(indent, &offset, "%s=%s", tagname, digest);
                digest = _free(digest);
                digestlen = 0;
            }
   
  -     /* Accumulate statistics and clean up. */
  -cleanup:
  +cleanup:    /* Accumulate statistics and clean up. */
            if (fd != NULL) {
                (void) rpmswAdd(&dc_readops, fdstat_op(fd, FDSTAT_READ));
                (void) rpmswAdd(&dc_digestops, fdstat_op(fd, FDSTAT_DIGEST));
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to