On 10/20/2011 08:52 AM, Michal Privoznik wrote:
This function checks if a given path is accessible under
given uid and gid.
---
  src/util/util.c |   78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
  src/util/util.h |    3 ++
  2 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/src/util/util.c b/src/util/util.c
index 01146f5..2020415 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -671,6 +671,72 @@ virFileIsExecutable(const char *file)
  }

  #ifndef WIN32
+/* Check that a file is accessible under certain
+ * user&  gid.
+ * @mode can be R_OK, W_OK, X_OK or F_OK.

More accurately:

@mode can be F_OK, or a bitwise combination of R_OK, W_OK, and X_OK.

+ * see 'man accesss' for more details.

s/accesss/access/

+ * Returns 0 on success, -errno on fail,
+ *>0 on signaled child.
+ */
+int
+virFileAccessibleAs(const char *path, int mode,
+                    uid_t uid, gid_t gid)
+{
+    pid_t pid;
+    int waitret, status, ret = 0;
+    int forkRet;
+
+    forkRet = virFork(&pid);

Should you take a shortcut that if uid and gid match geteuid()/getegid(), then we avoid the fork()?

--
Eric Blake   ebl...@redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

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

Reply via email to