Commit Graph

14 Commits

Author SHA1 Message Date
Ariel Abreu
95ff731415
Implement xpc_dictionary_get_audit_token; remove _od_rpc_call
It's in libinfo now, where it belongs
2021-11-28 23:45:34 -05:00
Ariel Abreu
84e29f89ba
Fix up serialization format to match macOS
* The XPC magic has changed to "@XPC" (at least on Catalina)
  * Container entry counts are included in their content lengths
  * When there are no descriptors to send (i.e. when the message is not complex), the XPC data appears immediately after the header (no descriptor count)
2021-05-19 00:19:57 -04:00
Ariel Abreu
c4b1593a0a
Many fixes
First, make xpc_log into a small wrapper over os_log; all it does differently is check whether to enable or disable XPC logging (based on whether we're in syslogd or something else that would cause a deadlock/loop).

Second, add xpc_assumes (and friends) for verifying assumptions for both debug and release builds and logging a message when one fails.

Third, make sure to unset the associatedConnection weak reference when deallocating dictionaries.

Another fix: use objc release instead of os_object_release_internal for releasing server peers (this way, if a user retains the connection, they can release it even after the server has released it).

Also, DISPATCH_MACH_DISCONNECTED is not the right place to release our internal reference. It can be called multiple times, once for each outstanding port and is not guaranteed to be called after DISPATCH_MACH_CANCELED. DISPATCH_MACH_CANCELED is actually the right place for this.

Finally, DISPATCH_MACH_NO_SENDERS should not release the old send port (that's what DISPATCH_MACH_DISCONNECTED is for).
2021-05-11 21:13:46 -04:00
Ariel Abreu
b71a0e24cd
Use os_log for logging 2021-05-05 15:38:42 -04:00
Ariel Abreu
efee6f689e
Add license headers everywhere and fix small issues 2021-04-22 09:18:09 -04:00
Ariel Abreu
0ec7a91082
Implement xpc_main
However, bundled XPC services still don't work properly.

The problem is that bundled XPC service support needs to be implemented in launchd.
The open-source launchd sources are severely outdated, much like CoreFoundation.
The new launchd is based on libxpc and is closed-source.
We probably don't want to completely rewrite launchd, but at the very least, we do need to add support for new XPC-based features.
2021-04-21 17:30:34 -04:00
Ariel Abreu
96434fd2f1
Implement bundles and property list parsing
As noted in `plist.m`, the XML parsing implemented here is NOT robust, but it's good enough for the vast majority of files.

This commit also adds many new String methods. It also fixes an issue where syslogd would get stuck trying to send a message to itself due to our logging.
2021-04-21 12:02:02 -04:00
Ariel Abreu
6a52941087
Fix absolute dates 2021-04-21 11:55:56 -04:00
Ariel Abreu
b91537684e
Implement some stubs and store remote credentials for connections
Also uncomment some code for pipes (I had commented it out during testing)
2021-04-11 09:38:30 -04:00
Ariel Abreu
90b934b336
Implement pipes...
...also, add stub messages everywhere.

launchd now works again as of this commit.
2021-04-10 20:25:39 -04:00
Ariel Abreu
07ae92b98b
Implement XPC connections on top of dispatch_mach
Also includes a serialization overhaul to be more object-oriented (each XPC object class worries about its own (de)serialization). The new serialization code also includes Mach port serialization (which we didn't have before).

The "test" service is not really a test; it's more of a sample. You have to test it out manually.
2021-04-07 13:53:02 -04:00
Ariel Abreu
675120a197
Initial rewrite commit
This commit is the first in the rewrite of libxpc. It implements the basic API (that is, the XPC object system and the most basic objects and collections). It also adds some tests for the basic API.

The current test suite uses ctest as the testing framework, but for future tests (such as for connections), it may be necessary to find something a little more robust (or roll our own).

Future commits will implement the rewritten connection system based on top of libdispatch's private Mach API, which is made specifically for this purpose (it even has certain methods marked as `4libxpc`).
2021-03-27 15:14:08 -04:00
Ariel Abreu
3382d940fd
Many fixes (mainly in connections)
This is probably the last update to the current libxpc codebase I'll be doing. The entire codebase is going to be rewritten soon.
2021-03-17 23:14:47 -04:00
Ariel Abreu
8596b6c39a
Restrucure project and rewrite serialization logic
This commit reorganizes the project to be a little more... organized ;)

It's a matter of preference, but I personally think separating sources and headers is more orderly. Various unnecessary sources that we inherited from NextBSD have also been removed.

We now use an exported symbols list to make our exported symbols match Apple's official libxpc (with the exception of those that we haven't stubbed/defined yet).

And finally, the {de,}serialization logic has been completely rewritten to match Apple's serialization format. The only possible issue there are doubles, which like the old code, we assume the double format is identical between the source machine and the receiving machine (which is probably a safe assumption, but should be avoided if possible).

Oh, and it also various little fixes, the most important of which is that creating a non-empty dictionary now works properly (we were previously doubling the entry count).
2021-01-07 00:19:52 -05:00