forked from fusepy/fusepy
-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathcontext.py
executable file
·70 lines (55 loc) · 1.94 KB
/
context.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env python
from __future__ import print_function, absolute_import, division
import logging
from errno import ENOENT
from stat import S_IFDIR, S_IFREG
from sys import argv, exit
from time import time
from fuse import FUSE, FuseOSError, Operations, LoggingMixIn, fuse_get_context
class Context(LoggingMixIn, Operations):
'Example filesystem to demonstrate fuse_get_context()'
def getattr(self, path, fh=None):
uid, gid, pid = fuse_get_context()
if path == '/':
st = dict(st_mode=(S_IFDIR | 0o755), st_nlink=2)
elif path == '/uid':
size = len('%s\n' % uid)
st = dict(st_mode=(S_IFREG | 0o444), st_size=size)
elif path == '/gid':
size = len('%s\n' % gid)
st = dict(st_mode=(S_IFREG | 0o444), st_size=size)
elif path == '/pid':
size = len('%s\n' % pid)
st = dict(st_mode=(S_IFREG | 0o444), st_size=size)
else:
raise FuseOSError(ENOENT)
st['st_ctime'] = st['st_mtime'] = st['st_atime'] = time()
return st
def read(self, path, size, offset, fh):
uid, gid, pid = fuse_get_context()
encoded = lambda x: ('%s\n' % x).encode('utf-8')
if path == '/uid':
return encoded(uid)
elif path == '/gid':
return encoded(gid)
elif path == '/pid':
return encoded(pid)
raise RuntimeError('unexpected path: %r' % path)
def readdir(self, path, fh):
return ['.', '..', 'uid', 'gid', 'pid']
# Disable unused operations:
access = None
flush = None
getxattr = None
listxattr = None
open = None
opendir = None
release = None
releasedir = None
statfs = None
if __name__ == '__main__':
if len(argv) != 2:
print('usage: %s <mountpoint>' % argv[0])
exit(1)
logging.basicConfig(level=logging.DEBUG)
fuse = FUSE(Context(), argv[1], foreground=True, ro=True)