From 9ea99e5685e04cd69cf17d5b9e0abd4581eca6df Mon Sep 17 00:00:00 2001 From: Nora Koirala Date: Mon, 21 Mar 2022 09:52:39 -0700 Subject: [PATCH 1/5] clear settings file --- main/cmds.go | 7 +++++++ main/handlersettingscommon.go | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/main/cmds.go b/main/cmds.go index 412ca2b..66078ed 100644 --- a/main/cmds.go +++ b/main/cmds.go @@ -189,6 +189,13 @@ func enable(ctx *log.Context, h HandlerEnvironment, seqNum int) (string, error) ctx.Log("event", "enable script failed") } + err = cleanUpSettings(h.HandlerEnvironment.ConfigFolder) + if err != nil { + ctx.Log("message", "error clearing config folder") + } else { + ctx.Log("message", "config folder cleared successfully") + } + msg := fmt.Sprintf("\n[stdout]\n%s\n[stderr]\n%s", string(stdoutTail), string(stderrTail)) // Always report nil for error because extension should not fail if script throws error // Error still will be reported in the message diff --git a/main/handlersettingscommon.go b/main/handlersettingscommon.go index 0caf991..15eed09 100644 --- a/main/handlersettingscommon.go +++ b/main/handlersettingscommon.go @@ -140,3 +140,14 @@ func unmarshalProtectedSettings(configFolder string, hs handlerSettingsCommon, v } return nil } + +func cleanUpSettings(configFolder string) error { + + settingFile, err := settingsPath(configFolder) + clear := []byte("") + if err != nil { + err = ioutil.WriteFile(settingFile, clear, 0644) + } + + return err +} From 91aa540143b68d580b56e79977f2338e965c8563 Mon Sep 17 00:00:00 2001 From: Nora Koirala Date: Mon, 21 Mar 2022 10:33:54 -0700 Subject: [PATCH 2/5] adding comments --- main/handlersettingscommon.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main/handlersettingscommon.go b/main/handlersettingscommon.go index 15eed09..2b1c986 100644 --- a/main/handlersettingscommon.go +++ b/main/handlersettingscommon.go @@ -141,13 +141,13 @@ func unmarshalProtectedSettings(configFolder string, hs handlerSettingsCommon, v return nil } +// cleanUpSettings clears out the settings file [ex: 0.settings] to ensure no +// protected settings are logged in VM func cleanUpSettings(configFolder string) error { - settingFile, err := settingsPath(configFolder) clear := []byte("") if err != nil { err = ioutil.WriteFile(settingFile, clear, 0644) } - return err } From a75f976832de4610b9d4871d3cddaafe83a611dc Mon Sep 17 00:00:00 2001 From: "Nora Koirala (SHE/HER)" Date: Thu, 9 Jun 2022 15:38:31 -0700 Subject: [PATCH 3/5] adding unit test --- main/handlersettings_test.go | 52 +++++++++++++++++++++++++++++++++-- main/handlersettingscommon.go | 18 +++++++++--- 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/main/handlersettings_test.go b/main/handlersettings_test.go index 3d66377..dc6debf 100644 --- a/main/handlersettings_test.go +++ b/main/handlersettings_test.go @@ -1,7 +1,14 @@ package main -import "testing" -import "github.com/stretchr/testify/require" +import ( + "io/ioutil" + "os" + "path/filepath" + "strconv" + "testing" + + "github.com/stretchr/testify/require" +) func Test_handlerSettingsValidate(t *testing.T) { // commandToExecute not specified @@ -98,3 +105,44 @@ func Test_toJSON(t *testing.T) { require.Nil(t, err) require.Equal(t, `{"a":3}`, s) } + +func Test_protectedSettingsTest(t *testing.T) { + //set up test direcotry + test files + testFolderPath := "/config" + settingsExtensionName := ".settings" + + err := createTestFiles(testFolderPath, settingsExtensionName) + require.NoError(t, err) + + err = cleanUpSettings(testFolderPath) + require.NoError(t, err) + + fileName := "" + for i := 0; i < 3; i++ { + fileName = filepath.Join(testFolderPath, strconv.FormatInt(int64(i), 10)+settingsExtensionName) + content, err := ioutil.ReadFile(fileName) + require.NoError(t, err) + require.Equal(t, len(content), 0) + } + + // cleanup + defer os.RemoveAll(testFolderPath) +} + +func createTestFiles(folderPath, settingsExtensionName string) error { + fileName := "" + //create test directories + testContent := []byte("beep boop") + for i := 0; i < 3; i++ { + fileName = filepath.Join(folderPath, strconv.FormatInt(int64(i), 10)+settingsExtensionName) + file, err := os.Create(fileName) + if err != nil { + return err + } + size, err := file.Write(testContent) + if err != nil || size == 0 { + return err + } + } + return nil +} diff --git a/main/handlersettingscommon.go b/main/handlersettingscommon.go index 2b1c986..87079cd 100644 --- a/main/handlersettingscommon.go +++ b/main/handlersettingscommon.go @@ -9,6 +9,7 @@ import ( "io/ioutil" "os/exec" "path/filepath" + "strings" ) const ( @@ -144,10 +145,19 @@ func unmarshalProtectedSettings(configFolder string, hs handlerSettingsCommon, v // cleanUpSettings clears out the settings file [ex: 0.settings] to ensure no // protected settings are logged in VM func cleanUpSettings(configFolder string) error { - settingFile, err := settingsPath(configFolder) - clear := []byte("") + configDir, err := ioutil.ReadDir(configFolder) if err != nil { - err = ioutil.WriteFile(settingFile, clear, 0644) + return err + } + content := []byte("") + for _, file := range configDir { + if strings.Compare(filepath.Ext(file.Name()), settingsFileSuffix) == 0 { //checking if its a settings file + filePath := filepath.Join(configFolder, file.Name()) + err = ioutil.WriteFile(filePath, content, 0644) + if err != nil { + return err + } + } } - return err + return nil } From ff4aa705220d6093eb2911b5a0af5b4cce78a70e Mon Sep 17 00:00:00 2001 From: "Nora Koirala (SHE/HER)" Date: Fri, 10 Jun 2022 14:52:36 -0700 Subject: [PATCH 4/5] fixing unit tests --- main/handlersettings_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main/handlersettings_test.go b/main/handlersettings_test.go index dc6debf..66d8630 100644 --- a/main/handlersettings_test.go +++ b/main/handlersettings_test.go @@ -130,6 +130,10 @@ func Test_protectedSettingsTest(t *testing.T) { } func createTestFiles(folderPath, settingsExtensionName string) error { + err := os.MkdirAll(folderPath, os.ModeDir) + if err != nil { + return err + } fileName := "" //create test directories testContent := []byte("beep boop") From 5a414b1b20af05fc8b30c7a488da332aec244a72 Mon Sep 17 00:00:00 2001 From: "Nora Koirala (SHE/HER)" Date: Mon, 13 Jun 2022 10:31:18 -0700 Subject: [PATCH 5/5] handling same seq num --- main/cmds.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/main/cmds.go b/main/cmds.go index 66078ed..9b2004b 100644 --- a/main/cmds.go +++ b/main/cmds.go @@ -140,6 +140,13 @@ func enablePre(ctx *log.Context, hEnv HandlerEnvironment, seqNum int) error { // but last status file is still is "transitioning" ctx.Log("event", "check status", "message", "transitioning status detected but no process to handle it - set to success status") reportStatus(ctx, hEnv, seqNum, StatusSuccess, cmd{enable, "Enable", true, enablePre, 3}, "Last script execution didn't finish.") + } else { //agent restarts but execution is done and not transitioning + err = cleanUpSettings(hEnv.HandlerEnvironment.ConfigFolder) + if err != nil { + ctx.Log("message", "error clearing config folder") + } else { + ctx.Log("message", "config folder cleared successfully") + } } } os.Exit(0)