Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Mac OS #18

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft

Add support for Mac OS #18

wants to merge 4 commits into from

Conversation

aszlig
Copy link
Contributor

@aszlig aszlig commented Jul 8, 2020

This is a WIP branch to implement support for Mac OS X, which in theory should work since it has a similar mechanism (DYLD_INSERT_LIBRARIES) to LD_PRELOAD on GNU/Linux.

Fundamental issues:

  • Find a way to handle PID/GID in LOCAL_PEERCRED. It seems that there is only xucred.cr_uid, but in order to provide fake client IPs we need at least the peer PID to properly distinguish the individual peers.
  • We can't use std::filesystem yet, because Ubuntu 18.04 is still using GCC 7. Find a less ugly way to get_current_dir_name in a cross-platform way. According to https://ubuntu.com/18-04, the standard support has expired on 31 May 2023.

@aszlig aszlig force-pushed the darwin branch 5 times, most recently from 5887a4b to 5911036 Compare July 9, 2020 06:55
@aszlig aszlig added the help wanted Extra attention is needed label Jul 10, 2020
@aszlig aszlig changed the title Add support for Mac OS X Add support for Mac OS Jul 8, 2021
@aszlig aszlig force-pushed the darwin branch 2 times, most recently from a8c872a to 3ef2ee3 Compare July 8, 2021 22:55
@aszlig
Copy link
Contributor Author

aszlig commented Aug 6, 2023

For the record and according to golang/go#27613, there seems to be a LOCAL_PEERPID socket option that we could possibly use.

This reverts commit c945f58.

I initially removed the workflow because it was failing all the time and
always seeing commit messages with failed CI checks is not only pretty
unhelpful but we might miss other *relevant* failures because of that.

So this brings back the workflow for Darwin since we're now actually
working on at least trying to implement support for it.

The reason why I'm not adding this *after* adding support is that I
don't have a Mac OS X machine, so I have to purely relying on the GitHub
Actions workflow.

Signed-off-by: aszlig <aszlig@nix.build>
While LOCAL_PEERCRED is somewhat similar to SO_PEERCRED, we
unfortunately don't have access to the PID of the remote peer.

This is something we actually need to properly distinguish the remote
peer by giving it an IP address with the PID encoded, otherwise we'd end
up with duplicate IPs.

On the other hand, using random IP addresses also is not a very good
solution here, since we actually *want* to have the same IP for the same
process.

Right now the UID and GID fields are not used at all on Darwin, but we
really need to figure out a way to properly assign fake IP addresses.

Signed-off-by: aszlig <aszlig@nix.build>
This is needed in order to run integration tests, which we certainly
want to run on Darwin, because I do not have a single machine running
MacOS and thus for me the only way to check whether something is broken
is by checking whether the integration tests have failed.

Signed-off-by: aszlig <aszlig@nix.build>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant