gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnunet] 01/03: introduce GNUNET_OS_get_suid_binary_path


From: gnunet
Subject: [GNUnet-SVN] [gnunet] 01/03: introduce GNUNET_OS_get_suid_binary_path
Date: Sat, 29 Jun 2019 13:00:53 +0200

This is an automated email from the git hooks/post-receive script.

lurchi pushed a commit to branch master
in repository gnunet.

commit 8073ee2c2c7d76447790907e1e9af099c5011d5b
Author: lurchi <address@hidden>
AuthorDate: Sat Jun 29 12:56:33 2019 +0200

    introduce GNUNET_OS_get_suid_binary_path
---
 src/include/gnunet_os_lib.h | 17 ++++++++++++++++
 src/util/os_installation.c  | 48 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+)

diff --git a/src/include/gnunet_os_lib.h b/src/include/gnunet_os_lib.h
index 285dfb68d..6eb4ce5eb 100644
--- a/src/include/gnunet_os_lib.h
+++ b/src/include/gnunet_os_lib.h
@@ -317,6 +317,23 @@ char *
 GNUNET_OS_get_libexec_binary_path (const char *progname);
 
 
+/**
+ * Given the name of a helper, service or daemon binary construct the full
+ * path to the binary using the SUID_BINARY_PATH in the PATHS section of the
+ * configuration. If that option is not present, fall back to
+ * GNUNET_OS_get_libexec_binary_path. If @a progname is an absolute path, a
+ * copy of this path is returned.
+ *
+ * @param cfg configuration to inspect
+ * @param progname name of the binary
+ * @return full path to the binary, if possible, a copy of @a progname
+ *         otherwise
+ */
+char *
+GNUNET_OS_get_suid_binary_path (const struct GNUNET_CONFIGURATION_Handle *cfg,
+                                const char *progname);
+
+
 /**
  * Callback function invoked for each interface found.
  *
diff --git a/src/util/os_installation.c b/src/util/os_installation.c
index f2d24f85e..e0568e6dd 100644
--- a/src/util/os_installation.c
+++ b/src/util/os_installation.c
@@ -804,6 +804,54 @@ GNUNET_OS_get_libexec_binary_path (const char *progname)
 }
 
 
+/**
+ * Given the name of a helper, service or daemon binary construct the full
+ * path to the binary using the SUID_BINARY_PATH in the PATHS section of the
+ * configuration. If that option is not present, fall back to
+ * GNUNET_OS_get_libexec_binary_path. If @a progname is an absolute path, a
+ * copy of this path is returned.
+ *
+ * @param cfg configuration to inspect
+ * @param progname name of the binary
+ * @return full path to the binary, if possible, a copy of @a progname
+ *         otherwise
+ */
+char *
+GNUNET_OS_get_suid_binary_path (const struct GNUNET_CONFIGURATION_Handle *cfg,
+                                const char *progname)
+{
+  static const char *cache;
+  char *binary = NULL;
+  char *path = NULL;
+  size_t path_len;
+
+  if (GNUNET_YES ==
+       GNUNET_STRINGS_path_is_absolute (progname,
+                                        GNUNET_NO,
+                                        NULL, NULL))
+  {
+    return GNUNET_strdup (progname);
+  }
+  if (NULL != cache)
+    path = cache;
+  else
+    GNUNET_CONFIGURATION_get_value_string (cfg,
+                                           "PATHS",
+                                           "SUID_BINARY_PATH",
+                                           &path);
+  if (NULL == path)
+    return GNUNET_OS_get_libexec_binary_path (progname);
+  path_len = strlen (path);
+  GNUNET_asprintf (&binary,
+                  "%s%s%s",
+                  path,
+                   (path[path_len - 1] == DIR_SEPARATOR) ? "" : 
DIR_SEPARATOR_STR,
+                  progname);
+  cache = path;
+  return binary;
+}
+
+
 /**
  * Check whether an executable exists and possibly if the suid bit is
  * set on the file.  Attempts to find the file using the current PATH

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]