Revision
124891
Author
cal@macports.org
Date
2014-08-30 03:49:53 -0700 (Sat, 30 Aug 2014)

Log Message

certsync: Fix warnings and potential crash on Tiger

https://lists.macosforge.org/pipermail/macports-dev/2014-August/027807.html

Modified Paths

Diff

Modified: trunk/dports/security/certsync/files/certsync.m (124890 => 124891)


--- trunk/dports/security/certsync/files/certsync.m	2014-08-30 10:36:35 UTC (rev 124890)
+++ trunk/dports/security/certsync/files/certsync.m	2014-08-30 10:49:53 UTC (rev 124891)
@@ -403,8 +403,14 @@
         /* Set the keychain preference domain to user, this causes
          * ValidateSystemTrust to use the user's keychain */
         if ((err = SecKeychainSetPreferenceDomain(kSecPreferencesDomainUser)) != errSecSuccess) {
-            CFStringRef errMsg = PLCFAutorelease(SecCopyErrorMessageString(err, NULL));
-            nsfprintf(stderr, @"Failed to set keychain preference domain: %@\n", errMsg);
+            if (SecCopyErrorMessageString != NULL) {
+                /* >= 10.5 */
+                CFStringRef errMsg = PLCFAutorelease(SecCopyErrorMessageString(err, NULL));
+                nsfprintf(stderr, @"Failed to set keychain preference domain: %@\n", errMsg);
+            } else {
+                /* <= 10.4 */
+                nsfprintf(stderr, @"Failed to set keychain preference domain: %d\n", err);
+            }
 
             [pool release];
             return EXIT_FAILURE;
@@ -423,8 +429,14 @@
     /* Admin & System */
     /* Causes ValidateSystemTrust to ignore the user's keychain */
     if ((err = SecKeychainSetPreferenceDomain(kSecPreferencesDomainSystem)) != errSecSuccess) {
-        CFStringRef errMsg = PLCFAutorelease(SecCopyErrorMessageString(err, NULL));
-        nsfprintf(stderr, @"Failed to set keychain preference domain: %@\n", errMsg);
+        if (SecCopyErrorMessageString != NULL) {
+            /* >= 10.5 */
+            CFStringRef errMsg = PLCFAutorelease(SecCopyErrorMessageString(err, NULL));
+            nsfprintf(stderr, @"Failed to set keychain preference domain: %@\n", errMsg);
+        } else {
+            /* <= 10.4 */
+            nsfprintf(stderr, @"Failed to set keychain preference domain: %d\n", err);
+        }
 
         [pool release];
         return EXIT_FAILURE;

Modified: trunk/dports/security/certsync/files/compat.h (124890 => 124891)


--- trunk/dports/security/certsync/files/compat.h	2014-08-30 10:36:35 UTC (rev 124890)
+++ trunk/dports/security/certsync/files/compat.h	2014-08-30 10:49:53 UTC (rev 124891)
@@ -54,6 +54,13 @@
     /* SecTrustSettingsCopyCertificates() was added in 10.5 */
     extern OSStatus SecTrustSettingsCopyCertificates (SecTrustSettingsDomain domain, CFArrayRef *certArray) __attribute__((weak_import));
     #define SecTrustSettingsCopyCertificates ((OSStatus(*)(SecTrustSettingsDomain, CFArrayRef *)) NULL) /* We can't safely weak-link what we don't have */
+
+    /* SecTrustSettingsCopyTrustSettings() was added in 10.5 */
+    extern OSStatus SecTrustSettingsCopyTrustSettings (SecCertificateRef certRef, SecTrustSettingsDomain domain, CFArrayRef *trustSettings) __attribute__((weak_import));
+    #define SecTrustSettingsCopyTrustSettings ((OSStatus(*)(SecCertificateRef, SecTrustSettingsDomain, CFArrayRef *)) NULL) /* We can't safely weak-link what we don't have */
+
+    extern CFStringRef SecCopyErrorMessageString (OSStatus status, void *reserved) __attribute__((weak_import));
+    #define SecCopyErrorMessageString ((CFStringRef(*)(OSStatus, void *)) NULL) /* We can't safely weak-link what we don't have */
     
     /* CFError was added in 10.5 */
     typedef CFTypeRef CFErrorRef;