summaryrefslogtreecommitdiff
path: root/cmds/test.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmds/test.go')
-rw-r--r--cmds/test.go73
1 files changed, 73 insertions, 0 deletions
diff --git a/cmds/test.go b/cmds/test.go
new file mode 100644
index 0000000..77534a3
--- /dev/null
+++ b/cmds/test.go
@@ -0,0 +1,73 @@
+package cmds
+
+import (
+ "os"
+ "os/user"
+ "strconv"
+ "syscall"
+)
+
+func test(args []string) int {
+ if len(args) <= 2 {
+ return 1
+ }
+
+ fi, err := os.Lstat(args[2])
+ c, _ := user.Current()
+ if err != nil {
+ return 1
+ }
+
+ switch args[1] {
+ case "-e":
+ return 0
+ case "-f":
+ if !fi.IsDir() {
+ return 0
+ }
+ break
+ case "-d":
+ if fi.IsDir() {
+ return 0
+ }
+ break
+ case "-r":
+ if fi.Mode().Perm() & 0400 != 0 {
+ return 0
+ }
+ break
+ case "-w":
+ if fi.Mode().Perm() & 0200 != 0 {
+ return 0
+ }
+ break
+ case "-x":
+ if fi.Mode().Perm() & 0100 != 0 {
+ return 0
+ }
+ break
+ case "-S":
+ if fi.Size() > 0 {
+ return 0
+ }
+ break
+ case "-L":
+ if fi.Mode() & os.ModeSymlink != 0 {
+ return 0
+ }
+ break
+ case "-O":
+ s := fi.Sys().(*syscall.Stat_t)
+ if c.Uid == strconv.Itoa(int(s.Uid)) {
+ return 0
+ }
+ break
+ case "-G":
+ s := fi.Sys().(*syscall.Stat_t)
+ if c.Gid == strconv.Itoa(int(s.Gid)) {
+ return 0
+ }
+ break
+ }
+ return 1
+}