浏览代码

[Dovecot] Update imapsync - thanks to @hunter-nl

André Peters 6 年之前
父节点
当前提交
2b6e486a11
共有 3 个文件被更改,包括 350 次插入219 次删除
  1. 28 21
      data/Dockerfiles/dovecot/Dockerfile
  2. 296 187
      data/Dockerfiles/dovecot/imapsync
  3. 26 11
      data/Dockerfiles/dovecot/imapsync_cron.pl

+ 28 - 21
data/Dockerfiles/dovecot/Dockerfile

@@ -12,68 +12,76 @@ RUN apt-get update && apt-get -y --no-install-recommends install \
   build-essential \
   ca-certificates \
   cpanminus \
+  cron \
   curl \
   default-libmysqlclient-dev \
   dnsutils \
   gettext \
   jq \
-  libjson-webtoken-perl \
-  libcgi-pm-perl \
-  libcrypt-openssl-rsa-perl \
-  libdata-uniqid-perl \
-  libhtml-parser-perl \
-  libmail-imapclient-perl \
-  libparse-recdescent-perl \
-  libsys-meminfo-perl \
-  libtest-mockobject-perl \
-  libwww-perl \
   libauthen-ntlm-perl \
   libbz2-dev \
+  libcgi-pm-perl \
+  libcrypt-openssl-rsa-perl \
   libcrypt-ssleay-perl \
   libcurl4-openssl-dev \
+  libdata-uniqid-perl \
   libdbd-mysql-perl \
   libdbi-perl \
   libdigest-hmac-perl \
+  libdist-checkconflicts-perl \
   libexpat1-dev \
   libfile-copy-recursive-perl \
+  libfile-tail-perl \
+  libhtml-parser-perl \
   libio-compress-perl \
   libio-socket-inet6-perl \
   libio-socket-ssl-perl \
   libio-tee-perl \
   libipc-run-perl \
+  libjson-webtoken-perl \
   libldap2-dev \
   liblockfile-simple-perl \
   liblz-dev \
   liblz4-dev \
   liblzma-dev \
+  libmail-imapclient-perl \
+  libmodule-implementation-perl \
   libmodule-scandeps-perl \
   libnet-ssleay-perl \
+  libpackage-stash-perl \
+  libpackage-stash-xs-perl \
   libpam-dev \
   libpar-packer-perl \
+  libparse-recdescent-perl \
+  libproc-processtable-perl \
   libreadonly-perl \
+  libregexp-common-perl \
   libssl-dev \
+  libsys-meminfo-perl \
   libterm-readkey-perl \
+  libtest-deep-perl \
+  libtest-fatal-perl \
+  libtest-mock-guard-perl \
+  libtest-mockobject-perl \
+  libtest-nowarnings-perl \
   libtest-pod-perl \
+  libtest-requires-perl \
   libtest-simple-perl \
+  libtest-warn-perl \
   libtry-tiny-perl \
   libunicode-string-perl \
-  libproc-processtable-perl \
-  libtest-nowarnings-perl \
-  libtest-deep-perl \
-  libtest-warn-perl \
-  libregexp-common-perl \
   liburi-perl \
+  libwww-perl \
   lzma-dev \
+  make \
+  mysql-client \
+  procps \
   python-html2text \
   python-jinja2 \
   python-mysql.connector \
   python-redis \
-  make \
-  mysql-client \
-  procps \
-  supervisor \
-  cron \
   redis-server \
+  supervisor \
   syslog-ng \
   syslog-ng-core \
   syslog-ng-mod-redis \
@@ -93,7 +101,6 @@ RUN apt-get update && apt-get -y --no-install-recommends install \
   && make clean \
   && cd .. \
   && rm -rf dovecot-2.3-pigeonhole-$PIGEONHOLE_VERSION \
-  && cpanm Data::Uniqid Mail::IMAPClient String::Util \
   && groupadd -g 5000 vmail \
   && groupadd -g 401 dovecot \
   && groupadd -g 402 dovenull \

文件差异内容过多而无法显示
+ 296 - 187
data/Dockerfiles/dovecot/imapsync


+ 26 - 11
data/Dockerfiles/dovecot/imapsync_cron.pl

@@ -5,11 +5,11 @@ use LockFile::Simple qw(lock trylock unlock);
 use Proc::ProcessTable;
 use Data::Dumper qw(Dumper);
 use IPC::Run 'run';
-use String::Util 'trim';
 use File::Temp;
 use Try::Tiny;
 use sigtrap 'handler' => \&sig_handler, qw(INT TERM KILL QUIT);
 
+sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s };
 my $t = Proc::ProcessTable->new;
 my $imapsync_running = grep { $_->{cmndline} =~ /^\/usr\/bin\/perl \/usr\/local\/bin\/imapsync\s/ } @{$t->table};
 if ($imapsync_running eq 1)
@@ -19,11 +19,20 @@ if ($imapsync_running eq 1)
 }
 
 sub qqw($) {
-  my @values = split('(?=--)', $_[0]);
+  my @params = ();
+  my @values = split(/(?=--)/, $_[0]);
   foreach my $val (@values) {
+    my @tmpparam = split(/ /, $val, 2);
+    foreach my $tmpval (@tmpparam) {
+        if ($tmpval ne '') {
+          push @params, $tmpval;
+        }
+    }
+  }
+  foreach my $val (@params) {
     $val=trim($val);
   }
-  return @values
+  return @params;
 }
 
 $run_dir="/tmp";
@@ -101,10 +110,6 @@ while ($row = $sth->fetchrow_arrayref()) {
   $timeout1            = @$row[19];
   $timeout2            = @$row[20];
 
-  $is_running = $dbh->prepare("UPDATE imapsync SET is_running = 1 WHERE id = ?");
-  $is_running->bind_param( 1, ${id} );
-  $is_running->execute();
-
   if ($enc1 eq "TLS") { $enc1 = "--tls1"; } elsif ($enc1 eq "SSL") { $enc1 = "--ssl1"; } else { undef $enc1; }
 
   my $template = $run_dir . '/imapsync.XXXXXXX';
@@ -140,21 +145,31 @@ while ($row = $sth->fetchrow_arrayref()) {
   "--host2", "localhost",
   "--user2", $user2 . '*' . trim($master_user),
   "--passfile2", $passfile2->filename,
-  '--no-modulesversion'];
+  '--no-modulesversion',
+  '--noreleasecheck'];
 
   try {
+    $is_running = $dbh->prepare("UPDATE imapsync SET is_running = 1 WHERE id = ?");
+    $is_running->bind_param( 1, ${id} );
+    $is_running->execute();
+    
     run [@$generated_cmds, @$custom_params_ref], '&>', \my $stdout;
-    $update = $dbh->prepare("UPDATE imapsync SET returned_text = ?, last_run = NOW(), is_running = 0 WHERE id = ?");
+    
+    $update = $dbh->prepare("UPDATE imapsync SET returned_text = ? WHERE id = ?");
     $update->bind_param( 1, ${stdout} );
     $update->bind_param( 2, ${id} );
     $update->execute();
   } catch {
-    $update = $dbh->prepare("UPDATE imapsync SET returned_text = 'Could not start or finish imapsync', last_run = NOW(), is_running = 0 WHERE id = ?");
+    $update = $dbh->prepare("UPDATE imapsync SET returned_text = 'Could not start or finish imapsync' WHERE id = ?");
+    $update->bind_param( 1, ${id} );
+    $update->execute();
+  } finally {
+    $update = $dbh->prepare("UPDATE imapsync SET last_run = NOW(), is_running = 0 WHERE id = ?");
     $update->bind_param( 1, ${id} );
     $update->execute();
-    $lockmgr->unlock($lock_file);
   };
 
+
 }
 
 $sth->finish();

部分文件因为文件数量过多而无法显示