+If the configuration value vpopmailmachines exists, then the command:
+
+ { sed -e '/^$destination/d' <
+ $vpopdir/domains/$srcdomain/$srcusername/.qmail >
+ $vpopdir/domains/$srcdomain/$srcusername/.qmail.temp;
+ mv $vpopdir/domains/$srcdomain/$srcusername/.qmail.temp
+ $vpopdir/domains/$srcdomain/$srcusername/.qmail;
+ chown $vpopuid.$vpopgid $vpopdir/domains/$srcdomain/$srcusername/.qmail; }
+
+
+is executed on each vpopmailmachine via ssh. This behaviour can be supressed
+by setting $FS::svc_forward_nossh_hack true.
+
+=cut
+
+sub delete {
+ my $self = shift;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::Autocommit = 0;
+ my $dbh = dbh;
+
+ my $error = $self->SUPER::delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ my $svc_acct = $self->srcsvc_acct;
+ my $username = $svc_acct->username;
+ my $domain = $svc_acct->domain;
+ my $destination;
+ if ($self->dstsvc) {
+ $destination = $self->dstsvc_acct->email;
+ } else {
+ $destination = $self->dst;
+ }
+ foreach my $vpopmailmachine ( @vpopmailmachines ) {
+ my($machine, $vpopdir, $vpopuid, $vpopgid) =
+ split(/\s+/, $vpopmailmachine);
+ my $queue = new FS::queue { 'job' => 'Net::SSH::ssh_cmd' };
+ # should be neater
+ my $error = $queue->insert("root\@$machine",
+ "sed -e '/^$destination/d' " .
+ "< $vpopdir/domains/$domain/$username/.qmail" .
+ "> $vpopdir/domains/$domain/$username/.qmail.temp; " .
+ "mv $vpopdir/domains/$domain/$username/.qmail.temp " .
+ "$vpopdir/domains/$domain/$username/.qmail; " .
+ "chown $vpopuid.$vpopgid $vpopdir/domains/$domain/$username/.qmail;"
+ )
+ unless $nossh_hack;
+
+ if ($error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "queueing job (transaction rolled back): $error";
+ }
+
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+}
+
+