1 package CloudStore::MD5sum;
6 use Carp qw(confess carp);
18 my ( $self, $data ) = @_;
21 $login = $data->{login} if ref $data eq 'HASH' && exists $data->{login};
23 return $md5sum_db->{$login} if exists $md5sum_db->{$login};
25 my ( undef, undef, $uid, $gid, undef, undef, $email, $dir, $shell ) =
28 my $md5_path = "$dir/.md5";
30 my $db = TokyoCabinet::HDB->new();
31 if ( ! $db->open($md5_path, $db->OWRITER | $db->OCREAT) ) {
32 warn "FATAL ERROR: md5sum $md5_path: ",$db->errmsg( $db->ecode ),"\n";
33 rename $md5_path, $md5_path . 'bak' && warn "saved old file in $md5_path.bak and re-created database";
34 $db->open($md5_path, $db->OWRITER | $db->OCREAT);
37 warn "open $md5_path";
39 $md5sum_db->{$login} = $db;
44 my ( $self, $login ) = @_;
48 my $hdb = $self->md5sum( $login );
50 while(defined(my $key = $hdb->iternext())){
51 my $value = $hdb->get($key);
53 push @lines, "$value $key";
61 my ( $self, $login ) = @_;
63 $login = $login->{login} if ref $login eq 'HASH';
65 warn "ERROR: md5sum_close no login";
69 if ( exists $md5sum_db->{$login} ) {
70 $md5sum_db->{$login}->close;
71 delete $md5sum_db->{$login};
72 warn "close md5sum $login";
74 carp "# close md5sum $login IGNORED";