]> git.saurik.com Git - apple/syslog.git/blobdiff - syslogd.tproj/dbserver.c
syslog-377.0.1.tar.gz
[apple/syslog.git] / syslogd.tproj / dbserver.c
index 43152902a9b618a18cb29c02492414a13d843bd3..a01b20990d79c372a20ccd42ff7acb577fa47c40 100644 (file)
@@ -1018,7 +1018,7 @@ syslogd_state_query(asl_msg_t *q, asl_msg_list_t **res, uid_t uid)
        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;;
@@ -1190,7 +1190,6 @@ database_server()
                        continue;
                }
 
-               int64_t msize = 0;
                if (request->head.msgh_id == asl_server_message_num)
                {
                        _server_message_processing(request);
@@ -1203,31 +1202,16 @@ database_server()
 }
 
 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))
        {
@@ -1274,9 +1258,7 @@ __asl_server_query_internal
        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;
@@ -1301,6 +1283,11 @@ __asl_server_query_internal
        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))
@@ -1316,7 +1303,7 @@ __asl_server_query_internal
 
                if (pid > 0)
                {
-                       caller_get_read_entitlement(pid, &uid, &gid);
+                       caller_get_read_entitlement(token, &uid, &gid);
                        if (uid == 0) x = 0;
                }
 
@@ -1374,65 +1361,10 @@ __asl_server_query_2
        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
@@ -1452,26 +1384,7 @@ __asl_server_match
        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);
 }
 
 /*