CFStringRef kSecAssessmentAssessmentFromCache = CFSTR("assessment:authority:cached");
CFStringRef kSecAssessmentAssessmentWeakSignature = CFSTR("assessment:authority:weak");
CFStringRef kSecAssessmentAssessmentCodeSigningError = CFSTR("assessment:cserror");
+CFStringRef kSecAssessmentAssessmentNotarizationDate = CFSTR("assessment:notarization-date");
CFStringRef kDisabledOverride = CFSTR("security disabled");
CFRef<CFDictionaryRef> result;
// make context exist and writable
- CFMutableDictionaryRef mcontext;
- if (context == NULL) {
- mcontext = makeCFMutableDictionary();
- } else {
- mcontext = makeCFMutableDictionary(context);
- }
+ CFRef<CFMutableDictionaryRef> mcontext = context ? makeCFMutableDictionary(context) : makeCFMutableDictionary();
if (CFDictionaryGetValue(mcontext, kSecAssessmentUpdateKeyAuthorization) == NULL) {
// no authorization passed in. Make an empty one in this context
traceUpdate(target, context, result);
return result.yield();
- END_CSAPI_ERRORS1(false)
+ END_CSAPI_ERRORS1(NULL)
+}
+
+static void
+updateAuthority(const char *authority, bool enable, CFErrorRef *errors)
+{
+ CFStringRef updateValue = enable ? kSecAssessmentUpdateOperationEnable : kSecAssessmentUpdateOperationDisable;
+ CFTemp<CFDictionaryRef> ctx("{%O=%s, %O=%O}", kSecAssessmentUpdateKeyLabel, authority, kSecAssessmentContextKeyUpdate, updateValue);
+ SecAssessmentUpdate(NULL, kSecCSDefaultFlags, ctx, errors);
}
result = kCFBooleanTrue;
return true;
} else if (CFEqual(control, CFSTR("ui-enable-devid"))) {
- CFTemp<CFDictionaryRef> ctx("{%O=%s, %O=%O}", kSecAssessmentUpdateKeyLabel, "Developer ID", kSecAssessmentContextKeyUpdate, kSecAssessmentUpdateOperationEnable);
- SecAssessmentUpdate(NULL, kSecCSDefaultFlags, ctx, errors);
+ updateAuthority("Developer ID", true, errors);
+ updateAuthority("Notarized Developer ID", true, errors);
MessageTrace trace("com.apple.security.assessment.state", "enable-devid");
trace.send("enable Developer ID approval");
return true;
} else if (CFEqual(control, CFSTR("ui-disable-devid"))) {
- CFTemp<CFDictionaryRef> ctx("{%O=%s, %O=%O}", kSecAssessmentUpdateKeyLabel, "Developer ID", kSecAssessmentContextKeyUpdate, kSecAssessmentUpdateOperationDisable);
- SecAssessmentUpdate(NULL, kSecCSDefaultFlags, ctx, errors);
+ updateAuthority("Developer ID", false, errors);
MessageTrace trace("com.apple.security.assessment.state", "disable-devid");
trace.send("disable Developer ID approval");
return true;
else
result = kCFBooleanTrue;
return true;
+ } else if (CFEqual(control, CFSTR("ui-enable-notarized"))) {
+ updateAuthority("Notarized Developer ID", true, errors);
+ MessageTrace trace("com.apple.security.assessment.state", "enable-notarized");
+ trace.send("enable Notarized Developer ID approval");
+ return true;
+ } else if (CFEqual(control, CFSTR("ui-disable-notarized"))) {
+ updateAuthority("Notarized Developer ID", false, errors);
+ MessageTrace trace("com.apple.security.assessment.state", "disable-notarized");
+ trace.send("disable Notarized Developer ID approval");
+ return true;
+ } else if (CFEqual(control, CFSTR("ui-get-notarized"))) {
+ xpcEngineCheckNotarized((CFBooleanRef*)(arguments));
+ return true;
+ } else if (CFEqual(control, CFSTR("ui-get-notarized-local"))) {
+ CFBooleanRef &result = *(CFBooleanRef*)(arguments);
+ if (gEngine().value<int>("SELECT disabled FROM authority WHERE label = 'Notarized Developer ID';", true))
+ result = kCFBooleanFalse;
+ else
+ result = kCFBooleanTrue;
+ return true;
} else if (CFEqual(control, CFSTR("ui-record-reject"))) {
// send this through syspolicyd for update validation
xpcEngineRecord(CFDictionaryRef(arguments));
END_CSAPI_ERRORS1(false)
}
+
+Boolean SecAssessmentTicketRegister(CFDataRef ticketData, CFErrorRef *errors)
+{
+ BEGIN_CSAPI
+
+ xpcEngineTicketRegister(ticketData);
+ return true;
+
+ END_CSAPI_ERRORS1(false)
+}
+
+Boolean SecAssessmentTicketLookup(CFDataRef hash, SecCSDigestAlgorithm hashType, SecAssessmentTicketFlags flags, double *date, CFErrorRef *errors)
+{
+ BEGIN_CSAPI
+
+ xpcEngineTicketLookup(hash, hashType, flags, date);
+ return true;
+
+ END_CSAPI_ERRORS1(false)
+}
+