Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / FS / bin / freeside-queued
index 4786132..398b03d 100644 (file)
@@ -38,16 +38,15 @@ drop_root();
 $ENV{HOME} = (getpwuid($>))[7]; #for ssh
 
 warn "connecting to database\n" if $DEBUG;
-#$@ = 'not connected';
-#while ( $@ ) {
-#  eval { adminsuidsetup $user; };
-#  if ( $@ ) {
-#    warn $@;
-#    warn "sleeping for reconnect...\n";
-#    sleep 5;
-#  }
-#}
-adminsuidsetup $user;
+$@ = 'not connected';
+while ( $@ ) {
+  eval { adminsuidsetup $user; };
+  if ( $@ ) {
+    warn $@;
+    warn "sleeping for reconnect...\n";
+    sleep 5;
+  }
+}
 
 my $log = FS::Log->new('queue');
 logfile( "%%%FREESIDE_LOG%%%/queuelog.". $FS::UID::datasrc );
@@ -219,8 +218,13 @@ while (1) {
       # don't put @args in the log, may expose passwords
       $log->info('starting job ('.$ljob->job.')');
       warn 'running "&'. $ljob->job. '('. join(', ', @args). ")\n" if $DEBUG;
+      # switch user only if a job user is available
+      my $oldCurrentUser = $FS::CurrentUser::CurrentUser;
+      my $jobuser = $ljob->access_user;
+      local $FS::CurrentUser::CurrentUser = $jobuser if $jobuser;
       local $FS::UID::AutoCommit = 0; # so that we can clean up failures
       eval $eval; #throw away return value?  suppose so
+      $FS::CurrentUser::CurrentUser = $oldCurrentUser if $jobuser;
       if ( $@ ) {
         dbh->rollback;
         my %hash = $ljob->hash;