From a11b43ff75dd162fdfe122ffaf31a3a1c6b737b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Thu, 22 Oct 2020 17:59:37 +0200 Subject: [PATCH] map more permission denied codes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jörn Friedrich Dreyer --- changelog/unreleased/handle-more-eos-errors.md | 5 +++++ pkg/eosclient/eosclient.go | 14 ++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 changelog/unreleased/handle-more-eos-errors.md diff --git a/changelog/unreleased/handle-more-eos-errors.md b/changelog/unreleased/handle-more-eos-errors.md new file mode 100644 index 0000000000..5efab56829 --- /dev/null +++ b/changelog/unreleased/handle-more-eos-errors.md @@ -0,0 +1,5 @@ +Bugfix: Handle more eos errors + +We now treat E2BIG, EACCES as a permission error, which occur, eg. when acl checks fail and return a permission denied error. + +https://github.com/cs3org/reva/pull/1269 \ No newline at end of file diff --git a/pkg/eosclient/eosclient.go b/pkg/eosclient/eosclient.go index d7fbb9520e..ab87ff00b8 100644 --- a/pkg/eosclient/eosclient.go +++ b/pkg/eosclient/eosclient.go @@ -198,7 +198,7 @@ func (c *Client) execute(ctx context.Context, cmd *exec.Cmd) (string, string, er switch exitStatus { case 0: err = nil - case 2: + case int(syscall.ENOENT): err = errtypes.NotFound(errBuf.String()) } } @@ -208,7 +208,7 @@ func (c *Client) execute(ctx context.Context, cmd *exec.Cmd) (string, string, er env := fmt.Sprintf("%s", cmd.Env) log.Info().Str("args", args).Str("env", env).Int("exit", exitStatus).Msg("eos cmd") - if err != nil && exitStatus != 2 { // don't wrap the errtypes.NotFoundError + if err != nil && exitStatus != int(syscall.ENOENT) { // don't wrap the errtypes.NotFoundError err = errors.Wrap(err, "eosclient: error while executing command") } @@ -249,10 +249,12 @@ func (c *Client) executeEOS(ctx context.Context, cmd *exec.Cmd) (string, string, switch exitStatus { case 0: err = nil - case 2: + case int(syscall.ENOENT): err = errtypes.NotFound(errBuf.String()) - case 1, 22: - // eos reports back error code 22 when the user is not allowed to enter the instance + case int(syscall.EPERM), int(syscall.E2BIG), int(syscall.EINVAL): + // eos reports back error code 1 (EPERM) when ? + // eos reports back error code 7 (E2BIG) when the user is not allowed to read the directory + // eos reports back error code 22 (EINVAL) when the user is not allowed to enter the instance err = errtypes.PermissionDenied(errBuf.String()) } } @@ -262,7 +264,7 @@ func (c *Client) executeEOS(ctx context.Context, cmd *exec.Cmd) (string, string, env := fmt.Sprintf("%s", cmd.Env) log.Info().Str("args", args).Str("env", env).Int("exit", exitStatus).Str("err", errBuf.String()).Msg("eos cmd") - if err != nil && exitStatus != 2 { // don't wrap the errtypes.NotFoundError + if err != nil && exitStatus != int(syscall.ENOENT) { // don't wrap the errtypes.NotFoundError err = errors.Wrap(err, "eosclient: error while executing command") }