00001
00005 #include "system.h"
00006 #include "rpmio.h"
00007 #if defined(HAVE_KEYUTILS_H)
00008 #include <argv.h>
00009 #include <keyutils.h>
00010 #endif
00011 #include "debug.h"
00012
00013 char * _GetPass(const char * prompt)
00014 {
00015 char * pw;
00016
00017
00018 pw = getpass( prompt ? prompt : "" );
00019
00020
00021 #if defined(HAVE_KEYUTILS_H)
00022 if (pw && *pw) {
00023 size_t npw = strlen(pw);
00024 key_serial_t keyring = KEY_SPEC_PROCESS_KEYRING;
00025 (void) add_key("user", "rpm:passwd", pw, npw, keyring);
00026 (void) memset(pw, 0, npw);
00027 pw = "@u user rpm:passwd";
00028 }
00029 #endif
00030
00031 assert(pw != NULL);
00032
00033 return pw;
00034
00035 }
00036
00037 char * _RequestPass( const char * prompt)
00038 {
00039
00040 static char * password = NULL;
00041 #if defined(HAVE_KEYUTILS_H)
00042 const char * foo = "user rpm:yyyy spoon";
00043 ARGV_t av = NULL;
00044 int xx = argvSplit(&av, foo, NULL);
00045 key_serial_t dest = 0;
00046 key_serial_t key = 0;
00047
00048 if (password) {
00049 free(password);
00050 password = NULL;
00051 }
00052 assert(av != NULL);
00053 assert(av[0] != NULL);
00054 assert(av[1] != NULL);
00055 assert(av[2] != NULL);
00056 key = request_key(av[0], av[1], av[2], dest);
00057
00058
00059 xx = keyctl_read_alloc(key, (void *)&password);
00060
00061 assert(password != NULL);
00062 #endif
00063
00064
00065 return password;
00066
00067 }
00068
00069
00070 char * (*Getpass) (const char * prompt) = _GetPass;
00071