return ASL_STATUS_OK;
}
-static kern_return_t
+static void
_server_message_processing(asl_request_msg *request)
{
const uint32_t sbits = MACH_SEND_MSG | MACH_SEND_TIMEOUT;;
continue;
}
- int64_t msize = 0;
if (request->head.msgh_id == asl_server_message_num)
{
_server_message_processing(request);
}
static void
-caller_get_read_entitlement(pid_t pid, uid_t *uid, gid_t *gid)
+caller_get_read_entitlement(audit_token_t *token, uid_t *uid, gid_t *gid)
{
#if TARGET_OS_EMBEDDED
- xpc_object_t edata, entitlements, val;
+ xpc_object_t entitlements, val;
bool bval = false;
int64_t ival = -2;
- size_t len;
- const void *ptr;
-
- edata = xpc_copy_entitlements_for_pid(pid);
- if (edata == NULL) return;
- ptr = xpc_data_get_bytes_ptr(edata);
- len = xpc_data_get_length(edata);
-
- entitlements = xpc_create_from_plist(ptr, len);
- xpc_release(edata);
+ entitlements = xpc_copy_entitlement_for_token(NULL, token);
if (entitlements == NULL) return;
- if (xpc_get_type(entitlements) != XPC_TYPE_DICTIONARY)
- {
- asldebug("xpc_copy_entitlements_for_pid has non-dictionary data for pid %d\n", pid);
- return;
- }
-
bval = xpc_dictionary_get_bool(entitlements, ASL_ENTITLEMENT_KEY);
if (bval && (uid != NULL))
{
mach_msg_type_number_t *replyCnt,
uint64_t *lastid,
int *status,
- uid_t uid,
- gid_t gid,
- pid_t pid
+ audit_token_t *token
)
{
asl_msg_list_t *query;
if (request != NULL) vm_deallocate(mach_task_self(), (vm_address_t)request, requestCnt);
res = NULL;
+ uid_t uid = (uid_t)-1;
+ gid_t gid = (gid_t)-1;
+ pid_t pid = (pid_t)-1;
+ audit_token_to_au32(*token, NULL, &uid, &gid, NULL, NULL, &pid, NULL, NULL);
+
/* A query list containing a single query, which itself contains
* [ASLOption control] is an internal state query */
if ((query != NULL) && (query->count == 1) && asl_check_option(query->msg[0], ASL_OPT_CONTROL))
if (pid > 0)
{
- caller_get_read_entitlement(pid, &uid, &gid);
+ caller_get_read_entitlement(token, &uid, &gid);
if (uid == 0) x = 0;
}
audit_token_t token
)
{
- uid_t uid = (uid_t)-1;
- gid_t gid = (gid_t)-1;
- pid_t pid = (pid_t)-1;
-
- int direction = SEARCH_FORWARD;
- if (flags & QUERY_FLAG_SEARCH_REVERSE) direction = SEARCH_BACKWARD;
-
- audit_token_to_au32(token, NULL, &uid, &gid, NULL, NULL, &pid, NULL, NULL);
-
- return __asl_server_query_internal(server, request, requestCnt, startid, count, QUERY_DURATION_UNLIMITED, direction, reply, replyCnt, lastid, status, uid, gid, pid);
-}
-
-kern_return_t
-__asl_server_query
-(
- mach_port_t server,
- caddr_t request,
- mach_msg_type_number_t requestCnt,
- uint64_t startid,
- int count,
- int flags,
- caddr_t *reply,
- mach_msg_type_number_t *replyCnt,
- uint64_t *lastid,
- int *status,
- security_token_t *token
-)
-{
- int direction = SEARCH_FORWARD;
- if (flags & QUERY_FLAG_SEARCH_REVERSE) direction = SEARCH_BACKWARD;
-
- return __asl_server_query_internal(server, request, requestCnt, startid, count, QUERY_DURATION_UNLIMITED, direction, reply, replyCnt, lastid, status, (uid_t)token->val[0], (gid_t)token->val[1], (pid_t)-1);
-}
-
-kern_return_t
-__asl_server_query_timeout
-(
- mach_port_t server,
- caddr_t request,
- mach_msg_type_number_t requestCnt,
- uint64_t startid,
- int count,
- int flags,
- caddr_t *reply,
- mach_msg_type_number_t *replyCnt,
- uint64_t *lastid,
- int *status,
- audit_token_t token
-)
-{
- uid_t uid = (uid_t)-1;
- gid_t gid = (gid_t)-1;
- pid_t pid = (pid_t)-1;
int direction = SEARCH_FORWARD;
if (flags & QUERY_FLAG_SEARCH_REVERSE) direction = SEARCH_BACKWARD;
- audit_token_to_au32(token, NULL, &uid, &gid, NULL, NULL, &pid, NULL, NULL);
-
- return __asl_server_query_internal(server, request, requestCnt, startid, count, QUERY_DURATION_UNLIMITED, direction, reply, replyCnt, lastid, status, uid, gid, pid);
+ return __asl_server_query_internal(server, request, requestCnt, startid, count, QUERY_DURATION_UNLIMITED, direction, reply, replyCnt, lastid, status, &token);
}
kern_return_t
audit_token_t token
)
{
- uid_t uid = (uid_t)-1;
- gid_t gid = (gid_t)-1;
- pid_t pid = (pid_t)-1;
-
- audit_token_to_au32(token, NULL, &uid, &gid, NULL, NULL, &pid, NULL, NULL);
-
- return __asl_server_query_internal(server, request, requestCnt, startid, count, duration, direction, reply, replyCnt, lastid, status, uid, gid, pid);
-}
-
-kern_return_t
-__asl_server_prune
-(
- mach_port_t server,
- caddr_t request,
- mach_msg_type_number_t requestCnt,
- int *status,
- security_token_t *token
-)
-{
- return KERN_FAILURE;
+ return __asl_server_query_internal(server, request, requestCnt, startid, count, duration, direction, reply, replyCnt, lastid, status, &token);
}
/*