don't try to backup if backup_scp is empty
[freeside.git] / FS / FS / Cron / backup.pm
1 package FS::Cron::backup;
2
3 use strict;
4 use vars qw( @ISA @EXPORT_OK );
5 use Exporter;
6 use Date::Format;
7 use FS::UID qw(driver_name datasrc);
8
9 @ISA = qw( Exporter );
10 @EXPORT_OK = qw( backup_scp );
11
12 sub backup_scp {
13   my $conf = new FS::Conf;
14   my $dest = $conf->config('dump-scpdest');
15   if ( $dest ) {
16     $dest .= time2str('/%Y%m%d%H%M%S',time);
17     datasrc =~ /dbname=([\w\.]+)$/ or die "unparsable datasrc ". datasrc;
18     my $database = $1;
19     eval "use Net::SCP qw(scp);";
20     die $@ if $@;
21     if ( driver_name eq 'Pg' ) {
22       system("pg_dump $database >/var/tmp/$database.sql")
23     } else {
24       die "database dumps not yet supported for ". driver_name;
25     }
26     if ( $conf->config('dump-pgpid') ) {
27       eval 'use GnuPG;';
28       die $@ if $@;
29       my $gpg = new GnuPG;
30       $gpg->encrypt( plaintext => "/var/tmp/$database.sql",
31                      output    => "/var/tmp/$database.gpg",
32                      recipient => $conf->config('dump-pgpid'),
33                    );
34       chmod 0600, '/var/tmp/$database.gpg';
35       scp("/var/tmp/$database.gpg", "$dest.gpg");
36       unlink "/var/tmp/$database.gpg" or die $!;
37     } else {
38       chmod 0600, '/var/tmp/$database.sql';
39       scp("/var/tmp/$database.sql", "$dest.sql");
40     }
41     unlink "/var/tmp/$database.sql" or die $!;
42   }
43 }
44
45 1;