misc: close file descriptors in clean()

This commit is contained in:
Benjamin Dauvergne 2020-04-25 09:28:49 +02:00
parent 72c488b4c7
commit 58759b3e78
1 changed files with 14 additions and 11 deletions

View File

@ -103,16 +103,7 @@ olcAccess: {{0}}to *
data_dirs = None
db_index = 1
tls = None
def create_process(self, args, pipe=True, out=None):
if pipe:
return subprocess.Popen(args, stdin=subprocess.PIPE, env=os.environ,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
else:
DEVNULL = open(os.devnull, 'w')
out = out or DEVNULL
return subprocess.Popen(args, stdin=DEVNULL, env=os.environ, stdout=out,
stderr=out)
_close_fds = None
def __init__(self, ldap_url=None, config_context=None, tls=None):
assert has_slapd()
@ -192,6 +183,15 @@ olcAccess: {{0}}to * by * manage
stdout, stderr = slapadd.communicate(input=bytearray(ldif, 'utf-8'))
assert slapadd.returncode == 0, 'slapadd failed: %s' % stderr
def close_fds(self):
for fd in self._close_fds or []:
fd.close()
def set_close_fds(self, close_fds):
self.close_fds()
self._close_fds = close_fds
def start(self):
'''Launch slapd'''
assert not self.process
@ -201,7 +201,9 @@ olcAccess: {{0}}to * by * manage
'-F' + self.config_dir,
'-h', self.ldap_url]
out_file = open(os.path.join(self.slapd_dir, 'stdout'), 'w')
self.process = self.create_process(cmd, pipe=False, out=out_file)
dev_null = open(os.devnull)
self.process = subprocess.Popen(cmd, stdin=dev_null, env=os.environ, stdout=out_file, stderr=out_file)
self.set_close_fds([out_file, dev_null])
atexit.register(self.clean)
c = 0
@ -263,6 +265,7 @@ olcAccess: {{0}}to * by * manage
def clean(self):
'''Remove directory'''
self.close_fds()
try:
if self.process:
self.stop()