mirror of https://github.com/vmware/tdnf.git
add repo key permanently after asking for confirmation
This commit is contained in:
parent
da4d89bf2a
commit
b0d7c3e30e
|
@ -264,7 +264,6 @@ AddKeyToKeyRing(
|
|||
}
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
TDNF_SAFE_FREE_MEMORY(pszKeyData);
|
||||
return dwError;
|
||||
|
@ -376,3 +375,36 @@ error:
|
|||
}
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
TDNFImportGPGKey(
|
||||
rpmts pTS,
|
||||
const char* pszFile
|
||||
)
|
||||
{
|
||||
uint32_t dwError = 0;
|
||||
pgpArmor nArmor = PGPARMOR_NONE;
|
||||
uint8_t* pPkt = NULL;
|
||||
size_t nPktLen = 0;
|
||||
char* pszKeyData = NULL;
|
||||
|
||||
dwError = ReadGPGKey(pszFile, &pszKeyData);
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
|
||||
nArmor = pgpParsePkts(pszKeyData, &pPkt, &nPktLen);
|
||||
if(nArmor != PGPARMOR_PUBKEY)
|
||||
{
|
||||
dwError = ERROR_TDNF_INVALID_PUBKEY_FILE;
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
}
|
||||
|
||||
dwError = rpmtsImportPubkey(pTS, pPkt, nPktLen);
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
|
||||
cleanup:
|
||||
TDNF_SAFE_FREE_MEMORY(pszKeyData);
|
||||
return dwError;
|
||||
error:
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
|
|
@ -72,6 +72,12 @@ TDNFGPGCheck(
|
|||
const char* pszPackage
|
||||
);
|
||||
|
||||
uint32_t
|
||||
TDNFImportGPGKey(
|
||||
rpmts pTS,
|
||||
const char* pszFile
|
||||
);
|
||||
|
||||
//init.c
|
||||
uint32_t
|
||||
TDNFCloneCmdArgs(
|
||||
|
@ -897,6 +903,13 @@ TDNFGetCmdOpt(
|
|||
PTDNF_CMD_OPT *ppOpt
|
||||
);
|
||||
|
||||
uint32_t
|
||||
TDNFYesOrNo(
|
||||
PTDNF_CMD_ARGS pArgs,
|
||||
const char *pszQuestion,
|
||||
int *pAnswer
|
||||
);
|
||||
|
||||
//validate.c
|
||||
uint32_t
|
||||
TDNFValidateCmdArgs(
|
||||
|
|
|
@ -390,9 +390,8 @@ TDNFTransAddInstallPkg(
|
|||
char* pszDownloadCacheDir = NULL;
|
||||
char* pszUrlGPGKey = NULL;
|
||||
PTDNF_CACHED_RPM_ENTRY pRpmCache = NULL;
|
||||
rpmKeyring pSavedKeyring = NULL;
|
||||
int nRestoreKey = 0;
|
||||
rpmKeyring pKeyring = NULL;
|
||||
int nAnswer = 0;
|
||||
|
||||
dwError = TDNFAllocateStringPrintf(
|
||||
&pszRpmCacheDir,
|
||||
|
@ -474,22 +473,19 @@ TDNFTransAddInstallPkg(
|
|||
{
|
||||
dwError = TDNFGetGPGSignatureCheck(pTdnf, pszRepoName, &nGPGSigCheck, &pszUrlGPGKey);
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
if(nGPGSigCheck)
|
||||
{
|
||||
pKeyring = rpmKeyringNew();
|
||||
if(!pKeyring)
|
||||
{
|
||||
dwError = ERROR_TDNF_RPMTS_KEYRING_FAILED;
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
}
|
||||
|
||||
dwError = TDNFGPGCheck(pKeyring, pszUrlGPGKey, pszFilePath);
|
||||
printf("importing key from %s\n", pszUrlGPGKey);
|
||||
dwError = TDNFYesOrNo(pTdnf->pArgs, "Is this ok [y/N]: ", &nAnswer);
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
|
||||
if(nAnswer)
|
||||
{
|
||||
pKeyring = rpmtsGetKeyring(pTS->pTS, 0);
|
||||
|
||||
dwError = TDNFImportGPGKey(pTS->pTS, pszUrlGPGKey);
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
|
||||
pSavedKeyring = rpmtsGetKeyring(pTS->pTS, 0);
|
||||
nRestoreKey = 1;
|
||||
|
||||
dwError = rpmtsSetKeyring (pTS->pTS, pKeyring);
|
||||
dwError = TDNFGPGCheck(pKeyring, pszUrlGPGKey, pszFilePath);
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
|
||||
fp = Fopen (pszFilePath, "r.ufdio");
|
||||
|
@ -509,7 +505,10 @@ TDNFTransAddInstallPkg(
|
|||
|
||||
Fclose(fp);
|
||||
fp = NULL;
|
||||
}
|
||||
} else {
|
||||
dwError = ERROR_TDNF_OPERATION_ABORTED;
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
}
|
||||
} else if (!nGPGSigCheck && (dwError == RPMRC_NOTTRUSTED || dwError == RPMRC_NOKEY)) {
|
||||
dwError = 0;
|
||||
}
|
||||
|
@ -543,9 +542,6 @@ TDNFTransAddInstallPkg(
|
|||
pTS->pCachedRpmsArray->pHead = pRpmCache;
|
||||
}
|
||||
cleanup:
|
||||
if (nRestoreKey) {
|
||||
rpmtsSetKeyring (pTS->pTS, pSavedKeyring);
|
||||
}
|
||||
if(pKeyring)
|
||||
{
|
||||
rpmKeyringFree(pKeyring);
|
||||
|
|
|
@ -649,3 +649,36 @@ TDNFGetCmdOpt(
|
|||
error:
|
||||
return dwError;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
TDNFYesOrNo(
|
||||
PTDNF_CMD_ARGS pArgs,
|
||||
const char *pszQuestion,
|
||||
int *pAnswer
|
||||
)
|
||||
{
|
||||
uint32_t dwError = 0;
|
||||
int nAnswer = 0;
|
||||
int32_t opt = 0;
|
||||
|
||||
if(!pArgs->nAssumeYes && !pArgs->nAssumeNo)
|
||||
{
|
||||
printf("%s ", pszQuestion);
|
||||
while ((getchar()) != '\n');
|
||||
opt = getchar();
|
||||
if (tolower(opt) != 'y' && tolower(opt) != 'n')
|
||||
{
|
||||
printf("Invalid input\n");
|
||||
dwError = ERROR_TDNF_INVALID_INPUT;
|
||||
BAIL_ON_TDNF_ERROR(dwError);
|
||||
}
|
||||
}
|
||||
|
||||
if(pArgs->nAssumeYes || (tolower(opt) == 'y'))
|
||||
{
|
||||
nAnswer = 1;
|
||||
}
|
||||
*pAnswer = nAnswer;
|
||||
error:
|
||||
return dwError;
|
||||
}
|
||||
|
|
|
@ -65,6 +65,8 @@ extern "C" {
|
|||
#define ERROR_TDNF_ERASE_NEEDS_INSTALL 1031
|
||||
#define ERROR_TDNF_OPERATION_ABORTED 1032
|
||||
|
||||
#define ERROR_TDNF_INVALID_INPUT 1033
|
||||
|
||||
//curl errors
|
||||
#define ERROR_TDNF_CURL_INIT 1200
|
||||
#define ERROR_TDNF_CURL_BASE 1201
|
||||
|
|
Loading…
Reference in New Issue