chiark / gitweb /
Various other little bits.
authormdw <mdw>
Tue, 21 Jun 2005 07:15:39 +0000 (07:15 +0000)
committermdw <mdw>
Tue, 21 Jun 2005 07:15:39 +0000 (07:15 +0000)
catacomb/pwsafe.py
pwsafe

index 55034916bdfb43c02ecb50d108e583e14861d9fc..823b47fb5c75890d132d72b1d13723d8186045d2 100644 (file)
@@ -114,11 +114,17 @@ class PW (object):
     value = buf.getstring()
     return key, value
   def __getitem__(me, key):
     value = buf.getstring()
     return key, value
   def __getitem__(me, key):
-    return me.unpack(me.db[me.keyxform(key)])[1]
+    try:
+      return me.unpack(me.db[me.keyxform(key)])[1]
+    except KeyError:
+      raise KeyError, key
   def __setitem__(me, key, value):
     me.db[me.keyxform(key)] = me.pack(key, value)
   def __delitem__(me, key):
   def __setitem__(me, key, value):
     me.db[me.keyxform(key)] = me.pack(key, value)
   def __delitem__(me, key):
-    del me.db[me.keyxform(key)]
+    try:
+      del me.db[me.keyxform(key)]
+    except KeyError:
+      raise KeyError, key
   def __iter__(me):
     return PWIter(me)
 
   def __iter__(me):
     return PWIter(me)
 
diff --git a/pwsafe b/pwsafe
index e2853804f7a73737704f9e5e5d0d3dba4f84fd88..3485b08cf37f62d6d16818851c2568702fd3372e 100755 (executable)
--- a/pwsafe
+++ b/pwsafe
@@ -8,6 +8,14 @@ from os import environ
 from sys import argv, exit, stdin, stdout, stderr
 from getopt import getopt, GetoptError
 from fnmatch import fnmatch
 from sys import argv, exit, stdin, stdout, stderr
 from getopt import getopt, GetoptError
 from fnmatch import fnmatch
+import sre as re
+
+prog = re.sub(r'^.*[/\\]', '', argv[0])
+def moan(msg):
+  print >>stderr, '%s: %s' % (prog, msg)
+def die(msg):
+  moan(msg)
+  exit(1)
 
 if 'PWSAFE' in environ:
   file = environ['PWSAFE']
 
 if 'PWSAFE' in environ:
   file = environ['PWSAFE']
@@ -70,7 +78,10 @@ def cmd_find(av):
   if len(av) != 1:
     return 1
   pw = PW(file)
   if len(av) != 1:
     return 1
   pw = PW(file)
-  print pw[av[0]]
+  try:
+    print pw[av[0]]
+  except KeyError, exc:
+    die('Password `%s\' not found.' % exc.args[0])
 
 def cmd_store(av):
   if len(av) < 1 or len(av) > 2:
 
 def cmd_store(av):
   if len(av) < 1 or len(av) > 2:
@@ -134,7 +145,10 @@ def cmd_del(av):
     return 1
   pw = PW(file, 'w')
   tag = av[0]
     return 1
   pw = PW(file, 'w')
   tag = av[0]
-  del pw[tag]
+  try:
+    del pw[tag]
+  except KeyError, exc:
+    die('Password `%s\' not found.' % exc.args[0])
 
 def asciip(s):
   for ch in s:
 
 def asciip(s):
   for ch in s:
@@ -163,9 +177,9 @@ commands = { 'create': [cmd_create,
              'dump' : [cmd_dump, '']}
 
 def version():
              'dump' : [cmd_dump, '']}
 
 def version():
-  print 'pwsafe 1.0.0'
+  print '%s 1.0.0' % prog
 def usage(fp):
 def usage(fp):
-  print >>fp, 'Usage: pwsafe COMMAND [ARGS...]'
+  print >>fp, 'Usage: %s COMMAND [ARGS...]' % prog
 def help():
   version()
   print
 def help():
   version()
   print
@@ -179,6 +193,8 @@ Options:
 -v, --version          Show program version number.
 -u, --usage            Show short usage message.
 
 -v, --version          Show program version number.
 -u, --usage            Show short usage message.
 
+-f, --file=FILE                Where to find the password-safe file.
+
 Commands provided:
 '''
   for c in commands:
 Commands provided:
 '''
   for c in commands:
@@ -215,5 +231,5 @@ if argv[0] in commands:
 else:
   c = 'find'
 if commands[c][0](argv):
 else:
   c = 'find'
 if commands[c][0](argv):
-  print >>stderr, 'Usage: pwsafe %s %s' % (c, commands[c][1])
+  print >>stderr, 'Usage: %s %s %s' % (prog, c, commands[c][1])
   exit(1)
   exit(1)