aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormi <mi@FreeBSD.org>2015-04-14 09:27:51 +0800
committermi <mi@FreeBSD.org>2015-04-14 09:27:51 +0800
commit7abf975ec1d2b684deea06b4893a7849efed7742 (patch)
treefb152e01cc8bbc7aa9b9db8fd7b6c07a7e33add6
parent6aa89d86e0dc1079187756618551efef1e648657 (diff)
downloadfreebsd-ports-gnome-7abf975ec1d2b684deea06b4893a7849efed7742.tar.gz
freebsd-ports-gnome-7abf975ec1d2b684deea06b4893a7849efed7742.tar.zst
freebsd-ports-gnome-7abf975ec1d2b684deea06b4893a7849efed7742.zip
Unbreak and otherwise improve this port:
* Use standard source of PECL-sources -- the old MASTER_SITE is gone, and good riddance too, because the difference between 0.4 and 0.4.1 was an irrelevant one-liner. * Patch to use modern PHP ZEND API * Patch to actually use cracklib as advertized -- since the port's inception it LIB_DEPENDed on security/cracklib and advertized its use in pkg-descr, lying on both accounts. * Throw in a couple of basic usage tests rejecting bad passwords and accepting good ones. Special thanks to Nathan Neulinger for making the necessary cracklib function accessible and to cy@ for promptly updating security/cracklib to use Nathan's latest release.
-rw-r--r--security/pecl-crack/Makefile22
-rw-r--r--security/pecl-crack/distinfo4
-rw-r--r--security/pecl-crack/files/patch-modern-api169
-rw-r--r--security/pecl-crack/files/patch-tests56
-rw-r--r--security/pecl-crack/files/patch-use-real-libcrack9
5 files changed, 250 insertions, 10 deletions
diff --git a/security/pecl-crack/Makefile b/security/pecl-crack/Makefile
index 1b92d310b5df..7132c8f4b61d 100644
--- a/security/pecl-crack/Makefile
+++ b/security/pecl-crack/Makefile
@@ -2,29 +2,35 @@
# $FreeBSD$
PORTNAME= crack
-PORTVERSION= 0.4.1
-PORTREVISION= 5
+PORTVERSION= 0.4
+PORTEPOCH= 1
CATEGORIES= security www
-MASTER_SITES= http://www.osuweb.net/~ahaning/
+MASTER_SITES= http://pecl.php.net/get/
PKGNAMEPREFIX= pecl-
-EXTRACT_SUFX= .tgz
DIST_SUBDIR= PECL
MAINTAINER= ports@FreeBSD.org
COMMENT= PECL extension to cracklib
-DEPRECATED= requires php53, security EOL reached 14 Aug 2014
-EXPIRATION_DATE= 2015-04-15
+LICENSE= PHP30
LIB_DEPENDS= libcrack.so:${PORTSDIR}/security/cracklib
+USES= tar:tgz
USE_PHP= yes
USE_PHPIZE= yes
USE_PHP_BUILD= yes
USE_PHPEXT= yes
PHP_MODNAME= crack
-IGNORE_WITH_PHP=5 55 56
+EXTRACT_AFTER_ARGS=--no-same-permissions --no-same-owner --exclude libcrack
+CONFIGURE_ARGS= --with-crack=${LOCALBASE}
+CFLAGS+= -Wno-deprecated
-WRKSRC= ${WRKDIR}/crack-0.4
+post-configure:
+ ${REINPLACE_CMD} -e 's|^\$$ini_overwrites.*|&'"'"'crack.default_dictionary=\"${LOCALBASE}/libdata/cracklib/pw_dict\"'"'"',|' \
+ ${WRKSRC}/run-tests.php
+
+test check regression-test: build
+ ${MAKE} -C ${WRKSRC} test < /dev/null
.include <bsd.port.mk>
diff --git a/security/pecl-crack/distinfo b/security/pecl-crack/distinfo
index 700a408fd87d..fc4a88930727 100644
--- a/security/pecl-crack/distinfo
+++ b/security/pecl-crack/distinfo
@@ -1,2 +1,2 @@
-SHA256 (PECL/crack-0.4.1.tgz) = d9ba43b3678fb46db0eee659d9e000e9bad682bc7702d33f6d7e293d7f6f08ad
-SIZE (PECL/crack-0.4.1.tgz) = 25143
+SHA256 (PECL/crack-0.4.tgz) = 00a5250a6c82b39c1aefcb6e1ce0980da5df49c9bfc6ade9a8e867d89e87f560
+SIZE (PECL/crack-0.4.tgz) = 25524
diff --git a/security/pecl-crack/files/patch-modern-api b/security/pecl-crack/files/patch-modern-api
new file mode 100644
index 000000000000..978b917c50aa
--- /dev/null
+++ b/security/pecl-crack/files/patch-modern-api
@@ -0,0 +1,169 @@
+--- crack.c 2005-09-21 05:00:06.000000000 -0400
++++ crack.c 2015-04-13 20:41:24.000000000 -0400
+@@ -32,5 +32,5 @@
+
+ #include "php_crack.h"
+-#include "libcrack/src/cracklib.h"
++#include <packer.h>
+
+ /* True global resources - no need for thread safety here */
+@@ -39,5 +39,5 @@
+ /* {{{ crack_functions[]
+ */
+-function_entry crack_functions[] = {
++zend_function_entry crack_functions[] = {
+ PHP_FE(crack_opendict, NULL)
+ PHP_FE(crack_closedict, NULL)
+@@ -91,42 +91,7 @@
+ /* {{{ php_crack_checkpath
+ */
+-static int php_crack_checkpath(char* path TSRMLS_DC)
++static int php_crack_checkpath(const char* path TSRMLS_DC)
+ {
+- char *filename;
+- int filename_len;
+- int result = SUCCESS;
+-
+- if (PG(safe_mode)) {
+- filename_len = strlen(path) + 10;
+- filename = (char *) emalloc(filename_len);
+- if (NULL == filename) {
+- return FAILURE;
+- }
+-
+- memset(filename, '\0', filename_len);
+- strcpy(filename, path);
+- strcat(filename, ".pwd");
+- if (!php_checkuid(filename, "r", CHECKUID_CHECK_FILE_AND_DIR)) {
+- efree(filename);
+- return FAILURE;
+- }
+-
+- memset(filename, '\0', filename_len);
+- strcpy(filename, path);
+- strcat(filename, ".pwi");
+- if (!php_checkuid(filename, "r", CHECKUID_CHECK_FILE_AND_DIR)) {
+- efree(filename);
+- return FAILURE;
+- }
+-
+- memset(filename, '\0', filename_len);
+- strcpy(filename, path);
+- strcat(filename, ".hwm");
+- if (!php_checkuid(filename, "r", CHECKUID_CHECK_FILE_AND_DIR)) {
+- efree(filename);
+- return FAILURE;
+- }
+- }
+-
++
+ if (php_check_open_basedir(path TSRMLS_CC)) {
+ return FAILURE;
+@@ -155,7 +120,6 @@
+ {
+ if ((-1 == CRACKG(default_dict)) && (NULL != CRACKG(default_dictionary))) {
+- CRACKLIB_PWDICT *pwdict;
+- printf("trying to open: %s\n", CRACKG(default_dictionary));
+- pwdict = cracklib_pw_open(CRACKG(default_dictionary), "r");
++ PWDICT *pwdict;
++ pwdict = PWOpen(CRACKG(default_dictionary), "r");
+ if (NULL != pwdict) {
+ ZEND_REGISTER_RESOURCE(return_value, pwdict, le_crack);
+@@ -172,8 +136,8 @@
+ static void php_crack_module_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+ {
+- CRACKLIB_PWDICT *pwdict = (CRACKLIB_PWDICT *) rsrc->ptr;
++ PWDICT *pwdict = (PWDICT *) rsrc->ptr;
+
+ if (pwdict != NULL) {
+- cracklib_pw_close(pwdict);
++ PWClose(pwdict);
+ }
+ }
+@@ -245,5 +209,5 @@
+ char *path;
+ int path_len;
+- CRACKLIB_PWDICT *pwdict;
++ PWDICT *pwdict;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &path, &path_len) == FAILURE) {
+@@ -255,5 +219,5 @@
+ }
+
+- pwdict = cracklib_pw_open(path, "r");
++ pwdict = PWOpen(path, "r");
+ if (NULL == pwdict) {
+ #if ZEND_MODULE_API_NO >= 20021010
+@@ -276,5 +240,5 @@
+ zval *dictionary = NULL;
+ int id = -1;
+- CRACKLIB_PWDICT *pwdict;
++ PWDICT *pwdict;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &dictionary)) {
+@@ -293,5 +257,5 @@
+ }
+ }
+- ZEND_FETCH_RESOURCE(pwdict, CRACKLIB_PWDICT *, &dictionary, id, "crack dictionary", le_crack);
++ ZEND_FETCH_RESOURCE(pwdict, PWDICT *, &dictionary, id, "crack dictionary", le_crack);
+
+ if (NULL == dictionary) {
+@@ -319,5 +283,5 @@
+ int gecos_len;
+ char *message;
+- CRACKLIB_PWDICT *pwdict;
++ PWDICT *pwdict;
+ int id = -1;
+
+@@ -327,10 +291,36 @@
+ }
+
+- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dictionary, &password, &password_len) == FAILURE) {
+- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ssr", &password, &password_len, &username, &username_len, &gecos, &gecos_len, &dictionary) == FAILURE) {
+- RETURN_FALSE;
+- }
++ switch (ZEND_NUM_ARGS()) {
++ case 1:
++ id = zend_parse_parameters(1 TSRMLS_CC, "s",
++ &password, &password_len);
++ dictionary = NULL;
++ break;
++ case 2:
++ id = zend_parse_parameters(2 TSRMLS_CC, "rs",
++ &dictionary,
++ &password, &password_len);
++ break;
++ case 3:
++ id = zend_parse_parameters(3 TSRMLS_CC, "sss",
++ &password, &password_len,
++ &username, &username_len,
++ &gecos, &gecos_len);
++ dictionary = NULL;
++ break;
++ case 4:
++ id = zend_parse_parameters(3 TSRMLS_CC, "sssr",
++ &password, &password_len,
++ &username, &username_len,
++ &gecos, &gecos_len,
++ &dictionary);
++ break;
++ default:
++ WRONG_PARAM_COUNT;
+ }
+-
++
++ if (id == FAILURE)
++ RETURN_FALSE;
++
+ if (NULL == dictionary) {
+ id = php_crack_get_default_dict(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+@@ -344,7 +334,7 @@
+ }
+ }
+- ZEND_FETCH_RESOURCE(pwdict, CRACKLIB_PWDICT *, &dictionary, id, "crack dictionary", le_crack);
++ ZEND_FETCH_RESOURCE(pwdict, PWDICT *, &dictionary, id, "crack dictionary", le_crack);
+
+- message = cracklib_fascist_look_ex(pwdict, password, username, gecos);
++ message = FascistLookUser(pwdict, password, username, gecos);
+
+ if (NULL == message) {
diff --git a/security/pecl-crack/files/patch-tests b/security/pecl-crack/files/patch-tests
new file mode 100644
index 000000000000..37d6f81855ba
--- /dev/null
+++ b/security/pecl-crack/files/patch-tests
@@ -0,0 +1,56 @@
+Add a few tests to verify basic usage. Additional contributions welcome.
+
+ -mi
+
++++ tests/002.phpt 2015-04-13 20:40:26.000000000 -0400
+@@ -0,0 +1,16 @@
++--TEST--
++Verify rejection of very simple password
++--SKIPIF--
++--POST--
++--GET--
++--FILE--
++<?php
++if (crack_check("password")) {
++ echo "Bad, password 'password' accepted\n";
++} else {
++ echo "Good, password 'password' rejected\n";
++}
++
++?>
++--EXPECT--
++Good, password 'password' rejected
++++ tests/003.phpt 2015-04-13 20:48:28.000000000 -0400
+@@ -0,0 +1,15 @@
++--TEST--
++Verify rejection of password identical to username
++--SKIPIF--
++--POST--
++--GET--
++--FILE--
++<?php
++if (crack_check("b1934c823b137a492a13decfb939593e", "b1934c823b137a492a13decfb939593e", NULL)) {
++ echo "Bad, password identical to username accepted\n";
++} else {
++ echo "Good, password identical to username rejected\n";
++}
++?>
++--EXPECTREGEX--
++Good, password identical to username rejected
++++ tests/004.phpt 2015-04-13 20:40:43.000000000 -0400
+@@ -0,0 +1,15 @@
++--TEST--
++Verify acceptance of good password
++--SKIPIF--
++--POST--
++--GET--
++--FILE--
++<?php
++if (crack_check("6f763fbe906fc3c2fd57f3bcfa4afe79")) {
++ echo "Good, harsh password accepted\n";
++} else {
++ echo "Bad, password harsh rejected\n";
++}
++?>
++--EXPECT--
++Good, harsh password accepted
diff --git a/security/pecl-crack/files/patch-use-real-libcrack b/security/pecl-crack/files/patch-use-real-libcrack
new file mode 100644
index 000000000000..6907d9466588
--- /dev/null
+++ b/security/pecl-crack/files/patch-use-real-libcrack
@@ -0,0 +1,9 @@
+--- config.m4 2005-09-21 05:00:06.000000000 -0400
++++ config.m4 2015-04-09 21:44:51.000000000 -0400
+@@ -9,6 +9,4 @@
+
+ if test "$PHP_CRACK" != "yes"; then
+- AC_MSG_ERROR(Only the bundled library is supported right now)
+-
+ for i in $PHP_CRACK/lib $PHP_CRACK/cracklib /usr/local/lib /usr/lib; do
+ test -f $i/libcrack.$SHLIB_SUFFIX_NAME -o -f $i/libcrack.a && CRACK_LIBDIR=$i && break