summaryrefslogtreecommitdiff
path: root/util/libreboot-utils/lib
diff options
context:
space:
mode:
Diffstat (limited to 'util/libreboot-utils/lib')
-rw-r--r--util/libreboot-utils/lib/file.c23
-rw-r--r--util/libreboot-utils/lib/mkhtemp.c8
-rw-r--r--util/libreboot-utils/lib/string.c50
3 files changed, 42 insertions, 39 deletions
diff --git a/util/libreboot-utils/lib/file.c b/util/libreboot-utils/lib/file.c
index efc23ba9..0385ebbb 100644
--- a/util/libreboot-utils/lib/file.c
+++ b/util/libreboot-utils/lib/file.c
@@ -521,6 +521,8 @@ fs_dirname_basename(const char *path,
char *buf = NULL;
char *slash;
size_t len;
+ const char *d = NULL;
+ const char *b = NULL;
errno = 0;
if (if_err(path == NULL || dir == NULL || base == NULL, EFAULT))
@@ -539,22 +541,27 @@ fs_dirname_basename(const char *path,
if (slash) {
*slash = '\0';
- *dir = buf;
- *base = slash + 1;
+ d = buf;
+ b = slash + 1;
- if (**dir == '\0') {
- (*dir)[0] = '/';
- (*dir)[1] = '\0';
- }
+ if (*d == '\0')
+ d = "/";
} else if (allow_relative) {
- sdup(".", PATH_MAX, dir);
- *base = buf;
+ d = ".";
+ b = buf;
} else {
free_and_set_null(&buf);
goto err;
}
+ if (dup_pair(dir, d, base, b) < 0) {
+ free_and_set_null(&buf);
+ goto err;
+ }
+
+ free_and_set_null(&buf);
+
reset_caller_errno(0);
return 0;
err:
diff --git a/util/libreboot-utils/lib/mkhtemp.c b/util/libreboot-utils/lib/mkhtemp.c
index d9411104..d394ae73 100644
--- a/util/libreboot-utils/lib/mkhtemp.c
+++ b/util/libreboot-utils/lib/mkhtemp.c
@@ -195,7 +195,11 @@ env_tmpdir(int bypass_all_sticky_checks, char **tmpdir,
bypass_all_sticky_checks))
goto err;
- rval = t;
+ rval = NULL;
+ if (t != NULL) {
+ if (sdup(t, PATH_MAX, &rval) == NULL)
+ goto err;
+ }
goto out;
}
@@ -547,7 +551,7 @@ mkhtemp_try_create(int dirfd,
/* try O_TMPFILE fast path */
if (mkhtemp_tmpfile_linux(dirfd,
st_dir_first, fname_copy,
- p, xc, fd, st) == 0) {
+ p, xc, fd, st) >= 0) {
errno = saved_errno;
rval = 1;
diff --git a/util/libreboot-utils/lib/string.c b/util/libreboot-utils/lib/string.c
index 5e0b4c33..7388cf35 100644
--- a/util/libreboot-utils/lib/string.c
+++ b/util/libreboot-utils/lib/string.c
@@ -270,6 +270,27 @@ out:
return *rval;
}
+int
+dup_pair(char **dir, const char *d,
+ char **base, const char *b)
+{
+ char *dtmp = NULL;
+ char *btmp = NULL;
+
+ if (d && sdup(d, PATH_MAX, &dtmp) == NULL)
+ return -1;
+
+ if (b && sdup(b, PATH_MAX, &btmp) == NULL) {
+ free(dtmp);
+ return -1;
+ }
+
+ *dir = dtmp;
+ *base = btmp;
+
+ return 0;
+}
+
/* strict word-based strdup */
char *
sdup(const char *s,
@@ -620,32 +641,3 @@ lbsetprogname(char *argv0)
return progname;
}
-
-/* https://man.openbsd.org/pledge.2
- https://man.openbsd.org/unveil.2 */
-int
-xpledgex(const char *promises, const char *execpromises)
-{
- int saved_errno = errno;
- (void) promises, (void) execpromises, (void) saved_errno;
- errno = 0;
-#ifdef __OpenBSD__
- if (pledge(promises, execpromises) == -1)
- exitf("pledge");
-#endif
- reset_caller_errno(0);
- return 0;
-}
-int
-xunveilx(const char *path, const char *permissions)
-{
- int saved_errno = errno;
- (void) path, (void) permissions, (void) saved_errno;
- errno = 0;
-#ifdef __OpenBSD__
- if (pledge(promises, execpromises) == -1)
- exitf("pledge");
-#endif
- reset_caller_errno(0);
- return 0;
-}