diff --git a/mail/Makefile b/mail/Makefile index b09a058148ff..49b37a57c62a 100644 --- a/mail/Makefile +++ b/mail/Makefile @@ -1,784 +1,785 @@ COMMENT = Electronic mail utilities SUBDIR += abook SUBDIR += adcomplain SUBDIR += addresses SUBDIR += addresses-goodies SUBDIR += aerc SUBDIR += akpop3d SUBDIR += alpine SUBDIR += amavis-logwatch SUBDIR += anomy-sanitizer SUBDIR += antivirus-milter SUBDIR += anubis SUBDIR += archiveopteryx SUBDIR += archivesmtp SUBDIR += archmbox SUBDIR += ask SUBDIR += asmail SUBDIR += assp SUBDIR += astroid SUBDIR += automx SUBDIR += autorespond SUBDIR += balsa SUBDIR += batv-milter SUBDIR += bayespam SUBDIR += bbmail SUBDIR += biabam SUBDIR += bincimap SUBDIR += bmf SUBDIR += bogofilter SUBDIR += bogofilter-kc SUBDIR += bogofilter-lmdb1 SUBDIR += bogofilter-sqlite SUBDIR += bsd-vacation SUBDIR += bsfilter SUBDIR += bsmtp SUBDIR += bulk_mailer SUBDIR += c-sig SUBDIR += claws-mail SUBDIR += claws-mail-acpi_notifier SUBDIR += claws-mail-address_keeper SUBDIR += claws-mail-archive SUBDIR += claws-mail-att_remover SUBDIR += claws-mail-attachwarner SUBDIR += claws-mail-bogofilter SUBDIR += claws-mail-bsfilter SUBDIR += claws-mail-clamd SUBDIR += claws-mail-dillo SUBDIR += claws-mail-fancy SUBDIR += claws-mail-fetchinfo SUBDIR += claws-mail-gdata SUBDIR += claws-mail-keyword_warner SUBDIR += claws-mail-libravatar SUBDIR += claws-mail-litehtml_viewer SUBDIR += claws-mail-mailmbox SUBDIR += claws-mail-managesieve SUBDIR += claws-mail-newmail SUBDIR += claws-mail-notification SUBDIR += claws-mail-pdf_viewer SUBDIR += claws-mail-perl SUBDIR += claws-mail-pgp SUBDIR += claws-mail-plugins SUBDIR += claws-mail-rssyl SUBDIR += claws-mail-spam_report SUBDIR += claws-mail-spamassassin SUBDIR += claws-mail-tnef_parse SUBDIR += claws-mail-vcalendar SUBDIR += clawsker SUBDIR += cleanup-maildir SUBDIR += cone SUBDIR += coolmail SUBDIR += courier SUBDIR += courier-analog SUBDIR += courier-authlib-vchkpw SUBDIR += courier-imap SUBDIR += couriergraph SUBDIR += crm114 SUBDIR += cvsmail SUBDIR += cyrus-imapd SUBDIR += cyrus-imapd25 SUBDIR += cyrus-imapd30 SUBDIR += cyrus-imapd310 SUBDIR += cyrus-imapd312 SUBDIR += cyrus-imapd32 SUBDIR += cyrus-imapd34 SUBDIR += cyrus-imapd36 SUBDIR += cyrus-imapd38 SUBDIR += cyrus2courier SUBDIR += cyrus2dovecot SUBDIR += datovka SUBDIR += davmail SUBDIR += dbmail SUBDIR += dcc-dccd SUBDIR += deforaos-mailer SUBDIR += delatt SUBDIR += dk-milter SUBDIR += dkfilter SUBDIR += dkimproxy SUBDIR += dma SUBDIR += dmarcts-report-parser SUBDIR += dot-forward SUBDIR += dovecot SUBDIR += dovecot-coi SUBDIR += dovecot-fts-elastic SUBDIR += dovecot-fts-flatcurve SUBDIR += dovecot-fts-xapian SUBDIR += dovecot-pigeonhole SUBDIR += dovecot-xaps SUBDIR += dovecot24 SUBDIR += dspam SUBDIR += ecartis SUBDIR += elm SUBDIR += emailrelay SUBDIR += emil SUBDIR += enma SUBDIR += eps SUBDIR += epstools SUBDIR += evolution SUBDIR += evolution-ews SUBDIR += exilog SUBDIR += exim SUBDIR += exim-doc-html SUBDIR += exim-doc-pdf SUBDIR += exim-doc-postscript SUBDIR += exim-ldap2 SUBDIR += exim-monitor SUBDIR += exim-mysql SUBDIR += exim-postgresql SUBDIR += exim-sa-exim SUBDIR += exim-sqlite SUBDIR += exipick SUBDIR += exmh-devel SUBDIR += exmh2 SUBDIR += ez-pine-gpg SUBDIR += ezmlm SUBDIR += ezmlm-idx SUBDIR += faces SUBDIR += fastforward SUBDIR += fdm SUBDIR += fetchmail SUBDIR += fetchmailconf SUBDIR += filtermail SUBDIR += findmaildirs SUBDIR += geary SUBDIR += gensig SUBDIR += getmail6 SUBDIR += gmime26 SUBDIR += gmime26-sharp SUBDIR += gmime30 SUBDIR += gnarwl SUBDIR += gnubiff SUBDIR += gnumail SUBDIR += goimapnotify SUBDIR += gotmail SUBDIR += grepmail SUBDIR += greyfix SUBDIR += greylite SUBDIR += gubby SUBDIR += hashcash SUBDIR += hbiff SUBDIR += heirloom-mailx SUBDIR += hydroxide SUBDIR += ifile SUBDIR += im SUBDIR += imap-tools SUBDIR += imapdedup SUBDIR += imapfilter SUBDIR += imapsync SUBDIR += imaptools SUBDIR += imaputils SUBDIR += isbg SUBDIR += isoqlog SUBDIR += isync SUBDIR += james SUBDIR += jamlib SUBDIR += jmba SUBDIR += junkfilter SUBDIR += jwsmtp SUBDIR += lbdb SUBDIR += lens SUBDIR += libcmime SUBDIR += libdkim SUBDIR += libdomainkeys SUBDIR += libesmtp SUBDIR += libetpan SUBDIR += libmilter SUBDIR += libopensmtpd SUBDIR += libpst SUBDIR += libsieve SUBDIR += libspamtest SUBDIR += libspf2 SUBDIR += libsrs2 SUBDIR += libsrs_alt SUBDIR += libtlsrpt SUBDIR += libvmime SUBDIR += linux-r7-organizer SUBDIR += linux-r7-organizer-pro SUBDIR += listadmin SUBDIR += lookout SUBDIR += lurker SUBDIR += mail-expire SUBDIR += mail2sms SUBDIR += mailagent SUBDIR += maildrop SUBDIR += mailest SUBDIR += mailfromd SUBDIR += mailfront SUBDIR += mailgraph SUBDIR += mailhog SUBDIR += mailio SUBDIR += mailman SUBDIR += mailman-exim4 SUBDIR += mailman-postfix SUBDIR += mailman3 SUBDIR += mailpit SUBDIR += mailscanner SUBDIR += mailslurper SUBDIR += mailutils SUBDIR += mailx SUBDIR += mairix SUBDIR += masqmail SUBDIR += mb2md SUBDIR += mbar SUBDIR += mblaze SUBDIR += mbox2imap SUBDIR += mbox2mdir SUBDIR += mboxgrep SUBDIR += mboxstats SUBDIR += mbx2mbox SUBDIR += mdpop3d SUBDIR += mess822 SUBDIR += meta1 SUBDIR += metamail SUBDIR += mew SUBDIR += mew-devel SUBDIR += mfmod_ldap SUBDIR += mfmod_openmetrics SUBDIR += mfmod_pcre SUBDIR += milter-bogom SUBDIR += milter-callback SUBDIR += milter-greylist SUBDIR += milter-manager SUBDIR += milter-regex SUBDIR += milter-skem SUBDIR += mime-construct SUBDIR += mimedefang SUBDIR += mini_sendmail SUBDIR += minimalist SUBDIR += mlmmj SUBDIR += mlmmj-archive-mid SUBDIR += mlmmj-archiver SUBDIR += mlmmj-webview SUBDIR += mls SUBDIR += mmh SUBDIR += mmr SUBDIR += mox SUBDIR += mpop SUBDIR += msglint SUBDIR += msmtp SUBDIR += mu SUBDIR += mulberry SUBDIR += mutt SUBDIR += mutt_vc_query SUBDIR += nbsmtp SUBDIR += neomutt SUBDIR += nextcloud-mail SUBDIR += nmh SUBDIR += nmh-devel SUBDIR += noattach SUBDIR += nocc SUBDIR += normalizemime SUBDIR += notimail SUBDIR += notmuch SUBDIR += notmuch-emacs SUBDIR += notmuch-mutt SUBDIR += nullmailer SUBDIR += oama SUBDIR += openarc SUBDIR += opendkim SUBDIR += opendkim-devel SUBDIR += opendmarc SUBDIR += opensmtpd SUBDIR += opensmtpd-extras SUBDIR += opensmtpd-extras-queue-ram SUBDIR += opensmtpd-extras-scheduler-ram SUBDIR += opensmtpd-extras-table-ldap SUBDIR += opensmtpd-extras-table-mysql SUBDIR += opensmtpd-extras-table-passwd SUBDIR += opensmtpd-extras-table-postgresql SUBDIR += opensmtpd-extras-table-redis SUBDIR += opensmtpd-extras-table-socketmap SUBDIR += opensmtpd-extras-table-sqlite SUBDIR += opensmtpd-filter-dkimsign SUBDIR += opensmtpd-filter-rspamd SUBDIR += opensmtpd-filter-senderscore SUBDIR += opensmtpd-table-socketmap SUBDIR += opensmtpd-table-sqlite SUBDIR += osbf-lua SUBDIR += ovs SUBDIR += p5-CGP-CLI SUBDIR += p5-Clamd SUBDIR += p5-Dancer-Plugin-Email SUBDIR += p5-Dancer2-Plugin-Email SUBDIR += p5-Data-Validate-Email SUBDIR += p5-Email-Abstract SUBDIR += p5-Email-Address SUBDIR += p5-Email-Address-List SUBDIR += p5-Email-Address-Loose SUBDIR += p5-Email-Address-UseXS SUBDIR += p5-Email-Address-XS SUBDIR += p5-Email-AddressParser SUBDIR += p5-Email-Date SUBDIR += p5-Email-Date-Format SUBDIR += p5-Email-Delete SUBDIR += p5-Email-Filter SUBDIR += p5-Email-Find SUBDIR += p5-Email-Folder SUBDIR += p5-Email-Folder-IMAP SUBDIR += p5-Email-Folder-IMAPS SUBDIR += p5-Email-Folder-POP3 SUBDIR += p5-Email-FolderType SUBDIR += p5-Email-FolderType-Net SUBDIR += p5-Email-LocalDelivery SUBDIR += p5-Email-LocalDelivery-Ezmlm SUBDIR += p5-Email-MIME SUBDIR += p5-Email-MIME-Attachment-Stripper SUBDIR += p5-Email-MIME-ContentType SUBDIR += p5-Email-MIME-CreateHTML SUBDIR += p5-Email-MIME-Creator-ISO_2022_JP SUBDIR += p5-Email-MIME-Encodings SUBDIR += p5-Email-MIME-RFC2047 SUBDIR += p5-Email-MessageID SUBDIR += p5-Email-Outlook-Message SUBDIR += p5-Email-Reply SUBDIR += p5-Email-Send SUBDIR += p5-Email-Sender SUBDIR += p5-Email-Sender-Transport-SMTP-TLS SUBDIR += p5-Email-Sender-Transport-SQLite SUBDIR += p5-Email-Simple SUBDIR += p5-Email-Simple-FromHandle SUBDIR += p5-Email-Stuffer SUBDIR += p5-Email-Valid SUBDIR += p5-Email-Valid-Loose SUBDIR += p5-FuzzyOcr-devel SUBDIR += p5-GMail-IMAPD SUBDIR += p5-IMAP-Admin SUBDIR += p5-IMAP-Client SUBDIR += p5-IMAP-Sieve SUBDIR += p5-LMAP-CID2SPF SUBDIR += p5-Log-Procmail SUBDIR += p5-MIME-AltWords SUBDIR += p5-MIME-Charset SUBDIR += p5-MIME-EcoEncode SUBDIR += p5-MIME-EncWords SUBDIR += p5-MIME-Explode SUBDIR += p5-MIME-Lite SUBDIR += p5-MIME-Lite-HTML SUBDIR += p5-MIME-Lite-TT SUBDIR += p5-MIME-Lite-TT-HTML SUBDIR += p5-MIME-Tools SUBDIR += p5-MIME-Types SUBDIR += p5-Mail-Address-MobileJp SUBDIR += p5-Mail-Alias SUBDIR += p5-Mail-Audit SUBDIR += p5-Mail-Audit-Attach SUBDIR += p5-Mail-AuthenticationResults SUBDIR += p5-Mail-BIMI SUBDIR += p5-Mail-Box SUBDIR += p5-Mail-Box-IMAP4 SUBDIR += p5-Mail-Box-IMAP4-SSL SUBDIR += p5-Mail-Box-POP3 SUBDIR += p5-Mail-Box-Parser-C SUBDIR += p5-Mail-Bulkmail SUBDIR += p5-Mail-CheckUser SUBDIR += p5-Mail-DKIM SUBDIR += p5-Mail-DMARC SUBDIR += p5-Mail-DataFeed-Abusix SUBDIR += p5-Mail-DeliveryStatus-BounceParser SUBDIR += p5-Mail-DomainKeys SUBDIR += p5-Mail-Ezmlm SUBDIR += p5-Mail-Field-Received SUBDIR += p5-Mail-FilterXML SUBDIR += p5-Mail-Folder SUBDIR += p5-Mail-Freshmeat SUBDIR += p5-Mail-GnuPG SUBDIR += p5-Mail-Graph SUBDIR += p5-Mail-IMAPClient SUBDIR += p5-Mail-IMAPTalk SUBDIR += p5-Mail-LMLM SUBDIR += p5-Mail-ListDetector SUBDIR += p5-Mail-Mbox-MessageParser SUBDIR += p5-Mail-MboxParser SUBDIR += p5-Mail-Message SUBDIR += p5-Mail-Milter-Authentication SUBDIR += p5-Mail-OpenDKIM SUBDIR += p5-Mail-OpenRelay-Simple SUBDIR += p5-Mail-POP3Client SUBDIR += p5-Mail-Procmail SUBDIR += p5-Mail-Procmailrc SUBDIR += p5-Mail-RBL SUBDIR += p5-Mail-RFC822-Address SUBDIR += p5-Mail-SPF SUBDIR += p5-Mail-SRS SUBDIR += p5-Mail-SendEasy SUBDIR += p5-Mail-Sender SUBDIR += p5-Mail-Sendmail SUBDIR += p5-Mail-Spool SUBDIR += p5-Mail-Tools SUBDIR += p5-Mail-Transport SUBDIR += p5-Mail-Transport-Dbx SUBDIR += p5-Mail-Verify SUBDIR += p5-Mail-Verp SUBDIR += p5-Mail-Webmail-Gmail SUBDIR += p5-Mojolicious-Plugin-Mail SUBDIR += p5-Net-IMAP-Client SUBDIR += p5-Net-IMAP-Server SUBDIR += p5-Net-IMAP-Simple SUBDIR += p5-Net-IMAP-Simple-SSL SUBDIR += p5-Net-LMTP SUBDIR += p5-Net-ManageSieve SUBDIR += p5-Net-POP3-SSLWrapper SUBDIR += p5-Net-QMTP SUBDIR += p5-Net-SMTP-Server SUBDIR += p5-Net-SMTP-TLS SUBDIR += p5-Net-SMTP-TLS-ButMaintained SUBDIR += p5-Net-SMTPS SUBDIR += p5-Net-SMTP_auth SUBDIR += p5-Net-SenderBase SUBDIR += p5-Net-Server-Mail SUBDIR += p5-POE-Component-Client-POP3 SUBDIR += p5-POE-Component-Client-SMTP SUBDIR += p5-POE-Component-SMTP SUBDIR += p5-POE-Filter-Transparent-SMTP SUBDIR += p5-Parse-MIME SUBDIR += p5-Parse-Syslog-Mail SUBDIR += p5-Qmail-Envelope SUBDIR += p5-SES SUBDIR += p5-Sendmail-AccessDB SUBDIR += p5-Sendmail-Milter SUBDIR += p5-Sendmail-PMilter SUBDIR += p5-Sisimai SUBDIR += p5-Test-Email SUBDIR += p5-URI-imap SUBDIR += p5-URI-imaps SUBDIR += p5-WWW-GMail SUBDIR += p5-WWW-Hotmail SUBDIR += p5-qpsmtpd SUBDIR += panda-cclient SUBDIR += panda-imap SUBDIR += pantomime SUBDIR += pathalias SUBDIR += pear-Contact_Vcard_Build SUBDIR += pear-Contact_Vcard_Parse SUBDIR += pear-Horde_Imap_Client SUBDIR += pear-Horde_Kolab_Storage SUBDIR += pear-Horde_ListHeaders SUBDIR += pear-Horde_Mail SUBDIR += pear-Horde_Mail_Autoconfig SUBDIR += pear-Horde_Mapi SUBDIR += pear-Horde_Mime SUBDIR += pear-Horde_Mime_Viewer SUBDIR += pear-Horde_Smtp SUBDIR += pear-MIME_Type SUBDIR += pear-Mail SUBDIR += pear-Mail_Mbox SUBDIR += pear-Mail_Mime SUBDIR += pear-Mail_Queue SUBDIR += pear-Mail_mimeDecode SUBDIR += pear-Net_Cyrus SUBDIR += pear-Net_IMAP SUBDIR += pear-Net_LMTP SUBDIR += pecl-imap SUBDIR += pecl-mailparse SUBDIR += perdition SUBDIR += pflogsumm SUBDIR += pfqueue SUBDIR += php82-imap SUBDIR += php83-imap SUBDIR += phplist SUBDIR += phpmailer SUBDIR += phpmailer6 SUBDIR += phpmailer7 SUBDIR += pine-pgp-filters SUBDIR += pizauth SUBDIR += pm-lib SUBDIR += policyd2 SUBDIR += popa3d SUBDIR += popa3d-before-sendmail SUBDIR += popcheck SUBDIR += popfile SUBDIR += poppwd SUBDIR += popular SUBDIR += postfinger SUBDIR += postfix SUBDIR += postfix-current SUBDIR += postfix-logwatch SUBDIR += postfix-policyd-sf SUBDIR += postfix-policyd-spf-perl SUBDIR += postfix-policyd-weight SUBDIR += postfix-postfwd SUBDIR += postfixadmin SUBDIR += postfixadmin-lite SUBDIR += postfixadmin33 SUBDIR += postfixadmin33-lite SUBDIR += postgrey SUBDIR += postsrsd SUBDIR += prepflog SUBDIR += procmail SUBDIR += procmail-bgrb + SUBDIR += protonmail-bridge SUBDIR += proxsmtp SUBDIR += py-aiosmtpd SUBDIR += py-alot SUBDIR += py-authheaders SUBDIR += py-authres SUBDIR += py-checkdmarc SUBDIR += py-django-mailbox SUBDIR += py-django-mailman3 SUBDIR += py-dkimpy SUBDIR += py-dkimpy-milter SUBDIR += py-email-reply-parser SUBDIR += py-email-validator SUBDIR += py-exchangelib SUBDIR += py-flanker SUBDIR += py-flask-mail SUBDIR += py-flufl.bounce SUBDIR += py-fuglu SUBDIR += py-imap-tools SUBDIR += py-imapclient SUBDIR += py-imaplib2 SUBDIR += py-mail-parser SUBDIR += py-mailmanclient SUBDIR += py-mailnag SUBDIR += py-mailsuite SUBDIR += py-managesieve3 SUBDIR += py-notmuch SUBDIR += py-notmuch2 SUBDIR += py-offlineimap SUBDIR += py-postfix-mta-sts-resolver SUBDIR += py-premailer SUBDIR += py-pyisemail SUBDIR += py-pymailq SUBDIR += py-pymilter SUBDIR += py-pysasl SUBDIR += py-pyspf SUBDIR += py-python-slimta SUBDIR += py-pyzmail SUBDIR += py-resend SUBDIR += py-rfc6555 SUBDIR += py-spf-engine SUBDIR += py-tlsrpt-reporter SUBDIR += py-validate_email SUBDIR += pymsgauth SUBDIR += pyzor SUBDIR += qconfirm SUBDIR += qmail SUBDIR += qmail-activedir SUBDIR += qmail-autoresponder SUBDIR += qmail-conf SUBDIR += qmail-contrib SUBDIR += qmail-dk SUBDIR += qmail-mysql SUBDIR += qmail-notify SUBDIR += qmail-qfilter SUBDIR += qmail-rblchk SUBDIR += qmail-remove SUBDIR += qmail-tls SUBDIR += qmailadmin SUBDIR += qmailanalog SUBDIR += qmailmrtg7 SUBDIR += qmhandle SUBDIR += qpopper SUBDIR += qsf SUBDIR += queue-repair SUBDIR += rainloop SUBDIR += ratelimit-policyd SUBDIR += raysfilter SUBDIR += razor-agents SUBDIR += rbl-milter SUBDIR += rblcheck SUBDIR += renattach SUBDIR += ripmime SUBDIR += rmilter SUBDIR += roundcube SUBDIR += roundcube-automatic_addressbook SUBDIR += roundcube-calendar-kolab SUBDIR += roundcube-carddav SUBDIR += roundcube-classic SUBDIR += roundcube-contextmenu SUBDIR += roundcube-gravatar SUBDIR += roundcube-html5_notifier SUBDIR += roundcube-identity_smtp SUBDIR += roundcube-larry SUBDIR += roundcube-login_info SUBDIR += roundcube-sauserprefs SUBDIR += roundcube-thunderbird_labels SUBDIR += roundcube-tls_icon SUBDIR += roundcube-twofactor_gauthenticator SUBDIR += roundcube-veximaccountadmin SUBDIR += roundcube-yubikey_auth SUBDIR += rspamd SUBDIR += rspamd-devel SUBDIR += rss2email3 SUBDIR += ruby-notmuch SUBDIR += rubygem-actionmailbox-gitlab SUBDIR += rubygem-actionmailbox60 SUBDIR += rubygem-actionmailbox61 SUBDIR += rubygem-actionmailbox70 SUBDIR += rubygem-actionmailbox71 SUBDIR += rubygem-actionmailbox72 SUBDIR += rubygem-actionmailbox80 SUBDIR += rubygem-actionmailbox81 SUBDIR += rubygem-actionmailer-gitlab SUBDIR += rubygem-actionmailer4 SUBDIR += rubygem-actionmailer5 SUBDIR += rubygem-actionmailer50 SUBDIR += rubygem-actionmailer52 SUBDIR += rubygem-actionmailer60 SUBDIR += rubygem-actionmailer61 SUBDIR += rubygem-actionmailer70 SUBDIR += rubygem-actionmailer71 SUBDIR += rubygem-actionmailer72 SUBDIR += rubygem-actionmailer80 SUBDIR += rubygem-actionmailer81 SUBDIR += rubygem-aws-actionmailer-ses-gitlab SUBDIR += rubygem-email_reply_parser SUBDIR += rubygem-email_reply_parser-discourse SUBDIR += rubygem-email_reply_trimmer SUBDIR += rubygem-email_reply_trimmer-gitlab SUBDIR += rubygem-email_validator SUBDIR += rubygem-exception_notification SUBDIR += rubygem-extended_email_reply_parser SUBDIR += rubygem-gitlab-mail_room SUBDIR += rubygem-mail SUBDIR += rubygem-mail-gitlab SUBDIR += rubygem-mail_room SUBDIR += rubygem-mailboxer SUBDIR += rubygem-mailfactory SUBDIR += rubygem-mini_mime SUBDIR += rubygem-net-imap SUBDIR += rubygem-net-imap-gitlab SUBDIR += rubygem-net-pop SUBDIR += rubygem-net-smtp SUBDIR += rubygem-pony SUBDIR += rubygem-premailer SUBDIR += rubygem-premailer-rails SUBDIR += rubygem-premailer-rails-rails-gitlab SUBDIR += rubygem-premailer-rails-rails5 SUBDIR += rubygem-premailer-rails-rails52 SUBDIR += rubygem-premailer-rails-rails60 SUBDIR += rubygem-premailer-rails-rails61 SUBDIR += rubygem-premailer-rails-rails70 SUBDIR += rubygem-premailer-rails-rails71 SUBDIR += rubygem-rmail SUBDIR += rubygem-roadie SUBDIR += rubygem-roadie-rails-rails4 SUBDIR += rubygem-roadie-rails-rails52 SUBDIR += rubygem-roadie-rails-rails61 SUBDIR += rubygem-roadie-rails-rails72 SUBDIR += rubygem-roadie3 SUBDIR += rubygem-ruby-qmail SUBDIR += rubygem-valid_email SUBDIR += rubygem-valid_email02 SUBDIR += rubygem-vmail SUBDIR += s-nail SUBDIR += sa-stats SUBDIR += sa-utils SUBDIR += scam-backscatter SUBDIR += sendmail SUBDIR += sendmail-devel SUBDIR += sendok SUBDIR += sentinel SUBDIR += serialmail SUBDIR += sgwi SUBDIR += sid-milter SUBDIR += sieve-connect SUBDIR += sigrot SUBDIR += simscan SUBDIR += slimta SUBDIR += sma SUBDIR += smfsav SUBDIR += smfsav-devel SUBDIR += smtp-cli SUBDIR += smtpfeed SUBDIR += smtpmail SUBDIR += smtprc SUBDIR += smtprelay SUBDIR += smtptrapd SUBDIR += snappymail SUBDIR += sortmail SUBDIR += spamass-ixhash SUBDIR += spamass-milter SUBDIR += spamass-rules SUBDIR += spamassassin SUBDIR += spamassassin-devel SUBDIR += spamassassin-dqs SUBDIR += spambnc SUBDIR += spamcup SUBDIR += spamd SUBDIR += spamguard SUBDIR += spamilter SUBDIR += spampd SUBDIR += spamprobe SUBDIR += spamstats SUBDIR += spf-tools SUBDIR += spfmilter SUBDIR += spfval SUBDIR += spmfilter SUBDIR += spmfilter-clamav SUBDIR += sqlgrey SUBDIR += squirrelmail SUBDIR += squirrelmail-abook_import_export-plugin SUBDIR += squirrelmail-askuserinfo-plugin SUBDIR += squirrelmail-avelsieve-plugin SUBDIR += squirrelmail-calendar_file_backend-plugin SUBDIR += squirrelmail-change_ldappass-plugin SUBDIR += squirrelmail-change_sqlpass-plugin SUBDIR += squirrelmail-check_quota-plugin SUBDIR += squirrelmail-compatibility-plugin SUBDIR += squirrelmail-decode SUBDIR += squirrelmail-email_footer-plugin SUBDIR += squirrelmail-login_auth-plugin SUBDIR += squirrelmail-login_notes-plugin SUBDIR += squirrelmail-mark_read-plugin SUBDIR += squirrelmail-multilogin-plugin SUBDIR += squirrelmail-notes-plugin SUBDIR += squirrelmail-notify-plugin SUBDIR += squirrelmail-password_forget-plugin SUBDIR += squirrelmail-plugins SUBDIR += squirrelmail-pupdate-plugin SUBDIR += squirrelmail-qmailadmin_login-plugin SUBDIR += squirrelmail-quota_usage-plugin SUBDIR += squirrelmail-sasql-plugin SUBDIR += squirrelmail-secure_login-plugin SUBDIR += squirrelmail-shared_calendars-plugin SUBDIR += squirrelmail-spam-buttons-plugin SUBDIR += squirrelmail-squirrel_logger-plugin SUBDIR += squirrelmail-timeout_user-plugin SUBDIR += squirrelmail-translations SUBDIR += squirrelmail-unsafe_image_rules-plugin SUBDIR += squirrelmail-user_special_mailboxes-plugin SUBDIR += squirrelmail-vlogin-plugin SUBDIR += squirrelmail-websearch-plugin SUBDIR += squirrelmail-wetteronline-plugin SUBDIR += sqwebmail SUBDIR += ssmtp SUBDIR += stalwart SUBDIR += stalwart-cli SUBDIR += surblhost SUBDIR += swaks SUBDIR += sylpheed SUBDIR += sympa SUBDIR += t-prot SUBDIR += textmail SUBDIR += thunderbird SUBDIR += thunderbird-dictionaries SUBDIR += thunderbird-esr SUBDIR += tlb SUBDIR += tmpmail SUBDIR += tpop3d SUBDIR += tumgreyspf SUBDIR += up-imapproxy SUBDIR += usendmail SUBDIR += vacation SUBDIR += vbsfilter SUBDIR += vexim SUBDIR += vpopmail SUBDIR += vqadmin SUBDIR += vrfy SUBDIR += wanderlust SUBDIR += websieve SUBDIR += whoson SUBDIR += wmbiff SUBDIR += wmmaiload SUBDIR += x-face-e21 SUBDIR += xbuffy SUBDIR += xcite SUBDIR += xfaces SUBDIR += xfce4-mailwatch-plugin SUBDIR += xmail SUBDIR += xmailbox SUBDIR += xmailwatcher SUBDIR += xpbiff .include diff --git a/mail/protonmail-bridge/Makefile b/mail/protonmail-bridge/Makefile new file mode 100644 index 000000000000..f693b2e4a72e --- /dev/null +++ b/mail/protonmail-bridge/Makefile @@ -0,0 +1,45 @@ +PORTNAME= protonmail-bridge +DISTVERSIONPREFIX= v +DISTVERSION= 3.25.0 +CATEGORIES= mail + +MAINTAINER= tagattie@FreeBSD.org +COMMENT= Proton Mail Bridge for e-mail clients +WWW= https://proton.me/mail/bridge + +LICENSE= GPLv3 +LICENSE_FILE= ${WRKSRC}/LICENSE + +BUILD_DEPENDS= gsed:textproc/gsed +LIB_DEPENDS= libfido2.so:security/libfido2 \ + libsecret-1.so:security/libsecret + +USES= gettext-runtime gnome go:1.26+,modules pkgconfig ssl + +GO_MODULE= github.com/ProtonMail/proton-bridge/v3 +GO_TARGET= ./cmd/Desktop-Bridge +GO_LDFLAGS= -X ${CONSTANTS_PREFIX}.Version=${DISTVERSION} \ + -X ${CONSTANTS_PREFIX}.Revision=${COMMIT_HASH} \ + -X ${CONSTANTS_PREFIX}.Tag=${DISTVERSIONFULL} \ + -X ${CONSTANTS_PREFIX}.BuildTime=${:!${BUILD_TIME_CMD}!} + +USE_GNOME= glib20 + +BINARY_ALIAS= sed=gsed + +PLIST_FILES= bin/${PORTNAME} + +CONSTANTS_PREFIX= github.com/ProtonMail/proton-bridge/v3/internal/constants +COMMIT_HASH= f1f599e97167265cb0d10ad3d169269c324d9cc7 +BUILD_TIME_CMD= /bin/date -r $$(${AWK} '/TIMESTAMP/ { print $$NF }' ${DISTINFO_FILE}) '+%FT%T%z' + +pre-build: + cd ${WRKSRC}/utils && \ + ${SETENV} ${MAKE_ENV} ${SH} ./credits.sh bridge + +post-install: + @${MV} ${STAGEDIR}${PREFIX}/bin/Desktop-Bridge \ + ${STAGEDIR}${PREFIX}/bin/${PORTNAME} + + +.include diff --git a/mail/protonmail-bridge/distinfo b/mail/protonmail-bridge/distinfo new file mode 100644 index 000000000000..de4bcda1390e --- /dev/null +++ b/mail/protonmail-bridge/distinfo @@ -0,0 +1,5 @@ +TIMESTAMP = 1785051470 +SHA256 (go/mail_protonmail-bridge/protonmail-bridge-v3.25.0/v3.25.0.mod) = 2b413c5e0f38b1322c52f74cf085c433a162de19ef7847835b3f922b550624ca +SIZE (go/mail_protonmail-bridge/protonmail-bridge-v3.25.0/v3.25.0.mod) = 7941 +SHA256 (go/mail_protonmail-bridge/protonmail-bridge-v3.25.0/v3.25.0.zip) = 0194435fd4207a51010e2a815d33f33a579c4337ac6cb7a88be8fc8a9bf8b656 +SIZE (go/mail_protonmail-bridge/protonmail-bridge-v3.25.0/v3.25.0.zip) = 7969325 diff --git a/mail/protonmail-bridge/files/patch-internal_app_app.go b/mail/protonmail-bridge/files/patch-internal_app_app.go new file mode 100644 index 000000000000..777cde5634a6 --- /dev/null +++ b/mail/protonmail-bridge/files/patch-internal_app_app.go @@ -0,0 +1,40 @@ +--- internal/app/app.go.orig 1979-11-29 15:00:00 UTC ++++ internal/app/app.go +@@ -47,7 +47,7 @@ import ( + "github.com/ProtonMail/proton-bridge/v3/internal/vault" + "github.com/ProtonMail/proton-bridge/v3/pkg/keychain" + "github.com/ProtonMail/proton-bridge/v3/pkg/restarter" +- "github.com/elastic/go-sysinfo" ++ // "github.com/elastic/go-sysinfo" + "github.com/pkg/profile" + "github.com/sirupsen/logrus" + "github.com/urfave/cli/v2" +@@ -450,17 +450,17 @@ func withLogging(c *cli.Context, crashHandler *crash.H + WithField("offset", now.Format("-07:00:00")). + Info("Time zone info") + +- host, err := sysinfo.Host() +- if err != nil { +- logrus.WithError(err).Error("Could not retrieve operating system info") +- } else { +- osInfo := host.Info().OS +- logrus. +- WithField("name", osInfo.Name). +- WithField("version", osInfo.Version). +- WithField("build", osInfo.Build). +- Info("Operating system info") +- } ++ // host, err := sysinfo.Host() ++ // if err != nil { ++ // logrus.WithError(err).Error("Could not retrieve operating system info") ++ // } else { ++ // osInfo := host.Info().OS ++ // logrus. ++ // WithField("name", osInfo.Name). ++ // WithField("version", osInfo.Version). ++ // WithField("build", osInfo.Build). ++ // Info("Operating system info") ++ // } + + return fn(closer) + } diff --git a/mail/protonmail-bridge/files/patch-internal_certs_cert__store__freebsd.go b/mail/protonmail-bridge/files/patch-internal_certs_cert__store__freebsd.go new file mode 100644 index 000000000000..eec4b07134b3 --- /dev/null +++ b/mail/protonmail-bridge/files/patch-internal_certs_cert__store__freebsd.go @@ -0,0 +1,37 @@ +--- internal/certs/cert_store_freebsd.go.orig 2026-07-26 08:25:11 UTC ++++ internal/certs/cert_store_freebsd.go +@@ -0,0 +1,34 @@ ++// Copyright (c) 2026 Proton AG ++// ++// This file is part of Proton Mail Bridge. ++// ++// Proton Mail Bridge is free software: you can redistribute it and/or modify ++// it under the terms of the GNU General Public License as published by ++// the Free Software Foundation, either version 3 of the License, or ++// (at your option) any later version. ++// ++// Proton Mail Bridge is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++// ++// You should have received a copy of the GNU General Public License ++// along with Proton Mail Bridge. If not, see . ++ ++package certs ++ ++func osSupportCertInstall() bool { ++ return false ++} ++ ++func installCert([]byte) error { ++ return nil // Linux doesn't have a root cert store. ++} ++ ++func uninstallCert([]byte) error { ++ return nil // Linux doesn't have a root cert store. ++} ++ ++func isCertInstalled([]byte) bool { ++ return false ++} diff --git a/mail/protonmail-bridge/files/patch-internal_fido_fido.go b/mail/protonmail-bridge/files/patch-internal_fido_fido.go new file mode 100644 index 000000000000..922c4e61d773 --- /dev/null +++ b/mail/protonmail-bridge/files/patch-internal_fido_fido.go @@ -0,0 +1,11 @@ +--- internal/fido/fido.go.orig 2026-07-26 08:31:48 UTC ++++ internal/fido/fido.go +@@ -15,7 +15,7 @@ + // You should have received a copy of the GNU General Public License + // along with Proton Mail Bridge. If not, see . + +-//go:build darwin || linux ++//go:build darwin || linux || freebsd + + package fido + diff --git a/mail/protonmail-bridge/files/patch-internal_updater_versioncompare_compare__freebsd.go b/mail/protonmail-bridge/files/patch-internal_updater_versioncompare_compare__freebsd.go new file mode 100644 index 000000000000..b25070b08003 --- /dev/null +++ b/mail/protonmail-bridge/files/patch-internal_updater_versioncompare_compare__freebsd.go @@ -0,0 +1,34 @@ +--- internal/updater/versioncompare/compare_freebsd.go.orig 2026-07-26 08:30:05 UTC ++++ internal/updater/versioncompare/compare_freebsd.go +@@ -0,0 +1,31 @@ ++// Copyright (c) 2026 Proton AG ++// ++// This file is part of Proton Mail Bridge. ++// ++// Proton Mail Bridge is free software: you can redistribute it and/or modify ++// it under the terms of the GNU General Public License as published by ++// the Free Software Foundation, either version 3 of the License, or ++// (at your option) any later version. ++// ++// Proton Mail Bridge is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++// ++// You should have received a copy of the GNU General Public License ++// along with Proton Mail Bridge. If not, see . ++ ++//go:build freebsd ++ ++package versioncompare ++ ++import ( ++ "github.com/elastic/go-sysinfo/types" ++ "github.com/sirupsen/logrus" ++) ++ ++// IsHostVersionEligible - Checks whether host OS version is eligible for update. Defaults to true on Linux. ++func (sysVer SystemVersion) IsHostVersionEligible(log *logrus.Entry, _ types.Host, _ func(host types.Host) string) (bool, error) { ++ log.Info("Checking host OS version on FreeBSD. Defaulting to false.") ++ return false, nil ++} diff --git a/mail/protonmail-bridge/files/patch-internal_vault_types__settings.go b/mail/protonmail-bridge/files/patch-internal_vault_types__settings.go new file mode 100644 index 000000000000..6b6d30874bf8 --- /dev/null +++ b/mail/protonmail-bridge/files/patch-internal_vault_types__settings.go @@ -0,0 +1,11 @@ +--- internal/vault/types_settings.go.orig 2026-07-26 09:46:27 UTC ++++ internal/vault/types_settings.go +@@ -91,7 +91,7 @@ func newDefaultSettings(gluonDir string) Settings { + ProxyAllowed: false, + ShowAllMail: true, + Autostart: true, +- AutoUpdate: true, ++ AutoUpdate: false, + TelemetryDisabled: false, + + LastVersion: "0.0.0", diff --git a/mail/protonmail-bridge/files/patch-internal_versioner_remove__freebsd.go b/mail/protonmail-bridge/files/patch-internal_versioner_remove__freebsd.go new file mode 100644 index 000000000000..a21632178fcc --- /dev/null +++ b/mail/protonmail-bridge/files/patch-internal_versioner_remove__freebsd.go @@ -0,0 +1,54 @@ +--- internal/versioner/remove_freebsd.go.orig 2026-07-26 08:20:51 UTC ++++ internal/versioner/remove_freebsd.go +@@ -0,0 +1,51 @@ ++// Copyright (c) 2026 Proton AG ++// ++// This file is part of Proton Mail Bridge. ++// ++// Proton Mail Bridge is free software: you can redistribute it and/or modify ++// it under the terms of the GNU General Public License as published by ++// the Free Software Foundation, either version 3 of the License, or ++// (at your option) any later version. ++// ++// Proton Mail Bridge is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++// ++// You should have received a copy of the GNU General Public License ++// along with Proton Mail Bridge. If not, see . ++ ++//go:build freebsd ++ ++package versioner ++ ++import ( ++ "os" ++ "path/filepath" ++ "strings" ++) ++ ++func (v *Versioner) RemoveCurrentVersion() error { ++ // get current executable ++ exec, err := os.Executable() ++ if err != nil { ++ return err ++ } ++ ++ // Check that current executtable is update package so we won't ++ // delete base version (that is controlled by package manager). ++ // Get absolute paths to ensure there is no crazy stuff there. ++ absExec, err := filepath.Abs(exec) ++ if err != nil { ++ return err ++ } ++ absRoot, err := filepath.Abs(v.root) ++ if err != nil { ++ return err ++ } ++ if !strings.HasPrefix(absExec, absRoot) { ++ return ErrNoRemoveBase ++ } ++ ++ return os.RemoveAll(filepath.Dir(absExec)) ++} diff --git a/mail/protonmail-bridge/files/patch-pkg_keychain_helper__dbus__freebsd.go b/mail/protonmail-bridge/files/patch-pkg_keychain_helper__dbus__freebsd.go new file mode 100644 index 000000000000..f0ea042ec90f --- /dev/null +++ b/mail/protonmail-bridge/files/patch-pkg_keychain_helper__dbus__freebsd.go @@ -0,0 +1,233 @@ +--- pkg/keychain/helper_dbus_freebsd.go.orig 2026-07-26 08:26:30 UTC ++++ pkg/keychain/helper_dbus_freebsd.go +@@ -0,0 +1,230 @@ ++// Copyright (c) 2026 Proton AG ++// ++// This file is part of Proton Mail Bridge. ++// ++// Proton Mail Bridge is free software: you can redistribute it and/or modify ++// it under the terms of the GNU General Public License as published by ++// the Free Software Foundation, either version 3 of the License, or ++// (at your option) any later version. ++// ++// Proton Mail Bridge is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++// ++// You should have received a copy of the GNU General Public License ++// along with Proton Mail Bridge. If not, see . ++ ++package keychain ++ ++import ( ++ "strings" ++ ++ "github.com/ProtonMail/proton-bridge/v3/internal/constants" ++ "github.com/ProtonMail/proton-bridge/v3/pkg/utils" ++ "github.com/docker/docker-credential-helpers/credentials" ++ "github.com/godbus/dbus" ++ "github.com/keybase/go-keychain/secretservice" ++) ++ ++const ( ++ serverAtt = "server" ++ labelAtt = "label" ++ usernameAtt = "username" ++ ++ defaultLabel = "Proton Mail Bridge Credentials" ++) ++ ++func getDomain() string { ++ return hostURL(constants.KeyChainName) ++} ++ ++func getSession() (*secretservice.SecretService, *secretservice.Session, error) { ++ service, err := secretservice.NewService() ++ if err != nil { ++ return nil, nil, err ++ } ++ ++ session, err := service.OpenSession(secretservice.AuthenticationDHAES) ++ if err != nil { ++ return nil, nil, err ++ } ++ ++ return service, session, nil ++} ++ ++func handleTimeout(f func() error) error { ++ err := f() ++ if err == secretservice.ErrPromptTimedOut { ++ return f() ++ } ++ return err ++} ++ ++func getItems(service *secretservice.SecretService, attributes map[string]string) ([]dbus.ObjectPath, error) { ++ if err := unlock(service); err != nil { ++ return nil, err ++ } ++ ++ var items []dbus.ObjectPath ++ err := handleTimeout(func() error { ++ var err error ++ items, err = service.SearchCollection( ++ secretservice.DefaultCollection, ++ attributes, ++ ) ++ return err ++ }) ++ if err != nil { ++ return nil, err ++ } ++ return utils.Filter(items, func(t dbus.ObjectPath) bool { ++ return strings.HasPrefix(string(t), "/org/freedesktop/secrets") ++ }), err ++} ++ ++func unlock(service *secretservice.SecretService) error { ++ return handleTimeout(func() error { ++ return service.Unlock([]dbus.ObjectPath{secretservice.DefaultCollection}) ++ }) ++} ++ ++// SecretServiceDBusHelper is wrapper around keybase/go-keychain/secretservice ++// library. ++type SecretServiceDBusHelper struct{} ++ ++// Add appends credentials to the store. ++func (s *SecretServiceDBusHelper) Add(creds *credentials.Credentials) error { ++ service, session, err := getSession() ++ if err != nil { ++ return err ++ } ++ defer service.CloseSession(session) ++ ++ if err := unlock(service); err != nil { ++ return err ++ } ++ ++ secret, err := session.NewSecret([]byte(creds.Secret)) ++ if err != nil { ++ return err ++ } ++ ++ attributes := map[string]string{ ++ usernameAtt: creds.Username, ++ serverAtt: creds.ServerURL, ++ labelAtt: defaultLabel, ++ } ++ ++ return handleTimeout(func() error { ++ _, err = service.CreateItem( ++ secretservice.DefaultCollection, ++ secretservice.NewSecretProperties(creds.ServerURL, attributes), ++ secret, ++ secretservice.ReplaceBehaviorReplace, ++ ) ++ ++ return err ++ }) ++} ++ ++// Delete removes credentials from the store. ++func (s *SecretServiceDBusHelper) Delete(serverURL string) error { ++ service, session, err := getSession() ++ if err != nil { ++ return err ++ } ++ defer service.CloseSession(session) ++ ++ items, err := getItems(service, map[string]string{ ++ labelAtt: defaultLabel, ++ serverAtt: serverURL, ++ }) ++ ++ if len(items) == 0 || err != nil { ++ return err ++ } ++ ++ return handleTimeout(func() error { ++ return service.DeleteItem(items[0]) ++ }) ++} ++ ++// Get retrieves credentials from the store. ++// It returns username and secret as strings. ++func (s *SecretServiceDBusHelper) Get(serverURL string) (string, string, error) { ++ service, session, err := getSession() ++ if err != nil { ++ return "", "", err ++ } ++ defer service.CloseSession(session) ++ ++ if err := unlock(service); err != nil { ++ return "", "", err ++ } ++ ++ items, err := getItems(service, map[string]string{ ++ labelAtt: defaultLabel, ++ serverAtt: serverURL, ++ }) ++ ++ if err != nil { ++ return "", "", err ++ } ++ ++ if len(items) == 0 { ++ return "", "", ErrKeychainNoItem ++ } ++ ++ item := items[0] ++ ++ attributes, err := service.GetAttributes(item) ++ if err != nil { ++ return "", "", err ++ } ++ ++ var secretPlaintext []byte ++ err = handleTimeout(func() error { ++ var err error ++ secretPlaintext, err = service.GetSecret(item, *session) ++ return err ++ }) ++ if err != nil { ++ return "", "", err ++ } ++ ++ return attributes[usernameAtt], string(secretPlaintext), nil ++} ++ ++// List returns the stored serverURLs and their associated usernames. ++func (s *SecretServiceDBusHelper) List() (map[string]string, error) { ++ userIDByURL := make(map[string]string) ++ ++ service, session, err := getSession() ++ if err != nil { ++ return nil, err ++ } ++ defer service.CloseSession(session) ++ ++ items, err := getItems(service, map[string]string{labelAtt: defaultLabel}) ++ if err != nil { ++ return nil, err ++ } ++ ++ defaultDomain := getDomain() ++ ++ for _, it := range items { ++ attributes, err := service.GetAttributes(it) ++ if err != nil { ++ return nil, err ++ } ++ ++ if !strings.HasPrefix(attributes[serverAtt], defaultDomain) { ++ continue ++ } ++ ++ userIDByURL[attributes[serverAtt]] = attributes[usernameAtt] ++ } ++ ++ return userIDByURL, nil ++} diff --git a/mail/protonmail-bridge/files/patch-pkg_keychain_helper__freebsd.go b/mail/protonmail-bridge/files/patch-pkg_keychain_helper__freebsd.go new file mode 100644 index 000000000000..5dd082081b6f --- /dev/null +++ b/mail/protonmail-bridge/files/patch-pkg_keychain_helper__freebsd.go @@ -0,0 +1,83 @@ +--- pkg/keychain/helper_freebsd.go.orig 2026-07-26 08:22:36 UTC ++++ pkg/keychain/helper_freebsd.go +@@ -0,0 +1,80 @@ ++// Copyright (c) 2026 Proton AG ++// ++// This file is part of Proton Mail Bridge. ++// ++// Proton Mail Bridge is free software: you can redistribute it and/or modify ++// it under the terms of the GNU General Public License as published by ++// the Free Software Foundation, either version 3 of the License, or ++// (at your option) any later version. ++// ++// Proton Mail Bridge is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++// ++// You should have received a copy of the GNU General Public License ++// along with Proton Mail Bridge. If not, see . ++ ++package keychain ++ ++import ( ++ "github.com/docker/docker-credential-helpers/credentials" ++ "github.com/docker/docker-credential-helpers/pass" ++ "github.com/docker/docker-credential-helpers/secretservice" ++ "github.com/sirupsen/logrus" ++ "golang.org/x/sys/execabs" ++) ++ ++const ( ++ Pass = "pass-app" ++ SecretService = "secret-service" ++ SecretServiceDBus = "secret-service-dbus" ++) ++ ++func listHelpers() (Helpers, string) { ++ helpers := make(Helpers) ++ ++ if isUsable(newDBusHelper("")) { ++ helpers[SecretServiceDBus] = newDBusHelper ++ logrus.WithField("keychain", "SecretServiceDBus").Info("Keychain is usable.") ++ } else { ++ logrus.WithField("keychain", "SecretServiceDBus").Debug("Keychain is not available.") ++ } ++ ++ if _, err := execabs.LookPath("gnome-keyring"); err == nil && isUsable(newSecretServiceHelper("")) { ++ helpers[SecretService] = newSecretServiceHelper ++ logrus.WithField("keychain", "SecretService").Info("Keychain is usable.") ++ } else { ++ logrus.WithField("keychain", "SecretService").Debug("Keychain is not available.") ++ } ++ ++ if _, err := execabs.LookPath("pass"); err == nil && isUsable(newPassHelper("")) { ++ helpers[Pass] = newPassHelper ++ logrus.WithField("keychain", "Pass").Info("Keychain is usable.") ++ } else { ++ logrus.WithField("keychain", "Pass").Debug("Keychain is not available.") ++ } ++ ++ defaultHelper := SecretServiceDBus ++ ++ // If Pass is available, use it by default. ++ // Otherwise, if SecretService is available, use it by default. ++ if _, ok := helpers[Pass]; ok { ++ defaultHelper = Pass ++ } else if _, ok := helpers[SecretService]; ok { ++ defaultHelper = SecretService ++ } ++ return helpers, defaultHelper ++} ++ ++func newDBusHelper(string) (credentials.Helper, error) { ++ return &SecretServiceDBusHelper{}, nil ++} ++ ++func newPassHelper(string) (credentials.Helper, error) { ++ return &pass.Pass{}, nil ++} ++ ++func newSecretServiceHelper(string) (credentials.Helper, error) { ++ return &secretservice.Secretservice{}, nil ++} diff --git a/mail/protonmail-bridge/files/patch-vendor_github.com_docker_docker-credential-helpers_secretservice_secretservice.go b/mail/protonmail-bridge/files/patch-vendor_github.com_docker_docker-credential-helpers_secretservice_secretservice.go new file mode 100644 index 000000000000..ed6e396d5d44 --- /dev/null +++ b/mail/protonmail-bridge/files/patch-vendor_github.com_docker_docker-credential-helpers_secretservice_secretservice.go @@ -0,0 +1,8 @@ +--- vendor/github.com/docker/docker-credential-helpers/secretservice/secretservice.go.orig 2026-07-26 08:24:06 UTC ++++ vendor/github.com/docker/docker-credential-helpers/secretservice/secretservice.go +@@ -1,4 +1,4 @@ +-//go:build linux && cgo ++//go:build linux || freebsd && cgo + + package secretservice + diff --git a/mail/protonmail-bridge/files/patch-vendor_github.com_keys-pub_go-libfido2_fido2.go b/mail/protonmail-bridge/files/patch-vendor_github.com_keys-pub_go-libfido2_fido2.go new file mode 100644 index 000000000000..1b1861d4b06c --- /dev/null +++ b/mail/protonmail-bridge/files/patch-vendor_github.com_keys-pub_go-libfido2_fido2.go @@ -0,0 +1,26 @@ +--- vendor/github.com/keys-pub/go-libfido2/fido2.go.orig 2026-08-23 12:31:13 UTC ++++ vendor/github.com/keys-pub/go-libfido2/fido2.go +@@ -1094,7 +1094,10 @@ func goStrings(argc C.int, argv **C.char) []string { + + func goStrings(argc C.int, argv **C.char) []string { + length := int(argc) +- tmpslice := (*[1 << 30]*C.char)(unsafe.Pointer(argv))[:length:length] ++ if length <= 0 || argv == nil { ++ return nil ++ } ++ tmpslice := unsafe.Slice(argv, length) + gostrings := make([]string, length) + for i, s := range tmpslice { + gostrings[i] = C.GoString(s) +@@ -1104,7 +1107,10 @@ func goBools(argc C.int, argv *C.bool) []bool { + + func goBools(argc C.int, argv *C.bool) []bool { + length := int(argc) +- tmpslice := (*[1 << 30]C.bool)(unsafe.Pointer(argv))[:length:length] ++ if length <= 0 || argv == nil { ++ return nil ++ } ++ tmpslice := unsafe.Slice(argv, length) + gobools := make([]bool, length) + for i, s := range tmpslice { + gobools[i] = bool(s) diff --git a/mail/protonmail-bridge/files/patch-vendor_modules.txt b/mail/protonmail-bridge/files/patch-vendor_modules.txt new file mode 100644 index 000000000000..41d1b6b65c57 --- /dev/null +++ b/mail/protonmail-bridge/files/patch-vendor_modules.txt @@ -0,0 +1,11 @@ +--- vendor/modules.txt.orig 2026-08-23 12:45:39 UTC ++++ vendor/modules.txt +@@ -504,7 +504,7 @@ github.com/keybase/go-keychain/secretservice + github.com/keybase/go-keychain + github.com/keybase/go-keychain/secretservice + # github.com/keys-pub/go-libfido2 v1.5.4-0.20250104233141-2534349bd685 => github.com/ProtonMail/go-libfido2 v0.0.0-20250916110427-df894d6d07a1 +-## explicit; go 1.13 ++## explicit; go 1.17 + github.com/keys-pub/go-libfido2 + # github.com/klauspost/cpuid/v2 v2.3.0 + ## explicit; go 1.22 diff --git a/mail/protonmail-bridge/pkg-descr b/mail/protonmail-bridge/pkg-descr new file mode 100644 index 000000000000..fbf432456138 --- /dev/null +++ b/mail/protonmail-bridge/pkg-descr @@ -0,0 +1,8 @@ +Use Proton Mail with your desktop email client. + +Proton Mail Bridge adds end-to-end encryption to popular email apps, +including Outlook, Thunderbird, and Apple Mail. Secure email made +easy. + +NOTE: Proton Mail Bridge is available only with a paid plan that +includes Proton Mail.