mirror of https://github.com/lib/pq.git
110 lines
1.9 KiB
Go
110 lines
1.9 KiB
Go
//go:build !windows
|
|
// +build !windows
|
|
|
|
package pq
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
type stat_t_wrapper struct {
|
|
stat syscall.Stat_t
|
|
}
|
|
|
|
func (stat_t *stat_t_wrapper) Name() string {
|
|
return "pem.key"
|
|
}
|
|
|
|
func (stat_t *stat_t_wrapper) Size() int64 {
|
|
return int64(100)
|
|
}
|
|
|
|
func (stat_t *stat_t_wrapper) Mode() os.FileMode {
|
|
return os.FileMode(stat_t.stat.Mode)
|
|
}
|
|
|
|
func (stat_t *stat_t_wrapper) ModTime() time.Time {
|
|
return time.Now()
|
|
}
|
|
|
|
func (stat_t *stat_t_wrapper) IsDir() bool {
|
|
return true
|
|
}
|
|
|
|
func (stat_t *stat_t_wrapper) Sys() interface{} {
|
|
return &stat_t.stat
|
|
}
|
|
|
|
func TestHasCorrectRootGroupPermissions(t *testing.T) {
|
|
currentUID := uint32(os.Getuid())
|
|
currentGID := uint32(os.Getgid())
|
|
|
|
testData := []struct {
|
|
expectedError error
|
|
stat syscall.Stat_t
|
|
}{
|
|
{
|
|
expectedError: nil,
|
|
stat: syscall.Stat_t{
|
|
Mode: 0600,
|
|
Uid: currentUID,
|
|
Gid: currentGID,
|
|
},
|
|
},
|
|
{
|
|
expectedError: nil,
|
|
stat: syscall.Stat_t{
|
|
Mode: 0640,
|
|
Uid: 0,
|
|
Gid: currentGID,
|
|
},
|
|
},
|
|
{
|
|
expectedError: errSSLKeyHasUnacceptableUserPermissions,
|
|
stat: syscall.Stat_t{
|
|
Mode: 0666,
|
|
Uid: currentUID,
|
|
Gid: currentGID,
|
|
},
|
|
},
|
|
{
|
|
expectedError: errSSLKeyHasUnacceptableRootPermissions,
|
|
stat: syscall.Stat_t{
|
|
Mode: 0666,
|
|
Uid: 0,
|
|
Gid: currentGID,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, test := range testData {
|
|
wrapper := &stat_t_wrapper{
|
|
stat: test.stat,
|
|
}
|
|
|
|
if test.expectedError != hasCorrectPermissions(wrapper) {
|
|
if test.expectedError == nil {
|
|
t.Errorf(
|
|
"file owned by %d:%d with %s should not have failed check with error \"%s\"",
|
|
test.stat.Uid,
|
|
test.stat.Gid,
|
|
wrapper.Mode(),
|
|
hasCorrectPermissions(wrapper),
|
|
)
|
|
continue
|
|
}
|
|
t.Errorf(
|
|
"file owned by %d:%d with %s, expected \"%s\", got \"%s\"",
|
|
test.stat.Uid,
|
|
test.stat.Gid,
|
|
wrapper.Mode(),
|
|
test.expectedError,
|
|
hasCorrectPermissions(wrapper),
|
|
)
|
|
}
|
|
}
|
|
}
|