58 lines
2.4 KiB
Diff
58 lines
2.4 KiB
Diff
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))
|