diff options
| author | Guilhem Moulin <guilhem@fripost.org> | 2015-08-09 20:41:59 +0200 | 
|---|---|---|
| committer | Guilhem Moulin <guilhem@fripost.org> | 2015-08-09 20:41:59 +0200 | 
| commit | c1549a74c99904fb2648240cab239d61ab0c9522 (patch) | |
| tree | 37c574fb46e5c924c5059d49570987f635e7b060 | |
| parent | 8f56dacdbc3459959b3200e776387d34f91e968c (diff) | |
| parent | b1985240f59a22b27824c9fdcb79998a1c7c0396 (diff) | |
Merge branch 'master' into debian
| -rwxr-xr-x | imapsync | 14 | ||||
| -rw-r--r-- | imapsync.1 | 4 | ||||
| -rw-r--r-- | lib/Net/IMAP/Sync.pm | 22 | 
3 files changed, 31 insertions, 9 deletions
@@ -27,7 +27,6 @@ use Getopt::Long qw/:config posix_default no_ignore_case gnu_compat                              bundling auto_version/;  use DBI ();  use List::Util 'first'; -use POSIX 'strftime';  use lib 'lib';  use Net::IMAP::Sync qw/read_config compact_set $IMAP_text $IMAP_cond/; @@ -92,10 +91,15 @@ my ($DBFILE, $LOCKFILE, $LOGGER_FD);      $LOCKFILE = $DBFILE =~ s/([^\/]+)\z/.$1.lck/r;      if (defined $CONF->{_} and defined $CONF->{_}->{logfile}) { +        require 'POSIX.pm'; +        require 'Time/HiRes.pm';          open $LOGGER_FD, '>>', $CONF->{_}->{logfile}              or die "Can't open $CONF->{_}->{logfile}: $!\n";          $LOGGER_FD->autoflush(1);      } +    elsif ($CONFIG{debug}) { +        $LOGGER_FD = \*STDERR; +    }  }  my $DBH; @@ -196,14 +200,18 @@ $DBH->do('PRAGMA foreign_keys = ON');  sub msg($@) {      my $name = shift;      return unless @_; -    logger($name, @_) if defined $LOGGER_FD and $LOGGER_FD ne \*STDERR; +    logger($name, @_) if defined $LOGGER_FD and $LOGGER_FD->fileno != fileno STDERR;      my $prefix = defined $name ? "$name: " : '';      print STDERR $prefix, @_, "\n";  }  sub logger($@) {      my $name = shift;      return unless @_ and defined $LOGGER_FD; -    my $prefix = strftime "%b %e %H:%M:%S ", localtime; +    my $prefix = ''; +    if ($LOGGER_FD->fileno != fileno STDERR) { +        my ($s, $us) = Time::HiRes::gettimeofday(); +        $prefix = POSIX::strftime("%b %e %H:%M:%S", localtime($s)).".$us "; +    }      $prefix .= "$name: " if defined $name;      $LOGGER_FD->say($prefix, @_);  } @@ -185,7 +185,7 @@ Relative paths start from \fI$XDG_DATA_HOME/imapsync\fR, or  is unset.  This option is only available in the default section.  (Default: \(lq\fIhost\fR.db\)\(rq, where \fIhost\fR is taken from the -\(lq[remote]\(rq or \(lq[local]\(rq sections, in that order. +\(lq[remote]\(rq or \(lq[local]\(rq sections, in that order.)  .TP  .I list-mailbox @@ -235,6 +235,8 @@ One of \(lqimap\(rq, \(lqimaps\(rq or \(lqtunnel\(rq.  IMAP over SSL/TLS connections over a INET socket.  \fItype\fR=tunnel causes \fBimapsync\fR to open a pipe to a  \fIcommand\fR instead of a raw socket. +Note that specifying \fItype\fR=tunnel in the \(lq[remote]\(rq section +makes the default \fIdatabase\fR to be \(lqlocalhost.db\(rq.  (Default: \(lqimaps\(rq.)  .TP diff --git a/lib/Net/IMAP/Sync.pm b/lib/Net/IMAP/Sync.pm index 47c6258..85ca487 100644 --- a/lib/Net/IMAP/Sync.pm +++ b/lib/Net/IMAP/Sync.pm @@ -23,7 +23,6 @@ use strict;  use Config::Tiny ();  use IO::Select ();  use List::Util 'first'; -use POSIX 'strftime';  use Socket 'SO_KEEPALIVE';  use Exporter 'import'; @@ -288,6 +287,11 @@ sub new($%) {      # are considered.      $self->{_MODIFIED} = {}; +    if (defined $self->{'logger-fd'} and $self->{'logger-fd'}->fileno != fileno STDERR) { +        require 'POSIX.pm'; +        require 'Time/HiRes.pm'; +    } +      # wait for the greeting      my $x = $self->_getline();      $x =~ s/\A\* (OK|PREAUTH) // or $self->panic($x); @@ -343,9 +347,13 @@ sub new($%) {          elsif ($mech eq 'PLAIN') {              require 'MIME/Base64.pm';              $self->fail("Missing option $_") foreach grep {!defined $self->{$_}} qw/username password/; -            $command = "AUTHENTICATE $mech";              my $credentials = MIME::Base64::encode_base64("\x00".$username."\x00".$password, ''); -            $callback = sub($) {return $credentials}; +            $command = "AUTHENTICATE $mech"; +            if ($self->_capable('SASL-IR')) { # RFC 4959 SASL-IR +                $command .= " $credentials"; +            } else { +                $callback = sub($) {return $credentials}; +            }          }          else {              $self->fail("Unsupported authentication mechanism: $mech"); @@ -392,7 +400,7 @@ sub DESTROY($) {  sub log($@) {      my $self = shift;      return unless @_; -    $self->logger(@_) if defined $self->{'logger-fd'} and $self->{'logger-fd'} ne \*STDERR; +    $self->logger(@_) if defined $self->{'logger-fd'} and $self->{'logger-fd'}->fileno != fileno STDERR;      my $prefix = defined $self->{name} ? $self->{name} : '';      $prefix .= "($self->{_SELECTED})" if $self->{_STATE} eq 'SELECTED';      print STDERR $prefix, ': ', @_, "\n"; @@ -400,7 +408,11 @@ sub log($@) {  sub logger($@) {      my $self = shift;      return unless @_ and defined $self->{'logger-fd'}; -    my $prefix = strftime "%b %e %H:%M:%S ", localtime; +    my $prefix = ''; +    if ($self->{'logger-fd'}->fileno != fileno STDERR) { +        my ($s, $us) = Time::HiRes::gettimeofday(); +        $prefix = POSIX::strftime("%b %e %H:%M:%S", localtime($s)).".$us "; +    }      $prefix .= defined "$self->{name}" ? $self->{name} : '';      $prefix .= "($self->{_SELECTED})" if $self->{_STATE} eq 'SELECTED';      $self->{'logger-fd'}->say($prefix, ': ', @_);  | 
