/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * Authors: Jeffrey Stedfast * * Copyright 2001 Ximian, Inc. (www.ximian.com) * * This program 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 2 of the License, or * (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. * */ #ifdef HAVE_CONFIG_H #include #endif #ifdef HAVE_NSS #include #include #include #include #include #include #include #include #include #include #include "nss.h" /* Don't use <> here or it will include the system nss.h instead */ #include #include "camel-tcp-stream-ssl.h" #include "camel-session.h" static CamelTcpStreamClass *parent_class = NULL; /* Returns the class for a CamelTcpStreamSSL */ #define CTSS_CLASS(so) CAMEL_TCP_STREAM_SSL_CLASS (CAMEL_OBJECT_GET_CLASS (so)) static ssize_t stream_read (CamelStream *stream, char *buffer, size_t n); static ssize_t stream_write (CamelStream *stream, const char *buffer, size_t n); static int stream_flush (CamelStream *stream); static int stream_close (CamelStream *stream); static int stream_connect (CamelTcpStream *stream, struct hostent *host, int port); static int stream_getsockopt (CamelTcpStream *stream, CamelSockOptData *data); static int stream_setsockopt (CamelTcpStream *stream, const CamelSockOptData *data); static gpointer stream_get_socket (CamelTcpStream *stream); struct _CamelTcpStreamSSLPrivate { PRFileDesc *sockfd; CamelService *service; char *expected_host; }; static void camel_tcp_stream_ssl_class_init (CamelTcpStreamSSLClass *camel_tcp_stream_ssl_class) { CamelTcpStreamClass *camel_tcp_stream_class = CAMEL_TCP_STREAM_CLASS (camel_tcp_stream_ssl_class); CamelStreamClass *camel_stream_class = CAMEL_STREAM_CLASS (camel_tcp_stream_ssl_class); parent_class = CAMEL_TCP_STREAM_CLASS (camel_type_get_global_classfuncs (camel_tcp_stream_get_type ())); /* virtual method overload */ camel_stream_class->read = stream_read; camel_stream_class->write = stream_write; camel_stream_class->flush = stream_flush; camel_stream_class->close = stream_close; camel_tcp_stream_class->connect = stream_connect; camel_tcp_stream_class->getsockopt = stream_getsockopt; camel_tcp_stream_class->setsockopt = stream_setsockopt; camel_tcp_stream_class->get_socket = stream_get_socket; } static void camel_tcp_stream_ssl_init (gpointer object, gpointer klass) { CamelTcpStreamSSL *stream = CAMEL_TCP_STREAM_SSL (object); stream->priv = g_new0 (struct _CamelTcpStreamSSLPrivate, 1); } static void camel_tcp_stream_ssl_finalize (CamelObject *object) { CamelTcpStreamSSL *stream = CAMEL_TCP_STREAM_SSL (object); if (stream->priv->sockfd != NULL) PR_Close (stream->priv->sockfd); g_free (stream->priv->expected_host); g_free (stream->priv); } CamelType camel_tcp_stream_ssl_get_type (void) { static CamelType type = CAMEL_INVALID_TYPE; if (type == CAMEL_INVALID_TYPE) { type = camel_type_register (camel_tcp_stream_get_type (), "CamelTcpStreamSSL", sizeof (CamelTcpStreamSSL), sizeof (CamelTcpStreamSSLClass), (CamelObjectClassInitFunc) camel_tcp_stream_ssl_class_init, NULL, (CamelObjectInitFunc) camel_tcp_stream_ssl_init, (CamelObjectFinalizeFunc) camel_tcp_stream_ssl_finalize); } return type; } /** * camel_tcp_stream_ssl_new: * @service: camel service * @expected_host: host that the stream is expected to connect with. * * Since the SSL certificate authenticator may need to prompt the * user, a CamelService is needed. @expected_host is needed as a * protection against an MITM attack. * * Return value: a tcp stream **/ CamelStream * camel_tcp_stream_ssl_new (CamelService *service, const char *expected_host) { CamelTcpStreamSSL *stream; stream = CAMEL_TCP_STREAM_SSL (camel_object_new (camel_tcp_stream_ssl_get_type ())); stream->priv->service = service; stream->priv->expected_host = g_strdup (expected_host); return CAMEL_STREAM (stream); } static void set_errno (int code) { /* FIXME: this should handle more. */ switch (code) { case PR_IO_TIMEOUT_ERROR: errno = EAGAIN; break; case PR_IO_ERROR: errno = EIO; break; default: /* what to set by default?? */ errno = EINTR; } } static ssize_t stream_read (CamelStream *stream, char *buffer, size_t n) { CamelTcpStreamSSL *tcp_stream_ssl = CAMEL_TCP_STREAM_SSL (stream); ssize_t nread; do { nread = PR_Read (tcp_stream_ssl->priv->sockfd, buffer, n); } while (nread == -1 && PR_GetError () == PR_PENDING_INTERRUPT_ERROR); if (nread == -1) set_errno (PR_GetError ()); return nread; } static ssize_t stream_write (CamelStream *stream, const char *buffer, size_t n) { CamelTcpStreamSSL *tcp_stream_ssl = CAMEL_TCP_STREAM_SSL (stream); ssize_t written = 0; do { written = PR_Write (tcp_stream_ssl->priv->sockfd, buffer, n); } while (written == -1 && PR_GetError () == PR_PENDING_INTERRUPT_ERROR); if (written == -1) set_errno (PR_GetError ()); return written; } static int stream_flush (CamelStream *stream) { return PR_Sync (((CamelTcpStreamSSL *)stream)->priv->sockfd); } static int stream_close (CamelStream *stream) { if (PR_Close (((CamelTcpStreamSSL *)stream)->priv->sockfd) == PR_FAILURE) return -1; ((CamelTcpStreamSSL *)stream)->priv->sockfd = NULL; return 0; } #if 0 /* Since this is default implementation, let NSS handle it. */ static SECStatus ssl_get_client_auth (void *data, PRFileDesc *sockfd, struct CERTDistNamesStr *caNames, struct CERTCertificateStr **pRetCert, struct SECKEYPrivateKeyStr **pRetKey) { SECStatus status = SECFailure; SECKEYPrivateKey *privkey; CERTCertificate *cert; void *proto_win; proto_win = SSL_RevealPinArg (sockfd); if ((char *)data) { cert = PK11_FindCertFromNickname ((char *)data, proto_win); if (cert) { privKey = PK11_FindKeyByAnyCert (cert, proto_win); if (privkey) { status = SECSuccess; } else { CERT_DestroyCertificate (cert); } } } else { /* no nickname given, automatically find the right cert */ CERTCertNicknames *names; int i; names = CERT_GetCertNicknames (CERT_GetDefaultCertDB (), SEC_CERT_NICKNAMES_USER, proto_win); if (names != NULL) { for (i = 0; i < names->numnicknames; i++) { cert = PK11_FindCertFromNickname (names->nicknames[i], proto_win); if (!cert) continue; /* Only check unexpired certs */ if (CERT_CheckCertValidTimes (cert, PR_Now (), PR_FALSE) != secCertTimeValid) { CERT_DestroyCertificate (cert); continue; } status = NSS_CmpCertChainWCANames (cert, caNames); if (status == SECSuccess) { privkey = PK11_FindKeyByAnyCert (cert, proto_win); if (privkey) break; status = SECFailure; break; } CERT_FreeNicknames (names); } } } if (status == SECSuccess) { *pRetCert = cert; *pRetKey = privkey; } return status; } #endif #if 0 /* Since this is the default NSS implementation, no need for us to use this. */ static SECStatus ssl_auth_cert (void *data, PRFileDesc *sockfd, PRBool checksig, PRBool is_server) { CERTCertificate *cert; SECStatus status; void *pinarg; char *host; cert = SSL_PeerCertificate (sockfd); pinarg = SSL_RevealPinArg (sockfd); status = CERT_VerifyCertNow ((CERTCertDBHandle *)data, cert, checksig, certUsageSSLClient, pinarg); if (status != SECSuccess) return SECFailure; /* Certificate is OK. Since this is the client side of an SSL * connection, we need to verify that the name field in the cert * matches the desired hostname. This is our defense against * man-in-the-middle attacks. */ /* SSL_RevealURL returns a hostname, not a URL. */ host = SSL_RevealURL (sockfd); if (host && *host) { status = CERT_VerifyCertName (cert, host); } else { PR_SetError (SSL_ERROR_BAD_CERT_DOMAIN, 0); status = SECFailure; } if (host) PR_Free (hostName); return secStatus; } #endif static SECStatus ssl_bad_cert (void *data, PRFileDesc *sockfd) { CERTCertificate *cert; CamelService *service; char *prompt, *cert_str; gboolean accept; g_return_val_if_fail (data != NULL, SECFailure); g_return_val_if_fail (CAMEL_IS_SERVICE (data), SECFailure); service = CAMEL_SERVICE (data); cert = SSL_PeerCertificate (sockfd); cert_str = g_strdup_printf (_("EMail: %s\n" "Common Name: %s\n" "Organization Unit: %s\n" "Organization: %s\n" "Locality: %s\n" "State: %s\n" "Country: %s"), cert->emailAddr ? cert->emailAddr : "", CERT_GetCommonName (&cert->issuer) ? CERT_GetCommonName (&cert->issuer) : "", CERT_GetOrgUnitName (&cert->issuer) ? CERT_GetOrgUnitName (&cert->issuer) : "", CERT_GetOrgName (&cert->issuer) ? CERT_GetOrgName (&cert->issuer) : "", CERT_GetLocalityName (&cert->issuer) ? CERT_GetLocalityName (&cert->issuer) : "", CERT_GetStateName (&cert->issuer) ? CERT_GetStateName (&cert->issuer) : "", CERT_GetCountryName (&cert->issuer) ? CERT_GetCountryName (&cert->issuer) : ""); /* construct our user prompt */ prompt = g_strdup_printf (_("Bad certificate from %s:\n\n%s\n\nDo you wish to accept anyway?"), service->url->host, cert_str); g_free (cert_str); /* query the user to find out if we want to accept this certificate */ accept = camel_session_alert_user (service->session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE); g_free (prompt); if (accept) return SECSuccess; return SECFailure; } static int stream_connect (CamelTcpStream *stream, struct hostent *host, int port) { CamelTcpStreamSSL *ssl = CAMEL_TCP_STREAM_SSL (stream); PRIntervalTime timeout = PR_INTERVAL_MIN; PRNetAddr netaddr; PRFileDesc *fd, *ssl_fd; g_return_val_if_fail (host != NULL, -1); memset ((void *) &netaddr, 0, sizeof (PRNetAddr)); memcpy (&netaddr.inet.ip, host->h_addr, sizeof (netaddr.inet.ip)); if (PR_InitializeNetAddr (PR_IpAddrNull, port, &netaddr) == PR_FAILURE) return -1; fd = PR_OpenTCPSocket (host->h_addrtype); ssl_fd = SSL_ImportFD (NULL, fd); SSL_OptionSet (ssl_fd, SSL_SECURITY, PR_TRUE); SSL_SetURL (ssl_fd, ssl->priv->expected_host); if (ssl_fd == NULL || PR_Connect (ssl_fd, &netaddr, timeout) == PR_FAILURE) { if (ssl_fd != NULL) PR_Close (ssl_fd); return -1; } /*SSL_GetClientAuthDataHook (sslSocket, ssl_get_client_auth, (void *)certNickname);*/ /*SSL_AuthCertificateHook (ssl_fd, ssl_auth_cert, (void *) CERT_GetDefaultCertDB ());*/ SSL_BadCertHook (ssl_fd, ssl_bad_cert, ssl->priv->service); ssl->priv->sockfd = ssl_fd; return 0; } static int stream_getsockopt (CamelTcpStream *stream, CamelSockOptData *data) { PRSocketOptionData sodata; memset ((void *) &sodata, 0, sizeof (sodata)); memcpy ((void *) &sodata, (void *) data, sizeof (CamelSockOptData)); if (PR_GetSocketOption (((CamelTcpStreamSSL *)stream)->priv->sockfd, &sodata) == PR_FAILURE) return -1; memcpy ((void *) data, (void *) &sodata, sizeof (CamelSockOptData)); return 0; } static int stream_setsockopt (CamelTcpStream *stream, const CamelSockOptData *data) { PRSocketOptionData sodata; memset ((void *) &sodata, 0, sizeof (sodata)); memcpy ((void *) &sodata, (void *) data, sizeof (CamelSockOptData)); if (PR_SetSocketOption (((CamelTcpStreamSSL *)stream)->priv->sockfd, &sodata) == PR_FAILURE) return -1; return 0; } static gpointer stream_get_socket (CamelTcpStream *stream) { return (gpointer) CAMEL_TCP_STREAM_SSL (stream)->priv->sockfd; } #endif /* HAVE_NSS */ 018-01-122-3/+1 * deskutils/noti: update to 3.0.0swills2018-01-112-5/+6 * deskutils/superkaramba, fix with clang6tcberner2018-01-081-1/+2 * - Sort SUBDIRssunpoet2018-01-071-1/+1 * desekutils/libstreamanalyzer fix with clang6tcberner2018-01-071-1/+2 * - Update calibre to 3.15.0madpilot2018-01-066-29/+40 * New USES=eigentcberner2018-01-031-3/+1 * Fix up Makefiles for ports that used to fetch from www.sourcefiles.org.linimon2018-01-021-1/+4 * - Update to 17.1.20171218danilo2018-01-022-6/+7 * Simplify some USES=pythonantoine2017-12-291-1/+1 * deskutils/etask: Remove; unsupported by upstream since 2007jrm2017-12-285-84/+0 * Update CMake to 3.10.1adridg2017-12-231-0/+13 * New port: deskutils/showdown: Simple markdown viewer, written in Vala and GTK 3yuri2017-12-234-0/+55 * - Update lumina-textedit to 1.4.1.araujo2017-12-223-10/+11 * - Update lumina-textedit to 1.4.1.araujo2017-12-224-10/+25 * - Update to 1.4.1.araujo2017-12-224-12/+13 * - Update to 1.4.1.araujo2017-12-223-10/+11 * - Update to 1.4.1.araujo2017-12-223-10/+14 * - Update to 1.4.1.araujo2017-12-222-10/+9 * - Update to 1.4.1.araujo2017-12-223-16/+10 * - Update lumina-textedit to 1.4.1.araujo2017-12-223-10/+11 * Add lumina-pdf version 1.4.1.araujo2017-12-225-0/+113 * - Add LICENSE_FILEamdmi32017-12-182-25/+13 * Wrap overly long lines so they fit under 80-character terminal width.danfe2017-12-161-3/+6 * Update calibre to 3.14.0madpilot2017-12-163-5/+5 * Wrap an overly long line.danfe2017-12-151-2/+3 * deskutils/osmo: update to 0.4.2swills2017-12-152-7/+9 * Mark CONFLICTS_INSTALL with deskutils/deforaos-todosunpoet2017-12-141-1/+1 * Mark CONFLICTS_INSTALL with deskutils/todo and devel/devtodosunpoet2017-12-141-0/+2 * - Those ports fail to build with python3antoine2017-12-142-3/+4 * Update to 0.4.1ehaupt2017-12-132-4/+4 * - Mark BROKEN, no public distfilesamdmi32017-12-121-0/+2 * - Those ports fail to build with python3antoine2017-12-112-3/+3 * Update owncloudclient to 2.3.4madpilot2017-12-102-4/+4 * - Update to version 2.0.2, now python3 basedpawel2017-12-093-151/+166 * Mark BROKENantoine2017-12-051-0/+2 * Chase py-vdirsyncer switch to python3antoine2017-12-051-1/+1 * - Update to 0.16.3amdmi32017-12-052-8/+11 * cycle fails to run with python3antoine2017-12-051-1/+1 * Fix configure options for gnustep-maketheraven2017-12-0313-11/+13 * - Add explicit FLAVOR to a few dependenciesantoine2017-12-031-4/+4 * Explicitely pass ipython FLAVOR in a few portsantoine2017-12-021-1/+1 * Update deskutils/calibre to 3.13.0madpilot2017-12-022-4/+4 * Fix patch comment.adridg2017-12-021-1/+1 * Cleanup LIB_DEPENDS on libpngantoine2017-12-011-1/+1 * Convert Python ports to FLAVORS.mat2017-11-3029-149/+149 * - Add LICENSE_FILEamdmi32017-11-302-7/+7 * - Fix LICENSEamdmi32017-11-281-42/+22 * - Add LICENSEamdmi32017-11-282-2/+5 * Don't use MASTER_SITE_SUBDIR when it is not needed.mat2017-11-251-2/+1 * deskutils/recoll: update 1.23.3 -> 1.23.4pi2017-11-182-4/+4 * Add latte-dock, an alternative launcher / taskbar from the KDE community.adridg2017-11-185-0/+251 * - Update WWWamdmi32017-11-131-1/+1 * Update deskutils/calibre to 3.12.0madpilot2017-11-102-5/+4 * devel/icu: update to 60.1jbeich2017-11-096-5/+6 * Update deskutils/fet to 5.34.0tcberner2017-11-062-4/+4 * deskutils/hebcal: update to 4.13cpm2017-11-053-11/+14 * Update deskutils/calibre to 3.11.1madpilot2017-11-032-4/+4 * Fix whitespace issues (mixed tab/spaces, alignment) in a few ports.olgeni2017-11-039-54/+54 * Update deskutils/calibre to 3.11.0madpilot2017-11-032-4/+4 * New port: deskutils/gpicker: Program allowing to quickly pick a file in a lar...yuri2017-11-024-0/+34 * deskutils/recoll: update 1.21.6 -> 1.23.3pi2017-11-013-40/+40 * Fix whitespace issues (mixed tab/spaces, alignment) in a few ports.olgeni2017-10-312-5/+5 * Add shebangfix.tcberner2017-10-281-3/+4 * Update deskutils/calibre to 3.10.0madpilot2017-10-213-5/+6 * multimedia/ffmpeg: update to 3.4jbeich2017-10-211-1/+1 * Update to 0.4.0ehaupt2017-10-193-12/+22 * deskutils/treesheets: Update to 1.0.0swills2017-10-192-6/+5 * New port: deskutils/notitobik2017-10-184-0/+41 * deskutils/syncthing-gtk: update to 0.9.2.6swills2017-10-182-4/+4 * Update owncloudclient to 2.3.3madpilot2017-10-152-5/+4 * Add horde-content dependency to mnemo and turbamm2017-10-131-0/+2 * Remove WANT_GNOME and HAVE_GNOME.mat2017-10-121-1/+0 * Change PORTVERSION to 2.10.0 to match upstream versioningsunpoet2017-10-122-3/+4 * Update deskutils/calibre to 3.9.0madpilot2017-10-063-7/+4 * Bump PORTREVISION in ports depending on archivers/libzip.rakuco2017-09-281-1/+1 * Switch Charm Time Tracker to Qt5 and take maintainership.adridg2017-09-273-19/+56 * Update deskutils/calibre to 3.8.0madpilot2017-09-272-5/+4 * devel/boost-*: update to 1.65.1jbeich2017-09-257-7/+7 * devel/boost-*: enable C++11 featuresjbeich2017-09-257-7/+7 * devel/icu: update to 59.1jbeich2017-09-256-5/+6 * Update LICENSEsunpoet2017-09-251-2/+2 * deskutils/virt-manager: update to 1.4.3novel2017-09-242-4/+4 * Remove USES=execinfo.mat2017-09-221-1/+1 * Horde package update:mm2017-09-224-8/+8 * - Fix Lumina ports to use DISTVERSIONSUFFIX properly and not mis-interpret th...kmoore2017-09-209-9/+18 * Horde package update:mm2017-09-204-8/+8 * - Update x11/lumina to 1.3.0kmoore2017-09-1937-0/+900 * - Update deskutils/xfce4-xkb-plugin to 0.8.1madpilot2017-09-183-8/+15 * - Update deskutils/xfce4-tumbler to 0.2.0 [1]madpilot2017-09-186-16/+20 * deskutils/fet: Update to 5.33.1dbaio2017-09-182-4/+4 * Fix license information for portgs that use "the same license as Perl".mat2017-09-154-4/+4 * deskutils/go-for-it: unbreak build with vala 0.36cpm2017-09-132-5/+19 * Chase Emacs updateashish2017-09-122-1/+2 * Bump PORTREVISION for ports depending on the canonical version of GCCgerald2017-09-1118-15/+18 * Some typo fixes and whitespace cleanup for pkg-descr files.olgeni2017-09-111-2/+2 * deskutils/py-vobject: Update to 0.9.5dbaio2017-09-093-7/+17 * deskutils/virt-manager: update to 1.4.2novel2017-09-032-4/+4 * Change from USES=twisted to devel/py-twistedsunpoet2017-08-291-2/+4 * Update deskutils/cslibre to 3.7.0madpilot2017-08-263-5/+6 * Add missed PORTREVISION bumps after recent poppler updateswills2017-08-241-0/+1 * Bump PORTREVISION after recent poppler updateswills2017-08-241-1/+1 * Update to 0.82matthew2017-08-232-4/+4 * - Add LICENSEamdmi32017-08-211-4/+5 * Update GNUstep core libraries.theraven2017-08-2122-51/+107 * deskutils/anamnesis: Fix shebangswills2017-08-181-2/+3 * Update deskutils/horde-nag to 4.2.16mm2017-08-162-4/+4 * * Updated to 0.0.20170806ultima2017-08-152-5/+5 * deskutils/genius: Update to 1.0.23woodsb022017-08-143-78/+709 * deskutils/syncthing-gtk: Update to 0.9.2.5swills2017-08-134-18/+9 * - Update The Glorious Glasgow Haskell Compiler to version 8.0.2tcberner2017-08-094-0/+26 * - Update deskutils/calibre to 3.6.0madpilot2017-08-043-140/+143 * Update math/libqalculate to 1.0.0ajhale2017-08-031-1/+1 * Horde package update:mm2017-08-036-12/+12 * Update calibre WWW line in pkg-descr.madpilot2017-08-021-1/+1 * - Update deksutils/calibre to 3.5.0madpilot2017-08-014-49/+19 * Set MAKEINFO to the full path of makeinfo when USES=makeinfo is set.jkim2017-07-291-1/+1 * Update to 0.19sunpoet2017-07-282-7/+8 * - Update to 4.2.2culot2017-07-283-4/+8 * - update to 0.99.10jgh2017-07-262-3/+4 * - Update to 0.8.5nivit2017-07-255-42/+13 * - Update to 6.5.26wen2017-07-232-4/+4 * - Fix volume control for TPB by correcting typing error:eugen2017-07-222-3/+3 * deskutils/fet: Update to 5.32.0tobik2017-07-213-5/+5 * deskutils/virt-manager: update to 1.4.1novel2017-07-143-40/+4 * Update deskutils/calibre to 3.4.0madpilot2017-07-142-5/+4 * deskutils/zim: update to 0.67rm2017-07-132-4/+4 * Fix python_OLD_CMD usage.madpilot2017-07-111-2/+1 * * Updated to 0.0.20170625ultima2017-07-102-9/+16 * - Fix python shebangs [1]madpilot2017-07-092-8/+10 * deskutils/timewarrior: create portswills2017-07-085-0/+38 * deskutils/tasksh: create portswills2017-07-085-0/+28 * Update deskutils/calibre to 3.3.0madpilot2017-07-073-4/+6 * multiple ports: Update MAINTAINERbhughes2017-07-051-1/+1 * Update the mate desktop to 1.18.kwm2017-07-0413-94/+103 * * Updated maintainer emailultima2017-07-041-2/+2 * Remove expired port:rene2017-07-026-161/+0 * Update calibre to 3.2.1madpilot2017-06-303-8/+6 * Update devel/readline to 7.0 patch 3sunpoet2017-06-272-1/+2 * Make ninja opt-out in cmake.mktcberner2017-06-263-3/+3 * - Fix calibre rc script, which broke after the 3.0 updatemadpilot2017-06-263-23/+35 * Fix WWWsunpoet2017-06-261-1/+1 * Fix WWWsunpoet2017-06-261-1/+1 * Update deskutils/calibre to 3.1.0.madpilot2017-06-233-5/+5 * Don't depend unnecessarily on kdepim4. The dependency needed is kdelibs.tcberner2017-06-231-2/+2 * Update deskutils/calibre to 3.0.0.madpilot2017-06-198-218/+57 * Remove Perl core modulessunpoet2017-06-171-3/+4 * Update owncloudclient to 2.3.2madpilot2017-06-142-5/+4 * Chase evolution-data-server shared library bump.kwm2017-06-135-4/+5 * deskutils/zim: update to 0.67-rc2rm2017-06-123-23/+5 * Remove no-op WX_UNICODEsunpoet2017-06-101-1/+0 * Fix shebangsunpoet2017-06-092-9/+11 * Add a fixup-lib-pkgconfig target to move files in lib/pkgconfig intomat2017-06-071-2/+1 * Update gnome-clocks to 3.24.0.kwm2017-06-053-22/+66 * Update gnome-weather to 3.24.0.kwm2017-06-053-15/+20 * Update baobab to 3.24.0.kwm2017-06-053-8/+49 * Fix icons related crashestcberner2017-06-031-0/+3 * Now that textproc/UCD was updated by thierry@ with the required fileskwm2017-06-031-2/+2 * Fix ambiguity of qFuzzyCompare on armv6tcberner2017-06-032-1/+14 * Mark some ports failing on powerpc64. These ports are either newlinimon2017-06-021-0/+2 * * Fix the build with libgee 0.8.1.kwm2017-06-021-1/+5 * Update gnome-photos to 3.24.2.kwm2017-06-023-19/+58 * Make this build again in poudriere, add back some missing dependancies.kwm2017-06-011-2/+3 * Update gucharmap to 9.0.4.kwm2017-05-313-10/+16 * Unbreak build with newer libsigc++ and glibmmtobik2017-05-315-10/+70 * Update gnome-maps to 3.24.3.kwm2017-05-303-21/+42 * Update CONFLICTS_INSTALLsunpoet2017-05-291-1/+2 * Revision bump of all ports with USE_GL after consolidation of mesa-libsrezny2017-05-235-1/+5 * Mark some ports failing on power64. In cases where the error messagelinimon2017-05-221-0/+2 * svn copy grilo -> grilo2 and grilo-plugins -> grilo-plugins2kwm2017-05-201-2/+2 * Remove expired port:rene2017-05-206-76/+0 * Unbreak by adding patch to fix the build with newer evolution-data-server.kwm2017-05-172-3/+47 * Chase evolution-data-server shlib bumps.kwm2017-05-174-4/+4 * Fix buildromain2017-05-151-0/+1 * Update deskutils/calibre to 2.85.1madpilot2017-05-142-4/+4 * Update to 1.15.7romain2017-05-134-1099/+1160 * Update deskutils/calibre to 2.85.0madpilot2017-05-133-4/+5 * - Add LICENSEamdmi32017-05-123-11/+44 * - Update to GNU gcal 4.1johans2017-05-113-5/+9 * Mark BROKEN: fails to buildantoine2017-05-111-0/+2 * deskutils/zim: add forgotten dos2unix fixrm2017-05-091-1/+2 * deskutils/zim: update to 0.66rm2017-05-093-8/+23 * - Update to 16.1.20170415danilo2017-05-082-4/+4 * - Update to 2017.02.2miwi2017-05-063-3331/+6645 * Update deskutils/calibre to 2.84.0madpilot2017-05-063-18/+5 * Horde package update:mm2017-05-044-8/+8 * - Update devel/libical to version 2.0pawel2017-05-047-15/+6 * devel/boost-*: update to 1.64.0jbeich2017-05-027-7/+7 * Remove expired portler2017-05-014-44/+0 * 2017-04-30 devel/stormlib-ghost++: Unfetchable for more than six months (goog...ler2017-04-3024-416/+0 * Chase editors/emacs update to version 25.2jrm2017-04-291-1/+1 * - Update license and wwwamdmi32017-04-282-3/+4 * update deskutils/fet to 5.31.5lifanov2017-04-262-4/+4 * Chase ffmpeg 3.3 update (ABI changes)riggs2017-04-2528-22/+28 * - Fix shebangsmiwi2017-04-242-4/+6 * Update the gtk+ stack [1]kwm2017-04-231-0/+1 * - Fix shebangsmiwi2017-04-221-1/+4 * - Add LICENSE_FILEamdmi32017-04-211-4/+5 * - Fix shebangsamdmi32017-04-211-3/+3 * - Fix shebangsamdmi32017-04-211-2/+3 * - Add LICENSEamdmi32017-04-211-2/+7 * - Fix shebangsmiwi2017-04-211-2/+5 * Mark deprecated and set to expire at 2017-05-19cpm2017-04-201-0/+3 * - Re-add for proper repo-copycpm2017-04-206-0/+70 * Remove deskutils/projectlibre to be properly repocopied instead.cpm2017-04-206-70/+0 * Add new port deskutils/projectlibrecpm2017-04-196-0/+70 * Update deskutils/calibre to 2.83.0madpilot2017-04-16