Re: [libvirt] [PATCH v2 4/8] daemon: support passing FDs from the calling process

2014-07-17 Thread Daniel P. Berrange
On Wed, Jul 16, 2014 at 08:29:58PM +0200, Martin Kletzander wrote:
 First FD is the RW unix socket to listen on, second one (if
 applicable) is the RO unix socket.
 
 Signed-off-by: Martin Kletzander mklet...@redhat.com
 ---
  daemon/libvirtd.c | 45 +++--
  1 file changed, 27 insertions(+), 18 deletions(-)
 
 diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
 index 4c926b3..d20aeae 100644
 --- a/daemon/libvirtd.c
 +++ b/daemon/libvirtd.c
 @@ -56,6 +56,7 @@
  #include virstring.h
  #include locking/lock_manager.h
  #include viraccessmanager.h
 +#include virutil.h
 
  #ifdef WITH_DRIVER_MODULES
  # include driver.h
 @@ -476,11 +477,19 @@ static int daemonSetupNetworking(virNetServerPtr srv,
  int unix_sock_ro_mask = 0;
  int unix_sock_rw_mask = 0;
 
 +unsigned int cur_fd = STDIN_FILENO + 1;

Shouldn't that be  STDERR not STDIN since the passed FDs start at 3
not 1.

 +unsigned int nfds = virGetListenFDs();
 +

Regards,
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@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH v2 4/8] daemon: support passing FDs from the calling process

2014-07-17 Thread Martin Kletzander

On Thu, Jul 17, 2014 at 09:40:12AM +0100, Daniel P. Berrange wrote:

On Wed, Jul 16, 2014 at 08:29:58PM +0200, Martin Kletzander wrote:

First FD is the RW unix socket to listen on, second one (if
applicable) is the RO unix socket.

Signed-off-by: Martin Kletzander mklet...@redhat.com
---
 daemon/libvirtd.c | 45 +++--
 1 file changed, 27 insertions(+), 18 deletions(-)

diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index 4c926b3..d20aeae 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -56,6 +56,7 @@
 #include virstring.h
 #include locking/lock_manager.h
 #include viraccessmanager.h
+#include virutil.h

 #ifdef WITH_DRIVER_MODULES
 # include driver.h
@@ -476,11 +477,19 @@ static int daemonSetupNetworking(virNetServerPtr srv,
 int unix_sock_ro_mask = 0;
 int unix_sock_rw_mask = 0;

+unsigned int cur_fd = STDIN_FILENO + 1;


Shouldn't that be  STDERR not STDIN since the passed FDs start at 3
not 1.



Oh, yes, I tried that with the value 3 and changed it right before
sending, my bad.


+unsigned int nfds = virGetListenFDs();
+


Regards,
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 :|


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

[libvirt] [PATCH v2 4/8] daemon: support passing FDs from the calling process

2014-07-16 Thread Martin Kletzander
First FD is the RW unix socket to listen on, second one (if
applicable) is the RO unix socket.

Signed-off-by: Martin Kletzander mklet...@redhat.com
---
 daemon/libvirtd.c | 45 +++--
 1 file changed, 27 insertions(+), 18 deletions(-)

diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index 4c926b3..d20aeae 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -56,6 +56,7 @@
 #include virstring.h
 #include locking/lock_manager.h
 #include viraccessmanager.h
+#include virutil.h

 #ifdef WITH_DRIVER_MODULES
 # include driver.h
@@ -476,11 +477,19 @@ static int daemonSetupNetworking(virNetServerPtr srv,
 int unix_sock_ro_mask = 0;
 int unix_sock_rw_mask = 0;

+unsigned int cur_fd = STDIN_FILENO + 1;
+unsigned int nfds = virGetListenFDs();
+
 if (config-unix_sock_group) {
 if (virGetGroupID(config-unix_sock_group, unix_sock_gid)  0)
 return -1;
 }

+if (nfds  nfds  ((int)!!sock_path + (int)!!sock_path_ro)) {
+VIR_ERROR(_(Too many (%u) FDs passed from caller), nfds);
+return -1;
+}
+
 if (virStrToLong_i(config-unix_sock_ro_perms, NULL, 8, 
unix_sock_ro_mask) != 0) {
 VIR_ERROR(_(Failed to parse mode '%s'), config-unix_sock_ro_perms);
 goto error;
@@ -491,30 +500,30 @@ static int daemonSetupNetworking(virNetServerPtr srv,
 goto error;
 }

-VIR_DEBUG(Registering unix socket %s, sock_path);
-if (!(svc = virNetServerServiceNewUNIX(sock_path,
-   unix_sock_rw_mask,
-   unix_sock_gid,
-   config-auth_unix_rw,
+if (!(svc = virNetServerServiceNewFDOrUNIX(sock_path,
+   unix_sock_rw_mask,
+   unix_sock_gid,
+   config-auth_unix_rw,
 #if WITH_GNUTLS
-   NULL,
+   NULL,
 #endif
-   false,
-   config-max_queued_clients,
-   config-max_client_requests)))
+   false,
+   config-max_queued_clients,
+   config-max_client_requests,
+   nfds, cur_fd)))
 goto error;
 if (sock_path_ro) {
-VIR_DEBUG(Registering unix socket %s, sock_path_ro);
-if (!(svcRO = virNetServerServiceNewUNIX(sock_path_ro,
- unix_sock_ro_mask,
- unix_sock_gid,
- config-auth_unix_ro,
+if (!(svcRO = virNetServerServiceNewFDOrUNIX(sock_path_ro,
+ unix_sock_ro_mask,
+ unix_sock_gid,
+ config-auth_unix_ro,
 #if WITH_GNUTLS
- NULL,
+ NULL,
 #endif
- true,
- config-max_queued_clients,
- config-max_client_requests)))
+ true,
+ 
config-max_queued_clients,
+ 
config-max_client_requests,
+ nfds, cur_fd)))
 goto error;
 }

-- 
2.0.0

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