[libvirt] [PATCH] Improve error reporting when virsh console is run without a TTY

2012-02-15 Thread Daniel P. Berrange
From: "Daniel P. Berrange" 

If attempting to run

  ssh root@somehost virsh console someguest

You'll get an error

  2012-02-15 13:11:47.683+: 4765: info : libvirt version: 0.9.10, package: 
1.fc18 (Unknown, 2012-02-15-11:48:57, lettuce.camlab.fab.redhat.com)
  2012-02-15 13:11:47.683+: 4765: error : vshRunConsole:320 : unable to get 
tty attributes: Invalid argument
  Connected to domain f16x86_64
  Escape character is ^]

There are several problems here

 - The actual error message is bad for users
 - We shouldn't rely on VIR_ERROR for this case
 - The prompt makes it look like we still connected
   because we didn't flush stdout.

* virsh.c: Flush stdout before starting console and check
  for a valid tty
---
 tools/virsh.c |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 66ba61c..d4d3a83 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -838,8 +838,14 @@ cmdRunConsole(vshControl *ctl, virDomainPtr dom, const 
char *name)
 goto cleanup;
 }
 
+if (!isatty(STDIN_FILENO)) {
+vshError(ctl, "%s", _("Cannot run interactive console without a 
controlling TTY"));
+goto cleanup;
+}
+
 vshPrintExtra(ctl, _("Connected to domain %s\n"), virDomainGetName(dom));
 vshPrintExtra(ctl, _("Escape character is %s\n"), ctl->escapeChar);
+fflush(stdout);
 if (vshRunConsole(dom, name, ctl->escapeChar) == 0)
 ret = true;
 
-- 
1.7.7.6

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH] Improve error reporting when virsh console is run without a TTY

2012-02-24 Thread Daniel P. Berrange
From: "Daniel P. Berrange" 

If attempting to run

  ssh root@somehost virsh console someguest

You'll get an error

  2012-02-15 13:11:47.683+: 4765: info : libvirt version: 0.9.10, package: 
1.fc18 (Unknown, 2012-02-15-11:48:57, lettuce.camlab.fab.redhat.com)
  2012-02-15 13:11:47.683+: 4765: error : vshRunConsole:320 : unable to get 
tty attributes: Invalid argument
  Connected to domain f16x86_64
  Escape character is ^]

There are several problems here

 - The actual error message is bad for users
 - We shouldn't rely on VIR_ERROR for this case
 - The prompt makes it look like we still connected
   because we didn't flush stdout.

* virsh.c: Flush stdout before starting console and check
  for a valid tty
---
 tools/virsh.c |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 3be86ed..b97a888 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -838,8 +838,14 @@ cmdRunConsole(vshControl *ctl, virDomainPtr dom, const 
char *name)
 goto cleanup;
 }
 
+if (!isatty(STDIN_FILENO)) {
+vshError(ctl, "%s", _("Cannot run interactive console without a 
controlling TTY"));
+goto cleanup;
+}
+
 vshPrintExtra(ctl, _("Connected to domain %s\n"), virDomainGetName(dom));
 vshPrintExtra(ctl, _("Escape character is %s\n"), ctl->escapeChar);
+fflush(stdout);
 if (vshRunConsole(dom, name, ctl->escapeChar) == 0)
 ret = true;
 
-- 
1.7.7.6

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] Improve error reporting when virsh console is run without a TTY

2012-02-15 Thread Jiri Denemark
On Wed, Feb 15, 2012 at 13:16:05 +, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" 
> 
> If attempting to run
> 
>   ssh root@somehost virsh console someguest
> 
> You'll get an error
> 
>   2012-02-15 13:11:47.683+: 4765: info : libvirt version: 0.9.10, 
> package: 1.fc18 (Unknown, 2012-02-15-11:48:57, lettuce.camlab.fab.redhat.com)
>   2012-02-15 13:11:47.683+: 4765: error : vshRunConsole:320 : unable to 
> get tty attributes: Invalid argument
>   Connected to domain f16x86_64
>   Escape character is ^]
> 
> There are several problems here
> 
>  - The actual error message is bad for users
>  - We shouldn't rely on VIR_ERROR for this case
>  - The prompt makes it look like we still connected
>because we didn't flush stdout.
> 
> * virsh.c: Flush stdout before starting console and check
>   for a valid tty
> ---
>  tools/virsh.c |6 ++
>  1 files changed, 6 insertions(+), 0 deletions(-)

ACK

Jirka

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] Improve error reporting when virsh console is run without a TTY

2012-02-24 Thread Eric Blake
On 02/24/2012 08:13 AM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" 
> 
> If attempting to run
> 
>   ssh root@somehost virsh console someguest
> 
> You'll get an error
> 
>   2012-02-15 13:11:47.683+: 4765: info : libvirt version: 0.9.10, 
> package: 1.fc18 (Unknown, 2012-02-15-11:48:57, lettuce.camlab.fab.redhat.com)
>   2012-02-15 13:11:47.683+: 4765: error : vshRunConsole:320 : unable to 
> get tty attributes: Invalid argument
>   Connected to domain f16x86_64
>   Escape character is ^]
> 
> There are several problems here
> 
>  - The actual error message is bad for users
>  - We shouldn't rely on VIR_ERROR for this case
>  - The prompt makes it look like we still connected
>because we didn't flush stdout.

Did you also test 'ssh root@somehost virsh start --console someguest' to
make sure that the guest is started, but the console sanely refused?

> +++ b/tools/virsh.c
> @@ -838,8 +838,14 @@ cmdRunConsole(vshControl *ctl, virDomainPtr dom, const 
> char *name)
>  goto cleanup;
>  }
>  
> +if (!isatty(STDIN_FILENO)) {
> +vshError(ctl, "%s", _("Cannot run interactive console without a 
> controlling TTY"));
> +goto cleanup;
> +}
> +
>  vshPrintExtra(ctl, _("Connected to domain %s\n"), virDomainGetName(dom));
>  vshPrintExtra(ctl, _("Escape character is %s\n"), ctl->escapeChar);
> +fflush(stdout);

At any rate, this looks sane. ACK.

Hmm, we ought to ask gnulib if they will relicense the isatty() module
(currently LGPLv3+); as isatty() on mingw has bugs worth working around.

-- 
Eric Blake   ebl...@redhat.com+1-919-301-3266
Libvirt virtualization library http://libvirt.org



signature.asc
Description: OpenPGP digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list