Skip to content

Commit

Permalink
qubes/tools/qubesd: properly unlink UNIX sockets at shutdown
Browse files Browse the repository at this point in the history
  • Loading branch information
woju authored and marmarek committed Jun 20, 2017
1 parent 4b8e5c3 commit 71a4390
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
4 changes: 3 additions & 1 deletion qubes/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -352,5 +352,7 @@ def create_server(sockpath, handler, app, debug=False, *, loop=None):
finally:
os.umask(old_umask)

shutil.chown(sockpath, group='qubes')
for sock in server.sockets:
shutil.chown(sock.getsockname(), group='qubes')

return server
14 changes: 14 additions & 0 deletions qubes/tools/qubesd.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ def main(args=None):
qubes.api.misc.QubesMiscAPI,
app=args.app, debug=args.debug)))

socknames = []
for server in servers:
for sock in server.sockets:
socknames.append(sock.getsockname())

for signame in ('SIGINT', 'SIGTERM'):
loop.add_signal_handler(getattr(signal, signame),
sighandler, loop, signame, servers)
Expand All @@ -62,6 +67,15 @@ def main(args=None):
loop.run_forever()
loop.run_until_complete(asyncio.wait([
server.wait_closed() for server in servers]))
for sockname in socknames:
try:
os.unlink(sockname)
except FileNotFoundError:
# XXX
# We had our socket unlinked by somebody else, possibly other
# qubesd instance. That also means we probably unlinked their
# socket when creating our server...
pass
finally:
loop.close()

Expand Down

0 comments on commit 71a4390

Please sign in to comment.