<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/2d5021a64c9c45753986a834565cc421afa86e1a">https://github.com/macports/macports-ports/commit/2d5021a64c9c45753986a834565cc421afa86e1a</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 2d5021a64c9 dovecot: apns variant bugfix and compiler error fix
</span>2d5021a64c9 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 2d5021a64c9c45753986a834565cc421afa86e1a
</span>Author: Steven Thomas Smith <s.t.smith@ieee.org>
AuthorDate: Fri Sep 18 21:41:54 2020 -0400

<span style='display:block; white-space:pre;color:#404040;'>    dovecot: apns variant bugfix and compiler error fix
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    * apns variant's `devices` must be a file
</span><span style='display:block; white-space:pre;color:#404040;'>    * Fix compiler error `error: implicit declaration of function 'i_gettimeofday' is invalid in C99`
</span>---
 mail/dovecot/Portfile                              |  14 +-
 mail/dovecot/files/dovecot-core-pushnotify.patch   | 700 +++++++++++++++++++--
 .../patch-src-lib-ioloop-notify-kqueue-c.diff      |  10 +
 3 files changed, 676 insertions(+), 48 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/mail/dovecot/Portfile b/mail/dovecot/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 049c2dad74e..fae4923163e 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/mail/dovecot/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/mail/dovecot/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,7 +5,7 @@ PortGroup           github 1.0
</span> 
 github.setup        dovecot core 2.3.11.3
 name                dovecot
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            1
</span> epoch               20060722
 set core_version    ${version}
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -114,6 +114,7 @@ if {${name} eq ${subport}} {
</span> 
     patch.pre_args  -p1
     patchfiles      patch-doc-example-config-conf.d-10-master.conf.diff \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-src-lib-ioloop-notify-kqueue-c.diff \
</span>                     patch-src-master-master-settings.c.diff
 
     post-patch {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -189,11 +190,16 @@ if {${name} eq ${subport}} {
</span>         pre-destroot {
             xinstall -m 0750 -d \
                 -o ${default_internal_user} -g ${default_login_user} \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${destroot}${prefix}/etc/${name}-apns \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${destroot}${prefix}/var/db/${name}-apns
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            close [open ${destroot}${prefix}/var/db/${name}-apns/devices a]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            file attributes \
</span>                 ${destroot}${prefix}/var/db/${name}-apns/devices \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                ${destroot}${prefix}/etc/${name}-apns
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                -permissions 0750 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                -owner ${default_internal_user} -group ${default_login_user}
</span>             destroot.keepdirs-append \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                ${destroot}${prefix}/var/db/${name}-apns/devices \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ${destroot}${prefix}/etc/${name}-apns
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${destroot}${prefix}/etc/${name}-apns \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${destroot}${prefix}/var/db/${name}-apns
</span>             xinstall -m 0755 ${filespath}/pushnotify.pl \
                 ${destroot}${prefix}/sbin
             foreach cmd [list \
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/mail/dovecot/files/dovecot-core-pushnotify.patch b/mail/dovecot/files/dovecot-core-pushnotify.patch
</span><span style='display:block; white-space:pre;color:#808080;'>index 6d33e9a4a6e..62a02a72a98 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/mail/dovecot/files/dovecot-core-pushnotify.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/mail/dovecot/files/dovecot-core-pushnotify.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,7 +1,64 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ./README.md ./README.md
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./README.md    2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./README.md    2020-09-18 19:57:02.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,3 +1,53 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Apple Push Notification Service (APNS) Plugin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++=============================================
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++This branch of [dovecot/core](https://github.com/dovecot/core)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++includes a plugin for APNS. This is based on
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++[matthewpowell/pushnotify](https://github.com/matthewpowell/pushnotify),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++[cullum/freebsd-ports](https://github.com/cullum/freebsd-ports/tree/master/mail),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++and this [post](https://www.c0ffee.net/blog/dovecot-push-notifications/).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++APNS use requires these steps:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++1. Acquire APNS Mail certificates from a (virtual) macOS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   High Sierra 10.13 and Server.app version 5.7. Export
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   the certificates from the Keychain into the file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   com.apple.servermgrd.apns.mail.p12 . **Note**: APNS Mail
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   certificate creation is deprecated on Server.app version 5.8+.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++2. Convert the APNS Mail certificates to PEM files:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++```
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       openssl pkcs12 -in com.apple.servermgrd.apns.mail.p12  \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           -clcerts -nokeys | sed '/BEGIN CERTIFICATE/,$!d'   \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       > mail.crt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       sudo install -m 0644 -o _dovecot -g _dovenull \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           mail.crt /opt/local/etc/dovecot-apns
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       openssl pkcs12 -in com.apple.servermgrd.apns.mail.p12  \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           -nodes -nocerts | sed '/BEGIN PRIVATE KEY/,$!d'    \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       > mail.key
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       sudo install -m 0640 -o _dovecot -g _dovenull \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           mail.key /opt/local/etc/dovecot-apns
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++```
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++3. Configure dovecot for APNS:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++```
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   /opt/local/etc/dovecot/conf.d/15-lda.conf:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   protocol lda { mail_plugins = $mail_plugins push_notify }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++```
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++```
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   /opt/local/etc/dovecot/conf.d/90-apns.conf:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   aps_topic = com.apple.mail.XServer.<UUID>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++```
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   where the certificate's UUID is obtained from the command:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++```
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       openssl x509 -text -noout                            \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           -in /opt/local/etc/dovecot-apns/mail.crt         \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       | grep -E -o 'com.apple.mail.XServer.[0-9a-f-]+'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++```
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++4. Launch the APNS daemon (macOS):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++```
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       sudo launchctl load -w \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           /Library/LaunchDaemons/org.macports.dovecot-apns.plist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++```
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Installation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ============
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span> diff -Naur ./configure.ac ./configure.ac
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./configure.ac      2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./configure.ac 2019-10-10 05:40:20.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -911,6 +911,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./configure.ac 2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./configure.ac 2020-09-18 19:57:02.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -930,6 +930,7 @@
</span>  src/plugins/notify/Makefile
  src/plugins/notify-status/Makefile
  src/plugins/push-notification/Makefile
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -9,9 +66,564 @@ diff -Naur ./configure.ac ./configure.ac
</span>  src/plugins/pop3-migration/Makefile
  src/plugins/quota/Makefile
  src/plugins/quota-clone/Makefile
<span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur ./dovecot-core-pushnotify.patch ./dovecot-core-pushnotify.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./dovecot-core-pushnotify.patch        1969-12-31 19:00:00.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./dovecot-core-pushnotify.patch        2020-09-18 19:57:02.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,551 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./configure.ac ./configure.ac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./configure.ac        2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./configure.ac        2019-10-10 05:40:20.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -911,6 +911,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ src/plugins/notify/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ src/plugins/notify-status/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ src/plugins/push-notification/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++src/plugins/push-notify/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ src/plugins/pop3-migration/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ src/plugins/quota/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ src/plugins/quota-clone/Makefile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/auth/auth-settings.c ./src/auth/auth-settings.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/auth/auth-settings.c    2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/auth/auth-settings.c    2019-10-08 18:37:33.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -269,6 +269,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEFLIST(passdbs, "passdb", &auth_passdb_setting_parser_info),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEFLIST(userdbs, "userdb", &auth_userdb_setting_parser_info),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ DEF_NOPREFIX(SET_STR, aps_topic),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF_NOPREFIX(SET_STR, base_dir),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF_NOPREFIX(SET_BOOL, verbose_proctitle),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF_NOPREFIX(SET_UINT, first_valid_uid),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -331,6 +333,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .passdbs = ARRAY_INIT,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .userdbs = ARRAY_INIT,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ .aps_topic = "",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .base_dir = PKG_RUNDIR,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .verbose_proctitle = FALSE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .first_valid_uid = 500,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/auth/auth-settings.h ./src/auth/auth-settings.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/auth/auth-settings.h    2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/auth/auth-settings.h    2019-10-08 17:51:20.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -82,6 +82,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ARRAY(struct auth_passdb_settings *) passdbs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ARRAY(struct auth_userdb_settings *) userdbs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *aps_topic;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *base_dir;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *ssl_client_ca_dir;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *ssl_client_ca_file;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/imap/Makefile.am ./src/imap/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/imap/Makefile.am        2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/imap/Makefile.am        2019-10-08 20:40:24.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -64,6 +64,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  cmd-unselect.c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  cmd-unsubscribe.c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  cmd-urlfetch.c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ cmd-x-apple-push-service.c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  cmd-x-cancel.c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  cmd-x-state.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/imap/cmd-x-apple-push-service.c ./src/imap/cmd-x-apple-push-service.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/imap/cmd-x-apple-push-service.c 1969-12-31 19:00:00.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/imap/cmd-x-apple-push-service.c 2019-10-10 06:22:12.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -0,0 +1,173 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++/*
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * Copyright (c) 2010-2011 Apple Inc. All rights reserved.
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * 
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * Redistribution and use in source and binary forms, with or without  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * modification, are permitted provided that the following conditions  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * are met:
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * 
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * 1.  Redistributions of source code must retain the above copyright  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * notice, this list of conditions and the following disclaimer.
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * 2.  Redistributions in binary form must reproduce the above  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * copyright notice, this list of conditions and the following  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * disclaimer in the documentation and/or other materials provided  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * with the distribution.
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * 3.  Neither the name of Apple Inc. ("Apple") nor the names of its  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * contributors may be used to endorse or promote products derived  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * from this software without specific prior written permission.
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * 
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND 
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ * SUCH DAMAGE.
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "imap-common.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "imap-id.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "str.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "home-expand.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "mail-user.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "imap-quote.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <fcntl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <sys/un.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <sys/socket.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#define  APS_VERSION             "1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++typedef struct msg_data_s {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ unsigned long msg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ unsigned long pid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ char d1[128];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ char d2[512];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ char d3[512];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ char d4[512];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++} msg_data_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++/*
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++   tag1 XAPPLEPUSHSERVICE "aps-version" "1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++   "aps-account-id" "E8CD34AD-98D3-4489-A6BB-86B1D082FECE"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++   "aps-device-token" "a66216ad1683d48b9933cdcc3b98a833ee1a968143f41ea494187da54715da66"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++   "aps-subtopic" "com.apple.mobilemail"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++*/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++static void do_notify(const char *username, const char *aps_acct_id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++               const char *aps_dev_token, const char *aps_sub_topic)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *push_notify_path = "@PREFIX@/var/run/dovecot/push_notify";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ msg_data_t msg_data;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ memset(&msg_data, 0, sizeof(struct msg_data_s));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ msg_data.msg = 2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ strncpy(msg_data.d1, username, sizeof(msg_data.d1));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ strncpy(msg_data.d2, aps_acct_id, sizeof(msg_data.d2));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ strncpy(msg_data.d3, aps_dev_token, sizeof(msg_data.d3));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ strncpy(msg_data.d4, aps_sub_topic, sizeof(msg_data.d4));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ int soc = socket( AF_UNIX, SOCK_DGRAM, 0 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if ( soc < 0 ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         i_warning( "open notify socket failed(%d): %m", soc );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ struct sockaddr_un sock_addr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ memset( &sock_addr, 0, sizeof(struct sockaddr_un));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ sock_addr.sun_family = AF_UNIX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ strncpy( sock_addr.sun_path, push_notify_path, sizeof(sock_addr.sun_path) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ socklen_t sock_len = sizeof(sock_addr.sun_family) + strlen(sock_addr.sun_path) + 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ int rc = connect(soc, (struct sockaddr *) &sock_addr, sock_len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if ( rc < 0 ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         i_warning("connect to notify socket %s failed: %m",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                   push_notify_path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         close(soc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ rc = send(soc, (void *)&msg_data, sizeof(msg_data), 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if ( rc < 0 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         i_warning("send to notify socket %s failed: %m",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                   push_notify_path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ close(soc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++static const char *aps_reply_generate (struct client_command_context *cmd,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                                const struct imap_arg *args)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *aps_topic = cmd->client->set->aps_topic;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *aps_ver=NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *aps_acct_id=NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *aps_dev_token=NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *aps_sub_topic=NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *key, *value;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ /* must have a topic */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if (aps_topic == NULL || *aps_topic == '\0')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ /* scarf off the aps keys/values */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ while (imap_arg_get_astring(&args[0], &key) &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++        imap_arg_get_astring(&args[1], &value)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         if (strcasecmp(key, "aps-version") == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                 aps_ver = t_strdup(value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         else if (strcasecmp(key, "aps-account-id") == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                 aps_acct_id = t_strdup(value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         else if (strcasecmp(key, "aps-device-token") == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                 aps_dev_token = t_strdup(value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         else if (strcasecmp(key, "aps-subtopic") == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                 aps_sub_topic = t_strdup(value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         else 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                 return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         args += 2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ /* save notification settings */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if ( aps_ver && aps_acct_id && aps_dev_token && aps_sub_topic ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         /* subscribe to notification node */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         do_notify(cmd->client->user->username, aps_acct_id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                   aps_dev_token, aps_sub_topic);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         /* generate aps response */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         string_t *str = t_str_new(256);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         imap_append_quoted( str, "aps-version" );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         str_append_c(str, ' ');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         imap_append_quoted( str, APS_VERSION );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         str_append_c(str, ' ');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         imap_append_quoted( str, "aps-topic" );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         str_append_c(str, ' ');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         imap_append_quoted( str, aps_topic );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         return str_c(str);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ return NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++bool cmd_x_apple_push_service(struct client_command_context *cmd)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const struct imap_arg *args;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if (!client_read_args(cmd, 0, 0, &args))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         return FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *reply = aps_reply_generate(cmd, args);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if (reply != NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         client_send_line(cmd->client,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                          t_strdup_printf("* XAPPLEPUSHSERVICE %s",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                                          reply));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ client_send_tagline(cmd, "OK XAPPLEPUSHSERVICE completed.");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ return TRUE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/imap/imap-client.c ./src/imap/imap-client.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/imap/imap-client.c      2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/imap/imap-client.c      2019-10-08 20:42:59.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -182,6 +182,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             a chance of working */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          client_add_capability(client, "SEARCH=FUZZY");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if (set->aps_topic != NULL && *set->aps_topic)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         str_append(client->capability_string, " XAPPLEPUSHSERVICE");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  mail_set = mail_user_set_get_storage_set(user);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (mail_set->mailbox_list_index) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/imap/imap-commands.c ./src/imap/imap-commands.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/imap/imap-commands.c    2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/imap/imap-commands.c    2019-10-08 20:15:39.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -76,6 +76,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { "UID SORT",         cmd_sort,        COMMAND_FLAG_BREAKS_SEQS },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { "UID THREAD",               cmd_thread,      COMMAND_FLAG_BREAKS_SEQS },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { "UNSELECT",         cmd_unselect,    COMMAND_FLAG_BREAKS_MAILBOX },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ { "XAPPLEPUSHSERVICE",        cmd_x_apple_push_service,       0},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { "X-CANCEL",         cmd_x_cancel,    0 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { "X-STATE",          cmd_x_state,     COMMAND_FLAG_REQUIRES_SYNC },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  { "XLIST",            cmd_list,        0 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/imap/imap-commands.h ./src/imap/imap-commands.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/imap/imap-commands.h    2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/imap/imap-commands.h    2019-10-08 20:16:48.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -121,6 +121,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool cmd_uid_expunge(struct client_command_context *cmd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool cmd_move(struct client_command_context *cmd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool cmd_unselect(struct client_command_context *cmd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++bool cmd_x_apple_push_service(struct client_command_context *cmd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool cmd_x_cancel(struct client_command_context *cmd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool cmd_x_state(struct client_command_context *cmd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/imap/imap-settings.c ./src/imap/imap-settings.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/imap/imap-settings.c    2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/imap/imap-settings.c    2019-10-08 17:57:36.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -73,6 +73,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_STR, imap_logout_format),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_STR, imap_id_send),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_STR, imap_id_log),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ DEF(SET_STR, aps_topic),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_ENUM, imap_fetch_failure),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_BOOL, imap_metadata),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_BOOL, imap_literal_minus),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -101,6 +102,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          "body_count=%{fetch_body_count} body_bytes=%{fetch_body_bytes}",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .imap_id_send = "name *",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .imap_id_log = "",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ .aps_topic = "",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .imap_fetch_failure = "disconnect-immediately:disconnect-after:no-after",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .imap_metadata = FALSE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .imap_literal_minus = FALSE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/imap/imap-settings.h ./src/imap/imap-settings.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/imap/imap-settings.h    2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/imap/imap-settings.h    2019-10-08 17:48:14.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -31,6 +31,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *imap_logout_format;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *imap_id_send;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *imap_id_log;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *aps_topic;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *imap_fetch_failure;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  bool imap_metadata;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  bool imap_literal_minus;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/imap-login/imap-login-client.c ./src/imap-login/imap-login-client.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/imap-login/imap-login-client.c  2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/imap-login/imap-login-client.c  2019-10-11 08:28:49.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -117,6 +117,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          str_append(cap_str, " STARTTLS");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (is_login_cmd_disabled(client))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          str_append(cap_str, " LOGINDISABLED");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if (*imap_client->set->aps_topic)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         str_append(cap_str, " XAPPLEPUSHSERVICE");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  client_authenticate_get_capabilities(client, cap_str);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return str_c(cap_str);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/imap-login/imap-login-settings.c ./src/imap-login/imap-login-settings.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/imap-login/imap-login-settings.c        2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/imap-login/imap-login-settings.c        2019-10-08 18:33:32.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -57,6 +57,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_STR, imap_capability),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_STR, imap_id_send),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_STR, imap_id_log),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ DEF(SET_STR, aps_topic),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_BOOL, imap_literal_minus),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  DEF(SET_BOOL, imap_id_retain),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -67,6 +68,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .imap_capability = "",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .imap_id_send = "name *",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .imap_id_log = "",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ .aps_topic = "",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .imap_literal_minus = FALSE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  .imap_id_retain = FALSE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/imap-login/imap-login-settings.h ./src/imap-login/imap-login-settings.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/imap-login/imap-login-settings.h        2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/imap-login/imap-login-settings.h        2019-10-08 17:49:33.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -5,6 +5,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *imap_capability;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *imap_id_send;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const char *imap_id_log;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *aps_topic;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  bool imap_literal_minus;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  bool imap_id_retain;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/lib-lda/mail-deliver.c ./src/lib-lda/mail-deliver.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/lib-lda/mail-deliver.c  2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/lib-lda/mail-deliver.c  2019-10-11 08:16:28.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -31,6 +31,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ deliver_mail_func_t *deliver_mail = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++deliver_hook_func_t *deliver_hook = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct mail_deliver_cache {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  bool filled;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -409,6 +410,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          mail_deliver_log(ctx, "saved mail to %s", mailbox_name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          pool_unref(&changes.pool);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         if (deliver_hook != NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                 deliver_hook(ctx, mailbox);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          mail_deliver_log(ctx, "save failed to %s: %s", mailbox_name,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  mail_storage_get_last_internal_error(*storage_r, &error));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -503,6 +507,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  /* success. message may or may not have been saved. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  ret = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         if (!ret && deliver_hook)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                 deliver_hook(ctx, ctx->rcpt_default_mailbox);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          mail_duplicate_db_deinit(&ctx->dup_db);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if (ret < 0 && mail_deliver_is_tempfailed(ctx, *storage_r)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  muser->deliver_ctx = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/lib-lda/mail-deliver.h ./src/lib-lda/mail-deliver.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/lib-lda/mail-deliver.h  2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/lib-lda/mail-deliver.h  2019-10-08 20:50:00.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -82,6 +82,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          struct mail_storage **storage_r);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ extern deliver_mail_func_t *deliver_mail;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++typedef void deliver_hook_func_t(struct mail_deliver_context *ctx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char *mailbox);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++extern deliver_hook_func_t *deliver_hook;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const struct var_expand_table *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mail_deliver_ctx_get_log_var_expand_table(struct mail_deliver_context *ctx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/plugins/Makefile.am ./src/plugins/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/plugins/Makefile.am     2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/plugins/Makefile.am     2019-10-11 05:56:16.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -31,6 +31,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  notify \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  notify-status \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  push-notification \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ push-notify \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  mail-filter \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  mail-log \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  $(MAIL_LUA) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/plugins/push-notify/Makefile.am ./src/plugins/push-notify/Makefile.am
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/plugins/push-notify/Makefile.am 1969-12-31 19:00:00.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/plugins/push-notify/Makefile.am 2019-10-11 08:48:43.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -0,0 +1,25 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++AM_CPPFLAGS = \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ -I$(top_srcdir)/src/lib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ -I$(top_srcdir)/src/lib-lda \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ -I$(top_srcdir)/src/lib-mail \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ -I$(top_srcdir)/src/lib-smtp \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ -I$(top_srcdir)/src/lib-storage
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++NOPLUGIN_LDFLAGS =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++lib20_push_notify_plugin_la_LDFLAGS = -module -avoid-version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++module_LTLIBRARIES = \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ lib20_push_notify_plugin.la
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++if DOVECOT_PLUGIN_DEPS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++notify_deps = ../notify/lib15_notify_plugin.la
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++lib20_push_notify_plugin_la_SOURCES = \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ push-notify-plugin.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++headers = \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ push-notify-plugin.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++pkginc_libdir = $(pkgincludedir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++pkginc_lib_HEADERS = $(headers)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/plugins/push-notify/push-notify-plugin.c ./src/plugins/push-notify/push-notify-plugin.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/plugins/push-notify/push-notify-plugin.c        1969-12-31 19:00:00.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/plugins/push-notify/push-notify-plugin.c        2019-10-11 09:06:31.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -0,0 +1,102 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++/* Copyright (c) 2008-2011 Apple, inc. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "lib.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "mail-deliver.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "mail-namespace.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "message-address.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include "push-notify-plugin.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <sys/un.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <sys/socket.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#include <sys/unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++const char *push_notify_plugin_version = DOVECOT_ABI_VERSION;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++static deliver_hook_func_t *next_deliver_mail;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++struct et_list *_et_list = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++struct message_info {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char      *from;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char      *subj;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++// -----------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++//       push_notification ()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++static void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++push_notification(struct mail_deliver_context *ctx, const char *mailbox)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ int                                     debug                   = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ int                                     notify_sock             = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ const char                 *sock_path           = "@PREFIX@/var/run/dovecot/push_notify";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ ssize_t                         rc                              = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ socklen_t                       sock_len                = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ struct sockaddr_un      sock_addr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ struct msg_data_s       msg_data;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if (ctx->rcpt_user->mail_debug) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         debug = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         i_info( "push-notify: push notification enabled" );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if ( strcasecmp(mailbox, "INBOX") != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         i_info( "push-notify: message saved to mailbox: %s, no notification sent", mailbox );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ notify_sock = socket( AF_UNIX, SOCK_DGRAM, 0 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if ( notify_sock < 0 ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         /* warn that connect failed but do not fail the plugin or message will not get delivered */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         i_warning( "push-notify: open socket: \"%s\" failed", sock_path );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ sock_addr.sun_family = AF_UNIX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ strncpy( sock_addr.sun_path, "@PREFIX@/var/run/dovecot/push_notify", sizeof(sock_addr.sun_path) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ sock_len = sizeof(sock_addr.sun_family) + strlen(sock_addr.sun_path) + 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ rc = connect(notify_sock, (struct sockaddr *) &sock_addr,  sock_len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if ( rc < 0 ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         /* warn that connect failed but do not fail the plugin or message will not get delivered */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         i_warning( "push-notify: connect() to socket: \"%s\" failed: %m", sock_path );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ memset( &msg_data, 0, sizeof( msg_data ) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ msg_data.msg = 3;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ /* set user/account id */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if ( ctx->rcpt_user->username != NULL ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         strncpy( msg_data.d1, ctx->rcpt_user->username, sizeof(msg_data.d1) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         if (debug)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                 i_info( "push-notify: notify: %s", msg_data.d1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ rc = send(notify_sock, (void *)&msg_data, sizeof(struct msg_data_s), 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if ( rc < 0 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         i_warning( "push-notify: send() to socket: \"%s\" failed: %m", sock_path );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if (debug)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         i_info("push-notify: data sent: %lu", rc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ close(notify_sock);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++} // push_notification
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++static void push_notify_deliver(struct mail_deliver_context *ctx,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++                         const char *mailbox)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ push_notification(ctx, mailbox);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ if (next_deliver_mail != NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++         next_deliver_mail(ctx, mailbox);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++void push_notify_plugin_init (struct module *module ATTR_UNUSED)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ next_deliver_mail = deliver_hook;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ deliver_hook = push_notify_deliver;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++void push_notify_plugin_deinit (void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ deliver_hook = next_deliver_mail;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++diff -Naur ./src/plugins/push-notify/push-notify-plugin.h ./src/plugins/push-notify/push-notify-plugin.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++--- ./src/plugins/push-notify/push-notify-plugin.h        1969-12-31 19:00:00.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++++ ./src/plugins/push-notify/push-notify-plugin.h        2019-10-08 20:53:46.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@@ -0,0 +1,20 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++/* Copyright (c) 2008-2011 Apple, inc. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#ifndef __NOTIFY_PLUGIN_H__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#define __NOTIFY_PLUGIN_H__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++struct module;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++void push_notify_plugin_init(struct module *module);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++void push_notify_plugin_deinit(void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++typedef struct msg_data_s {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ unsigned long msg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ unsigned long pid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ char d1[128];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ char d2[512];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ char d3[512];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++ char d4[512];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++} msg_data_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+++#endif
</span> diff -Naur ./src/auth/auth-settings.c ./src/auth/auth-settings.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/auth/auth-settings.c  2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/auth/auth-settings.c     2019-10-08 18:37:33.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/auth/auth-settings.c     2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/auth/auth-settings.c     2020-09-18 19:57:02.000000000 -0400
</span> @@ -269,6 +269,8 @@
        DEFLIST(passdbs, "passdb", &auth_passdb_setting_parser_info),
        DEFLIST(userdbs, "userdb", &auth_userdb_setting_parser_info),
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -31,8 +643,8 @@ diff -Naur ./src/auth/auth-settings.c ./src/auth/auth-settings.c
</span>   .verbose_proctitle = FALSE,
        .first_valid_uid = 500,
 diff -Naur ./src/auth/auth-settings.h ./src/auth/auth-settings.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/auth/auth-settings.h  2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/auth/auth-settings.h     2019-10-08 17:51:20.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/auth/auth-settings.h     2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/auth/auth-settings.h     2020-09-18 19:57:02.000000000 -0400
</span> @@ -82,6 +82,8 @@
        ARRAY(struct auth_passdb_settings *) passdbs;
        ARRAY(struct auth_userdb_settings *) userdbs;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -43,8 +655,8 @@ diff -Naur ./src/auth/auth-settings.h ./src/auth/auth-settings.h
</span>   const char *ssl_client_ca_dir;
        const char *ssl_client_ca_file;
 diff -Naur ./src/imap/Makefile.am ./src/imap/Makefile.am
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/imap/Makefile.am      2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/imap/Makefile.am 2019-10-08 20:40:24.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/imap/Makefile.am 2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/imap/Makefile.am 2020-09-18 19:57:02.000000000 -0400
</span> @@ -64,6 +64,7 @@
        cmd-unselect.c \
        cmd-unsubscribe.c \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -55,7 +667,7 @@ diff -Naur ./src/imap/Makefile.am ./src/imap/Makefile.am
</span>  
 diff -Naur ./src/imap/cmd-x-apple-push-service.c ./src/imap/cmd-x-apple-push-service.c
 --- ./src/imap/cmd-x-apple-push-service.c      1969-12-31 19:00:00.000000000 -0500
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/imap/cmd-x-apple-push-service.c       2019-10-10 06:22:12.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/imap/cmd-x-apple-push-service.c  2020-09-18 19:57:02.000000000 -0400
</span> @@ -0,0 +1,173 @@
 +/*
 + * Copyright (c) 2010-2011 Apple Inc. All rights reserved.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -231,9 +843,9 @@ diff -Naur ./src/imap/cmd-x-apple-push-service.c ./src/imap/cmd-x-apple-push-ser
</span> + return TRUE;
 +}
 diff -Naur ./src/imap/imap-client.c ./src/imap/imap-client.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/imap/imap-client.c    2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/imap/imap-client.c       2019-10-08 20:42:59.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -182,6 +182,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/imap/imap-client.c       2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/imap/imap-client.c       2020-09-18 19:57:02.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -181,6 +181,8 @@
</span>              a chance of working */
                client_add_capability(client, "SEARCH=FUZZY");
        }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -243,8 +855,8 @@ diff -Naur ./src/imap/imap-client.c ./src/imap/imap-client.c
</span>   mail_set = mail_user_set_get_storage_set(user);
        if (mail_set->mailbox_list_index) {
 diff -Naur ./src/imap/imap-commands.c ./src/imap/imap-commands.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/imap/imap-commands.c  2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/imap/imap-commands.c     2019-10-08 20:15:39.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/imap/imap-commands.c     2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/imap/imap-commands.c     2020-09-18 19:57:02.000000000 -0400
</span> @@ -76,6 +76,7 @@
        { "UID SORT",         cmd_sort,        COMMAND_FLAG_BREAKS_SEQS },
        { "UID THREAD",               cmd_thread,      COMMAND_FLAG_BREAKS_SEQS },
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -254,8 +866,8 @@ diff -Naur ./src/imap/imap-commands.c ./src/imap/imap-commands.c
</span>   { "X-STATE",          cmd_x_state,     COMMAND_FLAG_REQUIRES_SYNC },
        { "XLIST",            cmd_list,        0 },
 diff -Naur ./src/imap/imap-commands.h ./src/imap/imap-commands.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/imap/imap-commands.h  2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/imap/imap-commands.h     2019-10-08 20:16:48.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/imap/imap-commands.h     2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/imap/imap-commands.h     2020-09-18 19:57:02.000000000 -0400
</span> @@ -121,6 +121,7 @@
  bool cmd_uid_expunge(struct client_command_context *cmd);
  bool cmd_move(struct client_command_context *cmd);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -265,8 +877,8 @@ diff -Naur ./src/imap/imap-commands.h ./src/imap/imap-commands.h
</span>  bool cmd_x_state(struct client_command_context *cmd);
  
 diff -Naur ./src/imap/imap-settings.c ./src/imap/imap-settings.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/imap/imap-settings.c  2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/imap/imap-settings.c     2019-10-08 17:57:36.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/imap/imap-settings.c     2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/imap/imap-settings.c     2020-09-18 19:57:02.000000000 -0400
</span> @@ -73,6 +73,7 @@
        DEF(SET_STR, imap_logout_format),
        DEF(SET_STR, imap_id_send),
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -284,8 +896,8 @@ diff -Naur ./src/imap/imap-settings.c ./src/imap/imap-settings.c
</span>   .imap_metadata = FALSE,
        .imap_literal_minus = FALSE,
 diff -Naur ./src/imap/imap-settings.h ./src/imap/imap-settings.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/imap/imap-settings.h  2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/imap/imap-settings.h     2019-10-08 17:48:14.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/imap/imap-settings.h     2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/imap/imap-settings.h     2020-09-18 19:57:02.000000000 -0400
</span> @@ -31,6 +31,7 @@
        const char *imap_logout_format;
        const char *imap_id_send;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -295,8 +907,8 @@ diff -Naur ./src/imap/imap-settings.h ./src/imap/imap-settings.h
</span>   bool imap_metadata;
        bool imap_literal_minus;
 diff -Naur ./src/imap-login/imap-login-client.c ./src/imap-login/imap-login-client.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/imap-login/imap-login-client.c        2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/imap-login/imap-login-client.c   2019-10-11 08:28:49.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/imap-login/imap-login-client.c   2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/imap-login/imap-login-client.c   2020-09-18 19:57:02.000000000 -0400
</span> @@ -117,6 +117,8 @@
                str_append(cap_str, " STARTTLS");
        if (is_login_cmd_disabled(client))
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -307,8 +919,8 @@ diff -Naur ./src/imap-login/imap-login-client.c ./src/imap-login/imap-login-clie
</span>   client_authenticate_get_capabilities(client, cap_str);
        return str_c(cap_str);
 diff -Naur ./src/imap-login/imap-login-settings.c ./src/imap-login/imap-login-settings.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/imap-login/imap-login-settings.c      2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/imap-login/imap-login-settings.c 2019-10-08 18:33:32.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/imap-login/imap-login-settings.c 2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/imap-login/imap-login-settings.c 2020-09-18 19:57:02.000000000 -0400
</span> @@ -57,6 +57,7 @@
        DEF(SET_STR, imap_capability),
        DEF(SET_STR, imap_id_send),
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -326,8 +938,8 @@ diff -Naur ./src/imap-login/imap-login-settings.c ./src/imap-login/imap-login-se
</span>   .imap_id_retain = FALSE,
  };
 diff -Naur ./src/imap-login/imap-login-settings.h ./src/imap-login/imap-login-settings.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/imap-login/imap-login-settings.h      2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/imap-login/imap-login-settings.h 2019-10-08 17:49:33.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/imap-login/imap-login-settings.h 2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/imap-login/imap-login-settings.h 2020-09-18 19:57:02.000000000 -0400
</span> @@ -5,6 +5,7 @@
        const char *imap_capability;
        const char *imap_id_send;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -337,17 +949,17 @@ diff -Naur ./src/imap-login/imap-login-settings.h ./src/imap-login/imap-login-se
</span>   bool imap_id_retain;
  };
 diff -Naur ./src/lib-lda/mail-deliver.c ./src/lib-lda/mail-deliver.c
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/lib-lda/mail-deliver.c        2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/lib-lda/mail-deliver.c   2019-10-11 08:16:28.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -31,6 +31,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/lib-lda/mail-deliver.c   2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/lib-lda/mail-deliver.c   2020-09-18 19:57:02.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -35,6 +35,7 @@
</span>  };
  
  deliver_mail_func_t *deliver_mail = NULL;
 +deliver_hook_func_t *deliver_hook = NULL;
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>- struct mail_deliver_cache {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   bool filled;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -409,6 +410,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct mail_deliver_mailbox {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   union mailbox_module_context module_ctx;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -459,6 +460,9 @@
</span>           }
                mail_deliver_log(ctx, "saved mail to %s", mailbox_name);
                pool_unref(&changes.pool);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -357,19 +969,19 @@ diff -Naur ./src/lib-lda/mail-deliver.c ./src/lib-lda/mail-deliver.c
</span>   } else {
                mail_deliver_log(ctx, "save failed to %s: %s", mailbox_name,
                        mail_storage_get_last_internal_error(*storage_r, &error));
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -503,6 +507,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -547,6 +551,8 @@
</span>                   /* success. message may or may not have been saved. */
                        ret = 0;
                }
 +              if (!ret && deliver_hook)
 +                      deliver_hook(ctx, ctx->rcpt_default_mailbox);
                mail_duplicate_db_deinit(&ctx->dup_db);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (ret < 0 && mail_deliver_is_tempfailed(ctx, *storage_r)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   muser->deliver_ctx = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           if (ret < 0 && mail_deliver_is_tempfailed(ctx, *storage_r))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   return -1;
</span> diff -Naur ./src/lib-lda/mail-deliver.h ./src/lib-lda/mail-deliver.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/lib-lda/mail-deliver.h        2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/lib-lda/mail-deliver.h   2019-10-08 20:50:00.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -82,6 +82,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/lib-lda/mail-deliver.h   2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/lib-lda/mail-deliver.h   2020-09-18 19:57:02.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -140,6 +140,9 @@
</span>                           struct mail_storage **storage_r);
  
  extern deliver_mail_func_t *deliver_mail;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -380,8 +992,8 @@ diff -Naur ./src/lib-lda/mail-deliver.h ./src/lib-lda/mail-deliver.h
</span>  const struct var_expand_table *
  mail_deliver_ctx_get_log_var_expand_table(struct mail_deliver_context *ctx,
 diff -Naur ./src/plugins/Makefile.am ./src/plugins/Makefile.am
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./src/plugins/Makefile.am   2019-07-23 03:14:10.000000000 -0400
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/plugins/Makefile.am      2019-10-11 05:56:16.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/plugins/Makefile.am      2020-09-18 20:09:11.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/plugins/Makefile.am      2020-09-18 19:57:02.000000000 -0400
</span> @@ -31,6 +31,7 @@
        notify \
        notify-status \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -392,7 +1004,7 @@ diff -Naur ./src/plugins/Makefile.am ./src/plugins/Makefile.am
</span>   $(MAIL_LUA) \
 diff -Naur ./src/plugins/push-notify/Makefile.am ./src/plugins/push-notify/Makefile.am
 --- ./src/plugins/push-notify/Makefile.am      1969-12-31 19:00:00.000000000 -0500
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/plugins/push-notify/Makefile.am       2019-10-11 08:48:43.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/plugins/push-notify/Makefile.am  2020-09-18 19:57:02.000000000 -0400
</span> @@ -0,0 +1,25 @@
 +AM_CPPFLAGS = \
 +      -I$(top_srcdir)/src/lib \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -421,7 +1033,7 @@ diff -Naur ./src/plugins/push-notify/Makefile.am ./src/plugins/push-notify/Makef
</span> +pkginc_lib_HEADERS = $(headers)
 diff -Naur ./src/plugins/push-notify/push-notify-plugin.c ./src/plugins/push-notify/push-notify-plugin.c
 --- ./src/plugins/push-notify/push-notify-plugin.c     1969-12-31 19:00:00.000000000 -0500
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/plugins/push-notify/push-notify-plugin.c      2019-10-11 09:06:31.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/plugins/push-notify/push-notify-plugin.c 2020-09-18 19:57:02.000000000 -0400
</span> @@ -0,0 +1,102 @@
 +/* Copyright (c) 2008-2011 Apple, inc. */
 +
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -527,7 +1139,7 @@ diff -Naur ./src/plugins/push-notify/push-notify-plugin.c ./src/plugins/push-not
</span> +}
 diff -Naur ./src/plugins/push-notify/push-notify-plugin.h ./src/plugins/push-notify/push-notify-plugin.h
 --- ./src/plugins/push-notify/push-notify-plugin.h     1969-12-31 19:00:00.000000000 -0500
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./src/plugins/push-notify/push-notify-plugin.h      2019-10-08 20:53:46.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/plugins/push-notify/push-notify-plugin.h 2020-09-18 19:57:02.000000000 -0400
</span> @@ -0,0 +1,20 @@
 +/* Copyright (c) 2008-2011 Apple, inc. */
 +
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/mail/dovecot/files/patch-src-lib-ioloop-notify-kqueue-c.diff b/mail/dovecot/files/patch-src-lib-ioloop-notify-kqueue-c.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..ff00735b926
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/mail/dovecot/files/patch-src-lib-ioloop-notify-kqueue-c.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./src/lib/ioloop-notify-kqueue.c       2020-09-18 19:56:38.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./src/lib/ioloop-notify-kqueue.c       2020-09-18 20:54:36.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -11,6 +11,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "ioloop-private.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "llist.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "time-util.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <fcntl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <sys/types.h>
</span></pre><pre style='margin:0'>

</pre>