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
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