From 86689f5eb557e4a542661f306fecc621459af400 Mon Sep 17 00:00:00 2001 From: Keerthana K <keerthanak@vmware.com> Date: Tue, 23 Oct 2018 06:02:22 +0000 Subject: [PATCH] Bug 2219020: --sec-severity option updates Changes include: 1. tdnf --sec-severity [value] updateinfo and tdnf --sec-severity [value] updateinfo summary commands to filter the results based on the condition. 2. tdnf --sec-severity [value] update prints "No data available" instead of Error message when there is no results. Change-Id: I34fb08be74a825236fc84bbe7f98b1715fec1f02 --- From bfb6c724e5ee74b3c5a2e762aaa740b072fcea66 Mon Sep 17 00:00:00 2001 From: Keerthana K <keerthanak@vmware.com> Date: Tue, 13 Nov 2018 10:27:38 +0000 Subject: [PATCH] Bug 2219020: --sec-severity option updates "tdnf updateinfo" and "tdnf update" commands return "0 updates available" instead of ERROR_TDNF_NO_DATA when there are no updates. Change-Id: I4144b4d59973d55625804354cddb5abca3945118 --- diff --git a/client/api.c b/client/api.c index 6b7e8ac..7b84cc2 100644 --- a/client/api.c +++ b/client/api.c @@ -1166,6 +1166,8 @@ TDNFUpdateInfo( if(!pUpdateInfos) { + printf( + "\n%d updates. \n", nCount); dwError = ERROR_TDNF_NO_DATA; BAIL_ON_TDNF_ERROR(dwError); } @@ -1173,6 +1175,7 @@ TDNFUpdateInfo( *ppUpdateInfo = pUpdateInfos; cleanup: + TDNF_SAFE_FREE_MEMORY(pszSeverity); if(hAdvList) { hy_advisorylist_free(hAdvList); diff --git a/client/updateinfo.c b/client/updateinfo.c index 2ec7ff6..f776870 100644 --- a/client/updateinfo.c +++ b/client/updateinfo.c @@ -41,6 +41,9 @@ TDNFUpdateInfoSummary( HyAdvisory hAdv = NULL; HyAdvisoryType nType = HY_ADVISORY_UNKNOWN; int nTypeCount = HY_ADVISORY_ENHANCEMENT; + char* pszSeverity = NULL; + uint32_t dwSecurity = 0; + const char* pszTemp = NULL; if(!pTdnf || !ppszPackageNameSpecs || !ppSummary) { @@ -69,6 +72,12 @@ TDNFUpdateInfoSummary( pSummary[HY_ADVISORY_BUGFIX].nType = UPDATE_BUGFIX; pSummary[HY_ADVISORY_ENHANCEMENT].nType = UPDATE_ENHANCEMENT; + dwError = TDNFGetSecuritySeverityOption( + pTdnf, + &dwSecurity, + &pszSeverity); + BAIL_ON_TDNF_ERROR(dwError); + FOR_PACKAGELIST(hPkg, hPkgList, iPkg) { hAdvList = hy_package_get_advisories(hPkg, HY_GT); @@ -87,6 +96,21 @@ TDNFUpdateInfoSummary( BAIL_ON_TDNF_ERROR(dwError); } nType = hy_advisory_get_type(hAdv); + if (dwSecurity) + { + if (nType != HY_ADVISORY_SECURITY) + { + continue; + } + } + else if (pszSeverity) + { + pszTemp = hy_advisory_get_severity(hAdv); + if (!pszTemp || atof(pszSeverity) > atof(pszTemp)) + { + continue; + } + } if(nType < HY_ADVISORY_UNKNOWN || nType > HY_ADVISORY_ENHANCEMENT) { dwError = ERROR_TDNF_INVALID_PARAMETER; @@ -102,6 +126,7 @@ TDNFUpdateInfoSummary( *ppSummary = pSummary; cleanup: + TDNF_SAFE_FREE_MEMORY(pszSeverity); if(hAdv) { hy_advisory_free(hAdv); diff --git a/tools/cli/lib/updateinfocmd.c b/tools/cli/lib/updateinfocmd.c index 2d9c171..fc6a0f4 100644 --- a/tools/cli/lib/updateinfocmd.c +++ b/tools/cli/lib/updateinfocmd.c @@ -91,10 +91,6 @@ cleanup: return dwError; error: - if(dwError == ERROR_TDNF_NO_DATA) - { - dwError = 0; - } goto cleanup; } @@ -108,6 +104,7 @@ TDNFCliUpdateInfoSummary( { uint32_t dwError = 0; int i = 0; + int nCount = 0; PTDNF_UPDATEINFO_SUMMARY pSummary = NULL; if(!pContext || !pCmdArgs) @@ -127,12 +124,20 @@ TDNFCliUpdateInfoSummary( { if(pSummary[i].nCount > 0) { + nCount++; printf( "%d %s notice(s)\n", pSummary[i].nCount, TDNFGetUpdateInfoType(pSummary[i].nType)); } } + if (nCount == 0) + { + printf( + "\n%d updates. \n", nCount); + dwError = ERROR_TDNF_NO_DATA; + BAIL_ON_CLI_ERROR(dwError); + } cleanup: if(pSummary) diff --git a/tools/cli/main.c b/tools/cli/main.c index c0a2b5f..759dde0 100644 --- a/tools/cli/main.c +++ b/tools/cli/main.c @@ -152,7 +152,7 @@ cleanup: error: TDNFCliPrintError(dwError); - if (dwError == ERROR_TDNF_CLI_NOTHING_TO_DO) + if (dwError == ERROR_TDNF_CLI_NOTHING_TO_DO || dwError == ERROR_TDNF_NO_DATA) { // Nothing to do should not return an error code dwError = 0; @@ -178,7 +178,7 @@ TDNFCliPrintError( dwError = TDNFGetErrorString(dwErrorCode, &pszError); BAIL_ON_CLI_ERROR(dwError); } - if(dwErrorCode == ERROR_TDNF_CLI_NOTHING_TO_DO) + if(dwErrorCode == ERROR_TDNF_CLI_NOTHING_TO_DO || dwErrorCode == ERROR_TDNF_NO_DATA) { dwErrorCode = 0; }