Skip to content

Commit 8501789

Browse files
committed
Don't scan network filesystems (MacOSX, Linux)
Close #50
1 parent 2d1bdeb commit 8501789

File tree

4 files changed

+191
-2
lines changed

4 files changed

+191
-2
lines changed

scanner/fs_darwin.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// +build darwin
2+
3+
package main
4+
5+
import (
6+
"syscall"
7+
)
8+
9+
func typeToString(name [16]int8) string {
10+
var b []byte
11+
for _, c := range name {
12+
if c == 0 {
13+
break
14+
}
15+
b = append(b, byte(c))
16+
}
17+
return string(b)
18+
}
19+
20+
func isNetworkFS(path string) bool {
21+
var buf syscall.Statfs_t
22+
if err := syscall.Statfs(path, &buf); err != nil {
23+
return false
24+
}
25+
switch typeToString(buf.Fstypename) {
26+
case "nfs", "afpfs", "smbfs", "webdav", "devfs":
27+
return true
28+
default:
29+
return false
30+
}
31+
}

scanner/fs_generic.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// +build !linux,!darwin
2+
3+
package main
4+
5+
func isNetworkFS(string) bool { return false }

scanner/fs_linux.go

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
// +build linux
2+
3+
package main
4+
5+
import (
6+
"syscall"
7+
)
8+
9+
const (
10+
/* statfs(2) */
11+
ADFS_SUPER_MAGIC = 0xadf5
12+
AFFS_SUPER_MAGIC = 0xadff
13+
AFS_SUPER_MAGIC = 0x5346414f
14+
ANON_INODE_FS_MAGIC = 0x09041934
15+
AUTOFS_SUPER_MAGIC = 0x0187
16+
BDEVFS_MAGIC = 0x62646576
17+
BEFS_SUPER_MAGIC = 0x42465331
18+
BFS_MAGIC = 0x1badface
19+
BINFMTFS_MAGIC = 0x42494e4d
20+
BPF_FS_MAGIC = 0xcafe4a11
21+
BTRFS_SUPER_MAGIC = 0x9123683e
22+
BTRFS_TEST_MAGIC = 0x73727279
23+
CGROUP_SUPER_MAGIC = 0x27e0eb
24+
CGROUP2_SUPER_MAGIC = 0x63677270
25+
CIFS_MAGIC_NUMBER = 0xff534d42
26+
CODA_SUPER_MAGIC = 0x73757245
27+
COH_SUPER_MAGIC = 0x012ff7b7
28+
CRAMFS_MAGIC = 0x28cd3d45
29+
DEBUGFS_MAGIC = 0x64626720
30+
DEVFS_SUPER_MAGIC = 0x1373
31+
DEVPTS_SUPER_MAGIC = 0x1cd1
32+
ECRYPTFS_SUPER_MAGIC = 0xf15f
33+
EFIVARFS_MAGIC = 0xde5e81e4
34+
EFS_SUPER_MAGIC = 0x00414a53
35+
EXT_SUPER_MAGIC = 0x137d
36+
EXT2_OLD_SUPER_MAGIC = 0xef51
37+
EXT2_SUPER_MAGIC = 0xef53
38+
EXT3_SUPER_MAGIC = 0xef53
39+
EXT4_SUPER_MAGIC = 0xef53
40+
F2FS_SUPER_MAGIC = 0xf2f52010
41+
FUSE_SUPER_MAGIC = 0x65735546
42+
FUTEXFS_SUPER_MAGIC = 0xbad1dea
43+
HFS_SUPER_MAGIC = 0x4244
44+
HOSTFS_SUPER_MAGIC = 0x00c0ffee
45+
HPFS_SUPER_MAGIC = 0xf995e849
46+
HUGETLBFS_MAGIC = 0x958458f6
47+
ISOFS_SUPER_MAGIC = 0x9660
48+
JFFS2_SUPER_MAGIC = 0x72b6
49+
JFS_SUPER_MAGIC = 0x3153464a
50+
MINIX_SUPER_MAGIC = 0x137f /* orig. minix */
51+
MINIX_SUPER_MAGIC2 = 0x138f /* 30 char minix */
52+
MINIX2_SUPER_MAGIC = 0x2468 /* minix V2 */
53+
MINIX2_SUPER_MAGIC2 = 0x2478 /* minix V2, 30 char names */
54+
MINIX3_SUPER_MAGIC = 0x4d5a /* minix V3 fs, 60 char names */
55+
MQUEUE_MAGIC = 0x19800202
56+
MSDOS_SUPER_MAGIC = 0x4d44
57+
MTD_INODE_FS_MAGIC = 0x11307854
58+
NCP_SUPER_MAGIC = 0x564c
59+
NFS_SUPER_MAGIC = 0x6969
60+
NILFS_SUPER_MAGIC = 0x3434
61+
NSFS_MAGIC = 0x6e736673
62+
NTFS_SB_MAGIC = 0x5346544e
63+
OCFS2_SUPER_MAGIC = 0x7461636f
64+
OPENPROM_SUPER_MAGIC = 0x9fa1
65+
OVERLAYFS_SUPER_MAGIC = 0x794c7630
66+
PIPEFS_MAGIC = 0x50495045
67+
PROC_SUPER_MAGIC = 0x9fa0
68+
PSTOREFS_MAGIC = 0x6165676c
69+
QNX4_SUPER_MAGIC = 0x002f
70+
QNX6_SUPER_MAGIC = 0x68191122
71+
RAMFS_MAGIC = 0x858458f6
72+
REISERFS_SUPER_MAGIC = 0x52654973
73+
ROMFS_MAGIC = 0x7275
74+
SECURITYFS_MAGIC = 0x73636673
75+
SELINUX_MAGIC = 0xf97cff8c
76+
SMACK_MAGIC = 0x43415d53
77+
SMB_SUPER_MAGIC = 0x517b
78+
SMB2_MAGIC_NUMBER = 0xfe534d42
79+
SOCKFS_MAGIC = 0x534f434b
80+
SQUASHFS_MAGIC = 0x73717368
81+
SYSFS_MAGIC = 0x62656572
82+
SYSV2_SUPER_MAGIC = 0x012ff7b6
83+
SYSV4_SUPER_MAGIC = 0x012ff7b5
84+
TMPFS_MAGIC = 0x01021994
85+
TRACEFS_MAGIC = 0x74726163
86+
UDF_SUPER_MAGIC = 0x15013346
87+
UFS_MAGIC = 0x00011954
88+
USBDEVICE_SUPER_MAGIC = 0x9fa2
89+
V9FS_MAGIC = 0x01021997
90+
VXFS_SUPER_MAGIC = 0xa501fcf5
91+
XENFS_SUPER_MAGIC = 0xabba1974
92+
XENIX_SUPER_MAGIC = 0x012ff7b4
93+
XFS_SUPER_MAGIC = 0x58465342
94+
_XIAFS_SUPER_MAGIC = 0x012fd16d
95+
96+
// vmblock.tar:vmblock-only/linux/filesystem.h
97+
VMBLOCK_SUPER_MAGIC = 0xabababab
98+
99+
// linux/fs/afs/super.c
100+
AFS_FS_MAGIC = 0x6b414653
101+
102+
// linux/fs/ceph/super.h
103+
CEPH_SUPER_MAGIC = 0x00c36400
104+
105+
// openafs-1.6.18.2/src/afs/LINUX/osi_vfsops.c
106+
OPENAFS_FS_MAGIC = 0x5346414f
107+
)
108+
109+
func isNetworkFS(path string) bool {
110+
var buf syscall.Statfs_t
111+
if err := syscall.Statfs(path, &buf); err != nil {
112+
return false
113+
}
114+
switch uint32(buf.Type) {
115+
case
116+
// pseudo filesystems
117+
BDEVFS_MAGIC,
118+
BINFMTFS_MAGIC,
119+
CGROUP_SUPER_MAGIC,
120+
DEBUGFS_MAGIC,
121+
EFIVARFS_MAGIC,
122+
FUTEXFS_SUPER_MAGIC,
123+
HUGETLBFS_MAGIC,
124+
PIPEFS_MAGIC,
125+
PROC_SUPER_MAGIC,
126+
SELINUX_MAGIC,
127+
SMACK_MAGIC,
128+
SYSFS_MAGIC,
129+
// network filesystems
130+
AFS_FS_MAGIC,
131+
OPENAFS_FS_MAGIC,
132+
CEPH_SUPER_MAGIC,
133+
CIFS_MAGIC_NUMBER,
134+
CODA_SUPER_MAGIC,
135+
NCP_SUPER_MAGIC,
136+
NFS_SUPER_MAGIC,
137+
OCFS2_SUPER_MAGIC,
138+
SMB_SUPER_MAGIC,
139+
V9FS_MAGIC,
140+
VMBLOCK_SUPER_MAGIC,
141+
SMB2_MAGIC_NUMBER,
142+
XENFS_SUPER_MAGIC:
143+
return true
144+
default:
145+
return false
146+
}
147+
}

scanner/main.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,16 +144,22 @@ func main() {
144144

145145
for _, root := range flag.Args() {
146146
filepath.Walk(filepath.Clean(root), func(path string, info os.FileInfo, err error) error {
147+
if isNetworkFS(path) {
148+
if !quiet {
149+
fmt.Fprintf(logFile, "Skipping %s: pseudo or network filesystem\n", path)
150+
}
151+
return filepath.SkipDir
152+
}
147153
if !quiet {
148154
fmt.Fprintf(logFile, "examining %s\n", path)
149155
}
150156
if err != nil {
151157
fmt.Fprintf(errFile, "%s: %s\n", path, err)
152158
return nil
153159
}
154-
if excludes.Has(path){
160+
if excludes.Has(path) {
155161
if !quiet {
156-
fmt.Fprintf(logFile, "Skipping %s\n", path)
162+
fmt.Fprintf(logFile, "Skipping %s: explicitly excluded\n", path)
157163
}
158164
return filepath.SkipDir
159165
}

0 commit comments

Comments
 (0)