tests: add Fchmodat test
Test that we handle symlinks correctly.
This commit is contained in:
parent
57a52d6aef
commit
8253c55386
|
@ -2,6 +2,7 @@ package syscallcompat
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"os"
|
||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
@ -32,3 +33,56 @@ func TestReadlinkat(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFchmodat(t *testing.T) {
|
||||||
|
regular := "TestFchmodat_Regular"
|
||||||
|
f, err := os.OpenFile(tmpDir+"/"+regular, os.O_CREATE|os.O_WRONLY, 0000)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
f.Close()
|
||||||
|
symlink := "TestFchmodat_Symlink"
|
||||||
|
err = syscall.Symlink(regular, tmpDir+"/"+symlink)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
dirfd, err := syscall.Open(tmpDir, syscall.O_RDONLY, 0)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer syscall.Close(dirfd)
|
||||||
|
|
||||||
|
// Check that chmod on a regular file works ok
|
||||||
|
err = Fchmodat(dirfd, regular, 0111, 0)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
var st syscall.Stat_t
|
||||||
|
syscall.Lstat(tmpDir+"/"+regular, &st)
|
||||||
|
st.Mode &= 0777
|
||||||
|
if st.Mode != 0111 {
|
||||||
|
t.Errorf("wrong mode: %#0o", st.Mode)
|
||||||
|
}
|
||||||
|
err = Fchmodat(dirfd, regular, 0000, 0)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
syscall.Lstat(tmpDir+"/"+regular, &st)
|
||||||
|
st.Mode &= 0777
|
||||||
|
if st.Mode != 0000 {
|
||||||
|
t.Errorf("wrong mode: %#0o", st.Mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check what happens on a symlink
|
||||||
|
err = Fchmodat(dirfd, symlink, 0333, 0)
|
||||||
|
if err == nil {
|
||||||
|
syscall.Lstat(tmpDir+"/"+symlink, &st)
|
||||||
|
st.Mode &= 0777
|
||||||
|
t.Errorf("chmod on symlink should have failed, but did not. New mode=%#0o", st.Mode)
|
||||||
|
}
|
||||||
|
syscall.Lstat(tmpDir+"/"+regular, &st)
|
||||||
|
st.Mode &= 0777
|
||||||
|
if st.Mode != 0000 {
|
||||||
|
t.Errorf("chmod on symlink affected symlink target: New mode=%#0o", st.Mode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue