~kees/eucalyptus/lp436977

« back to all changes in this revision

Viewing changes to tools/dd-lv

  • Committer: Kees Cook
  • Date: 2009-10-06 20:52:06 UTC
  • Revision ID: kees@outflux.net-20091006205206-ps7pvee616tqdj2x
* Attempt to limit the scope of euca_rootwrap, with wrapper configuration
  and helper scripts (LP: #436977):
  - tools/dd-lv, tools/kill-vblade, tools/modprobe-aoe
  - util/euca_rootwrap.c, util/wrappers.conf

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
import sys, os, glob
 
3
 
 
4
if len(sys.argv)<3:
 
5
    print >>sys.stderr, "Invalid arguments"
 
6
    sys.exit(1)
 
7
 
 
8
opts = dict()
 
9
for arg in sys.argv[1:]:
 
10
    for opt in ['if','of']:
 
11
        if arg.startswith(opt+'='):
 
12
            if opts.has_key(opt):
 
13
                print >>sys.stderr, "Option '%s' repeated" % (opt)
 
14
                sys.exit(1)
 
15
            opts.setdefault(opt,arg.split('=',1)[1])
 
16
if 'if' not in opts or 'of' not in opts:
 
17
    print >>sys.stderr, "Missing 'if' or 'of' arguments"
 
18
    sys.exit(1)
 
19
 
 
20
# Allowed sources:
 
21
# - /dev/zero
 
22
# - devmapper
 
23
# Targets are currently unlimited
 
24
if opts['if'] != '/dev/zero':
 
25
    found = False
 
26
    src = os.stat(opts['if'])
 
27
    for dm in glob.glob('/dev/mapper/*'):
 
28
        if dm.endswith('/control'):
 
29
            continue
 
30
        if os.stat(dm).st_rdev == src.st_rdev:
 
31
            found = True
 
32
            break
 
33
    if not found:
 
34
        print >>sys.stderr, "Source is not /dev/zero or a devmapper device"
 
35
        sys.exit(1)
 
36
 
 
37
args = ['/bin/dd'] + sys.argv[1:]
 
38
os.execl('/bin/dd', *args)