提交 27a7081c 编写于 作者: M Martin Kletzander

daemon: support passing FDs from the calling process

First FD is the RW unix socket to listen on, second one (if
applicable) is the RO unix socket.
Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
上级 e1f2ec67
......@@ -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"
......@@ -481,11 +482,19 @@ static int daemonSetupNetworking(virNetServerPtr srv,
int unix_sock_ro_mask = 0;
int unix_sock_rw_mask = 0;
unsigned int cur_fd = STDERR_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;
......@@ -496,30 +505,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;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册