diff --git a/source/AdvSecurityDml/cosa_adv_security_dml.c b/source/AdvSecurityDml/cosa_adv_security_dml.c index 68c1947..2ae720d 100644 --- a/source/AdvSecurityDml/cosa_adv_security_dml.c +++ b/source/AdvSecurityDml/cosa_adv_security_dml.c @@ -3112,12 +3112,11 @@ AdvanceSecurityUserSpace_RFC_SetParamBoolValue if(bValue == g_pAdvSecAgent->pAdvSecUserSpace_RFC->bEnable) return TRUE; if( bValue ) - returnStatus = CosaAdvSecUserSpaceInit(g_pAdvSecAgent->pAdvSecUserSpace_RFC); + returnStatus = CosaAdvSecUserSpaceInit(g_pAdvSecAgent->pAdvSecUserSpace_RFC); else { - //returnStatus = CosaAdvSecUserSpaceDeInit(g_pAdvSecAgent->pAdvSecUserSpace_RFC); - CcspTraceInfo(("AdvSecUserSpace_RFC is defaulted to TRUE, cannot be set to FALSE \n")); - return FALSE; + CcspTraceInfo(("AdvSecUserSpace_RFC is defaulted to TRUE, cannot be set to FALSE \n")); + return FALSE; } if ( returnStatus != ANSC_STATUS_SUCCESS ) diff --git a/source/AdvSecurityDml/cosa_adv_security_internal.c b/source/AdvSecurityDml/cosa_adv_security_internal.c index 5d61186..a366901 100644 --- a/source/AdvSecurityDml/cosa_adv_security_internal.c +++ b/source/AdvSecurityDml/cosa_adv_security_internal.c @@ -1102,6 +1102,10 @@ CosaSecurityInitialize { UNREFERENCED_PARAMETER(hThisObject); ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; + ANSC_STATUS applyRfcStatus = ANSC_STATUS_SUCCESS; + ANSC_STATUS getCujoTracerRfcStatus = ANSC_STATUS_FAILURE; + ANSC_STATUS getCujoTelemetryRfcStatus = ANSC_STATUS_FAILURE; + ANSC_STATUS getUserSpaceRfcStatus = ANSC_STATUS_FAILURE; ULONG Value = 0; ULONG ValueSB = 0; ULONG ValueSF = 0; @@ -1362,7 +1366,7 @@ CosaSecurityInitialize CosaGetSysCfgUlong(g_DeviceFingerPrintICMPv6Enabled, &ValueDFIcmpv6_RFC); CosaGetSysCfgUlong(g_WSDiscoveryAnalysisEnabled, &ValueWSA_RFC); CosaGetSysCfgUlong(g_AdvSecOTMEnabled, &ValueASOTM_RFC); - CosaGetSysCfgUlong(g_AdvSecUserSpaceEnabled, &ValueASUSERSPACE_RFC); + getUserSpaceRfcStatus = CosaGetSysCfgUlong(g_AdvSecUserSpaceEnabled, &ValueASUSERSPACE_RFC); #ifdef NETWORK_INTELLIGENCE CosaGetSysCfgUlong(g_AdvSecNetworkIntelligenceEnabled, &ValueNI_RFC); CosaGetSysCfgUlong(g_NetworkIntelligenceMemoryLimit, &ValueNIML_RFC); @@ -1374,8 +1378,8 @@ CosaSecurityInitialize CosaGetSysCfgUlong(g_AdvSecAgentEnabled, &ValueASAGENT_RFC); CosaGetSysCfgUlong(g_AdvSecSafeBrowsingEnabled, &ValueASSAFEBROWSING_RFC); CosaGetSysCfgUlong(g_AdvSecCujoTelemetryWiFiFPEnabled, &ValueASCUJOTELEMETRYWIFIFP_RFC); - CosaGetSysCfgUlong(g_AdvSecCujoTracerEnabled, &ValueASCUJOTRACER_RFC); - CosaGetSysCfgUlong(g_AdvSecCujoTelemetryEnabled, &ValueASCUJOTELEMETRY_RFC); + getCujoTracerRfcStatus = CosaGetSysCfgUlong(g_AdvSecCujoTracerEnabled, &ValueASCUJOTRACER_RFC); + getCujoTelemetryRfcStatus = CosaGetSysCfgUlong(g_AdvSecCujoTelemetryEnabled, &ValueASCUJOTELEMETRY_RFC); CosaGetSysCfgUlong(g_AdvSecSATEEnabled, &ValueASSATE_RFC); CosaGetSysCfgUlong(g_AdvSecTCPTrackerFilterDevicesEnabled, &ValueASTCPTrackerFilterDevices_RFC); CosaGetSysCfgUlong(g_AdvSecDoHBlockingEnabled, &ValueASDoHBlocking_RFC); @@ -1395,20 +1399,38 @@ CosaSecurityInitialize g_pAdvSecAgent->pDFIcmpv6_RFC->bEnable = ValueDFIcmpv6_RFC; g_pAdvSecAgent->pWSDiscoveryAnalysis_RFC->bEnable = ValueWSA_RFC; g_pAdvSecAgent->pAdvSecOTM_RFC->bEnable = ValueASOTM_RFC; - if (ValueASUSERSPACE_RFC == 0) + + applyRfcStatus = CosaAdvSecApplyRfcDefaultTrue( + g_AdvSecCujoTracerEnabled, + getCujoTracerRfcStatus, + ValueASCUJOTRACER_RFC, + &g_pAdvSecAgent->pAdvSecCujoTracer_RFC->bEnable, + "AdvSecCujoTracer_RFCEnable"); + if ((returnStatus == ANSC_STATUS_SUCCESS) && (applyRfcStatus != ANSC_STATUS_SUCCESS)) { - // Enable user-space feature - returnStatus = CosaSetSysCfgUlong(g_AdvSecUserSpaceEnabled, 1); - if (returnStatus != ANSC_STATUS_SUCCESS) - { - CcspTraceError(("%s: syscfg_set failure\n", __FUNCTION__)); - } - g_pAdvSecAgent->pAdvSecUserSpace_RFC->bEnable = TRUE; - CcspTraceInfo(("AdvSecUserSpace_RFCEnable:TRUE\n")); + returnStatus = applyRfcStatus; } - else + + applyRfcStatus = CosaAdvSecApplyRfcDefaultTrue( + g_AdvSecCujoTelemetryEnabled, + getCujoTelemetryRfcStatus, + ValueASCUJOTELEMETRY_RFC, + &g_pAdvSecAgent->pAdvSecCujoTelemetry_RFC->bEnable, + "AdvSecCujoTelemetry_RFCEnable"); + if ((returnStatus == ANSC_STATUS_SUCCESS) && (applyRfcStatus != ANSC_STATUS_SUCCESS)) { - g_pAdvSecAgent->pAdvSecUserSpace_RFC->bEnable = ValueASUSERSPACE_RFC; + returnStatus = applyRfcStatus; + } + + applyRfcStatus = CosaAdvSecApplyRfcDefaultTrue( + g_AdvSecUserSpaceEnabled, + getUserSpaceRfcStatus, + ValueASUSERSPACE_RFC, + &g_pAdvSecAgent->pAdvSecUserSpace_RFC->bEnable, + "AdvSecUserSpace_RFCEnable"); + if ((returnStatus == ANSC_STATUS_SUCCESS) && (applyRfcStatus != ANSC_STATUS_SUCCESS)) + { + returnStatus = applyRfcStatus; } #ifdef NETWORK_INTELLIGENCE g_pAdvSecAgent->pAdvNetworkIntelligence_RFC->bEnable = ValueNI_RFC; @@ -1469,8 +1491,6 @@ CosaSecurityInitialize g_pAdvSecAgent->pAdvSecAgent_RFC->bEnable = ValueASAGENT_RFC; g_pAdvSecAgent->pAdvSecSafeBrowsing_RFC->bEnable = ValueASSAFEBROWSING_RFC; g_pAdvSecAgent->pAdvSecCujoTelemetryWiFiFP_RFC->bEnable = ValueASCUJOTELEMETRYWIFIFP_RFC; - g_pAdvSecAgent->pAdvSecCujoTracer_RFC->bEnable = ValueASCUJOTRACER_RFC; - g_pAdvSecAgent->pAdvSecCujoTelemetry_RFC->bEnable = ValueASCUJOTELEMETRY_RFC; g_pAdvSecAgent->pAdvSecSATE_RFC->bEnable = ValueASSATE_RFC; g_pAdvSecAgent->pAdvSecTCPTrackerFilterDevices_RFC->bEnable = ValueASTCPTrackerFilterDevices_RFC; g_pAdvSecAgent->pAdvSecDoHBlocking_RFC->bEnable = ValueASDoHBlocking_RFC; @@ -1592,6 +1612,34 @@ ANSC_STATUS CosaSetSysCfgUlong(char* setting, ULONG value) return ret; } +ANSC_STATUS +CosaAdvSecApplyRfcDefaultTrue + ( + char* setting, + ANSC_STATUS getStatus, + ULONG value, + BOOL* pEnable, + const char* featureLogName + ) +{ + ANSC_STATUS ret = ANSC_STATUS_SUCCESS; + + if (getStatus != ANSC_STATUS_SUCCESS) + { + ret = CosaSetSysCfgUlong(setting, 1); + if (ret != ANSC_STATUS_SUCCESS) + { + CcspTraceError(("%s: %s default-to-true persist failed\n", __FUNCTION__, featureLogName)); + return ret; + } + *pEnable = TRUE; + CcspTraceInfo(("%s:TRUE\n", featureLogName)); + return ret; + } + + *pEnable = value; + return ret; +} #ifdef NETWORK_INTELLIGENCE ANSC_STATUS CosaAdvSecNetworkIntelligenceInit(ANSC_HANDLE hThisObject) { @@ -3263,7 +3311,6 @@ ANSC_STATUS CosaAdvSecUserSpaceInit(ANSC_HANDLE hThisObject) return returnStatus; } -/* ANSC_STATUS CosaAdvSecUserSpaceDeInit(ANSC_HANDLE hThisObject) { UNREFERENCED_PARAMETER(hThisObject); @@ -3288,7 +3335,6 @@ ANSC_STATUS CosaAdvSecUserSpaceDeInit(ANSC_HANDLE hThisObject) CcspTraceWarning (("AdvSecUserSpace_RFCEnable:FALSE\n")); return returnStatus; } -*/ #ifdef WIFI_DATA_COLLECTION ANSC_STATUS CosaLevlInit(ANSC_HANDLE hThisObject) diff --git a/source/AdvSecurityDml/cosa_adv_security_internal.h b/source/AdvSecurityDml/cosa_adv_security_internal.h index a3a8ce8..3dc2201 100644 --- a/source/AdvSecurityDml/cosa_adv_security_internal.h +++ b/source/AdvSecurityDml/cosa_adv_security_internal.h @@ -337,6 +337,16 @@ CosaSetSysCfgUlong ULONG value ); +ANSC_STATUS +CosaAdvSecApplyRfcDefaultTrue + ( + char* setting, + ANSC_STATUS getStatus, + ULONG value, + BOOL* pEnable, + const char* featureLogName + ); + ANSC_STATUS CosaAdvSecGetCustomURL ( @@ -475,13 +485,11 @@ CosaAdvSecUserSpaceInit ANSC_HANDLE hThisObject ); -/* ANSC_STATUS CosaAdvSecUserSpaceDeInit ( ANSC_HANDLE hThisObject ); -*/ ANSC_STATUS CosaLevlInit diff --git a/source/test/CcspAdvSecurityDmlTest/CcspAdvSecurityInternalTest.cpp b/source/test/CcspAdvSecurityDmlTest/CcspAdvSecurityInternalTest.cpp index e64510c..78bfb79 100644 --- a/source/test/CcspAdvSecurityDmlTest/CcspAdvSecurityInternalTest.cpp +++ b/source/test/CcspAdvSecurityDmlTest/CcspAdvSecurityInternalTest.cpp @@ -2252,3 +2252,75 @@ TEST_F(CcspAdvSecurityInternalTestFixture, CosaAdvSecAgentRaptrDeInit) free(g_pAdvSecAgent->pRaptr_RFC); free(g_pAdvSecAgent); } + +TEST_F(CcspAdvSecurityInternalTestFixture, CosaAdvSecApplyRfcDefaultTrue_GetFailure_DefaultsToTrue) +{ + const char *AdvSecCujoTracerEnabled = "Adv_AdvSecCujoTracerRFCEnable"; + BOOL enable = FALSE; + + EXPECT_CALL(*g_safecLibMock, _sprintf_s_chk(_, _, _, _)) + .Times(1) + .WillOnce(Return(0)); + EXPECT_CALL(*g_syscfgMock, syscfg_set_nns(StrEq(AdvSecCujoTracerEnabled), _)) + .Times(1) + .WillOnce(Return(0)); + EXPECT_CALL(*g_syscfgMock, syscfg_commit()) + .Times(1) + .WillOnce(Return(0)); + + ANSC_STATUS status = CosaAdvSecApplyRfcDefaultTrue( + (char*)AdvSecCujoTracerEnabled, + ANSC_STATUS_FAILURE, + 0, + &enable, + "AdvSecCujoTracer_RFCEnable"); + + EXPECT_EQ(status, ANSC_STATUS_SUCCESS); + EXPECT_EQ(enable, TRUE); +} + +TEST_F(CcspAdvSecurityInternalTestFixture, CosaAdvSecApplyRfcDefaultTrue_ZeroValue_NoDefaultWrite) +{ + const char *AdvSecCujoTelemetryEnabled = "Adv_AdvSecCujoTelemetryRFCEnable"; + BOOL enable = FALSE; + + EXPECT_CALL(*g_safecLibMock, _sprintf_s_chk(_, _, _, _)) + .Times(0); + EXPECT_CALL(*g_syscfgMock, syscfg_set_nns(StrEq(AdvSecCujoTelemetryEnabled), _)) + .Times(0); + EXPECT_CALL(*g_syscfgMock, syscfg_commit()) + .Times(0); + + ANSC_STATUS status = CosaAdvSecApplyRfcDefaultTrue( + (char*)AdvSecCujoTelemetryEnabled, + ANSC_STATUS_SUCCESS, + 0, + &enable, + "AdvSecCujoTelemetry_RFCEnable"); + + EXPECT_EQ(status, ANSC_STATUS_SUCCESS); + EXPECT_EQ(enable, FALSE); +} + +TEST_F(CcspAdvSecurityInternalTestFixture, CosaAdvSecApplyRfcDefaultTrue_EnabledValue_NoDefaultWrite) +{ + const char *AdvSecCujoTracerEnabled = "Adv_AdvSecCujoTracerRFCEnable"; + BOOL enable = FALSE; + + EXPECT_CALL(*g_syscfgMock, syscfg_set_nns(StrEq(AdvSecCujoTracerEnabled), _)) + .Times(0); + EXPECT_CALL(*g_syscfgMock, syscfg_commit()) + .Times(0); + EXPECT_CALL(*g_safecLibMock, _sprintf_s_chk(_, _, _, _)) + .Times(0); + + ANSC_STATUS status = CosaAdvSecApplyRfcDefaultTrue( + (char*)AdvSecCujoTracerEnabled, + ANSC_STATUS_SUCCESS, + 1, + &enable, + "AdvSecCujoTracer_RFCEnable"); + + EXPECT_EQ(status, ANSC_STATUS_SUCCESS); + EXPECT_EQ(enable, TRUE); +}