Browse Source

--add-user support

Andrea Luzzardi 17 years ago
parent
commit
48461660c4
1 changed files with 102 additions and 46 deletions
  1. +102
    -46
      tools/pamusb-conf

+ 102
- 46
tools/pamusb-conf View File

@ -60,8 +60,8 @@ class Device:
'device' : deviceProperties['block.device']}) 'device' : deviceProperties['block.device']})
return vols return vols
def listOptions(question, options, force = False):
if force == False and len(options) == 1:
def listOptions(question, options, autodetect = True):
if autodetect == True and len(options) == 1:
return 0 return 0
while True: while True:
try: try:
@ -79,6 +79,64 @@ def listOptions(question, options, force = False):
except Exception: pass except Exception: pass
else: break else: break
def writeConf(options, doc):
try:
f = open(options['configFile'], 'w')
f.write(doc.toxml())
f.close()
except Exception, err:
print 'Unable to save %s: %s' % (options['configFile'], err)
sys.exit(1)
else:
print 'Done.'
def shouldSave(options, items):
print "\n".join(["%s\t\t: %s" % item for item in items])
print
print 'Save to %s ?' % options['configFile']
sys.stdout.write('[y/n] ')
if sys.stdin.readline().strip() != 'y':
sys.exit(1)
def addUser(options):
print 'adding user %s' % options['userName']
try:
doc = minidom.parse(options['configFile'])
except Exception, err:
print 'Unable to read %s: %s' % (options['configFile'], err)
sys.exit(1)
devSection = doc.getElementsByTagName('devices')
if len(devSection) == 0:
print 'Malformed configuration file: No <devices> section found.'
sys.exit(1)
devicesObj = devSection[0].getElementsByTagName('device')
if len(devicesObj) == 0:
print 'No devices found.'
print 'You must add a device (--add-device) before adding users'
sys.exit(1)
devices = []
for device in devicesObj:
devices.append(device.getAttribute('id'))
print devices
device = devices[listOptions("Which device would you like to use for authentication ?",
devices, False)]
shouldSave(options, [
('User', options['userName']),
('Device', device)
])
users = doc.getElementsByTagName('users')
user = doc.createElement('user')
user.attributes['id'] = options['userName']
e = doc.createElement('device')
t = doc.createTextNode(device)
e.appendChild(t)
user.appendChild(e)
users[0].appendChild(user)
writeConf(options, doc)
def addDevice(options): def addDevice(options):
devices = [] devices = []
@ -91,32 +149,28 @@ def addDevice(options):
if len(devices) == 0: if len(devices) == 0:
print 'No devices detected.' print 'No devices detected.'
sys.exit() sys.exit()
device = devices[listOptions("Please select the device you wish to add.", devices)]
device = devices[listOptions("Please select the device you wish to add.",
devices, force = options['force'])]
volumes = device.volumes() volumes = device.volumes()
volume = volumes[listOptions("Which volume would you like to use for " \ volume = volumes[listOptions("Which volume would you like to use for " \
"storing data ?", "storing data ?",
["%s (UUID: %s)" % (volume['device'], ["%s (UUID: %s)" % (volume['device'],
volume['uuid']) volume['uuid'])
for volume in volumes],
force = options['force'])]
print 'Name\t\t: %s' % options['deviceName']
print 'Vendor\t\t: %s' % device.vendor
print 'Model\t\t: %s' % device.product
print 'Serial\t\t: %s' % device.serialNumber
if volume['uuid'] != '':
print 'Volume UUID\t: %s (%s)' % (volume['uuid'], volume['device'])
else:
print
for volume in volumes]
)]
uuid = volume['uuid']
if volume['uuid'] == '':
print 'WARNING: No UUID detected for device %s. One time pads will be disabled.' % volume['device'] print 'WARNING: No UUID detected for device %s. One time pads will be disabled.' % volume['device']
print
print 'Save device to %s ?' % options['configFile']
uuid = "<UNDEFINED>"
sys.stdout.write('[y/n] ')
if sys.stdin.readline().strip() != 'y':
sys.exit(1)
shouldSave(options,[
('Name', options['deviceName']),
('Vendor', device.vendor),
('Model', device.product),
('Serial', device.serialNumber),
('UUID', uuid)
])
try: try:
doc = minidom.parse(options['configFile']) doc = minidom.parse(options['configFile'])
@ -133,6 +187,8 @@ def addDevice(options):
('model', device.product), ('model', device.product),
('serial', device.serialNumber), ('serial', device.serialNumber),
('volume_uuid', volume['uuid'])): ('volume_uuid', volume['uuid'])):
if value == '':
continue
e = doc.createElement(name) e = doc.createElement(name)
t = doc.createTextNode(value) t = doc.createTextNode(value)
e.appendChild(t) e.appendChild(t)
@ -144,16 +200,7 @@ def addDevice(options):
e.setAttribute('name', 'one_time_pad') e.setAttribute('name', 'one_time_pad')
e.appendChild(doc.createTextNode('false')) e.appendChild(doc.createTextNode('false'))
dev.appendChild(e) dev.appendChild(e)
try:
f = open(options['configFile'], 'w')
f.write(doc.toxml())
f.close()
except Exception, err:
print 'Unable to save %s: %s' % (options['configFile'], err)
sys.exit(1)
else:
print 'Done.'
writeConf(options, doc)
def usage(): def usage():
print 'Usage: %s [--config file] --add-device <name> [--no-autodetect]' % os.path.basename(__file__) print 'Usage: %s [--config file] --add-device <name> [--no-autodetect]' % os.path.basename(__file__)
@ -162,38 +209,47 @@ def usage():
import getopt import getopt
try: try:
opts, args = getopt.getopt(sys.argv[1:], "ha:nc:",
["help", "add-device=", "no-autodetect",
"config="])
opts, args = getopt.getopt(sys.argv[1:], "hd:nu:c:",
["help", "add-device=", "add-user=", "config="])
except getopt.GetoptError: except getopt.GetoptError:
usage() usage()
if len(args) != 0: if len(args) != 0:
usage() usage()
options = { 'force' : False, 'deviceName' : None,
options = { 'deviceName' : None, 'userName' : None,
'configFile' : '/etc/pamusb.conf' } 'configFile' : '/etc/pamusb.conf' }
for o, a in opts: for o, a in opts:
if o in ("-h", "--help"): if o in ("-h", "--help"):
usage() usage()
if o in ("-a", "--add-device"):
if o in ("-d", "--add-device"):
options['deviceName'] = a options['deviceName'] = a
if o in ("-n", "--no-autodetect"):
options['force'] = True
if o in ("-u", "--add-user"):
options['userName'] = a
if o in ("-c", "--config"): if o in ("-c", "--config"):
options['configFile'] = a options['configFile'] = a
if options['deviceName'] is None:
if options['deviceName'] is not None and options['userName'] is not None:
print 'You cannot use both --add-user and --add-device'
usage() usage()
bus = dbus.SystemBus()
halService = bus.get_object('org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
halManager = dbus.Interface(halService, 'org.freedesktop.Hal.Manager')
if options['deviceName'] is None and options['userName'] is None:
usage()
try:
addDevice(options)
except KeyboardInterrupt:
sys.exit(1)
if options['deviceName'] is not None:
bus = dbus.SystemBus()
halService = bus.get_object('org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
halManager = dbus.Interface(halService, 'org.freedesktop.Hal.Manager')
try:
addDevice(options)
except KeyboardInterrupt:
sys.exit(1)
if options['userName'] is not None:
try:
addUser(options)
except KeyboardInterrupt:
sys.exit(1)

Loading…
Cancel
Save