use strict;
use DBI;
-our $SELF;
+
+sub GetDbConnInfo
+{
+ my($self, $dbi) = @_;
+ my($ret, $mesg, $dbConfig);
+
+ $dbConfig = "$self->{TopDir}/conf/db.pl";
+
+ our %Db;
+
+ if ( !defined($ret = do $dbConfig) && ($! || $@) ) {
+ $mesg = "Couldn't open $dbConfig: $!" if ( $! );
+ $mesg = "Couldn't execute $dbConfig: $@" if ( $@ );
+ $mesg =~ s/[\n\r]+//;
+
+ $self->{errstr} = $mesg;
+ return undef;
+ }
+
+ $Db{passwd} = $ENV{BPC_DBPASSWD} if !exists $Db{passwd};
+
+ my %parm = %Db;
+ undef %Db;
+
+ return %parm;
+}
sub BackupInfoRead
{
sub ConfigWrite {
my($self, $client) = @_;
- $SELF = $self;
my $dbh = $self->{dbh};
$dbh->{RaiseError} = 0;
sub _ConfigWriteScalar {
my($dbh, $def, $client, $attr, $val) = @_;
- $SELF->Debug("SCALAR $val") if $attr eq 'BackupFilesOnly';
return if !defined $val;
my $ref = ref $val;
sub _ConfigWriteArray {
my($dbh, $def, $client, $attr, $val, $key) = @_;
- $SELF->Debug("ARRAY $val, $key") if $attr eq 'BackupFilesOnly';
return if !defined $val;
$key = '' unless defined $key;
sub _ConfigWriteHash {
my($dbh, $def, $client, $attr, $val, $subscript) = @_;
- $SELF->Debug("HASH $val") if $attr eq 'BackupFilesOnly';
return if !defined $val;
$subscript = -1 unless defined $subscript;
sub _ConfigWriteHashOfArray {
my($dbh, $def, $client, $attr, $val) = @_;
- $SELF->Debug("HASHOFARRAY $val") if $attr eq 'BackupFilesOnly';
return if !defined $val;
my $ref = ref $val;
use DBI;
use DBD::mysql;
+our %Db;
+
%BackupPC::Config::Db::gConfigTypeField =
(BOOLEAN => 'valueBit',
INT => 'valueInt',
MEMO => 'valueMemo',
);
-sub ConnectData {
- my($self) = @_;
-
- my $dsn = 'DBI:mysql:database=backuppc;host=reagan';
- $self->{dbh} = DBI->connect($dsn, 'root', undef, {RaiseError => 1,
- AutoCommit => 1,});
+sub ConnectData
+{
+ my($self) = @_;
+ return if $self->{dbh};
+
+ my($mesg, %db, $parm, @missing);
+
+ %db = $self->GetDbConnInfo;
+ return $self->{errstr} if $self->{errstr};
+
+ foreach $parm (qw(host database user passwd)) {
+ push(@missing, $parm) if !exists $db{$parm}
+ }
+
+ if (@missing) {
+ $mesg = "Missing Db connection parameters: "
+ . join(", ", @missing);
+ return $mesg;
+ }
+
+ my $dsn = "DBI:mysql:database=$db{database};host=$db{host}";
+
+ $self->{dbh} = DBI->connect($dsn, $db{user}, $db{passwd}, {RaiseError => 1,
+ AutoCommit => 1,});
+
+ return;
}
-sub ConfigMTime {
- my($self) = @_;
-return time();
- my $cmd = "SHOW TABLE STATUS LIKE 'Config'";
- my $sth = $self->{dbh}->prepare($cmd);
-
- $sth->execute;
- my $row = $sth->fetchrow_hashref || return time();
- my $mtime;
-
- if (defined($mtime = $row->{'Update_time'})) {
- $mtime =~ m/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
- || return time();
- return &Date_SecsSince1970($2,$3,$1,$4,$5,$6);
- } else {
- return time();
- }
+
+sub ConfigMTime
+{
+ my($self) = @_;
+ my $cmd = "SHOW TABLE STATUS LIKE 'Config'";
+ my $sth = $self->{dbh}->prepare($cmd);
+
+ $sth->execute;
+ my $row = $sth->fetchrow_hashref || return time();
+ my $mtime;
+
+ if (defined($mtime = $row->{'Update_time'})) {
+ $mtime =~ m/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
+ || return time();
+ return &Date_SecsSince1970($2,$3,$1,$4,$5,$6);
+ } else {
+ return time();
+ }
}
-sub HostsMTime {
- my($self) = @_;
-return time();
- my $cmd = "SHOW TABLE STATUS LIKE 'Client'";
- my $sth = $self->{dbh}->prepare($cmd);
-
- $sth->execute;
- my $row = $sth->fetchrow_hashref || return time();
- my $mtime;
-
- if (defined($mtime = $row->{'Update_time'})) {
- return &Date_SecsSince1970($mtime);
- } else {
- return time();
- }
+sub HostsMTime
+{
+ my($self) = @_;
+ my $cmd = "SHOW TABLE STATUS LIKE 'Client'";
+ my $sth = $self->{dbh}->prepare($cmd);
+
+ $sth->execute;
+ my $row = $sth->fetchrow_hashref || return time();
+ my $mtime;
+
+ if (defined($mtime = $row->{'Update_time'})) {
+ return &Date_SecsSince1970($mtime);
+ } else {
+ return time();
+ }
}
# Date subs borrowed from Date::Manip.
# This program is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.
-sub Date_SecsSince1970 {
- my($mysqlDate) = @_;
- $mysqlDate =~ m/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
- || return time();
- my($y,$m,$d,$h,$mn,$s) = ($1,$2,$3,$4,$5,$6);
- my($sec_now,$sec_70,$Ny,$N4,$N100,$N400,$dayofyear,$days)=();
- my($cc,$yy)=();
-
- $y=~ /(\d{2})(\d{2})/;
- ($cc,$yy)=($1,$2);
-
- $Ny=$y;
-
- $N4=($Ny-1)/4 + 1;
- $N4=0 if ($y==0);
-
- $N100=$cc + 1;
- $N100-- if ($yy==0);
- $N100=0 if ($y==0);
-
- $N400=($N100-1)/4 + 1;
- $N400=0 if ($y==0);
-
- my(@days) = ( 0, 31, 59, 90,120,151,181,212,243,273,304,334,365);
- my($ly)=0;
- $ly=1 if ($m>2 && &Date_LeapYear($y));
-
- $dayofyear=$days[$m-1]+$d+$ly;
- $days= $Ny*365 + $N4 - $N100 + $N400 + $dayofyear;
- $sec_now=($days-1)*24*3600 + $h*3600 + $mn*60 + $s;
- $sec_70 =62167219200;
- return ($sec_now-$sec_70);
+sub Date_SecsSince1970
+{
+ my($mysqlDate) = @_;
+ $mysqlDate =~ m/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
+ || return time();
+ my($y,$m,$d,$h,$mn,$s) = ($1,$2,$3,$4,$5,$6);
+ my($sec_now,$sec_70,$Ny,$N4,$N100,$N400,$dayofyear,$days)=();
+ my($cc,$yy)=();
+
+ $y=~ /(\d{2})(\d{2})/;
+ ($cc,$yy)=($1,$2);
+
+ $Ny=$y;
+
+ $N4=($Ny-1)/4 + 1;
+ $N4=0 if ($y==0);
+
+ $N100=$cc + 1;
+ $N100-- if ($yy==0);
+ $N100=0 if ($y==0);
+
+ $N400=($N100-1)/4 + 1;
+ $N400=0 if ($y==0);
+
+ my(@days) = ( 0, 31, 59, 90,120,151,181,212,243,273,304,334,365);
+ my($ly)=0;
+ $ly=1 if ($m>2 && &Date_LeapYear($y));
+
+ $dayofyear=$days[$m-1]+$d+$ly;
+ $days= $Ny*365 + $N4 - $N100 + $N400 + $dayofyear;
+ $sec_now=($days-1)*24*3600 + $h*3600 + $mn*60 + $s;
+ $sec_70 =62167219200;
+ return ($sec_now-$sec_70);
}
-sub Date_LeapYear {
- my($y)=@_;
- return 0 if $y % 4;
- return 1 if $y % 100;
- return 0 if $y % 400;
- return 1;
+sub Date_LeapYear
+{
+ my($y)=@_;
+ return 0 if $y % 4;
+ return 1 if $y % 100;
+ return 0 if $y % 400;
+ return 1;
}