Ludovic,

If possible, I would recommend using XPC for this purpose. Rather than managing 
the permissions of a socket on-disk, the MachServices names registered by your 
agent would be in user-specific namespaces such that this collision never 
happens.

If that is not possible, then I would recommend taking a look at the 
SecureSocketForKey option. Instead of specifying the path name upfront, launchd 
will put the socket at a random path and then set that path as the value for an 
environment variable (which you name in the value for SecureSocketForKey). 
launchd then assures that all jobs within the same context as your agent get 
that environment variable so they can rendezvous with your agent. So for 
example, if your socket dictionary was

<key>Listeners</key>
<dict>
        <key>SecureSocketForKey</key>
        <string>MY_KEY</string>
</dict>

other processes would be able to just do a getenv("MY_KEY") to get the path to 
the socket and connect to it. This should achieve the user-based isolation you 
want with sockets. Though as I said before, XPC is a much more natural 
mechanism for IPC on OS X, so use that if it's a practical option for you.
-damien

> On 25 Feb, 2016, at 05:43, Ludovic Rousseau <ludovic.rouss...@gmail.com> 
> wrote:
> 
> Hello,
> 
> I am using launchd to create a Unix domain socket /tmp/foobar.socket so that 
> launchd starts my agent when someone connects to the sockets.
> 
> It works fine except when Fast User Switching is involved.
> 
> My problem is quite similar to the problem "Listening socket and fast user 
> switching" [1] discussed on this mailing list in 2008. The difference is that 
> I am using a UNIX domain socket and not a TCP socket.
> 
> 
> The problematic scenario is as follows:
> 1. User A logs in
> 2. User A can connect to the socket
> 
> 3. User B logs in using the Fast User Switching
> 4. User B can connect to the socket
> 5. User B logs out
> 
> 6. User A comes back and fast user switch to his session. Since user A
>    does not _logs in_ again the socket is not changed/recreated and is still
>    only usable by user B
> 
> At this step user A gets:
> $ telnet /tmp/foobar.socket
> Trying /tmp/foobar.socket...
> /tmp/foobar.socket: Connection refused
> 
> The socket is still present in /tmp/ but it belongs to user B and is no more 
> usable but user A.
> 
> What I would like is the ability for launchd to (re)configure the Unix domain 
> socket each time a user authenticates to the console, either the first time 
> or using the fast user switching method.
> 
> 
> - I use a UNIX domain socket so that only local processes can talk to the 
> socket and use my agent. I don't want to open my agent to other computer on 
> the network.
> - I use launchd to start my agent on request only. That is a very nice 
> feature. I can't detect the user switching since my agent code is, most of 
> the time, not running.
> - I can't use a different socket name per user since the client of my agent 
> does not know who is currently logged. My client application is talking to 
> the socket configured for whoever is logged at that time.
> 
> 
> My /Library/LaunchAgents/com.foobar.plist file contains:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
> "http://www.apple.com/DTDs/PropertyList-1.0.dtd 
> <http://www.apple.com/DTDs/PropertyList-1.0.dtd>">
> <plist version="1.0">
> <dict>
>     <key>Label</key>
>     <string>com.foobar</string>
>     <key>ProgramArguments</key>
>     <array>
>         <string>/usr/local/lib/foobar_exe</string>
>     </array>
>     <key>Sockets</key>
>     <dict>
>         <key>Listeners</key>
>         <dict>
>             <key>SockPathName</key>
>             <string>/tmp/foobar.socket</string>
>         </dict>
>     </dict>
>     <key>ProcessType</key>
>     <string>Interactive</string>
> </dict>
> </plist>
> 
> 
> Does launchd provides a solution to my problem?
> 
> Should I open a bug at Apple to ask for this new feature in launchd?
> 
> Thanks
> 
> [1] https://lists.macosforge.org/pipermail/launchd-dev/2008-May/000298.html 
> <https://lists.macosforge.org/pipermail/launchd-dev/2008-May/000298.html>
> 
> -- 
>  Dr. Ludovic Rousseau
> _______________________________________________
> launchd-dev mailing list
> launchd-dev@lists.macosforge.org
> https://lists.macosforge.org/mailman/listinfo/launchd-dev

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
launchd-dev mailing list
launchd-dev@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/launchd-dev

Reply via email to