X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/79b9da22a1f4b26279940d285c1bc28ce4e99252..bf028f67fd3bb2266df81b80fb6f25a77112e308:/sectask/SecTask.c?ds=inline diff --git a/sectask/SecTask.c b/sectask/SecTask.c index 11b2b4b6..a73416c7 100644 --- a/sectask/SecTask.c +++ b/sectask/SecTask.c @@ -35,14 +35,15 @@ #include #include #include +#include #include #if TARGET_OS_OSX /* These won't exist until we unify codesigning */ -#include "SecCode.h" -#include "SecCodePriv.h" -#include "SecRequirement.h" +#include +#include +#include #endif /* TARGET_OS_OSX */ struct __SecTask { @@ -132,6 +133,21 @@ SecTaskRef SecTaskCreateWithAuditToken(CFAllocatorRef allocator, audit_token_t t return task; } +_Nullable SecTaskRef +SecTaskCreateWithXPCMessage(xpc_object_t _Nonnull message) +{ + audit_token_t token; + + if (message == NULL || xpc_get_type(message) != XPC_TYPE_DICTIONARY) { + return NULL; + } + xpc_dictionary_get_audit_token(message, &token); + + return SecTaskCreateWithAuditToken(NULL, token); +} + + + struct csheader { uint32_t magic; uint32_t length; @@ -150,8 +166,8 @@ csops_task(SecTaskRef task, int ops, void *blob, size_t size) return rc; } -CFStringRef -SecTaskCopySigningIdentifier(SecTaskRef task, CFErrorRef *error) +static CFStringRef +SecTaskCopyIdentifier(SecTaskRef task, int op, CFErrorRef *error) { CFStringRef signingId = NULL; char *data = NULL; @@ -159,7 +175,7 @@ SecTaskCopySigningIdentifier(SecTaskRef task, CFErrorRef *error) uint32_t bufferlen; int ret; - ret = csops_task(task, CS_OPS_IDENTITY, &header, sizeof(header)); + ret = csops_task(task, op, &header, sizeof(header)); if (ret != -1 || errno != ERANGE) return NULL; @@ -174,7 +190,7 @@ SecTaskCopySigningIdentifier(SecTaskRef task, CFErrorRef *error) ret = ENOMEM; goto out; } - ret = csops_task(task, CS_OPS_IDENTITY, data, bufferlen); + ret = csops_task(task, op, data, bufferlen); if (ret) { ret = errno; goto out; @@ -192,6 +208,18 @@ SecTaskCopySigningIdentifier(SecTaskRef task, CFErrorRef *error) return signingId; } +CFStringRef +SecTaskCopySigningIdentifier(SecTaskRef task, CFErrorRef *error) +{ + return SecTaskCopyIdentifier(task, CS_OPS_IDENTITY, error); +} + +CFStringRef +SecTaskCopyTeamIdentifier(SecTaskRef task, CFErrorRef *error) +{ + return SecTaskCopyIdentifier(task, CS_OPS_TEAMID, error); +} + uint32_t SecTaskGetCodeSignStatus(SecTaskRef task) { @@ -342,7 +370,7 @@ out: return values; } -#if TARGET_OS_OSX +#if SEC_OS_OSX /* * Determine if the given task meets a specified requirement. */ @@ -373,7 +401,7 @@ SecTaskValidateForRequirement(SecTaskRef task, CFStringRef requirement) return status; } -#endif /* TARGET_OS_OSX */ +#endif /* SEC_OS_OSX */ Boolean SecTaskEntitlementsValidated(SecTaskRef task) { // TODO: Cache the result