On the other day, I wanted to access Postfix dbm: and hash:-tables, created by postmap, from Perl. I am setting up a greylisting system and my whitelist should be a postfix table, so I won't have to use another database format.
I used this as a test table:
I saved it as "testmap". After that, I used:
Result:
You may access this hash-type postfix-db just by using DB_File:
Result:
As you can see, the key must be terminated by a null byte, and the result itself is also null-terminated.
In case you use the dbm:-Format in postmap:
In Perl, just use NDBM_File instead and use the filename without .dir or .pag:
The Keys and values are also null-terminated in this case.
Result is the same as with our hash:-Postfix-Table:
I used this as a test table:
test1 myentry
test2 yourentry
test3 funnyI saved it as "testmap". After that, I used:
postmap testmapResult:
-rw-r--r-- 1 pascal users 42 2008-06-16 10:14 testmap
-rw-r--r-- 1 pascal users 12288 2008-06-16 10:14 testmap.dbYou may access this hash-type postfix-db just by using DB_File:
#!/usr/bin/perl
use Fcntl;
use DB_File;
my %tab;
my $null=chr(0);
tie %tab,'DB_File','testmap.db',O_RDONLY,0400,$DB_HASH;
# Sample query
my $key='test2';
my $value=$tab{$key.$null};
chop $value; # chop null byte
print $key." = ".$value."\n";Result:
test2 = yourentryAs you can see, the key must be terminated by a null byte, and the result itself is also null-terminated.
In case you use the dbm:-Format in postmap:
-rw-r--r-- 1 root root 42 Jun 16 11:30 testmap
-rw-r--r-- 1 root root 0 Jun 16 11:30 testmap.dir
-rw-r--r-- 1 root root 1024 Jun 16 11:30 testmap.pagIn Perl, just use NDBM_File instead and use the filename without .dir or .pag:
#!/usr/bin/perl
use Fcntl;
use NDBM_File;
my %tab;
my $null=chr(0);
tie %tab,'NDBM_File','testmap',O_RDONLY,0400;
# Sample query
my $key='test2';
my $value=$tab{$key.$null};
chop $value; # chop null byte
print $key." = ".$value."\n";The Keys and values are also null-terminated in this case.
Result is the same as with our hash:-Postfix-Table:
test2 = yourentry
Leave a comment