I renamed RunRestrictedCmd to RunCmd as it (now) runs both restricted commands and repair commands. I interpreted "RunRestrictedCmd" as a function that executes a "restricted command", and not just checking the restrictions.
On Tue, Aug 25, 2015 at 11:06 AM Aditya Bhimanavajjula <[email protected]> wrote: > We cannot use StringIO, as it does not provide fileno(). (fileno is used > by subprocess.Popen) > > On Tue, Aug 25, 2015 at 10:57 AM Klaus Aehlig <[email protected]> wrote: > >> On Mon, Aug 24, 2015 at 07:01:17PM +0200, 'Bhimanavajjula Aditya' via >> ganeti-devel wrote: >> > repair_command takes two strings as input cmd, and inp. >> > This patch generalizes RunRestrictedCmd to RunCmd. RunCmd >> > can now pass a string as stdin input to the command that >> > will rull. >> > >> > Signed-off-by: Bhimanavajjula Aditya <[email protected]> >> > --- >> > lib/backend.py | 41 >> ++++++++++++++++++++++---------- >> > lib/pathutils.py | 4 ++++ >> > lib/rpc_defs.py | 4 ++++ >> > lib/server/noded.py | 18 +++++++++++++- >> > test/py/ganeti.backend_unittest.py | 48 >> +++++++++++++++++++------------------- >> > 5 files changed, 78 insertions(+), 37 deletions(-) >> > >> > diff --git a/lib/backend.py b/lib/backend.py >> > index cc96689..6ed07e6 100644 >> > --- a/lib/backend.py >> > +++ b/lib/backend.py >> > @@ -5473,18 +5473,25 @@ def _PrepareRestrictedCmd(path, cmd, >> > return _verify_cmd(path, cmd) >> > >> > >> > -def RunRestrictedCmd(cmd, >> > - _lock_timeout=_RCMD_LOCK_TIMEOUT, >> > - >> _lock_file=pathutils.RESTRICTED_COMMANDS_LOCK_FILE, >> > - _path=pathutils.RESTRICTED_COMMANDS_DIR, >> > - _sleep_fn=time.sleep, >> > - _prepare_fn=_PrepareRestrictedCmd, >> > - _runcmd_fn=utils.RunCmd, >> > - _enabled=constants.ENABLE_RESTRICTED_COMMANDS): >> > - """Executes a restricted command after performing strict tests. >> > +def RunCmd(cmd, >> >> Why rename RunRestrictedCmd to RunCmd? The method still verifies >> restrictions, and hence is fundamentally different then RunCmd from >> utils---a difference that gets blurred by your renaming. >> >> > if status: >> > + if inp: >> > + input_fd = tempfile.TemporaryFile() >> > + input_fd.write(inp) >> > + input_fd.flush() >> > + input_fd.seek(0) >> > + else: >> > + input_fd = None >> >> Why generate a real file, if all we need is a file-like object? >> Can't we use an in-memory file-like object, like StringIO? >> >> >> -- >> Klaus Aehlig >> Google Germany GmbH, Dienerstr. 12, 80331 Muenchen >> Registergericht und -nummer: Hamburg, HRB 86891 >> Sitz der Gesellschaft: Hamburg >> Geschaeftsfuehrer: Graham Law, Christine Elizabeth Flores >> >
