/usr/sbin/ltspfsmounter is in ltspfs 1.4-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | #!/usr/bin/python
import os
import sys
from subprocess import call
import re
hook_dirs=list()
def run_hooks(mode, mountpoint):
executed_hooks=list()
valid_filename=re.compile('^[a-zA-Z0-9\-_]*$')
for dir in hook_dirs:
if os.path.isdir(dir):
# get a unique list of hook scripts
hook_scripts=list(set(os.listdir(dir)))
hook_scripts.sort()
for script in hook_scripts:
# only run the first script of a given name
if executed_hooks.count(script) == 0 and valid_filename.match(script):
executed_hooks.append(script)
try:
call([os.path.join(dir, script), mode, mountpoint])
except:
# be very tolerant of failures with hook scripts
pass
def get_var(name):
return os.environ.get(name)
def add_ltspfsmount(conn, path, dev, mediaroot):
lbmount_command = ['lbmount', dev]
ltspfs_mount = ['ltspfs', conn+':'+path, mediaroot+'/'+dev]
env = os.environ.copy()
try:
call(lbmount_command)
os.mkdir(mediaroot+'/'+dev, 0700)
run_hooks('add', os.path.join(mediaroot, dev))
except OSError, e:
print >>sys.stderr, "suid mount failed:", e
try:
call(ltspfs_mount, env=env)
except OSError, e:
print >>sys.stderr, "mount failed:", e
def remove_ltspfsmount(root, dev):
lbumount_command=['lbmount', '--umount', dev]
ltspfs_umount=['fusermount', '-uzq', root+'/'+dev]
try:
call(ltspfs_umount)
run_hooks('remove', os.path.join(root, dev))
except OSError, e:
print >>sys.stderr, "umount failed:", e
try:
os.rmdir(root+'/'+dev)
call(lbumount_command)
except OSError, e:
print >>sys.stderr, "suid umount failed:", e
def cleanup(user, mediaroot):
known_mounts = open( '/proc/mounts', 'r' ).readlines()
for mount in known_mounts:
if mount.startswith('ltspfs') and user in mount:
mountpoint=mount.split()[1]
device=mountpoint.split('/')[-1]
remove_ltspfsmount(mediaroot, device)
run_hooks('cleanup', '')
sys.exit(0)
def main():
if len(sys.argv) < 3:
print 'usage: %s mountpoint add|remove|cleanup' % sys.argv[0]
sys.exit(1)
if not os.access('/dev/fuse', 2):
sys.stderr.write('/dev/fuse not writeable\n')
sys.exit(1)
# check if hook dirs are present
for dir in ['/etc', '/usr/share', '/usr/lib']:
dir=os.path.join(dir, 'ltspfs/mounter.d')
if os.path.isdir(dir):
hook_dirs.append(dir)
path = sys.argv[1]
command = sys.argv[2]
username = get_var('USER')
mediaroot = "/media/%s" % username
if not get_var('SSH_CONNECTION'):
conn = "127.0.0.1"
os.putenv('SSH_CONNECTION', '127.0.0.1')
else:
conn = get_var('SSH_CONNECTION').split()[0]
dev = path.split('/')[-1]
if command=='add':
add_ltspfsmount(conn, path, dev, mediaroot)
elif command=='remove':
remove_ltspfsmount(mediaroot, dev)
elif command=='cleanup':
cleanup(username, mediaroot)
else:
print 'unknown command'
if __name__ == "__main__":
main()
|