[libvirt] [PATCH 3/6] Support changing UNIX socket owner in virNetSocketNewListenUNIX

Jiri Denemark jdenemar at redhat.com
Mon Aug 15 07:58:13 UTC 2011


This patch allows owner's UID to be changed as well.
---
 src/rpc/virnetserverservice.c |    2 +-
 src/rpc/virnetsocket.c        |    7 ++++---
 src/rpc/virnetsocket.h        |    1 +
 tests/virnetsockettest.c      |    4 ++--
 4 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/rpc/virnetserverservice.c b/src/rpc/virnetserverservice.c
index e63603f..9f82a8d 100644
--- a/src/rpc/virnetserverservice.c
+++ b/src/rpc/virnetserverservice.c
@@ -182,7 +182,7 @@ virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
 
     if (virNetSocketNewListenUNIX(path,
                                   mask,
-                                  grp,
+                                  -1, grp,
                                   &svc->socks[0]) < 0)
         goto error;
 
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
index c19dcfa..23ec5ca 100644
--- a/src/rpc/virnetsocket.c
+++ b/src/rpc/virnetsocket.c
@@ -302,6 +302,7 @@ error:
 #if HAVE_SYS_UN_H
 int virNetSocketNewListenUNIX(const char *path,
                               mode_t mask,
+                              uid_t user,
                               gid_t grp,
                               virNetSocketPtr *retsock)
 {
@@ -344,10 +345,10 @@ int virNetSocketNewListenUNIX(const char *path,
     /* chown() doesn't work for abstract sockets but we use them only
      * if libvirtd runs unprivileged
      */
-    if (grp != 0 && chown(path, -1, grp)) {
+    if (grp != 0 && chown(path, user, grp)) {
         virReportSystemError(errno,
-                             _("Failed to change group ID of '%s' to %u"),
-                             path, (unsigned int) grp);
+                             _("Failed to change ownership of '%s' to %d:%d"),
+                             path, (int) user, (int) grp);
         goto error;
     }
 
diff --git a/src/rpc/virnetsocket.h b/src/rpc/virnetsocket.h
index 24110a6..f7e5ebb 100644
--- a/src/rpc/virnetsocket.h
+++ b/src/rpc/virnetsocket.h
@@ -47,6 +47,7 @@ int virNetSocketNewListenTCP(const char *nodename,
 
 int virNetSocketNewListenUNIX(const char *path,
                               mode_t mask,
+                              uid_t user,
                               gid_t grp,
                               virNetSocketPtr *addr);
 
diff --git a/tests/virnetsockettest.c b/tests/virnetsockettest.c
index fba7e15..fae15a3 100644
--- a/tests/virnetsockettest.c
+++ b/tests/virnetsockettest.c
@@ -214,7 +214,7 @@ static int testSocketUNIXAccept(const void *data ATTRIBUTE_UNUSED)
         }
     }
 
-    if (virNetSocketNewListenUNIX(path, 0700, getgid(), &lsock) < 0)
+    if (virNetSocketNewListenUNIX(path, 0700, -1, getgid(), &lsock) < 0)
         goto cleanup;
 
     if (virNetSocketListen(lsock, 0) < 0)
@@ -263,7 +263,7 @@ static int testSocketUNIXAddrs(const void *data ATTRIBUTE_UNUSED)
         }
     }
 
-    if (virNetSocketNewListenUNIX(path, 0700, getgid(), &lsock) < 0)
+    if (virNetSocketNewListenUNIX(path, 0700, -1, getgid(), &lsock) < 0)
         goto cleanup;
 
     if (STRNEQ(virNetSocketLocalAddrString(lsock), "127.0.0.1;0")) {
-- 
1.7.6




More information about the libvir-list mailing list