]> git.ipfire.org Git - thirdparty/mtr.git/commitdiff
fix(install): honor transformed packet helper 578/head 615/head
authorDarafei Praliaskouski <me@komzpa.net>
Fri, 8 May 2026 02:53:38 +0000 (06:53 +0400)
committerDarafei Praliaskouski <me@komzpa.net>
Fri, 8 May 2026 02:53:38 +0000 (06:53 +0400)
Makefile.am
configure.ac
ui/cmdpipe.c

index a74cb20f2c4e63223c2142957ac1a3ce3322ff13..6a6515f057b15d88a0b67212401141784b8d98bc 100644 (file)
@@ -41,8 +41,13 @@ dist_man_MANS = mtr.8 mtr-packet.8
 PATHFILES += man/mtr.8 man/mtr-packet.8
 
 install-exec-hook:
-       `setcap cap_net_raw+ep $(DESTDIR)$(sbindir)/mtr-packet` \
-       || chmod u+s $(DESTDIR)$(sbindir)/mtr-packet
+       mtr_packet_name=`echo mtr-packet | sed '$(transform)'`; \
+       if command -v setcap >/dev/null 2>&1; then \
+               setcap cap_net_raw+ep $(DESTDIR)$(sbindir)/$$mtr_packet_name \
+               || chmod u+s $(DESTDIR)$(sbindir)/$$mtr_packet_name; \
+       else \
+               chmod u+s $(DESTDIR)$(sbindir)/$$mtr_packet_name; \
+       fi
 
 mtr_SOURCES = ui/mtr.c ui/mtr.h \
               ui/net.c ui/net.h \
index 444aad65f01c382b60b05becdec7340cab56a534..8b31a0338d21acdedaba62ac93789e5386ba8fea 100644 (file)
@@ -287,6 +287,22 @@ AC_ARG_ENABLE([bash-completion],
   [], [enable_bash_completion=yes]
 )
 AM_CONDITIONAL([BUILD_BASH_COMPLETION], [test "x$enable_bash_completion" = xyes])
+
+mtr_packet_prefix=
+mtr_packet_suffix=
+AS_IF([test "x$program_prefix" != "xNONE"], [
+  mtr_packet_prefix=$program_prefix
+])
+AS_IF([test "x$program_suffix" != "xNONE"], [
+  mtr_packet_suffix=$program_suffix
+])
+MTR_PACKET_NAME="${mtr_packet_prefix}mtr-packet${mtr_packet_suffix}"
+AC_SUBST([MTR_PACKET_NAME])
+AC_DEFINE_UNQUOTED(
+  [MTR_PACKET_NAME],
+  ["$MTR_PACKET_NAME"],
+  [Name of the installed mtr-packet executable after program transforms.])
+
 echo "build options:"
 echo "--------------"
 echo "libasan  :$with_libasan"
index bd5606a525dd3f1859b0f2f6f8ee5ccd33cd1641..f2133152fa52b7a3f2edc5d16d9d3497a252ec69 100644 (file)
@@ -215,6 +215,7 @@ void execute_packet_child(
     void)
 {
     char buf[256];
+    char *path_end;
     /*
        Allow the MTR_PACKET environment variable to override
        the path to the mtr-packet executable.  This is necessary
@@ -230,25 +231,34 @@ void execute_packet_child(
     if (access ("/etc/mtr.is.run.under.sudo", F_OK) != 0)
         mtr_packet_path = getenv("MTR_PACKET");
     if (mtr_packet_path == NULL)
-        mtr_packet_path = "mtr-packet";
+        mtr_packet_path = MTR_PACKET_NAME;
 
     /*
        First, try to execute mtr-packet from PATH
        or MTR_PACKET environment variable.
      */
-    execlp(mtr_packet_path, "mtr-packet", (char *) NULL);
+    execlp(mtr_packet_path, MTR_PACKET_NAME, (char *) NULL);
 
     /*
        Then try to find it where WE were executed from.
      */
-    strncpy (buf, myname, 240);
-    strcat (buf, "-packet");
-    mtr_packet_path = buf;
-    execl(mtr_packet_path, "mtr-packet", (char *) NULL);
+    path_end = strrchr(myname, '/');
+
+    if (path_end != NULL) {
+        size_t dir_length = path_end - myname + 1;
+
+        if (dir_length + strlen(MTR_PACKET_NAME) < sizeof(buf)) {
+            memcpy(buf, myname, dir_length);
+            strcpy(buf + dir_length, MTR_PACKET_NAME);
+            mtr_packet_path = buf;
+            execl(mtr_packet_path, MTR_PACKET_NAME, (char *) NULL);
+        }
+    }
 
     /*
        If mtr-packet is not found, try to use mtr-packet from current directory
      */
+    execl("./" MTR_PACKET_NAME, "./" MTR_PACKET_NAME, (char *) NULL);
     execl("./mtr-packet", "./mtr-packet", (char *) NULL);
 
     /*  Both exec attempts failed, so nothing to do but exit  */