diff options
author | Lee Duncan <lduncan@suse.com> | 2019-10-10 14:01:45 -0700 |
---|---|---|
committer | Lee Duncan <lduncan@suse.com> | 2019-10-10 14:01:45 -0700 |
commit | 42f12c32063b35c44d70ab9c6c4845dc1366c313 (patch) | |
tree | 4d70471f2552540f01a0aef9ba1ad2fd8a856fa5 | |
parent | f889c2dc80e7c18dea51d321ee3176d14c10d89d (diff) | |
download | targetcli-42f12c32063b35c44d70ab9c6c4845dc1366c313.tar.gz |
Handle systemd socket activation, when present.
Regular socket communications are fallen back to when
no systemd socket is present.
-rwxr-xr-x | daemon/targetclid | 70 |
1 files changed, 41 insertions, 29 deletions
diff --git a/daemon/targetclid b/daemon/targetclid index 7cec9f4..71fd3a2 100755 --- a/daemon/targetclid +++ b/daemon/targetclid @@ -202,35 +202,47 @@ def main(): to = TargetCLI() - # Make sure file doesn't exist already - try: - unlink(to.socket_path) - except: - pass - - # Create a TCP/IP socket - try: - sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - except socket.error as err: - to.display(to.render(err.strerror, 'red')) - sys.exit(1) - - # save socket so a signal can clean it up - to.sock = sock - - # Bind the socket path - try: - sock.bind(to.socket_path) - except socket.error as err: - to.display(to.render(err.strerror, 'red')) - sys.exit(1) - - # Listen for incoming connections - try: - sock.listen(1) - except socket.error as err: - to.display(to.render(err.strerror, 'red')) - sys.exit(1) + if getenv('LISTEN_PID'): + # the systemd-activation path, using next available FD + fn = sys.stderr.fileno() + 1 + try: + sock = socket.fromfd(fn, socket.AF_UNIX, socket.SOCK_STREAM) + except socket.error as err: + to.display(to.render(err.strerror, 'red')) + sys.exit(1) + + # save socket so a signal can clea it up + to.sock = sock + else: + # Make sure file doesn't exist already + try: + unlink(to.socket_path) + except: + pass + + # Create a TCP/IP socket + try: + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + except socket.error as err: + to.display(to.render(err.strerror, 'red')) + sys.exit(1) + + # save socket so a signal can clea it up + to.sock = sock + + # Bind the socket path + try: + sock.bind(to.socket_path) + except socket.error as err: + to.display(to.render(err.strerror, 'red')) + sys.exit(1) + + # Listen for incoming connections + try: + sock.listen(1) + except socket.error as err: + to.display(to.render(err.strerror, 'red')) + sys.exit(1) while to.NoSignal: try: |