diff -uNr apt-2.1.18/methods/http.cc apt-2.1.18.mod/methods/http.cc --- apt-2.1.18/methods/http.cc 2021-01-13 18:37:30.000000000 +0200 +++ apt-2.1.18.mod/methods/http.cc 2021-02-03 22:06:04.242782879 +0200 @@ -341,7 +341,26 @@ Req << "Proxy-Authorization: Basic " << Base64Encode(Proxy.User + ":" + Proxy.Password) << "\r\n"; - Req << "User-Agent: " << Owner->ConfigFind("User-Agent", "Debian APT-HTTP/1.3 (" PACKAGE_VERSION ")") << "\r\n"; + // Determine the actual installation prefix to send as part of user-agent string. + // Mirrors can use this information to distinguish legit Termux installations from + // third parties using Termux repositories. + char binPath[PATH_MAX] = {0}; + ssize_t binPathLen = readlink("/proc/self/exe", binPath, sizeof(binPath)-1); + if (binPathLen != -1) { + binPath[binPathLen] = '\0'; + + char *aptMethodsSub = strstr(binPath, "/lib/apt/methods"); + if (aptMethodsSub) { + // Cut /lib/apt/methods.. from prefix, if possible. + aptMethodsSub[0] = '\0'; + } + } else { + // Use hardcoded as fallback. + // Mostly useless as will help to detect only binary-patched apt. + strncpy(binPath, "@TERMUX_PREFIX@", PATH_MAX - 1); + } + + Req << "User-Agent: Debian APT-HTTP/1.3 (" PACKAGE_VERSION ") Termux (@TERMUX_APP_PACKAGE@; install-prefix:" << binPath <<")" << "\r\n"; Req << "\r\n"; @@ -954,8 +973,23 @@ Req << "Authorization: Basic " << Base64Encode(Uri.User + ":" + Uri.Password) << "\r\n"; - Req << "User-Agent: " << ConfigFind("User-Agent", - "Debian APT-HTTP/1.3 (" PACKAGE_VERSION ")"); + char binPath[PATH_MAX] = {0}; + ssize_t binPathLen = readlink("/proc/self/exe", binPath, sizeof(binPath)-1); + if (binPathLen != -1) { + binPath[binPathLen] = '\0'; + + char *aptMethodsSub = strstr(binPath, "/lib/apt/methods"); + if (aptMethodsSub) { + // Cut /lib/apt/methods.. from prefix, if possible. + aptMethodsSub[0] = '\0'; + } + } else { + // Use hardcoded as fallback. + // Mostly useless as will help to detect only binary-patched apt. + strncpy(binPath, "@TERMUX_PREFIX@", PATH_MAX - 1); + } + + Req << "User-Agent: Debian APT-HTTP/1.3 (" PACKAGE_VERSION ") Termux (@TERMUX_APP_PACKAGE@; install-prefix:" << binPath << ")"; #ifdef HAVE_SYSTEMD if (ConfigFindB("User-Agent-Non-Interactive", false))