Skip to content

Commit da4119f

Browse files
committed
don't fail when user cannot read parameters.isc
they might be a valid Cache user, but not the owner with permissions to read the parameters.isc
1 parent 2456827 commit da4119f

File tree

4 files changed

+72
-27
lines changed

4 files changed

+72
-27
lines changed

go.mod

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ module github.com/ontariosystems/isclib/v2
33
go 1.21
44

55
require (
6-
github.com/onsi/ginkgo/v2 v2.19.0
7-
github.com/onsi/gomega v1.33.1
6+
github.com/onsi/ginkgo/v2 v2.19.1
7+
github.com/onsi/gomega v1.34.0
88
github.com/sirupsen/logrus v1.9.3
99
github.com/spf13/afero v1.11.0
1010
)
@@ -14,16 +14,15 @@ require (
1414
github.com/go-logr/logr v1.4.2 // indirect
1515
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
1616
github.com/google/go-cmp v0.6.0 // indirect
17-
github.com/google/pprof v0.0.0-20240528025155-186aa0362fba // indirect
17+
github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 // indirect
1818
github.com/kr/pretty v0.3.1 // indirect
1919
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
2020
github.com/rogpeppe/go-internal v1.12.0 // indirect
2121
github.com/stretchr/testify v1.9.0 // indirect
22-
golang.org/x/net v0.25.0 // indirect
23-
golang.org/x/sys v0.20.0 // indirect
24-
golang.org/x/text v0.15.0 // indirect
25-
golang.org/x/tools v0.21.0 // indirect
26-
google.golang.org/protobuf v1.34.1 // indirect
22+
golang.org/x/net v0.27.0 // indirect
23+
golang.org/x/sys v0.22.0 // indirect
24+
golang.org/x/text v0.16.0 // indirect
25+
golang.org/x/tools v0.23.0 // indirect
2726
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
2827
gopkg.in/yaml.v3 v3.0.1 // indirect
2928
)

go.sum

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v
99
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
1010
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
1111
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
12-
github.com/google/pprof v0.0.0-20240528025155-186aa0362fba h1:ql1qNgCyOB7iAEk8JTNM+zJrgIbnyCKX/wdlyPufP5g=
13-
github.com/google/pprof v0.0.0-20240528025155-186aa0362fba/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
12+
github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 h1:ssNFCCVmib/GQSzx3uCWyfMgOamLGWuGqlMS77Y1m3Y=
13+
github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
1414
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
1515
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
1616
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
1717
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
1818
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
1919
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
2020
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
21-
github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA=
22-
github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To=
23-
github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
24-
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
21+
github.com/onsi/ginkgo/v2 v2.19.1 h1:QXgq3Z8Crl5EL1WBAC98A5sEBHARrAJNzAmMxzLcRF0=
22+
github.com/onsi/ginkgo/v2 v2.19.1/go.mod h1:O3DtEWQkPa/F7fBMgmZQKKsluAy8pd3rEQdrjkPb9zA=
23+
github.com/onsi/gomega v1.34.0 h1:eSSPsPNp6ZpsG8X1OVmOTxig+CblTc4AxpPBykhe2Os=
24+
github.com/onsi/gomega v1.34.0/go.mod h1:MIKI8c+f+QLWk+hxbePD4i0LMJSExPaZOVfkoex4cAo=
2525
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
2626
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2727
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
@@ -37,15 +37,15 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
3737
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
3838
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
3939
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
40-
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
41-
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
40+
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
41+
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
4242
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
43-
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
44-
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
45-
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
46-
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
47-
golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw=
48-
golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
43+
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
44+
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
45+
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
46+
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
47+
golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg=
48+
golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI=
4949
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
5050
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
5151
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

instance.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"os"
2727
"os/exec"
2828
"os/user"
29+
"path"
2930
"path/filepath"
3031
"regexp"
3132
"strconv"
@@ -89,7 +90,7 @@ type Instance struct {
8990
executionSysProcAttr *syscall.SysProcAttr // This is used internally to allow execution of Caché code as different users
9091
}
9192

92-
// Update will query the the underlying instance and update the Instance fields with its current state.
93+
// Update will query the underlying instance and update the Instance fields with its current state.
9394
// It returns any error encountered.
9495
func (i *Instance) Update() error {
9596
procAttr, err := i.managerSysProc()
@@ -260,7 +261,7 @@ func (i *Instance) managerSysProc() (*syscall.SysProcAttr, error) {
260261

261262
mgr, _, err := i.DetermineManager()
262263
if err != nil {
263-
var pIscErr *ParametersISCNotExistError
264+
var pIscErr *ParametersISCError
264265
if errors.As(err, &pIscErr) {
265266
log.WithError(pIscErr).Debug("cannot determine manager")
266267
return nil, nil
@@ -649,6 +650,18 @@ func (i *Instance) ExecuteString(namespace string, code string) (string, error)
649650
return i.Execute(namespace, b)
650651
}
651652

653+
type ParametersISCError struct {
654+
err error
655+
}
656+
657+
func (e *ParametersISCError) Error() string {
658+
return e.err.Error()
659+
}
660+
661+
func (e *ParametersISCError) Unwrap() error {
662+
return e.err
663+
}
664+
652665
type ParametersISCNotExistError struct {
653666
dir string
654667
err error
@@ -668,7 +681,13 @@ func (i *Instance) ReadParametersISC() (ParametersISC, error) {
668681
f, err := parameterReader(i.Directory, iscParametersFile)
669682
if err != nil {
670683
if errors.Is(err, os.ErrNotExist) {
671-
return nil, &ParametersISCNotExistError{dir: i.Directory, err: err}
684+
return nil, &ParametersISCError{&ParametersISCNotExistError{dir: i.Directory, err: err}}
685+
}
686+
687+
if errors.Is(err, os.ErrPermission) {
688+
return nil, &ParametersISCError{fmt.Errorf("permissions denied %s. Error [%w]",
689+
path.Join(i.Directory, iscParametersFile),
690+
err)}
672691
}
673692
return nil, err
674693
}

instance_test.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232

3333
var _ = Describe("Instance", func() {
3434
const (
35+
instanceName = "INSTTEST"
3536
cacheqlist = "INSTTEST^/ensemble/instances/insttest/^2015.2.2.805.0.16216^running, since Fri May 13 22:07:02 2016^cache.cpf^56772^57772^62972^ok^"
3637
durableqlist = "INSTTEST^/ensemble/instances/insttest/^2015.2.2.805.0.16216^running, since Fri May 13 22:07:02 2016^cache.cpf^56772^57772^62972^ok^^^^/mgr/config"
3738
ensembleqlist = "INSTTEST^/ensemble/instances/insttest/^2015.2.2.805.0.16216^running, since Fri May 13 22:07:02 2016^cache.cpf^56772^57772^62972^ok^Ensemble"
@@ -434,6 +435,9 @@ var _ = Describe("Instance", func() {
434435
defer can()
435436
err = instance.WaitForReady(ctx)
436437
})
438+
AfterEach(func() {
439+
getQlist = qlist
440+
})
437441
It("Does not return an error", func() {
438442
Expect(err).NotTo(HaveOccurred())
439443
})
@@ -554,15 +558,38 @@ var _ = Describe("Instance", func() {
554558
})
555559

556560
Describe("Update", func() {
561+
BeforeEach(func() {
562+
getQlist = func(instanceName string, _ *syscall.SysProcAttr) (string, error) {
563+
return cacheqlist, nil
564+
}
565+
instance = &Instance{Name: instanceName}
566+
})
567+
AfterEach(func() {
568+
getQlist = qlist
569+
})
570+
557571
// To test instance updates when running somewhere that doesn't actually have access to the
558572
// parameters.isc file, such as `iscenv` wrapping `csession` or `iris`
559573
Context("Valid qlist without parameters.isc", func() {
560574
BeforeEach(func() {
561575
parameterReader = func(directory string, file string) (io.ReadCloser, error) {
562576
return nil, os.ErrNotExist
563577
}
564-
instance, err = InstanceFromQList(cacheqlist)
565-
Expect(err).ToNot(HaveOccurred())
578+
})
579+
580+
It("Does not return an error", func() {
581+
err := instance.Update()
582+
Expect(err).NotTo(HaveOccurred())
583+
})
584+
})
585+
586+
// For when the user doesn't have permissions to read parameters.isc, such as running as a
587+
// non-owner user that is still a valid user in ISC instance
588+
Context("Valid qlist but cannot read parameters.isc", func() {
589+
BeforeEach(func() {
590+
parameterReader = func(directory string, file string) (io.ReadCloser, error) {
591+
return nil, os.ErrPermission
592+
}
566593
})
567594

568595
It("Does not return an error", func() {

0 commit comments

Comments
 (0)