[CalendarServer-changes] [13967] CalendarServer/trunk/calendarserver/tap
source_changes at macosforge.org
source_changes at macosforge.org
Tue Sep 16 12:33:31 PDT 2014
Revision: 13967
http://trac.calendarserver.org//changeset/13967
Author: sagen at apple.com
Date: 2014-09-16 12:33:31 -0700 (Tue, 16 Sep 2014)
Log Message:
-----------
Pre-flight the APNS certificates, and the EnableCalDAV/EnableCardDAV values.
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/tap/caldav.py
CalendarServer/trunk/calendarserver/tap/util.py
Modified: CalendarServer/trunk/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/caldav.py 2014-09-16 02:00:47 UTC (rev 13966)
+++ CalendarServer/trunk/calendarserver/tap/caldav.py 2014-09-16 19:33:31 UTC (rev 13967)
@@ -428,15 +428,6 @@
def checkConfiguration(self):
- # Having CalDAV *and* CardDAV both disabled is an illegal configuration
- # for a running server (but is fine for command-line utilities)
- if config.ProcessType not in ["Agent", "Utility"]:
- if not config.EnableCalDAV and not config.EnableCardDAV:
- print(
- "Neither EnableCalDAV nor EnableCardDAV are set to True."
- )
- sys.exit(1)
-
uid, gid = None, None
if self.parent["uid"] or self.parent["gid"]:
Modified: CalendarServer/trunk/calendarserver/tap/util.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/util.py 2014-09-16 02:00:47 UTC (rev 13966)
+++ CalendarServer/trunk/calendarserver/tap/util.py 2014-09-16 19:33:31 UTC (rev 13967)
@@ -1147,8 +1147,14 @@
Otherwise exits.
"""
- success, reason = verifyTLSCertificate(config)
+ success, reason = verifyConfig(config)
+ if success:
+ success, reason = verifyTLSCertificate(config)
+
+ if success:
+ success, reason = verifyAPNSCertificate(config)
+
if not success:
if config.ServiceDisablingProgram:
# If pre-flight checks fail, we don't want launchd to
@@ -1170,6 +1176,17 @@
return True
+def verifyConfig(config):
+ """
+ At least one of EnableCalDAV or EnableCardDAV must be True
+ """
+
+ if config.EnableCalDAV or config.EnableCardDAV:
+ return True, "A protocol is enabled"
+
+ return False, "Neither CalDAV nor CardDAV are enabled"
+
+
def verifyTLSCertificate(config):
"""
If a TLS certificate is configured, make sure it exists, is non empty,
@@ -1217,6 +1234,54 @@
return True, "TLS enabled"
+def verifyAPNSCertificate(config):
+ """
+ If APNS certificates are configured, make sure they're valid.
+ """
+
+ if config.Notifications.Services.APNS.Enabled:
+
+ for protocol in ("CalDAV", "CardDAV"):
+ protoConfig = config.Notifications.Services.APNS[protocol]
+
+ if not os.path.exists(protoConfig.CertificatePath):
+ message = (
+ "The {proto} APNS certificate ({cert}) is missing".format(
+ proto=protocol,
+ cert=protoConfig.CertificatePath
+ )
+ )
+ return False, message
+
+ try:
+ if protoConfig.Passphrase:
+ passwdCallback = lambda *ignored: protoConfig.Passphrase
+ else:
+ passwdCallback = None
+
+ ChainingOpenSSLContextFactory(
+ protoConfig.PrivateKeyPath,
+ protoConfig.CertificatePath,
+ certificateChainFile=protoConfig.AuthorityChainPath,
+ passwdCallback=passwdCallback,
+ sslmethod=getattr(OpenSSL.SSL, "TLSv1_METHOD"),
+ )
+ except Exception as e:
+ message = (
+ "The {proto} APNS certificate ({cert}) cannot be used: {reason}".format(
+ proto=protocol,
+ cert=protoConfig.CertificatePath,
+ reason=str(e)
+ )
+ )
+ return False, message
+
+ return True, "APNS enabled"
+
+ else:
+ return True, "APNS disabled"
+
+
def getSSLPassphrase(*ignored):
if not config.SSLPrivateKey:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140916/6d560ca3/attachment.html>
More information about the calendarserver-changes
mailing list