From: John Ferlan Date: Wed, 30 Sep 2015 21:25:34 +0000 (-0400) Subject: virfile: Add extra check for direct delete in virFileRemove X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c6b32d6801e17fddb2974859145efc309c0894c9;p=libvirt.git virfile: Add extra check for direct delete in virFileRemove Unlike create options, if the file to be removed is already in the pool, then the uid/gid will come from the pool. If it's the same as the currently running process, then just do the unlink/rmdir directly rather than going through the fork processing unnecessarily --- diff --git a/src/util/virfile.c b/src/util/virfile.c index 2332589d0c..3d7efdc15e 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -2316,10 +2316,11 @@ virFileRemove(const char *path, int ngroups; /* If not running as root or if a non explicit uid/gid was being used for - * the file/volume, then use unlink directly + * the file/volume or the explicit uid/gid matches, then use unlink directly */ if ((geteuid() != 0) || - ((uid == (uid_t) -1) && (gid == (gid_t) -1))) { + ((uid == (uid_t) -1) && (gid == (gid_t) -1)) || + (uid == geteuid() && gid == getegid())) { if (virFileIsDir(path)) return rmdir(path); else