Bump version
[lxc-userspace.git] / lxcsu
1 #!/usr/bin/python
2
3
4 import setns
5 import os
6
7 from optparse import OptionParser
8
9 drop_capabilities='cap_sys_admin,cap_net_admin,cap_sys_boot,cap_sys_module'
10
11 parser = OptionParser()
12 parser.add_option("-n", "--net",
13                   action="store_true", dest="netns", default=False,
14                   help="Enter network namespace")
15 parser.add_option("-m", "--mnt",
16                   action="store_true", dest="mntns", default=False,
17                   help="Enter mount namespace")
18 parser.add_option("-p", "--pid",
19                   action="store_true", dest="pidns", default=False,
20                   help="Enter pid namespace")
21
22 (options, args) = parser.parse_args()
23
24 try:
25         slice_name = args[0]
26 except IndexError:
27         print "You must specify a vm name"
28         exit(1)
29
30 try:
31         cmd = 'grep %s /proc/*/cgroup | grep freezer'%slice_name
32         output = os.popen(cmd).readlines()
33 except:
34         print "Error finding slice %s"%slice_name
35         exit(1)
36
37 slice_spec = None
38 for e in output:
39         try:
40                 l = e.rstrip()
41                 path = l.split(':')[0]  
42                 comp = l.rsplit(':')[-1]
43                 slice_name_check = comp.rsplit('/')[-1]
44
45                 if (slice_name_check == slice_name):
46                         slice_path = path
47                         pid = slice_path.split('/')[2]
48                         cmdline = open('/proc/%s/cmdline'%pid).read().rstrip('\n\x00')
49                         if (cmdline == '/sbin/init'):
50                                 slice_spec = slice_path
51                                 break
52         except:
53                 break
54
55 if (not slice_spec or not pid):
56     print "Not started: %s"%slice_name
57     exit(1)
58
59 r1 = setns.chcontext('/proc/%s/ns/utc'%pid)
60 r2 = setns.chcontext('/proc/%s/ns/ipc'%pid)
61 path = '/proc/%s/ns/net'%pid
62 r3 = setns.chcontext(path)
63
64 open('/proc/lxcsu','w').write(pid)
65 open('/proc/pidsu','w').write(pid)
66 os.execv('/usr/sbin/capsh',['--drop',drop_capabilities,'--'])