Linux vmi284606.contaboserver.net 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64
Apache/2.4.57 (Ubuntu)
: 167.86.127.34 | : 216.73.216.67
Cant Read [ /etc/named.conf ]
7.2.24-0ubuntu0.18.04.17
root
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
usr /
local /
go /
src /
syscall /
[ HOME SHELL ]
Name
Size
Permission
Action
js
[ DIR ]
drwxr-xr-x
asm9_unix1_amd64.s
1.02
KB
-rw-r--r--
asm9_unix2_amd64.s
1.2
KB
-rw-r--r--
asm_aix_ppc64.s
540
B
-rw-r--r--
asm_darwin_386.s
2.5
KB
-rw-r--r--
asm_darwin_amd64.s
2.82
KB
-rw-r--r--
asm_darwin_arm.s
2.81
KB
-rw-r--r--
asm_darwin_arm64.s
2.71
KB
-rw-r--r--
asm_freebsd_arm.s
2.96
KB
-rw-r--r--
asm_freebsd_arm64.s
2.68
KB
-rw-r--r--
asm_linux_386.s
4.67
KB
-rw-r--r--
asm_linux_amd64.s
3.21
KB
-rw-r--r--
asm_linux_arm.s
3.63
KB
-rw-r--r--
asm_linux_arm64.s
2.73
KB
-rw-r--r--
asm_linux_mips64x.s
2.28
KB
-rw-r--r--
asm_linux_mipsx.s
3.28
KB
-rw-r--r--
asm_linux_ppc64x.s
2.66
KB
-rw-r--r--
asm_linux_riscv64.s
2.46
KB
-rw-r--r--
asm_linux_s390x.s
4.19
KB
-rw-r--r--
asm_netbsd_arm.s
2.85
KB
-rw-r--r--
asm_netbsd_arm64.s
2.77
KB
-rw-r--r--
asm_openbsd_arm.s
3.22
KB
-rw-r--r--
asm_openbsd_arm64.s
2.49
KB
-rw-r--r--
asm_plan9_386.s
3.14
KB
-rw-r--r--
asm_plan9_amd64.s
3.06
KB
-rw-r--r--
asm_plan9_arm.s
3.25
KB
-rw-r--r--
asm_solaris_amd64.s
1.79
KB
-rw-r--r--
asm_unix_386.s
2.74
KB
-rw-r--r--
asm_unix_amd64.s
2.08
KB
-rw-r--r--
asm_windows.s
384
B
-rw-r--r--
bpf_bsd.go
4.61
KB
-rw-r--r--
bpf_darwin.go
3.97
KB
-rw-r--r--
const_plan9.go
1.2
KB
-rw-r--r--
creds_test.go
3.26
KB
-rw-r--r--
dir_plan9.go
5.62
KB
-rw-r--r--
dirent.go
3
KB
-rw-r--r--
dirent_test.go
3.28
KB
-rw-r--r--
dll_windows.go
9.72
KB
-rw-r--r--
endian_big.go
239
B
-rw-r--r--
endian_little.go
273
B
-rw-r--r--
env_plan9.go
2.15
KB
-rw-r--r--
env_unix.go
2.77
KB
-rw-r--r--
env_windows.go
1.75
KB
-rw-r--r--
errors_plan9.go
1.61
KB
-rw-r--r--
exec_aix_test.go
816
B
-rw-r--r--
exec_bsd.go
6.36
KB
-rw-r--r--
exec_darwin.go
6.76
KB
-rw-r--r--
exec_libc.go
6.96
KB
-rw-r--r--
exec_linux.go
18.34
KB
-rw-r--r--
exec_linux_test.go
18.81
KB
-rw-r--r--
exec_plan9.go
13.19
KB
-rw-r--r--
exec_solaris_test.go
808
B
-rw-r--r--
exec_unix.go
8.13
KB
-rw-r--r--
exec_unix_test.go
3.89
KB
-rw-r--r--
exec_windows.go
7.64
KB
-rw-r--r--
export_freebsd_test.go
304
B
-rw-r--r--
export_linux_test.go
252
B
-rw-r--r--
export_test.go
193
B
-rw-r--r--
export_unix_test.go
341
B
-rw-r--r--
flock.go
691
B
-rw-r--r--
flock_aix.go
564
B
-rw-r--r--
flock_darwin.go
405
B
-rw-r--r--
flock_linux_32bit.go
481
B
-rw-r--r--
forkpipe.go
501
B
-rw-r--r--
forkpipe2.go
276
B
-rw-r--r--
fs_js.go
10.46
KB
-rw-r--r--
getdirentries_test.go
2.18
KB
-rw-r--r--
lsf_linux.go
2.12
KB
-rw-r--r--
mkall.sh
12.49
KB
-rwxr-xr-x
mkasm_darwin.go
1.66
KB
-rw-r--r--
mkerrors.sh
10.65
KB
-rwxr-xr-x
mkpost.go
1.99
KB
-rw-r--r--
mksyscall.pl
9.52
KB
-rwxr-xr-x
mksyscall_libc.pl
7.8
KB
-rwxr-xr-x
mksyscall_windows.go
707
B
-rw-r--r--
mksysctl_openbsd.pl
5.04
KB
-rwxr-xr-x
mksysnum_darwin.pl
578
B
-rwxr-xr-x
mksysnum_dragonfly.pl
866
B
-rwxr-xr-x
mksysnum_freebsd.pl
1.35
KB
-rwxr-xr-x
mksysnum_linux.pl
1.26
KB
-rwxr-xr-x
mksysnum_netbsd.pl
1.01
KB
-rwxr-xr-x
mksysnum_openbsd.pl
871
B
-rwxr-xr-x
mksysnum_plan9.sh
459
B
-rwxr-xr-x
mmap_unix_test.go
544
B
-rw-r--r--
msan.go
409
B
-rw-r--r--
msan0.go
341
B
-rw-r--r--
net.go
1.19
KB
-rw-r--r--
net_js.go
2.11
KB
-rw-r--r--
netlink_linux.go
4.67
KB
-rw-r--r--
pwd_plan9.go
1.55
KB
-rw-r--r--
route_bsd.go
9.09
KB
-rw-r--r--
route_darwin.go
2.01
KB
-rw-r--r--
route_dragonfly.go
2.61
KB
-rw-r--r--
route_freebsd.go
2.67
KB
-rw-r--r--
route_freebsd_32bit.go
1.29
KB
-rw-r--r--
route_freebsd_64bit.go
724
B
-rw-r--r--
route_netbsd.go
1.43
KB
-rw-r--r--
route_openbsd.go
1.46
KB
-rw-r--r--
security_windows.go
10.12
KB
-rw-r--r--
setuidgid_32_linux.go
306
B
-rw-r--r--
setuidgid_linux.go
302
B
-rw-r--r--
sock_cloexec_linux.go
632
B
-rw-r--r--
sockcmsg_dragonfly.go
547
B
-rw-r--r--
sockcmsg_linux.go
1.12
KB
-rw-r--r--
sockcmsg_unix.go
2.56
KB
-rw-r--r--
sockcmsg_unix_other.go
957
B
-rw-r--r--
str.go
549
B
-rw-r--r--
syscall.go
3.72
KB
-rw-r--r--
syscall_aix.go
17.83
KB
-rw-r--r--
syscall_aix_ppc64.go
405
B
-rw-r--r--
syscall_bsd.go
14.07
KB
-rw-r--r--
syscall_bsd_test.go
1.16
KB
-rw-r--r--
syscall_darwin.go
14.26
KB
-rw-r--r--
syscall_darwin_386.go
2
KB
-rw-r--r--
syscall_darwin_amd64.go
1.92
KB
-rw-r--r--
syscall_darwin_arm.go
2.03
KB
-rw-r--r--
syscall_darwin_arm64.go
1.98
KB
-rw-r--r--
syscall_dragonfly.go
7.98
KB
-rw-r--r--
syscall_dragonfly_amd64.go
1.12
KB
-rw-r--r--
syscall_freebsd.go
15.82
KB
-rw-r--r--
syscall_freebsd_386.go
1.17
KB
-rw-r--r--
syscall_freebsd_amd64.go
1.12
KB
-rw-r--r--
syscall_freebsd_arm.go
1.16
KB
-rw-r--r--
syscall_freebsd_arm64.go
1.12
KB
-rw-r--r--
syscall_freebsd_test.go
1.35
KB
-rw-r--r--
syscall_getwd_bsd.go
453
B
-rw-r--r--
syscall_js.go
6.59
KB
-rw-r--r--
syscall_linux.go
26.05
KB
-rw-r--r--
syscall_linux_386.go
10.91
KB
-rw-r--r--
syscall_linux_amd64.go
5.39
KB
-rw-r--r--
syscall_linux_arm.go
7.47
KB
-rw-r--r--
syscall_linux_arm64.go
6.24
KB
-rw-r--r--
syscall_linux_mips64x.go
6.58
KB
-rw-r--r--
syscall_linux_mipsx.go
7.03
KB
-rw-r--r--
syscall_linux_ppc64x.go
5.21
KB
-rw-r--r--
syscall_linux_riscv64.go
6.4
KB
-rw-r--r--
syscall_linux_s390x.go
8.64
KB
-rw-r--r--
syscall_linux_test.go
10.61
KB
-rw-r--r--
syscall_netbsd.go
7.59
KB
-rw-r--r--
syscall_netbsd_386.go
716
B
-rw-r--r--
syscall_netbsd_amd64.go
709
B
-rw-r--r--
syscall_netbsd_arm.go
716
B
-rw-r--r--
syscall_netbsd_arm64.go
709
B
-rw-r--r--
syscall_openbsd.go
7.06
KB
-rw-r--r--
syscall_openbsd_386.go
715
B
-rw-r--r--
syscall_openbsd_amd64.go
701
B
-rw-r--r--
syscall_openbsd_arm.go
715
B
-rw-r--r--
syscall_openbsd_arm64.go
906
B
-rw-r--r--
syscall_plan9.go
8.94
KB
-rw-r--r--
syscall_plan9_test.go
1.15
KB
-rw-r--r--
syscall_ptrace_test.go
752
B
-rw-r--r--
syscall_solaris.go
15.07
KB
-rw-r--r--
syscall_solaris_amd64.go
487
B
-rw-r--r--
syscall_test.go
1.7
KB
-rw-r--r--
syscall_unix.go
8.3
KB
-rw-r--r--
syscall_unix_test.go
10.61
KB
-rw-r--r--
syscall_windows.go
42.54
KB
-rw-r--r--
syscall_windows_386.go
176
B
-rw-r--r--
syscall_windows_amd64.go
176
B
-rw-r--r--
syscall_windows_test.go
1.8
KB
-rw-r--r--
tables_js.go
19.17
KB
-rw-r--r--
time_fake.go
676
B
-rw-r--r--
time_nofake.go
350
B
-rw-r--r--
timestruct.go
1.13
KB
-rw-r--r--
types_aix.go
3.35
KB
-rw-r--r--
types_darwin.go
4.98
KB
-rw-r--r--
types_dragonfly.go
5.04
KB
-rw-r--r--
types_freebsd.go
6.96
KB
-rw-r--r--
types_linux.go
10.68
KB
-rw-r--r--
types_netbsd.go
4.77
KB
-rw-r--r--
types_openbsd.go
5.04
KB
-rw-r--r--
types_solaris.go
4.88
KB
-rw-r--r--
types_windows.go
26.96
KB
-rw-r--r--
types_windows_386.go
477
B
-rw-r--r--
types_windows_amd64.go
477
B
-rw-r--r--
types_windows_arm.go
477
B
-rw-r--r--
zerrors_aix_ppc64.go
47.16
KB
-rw-r--r--
zerrors_darwin_386.go
55.27
KB
-rw-r--r--
zerrors_darwin_amd64.go
55.27
KB
-rw-r--r--
zerrors_darwin_arm.go
46.08
KB
-rw-r--r--
zerrors_darwin_arm64.go
55.78
KB
-rw-r--r--
zerrors_dragonfly_amd64.go
59.49
KB
-rw-r--r--
zerrors_freebsd_386.go
67.35
KB
-rw-r--r--
zerrors_freebsd_amd64.go
67.4
KB
-rw-r--r--
zerrors_freebsd_arm.go
67.34
KB
-rw-r--r--
zerrors_freebsd_arm64.go
67.41
KB
-rw-r--r--
zerrors_linux_386.go
58.31
KB
-rw-r--r--
zerrors_linux_amd64.go
58.35
KB
-rw-r--r--
zerrors_linux_arm.go
58.83
KB
-rw-r--r--
zerrors_linux_arm64.go
69.52
KB
-rw-r--r--
zerrors_linux_mips.go
70.14
KB
-rw-r--r--
zerrors_linux_mips64.go
69.46
KB
-rw-r--r--
zerrors_linux_mips64le.go
69.46
KB
-rw-r--r--
zerrors_linux_mipsle.go
70.14
KB
-rw-r--r--
zerrors_linux_ppc64.go
71.84
KB
-rw-r--r--
zerrors_linux_ppc64le.go
72.8
KB
-rw-r--r--
zerrors_linux_riscv64.go
71.76
KB
-rw-r--r--
zerrors_linux_s390x.go
74.28
KB
-rw-r--r--
zerrors_netbsd_386.go
67.43
KB
-rw-r--r--
zerrors_netbsd_amd64.go
67.02
KB
-rw-r--r--
zerrors_netbsd_arm.go
66.45
KB
-rw-r--r--
zerrors_netbsd_arm64.go
67.02
KB
-rw-r--r--
zerrors_openbsd_386.go
62.47
KB
-rw-r--r--
zerrors_openbsd_amd64.go
62.43
KB
-rw-r--r--
zerrors_openbsd_arm.go
62.46
KB
-rw-r--r--
zerrors_openbsd_arm64.go
66.36
KB
-rw-r--r--
zerrors_solaris_amd64.go
50.71
KB
-rw-r--r--
zerrors_windows.go
9.97
KB
-rw-r--r--
zerrors_windows_386.go
176
B
-rw-r--r--
zerrors_windows_amd64.go
176
B
-rw-r--r--
zsyscall_aix_ppc64.go
40.02
KB
-rw-r--r--
zsyscall_darwin_386.go
53.97
KB
-rw-r--r--
zsyscall_darwin_386.s
8.65
KB
-rw-r--r--
zsyscall_darwin_amd64.go
53.83
KB
-rw-r--r--
zsyscall_darwin_amd64.s
8.65
KB
-rw-r--r--
zsyscall_darwin_arm.go
53.44
KB
-rw-r--r--
zsyscall_darwin_arm.s
8.56
KB
-rw-r--r--
zsyscall_darwin_arm64.go
53.3
KB
-rw-r--r--
zsyscall_darwin_arm64.s
8.56
KB
-rw-r--r--
zsyscall_dragonfly_amd64.go
30.9
KB
-rw-r--r--
zsyscall_freebsd_386.go
33.55
KB
-rw-r--r--
zsyscall_freebsd_amd64.go
33.41
KB
-rw-r--r--
zsyscall_freebsd_arm.go
33.58
KB
-rw-r--r--
zsyscall_freebsd_arm64.go
33.41
KB
-rw-r--r--
zsyscall_linux_386.go
35.54
KB
-rw-r--r--
zsyscall_linux_amd64.go
40.66
KB
-rw-r--r--
zsyscall_linux_arm.go
39.77
KB
-rw-r--r--
zsyscall_linux_arm64.go
38.92
KB
-rw-r--r--
zsyscall_linux_mips.go
41.52
KB
-rw-r--r--
zsyscall_linux_mips64.go
41.3
KB
-rw-r--r--
zsyscall_linux_mips64le.go
41.3
KB
-rw-r--r--
zsyscall_linux_mipsle.go
41.52
KB
-rw-r--r--
zsyscall_linux_ppc64.go
41.94
KB
-rw-r--r--
zsyscall_linux_ppc64le.go
41.94
KB
-rw-r--r--
zsyscall_linux_riscv64.go
38.95
KB
-rw-r--r--
zsyscall_linux_s390x.go
35.94
KB
-rw-r--r--
zsyscall_netbsd_386.go
29.62
KB
-rw-r--r--
zsyscall_netbsd_amd64.go
29.48
KB
-rw-r--r--
zsyscall_netbsd_arm.go
29.63
KB
-rw-r--r--
zsyscall_netbsd_arm64.go
29.48
KB
-rw-r--r--
zsyscall_openbsd_386.go
30.46
KB
-rw-r--r--
zsyscall_openbsd_amd64.go
30.32
KB
-rw-r--r--
zsyscall_openbsd_arm.go
30.47
KB
-rw-r--r--
zsyscall_openbsd_arm64.go
30.32
KB
-rw-r--r--
zsyscall_plan9_386.go
6.17
KB
-rw-r--r--
zsyscall_plan9_amd64.go
6.17
KB
-rw-r--r--
zsyscall_plan9_arm.go
6.17
KB
-rw-r--r--
zsyscall_solaris_amd64.go
35.79
KB
-rw-r--r--
zsyscall_windows.go
60.53
KB
-rw-r--r--
zsysctl_openbsd.go
11.71
KB
-rw-r--r--
zsysnum_darwin_386.go
14.55
KB
-rw-r--r--
zsysnum_darwin_amd64.go
14.55
KB
-rw-r--r--
zsysnum_darwin_arm.go
12.28
KB
-rw-r--r--
zsysnum_darwin_arm64.go
14.38
KB
-rw-r--r--
zsysnum_dragonfly_amd64.go
22.72
KB
-rw-r--r--
zsysnum_freebsd_386.go
25.65
KB
-rw-r--r--
zsysnum_freebsd_amd64.go
25.65
KB
-rw-r--r--
zsysnum_freebsd_arm.go
25.65
KB
-rw-r--r--
zsysnum_freebsd_arm64.go
36.09
KB
-rw-r--r--
zsysnum_linux_386.go
11.26
KB
-rw-r--r--
zsysnum_linux_amd64.go
10.1
KB
-rw-r--r--
zsysnum_linux_arm.go
11.55
KB
-rw-r--r--
zsysnum_linux_arm64.go
8.95
KB
-rw-r--r--
zsysnum_linux_mips.go
12.1
KB
-rw-r--r--
zsysnum_linux_mips64.go
10.93
KB
-rw-r--r--
zsysnum_linux_mips64le.go
10.93
KB
-rw-r--r--
zsysnum_linux_mipsle.go
12.1
KB
-rw-r--r--
zsysnum_linux_ppc64.go
11.46
KB
-rw-r--r--
zsysnum_linux_ppc64le.go
11.49
KB
-rw-r--r--
zsysnum_linux_riscv64.go
8.88
KB
-rw-r--r--
zsysnum_linux_s390x.go
10.64
KB
-rw-r--r--
zsysnum_netbsd_386.go
25.54
KB
-rw-r--r--
zsysnum_netbsd_amd64.go
25.55
KB
-rw-r--r--
zsysnum_netbsd_arm.go
25.54
KB
-rw-r--r--
zsysnum_netbsd_arm64.go
25.55
KB
-rw-r--r--
zsysnum_openbsd_386.go
14.15
KB
-rw-r--r--
zsysnum_openbsd_amd64.go
14.15
KB
-rw-r--r--
zsysnum_openbsd_arm.go
14.46
KB
-rw-r--r--
zsysnum_openbsd_arm64.go
14.72
KB
-rw-r--r--
zsysnum_plan9.go
1.03
KB
-rw-r--r--
zsysnum_solaris_amd64.go
289
B
-rw-r--r--
zsysnum_windows_386.go
40
B
-rw-r--r--
zsysnum_windows_amd64.go
40
B
-rw-r--r--
ztypes_aix_ppc64.go
4.17
KB
-rw-r--r--
ztypes_darwin_386.go
6.7
KB
-rw-r--r--
ztypes_darwin_amd64.go
6.92
KB
-rw-r--r--
ztypes_darwin_arm.go
6.77
KB
-rw-r--r--
ztypes_darwin_arm64.go
6.92
KB
-rw-r--r--
ztypes_dragonfly_amd64.go
6.7
KB
-rw-r--r--
ztypes_freebsd_386.go
9
KB
-rw-r--r--
ztypes_freebsd_amd64.go
9
KB
-rw-r--r--
ztypes_freebsd_arm.go
9.01
KB
-rw-r--r--
ztypes_freebsd_arm64.go
9
KB
-rw-r--r--
ztypes_linux_386.go
11.55
KB
-rw-r--r--
ztypes_linux_amd64.go
11.92
KB
-rw-r--r--
ztypes_linux_arm.go
11.44
KB
-rw-r--r--
ztypes_linux_arm64.go
10.12
KB
-rw-r--r--
ztypes_linux_mips.go
9.93
KB
-rw-r--r--
ztypes_linux_mips64.go
10.05
KB
-rw-r--r--
ztypes_linux_mips64le.go
10.05
KB
-rw-r--r--
ztypes_linux_mipsle.go
9.93
KB
-rw-r--r--
ztypes_linux_ppc64.go
10.21
KB
-rw-r--r--
ztypes_linux_ppc64le.go
10.35
KB
-rw-r--r--
ztypes_linux_riscv64.go
10.2
KB
-rw-r--r--
ztypes_linux_s390x.go
10.39
KB
-rw-r--r--
ztypes_netbsd_386.go
5.98
KB
-rw-r--r--
ztypes_netbsd_amd64.go
6.17
KB
-rw-r--r--
ztypes_netbsd_arm.go
6.13
KB
-rw-r--r--
ztypes_netbsd_arm64.go
6.17
KB
-rw-r--r--
ztypes_openbsd_386.go
6.73
KB
-rw-r--r--
ztypes_openbsd_amd64.go
6.88
KB
-rw-r--r--
ztypes_openbsd_arm.go
6.84
KB
-rw-r--r--
ztypes_openbsd_arm64.go
6.66
KB
-rw-r--r--
ztypes_solaris_amd64.go
5.56
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : syscall_unix_test.go
// Copyright 2013 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // +build aix darwin dragonfly freebsd linux netbsd openbsd solaris package syscall_test import ( "flag" "fmt" "internal/testenv" "io" "io/ioutil" "net" "os" "os/exec" "path/filepath" "runtime" "strconv" "syscall" "testing" "time" ) // Tests that below functions, structures and constants are consistent // on all Unix-like systems. func _() { // program scheduling priority functions and constants var ( _ func(int, int, int) error = syscall.Setpriority _ func(int, int) (int, error) = syscall.Getpriority ) const ( _ int = syscall.PRIO_USER _ int = syscall.PRIO_PROCESS _ int = syscall.PRIO_PGRP ) // termios constants const ( _ int = syscall.TCIFLUSH _ int = syscall.TCIOFLUSH _ int = syscall.TCOFLUSH ) // fcntl file locking structure and constants var ( _ = syscall.Flock_t{ Type: int16(0), Whence: int16(0), Start: int64(0), Len: int64(0), Pid: int32(0), } ) const ( _ = syscall.F_GETLK _ = syscall.F_SETLK _ = syscall.F_SETLKW ) } // TestFcntlFlock tests whether the file locking structure matches // the calling convention of each kernel. // On some Linux systems, glibc uses another set of values for the // commands and translates them to the correct value that the kernel // expects just before the actual fcntl syscall. As Go uses raw // syscalls directly, it must use the real value, not the glibc value. // Thus this test also verifies that the Flock_t structure can be // roundtripped with F_SETLK and F_GETLK. func TestFcntlFlock(t *testing.T) { if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") { t.Skip("skipping; no child processes allowed on iOS") } flock := syscall.Flock_t{ Type: syscall.F_WRLCK, Start: 31415, Len: 271828, Whence: 1, } if os.Getenv("GO_WANT_HELPER_PROCESS") == "" { // parent tempDir, err := ioutil.TempDir("", "TestFcntlFlock") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } name := filepath.Join(tempDir, "TestFcntlFlock") fd, err := syscall.Open(name, syscall.O_CREAT|syscall.O_RDWR|syscall.O_CLOEXEC, 0) if err != nil { t.Fatalf("Open failed: %v", err) } defer os.RemoveAll(tempDir) defer syscall.Close(fd) if err := syscall.Ftruncate(fd, 1<<20); err != nil { t.Fatalf("Ftruncate(1<<20) failed: %v", err) } if err := syscall.FcntlFlock(uintptr(fd), syscall.F_SETLK, &flock); err != nil { t.Fatalf("FcntlFlock(F_SETLK) failed: %v", err) } cmd := exec.Command(os.Args[0], "-test.run=^TestFcntlFlock$") cmd.Env = append(os.Environ(), "GO_WANT_HELPER_PROCESS=1") cmd.ExtraFiles = []*os.File{os.NewFile(uintptr(fd), name)} out, err := cmd.CombinedOutput() if len(out) > 0 || err != nil { t.Fatalf("child process: %q, %v", out, err) } } else { // child got := flock // make sure the child lock is conflicting with the parent lock got.Start-- got.Len++ if err := syscall.FcntlFlock(3, syscall.F_GETLK, &got); err != nil { t.Fatalf("FcntlFlock(F_GETLK) failed: %v", err) } flock.Pid = int32(syscall.Getppid()) // Linux kernel always set Whence to 0 flock.Whence = 0 if got.Type == flock.Type && got.Start == flock.Start && got.Len == flock.Len && got.Pid == flock.Pid && got.Whence == flock.Whence { os.Exit(0) } t.Fatalf("FcntlFlock got %v, want %v", got, flock) } } // TestPassFD tests passing a file descriptor over a Unix socket. // // This test involved both a parent and child process. The parent // process is invoked as a normal test, with "go test", which then // runs the child process by running the current test binary with args // "-test.run=^TestPassFD$" and an environment variable used to signal // that the test should become the child process instead. func TestPassFD(t *testing.T) { testenv.MustHaveExec(t) if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { passFDChild() return } if runtime.GOOS == "aix" { // Unix network isn't properly working on AIX 7.2 with Technical Level < 2 out, err := exec.Command("oslevel", "-s").Output() if err != nil { t.Skipf("skipping on AIX because oslevel -s failed: %v", err) } if len(out) < len("7200-XX-ZZ-YYMM") { // AIX 7.2, Tech Level XX, Service Pack ZZ, date YYMM t.Skip("skipping on AIX because oslevel -s hasn't the right length") } aixVer := string(out[:4]) tl, err := strconv.Atoi(string(out[5:7])) if err != nil { t.Skipf("skipping on AIX because oslevel -s output cannot be parsed: %v", err) } if aixVer < "7200" || (aixVer == "7200" && tl < 2) { t.Skip("skipped on AIX versions previous to 7.2 TL 2") } } tempDir, err := ioutil.TempDir("", "TestPassFD") if err != nil { t.Fatal(err) } defer os.RemoveAll(tempDir) fds, err := syscall.Socketpair(syscall.AF_LOCAL, syscall.SOCK_STREAM, 0) if err != nil { t.Fatalf("Socketpair: %v", err) } defer syscall.Close(fds[0]) defer syscall.Close(fds[1]) writeFile := os.NewFile(uintptr(fds[0]), "child-writes") readFile := os.NewFile(uintptr(fds[1]), "parent-reads") defer writeFile.Close() defer readFile.Close() cmd := exec.Command(os.Args[0], "-test.run=^TestPassFD$", "--", tempDir) cmd.Env = append(os.Environ(), "GO_WANT_HELPER_PROCESS=1") cmd.ExtraFiles = []*os.File{writeFile} out, err := cmd.CombinedOutput() if len(out) > 0 || err != nil { t.Fatalf("child process: %q, %v", out, err) } c, err := net.FileConn(readFile) if err != nil { t.Fatalf("FileConn: %v", err) } defer c.Close() uc, ok := c.(*net.UnixConn) if !ok { t.Fatalf("unexpected FileConn type; expected UnixConn, got %T", c) } buf := make([]byte, 32) // expect 1 byte oob := make([]byte, 32) // expect 24 bytes closeUnix := time.AfterFunc(5*time.Second, func() { t.Logf("timeout reading from unix socket") uc.Close() }) _, oobn, _, _, err := uc.ReadMsgUnix(buf, oob) if err != nil { t.Fatalf("ReadMsgUnix: %v", err) } closeUnix.Stop() scms, err := syscall.ParseSocketControlMessage(oob[:oobn]) if err != nil { t.Fatalf("ParseSocketControlMessage: %v", err) } if len(scms) != 1 { t.Fatalf("expected 1 SocketControlMessage; got scms = %#v", scms) } scm := scms[0] gotFds, err := syscall.ParseUnixRights(&scm) if err != nil { t.Fatalf("syscall.ParseUnixRights: %v", err) } if len(gotFds) != 1 { t.Fatalf("wanted 1 fd; got %#v", gotFds) } f := os.NewFile(uintptr(gotFds[0]), "fd-from-child") defer f.Close() got, err := ioutil.ReadAll(f) want := "Hello from child process!\n" if string(got) != want { t.Errorf("child process ReadAll: %q, %v; want %q", got, err, want) } } // passFDChild is the child process used by TestPassFD. func passFDChild() { defer os.Exit(0) // Look for our fd. It should be fd 3, but we work around an fd leak // bug here (https://golang.org/issue/2603) to let it be elsewhere. var uc *net.UnixConn for fd := uintptr(3); fd <= 10; fd++ { f := os.NewFile(fd, "unix-conn") var ok bool netc, _ := net.FileConn(f) uc, ok = netc.(*net.UnixConn) if ok { break } } if uc == nil { fmt.Println("failed to find unix fd") return } // Make a file f to send to our parent process on uc. // We make it in tempDir, which our parent will clean up. flag.Parse() tempDir := flag.Arg(0) f, err := ioutil.TempFile(tempDir, "") if err != nil { fmt.Printf("TempFile: %v", err) return } f.Write([]byte("Hello from child process!\n")) f.Seek(0, io.SeekStart) rights := syscall.UnixRights(int(f.Fd())) dummyByte := []byte("x") n, oobn, err := uc.WriteMsgUnix(dummyByte, rights, nil) if err != nil { fmt.Printf("WriteMsgUnix: %v", err) return } if n != 1 || oobn != len(rights) { fmt.Printf("WriteMsgUnix = %d, %d; want 1, %d", n, oobn, len(rights)) return } } // TestUnixRightsRoundtrip tests that UnixRights, ParseSocketControlMessage, // and ParseUnixRights are able to successfully round-trip lists of file descriptors. func TestUnixRightsRoundtrip(t *testing.T) { testCases := [...][][]int{ {{42}}, {{1, 2}}, {{3, 4, 5}}, {{}}, {{1, 2}, {3, 4, 5}, {}, {7}}, } for _, testCase := range testCases { b := []byte{} var n int for _, fds := range testCase { // Last assignment to n wins n = len(b) + syscall.CmsgLen(4*len(fds)) b = append(b, syscall.UnixRights(fds...)...) } // Truncate b b = b[:n] scms, err := syscall.ParseSocketControlMessage(b) if err != nil { t.Fatalf("ParseSocketControlMessage: %v", err) } if len(scms) != len(testCase) { t.Fatalf("expected %v SocketControlMessage; got scms = %#v", len(testCase), scms) } for i, scm := range scms { gotFds, err := syscall.ParseUnixRights(&scm) if err != nil { t.Fatalf("ParseUnixRights: %v", err) } wantFds := testCase[i] if len(gotFds) != len(wantFds) { t.Fatalf("expected %v fds, got %#v", len(wantFds), gotFds) } for j, fd := range gotFds { if fd != wantFds[j] { t.Fatalf("expected fd %v, got %v", wantFds[j], fd) } } } } } func TestRlimit(t *testing.T) { var rlimit, zero syscall.Rlimit err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlimit) if err != nil { t.Fatalf("Getrlimit: save failed: %v", err) } if zero == rlimit { t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit) } set := rlimit set.Cur = set.Max - 1 if runtime.GOOS == "darwin" && set.Cur > 10240 { // The max file limit is 10240, even though // the max returned by Getrlimit is 1<<63-1. // This is OPEN_MAX in sys/syslimits.h. set.Cur = 10240 } err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &set) if err != nil { t.Fatalf("Setrlimit: set failed: %#v %v", set, err) } var get syscall.Rlimit err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &get) if err != nil { t.Fatalf("Getrlimit: get failed: %v", err) } set = rlimit set.Cur = set.Max - 1 if runtime.GOOS == "darwin" && set.Cur > 10240 { set.Cur = 10240 } if set != get { t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get) } err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rlimit) if err != nil { t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err) } } func TestSeekFailure(t *testing.T) { _, err := syscall.Seek(-1, 0, io.SeekStart) if err == nil { t.Fatalf("Seek(-1, 0, 0) did not fail") } str := err.Error() // used to crash on Linux t.Logf("Seek: %v", str) if str == "" { t.Fatalf("Seek(-1, 0, 0) return error with empty message") } } func TestSetsockoptString(t *testing.T) { // should not panic on empty string, see issue #31277 err := syscall.SetsockoptString(-1, 0, 0, "") if err == nil { t.Fatalf("SetsockoptString: did not fail") } } func TestENFILETemporary(t *testing.T) { if !syscall.ENFILE.Temporary() { t.Error("ENFILE is not treated as a temporary error") } }
Close