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 {
"reqkey_auth", KEY_SPEC_REQKEY_AUTH_KEY },
51 {
"session", KEY_SPEC_SESSION_KEYRING },
52 {
"thread", KEY_SPEC_THREAD_KEYRING },
53 {
"user", KEY_SPEC_USER_KEYRING },
54 {
"user_session", KEY_SPEC_USER_SESSION_KEYRING },
58 static size_t nkuTable =
sizeof(kuTable) /
sizeof(kuTable[0]);
61 kuCmp(
const void * a,
const void *
b)
68 kuValue(
const char *
name)
73 if (name !=
NULL && *name !=
'\0') {
74 _kuItem tmp = (_kuItem)
memset(
alloca(
sizeof(*tmp)), 0,
sizeof(*tmp));
78 k = (_kuItem)bsearch(tmp, kuTable, nkuTable,
sizeof(kuTable[0]), kuCmp);
80 return (k !=
NULL ? k->val : 0);
90 pw = getpass( prompt ? prompt :
"" );
93 #if defined(HAVE_KEYUTILS_H)
95 const char * _keyutils_keyring
100 _keyutils_keyring =
_free(_keyutils_keyring);
104 key_serial_t keyring = (key_serial_t)
_kuKeyring;
105 size_t npw = strlen(pw);
106 (
void) add_key(
"user",
"rpm:passwd", pw, npw, keyring);
108 pw = (
char *)
"@u user rpm:passwd";
122 static char * password =
NULL;
123 #if defined(HAVE_KEYUTILS_H)
124 const char * foo =
"user rpm:yyyy spoon";
127 key_serial_t dest = 0;
128 key_serial_t
key = 0;
130 if (password !=
NULL) {
138 key = request_key(av[0], av[1], av[2], dest);
142 xx = keyctl_read_alloc(key, (
void **)&password);
144 if (password ==
NULL)
145 password = (
char *)
"";
154 char * (*Getpass) (
const char * prompt) =
_GetPass;
162 #if defined(HAVE_KEYUTILS_H)
165 static const char krprefix[] =
"rpm:gpg:pubkey:";
166 key_serial_t keyring = (key_serial_t)
_kuKeyring;
168 char * krn = (
char *)
alloca(strlen(krprefix) +
sizeof(
"12345678"));
173 krfp[
sizeof(krfp)-1] =
'\0';
177 key = keyctl_search(keyring,
"user", krn, 0);
178 xx = keyctl_read(key,
NULL, 0);
181 xx = keyctl_read(key, (
char *)iob->b, iob->blen);
206 #if defined(HAVE_KEYUTILS_H)
209 static const char krprefix[] =
"rpm:gpg:pubkey:";
210 key_serial_t keyring = (key_serial_t)
_kuKeyring;
212 char * krn = (
char *)
alloca(strlen(krprefix) +
sizeof(
"12345678"));
215 krfp[
sizeof(krfp)-1] =
'\0';
219 (
void) add_key(
"user", krn, iob->b, iob->blen, keyring);
231 #if defined(HAVE_KEYUTILS_H)
232 if (passPhrase && !
strcmp(passPhrase,
"@u user rpm:passwd")) {
233 key_serial_t keyring = (key_serial_t)
_kuKeyring;
238 key = keyctl_search(keyring,
"user",
"rpm:passwd", 0);
240 xx = keyctl_read_alloc(key, (
void **)&pw);
OpenPGP constants and structures from RFC-2440.
char * xstrdup(const char *str)
rpmiob rpmiobFree(rpmiob iob)
Destroy a I/O buffer instance.
enum rpmRC_e rpmRC
RPM return codes.
memset(_r, 0, sizeof(*_r))
assert(key->size==sizeof(hdrNum))
char * _RequestPass(const char *prompt)
ARGV_t argvFree(ARGV_t argv)
Destroy an argv array.
char * rpmExpand(const char *arg,...)
Return (malloc'ed) concatenated macro expansion(s).
rpmiob rpmiobNew(size_t len)
Create an I/O buffer.
return strcmp(ame->name, bme->name)
rpmRC rpmkuFindPubkey(pgpDigParams sigp, rpmiob *iobp)
Lookup pubkey in keyutils keyring.
static int snprintf(char *buf, int nb, const char *fmt,...)
rpmint32_t _kuKeyring
Keyutils keyring to use.
char * stpcpy(char *dest, const char *src)
struct pgpDigParams_s * pgpDigParams
int argvSplit(ARGV_t *argvp, const char *str, const char *seps)
Split a string into an argv array.
static void
Print copy of spec file, filling in Group/Description/Summary from specspo.
static unsigned int pgpGrab(const rpmuint8_t *s, size_t nbytes)
Return (native-endian) integer from big-endian representation.
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
const char * rpmkuPassPhrase(const char *passPhrase)
Return pass phrase from keyutils keyring.
char * _GetPass(const char *prompt)
rpmRC rpmkuStorePubkey(pgpDigParams sigp, rpmiob iob)
Store pubkey in keyutils keyring.