exit(EXIT_FAILURE);
}
+ virUpdateSelfLastChanged(argv[0]);
+
if (strstr(argv[0], "lt-libvirtd") ||
strstr(argv[0], "/daemon/.libs/libvirtd")) {
char *tmp = strrchr(argv[0], '/');
goto cleanup;
}
+ virUpdateSelfLastChanged(modfile);
+
handle = dlopen(modfile, RTLD_NOW | RTLD_GLOBAL);
if (!handle) {
VIR_ERROR(_("failed to load module %s %s"), modfile, dlerror());
virGetGroupList;
virGetGroupName;
virGetHostname;
+virGetSelfLastChanged;
virGetUnprivSGIOSysfsPath;
virGetUserCacheDirectory;
virGetUserConfigDirectory;
virSetUIDGID;
virSetUIDGIDWithCaps;
virStrIsPrint;
+virUpdateSelfLastChanged;
virValidateWWN;
{
return getuid() != geteuid();
}
+
+
+static time_t selfLastChanged;
+
+time_t virGetSelfLastChanged(void)
+{
+ return selfLastChanged;
+}
+
+
+void virUpdateSelfLastChanged(const char *path)
+{
+ struct stat sb;
+
+ if (stat(path, &sb) < 0)
+ return;
+
+ if (sb.st_ctime > selfLastChanged) {
+ VIR_DEBUG("Setting self last changed to %lld for '%s'",
+ (long long)sb.st_ctime, path);
+ selfLastChanged = sb.st_ctime;
+ }
+}
const char *virGetEnvAllowSUID(const char *name);
bool virIsSUID(void);
+
+time_t virGetSelfLastChanged(void);
+void virUpdateSelfLastChanged(const char *path);
+
#endif /* __VIR_UTIL_H__ */