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]