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:   05-Aug-2008 19:18:07
  Branch: HEAD                             Handle: 2008080517180601

  Modified files:
    rpm                     CHANGES macros.in
    rpm/rpmdb               pkgio.c signature.c
    rpm/rpmio               getpass.c librpmio.vers rpmiotypes.h

  Log:
    - jbj: keyutils: permit configurable keyring.

  Summary:
    Revision    Changes     Path
    1.2511      +1  -0      rpm/CHANGES
    1.252       +12 -1      rpm/macros.in
    1.88        +2  -2      rpm/rpmdb/pkgio.c
    1.53        +2  -2      rpm/rpmdb/signature.c
    1.12        +63 -2      rpm/rpmio/getpass.c
    2.74        +1  -0      rpm/rpmio/librpmio.vers
    1.9         +6  -0      rpm/rpmio/rpmiotypes.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.2510 -r1.2511 CHANGES
  --- rpm/CHANGES       1 Aug 2008 06:37:54 -0000       1.2510
  +++ rpm/CHANGES       5 Aug 2008 17:18:06 -0000       1.2511
  @@ -1,5 +1,6 @@
   
   5.1.0 -> 5.2a0:
  +    - jbj: keyutils: permit configurable keyring.
       - rse: fix building under --with-lzma by providing the necessary 64-bit 
defines for inclusion of <lzma.h>
       - jbj: QNX: use strtouq() instead of strtoul() in rpmmtree.
       - jbj: QNX: retrofit asprintf.h (from XAR) for the deprived. rpmmtree 
uses
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/macros.in
  ============================================================================
  $ cvs diff -u -r1.251 -r1.252 macros.in
  --- rpm/macros.in     29 Jul 2008 15:42:49 -0000      1.251
  +++ rpm/macros.in     5 Aug 2008 17:18:06 -0000       1.252
  @@ -1,7 +1,7 @@
   #/*! \page config_macros Default configuration: @USRLIBRPM@/macros
   # \verbatim
   #
  -# $Id: macros.in,v 1.251 2008/07/29 15:42:49 arekm Exp $
  +# $Id: macros.in,v 1.252 2008/08/05 17:18:06 jbj Exp $
   #
   # This is a global RPM configuration file. All changes made here will
   # be lost when the rpm package is upgraded. Any per-system configuration
  @@ -934,6 +934,17 @@
   %_vsflags_rebuilddb  %{__vsflags}
   %_vsflags_verify     %{__vsflags}
   
  +#    Choose keyutils keyring type:
  +#
  +#    group           KEY_SPEC_GROUP_KEYRING
  +#    process         KEY_SPEC_PROCESS_KEYRING
  +#    session         KEY_SPEC_SESSION_KEYRING
  +#    thread          KEY_SPEC_THREAD_KEYRING
  +#    user            KEY_SPEC_USER_KEYRING
  +#    user_session    KEY_SPEC_USER_SESSION_KEYRING
  +#
  +%_keyutils_keyring   process
  +
   #    Relations between package names that cause dependency loops
   #    with legacy packages that cannot be fixed. Relations are
   #    specified as
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/pkgio.c
  ============================================================================
  $ cvs diff -u -r1.87 -r1.88 pkgio.c
  --- rpm/rpmdb/pkgio.c 2 Aug 2008 16:36:10 -0000       1.87
  +++ rpm/rpmdb/pkgio.c 5 Aug 2008 17:18:07 -0000       1.88
  @@ -191,7 +191,7 @@
   #if defined(HAVE_KEYUTILS_H)
        /* Try keyutils keyring lookup. */
       if (krcache && ts->pkpkt == NULL) {
  -     key_serial_t keyring = KEY_SPEC_PROCESS_KEYRING;
  +     key_serial_t keyring = (key_serial_t) _kuKeyring;
        const char * krprefix = "rpm:gpg:pubkey:";
        char krfp[32];
        char * krn = alloca(strlen(krprefix) + sizeof("12345678"));
  @@ -326,7 +326,7 @@
   #if defined(HAVE_KEYUTILS_H)
        /* Save the pubkey in the keyutils keyring. */
        if (krcache) {
  -         key_serial_t keyring = KEY_SPEC_PROCESS_KEYRING;
  +         key_serial_t keyring = (key_serial_t) _kuKeyring;
            const char * krprefix = "rpm:gpg:pubkey:";
            char krfp[32];
            char * krn = alloca(strlen(krprefix) + sizeof("12345678"));
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/signature.c
  ============================================================================
  $ cvs diff -u -r1.52 -r1.53 signature.c
  --- rpm/rpmdb/signature.c     1 Aug 2008 18:24:56 -0000       1.52
  +++ rpm/rpmdb/signature.c     5 Aug 2008 17:18:07 -0000       1.53
  @@ -198,7 +198,7 @@
   
   #if defined(HAVE_KEYUTILS_H)
       if (passPhrase && !strcmp(passPhrase, "@u user rpm:passwd")) {
  -     key_serial_t keyring = KEY_SPEC_PROCESS_KEYRING;
  +     key_serial_t keyring = (key_serial_t) _kuKeyring;
        long key;
        int xx;
   
  @@ -543,7 +543,7 @@
   #if defined(HAVE_KEYUTILS_H)
       if (!strcmp(passPhrase, "@u user rpm:passwd")) {
        long key;
  -     key_serial_t keyring = KEY_SPEC_PROCESS_KEYRING;
  +     key_serial_t keyring = (key_serial_t) _kuKeyring;
   
   /[EMAIL PROTECTED]@*/
        key = keyctl_search(keyring, "user", "rpm:passwd", 0);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/getpass.c
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 getpass.c
  --- rpm/rpmio/getpass.c       12 Mar 2008 19:41:13 -0000      1.11
  +++ rpm/rpmio/getpass.c       5 Aug 2008 17:18:07 -0000       1.12
  @@ -3,13 +3,65 @@
    */
   
   #include "system.h"
  -#include "rpmio.h"
  +#include <rpmiotypes.h>
  +#include <rpmio.h>
   #if defined(HAVE_KEYUTILS_H)
  +#include <rpmmacro.h>
   #include <argv.h>
   #include <keyutils.h>
   #endif
   #include "debug.h"
   
  +#if defined(HAVE_KEYUTILS_H)
  +/[EMAIL PROTECTED]@*/
  +rpmint32_t _kuKeyring;
  +
  +typedef struct _kuItem_s {
  +/[EMAIL PROTECTED]@*/
  +    const char *name;
  +    key_serial_t val;
  +} * _kuItem;
  +
  +/* NB: the following table must be sorted lexically for bsearch(3). */
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  +static struct _kuItem_s kuTable[] = {
  +    { "group",               KEY_SPEC_GROUP_KEYRING },
  +    { "process",     KEY_SPEC_PROCESS_KEYRING },
  +    { "session",     KEY_SPEC_SESSION_KEYRING },
  +    { "thread",              KEY_SPEC_THREAD_KEYRING },
  +    { "user",                KEY_SPEC_USER_KEYRING },
  +    { "user_session",        KEY_SPEC_USER_SESSION_KEYRING },
  +#ifdef       NOTYET  /* XXX is this useful? */
  +  { "???",           KEY_SPEC_REQKEY_AUTH_KEY },
  +#endif
  +};
  +
  +/[EMAIL PROTECTED]@*/
  +static size_t nkuTable = sizeof(kuTable) / sizeof(kuTable[0]);
  +
  +static int
  +kuCmp(const void * a, const void * b)
  +     /[EMAIL PROTECTED]/
  +{
  +    return strcmp(((_kuItem)a)->name, ((_kuItem)b)->name);
  +}
  +
  +static key_serial_t
  +kuValue(const char * name)
  +     /[EMAIL PROTECTED] fileSystem @*/
  +     /[EMAIL PROTECTED] fileSystem @*/
  +{
  +    _kuItem k = NULL;
  +
  +    if (name != NULL && *name != '\0') {
  +     _kuItem tmp = memset(alloca(sizeof(*tmp)), 0, sizeof(*tmp));
  +     tmp->name = name;
  +     k = (_kuItem)bsearch(tmp, kuTable, nkuTable, sizeof(kuTable[0]), kuCmp);
  +    }
  +    return (k != NULL ? k->val :  0);
  +}
  +#endif
  +
   char * _GetPass(const char * prompt)
   {
       char * pw;
  @@ -19,9 +71,18 @@
   /[EMAIL PROTECTED]@*/
   
   #if defined(HAVE_KEYUTILS_H)
  +    if (_kuKeyring == 0) {
  +     const char * _keyutils_keyring
  +             = rpmExpand("%{?_keyutils_keyring}", NULL);
  +     _kuKeyring = kuValue(_keyutils_keyring);
  +     if (_kuKeyring == 0)
  +         _kuKeyring = KEY_SPEC_PROCESS_KEYRING;
  +     _keyutils_keyring = _free(_keyutils_keyring);
  +    }
  +
       if (pw && *pw) {
  +     key_serial_t keyring = (key_serial_t) _kuKeyring;
        size_t npw = strlen(pw);
  -     key_serial_t keyring = KEY_SPEC_PROCESS_KEYRING;
        (void) add_key("user", "rpm:passwd", pw, npw, keyring);
        (void) memset(pw, 0, npw);      /* burn the password */
        pw = "@u user rpm:passwd";
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/librpmio.vers
  ============================================================================
  $ cvs diff -u -r2.73 -r2.74 librpmio.vers
  --- rpm/rpmio/librpmio.vers   3 Aug 2008 19:59:09 -0000       2.73
  +++ rpm/rpmio/librpmio.vers   5 Aug 2008 17:18:07 -0000       2.74
  @@ -146,6 +146,7 @@
       iosmStrerror;
       iosmTeardown;
       isCompressed;
  +    _kuKeyring;
       Lchown;
       _Lchown;
       Link;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmiotypes.h
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 rpmiotypes.h
  --- rpm/rpmio/rpmiotypes.h    3 Aug 2008 19:59:09 -0000       1.8
  +++ rpm/rpmio/rpmiotypes.h    5 Aug 2008 17:18:07 -0000       1.9
  @@ -201,6 +201,12 @@
   };
   #endif
   
  +/**
  + * Keyutils keyring to use.
  + */
  +/[EMAIL PROTECTED]@*/
  +extern rpmint32_t _kuKeyring;
  +
   #ifdef __cplusplus
   extern "C" {
   #endif
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to