Package: mirror
Version: 2.8
Revision: 0

I'm sending this as a debian problem report and to the mirror list.

The first, and less important issue is that due to a typo in the mirror.pl
file, mirror stores temporary files in / when using associative arrays to
store information about local and remote filesets.

The fix is simple:  Look for the two instances of the string "$big_tmp"
and replace them with "$big_temp", which is the variable that should be
being used.

The second, and much more important issue, is that mirror doesn't always
correctly delete those dbm files.

Once #1 is corrected, mirror creates /var/tmp/(remote|local)_map.X using
dbmopen ( ).  Unfortunately, when it goes to get rid of it, it assumes
that there will be two files, one *.pag and one *.dir.  At least with my
copy of perl, this is an incorrect assumption --- the file name given is
the file name used (I think this means I'm using Berkeley db).

Here's a patch that should take care of both of these (though the patch
for problem #2 is still non-optimal, since it still assumes knowledge of
the file name, but I didn't see any other way to do it).

----->8-----
*** mirror.pl   Tue Oct 31 15:31:30 1995
--- /usr/lib/mirror/mirror.pl   Wed Dec 20 10:38:47 1995
***************
*** 3228,3234 ****

        &msg( "creating assocs ...\n" ) if $debug > 2;
        foreach $map ( @assocs ){
!               eval "\$$map = \"\$big_tmp/$map.$$\"";
                eval "dbmopen( $map, \$$map, 0644 )";
        }
        &msg( "creating assocs done\n" ) if $debug > 2;
--- 3228,3234 ----

        &msg( "creating assocs ...\n" ) if $debug > 2;
        foreach $map ( @assocs ){
!               eval "\$$map = \"\$big_temp/$map.$$\"";
                eval "dbmopen( $map, \$$map, 0644 )";
        }
        &msg( "creating assocs done\n" ) if $debug > 2;
***************
*** 3240,3246 ****

        &msg( "deleting assocs ...\n" ) if $debug > 2;
        foreach $map ( @assocs ){
!               eval "\$$map = \"\$big_tmp/$map.$$\"";
                eval "dbmclose( $map )";
                &unlink_dbm( eval "\$$map" );
                eval "\%$map = ()";
--- 3240,3246 ----

        &msg( "deleting assocs ...\n" ) if $debug > 2;
        foreach $map ( @assocs ){
!               eval "\$$map = \"\$big_temp/$map.$$\"";
                eval "dbmclose( $map )";
                &unlink_dbm( eval "\$$map" );
                eval "\%$map = ()";
***************
*** 3251,3258 ****
  sub unlink_dbm
  {
        local( $file ) = @_;
!       unlink "$file.pag";
!       unlink "$file.dir";
  }

  # Chop the tmp file up
--- 3251,3259 ----
  sub unlink_dbm
  {
        local( $file ) = @_;
!       unlink "$file.pag" if -e "$file.pag";
!       unlink "$file.dir" if -e "$file.dir";
!       unlink "$file" if -e "$file";
  }

  # Chop the tmp file up
-----8<-----

Enjoy,

Mike.
--
"I'm a dinosaur.  Somebody's digging my bones."



Reply via email to