cdb: General drive to eliminate freecdb and libfile-cdb-perl.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 2 Mar 2006 02:02:42 +0000 (02:02 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 2 Mar 2006 02:03:11 +0000 (02:03 +0000)
README
bin/mail
bin/mkcdb
bin/mkgroups

diff --git a/README b/README
index 6ceec51..86db1b7 100644 (file)
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ REQUIRED STUFF
 
        INN 2
        qmail 1.03
-       splitconf, tinycdb, libfile-cdb-perl (CDB_File.pm)
+       splitconf, tinycdb, python-cdb
 
 
 INITIAL INSTALLATION
index 20b2d66..6ef138d 100755 (executable)
--- a/bin/mail
+++ b/bin/mail
@@ -5,7 +5,7 @@ set -e
 
 [ $# = 1 ] || fail "usage: $0 GROUP"
 group=$1
-entry=`cdbget "g:$group" <groups.cdb` || bad "unknown group $group"
+entry=`cdb -q groups.cdb "g:$group"` || bad "unknown group $group"
 set -- $entry
 [ $3 = none ] && bad "posting to mail.$2 forbidden"
 { echo "To: $3";
index 7cea767..dc876ac 100755 (executable)
--- a/bin/mkcdb
+++ b/bin/mkcdb
@@ -1,20 +1,29 @@
-#! /usr/bin/perl
+#! /usr/bin/python
 
-use CDB_File;
+from cdb import cdbmake
+from sre import sub as r_sub, compile as r_compile
+from sys import argv, stderr, exit
 
-@ARGV == 1 or die "usage: $0 GROUPFILE\n";
-$g = shift;
-open GROUPS, $g or die "$0: open($g): $!\n";
-$c = CDB_File->new("$g.cdb", "$g.new") or die "$0: cdbmake($g.cdb): $!\n";
-while (<GROUPS>) {
-  next if m'^\s*(\#|$)';
-  my @f = split;
-  @f == 3 or die "$0: bad info line $.\n";
-  my $l = join(" ", @f);
-  my ($tag, $group, $addr) = @f;
-  $group =~ tr/./-/;
-  $c->insert("t:$tag" => $l);
-  $c->insert("g:$group" => $l);
-}
-$c->finish() or die "$0: cdbfinish($g.cdb): $!\n";
-exit 0;
+ego = r_sub(r'^.*[/\\]', '', argv[0])
+def die(msg, tag = True):
+  if tag: msg = '%s: %s' % (ego, msg)
+  print >>stderr, msg
+  exit(1)
+if len(argv) != 2:
+  die('usage: %s GROUPFILE' % ego)
+
+rx_comment = r_compile(r'^\s*(\#|$)')
+group = argv[1]
+cdb = cdbmake(group + '.cdb', group + '.cdb.new')
+i = 0
+for line in open(group, 'r'):
+  i += 1
+  if rx_comment.match(line): continue
+  f = line.split()
+  if len(f) != 3: die('bad info line %d.' % i)
+  l = ' '.join(f)
+  tag, group, addr = f
+  group = group.replace('.', '-')
+  cdb.add('t:%s' % tag, l)
+  cdb.add('g:%s' % group, l)
+cdb.finish()
index 49b79ff..1cce11a 100755 (executable)
@@ -11,4 +11,4 @@ while read tag group addr; do
   else
     run ctlinnd newgroup mail.$group m newsgate
   fi
-done
\ No newline at end of file
+done