7 #define _RPMIOB_INTERNAL
10 #if defined(HAVE_KEYUTILS_H)
14 #define _RPMPGP_INTERNAL
24 #if defined(HAVE_KEYUTILS_H)
29 static int _kuCache = 1;
31 typedef struct _kuItem_s {
39 static struct _kuItem_s kuTable[] = {
40 {
"group", KEY_SPEC_GROUP_KEYRING },
41 {
"process", KEY_SPEC_PROCESS_KEYRING },
42 {
"session", KEY_SPEC_SESSION_KEYRING },
43 {
"thread", KEY_SPEC_THREAD_KEYRING },
44 {
"user", KEY_SPEC_USER_KEYRING },
45 {
"user_session", KEY_SPEC_USER_SESSION_KEYRING },
47 {
"???", KEY_SPEC_REQKEY_AUTH_KEY },
52 static size_t nkuTable =
sizeof(kuTable) /
sizeof(kuTable[0]);
55 kuCmp(
const void * a,
const void * b)
58 return strcmp(((_kuItem)a)->
name, ((_kuItem)b)->
name);
62 kuValue(
const char *
name)
67 if (name != NULL && *name !=
'\0') {
68 _kuItem tmp = memset(
alloca(
sizeof(*tmp)), 0,
sizeof(*tmp));
72 k = (_kuItem)bsearch(tmp, kuTable, nkuTable,
sizeof(kuTable[0]), kuCmp);
74 return (k != NULL ? k->val : 0);
84 pw = getpass( prompt ? prompt :
"" );
87 #if defined(HAVE_KEYUTILS_H)
89 const char * _keyutils_keyring
90 =
rpmExpand(
"%{?_keyutils_keyring}", NULL);
94 _keyutils_keyring =
_free(_keyutils_keyring);
98 key_serial_t keyring = (key_serial_t)
_kuKeyring;
99 size_t npw = strlen(pw);
100 (void) add_key(
"user",
"rpm:passwd", pw, npw, keyring);
101 (void) memset(pw, 0, npw);
102 pw =
"@u user rpm:passwd";
116 static char * password = NULL;
117 #if defined(HAVE_KEYUTILS_H)
118 const char * foo =
"user rpm:yyyy spoon";
121 key_serial_t dest = 0;
122 key_serial_t key = 0;
124 if (password != NULL) {
129 assert(av[0] != NULL);
130 assert(av[1] != NULL);
131 assert(av[2] != NULL);
132 key = request_key(av[0], av[1], av[2], dest);
135 xx = keyctl_read_alloc(key, (
void *)&password);
137 assert(password != NULL);
146 char * (*Getpass) (
const char * prompt) =
_GetPass;
154 #if defined(HAVE_KEYUTILS_H)
157 static const char krprefix[] =
"rpm:gpg:pubkey:";
158 key_serial_t keyring = (key_serial_t)
_kuKeyring;
160 char * krn =
alloca(strlen(krprefix) +
sizeof(
"12345678"));
164 (void)
snprintf(krfp,
sizeof(krfp),
"%08X",
pgpGrab(sigp->signid+4, 4));
165 krfp[
sizeof(krfp)-1] =
'\0';
169 key = keyctl_search(keyring,
"user", krn, 0);
170 xx = keyctl_read(key, NULL, 0);
173 xx = keyctl_read(key, (
char *)iob->b, iob->blen);
182 if (iob != NULL && iobp != NULL) {
198 #if defined(HAVE_KEYUTILS_H)
201 static const char krprefix[] =
"rpm:gpg:pubkey:";
202 key_serial_t keyring = (key_serial_t)
_kuKeyring;
204 char * krn =
alloca(strlen(krprefix) +
sizeof(
"12345678"));
206 (void)
snprintf(krfp,
sizeof(krfp),
"%08X",
pgpGrab(sigp->signid+4, 4));
207 krfp[
sizeof(krfp)-1] =
'\0';
211 (void) add_key(
"user", krn, iob->b, iob->blen, keyring);
223 #if defined(HAVE_KEYUTILS_H)
224 if (passPhrase && !strcmp(passPhrase,
"@u user rpm:passwd")) {
225 key_serial_t keyring = (key_serial_t)
_kuKeyring;
230 key = keyctl_search(keyring,
"user",
"rpm:passwd", 0);
232 xx = keyctl_read_alloc(key, (
void **)&pw);