summaryrefslogtreecommitdiffstats
path: root/Bugzilla/DB.pm
diff options
context:
space:
mode:
authorMax Kanat-Alexander <mkanat@bugzilla.org>2010-04-27 21:01:24 +0200
committerMax Kanat-Alexander <mkanat@bugzilla.org>2010-04-27 21:01:24 +0200
commit68af4d3c22ce1cb25793af5fb9f422bbb6ebe80e (patch)
tree1283a8a34de7cdbf7675aa05514e3289602c34d7 /Bugzilla/DB.pm
parentb7fbcf61cf1267564edaf343833fa15f1a806430 (diff)
downloadbugzilla-68af4d3c22ce1cb25793af5fb9f422bbb6ebe80e.tar.gz
bugzilla-68af4d3c22ce1cb25793af5fb9f422bbb6ebe80e.tar.xz
Bug 561322: Make Bugzilla::DB::_connect and related functions take their
parameters as a hashref, to improve the API and to avoid exposing the database password on error. r=mkanat, a=mkanat (module owner)
Diffstat (limited to 'Bugzilla/DB.pm')
-rw-r--r--Bugzilla/DB.pm34
1 files changed, 21 insertions, 13 deletions
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm
index fc2e05899..e6c29e0b0 100644
--- a/Bugzilla/DB.pm
+++ b/Bugzilla/DB.pm
@@ -83,22 +83,27 @@ sub connect_shadow {
die "Tried to connect to non-existent shadowdb"
unless $params->{'shadowdb'};
- my $lc = Bugzilla->localconfig;
+ # Instead of just passing in a new hashref, we locally modify the
+ # values of "localconfig", because some drivers access it while
+ # connecting.
+ my %connect_params = %{ Bugzilla->localconfig };
+ $connect_params{db_host} = $params->{'shadowdbhost'};
+ $connect_params{db_name} = $params->{'shadowdb'};
+ $connect_params{db_port} = $params->{'shadowdbport'};
+ $connect_params{db_sock} = $params->{'shadowdbsock'};
- return _connect($lc->{db_driver}, $params->{"shadowdbhost"},
- $params->{'shadowdb'}, $params->{"shadowdbport"},
- $params->{"shadowdbsock"}, $lc->{db_user}, $lc->{db_pass});
+ return _connect(\%connect_params);
}
sub connect_main {
my $lc = Bugzilla->localconfig;
- return _connect($lc->{db_driver}, $lc->{db_host}, $lc->{db_name}, $lc->{db_port},
- $lc->{db_sock}, $lc->{db_user}, $lc->{db_pass});
+ return _connect(Bugzilla->localconfig);
}
sub _connect {
- my ($driver, $host, $dbname, $port, $sock, $user, $pass) = @_;
+ my ($params) = @_;
+ my $driver = $params->{db_driver};
my $pkg_module = DB_MODULE->{lc($driver)}->{db};
# do the actual import
@@ -107,7 +112,7 @@ sub _connect {
. " localconfig: " . $@);
# instantiate the correct DB specific module
- my $dbh = $pkg_module->new($user, $pass, $host, $dbname, $port, $sock);
+ my $dbh = $pkg_module->new($params);
return $dbh;
}
@@ -224,13 +229,14 @@ sub bz_create_database {
sub _get_no_db_connection {
my ($sql_server) = @_;
my $dbh;
- my $lc = Bugzilla->localconfig;
+ my %connect_params = %{ Bugzilla->localconfig };
+ $connect_params{db_name} = '';
my $conn_success = eval {
- $dbh = _connect($lc->{db_driver}, $lc->{db_host}, '', $lc->{db_port},
- $lc->{db_sock}, $lc->{db_user}, $lc->{db_pass});
+ $dbh = _connect(\%connect_params);
};
if (!$conn_success) {
- my $sql_server = DB_MODULE->{lc($lc->{db_driver})}->{name};
+ my $driver = $connect_params{db_driver};
+ my $sql_server = DB_MODULE->{lc($driver)}->{name};
# Can't use $dbh->errstr because $dbh is undef.
my $error = $DBI::errstr || $@;
chomp($error);
@@ -1060,7 +1066,9 @@ sub bz_rollback_transaction {
#####################################################################
sub db_new {
- my ($class, $dsn, $user, $pass, $override_attrs) = @_;
+ my ($class, $params) = @_;
+ my ($dsn, $user, $pass, $override_attrs) =
+ @$params{qw(dsn user pass attrs)};
# set up default attributes used to connect to the database
# (may be overridden by DB driver implementations)