[systemd-commits] 3 commits - configure.ac src/run src/shared src/test

Zbigniew Jędrzejewski-Szmek zbyszek at kemper.freedesktop.org
Sat Nov 22 15:12:52 PST 2014


 configure.ac              |    3 ++-
 src/run/run.c             |    7 +++++--
 src/shared/architecture.h |    4 ++--
 src/shared/missing.h      |   26 ++++++++++++++++++++++++++
 src/shared/path-util.c    |    6 +++---
 src/shared/path-util.h    |    2 +-
 src/test/test-path-util.c |   16 +++++++++-------
 7 files changed, 48 insertions(+), 16 deletions(-)

New commits:
commit b63bd1090bf6ce79b6757c3f8f4172a367854577
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sat Nov 22 18:00:07 2014 -0500

    Do not check for existence of remote binaries
    
    systemd-run would fail when run with -M or -H and an absolute path,
    if this path did not exists locally. Allow it to continue, since we
    don't have a nice way of checking if the binary exists remotely.
    
    The case where -M or -H is used and a local path is unchanged, and we
    still iterate over $PATH to find the binary. We need to convert to an
    absolute path, and we don't have a nice mechanism to check remotely,
    so we assume that the binary will be located in the same place locally
    and remotely.
    
    http://lists.freedesktop.org/archives/systemd-devel/2014-November/025418.html

diff --git a/src/run/run.c b/src/run/run.c
index e3b6293..dcefb5c 100644
--- a/src/run/run.c
+++ b/src/run/run.c
@@ -573,9 +573,12 @@ int main(int argc, char* argv[]) {
         if (r <= 0)
                 goto finish;
 
-        r = find_binary(argv[optind], &command);
+        r = find_binary(argv[optind], arg_transport == BUS_TRANSPORT_LOCAL, &command);
         if (r < 0) {
-                log_error("Failed to find executable %s: %s", argv[optind], strerror(-r));
+                log_error("Failed to find executable %s%s: %s",
+                          argv[optind],
+                          arg_transport == BUS_TRANSPORT_LOCAL ? "" : " on local system",
+                          strerror(-r));
                 goto finish;
         }
         argv[optind] = command;
diff --git a/src/shared/path-util.c b/src/shared/path-util.c
index 67566bc..be03695 100644
--- a/src/shared/path-util.c
+++ b/src/shared/path-util.c
@@ -563,11 +563,11 @@ int path_is_os_tree(const char *path) {
         return r >= 0;
 }
 
-int find_binary(const char *name, char **filename) {
+int find_binary(const char *name, bool local, char **filename) {
         assert(name);
 
         if (is_path(name)) {
-                if (access(name, X_OK) < 0)
+                if (local && access(name, X_OK) < 0)
                         return -errno;
 
                 if (filename) {
@@ -657,7 +657,7 @@ int fsck_exists(const char *fstype) {
 
         checker = strappenda("fsck.", fstype);
 
-        r = find_binary(checker, &p);
+        r = find_binary(checker, true, &p);
         if (r < 0)
                 return r;
 
diff --git a/src/shared/path-util.h b/src/shared/path-util.h
index 8d171a5..bd0d324 100644
--- a/src/shared/path-util.h
+++ b/src/shared/path-util.h
@@ -55,7 +55,7 @@ int path_is_mount_point(const char *path, bool allow_symlink);
 int path_is_read_only_fs(const char *path);
 int path_is_os_tree(const char *path);
 
-int find_binary(const char *name, char **filename);
+int find_binary(const char *name, bool local, char **filename);
 
 bool paths_check_timestamp(const char* const* paths, usec_t *paths_ts_usec, bool update);
 
diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c
index 82090ce..4ebbfa9 100644
--- a/src/test/test-path-util.c
+++ b/src/test/test-path-util.c
@@ -85,29 +85,30 @@ static void test_path(void) {
         }
 }
 
-static void test_find_binary(const char *self) {
+static void test_find_binary(const char *self, bool local) {
         char *p;
 
-        assert_se(find_binary("/bin/sh", &p) == 0);
+        assert_se(find_binary("/bin/sh", local, &p) == 0);
         puts(p);
         assert_se(streq(p, "/bin/sh"));
         free(p);
 
-        assert_se(find_binary(self, &p) == 0);
+        assert_se(find_binary(self, local, &p) == 0);
         puts(p);
         assert_se(endswith(p, "/test-path-util"));
         assert_se(path_is_absolute(p));
         free(p);
 
-        assert_se(find_binary("sh", &p) == 0);
+        assert_se(find_binary("sh", local, &p) == 0);
         puts(p);
         assert_se(endswith(p, "/sh"));
         assert_se(path_is_absolute(p));
         free(p);
 
-        assert_se(find_binary("xxxx-xxxx", &p) == -ENOENT);
+        assert_se(find_binary("xxxx-xxxx", local, &p) == -ENOENT);
 
-        assert_se(find_binary("/some/dir/xxxx-xxxx", &p) == -ENOENT);
+        assert_se(find_binary("/some/dir/xxxx-xxxx", local, &p) ==
+                  (local ? -ENOENT : 0));
 }
 
 static void test_prefixes(void) {
@@ -263,7 +264,8 @@ static void test_path_startswith(void) {
 
 int main(int argc, char **argv) {
         test_path();
-        test_find_binary(argv[0]);
+        test_find_binary(argv[0], true);
+        test_find_binary(argv[0], false);
         test_prefixes();
         test_path_join();
         test_fsck_exists();

commit 8ecec322fe6b34b64868d8cc3808b5613f09e8d3
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sat Nov 22 17:12:44 2014 -0500

    missing: add IFLA_BRPORT_LEARNING and friends
    
    IFLA_BRPORT_LEARNING was added in v3.10-rc4-583-g9ba18891f7,
    and IFLA_BRPORT_UNICAST_FLOOD in v3.10-rc4-584-g867a59436f.

diff --git a/configure.ac b/configure.ac
index 05fc00d..2c8be53 100644
--- a/configure.ac
+++ b/configure.ac
@@ -326,7 +326,8 @@ AC_CHECK_DECLS([IFLA_MACVLAN_FLAGS,
                 IFLA_VLAN_PROTOCOL,
                 IFLA_VXLAN_LOCAL6,
                 IFLA_IPTUN_6RD_RELAY_PREFIXLEN,
-                IFLA_BRIDGE_VLAN_INFO],
+                IFLA_BRIDGE_VLAN_INFO,
+                IFLA_BRPORT_UNICAST_FLOOD],
 [], [], [[
 #include <inttypes.h>
 #include <netinet/in.h>
diff --git a/src/shared/missing.h b/src/shared/missing.h
index 8c6698c..4faff89 100644
--- a/src/shared/missing.h
+++ b/src/shared/missing.h
@@ -519,6 +519,22 @@ static inline int setns(int fd, int nstype) {
 #define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
 #endif
 
+#if !HAVE_DECL_IFLA_BRPORT_UNICAST_FLOOD
+#define IFLA_BRPORT_UNSPEC 0
+#define IFLA_BRPORT_STATE 1
+#define IFLA_BRPORT_PRIORITY 2
+#define IFLA_BRPORT_COST 3
+#define IFLA_BRPORT_MODE 4
+#define IFLA_BRPORT_GUARD 5
+#define IFLA_BRPORT_PROTECT 6
+#define IFLA_BRPORT_FAST_LEAVE 7
+#define IFLA_BRPORT_LEARNING 8
+#define IFLA_BRPORT_UNICAST_FLOOD 9
+#define __IFLA_BRPORT_MAX 10
+
+#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
+#endif
+
 #ifndef IPV6_UNICAST_IF
 #define IPV6_UNICAST_IF 76
 #endif

commit 568981d2ac78567e859d89e8d29f844c3e6a871f
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sat Nov 22 12:04:50 2014 -0500

    missing: add __NR_getrandom for a few more archs
    
    Mips has getrandom() too, but there's just too many variants
    for me too care. Either someone who cares does it, or they get
    compile-time warnings with old kernel headers.

diff --git a/src/shared/architecture.h b/src/shared/architecture.h
index f1fef23..cb82418 100644
--- a/src/shared/architecture.h
+++ b/src/shared/architecture.h
@@ -133,7 +133,7 @@ int uname_architecture(void);
 #  else
 #    define native_architecture() ARCHITECTURE_MIPS_LE
 #    define LIB_ARCH_TUPLE "mipsel-linux-gnu"
-#endif
+#  endif
 #elif defined(__alpha__)
 #  define native_architecture() ARCHITECTURE_ALPHA
 #  define LIB_ARCH_TUPLE "alpha-linux-gnu"
@@ -185,7 +185,7 @@ int uname_architecture(void);
 #  define native_architecture() ARCHITECTURE_CRIS
 #  error "Missing LIB_ARCH_TUPLE for CRIS"
 #else
-#error "Please register your architecture here!"
+#  error "Please register your architecture here!"
 #endif
 
 const char *architecture_to_string(int a) _const_;
diff --git a/src/shared/missing.h b/src/shared/missing.h
index ecd32ba..8c6698c 100644
--- a/src/shared/missing.h
+++ b/src/shared/missing.h
@@ -149,6 +149,16 @@ static inline int memfd_create(const char *name, unsigned int flags) {
 #ifndef __NR_getrandom
 #  if defined __x86_64__
 #    define __NR_getrandom 318
+#  elif defined(__i386__)
+#    define __NR_getrandom 355
+#  elif defined(__arm__) || defined(__aarch64__)
+#    define __NR_getrandom 384
+#  elif defined(__ia64__)
+#    define __NR_getrandom 1339
+#  elif defined(__m68k__)
+#    define __NR_getrandom 352
+#  elif defined(__s390x__)
+#    define __NR_getrandom 349
 #  else
 #    warning "__NR_getrandom unknown for your architecture"
 #    define __NR_getrandom 0xffffffff



More information about the systemd-commits mailing list