On Tue, May 10, 2011 at 04:07:50PM -0400, Cole Robinson wrote: > > Signed-off-by: Cole Robinson <crobinso@xxxxxxxxxx> > --- > src/remote/remote_driver.c | 65 ++++++++++++------------------------------- > 1 files changed, 18 insertions(+), 47 deletions(-) > > diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c > index 1072f9f..15f9941 100644 > --- a/src/remote/remote_driver.c > +++ b/src/remote/remote_driver.c > @@ -433,8 +433,8 @@ doRemoteOpen (virConnectPtr conn, > char *name = NULL, *command = NULL, *sockname = NULL, *netcat = NULL; > char *port = NULL, *authtype = NULL, *username = NULL; > int no_verify = 0, no_tty = 0; > - char **cmd_argv = NULL; > char *pkipath = NULL; > + virCommandPtr cmd = NULL; > > /* Return code from this function, and the private data. */ > int retcode = VIR_DRV_OPEN_ERROR; > @@ -748,50 +748,26 @@ doRemoteOpen (virConnectPtr conn, > } > > case trans_ssh: { > - int j, nr_args = 6; > - > - if (username) nr_args += 2; /* For -l username */ > - if (no_tty) nr_args += 5; /* For -T -o BatchMode=yes -e none */ > - if (port) nr_args += 2; /* For -p port */ > - > - command = command ? command : strdup ("ssh"); > - if (command == NULL) > - goto out_of_memory; > + cmd = virCommandNew(command ? command : "ssh"); > > /* Generate the final command argv[] array. > - * ssh [-p $port] [-l $username] $hostname $netcat -U $sockname [NULL] */ > - if (VIR_ALLOC_N(cmd_argv, nr_args) < 0) > - goto out_of_memory; > + * ssh [-p $port] [-l $username] $hostname $netcat -U $sockname */ > > - j = 0; > - cmd_argv[j++] = strdup (command); > if (port) { > - cmd_argv[j++] = strdup ("-p"); > - cmd_argv[j++] = strdup (port); > + virCommandAddArgList(cmd, "-p", port, NULL); > } > if (username) { > - cmd_argv[j++] = strdup ("-l"); > - cmd_argv[j++] = strdup (username); > + virCommandAddArgList(cmd, "-l", username, NULL); > } > if (no_tty) { > - cmd_argv[j++] = strdup ("-T"); > - cmd_argv[j++] = strdup ("-o"); > - cmd_argv[j++] = strdup ("BatchMode=yes"); > - cmd_argv[j++] = strdup ("-e"); > - cmd_argv[j++] = strdup ("none"); > + virCommandAddArgList(cmd, "-T", "-o", "BatchMode=yes", "-e", > + "none", NULL); > } > - cmd_argv[j++] = strdup (priv->hostname); > - cmd_argv[j++] = strdup (netcat ? netcat : "nc"); > - cmd_argv[j++] = strdup ("-U"); > - cmd_argv[j++] = strdup (sockname ? sockname : > - (flags & VIR_CONNECT_RO > - ? LIBVIRTD_PRIV_UNIX_SOCKET_RO > - : LIBVIRTD_PRIV_UNIX_SOCKET)); > - cmd_argv[j++] = 0; > - assert (j == nr_args); > - for (j = 0; j < (nr_args-1); j++) > - if (cmd_argv[j] == NULL) > - goto out_of_memory; > + virCommandAddArgList(cmd, priv->hostname, netcat ? netcat : "nc", > + "-U", (sockname ? sockname : > + (flags & VIR_CONNECT_RO > + ? LIBVIRTD_PRIV_UNIX_SOCKET_RO > + : LIBVIRTD_PRIV_UNIX_SOCKET)), NULL); > > priv->is_secure = 1; > } > @@ -818,9 +794,11 @@ doRemoteOpen (virConnectPtr conn, > goto failed; > } > > - if (virExec((const char**)cmd_argv, NULL, NULL, > - &pid, sv[1], &(sv[1]), &(errfd[1]), > - VIR_EXEC_CLEAR_CAPS) < 0) > + virCommandSetInputFD(cmd, sv[1]); > + virCommandSetOutputFD(cmd, &(sv[1])); > + virCommandSetErrorFD(cmd, &(errfd[1])); > + virCommandClearCaps(cmd); > + if (virCommandRunAsync(cmd, &pid) < 0) > goto failed; > > /* Parent continues here. */ > @@ -957,14 +935,7 @@ doRemoteOpen (virConnectPtr conn, > VIR_FREE(netcat); > VIR_FREE(username); > VIR_FREE(port); > - if (cmd_argv) { > - char **cmd_argv_ptr = cmd_argv; > - while (*cmd_argv_ptr) { > - VIR_FREE(*cmd_argv_ptr); > - cmd_argv_ptr++; > - } > - VIR_FREE(cmd_argv); > - } > + virCommandFree(cmd); > VIR_FREE(pkipath); > > return retcode; ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list