Legacy-Interface: Auth::authenticate unterstützt "is_crypted" nicht mehr
[kivitendo-erp.git] / SL / Auth.pm
index f2d15a8..e7f60e9 100644 (file)
@@ -78,27 +78,11 @@ sub mini_error {
 sub _read_auth_config {
   $main::lxdebug->enter_sub();
 
-  my $self   = shift;
-
-  my $code;
-  my $in = IO::File->new('config/authentication.pl', 'r');
-
-  if (!$in) {
-    my $locale = Locale->new('en');
-    $self->mini_error($locale->text('The config file "config/authentication.pl" was not found.'));
-  }
-
-  while (<$in>) {
-    $code .= $_;
-  }
-  $in->close();
-
-  eval $code;
+  my $self = shift;
 
-  if ($@) {
-    my $locale = Locale->new('en');
-    $self->mini_error($locale->text('The config file "config/authentication.pl" contained invalid Perl code:'), $@);
-  }
+  map { $self->{$_} = $::lx_office_conf{authentication}->{$_} } keys %{ $::lx_office_conf{authentication} };
+  $self->{DB_config}   = $::lx_office_conf{'authentication/database'};
+  $self->{LDAP_config} = $::lx_office_conf{'authentication/ldap'};
 
   if ($self->{module} eq 'DB') {
     $self->{authenticator} = SL::Auth::DB->new($self);
@@ -109,19 +93,19 @@ sub _read_auth_config {
 
   if (!$self->{authenticator}) {
     my $locale = Locale->new('en');
-    $self->mini_error($locale->text('No or an unknown authenticantion module specified in "config/authentication.pl".'));
+    $self->mini_error($locale->text('No or an unknown authenticantion module specified in "config/lx_office.conf".'));
   }
 
   my $cfg = $self->{DB_config};
 
   if (!$cfg) {
     my $locale = Locale->new('en');
-    $self->mini_error($locale->text('config/authentication.pl: Key "DB_config" is missing.'));
+    $self->mini_error($locale->text('config/lx_office.conf: Key "DB_config" is missing.'));
   }
 
   if (!$cfg->{host} || !$cfg->{db} || !$cfg->{user}) {
     my $locale = Locale->new('en');
-    $self->mini_error($locale->text('config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".'));
+    $self->mini_error($locale->text('config/lx_office.conf: Missing parameters in "authentication/database". Required parameters are "host", "db" and "user".'));
   }
 
   $self->{authenticator}->verify_config();
@@ -182,7 +166,7 @@ sub dbconnect {
 
   $main::lxdebug->message(LXDebug->DEBUG1, "Auth::dbconnect DSN: $dsn");
 
-  $self->{dbh} = DBI->connect($dsn, $cfg->{user}, $cfg->{password}, { pg_enable_utf8 => $::locale->is_utf8, AutoCommit => 0 });
+  $self->{dbh} = DBI->connect($dsn, $cfg->{user}, $cfg->{password}, { pg_enable_utf8 => $::locale->is_utf8, AutoCommit => 1 });
 
   if (!$may_fail && !$self->{dbh}) {
     $main::form->error($main::locale->text('The connection to the authentication database failed:') . "\n" . $DBI::errstr);
@@ -322,6 +306,8 @@ sub save_user {
 
   my ($sth, $query, $user_id);
 
+  $dbh->begin_work;
+
   $query     = qq|SELECT id FROM auth."user" WHERE login = ?|;
   ($user_id) = selectrow_query($form, $dbh, $query, $login);
 
@@ -442,11 +428,14 @@ sub delete_user {
   my $form  = $main::form;
 
   my $dbh   = $self->dbconnect();
+
+  $dbh->begin_work;
+
   my $query = qq|SELECT id FROM auth."user" WHERE login = ?|;
 
   my ($id)  = selectrow_query($form, $dbh, $query, $login);
 
-  return $main::lxdebug->leave_sub() if (!$id);
+  $dbh->rollback and return $main::lxdebug->leave_sub() if (!$id);
 
   do_query($form, $dbh, qq|DELETE FROM auth.user_group WHERE user_id = ?|, $id);
   do_query($form, $dbh, qq|DELETE FROM auth.user_config WHERE user_id = ?|, $id);
@@ -528,6 +517,8 @@ sub destroy_session {
   if ($session_id) {
     my $dbh = $self->dbconnect();
 
+    $dbh->begin_work;
+
     do_query($main::form, $dbh, qq|DELETE FROM auth.session_content WHERE session_id = ?|, $session_id);
     do_query($main::form, $dbh, qq|DELETE FROM auth.session WHERE id = ?|, $session_id);
 
@@ -546,6 +537,9 @@ sub expire_sessions {
   my $self  = shift;
 
   my $dbh   = $self->dbconnect();
+
+  $dbh->begin_work;
+
   my $query =
     qq|DELETE FROM auth.session_content
        WHERE session_id IN
@@ -591,6 +585,9 @@ sub create_or_refresh_session {
   $form  = $main::form;
   $dbh   = $self->dbconnect();
 
+  $dbh->begin_work;
+  do_query($::form, $dbh, qq|LOCK auth.session_content|);
+
   $query = qq|SELECT id FROM auth.session WHERE id = ?|;
 
   ($id)  = selectrow_query($form, $dbh, $query, $session_id);
@@ -616,6 +613,9 @@ sub save_session {
 
   my $dbh          = $provided_dbh || $self->dbconnect();
 
+  $dbh->begin_work unless $provided_dbh;
+
+  do_query($::form, $dbh, qq|LOCK auth.session_content|);
   do_query($::form, $dbh, qq|DELETE FROM auth.session_content WHERE session_id = ?|, $session_id);
 
   if (%{ $self->{SESSION} }) {
@@ -837,6 +837,8 @@ sub save_group {
   my $form  = $main::form;
   my $dbh   = $self->dbconnect();
 
+  $dbh->begin_work;
+
   my ($query, $sth, $row, $rights);
 
   if (!$group->{id}) {
@@ -882,6 +884,7 @@ sub delete_group {
   my $form = $main::from;
 
   my $dbh  = $self->dbconnect();
+  $dbh->begin_work;
 
   do_query($form, $dbh, qq|DELETE FROM auth.user_group WHERE group_id = ?|, $id);
   do_query($form, $dbh, qq|DELETE FROM auth.group_rights WHERE group_id = ?|, $id);