Fix hardcoded limit on client requests in RPC code

The virNetServerClient object had a hardcoded limit of 10 requests
per client. Extend constructor to allow it to be passed in as a
configurable variable. Wire this up to the 'max_client_requests'
config parameter in libvirtd

* daemon/libvirtd.c: Pass max_client_requests into services
* src/rpc/virnetserverservice.c, src/rpc/virnetserverservice.h: Pass
  nrequests_client_max to clients
* src/rpc/virnetserverclient.c, src/rpc/virnetserverclient.h: Allow
  configurable request limit
This commit is contained in:
Daniel P. Berrange 2011-06-30 11:45:55 +01:00
parent e5b9f355b0
commit 27111b350f
5 changed files with 15 additions and 1 deletions

View File

@ -486,6 +486,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
unix_sock_gid, unix_sock_gid,
config->auth_unix_rw, config->auth_unix_rw,
false, false,
config->max_client_requests,
NULL))) NULL)))
goto error; goto error;
if (sock_path_ro && if (sock_path_ro &&
@ -494,6 +495,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
unix_sock_gid, unix_sock_gid,
config->auth_unix_ro, config->auth_unix_ro,
true, true,
config->max_client_requests,
NULL))) NULL)))
goto error; goto error;
@ -509,6 +511,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
config->tcp_port, config->tcp_port,
config->auth_tcp, config->auth_tcp,
false, false,
config->max_client_requests,
NULL))) NULL)))
goto error; goto error;
@ -543,6 +546,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
config->tls_port, config->tls_port,
config->auth_tls, config->auth_tls,
false, false,
config->max_client_requests,
ctxt))) { ctxt))) {
virNetTLSContextFree(ctxt); virNetTLSContextFree(ctxt);
goto error; goto error;

View File

@ -282,6 +282,7 @@ virNetServerClientCheckAccess(virNetServerClientPtr client)
virNetServerClientPtr virNetServerClientNew(virNetSocketPtr sock, virNetServerClientPtr virNetServerClientNew(virNetSocketPtr sock,
int auth, int auth,
bool readonly, bool readonly,
size_t nrequests_max,
virNetTLSContextPtr tls) virNetTLSContextPtr tls)
{ {
virNetServerClientPtr client; virNetServerClientPtr client;
@ -301,7 +302,7 @@ virNetServerClientPtr virNetServerClientNew(virNetSocketPtr sock,
client->auth = auth; client->auth = auth;
client->readonly = readonly; client->readonly = readonly;
client->tlsCtxt = tls; client->tlsCtxt = tls;
client->nrequests_max = 10; /* XXX */ client->nrequests_max = nrequests_max;
if (tls) if (tls)
virNetTLSContextRef(tls); virNetTLSContextRef(tls);

View File

@ -41,6 +41,7 @@ typedef int (*virNetServerClientFilterFunc)(virNetServerClientPtr client,
virNetServerClientPtr virNetServerClientNew(virNetSocketPtr sock, virNetServerClientPtr virNetServerClientNew(virNetSocketPtr sock,
int auth, int auth,
bool readonly, bool readonly,
size_t nrequests_max,
virNetTLSContextPtr tls); virNetTLSContextPtr tls);
int virNetServerClientAddFilter(virNetServerClientPtr client, int virNetServerClientAddFilter(virNetServerClientPtr client,

View File

@ -39,6 +39,7 @@ struct _virNetServerService {
int auth; int auth;
bool readonly; bool readonly;
size_t nrequests_client_max;
virNetTLSContextPtr tls; virNetTLSContextPtr tls;
@ -65,6 +66,7 @@ static void virNetServerServiceAccept(virNetSocketPtr sock,
if (!(client = virNetServerClientNew(clientsock, if (!(client = virNetServerClientNew(clientsock,
svc->auth, svc->auth,
svc->readonly, svc->readonly,
svc->nrequests_client_max,
svc->tls))) svc->tls)))
goto error; goto error;
@ -88,6 +90,7 @@ virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
const char *service, const char *service,
int auth, int auth,
bool readonly, bool readonly,
size_t nrequests_client_max,
virNetTLSContextPtr tls) virNetTLSContextPtr tls)
{ {
virNetServerServicePtr svc; virNetServerServicePtr svc;
@ -99,6 +102,7 @@ virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
svc->refs = 1; svc->refs = 1;
svc->auth = auth; svc->auth = auth;
svc->readonly = readonly; svc->readonly = readonly;
svc->nrequests_client_max = nrequests_client_max;
svc->tls = tls; svc->tls = tls;
if (tls) if (tls)
virNetTLSContextRef(tls); virNetTLSContextRef(tls);
@ -138,6 +142,7 @@ virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
gid_t grp, gid_t grp,
int auth, int auth,
bool readonly, bool readonly,
size_t nrequests_client_max,
virNetTLSContextPtr tls) virNetTLSContextPtr tls)
{ {
virNetServerServicePtr svc; virNetServerServicePtr svc;
@ -149,6 +154,7 @@ virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
svc->refs = 1; svc->refs = 1;
svc->auth = auth; svc->auth = auth;
svc->readonly = readonly; svc->readonly = readonly;
svc->nrequests_client_max = nrequests_client_max;
svc->tls = tls; svc->tls = tls;
if (tls) if (tls)
virNetTLSContextRef(tls); virNetTLSContextRef(tls);

View File

@ -40,12 +40,14 @@ virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
const char *service, const char *service,
int auth, int auth,
bool readonly, bool readonly,
size_t nrequests_client_max,
virNetTLSContextPtr tls); virNetTLSContextPtr tls);
virNetServerServicePtr virNetServerServiceNewUNIX(const char *path, virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
mode_t mask, mode_t mask,
gid_t grp, gid_t grp,
int auth, int auth,
bool readonly, bool readonly,
size_t nrequests_client_max,
virNetTLSContextPtr tls); virNetTLSContextPtr tls);
int virNetServerServiceGetPort(virNetServerServicePtr svc); int virNetServerServiceGetPort(virNetServerServicePtr svc);