From c45f863ed8c3ade01ad7caa738ce2e81fe213c9a Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Sat, 15 Feb 2025 08:51:38 +0700 Subject: [PATCH] cmd/cli: workaround status command with new Openwrt New Openwrt returns a non-success code even when status command run successfully, causing wrong status returned. --- cmd/cli/cli.go | 2 +- cmd/cli/service.go | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/cmd/cli/cli.go b/cmd/cli/cli.go index da9d8c9..986e069 100644 --- a/cmd/cli/cli.go +++ b/cmd/cli/cli.go @@ -61,7 +61,7 @@ var ( v = viper.NewWithOptions(viper.KeyDelimiter("::")) defaultConfigFile = "ctrld.toml" rootCertPool *x509.CertPool - errSelfCheckNoAnswer = errors.New("No response from ctrld listener. You can try to re-launch with flag --skip_self_checks") + errSelfCheckNoAnswer = errors.New("no response from ctrld listener. You can try to re-launch with flag --skip_self_checks") ) var basicModeFlags = []string{"listen", "primary_upstream", "secondary_upstream", "domains"} diff --git a/cmd/cli/service.go b/cmd/cli/service.go index 82f144c..0567b88 100644 --- a/cmd/cli/service.go +++ b/cmd/cli/service.go @@ -10,6 +10,7 @@ import ( "github.com/kardianos/service" "github.com/Control-D-Inc/ctrld/internal/router" + "github.com/Control-D-Inc/ctrld/internal/router/openwrt" ) // newService wraps service.New call to return service.Service @@ -188,6 +189,13 @@ func checkHasElevatedPrivilege() { func unixSystemVServiceStatus() (service.Status, error) { out, err := exec.Command("/etc/init.d/ctrld", "status").CombinedOutput() if err != nil { + // Specific case for openwrt >= 24.10, it returns non-success code + // for above status command, which may not right. + if router.Name() == openwrt.Name { + if string(bytes.ToLower(bytes.TrimSpace(out))) == "inactive" { + return service.StatusStopped, nil + } + } return service.StatusUnknown, nil }