summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Client
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-11-12 09:02:54 -0500
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-11-12 09:02:54 -0500
commit5f263d88822324d98350fc660b3ca0b077bd1501 (patch)
tree2ff874900f4b8fd5c52a19ea0081a6a45aeca068 /src/lib/Bcfg2/Client
parent452e6adf697d829e400d61999049afa1a3fb9864 (diff)
downloadbcfg2-5f263d88822324d98350fc660b3ca0b077bd1501.tar.gz
bcfg2-5f263d88822324d98350fc660b3ca0b077bd1501.tar.bz2
bcfg2-5f263d88822324d98350fc660b3ca0b077bd1501.zip
flush input buffers before accepting stdin
Diffstat (limited to 'src/lib/Bcfg2/Client')
-rw-r--r--src/lib/Bcfg2/Client/Frame.py5
-rw-r--r--src/lib/Bcfg2/Client/Tools/Action.py7
-rw-r--r--src/lib/Bcfg2/Client/Tools/__init__.py6
3 files changed, 18 insertions, 0 deletions
diff --git a/src/lib/Bcfg2/Client/Frame.py b/src/lib/Bcfg2/Client/Frame.py
index 64460ea66..53180ab68 100644
--- a/src/lib/Bcfg2/Client/Frame.py
+++ b/src/lib/Bcfg2/Client/Frame.py
@@ -1,8 +1,10 @@
""" Frame is the Client Framework that verifies and installs entries,
and generates statistics. """
+import os
import sys
import time
+import select
import fnmatch
import logging
import Bcfg2.Client.Tools
@@ -160,6 +162,9 @@ class Frame(object):
iprompt = entry.get('qtext')
else:
iprompt = prompt % (entry.tag, entry.get('name'))
+ # flush input buffer
+ while len(select.select([sys.stdin.fileno()], [], [], 0.0)[0]) > 0:
+ os.read(sys.stdin.fileno(), 4096)
try:
ans = input(iprompt.encode(sys.stdout.encoding, 'replace'))
if ans in ['y', 'Y']:
diff --git a/src/lib/Bcfg2/Client/Tools/Action.py b/src/lib/Bcfg2/Client/Tools/Action.py
index 7726da94c..b1a897c81 100644
--- a/src/lib/Bcfg2/Client/Tools/Action.py
+++ b/src/lib/Bcfg2/Client/Tools/Action.py
@@ -1,5 +1,8 @@
"""Action driver"""
+import os
+import sys
+import select
import Bcfg2.Client.Tools
from Bcfg2.Client.Frame import matches_white_list, passes_black_list
from Bcfg2.Compat import input # pylint: disable=W0622
@@ -33,6 +36,10 @@ class Action(Bcfg2.Client.Tools.Tool):
if self.setup['interactive']:
prompt = ('Run Action %s, %s: (y/N): ' %
(entry.get('name'), entry.get('command')))
+ # flush input buffer
+ while len(select.select([sys.stdin.fileno()], [], [],
+ 0.0)[0]) > 0:
+ os.read(sys.stdin.fileno(), 4096)
ans = input(prompt)
if ans not in ['y', 'Y']:
return False
diff --git a/src/lib/Bcfg2/Client/Tools/__init__.py b/src/lib/Bcfg2/Client/Tools/__init__.py
index 4022692be..927b25ba8 100644
--- a/src/lib/Bcfg2/Client/Tools/__init__.py
+++ b/src/lib/Bcfg2/Client/Tools/__init__.py
@@ -1,7 +1,9 @@
"""This contains all Bcfg2 Tool modules"""
import os
+import sys
import stat
+import select
from subprocess import Popen, PIPE
import Bcfg2.Client.XML
from Bcfg2.Compat import input, walk_packages # pylint: disable=W0622
@@ -373,6 +375,10 @@ class SvcTool(Tool):
if self.setup['interactive']:
prompt = ('Restart service %s?: (y/N): ' %
entry.get('name'))
+ # flush input buffer
+ while len(select.select([sys.stdin.fileno()], [], [],
+ 0.0)[0]) > 0:
+ os.read(sys.stdin.fileno(), 4096)
ans = input(prompt)
if ans not in ['y', 'Y']:
continue