aboutsummaryrefslogtreecommitdiffstats
path: root/databases/adminer
diff options
context:
space:
mode:
Diffstat (limited to 'databases/adminer')
-rw-r--r--databases/adminer/Makefile26
-rw-r--r--databases/adminer/distinfo10
-rw-r--r--databases/adminer/files/makephar.php11
-rw-r--r--databases/adminer/files/patch-adminer_include_functions.inc.php11
-rw-r--r--databases/adminer/files/patch-adminer_include_xxtea.inc.php70
5 files changed, 111 insertions, 17 deletions
diff --git a/databases/adminer/Makefile b/databases/adminer/Makefile
index 8b637dc367a2..a59b125d0fe7 100644
--- a/databases/adminer/Makefile
+++ b/databases/adminer/Makefile
@@ -1,11 +1,9 @@
PORTNAME= adminer
-DISTVERSION= 5.3.0
-PORTREVISION= 2
+DISTVERSION= 5.4.1
CATEGORIES= databases www
MASTER_SITES= https://github.com/vrana/${PORTNAME}/releases/download/v${DISTVERSION}/
PKGNAMEPREFIX= ${PHP_PKGNAMEPREFIX}
-DISTFILES= ${PORTNAME}-${DISTVERSION}.php ${PORTNAME}-${DISTVERSION}.zip
-EXTRACT_ONLY= ${PORTNAME}-${DISTVERSION}.zip
+DISTFILES= ${PORTNAME}-${DISTVERSION}.zip
MAINTAINER= pkaipila@gmail.com
COMMENT= Full-featured database management tool in a single PHP file
@@ -13,8 +11,16 @@ WWW= https://www.adminer.org
LICENSE= APACHE20
+DEPRECATED= Project's poor security practices
+EXPIRATION_DATE=2026-06-30
+
USES= cpe php:build,flavors
-USE_PHP= phar session zlib
+USE_GITHUB= nodefault
+_FORCED_TAG= 1.2
+_PEMATON_TAG= 99912d508a1b39db27910ef6c6dd07bab9368670
+GH_TUPLE= MirLach:adminer-forced-server:${_FORCED_TAG}:forcedserver \
+ vrana:adminer-plugins-pematon:${_PEMATON_TAG}:pematon
+USE_PHP= phar session tokenizer zlib
NO_ARCH= yes
@@ -33,13 +39,17 @@ PGSQL_USE= PHP=pgsql
SQLITE_USE= PHP=sqlite3
do-build:
- ${CP} ${DISTDIR}/${PORTNAME}-${DISTVERSION}.php ${WRKSRC}/${PORTNAME}.php
+ ${MV} ${WRKDIR}/adminer-forced-server-${_FORCED_TAG}/adminer-plugins/forced-server.php \
+ ${WRKDIR}/adminer-plugins-pematon-${_PEMATON_TAG}/*.php \
+ ${WRKSRC}/plugins
+ @(cd ${WRKSRC} && ${LOCALBASE}/bin/php ${WRKSRC}/compile.php)
+ ${MV} ${WRKSRC}/${PORTNAME}-${DISTVERSION}.php ${WRKSRC}/${PORTNAME}.php
${CP} ${FILESDIR}/makephar.php ${WRKSRC}
${LOCALBASE}/bin/php -d phar.readonly=0 ${WRKSRC}/makephar.php
do-install:
${MKDIR} ${STAGEDIR}${WWWDIR}
- ${INSTALL_DATA} ${WRKSRC}/index.php ${STAGEDIR}${WWWDIR}
- ${INSTALL_DATA} ${FILESDIR}/adminer-plugins-example.php ${STAGEDIR}${WWWDIR}
+ ${INSTALL_SCRIPT} ${WRKSRC}/index.php ${STAGEDIR}${WWWDIR}
+ ${INSTALL_SCRIPT} ${FILESDIR}/adminer-plugins-example.php ${STAGEDIR}${WWWDIR}
.include <bsd.port.mk>
diff --git a/databases/adminer/distinfo b/databases/adminer/distinfo
index 8f067ad01e51..039e80167be7 100644
--- a/databases/adminer/distinfo
+++ b/databases/adminer/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1754700167
-SHA256 (adminer-5.3.0.php) = 7dcc196e941b18b74635afe1740dcd86970ab08b8eba0f00f149925aea3972ed
-SIZE (adminer-5.3.0.php) = 504560
-SHA256 (adminer-5.3.0.zip) = ec49d9d1faf1f22e835c73b913feb993e87e5ae7e54e8f1e0583515409a1eca8
-SIZE (adminer-5.3.0.zip) = 873271
+TIMESTAMP = 1763089532
+SHA256 (MirLach-adminer-forced-server-1.2_GH0.tar.gz) = 8f00a802ed5e6f323a28d46edac026926dc294f5e50e393c6a3827aba0c0a886
+SIZE (MirLach-adminer-forced-server-1.2_GH0.tar.gz) = 5685
+SHA256 (vrana-adminer-plugins-pematon-99912d508a1b39db27910ef6c6dd07bab9368670_GH0.tar.gz) = a38e075f1c70fa4acdbe54ebedf52e7901e89739ff277d7a340f87923aaa6cbd
+SIZE (vrana-adminer-plugins-pematon-99912d508a1b39db27910ef6c6dd07bab9368670_GH0.tar.gz) = 8128
diff --git a/databases/adminer/files/makephar.php b/databases/adminer/files/makephar.php
index ad54a3cfe4cb..b8fdadf1dfbc 100644
--- a/databases/adminer/files/makephar.php
+++ b/databases/adminer/files/makephar.php
@@ -15,14 +15,16 @@ $stub = <<<STUB
<?php
/******************************************************************************
*
- * All Adminer plugins are now included in this
+ * Adminer plugins are now included in this
* FreeBSD ports edition, no need to download
* them separately.
* https://www.adminer.org/en/plugins/
*
* copyright Paavo-Einari Kaipila (FreeBSD ports edition)
- * copyright Jakub Vrana (original Adminer)
- *
+ * copyright Jakub Vrana (Adminer)
+ * copyright MirLach (ForcedServer plugin)
+ * copyright Pematon (Collations, JsonPreview, LoginServers and SimpleMenu plugins)
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -68,7 +70,7 @@ foreach(new DirectoryIterator(__DIR__ . '/plugins') as $file)
* in Adminer editor.
*/
&& !str_starts_with($fileName, 'editor')
- && preg_match('/class\s(A[a-zA-Z0-9]+)\sextends\sAdminer/', $contents, $m)
+ && preg_match('/class\s(A[a-zA-Z0-9]+)\s(extends\sAdminer|\{)/', $contents, $m)
) {
$plugins[$pharFile] = $contents;
$classMap[$m[1]] = $file->getFileName();
@@ -110,6 +112,7 @@ foreach($plugins as $file => $contents)
$contents
);
}
+$phar->compressFiles(Phar::GZ);
$phar->addFromString(
'adminer.php',
diff --git a/databases/adminer/files/patch-adminer_include_functions.inc.php b/databases/adminer/files/patch-adminer_include_functions.inc.php
new file mode 100644
index 000000000000..fa627837460a
--- /dev/null
+++ b/databases/adminer/files/patch-adminer_include_functions.inc.php
@@ -0,0 +1,11 @@
+--- adminer/include/functions.inc.php.orig 2025-10-19 12:05 UTC
++++ adminer/include/functions.inc.php
+@@ -761,7 +761,7 @@
+ * @return string 32 hexadecimal characters
+ */
+ function rand_string(): string {
+- return md5(uniqid(strval(mt_rand()), true));
++ return bin2hex(random_bytes(32));
+ }
+
+ /** Format value to use in select
diff --git a/databases/adminer/files/patch-adminer_include_xxtea.inc.php b/databases/adminer/files/patch-adminer_include_xxtea.inc.php
new file mode 100644
index 000000000000..86b20cb3ea7f
--- /dev/null
+++ b/databases/adminer/files/patch-adminer_include_xxtea.inc.php
@@ -0,0 +1,70 @@
+--- adminer/include/xxtea.inc.php.orig 2025-11-14 10:44:16 UTC
++++ adminer/include/xxtea.inc.php
+@@ -45,6 +45,11 @@
+ return int32((($z >> 5 & 0x7FFFFFF) ^ $y << 2) + (($y >> 3 & 0x1FFFFFFF) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k ^ $z));
+ }
+
++const AES256_NAME = 'aes-256-gcm';
++const AES256_KEY_BYTES = 32;
++const AES256_NONCE_BYTES = 12;
++const AES256_TAG_BYTES = 16;
++
+ /** Cipher
+ * @param string $str plain-text password
+ * @return string binary cipher
+@@ -53,6 +58,20 @@
+ if ($str == "") {
+ return "";
+ }
++ $key = hash_hkdf('sha256', $key, AES256_KEY_BYTES, AES256_NAME);
++ $nonce = random_bytes(AES256_NONCE_BYTES);
++ $cipherText = openssl_encrypt(
++ $str,
++ AES256_NAME,
++ $key,
++ OPENSSL_RAW_DATA,
++ $nonce,
++ $tag,
++ '',
++ AES256_TAG_BYTES
++ );
++ return $nonce . $tag . $cipherText;
++/*
+ $key = array_values(unpack("V*", pack("H*", md5($key))));
+ $v = str2long($str, true);
+ $n = count($v) - 1;
+@@ -75,6 +94,7 @@
+ $v[$n] = $z;
+ }
+ return long2str($v, false);
++*/
+ }
+
+ /** Decipher
+@@ -88,6 +108,20 @@
+ if (!$key) {
+ return false;
+ }
++ $key = hash_hkdf('sha256', $key, AES256_KEY_BYTES, AES256_NAME);
++ $nonce = substr($str, 0, AES256_NONCE_BYTES);
++ $tag = substr($str, AES256_NONCE_BYTES, AES256_TAG_BYTES);
++ $cipherText = substr($str, AES256_NONCE_BYTES + AES256_TAG_BYTES);
++ return openssl_decrypt(
++ $cipherText,
++ AES256_NAME,
++ $key,
++ OPENSSL_RAW_DATA,
++ $nonce,
++ $tag,
++ ''
++ );
++/*
+ $key = array_values(unpack("V*", pack("H*", md5($key))));
+ $v = str2long($str, false);
+ $n = count($v) - 1;
+@@ -110,4 +144,5 @@
+ $sum = int32($sum - 0x9E3779B9);
+ }
+ return long2str($v, true);
++*/
+ }