Changeset 500
- Timestamp:
- May 3, 2010, 9:29:29 PM (11 years ago)
- Location:
- bearmail/lib/BearMail
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
bearmail/lib/BearMail/Backend/Files.pm
r498 r500 19 19 use Carp; 20 20 use Exporter 'import'; 21 use Fcntl ':flock'; 21 22 @EXPORT_OK = qw(new commit apply get_domains get_users get_user set_domain set_address add_domain add_address del_domain del_address get_postmasters get_postmaster_domains); 22 23 … … 41 42 my $version = "0.3"; 42 43 my %records; 44 my %new_records; 45 my @records_to_delete; 43 46 my %by_domain; 44 47 my @domains; … … 110 113 sub add_domain() { 111 114 my ($class, $domain, $postmaster, $password) = @_; 115 116 if(exists($by_domain{$domain})) { 117 carp "Domain $domain already exist !"; 118 return 0; 119 } 120 112 121 if($postmaster eq "postmaster@".$domain) { 113 122 add_address($class, $postmaster, $password, "local"); … … 131 140 return 0; 132 141 } else { 133 $ records{"$address"} = {142 $new_records{"$address"} = { 134 143 address => $address, 135 144 password => $password, … … 142 151 my ($class, $domain) = @_; 143 152 if(scalar(@{$by_domain{$domain}}) le 1) { 144 delete($records{"postmaster\@$domain"});153 push(@records_to_delete, "postmaster\@$domain"); 145 154 } else { 146 155 carp "There are remaining email addresses for this domain !\n"; … … 151 160 sub del_address() { 152 161 my ($class, $address) = @_; 153 delete($records{"$address"});162 push(@records_to_delete, $address); 154 163 } 155 164 … … 192 201 193 202 open(MAILMAP, "<$mailmap") or croak "$mailmap: $!"; 203 flock(MAILMAP, LOCK_NB); 204 194 205 195 206 while(<MAILMAP>) { … … 214 225 } 215 226 216 close MAILMAP; 227 close(MAILMAP); 228 flock(MAILMAP, LOCK_UN); 217 229 _sort_mailmap(); 218 230 } 219 231 220 sub _write_mailmap { #FIXME: Add a lock !232 sub _write_mailmap { 221 233 return if !%records; 222 234 223 235 open(MAILMAP, ">$mailmap") or croak "$mailmap: $!"; 236 flock(MAILMAP, LOCK_EX + LOCK_NB) 237 or croak "Can't get exclusive lock on $mailmap: $!"; 238 239 _read_mailmap(); 240 %records = (%records, %new_records); 241 delete($records{$_}) foreach(@records_to_delete); 242 _sort_mailmap(); 224 243 225 244 foreach(keys %records) { … … 228 247 } 229 248 230 close MAILMAP; 249 flock(MAILMAP, LOCK_UN); 250 close(MAILMAP); 231 251 } 232 252 -
bearmail/lib/BearMail/Dispatch.pm
r497 r500 35 35 } 36 36 }, 37 debug => 1,37 #debug => 1, 38 38 table => [ 39 39 ':app' => {}, -
bearmail/lib/BearMail/Web.pm
r354 r500 24 24 use BearMail::Backend; 25 25 use Data::Dumper; 26 27 28 26 29 27 sub setup { -
bearmail/lib/BearMail/Web/Address/Add.pm
r453 r500 37 37 } 38 38 39 if(grep(/ $domain/, $backend->get_domains())) {39 if(grep(/^$domain$/, $backend->get_domains())) { 40 40 $backend->add_address($email, $password, $target) 41 41 or error($self, "BAD_CONFIGURATION"); -
bearmail/lib/BearMail/Web/Login.pm
r432 r500 71 71 $self->session->param('user', $user); 72 72 $self->session->param('level', $level); 73 $self->session->flush(); 73 74 74 75 # Redirect to the original page the user intended to go, or some fitting
Note: See TracChangeset
for help on using the changeset viewer.