提交 01cf7a1b 编写于 作者: S Stefan Berger 提交者: Daniel P. Berrangé

tpm: Check whether previously found executables were updated

Check whether previously found executables were updated and if
so look for them again. This helps to use updated features of
swtpm and its tools upon updating them.
Signed-off-by: NStefan Berger <stefanb@linux.ibm.com>
Reviewed-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
上级 2fcbe9f9
......@@ -20,6 +20,7 @@
#include <config.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
......
......@@ -78,8 +78,13 @@ virTPMCreateCancelPath(const char *devpath)
*/
static virMutex swtpm_tools_lock = VIR_MUTEX_INITIALIZER;
static char *swtpm_path;
static struct stat swtpm_stat;
static char *swtpm_setup;
static struct stat swtpm_setup_stat;
static char *swtpm_ioctl;
static struct stat swtpm_ioctl_stat;
char *
virTPMGetSwtpm(void)
......@@ -139,18 +144,22 @@ virTPMEmulatorInit(void)
static const struct {
const char *name;
char **path;
struct stat *stat;
} prgs[] = {
{
.name = "swtpm",
.path = &swtpm_path,
.stat = &swtpm_stat,
},
{
.name = "swtpm_setup",
.path = &swtpm_setup,
.stat = &swtpm_setup_stat,
},
{
.name = "swtpm_ioctl",
.path = &swtpm_ioctl,
.stat = &swtpm_ioctl_stat,
}
};
size_t i;
......@@ -160,8 +169,24 @@ virTPMEmulatorInit(void)
for (i = 0; i < ARRAY_CARDINALITY(prgs); i++) {
VIR_AUTOFREE(char *) path = NULL;
bool findit = *prgs[i].path == NULL;
struct stat statbuf;
char *tmp;
if (!findit) {
/* has executables changed? */
if (stat(*prgs[i].path, &statbuf) < 0)
findit = true;
if (!findit &&
&statbuf.st_mtime != &prgs[i].stat->st_mtime)
findit = true;
}
if (findit) {
tmp = *prgs[i].path;
VIR_FREE(tmp);
*prgs[i].path = NULL;
path = virFindFileInPath(prgs[i].name);
if (!path) {
virReportSystemError(ENOENT,
......@@ -175,7 +200,13 @@ virTPMEmulatorInit(void)
path);
goto cleanup;
}
if (stat(path, prgs[i].stat) < 0) {
virReportSystemError(errno,
_("Could not stat %s"), path);
goto cleanup;
}
*prgs[i].path = path;
path = NULL;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册