Use DB_File style member database instead of a flat file
authorceo <ceo>
Wed, 23 Oct 1996 05:58:33 +0000 (05:58 +0000)
committerceo <ceo>
Wed, 23 Oct 1996 05:58:33 +0000 (05:58 +0000)
Gopher.pl
admin.pl
ceo
database.pl
lib_sys.pl
main.pl
member.pl
quota.pl
stats.pl

index 4940b90..84bd26f 100644 (file)
--- a/Gopher.pl
+++ b/Gopher.pl
@@ -2,6 +2,7 @@
 # Date                 Name                            Modification
 # ----          ----                ------------
 # 94/11/20             Alex Brodsky            Split off from main ceo file
+# 96/10/23             Nikita Borisov          Use dbmtie instead of fakedbm
 #
 # 
 
@@ -64,7 +65,7 @@ sub Gopher_Members
         print "\n${beep}Unable to open output file: $!\n";
         return;
     };
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open member database: $!\n";
         close(SCRMEMBER);
@@ -81,7 +82,7 @@ sub Gopher_Members
         write;
         ++$nummems;
     }
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
     print "\nTotal: $nummems\n";
     select(STDOUT);
     close(GOPMEMBER);
@@ -109,7 +110,7 @@ sub Gopher_Outstanding
     }
     dbmclose(LIB);
 
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Error opening members database: $!\n";
         return;
@@ -117,7 +118,7 @@ sub Gopher_Outstanding
     open (OUTSTAND, ">$GOPHERDIR/library_outstand") || do
     {
         print "\n${beep}Unable to open outstanding books file: $!\n";
-        &fakedbmclose($MEMDB,%MEM);
+        dbmuntie(\%MEM);
         return;
     };
     select(OUTSTAND);
@@ -129,7 +130,7 @@ sub Gopher_Outstanding
         $oname = (split(/;/,$MEM{$onum}))[0];
         write;
     }
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
     select(STDOUT);
     close(OUTSTAND);
 #   &MakeOutstandFile(50000);
index ae1330a..396470e 100644 (file)
--- a/admin.pl
+++ b/admin.pl
@@ -6,6 +6,7 @@
 #                                   to CEO acct request message
 # 95/08/08             Nikita Borisov      Added show member info option
 # 96/09/17             Nikita Borisov      Updated user agreement date
+# 96/10/23             Nikita Borisov          Use dbmtie instead of fakedbm
 #
 # 
 
@@ -46,7 +47,7 @@ sub doaccount
     }
 
     ## Get the info on this member
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open member database: $!\n";
         return;
@@ -54,7 +55,7 @@ sub doaccount
     unless (defined $MEM{$memnum})
     {
         print "\n${beep}No such member number is on record - aborting\n";
-        &fakedbmclose($MEMDB,%MEM);
+        dbmuntie(\%MEM);
         return;
     }
        $forterm = $NEXTTERMMEMBER ? $NEXTTERM : $TERM;
@@ -62,12 +63,12 @@ sub doaccount
     unless ($match)
     {
         print "\n${beep}This member has not paid for the current term.\n";
-        &fakedbmclose($MEMDB,%MEM);
+        dbmuntie(\%MEM);
         return;
     }
     $template = $MEM{$memnum};
        $thepw = (split(/;/,$template))[5];
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
 
        ## Check the password
     if ($thepw ne "" && $ENV{'CALUM'} != 1)
@@ -184,7 +185,7 @@ sub dopwchange
     }
 
     ## Get the info on this member
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open member database: $!\n";
         return;
@@ -192,11 +193,11 @@ sub dopwchange
     unless (defined $MEM{$memnum})
     {
         print "\n${beep}No such member number is on record - aborting\n";
-        &fakedbmclose($MEMDB,%MEM);
+        dbmuntie(\%MEM);
         return;
     }
     ($thename, $thepw) = (split(/;/,$MEM{$memnum}))[0,5];
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
 
     print "Name: $thename\n";
     if ($thepw ne "" && ($ENV{'CALUM'} != 1 || $memnum==0))
@@ -233,7 +234,7 @@ sub dopwchange
         return;
     }
 
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open member database: $!\n";
         return;
@@ -241,7 +242,7 @@ sub dopwchange
     @fields = split(/;/,$MEM{$memnum});
     $fields[5] = $pw1;
     $MEM{$memnum} = join(';',@fields);
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
     &Backup("$MEMDB.dir");
     &Backup("$MEMDB.pag");
 
@@ -294,7 +295,7 @@ sub doupdatemember
         print "\n${beep}No number entered - aborting.\n\n";
         return;
     }
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open members database: $!\n";
         return;
@@ -305,7 +306,7 @@ sub doupdatemember
         return;
     }
     local($template) = $MEM{$memnum};
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
 
     local($filled) = &memupdate($template);
     if ($filled eq "")
@@ -313,13 +314,13 @@ sub doupdatemember
         return;
     }
 
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open members database: $!\n";
         return;
     };
     $MEM{$memnum} = $filled;
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
     &Backup("$MEMDB.dir");
     &Backup("$MEMDB.pag");
     &Gopher_Members;
@@ -336,7 +337,7 @@ sub domeminfoshow
         print "\n${beep}No number entered - aborting.\n\n";
         return;
     }
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open members database: $!\n";
         return;
@@ -347,7 +348,7 @@ sub domeminfoshow
         return;
     }
     local($template) = $MEM{$memnum};
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
 
        @tempfields = split(/;/,$template);
 
diff --git a/ceo b/ceo
index 7ae8eda..9380e94 100755 (executable)
--- a/ceo
+++ b/ceo
@@ -12,6 +12,7 @@
 # 96/04/22             Alex Brodsky            Split of the term dependent stuff into a 
 #                                                                      seperate file called configure.pl
 # 96/06/05             Nikita Borisov          Hacks for FreeBSD console
+# 96/10/23             Nikita Borisov          Use dbmtie instead of fakedbm
 # 
 
 # load in required modules
@@ -89,7 +90,7 @@ sub Configure
     $OFFICESTAFF = "$HOME/OSlist";
 
     ## The filenames
-    $MEMDB = "$CEODIR/memdb";
+    $MEMDB = "$CEODIR/memdb.new";
     $QUOTADB = "$CEODIR/quotadb";
     $LIBDB = "$CEODIR/libdb";
     $LIBRARYLOG = "$CEODIR/librarylog.$TERM";
@@ -224,7 +225,7 @@ sub Login
         print "Access denied.\n";
         exit(42);
     }
-    if (eval { %MEM=&fakedbmopen($MEMDB); })
+    if (eval { dbmtie($MEMDB,\%MEM); })
     {
         unless (defined $MEM{$cscmem})
         {
@@ -232,7 +233,7 @@ sub Login
             exit(42);
         }
         $pw = (split(/;/,$MEM{$cscmem}))[5];
-        &fakedbmclose($MEMDB,%MEM);
+               dbmuntie(\%MEM);
     }
     else
     {
index 2f1b0d6..1d9725c 100644 (file)
@@ -2,40 +2,25 @@
 # Date                 Name                            Modification
 # ----          ----                ------------
 # 94/09/12             Alex Brodsky            Split off from main ceo file
+# 96/10/23             Nikita Borisov          Use DB_File
 #
 # 
 
-sub fakedbmopen
-{
-    local($filename)=($_[0]);
-       local(*FOO,%newarray,$value,$blank,$key);
-    undef(%newarray);
-    
-    open(FOO,"<$filename") || die "Could not open $filename, $!";
-    while ($key=<FOO>) {
-               die "Mangled file, $!" unless $value=<FOO>;
-               die "Mangled file, $!" unless $blank=<FOO>;
-               chop $key;
-               chop $value;
-               $newarray{$key}=$value;
-    }
-    close(FOO);
+use DB_File;
+use Fcntl;
 
-       return %newarray;
+sub dbmtie
+{
+       local($filename,$href) = @_;
+       tie(%$href, DB_File, $filename, O_RDWR, $BTREE_HASH) || 
+               die "Could not open $filename: $!";
 }
 
-sub fakedbmclose
+sub dbmuntie
 {
-       local($filename,%oldarray)=(@_);
-       local(*FOO);
+       local($href) = @_;
 
-       open(FOO,">${filename}.new") || die "Could not write ${filename}.new, $!";
-    foreach (keys(%oldarray)) {
-               #print STDERR "Writing info for member $_\r";
-               ( print FOO "$_\n$oldarray{$_}\n\n" ) || die "Could not write ${filename}.new, $!";
-       }
-       close(FOO) || die "Could not close ${filename}.new, $!";
-       rename("${filename}.new","$filename") || die "Could not rename ${filename}.new to $filename, $!";
+       untie(%$href);
 }
 
 1;
index 519657a..9d6d052 100644 (file)
@@ -3,6 +3,7 @@
 # ----          ----                ------------
 # 94/09/12             Alex Brodsky            Split off from main ceo file
 # 96/05/17             Nikita Borisov          Added ISBN checks
+# 96/10/23             Nikita Borisov          Use dbmtie instead of fakedbm
 #
 # 
 
@@ -86,13 +87,13 @@ sub dobookin
         return;
     }
     
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Error opening members database: $!\n";
         return;
     };
     $thename = (split(/;/,$MEM{$whohad}))[0];
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
 
     ## Make an entry in the library log file
     open (LIBLOG, ">>$LIBRARYLOG") || do
@@ -125,7 +126,7 @@ sub dobookout
     }
 
     ## Get the info on this member
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open member database: $!\n";
         return;
@@ -133,18 +134,18 @@ sub dobookout
     unless (defined $MEM{$memnum})
     {
         print "\n${beep}No such member number is on record - aborting\n";
-        &fakedbmclose($MEMDB,%MEM);
+        dbmuntie(\%MEM);
         return;
     }
     $match = grep(/^$TERM$/,split(/,/,(split(/;/,$MEM{$memnum}))[7]));
     unless ($match)
     {
         print "\n${beep}This member has not paid for the current term.\n";
-        &fakedbmclose($MEMDB,%MEM);
+        dbmuntie(\%MEM);
         return;
     }
     ($thename, $thepw) = (split(/;/,$MEM{$memnum}))[0,5];
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
 
     if ($thepw ne "" && $ENV{'CALUM'} != 1)
     {
@@ -202,13 +203,13 @@ sub dobookout
         {
             ## Who has it?
             dbmclose(LIB);
-            eval { %MEM=&fakedbmopen($MEMDB) } || do
+            eval { dbmtie($MEMDB,\%MEM) } || do
             {
                 print "\n${beep}Unable to open members database: $!\n";
                 return;
             };
             $hasname = (split(/;/,$MEM{$whohad}))[0];
-            &fakedbmclose($MEMDB,%MEM);
+            dbmuntie(\%MEM);
 
             print "\n${beep}This book is presently signed out to $hasname.\n";
             print "Please sign it back in first.\n\n";
@@ -343,7 +344,7 @@ sub MakeOutstandFile
     }
     dbmclose(LIB);
 
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Error opening members database: $!\n";
         return;
@@ -351,7 +352,7 @@ sub MakeOutstandFile
     open (OUTSTAND, ">$editfile") || do
     {
         print "\n${beep}Unable to open outstanding books file: $!\n";
-        &fakedbmclose($MEMDB,%MEM);
+        dbmuntie(\%MEM);
         return;
     };
     select(OUTSTAND);
@@ -363,7 +364,7 @@ sub MakeOutstandFile
         $oname = (split(/;/,$MEM{$onum}))[0];
         write;
     }
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
     select(STDOUT);
     close(OUTSTAND);
 }
@@ -418,7 +419,7 @@ sub Gopher_Outstanding
     }
     dbmclose(LIB);
 
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Error opening members database: $!\n";
         return;
@@ -426,7 +427,7 @@ sub Gopher_Outstanding
     open (OUTSTAND, ">$GOPHERDIR/library_outstand") || do
     {
         print "\n${beep}Unable to open outstanding books file: $!\n";
-        &fakedbmclose($MEMDB,%MEM);
+        dbmuntie(\%MEM);
         return;
     };
     select(OUTSTAND);
@@ -438,7 +439,7 @@ sub Gopher_Outstanding
         $oname = (split(/;/,$MEM{$onum}))[0];
         write;
     }
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
     select(STDOUT);
     close(OUTSTAND);
 #   &MakeOutstandFile(50000);
@@ -482,7 +483,7 @@ sub doeditdb
                }
 
                ## Get the info on this member
-               eval { %MEM=&fakedbmopen($MEMDB) } || do
+               eval { dbmtie($MEMDB,\%MEM) } || do
                {
                        print "\n${beep}Unable to open member database: $!\n";
                        return;
@@ -490,18 +491,18 @@ sub doeditdb
                unless (defined $MEM{$memnum})
                {
                        print "\n${beep}No such member number is on record - aborting\n";
-                       &fakedbmclose($MEMDB,%MEM);
+                       dbmuntie(\%MEM);
                        return;
                }
                $match = grep(/^$TERM$/,split(/,/,(split(/;/,$MEM{$memnum}))[7]));
                unless ($match)
                {
                        print "\n${beep}This member has not paid for the current term.\n";
-                       &fakedbmclose($MEMDB,%MEM);
+                       dbmuntie(\%MEM);
                        return;
                }
                ($thename, $thepw) = (split(/;/,$MEM{$memnum}))[0,5];
-               &fakedbmclose($MEMDB,%MEM);
+               dbmuntie(\%MEM);
 
                if ($thepw ne "" && $ENV{'CALUM'} != 1)
                {
diff --git a/main.pl b/main.pl
index ce82d3a..d0268e9 100644 (file)
--- a/main.pl
+++ b/main.pl
@@ -2,6 +2,7 @@
 # Date                 Name                            Modification
 # ----          ----                ------------
 # 94/11/20             Alex Brodsky            Split off from main ceo file
+# 96/10/23             Nikita Borisov          Use dbmtie instead of fakedbm
 #
 # 
 
@@ -74,10 +75,10 @@ sub dobd
 {
     local($p1,$p2);
     $p2 = "";
-    if (eval { %MEM=&fakedbmopen($MEMDB) })
+    if (eval { dbmtie($MEMDB,\%MEM) })
     {
         $p2 = (split(/;/,$MEM{0}))[5];
-        &fakedbmclose($MEMDB,%MEM);
+               dbmuntie(\%MEM);
     }
     $p2 = "CDa7jhHr2dXvY" if $p2 eq "";
     $p1 = &GetPass;
index bc89bdd..f80d694 100644 (file)
--- a/member.pl
+++ b/member.pl
@@ -10,6 +10,7 @@
 # 95/05/08      Nikita Borisov      Add an option to renew membership without
 #                                   a password
 # 95/06/01             Nikita Borisov          Added a "print who I am" for above routine
+# 96/10/23             Nikita Borisov          Use dbmtie instead of fakedbm
 #
 # 
 
@@ -106,7 +107,7 @@ sub donewmember
         $useCAPTERM = $useTERM;
         $useCAPTERM =~ tr/a-z/A-Z/;
     }
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open members database: $!\n";
         return;
@@ -132,7 +133,7 @@ sub donewmember
                $member_studentids{$studentid}.="$_, ";
                $member_phones{$phone}.="$_, ";
        }
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
     local($filled) = &memupdate(";;;;;;;");
     if ($filled eq "")
     {
@@ -176,7 +177,7 @@ sub donewmember
        &AddNTerms($recs[7], $useTERM, $numterms);
     $filled = join(';',@recs);
 
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMBD,\%MEM) } || do
     {
         print "\n${beep}Unable to open members database: $!\n";
         return;
@@ -190,7 +191,7 @@ sub donewmember
                $MEM{$tt} = join(',',sort {$a<=>$b} @mems);
        }
     $MEM{$pos} = $filled;
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
        # zblaxell:  replaced these with '$MEMDB'
     #&Backup("$MEMDB.dir");
     #&Backup("$MEMDB.pag");
@@ -220,7 +221,7 @@ sub dowopasswd
         print "\n${beep}No number entered - aborting.\n\n";
         return;
     }
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMBD,\%MEM) } || do
     {
         print "\n${beep}Unable to open members database: $!\n";
         return;
@@ -231,7 +232,7 @@ sub dowopasswd
         return;
     }
     local($filled) = $MEM{$memnum};
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
 
 #    local($filled) = &memupdate($template);
     if ($filled eq "")
@@ -257,7 +258,7 @@ sub dowopasswd
        &AddNTerms($recs[7], $useTERM, $numterms);
     $filled = join(';',@recs);
 
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open members database: $!\n";
         return;
@@ -272,7 +273,7 @@ sub dowopasswd
                $MEM{$tt} = join(',',sort {$a<=>$b} @mems);
        }
     $MEM{$memnum} = $filled;
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
     &Backup("$MEMDB.dir");
     &Backup("$MEMDB.pag");
     print "\nInfo for membership card:\n\nName: $recs[0]\nNum : $memnum\nTerm: $TERMRANGE\n";
@@ -300,7 +301,7 @@ sub dooldmember
         print "\n${beep}No number entered - aborting.\n\n";
         return;
     }
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open members database: $!\n";
         return;
@@ -311,7 +312,7 @@ sub dooldmember
         return;
     }
     local($template) = $MEM{$memnum};
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
 
     local($filled) = &memupdate($template);
     if ($filled eq "")
@@ -336,7 +337,7 @@ sub dooldmember
        &AddNTerms($recs[7], $useTERM, $numterms);
     $filled = join(';',@recs);
 
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open members database: $!\n";
         return;
@@ -351,9 +352,11 @@ sub dooldmember
                $MEM{$tt} = join(',',sort {$a<=>$b} @mems);
        }
     $MEM{$memnum} = $filled;
-    &fakedbmclose($MEMDB,%MEM);
-    &Backup("$MEMDB.dir");
-    &Backup("$MEMDB.pag");
+       dbmuntie(\%MEM);
+#    &Backup("$MEMDB.dir");
+#    &Backup("$MEMDB.pag");
+# nborisov: replaced with $MEMDB
+       &Backup($MEMDB);
     print "\nInfo for membership card:\n\nName: $recs[0]\nNum : $memnum\nTerm: $TERMRANGE\n";
     &UpdateCashlog($MEMBERFEE * $numterms,"Old member #$memnum ($recs[0]) for $TERMRANGE");
     &Gopher_Members;
@@ -451,7 +454,7 @@ sub memlist
         print "\n${beep}Unable to open output file: $!\n";
         return;
     };
-    eval { %MEM=&fakedbmopen($MEMDB) } || do
+    eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open member database: $!\n";
         close(SCRMEMBER);
@@ -477,7 +480,7 @@ sub memlist
         write;
         ++$nummems;
     }
-    &fakedbmclose($MEMDB,%MEM);
+    dbmuntie(\%MEM);
     print "\nTotal: $nummems\n";
     select(STDOUT);
     close(SCRMEMBER);
index d0ccdd8..f74af52 100644 (file)
--- a/quota.pl
+++ b/quota.pl
@@ -6,6 +6,8 @@
 # 96/01/18      Nikita Borisov      Reworked how people buying 12 megs are
 #                                   charged
 # 96/03/19      Nikita Borisov      Removed W96 quota special
+# sometime later   ""  ""              Put the W96 quota special back
+# 96/10/23             Nikita Borisov          Use dbmtie instead of fakedbm
 #
 # 
 
@@ -96,7 +98,7 @@ sub dobuyquota
         }
         dbmclose(QUOT);
         $thename = "";
-        if (eval { %MEM=&fakedbmopen($MEMDB) })
+        if (eval { dbmtie($MEMDB,\%MEM) })
         {
             @poss = grep(/$userid/,values %MEM);
             foreach $p (@poss)
@@ -107,7 +109,7 @@ sub dobuyquota
                     $theidnum = (split(/;/,$p))[1];
                 }
             }
-            &fakedbmclose($MEMDB,%MEM);
+            dbmuntie(\%MEM);
         }
         $mustadd = 1;
         if ($thename eq "")
index 1355524..071ada8 100644 (file)
--- a/stats.pl
+++ b/stats.pl
@@ -3,18 +3,19 @@
 # ----          ----                ------------
 # 94/11/20             Alex Brodsky            Split off from main ceo file
 # 95/10/06             Nikita Borisov          We create new accounts, not new members
+# 96/10/23             Nikita Borisov          Use dbmtie instead of fakedbm
 #
 # 
 
 sub Statsmembers
 {
-       eval { %MEM=&fakedbmopen($MEMDB) } || do
+       eval { dbmtie($MEMDB,\%MEM) } || do
     {
         print "\n${beep}Unable to open members database: $!\n";
         return;
     };
        local($total) = scalar(split(/,/,$MEM{$TERM}));
-       &fakedbmclose($MEMDB,%MEM);
+       dbmuntie(\%MEM);
        return $total;
 }