summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorPeter Sprygada <privateip@users.noreply.github.com>2017-02-16 13:59:47 -0500
committerGitHub <noreply@github.com>2017-02-16 13:59:47 -0500
commit3ff2c471b2aebaef1db5ab560b38fa9714479392 (patch)
tree2aedddb44e042466cb65753f514e98885b13e3ca /bin
parent718b786157da07288d005c7254f8f7ab00ebc1d5 (diff)
downloadansible-3ff2c471b2aebaef1db5ab560b38fa9714479392.tar.gz
fixes Bad file descriptor backtrace raised by ansible-connection (#21526)
This change will redirect stdout and stderr either to the log file configured by log_path or to /dev/null if no log_path is specified. fixes #21400
Diffstat (limited to 'bin')
-rwxr-xr-xbin/ansible-connection36
1 files changed, 14 insertions, 22 deletions
diff --git a/bin/ansible-connection b/bin/ansible-connection
index 1eecccd179..aa74919c5e 100755
--- a/bin/ansible-connection
+++ b/bin/ansible-connection
@@ -71,9 +71,16 @@ def do_fork():
if pid > 0:
sys.exit(0)
+ if C.DEFAULT_LOG_PATH != '':
+ out_file = file(C.DEFAULT_LOG_PATH, 'a+')
+ err_file = file(C.DEFAULT_LOG_PATH, 'a+', 0)
+ else:
+ out_file = file('/dev/null', 'a+')
+ err_file = file('/dev/null', 'a+', 0)
+
+ os.dup2(out_file.fileno(), sys.stdout.fileno())
+ os.dup2(err_file.fileno(), sys.stderr.fileno())
os.close(sys.stdin.fileno())
- os.close(sys.stdout.fileno())
- os.close(sys.stderr.fileno())
return pid
except OSError as e:
@@ -102,14 +109,6 @@ def recv_data(s):
data += d
return data
-def log(msg, host=None, **kwargs):
- if host:
- msg = '<%s> %s' % (host, msg)
- facility = getattr(syslog, C.DEFAULT_SYSLOG_FACILITY, syslog.LOG_USER)
- syslog.openlog('ansible-connection', 0, facility)
- syslog.syslog(syslog.LOG_INFO, str(msg))
-
-
class Server():
def __init__(self, path, play_context):
@@ -118,7 +117,7 @@ class Server():
self._start_time = datetime.datetime.now()
- self.log("setup connection %s" % self.play_context.connection)
+ display.vvv("setup connection %s" % self.play_context.connection, play_context.remote_addr)
self.conn = connection_loader.get(play_context.connection, play_context, sys.stdin)
self.conn._connect()
@@ -136,9 +135,6 @@ class Server():
if meth:
return meth(*args, **kwargs)
- def log(self, msg):
- log(msg, host=self.play_context.remote_addr)
-
def alarm_handler(self, signum, frame):
'''
Alarm handler
@@ -220,13 +216,13 @@ class Server():
send_data(s, to_bytes(stderr))
s.close()
except Exception as e:
- log(traceback.format_exc())
+ display.debug(traceback.format_exc())
finally:
# when done, close the connection properly and cleanup
# the socket file so it can be recreated
end_time = datetime.datetime.now()
delta = end_time - self._start_time
- log('shutting down connection, connection was active for %s secs' % delta, self.play_context.remote_addr)
+ dsplay.v('shutting down connection, connection was active for %s secs' % delta, self.play_context.remote_addr)
try:
self.conn.close()
self.socket.close()
@@ -258,8 +254,6 @@ def main():
sys.stderr.write(traceback.format_exc())
sys.exit("FAIL: %s" % e)
- display.verbosity = pc.verbosity
-
ssh = connection_loader.get('ssh', class_only=True)
m = ssh._create_control_path(pc.remote_addr, pc.port, pc.remote_user)
@@ -279,7 +273,7 @@ def main():
try:
server = Server(sf_path, pc)
except Exception as exc:
- log(traceback.format_exc(), pc.remote_addr)
+ display.debug(traceback.format_exec(), pc.remote_addr)
fcntl.lockf(lock_fd, fcntl.LOCK_UN)
os.close(lock_fd)
server.run()
@@ -308,8 +302,7 @@ def main():
time.sleep(C.PERSISTENT_CONNECT_INTERVAL)
attempts += 1
if attempts > C.PERSISTENT_CONNECT_RETRIES:
- sys.stderr.write('failed to connect to the listener socket, '
- 'connection timeout. See syslog for more details')
+ sys.stderr.write('failed to connect to the listener socket, connection timeout.')
sys.exit(255)
# send the play_context back into the connection so the connection
@@ -334,5 +327,4 @@ def main():
if __name__ == '__main__':
display = Display()
- display.display = log
main()