mirror of
https://git.code.sf.net/p/linux-ima/ima-evm-utils
synced 2025-07-12 02:00:42 +02:00
ima-evm-utils: Check for tsspcrread in runtime
instead of checking in build time as it's runtime dependency. Also log when tsspcrread not found to make debugging easier. We search for tsspcrread unless there is tss2-esys with Esys_PCR_Read(), thus pcr_none.c was dropped as unneeded. file_exist(), tst_get_path() and MIN() taken from LTP project. Signed-off-by: Petr Vorel <pvorel@suse.cz> [zohar@linux.ibm.com: added USE_FPRINTF definitions] Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
This commit is contained in:
75
src/utils.c
75
src/utils.c
@ -1,7 +1,82 @@
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
#ifndef MIN
|
||||
# define MIN(a, b) ({ \
|
||||
typeof(a) _a = (a); \
|
||||
typeof(b) _b = (b); \
|
||||
_a < _b ? _a : _b; \
|
||||
})
|
||||
#endif /* MIN */
|
||||
|
||||
static int file_exist(const char *path)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (!access(path, R_OK) && !stat(path, &st) && S_ISREG(st.st_mode))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_cmd_path(const char *prog_name, char *buf, size_t buf_len)
|
||||
{
|
||||
const char *path = (const char *)getenv("PATH");
|
||||
const char *start = path;
|
||||
const char *end;
|
||||
size_t size, ret;
|
||||
|
||||
if (path == NULL)
|
||||
return -1;
|
||||
|
||||
do {
|
||||
end = strchr(start, ':');
|
||||
|
||||
if (end != NULL)
|
||||
snprintf(buf, MIN(buf_len, (size_t) (end - start + 1)),
|
||||
"%s", start);
|
||||
else
|
||||
snprintf(buf, buf_len, "%s", start);
|
||||
|
||||
size = strlen(buf);
|
||||
|
||||
/*
|
||||
* "::" inside $PATH, $PATH ending with ':' or $PATH starting
|
||||
* with ':' should be expanded into current working directory.
|
||||
*/
|
||||
if (size == 0) {
|
||||
snprintf(buf, buf_len, ".");
|
||||
size = strlen(buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* If there is no '/' ad the end of path from $PATH add it.
|
||||
*/
|
||||
if (buf[size - 1] != '/')
|
||||
ret =
|
||||
snprintf(buf + size, buf_len - size, "/%s",
|
||||
prog_name);
|
||||
else
|
||||
ret =
|
||||
snprintf(buf + size, buf_len - size, "%s",
|
||||
prog_name);
|
||||
|
||||
if (buf_len - size > ret && file_exist(buf))
|
||||
return 0;
|
||||
|
||||
start = end + 1;
|
||||
|
||||
} while (end != NULL);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int hex_to_bin(char ch)
|
||||
{
|
||||
if ((ch >= '0') && (ch <= '9'))
|
||||
|
Reference in New Issue
Block a user