go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/connection/local/statutil/stat_test.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package statutil
     5  
     6  import (
     7  	"io/fs"
     8  	"os"
     9  	"path/filepath"
    10  	"testing"
    11  	"time"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  	"go.mondoo.com/cnquery/providers/os/connection/mock"
    16  	"go.mondoo.com/cnquery/providers/os/connection/shared"
    17  )
    18  
    19  func TestLinuxStatCmd(t *testing.T) {
    20  	filepath, _ := filepath.Abs("./testdata/linux.toml")
    21  	p, err := mock.New(filepath, nil)
    22  	require.NoError(t, err)
    23  
    24  	statHelper := New(p)
    25  
    26  	// get file stats
    27  	fi, err := statHelper.Stat("/etc/ssh/sshd_config")
    28  	require.NoError(t, err)
    29  
    30  	assert.Equal(t, int64(4317), fi.Size())
    31  	assert.Equal(t, false, fi.IsDir())
    32  	assert.Equal(t, os.FileMode(0x180), fi.Mode())
    33  	assert.Equal(t, time.Unix(1590420240, 0), fi.ModTime())
    34  	require.NoError(t, err)
    35  	mode := fi.Mode()
    36  	assert.Zero(t, mode&fs.ModeSetuid)
    37  	assert.Equal(t, "sshd_config", fi.Name())
    38  
    39  	fi, err = statHelper.Stat("/usr/bin/su")
    40  	require.NoError(t, err)
    41  	mode = fi.Mode()
    42  	assert.NotZero(t, mode&fs.ModeSetuid)
    43  	assert.Zero(t, mode&fs.ModeSetgid)
    44  }
    45  
    46  func TestOpenbsdStatCmd(t *testing.T) {
    47  	filepath, _ := filepath.Abs("./testdata/openbsd.toml")
    48  	p, err := mock.New(filepath, nil)
    49  	require.NoError(t, err)
    50  
    51  	statHelper := New(p)
    52  
    53  	// get file stats
    54  	fi, err := statHelper.Stat("/etc/ssh/sshd_config")
    55  	require.NoError(t, err)
    56  
    57  	assert.Equal(t, int64(2259), fi.Size())
    58  	assert.Equal(t, false, fi.IsDir())
    59  	assert.Equal(t, "-rw-r--r--", fi.Mode().String())
    60  	assert.Equal(t, time.Unix(1592996018, 0), fi.ModTime())
    61  	assert.Equal(t, int64(0), fi.Sys().(*shared.FileInfo).Uid)
    62  	assert.Equal(t, int64(0), fi.Sys().(*shared.FileInfo).Gid)
    63  	assert.Equal(t, "sshd_config", fi.Name())
    64  }
    65  
    66  func TestToFileMode(t *testing.T) {
    67  	t.Run("directory and setgid", func(t *testing.T) {
    68  		m := toFileMode(0o040000 | 0o002000 | 0o755)
    69  		assert.True(t, m.IsDir())
    70  		assert.True(t, (m&fs.ModeSetgid) > 0)
    71  		assert.False(t, (m&fs.ModeSetuid) > 0)
    72  		assert.False(t, (m&fs.ModeSticky) > 0)
    73  		assert.Equal(t, fs.FileMode(0o755), (m & 0o777))
    74  	})
    75  
    76  	t.Run("directory and setuid", func(t *testing.T) {
    77  		m := toFileMode(0o040000 | 0o004000 | 0o755)
    78  		assert.True(t, m.IsDir())
    79  		assert.False(t, (m&fs.ModeSetgid) > 0)
    80  		assert.True(t, (m&fs.ModeSetuid) > 0)
    81  		assert.False(t, (m&fs.ModeSticky) > 0)
    82  		assert.Equal(t, fs.FileMode(0o755), (m & 0o777))
    83  	})
    84  
    85  	t.Run("directory and setuid and sticky", func(t *testing.T) {
    86  		m := toFileMode(0o040000 | 0o004000 | 0o001000 | 0o755)
    87  		assert.True(t, m.IsDir())
    88  		assert.False(t, (m&fs.ModeSetgid) > 0)
    89  		assert.True(t, (m&fs.ModeSetuid) > 0)
    90  		assert.True(t, (m&fs.ModeSticky) > 0)
    91  		assert.Equal(t, fs.FileMode(0o755), (m & 0o777))
    92  	})
    93  
    94  	t.Run("file and setuid", func(t *testing.T) {
    95  		m := toFileMode(0o170000 | 0o100000 | 0o004000 | 0o755)
    96  		assert.False(t, m.IsDir())
    97  		assert.False(t, (m&fs.ModeSetgid) > 0)
    98  		assert.True(t, (m&fs.ModeSetuid) > 0)
    99  		assert.False(t, (m&fs.ModeSticky) > 0)
   100  		assert.Equal(t, fs.FileMode(0o755), (m & 0o777))
   101  	})
   102  
   103  	t.Run("file and setuid and setgid", func(t *testing.T) {
   104  		m := toFileMode(0o170000 | 0o100000 | 0o004000 | 0o002000 | 0o755)
   105  		assert.False(t, m.IsDir())
   106  		assert.True(t, (m&fs.ModeSetgid) > 0)
   107  		assert.True(t, (m&fs.ModeSetuid) > 0)
   108  		assert.False(t, (m&fs.ModeSticky) > 0)
   109  		assert.Equal(t, fs.FileMode(0o755), (m & 0o777))
   110  	})
   111  }