]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
vircgroupmock: Mock access() to some more files
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 22 Oct 2013 12:15:21 +0000 (13:15 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 22 Oct 2013 14:42:19 +0000 (15:42 +0100)
Currently, if access(path, mode) is invoked, we check if @path has this
special prefix SYSFS_PREFIX. If it does, we modify the path a bit and
call realaccess. If it doesn't we act just like a wrapper and call
realaccess directly. However, we are mocking fopen() as well. And as one
can clearly see there, fopen("/proc/cgroups") will succeed. Hence, we
have an error in our mocked access(): We need to check whether @path is
not equal to /proc/cgroups as it may not exists on real system we're
running however we definitely know how to fopen() it.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
tests/vircgroupmock.c

index adc171891f924ed9c123babda9f2dcabf907ac04..3167a5ced3d53cffddccdb3cd0a612f4ef2ff44a 100644 (file)
@@ -498,6 +498,14 @@ int access(const char *path, int mode)
         }
         ret = realaccess(newpath, mode);
         free(newpath);
+    } else if (STREQ(path, "/proc/cgroups") ||
+               STREQ(path, "/proc/self/cgroup")) {
+        /* These files are readable for all. */
+        ret = (mode == F_OK || mode == R_OK) ? 0 : -1;
+    } else if (STREQ(path, "/proc/mounts")) {
+        /* This one is accessible anytime for anybody. In fact, it's just
+         * a symlink to /proc/self/mounts. */
+        ret = 0;
     } else {
         ret = realaccess(path, mode);
     }