summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLee Duncan <lduncan@suse.com>2019-10-10 14:01:45 -0700
committerLee Duncan <lduncan@suse.com>2019-10-10 14:01:45 -0700
commit42f12c32063b35c44d70ab9c6c4845dc1366c313 (patch)
tree4d70471f2552540f01a0aef9ba1ad2fd8a856fa5
parentf889c2dc80e7c18dea51d321ee3176d14c10d89d (diff)
downloadtargetcli-42f12c32063b35c44d70ab9c6c4845dc1366c313.tar.gz
Handle systemd socket activation, when present.
Regular socket communications are fallen back to when no systemd socket is present.
-rwxr-xr-xdaemon/targetclid70
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: