7 #define _RPMIOB_INTERNAL
10 #if defined(HAVE_KEYUTILS_H)
22 #define _RPMPGP_INTERNAL
32 #if defined(HAVE_KEYUTILS_H)
37 static int _kuCache = 1;
39 typedef struct _kuItem_s {
47 static struct _kuItem_s kuTable[] = {
48 {
"group", KEY_SPEC_GROUP_KEYRING },
49 {
"process", KEY_SPEC_PROCESS_KEYRING },
50 {
"session", KEY_SPEC_SESSION_KEYRING },
51 {
"thread", KEY_SPEC_THREAD_KEYRING },
52 {
"user", KEY_SPEC_USER_KEYRING },
53 {
"user_session", KEY_SPEC_USER_SESSION_KEYRING },
55 {
"???", KEY_SPEC_REQKEY_AUTH_KEY },
60 static size_t nkuTable =
sizeof(kuTable) /
sizeof(kuTable[0]);
63 kuCmp(
const void * a,
const void * b)
66 return strcmp(((_kuItem)a)->
name, ((_kuItem)b)->
name);
70 kuValue(
const char *
name)
75 if (name != NULL && *name !=
'\0') {
76 _kuItem tmp = (_kuItem) memset(
alloca(
sizeof(*tmp)), 0,
sizeof(*tmp));
80 k = (_kuItem)bsearch(tmp, kuTable, nkuTable,
sizeof(kuTable[0]), kuCmp);
82 return (k != NULL ? k->val : 0);
92 pw = getpass( prompt ? prompt :
"" );
95 #if defined(HAVE_KEYUTILS_H)
97 const char * _keyutils_keyring
98 =
rpmExpand(
"%{?_keyutils_keyring}", NULL);
102 _keyutils_keyring =
_free(_keyutils_keyring);
106 key_serial_t keyring = (key_serial_t)
_kuKeyring;
107 size_t npw = strlen(pw);
108 (void) add_key(
"user",
"rpm:passwd", pw, npw, keyring);
109 (void) memset(pw, 0, npw);
110 pw = (
char *)
"@u user rpm:passwd";
124 static char * password = NULL;
125 #if defined(HAVE_KEYUTILS_H)
126 const char * foo =
"user rpm:yyyy spoon";
129 key_serial_t dest = 0;
130 key_serial_t key = 0;
132 if (password != NULL) {
137 assert(av[0] != NULL);
138 assert(av[1] != NULL);
139 assert(av[2] != NULL);
140 key = request_key(av[0], av[1], av[2], dest);
143 xx = keyctl_read_alloc(key, (
void **)&password);
145 if (password == NULL)
146 password = (
char *)
"";
155 char * (*Getpass) (
const char * prompt) =
_GetPass;
163 #if defined(HAVE_KEYUTILS_H)
166 static const char krprefix[] =
"rpm:gpg:pubkey:";
167 key_serial_t keyring = (key_serial_t)
_kuKeyring;
169 char * krn = (
char *)
alloca(strlen(krprefix) +
sizeof(
"12345678"));
173 (void)
snprintf(krfp,
sizeof(krfp),
"%08X",
pgpGrab(sigp->signid+4, 4));
174 krfp[
sizeof(krfp)-1] =
'\0';
178 key = keyctl_search(keyring,
"user", krn, 0);
179 xx = keyctl_read(key, NULL, 0);
182 xx = keyctl_read(key, (
char *)iob->b, iob->blen);
191 if (iob != NULL && iobp != NULL) {
207 #if defined(HAVE_KEYUTILS_H)
210 static const char krprefix[] =
"rpm:gpg:pubkey:";
211 key_serial_t keyring = (key_serial_t)
_kuKeyring;
213 char * krn = (
char *)
alloca(strlen(krprefix) +
sizeof(
"12345678"));
215 (void)
snprintf(krfp,
sizeof(krfp),
"%08X",
pgpGrab(sigp->signid+4, 4));
216 krfp[
sizeof(krfp)-1] =
'\0';
220 (void) add_key(
"user", krn, iob->b, iob->blen, keyring);
232 #if defined(HAVE_KEYUTILS_H)
233 if (passPhrase && !strcmp(passPhrase,
"@u user rpm:passwd")) {
234 key_serial_t keyring = (key_serial_t)
_kuKeyring;
239 key = keyctl_search(keyring,
"user",
"rpm:passwd", 0);
241 xx = keyctl_read_alloc(key, (
void **)&pw);