]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix hardcoded limit on client requests in RPC code
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 30 Jun 2011 10:45:55 +0000 (11:45 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 30 Jun 2011 17:04:01 +0000 (18:04 +0100)
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

daemon/libvirtd.c
src/rpc/virnetserverclient.c
src/rpc/virnetserverclient.h
src/rpc/virnetserverservice.c
src/rpc/virnetserverservice.h

index d1f80e4594c1da0aaac4f77f7fc64aeab07b3b0a..118aa92fa6951f8694ef8827a673dcaff22bde5f 100644 (file)
@@ -486,6 +486,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
                                            unix_sock_gid,
                                            config->auth_unix_rw,
                                            false,
+                                           config->max_client_requests,
                                            NULL)))
         goto error;
     if (sock_path_ro &&
@@ -494,6 +495,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
                                              unix_sock_gid,
                                              config->auth_unix_ro,
                                              true,
+                                             config->max_client_requests,
                                              NULL)))
         goto error;
 
@@ -509,6 +511,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
                                                      config->tcp_port,
                                                      config->auth_tcp,
                                                      false,
+                                                     config->max_client_requests,
                                                      NULL)))
                 goto error;
 
@@ -543,6 +546,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
                                             config->tls_port,
                                             config->auth_tls,
                                             false,
+                                            config->max_client_requests,
                                             ctxt))) {
                 virNetTLSContextFree(ctxt);
                 goto error;
index 57a3446d39ef409976b486cededfce38bd39fb8d..aac4c3c3fe887bff7fc161964919de07b280adf4 100644 (file)
@@ -282,6 +282,7 @@ virNetServerClientCheckAccess(virNetServerClientPtr client)
 virNetServerClientPtr virNetServerClientNew(virNetSocketPtr sock,
                                             int auth,
                                             bool readonly,
+                                            size_t nrequests_max,
                                             virNetTLSContextPtr tls)
 {
     virNetServerClientPtr client;
@@ -301,7 +302,7 @@ virNetServerClientPtr virNetServerClientNew(virNetSocketPtr sock,
     client->auth = auth;
     client->readonly = readonly;
     client->tlsCtxt = tls;
-    client->nrequests_max = 10; /* XXX */
+    client->nrequests_max = nrequests_max;
 
     if (tls)
         virNetTLSContextRef(tls);
index 09948901286f7ccf8f271fde2dc722f6dc44c325..66510c31c5b9ad1a710d0284f9a22143451e2699 100644 (file)
@@ -41,6 +41,7 @@ typedef int (*virNetServerClientFilterFunc)(virNetServerClientPtr client,
 virNetServerClientPtr virNetServerClientNew(virNetSocketPtr sock,
                                             int auth,
                                             bool readonly,
+                                            size_t nrequests_max,
                                             virNetTLSContextPtr tls);
 
 int virNetServerClientAddFilter(virNetServerClientPtr client,
index e5a47b07539a4829814b54e701a8296c327ded9e..e84f72c918529926a6b846dd7853b1218bce4667 100644 (file)
@@ -39,6 +39,7 @@ struct _virNetServerService {
 
     int auth;
     bool readonly;
+    size_t nrequests_client_max;
 
     virNetTLSContextPtr tls;
 
@@ -65,6 +66,7 @@ static void virNetServerServiceAccept(virNetSocketPtr sock,
     if (!(client = virNetServerClientNew(clientsock,
                                          svc->auth,
                                          svc->readonly,
+                                         svc->nrequests_client_max,
                                          svc->tls)))
         goto error;
 
@@ -88,6 +90,7 @@ virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
                                                  const char *service,
                                                  int auth,
                                                  bool readonly,
+                                                 size_t nrequests_client_max,
                                                  virNetTLSContextPtr tls)
 {
     virNetServerServicePtr svc;
@@ -99,6 +102,7 @@ virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
     svc->refs = 1;
     svc->auth = auth;
     svc->readonly = readonly;
+    svc->nrequests_client_max = nrequests_client_max;
     svc->tls = tls;
     if (tls)
         virNetTLSContextRef(tls);
@@ -138,6 +142,7 @@ virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
                                                   gid_t grp,
                                                   int auth,
                                                   bool readonly,
+                                                  size_t nrequests_client_max,
                                                   virNetTLSContextPtr tls)
 {
     virNetServerServicePtr svc;
@@ -149,6 +154,7 @@ virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
     svc->refs = 1;
     svc->auth = auth;
     svc->readonly = readonly;
+    svc->nrequests_client_max = nrequests_client_max;
     svc->tls = tls;
     if (tls)
         virNetTLSContextRef(tls);
index 378fa0b32c55d4349ff3a8766bf9341618b00650..935759821b24d7d3d882c7f48f2c58be5281490a 100644 (file)
@@ -40,12 +40,14 @@ virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
                                                  const char *service,
                                                  int auth,
                                                  bool readonly,
+                                                 size_t nrequests_client_max,
                                                  virNetTLSContextPtr tls);
 virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
                                                   mode_t mask,
                                                   gid_t grp,
                                                   int auth,
                                                   bool readonly,
+                                                  size_t nrequests_client_max,
                                                   virNetTLSContextPtr tls);
 
 int virNetServerServiceGetPort(virNetServerServicePtr svc);