ports/172415: New port: net/lualdap
Piotr Florczyk
pf at itwf.pl
Sat Oct 6 22:00:31 UTC 2012
>Number: 172415
>Category: ports
>Synopsis: New port: net/lualdap
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sat Oct 06 22:00:27 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator: Piotr Florczyk
>Release: 9.0
>Organization:
>Environment:
>Description:
New port for lualdap. It looks like it's unmaintained but there is no other ldap library for lua. I have used patches from: https://github.com/devurandom/lualdap/ to make it compatible with current openldap release (and added couple of lines from myself).
Port tested @redports
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# lualdap
# lualdap/files
# lualdap/files/patch-src-lualdap.c
# lualdap/pkg-plist
# lualdap/pkg-descr
# lualdap/Makefile
# lualdap/distinfo
#
echo c - lualdap
mkdir -p lualdap > /dev/null 2>&1
echo c - lualdap/files
mkdir -p lualdap/files > /dev/null 2>&1
echo x - lualdap/files/patch-src-lualdap.c
sed 's/^X//' >lualdap/files/patch-src-lualdap.c << '7522ff50a0ea8b7f49ea0323984a7f75'
X--- src/lualdap.c.orig 2012-10-05 12:14:01.029124386 +0000
X+++ src/lualdap.c 2012-10-05 12:14:49.482549262 +0000
X@@ -1,11 +1,12 @@
X /*
X ** LuaLDAP
X ** See Copyright Notice in license.html
X-** $Id: lualdap.c,v 1.48 2007/12/14 15:11:22 carregal Exp $
X+** $Id: lualdap.c,v 1.48 2007-12-14 15:11:22 carregal Exp $
X */
X
X #include <stdlib.h>
X #include <string.h>
X+#include <assert.h>
X
X #ifdef WIN32
X #include <Winsock2.h>
X@@ -19,10 +20,14 @@
X #include "ldap.h"
X #endif
X
X-#include "lua.h"
X-#include "lauxlib.h"
X-#if ! defined (LUA_VERSION_NUM) || LUA_VERSION_NUM < 501
X-#include "compat-5.1.h"
X+#include <lua.h>
X+#include <lauxlib.h>
X+
X+#if LUA_VERSION_NUM < 502
X+/* lua_rawlen: Not entirely correct, but should work anyway */
X+# define lua_rawlen lua_objlen
X+# define luaL_newlib(L,l) (lua_newtable(L), luaL_register(L,NULL,l))
X+# define luaL_setfuncs(L,l,n) (assert(n==0), luaL_register(L,NULL,l))
X #endif
X
X #ifdef WINLDAPAPI
X@@ -141,9 +146,9 @@
X /*
X ** Get the field called name of the table at position 2.
X */
X-static void strgettable (lua_State *L, const char *name) {
X+static void strgettable (lua_State *L, int idx, const char *name) {
X lua_pushstring (L, name);
X- lua_gettable (L, 2);
X+ lua_gettable (L, idx);
X }
X
X
X@@ -151,8 +156,8 @@
X ** Get the field named name as a string.
X ** The table MUST be at position 2.
X */
X-static const char *strtabparam (lua_State *L, const char *name, char *def) {
X- strgettable (L, name);
X+static const char *strtabparam (lua_State *L, int idx, const char *name, char *def) {
X+ strgettable (L, idx, name);
X if (lua_isnil (L, -1))
X return def;
X else if (lua_isstring (L, -1))
X@@ -168,8 +173,8 @@
X ** Get the field named name as an integer.
X ** The table MUST be at position 2.
X */
X-static long longtabparam (lua_State *L, const char *name, int def) {
X- strgettable (L, name);
X+static long longtabparam (lua_State *L, int idx, const char *name, int def) {
X+ strgettable (L, idx, name);
X if (lua_isnil (L, -1))
X return def;
X else if (lua_isnumber (L, -1))
X@@ -183,8 +188,8 @@
X ** Get the field named name as a double.
X ** The table MUST be at position 2.
X */
X-static double numbertabparam (lua_State *L, const char *name, double def) {
X- strgettable (L, name);
X+static double numbertabparam (lua_State *L, int idx, const char *name, double def) {
X+ strgettable (L, idx, name);
X if (lua_isnil (L, -1))
X return def;
X else if (lua_isnumber (L, -1))
X@@ -199,7 +204,7 @@
X ** The table MUST be at position 2.
X */
X static int booltabparam (lua_State *L, const char *name, int def) {
X- strgettable (L, name);
X+ strgettable (L, 2, name);
X if (lua_isnil (L, -1))
X return def;
X else if (lua_isboolean (L, -1))
X@@ -243,7 +248,7 @@
X value_error (L, n);
X return NULL;
X }
X- a->bvals[a->bi].bv_len = lua_strlen (L, -1);
X+ a->bvals[a->bi].bv_len = lua_rawlen (L, -1);
X a->bvals[a->bi].bv_val = (char *)lua_tostring (L, -1);
X a->bi++;
X return ret;
X@@ -296,7 +301,7 @@
X A_setval (L, a, name);
X else if (lua_istable (L, tab)) { /* list of strings */
X int i;
X- int n = luaL_getn (L, tab);
X+ int n = lua_rawlen (L, tab);
X for (i = 1; i <= n; i++) {
X lua_rawgeti (L, tab, i); /* push table element */
X A_setval (L, a, name);
X@@ -368,7 +373,7 @@
X array[1] = NULL;
X } else if (lua_istable (L, tab)) {
X int i;
X- int n = luaL_getn (L, tab);
X+ int n = lua_rawlen (L, tab);
X if (limit < (n+1))
X return luaL_error (L, LUALDAP_PREFIX"too many arguments");
X for (i = 0; i < n; i++) {
X@@ -387,13 +392,25 @@
X
X
X /*
X+** Fill in the struct timeval, according to the timeout parameter.
X+*/
X+static struct timeval *get_timeout_param (lua_State *L, int idx, struct timeval *st) {
X+ double t = numbertabparam (L, idx, "timeout", -1);
X+ if(t < 0)
X+ return NULL; /* No timeout, block */
X+ st->tv_sec = (long)t;
X+ st->tv_usec = (long)(1000000 * (t - st->tv_sec));
X+ return st;
X+}
X+
X+/*
X ** Get the result message of an operation.
X ** #1 upvalue == connection
X ** #2 upvalue == msgid
X ** #3 upvalue == result code of the message (ADD, DEL etc.) to be received.
X */
X static int result_message (lua_State *L) {
X- struct timeval *timeout = NULL; /* ??? function parameter ??? */
X+ struct timeval timeout;
X LDAPMessage *res;
X int rc;
X conn_data *conn = (conn_data *)lua_touserdata (L, lua_upvalueindex (1));
X@@ -401,7 +418,7 @@
X /*int res_code = (int)lua_tonumber (L, lua_upvalueindex (3));*/
X
X luaL_argcheck (L, conn->ld, 1, LUALDAP_PREFIX"LDAP connection is closed");
X- rc = ldap_result (conn->ld, msgid, LDAP_MSG_ONE, timeout, &res);
X+ rc = ldap_result (conn->ld, msgid, LDAP_MSG_ONE, get_timeout_param (L, 1, &timeout), &res);
X if (rc == 0)
X return faildirect (L, LUALDAP_PREFIX"result timeout expired");
X else if (rc < 0) {
X@@ -424,10 +441,14 @@
X default:
X lua_pushnil (L);
X lua_pushliteral (L, LUALDAP_PREFIX);
X- lua_pushstring (L, msg);
X- lua_pushliteral (L, " ");
X lua_pushstring (L, ldap_err2string(err));
X- lua_concat (L, 4);
X+ lua_concat (L, 2);
X+ if (msg != NULL) {
X+ lua_pushliteral (L, " (");
X+ lua_pushstring (L, msg);
X+ lua_pushliteral (L, ")");
X+ lua_concat (L, 4);
X+ }
X ret = 2;
X }
X ldap_memfree (mdn);
X@@ -461,7 +482,11 @@
X luaL_argcheck(L, conn!=NULL, 1, LUALDAP_PREFIX"LDAP connection expected");
X if (conn->ld == NULL) /* already closed */
X return 0;
X+#if defined(LDAP_API_FEATURE_X_OPENLDAP) && LDAP_API_FEATURE_X_OPENLDAP >= 20300
X+ ldap_unbind_ext (conn->ld, NULL, NULL);
X+#else
X ldap_unbind (conn->ld);
X+#endif
X conn->ld = NULL;
X lua_pushnumber (L, 1);
X return 1;
X@@ -504,7 +529,7 @@
X BerValue bvalue;
X ldap_int_t rc, msgid;
X bvalue.bv_val = (char *)luaL_checkstring (L, 4);
X- bvalue.bv_len = lua_strlen (L, 4);
X+ bvalue.bv_len = lua_rawlen (L, 4);
X rc = ldap_compare_ext (conn->ld, dn, attr, &bvalue, NULL, NULL, &msgid);
X return create_future (L, rc, 1, msgid, LDAP_RES_COMPARE);
X }
X@@ -666,15 +691,17 @@
X static int next_message (lua_State *L) {
X search_data *search = getsearch (L);
X conn_data *conn;
X- struct timeval *timeout = NULL; /* ??? function parameter ??? */
X+ struct timeval timeout;
X LDAPMessage *res;
X int rc;
X int ret;
X
X+ luaL_checktype(L, 1, LUA_TTABLE);
X+
X lua_rawgeti (L, LUA_REGISTRYINDEX, search->conn);
X conn = (conn_data *)lua_touserdata (L, -1); /* get connection */
X
X- rc = ldap_result (conn->ld, search->msgid, LDAP_MSG_ONE, timeout, &res);
X+ rc = ldap_result (conn->ld, search->msgid, LDAP_MSG_ONE, get_timeout_param (L, 1, &timeout), &res);
X if (rc == 0)
X return faildirect (L, LUALDAP_PREFIX"result timeout expired");
X else if (rc == -1)
X@@ -724,8 +751,10 @@
X */
X static int string2scope (lua_State *L, const char *s) {
X if ((s == NULL) || (*s == '\0'))
X- return LDAP_SCOPE_DEFAULT;
X+ return LDAP_SCOPE_SUBTREE;
X switch (*s) {
X+ case 'd':
X+ return LDAP_SCOPE_DEFAULT;
X case 'b':
X return LDAP_SCOPE_BASE;
X case 'o':
X@@ -784,20 +813,6 @@
X
X
X /*
X-** Fill in the struct timeval, according to the timeout parameter.
X-*/
X-static struct timeval *get_timeout_param (lua_State *L, struct timeval *st) {
X- double t = numbertabparam (L, "timeout", 0);
X- st->tv_sec = (long)t;
X- st->tv_usec = (long)(1000000 * (t - st->tv_sec));
X- if (st->tv_sec == 0 && st->tv_usec == 0)
X- return NULL;
X- else
X- return st;
X-}
X-
X-
X-/*
X ** Perform a search operation.
X ** @return #1 Function to iterate over the result entries.
X ** @return #2 nil.
X@@ -818,11 +833,11 @@
X return 2;
X /* get other parameters */
X attrsonly = booltabparam (L, "attrsonly", 0);
X- base = (ldap_pchar_t) strtabparam (L, "base", NULL);
X- filter = (ldap_pchar_t) strtabparam (L, "filter", NULL);
X- scope = string2scope (L, strtabparam (L, "scope", NULL));
X- sizelimit = longtabparam (L, "sizelimit", LDAP_NO_LIMIT);
X- timeout = get_timeout_param (L, &st);
X+ base = (ldap_pchar_t) strtabparam (L, 2, "base", NULL);
X+ filter = (ldap_pchar_t) strtabparam (L, 2, "filter", NULL);
X+ scope = string2scope (L, strtabparam (L, 2, "scope", NULL));
X+ sizelimit = longtabparam (L, 2, "sizelimit", LDAP_NO_LIMIT);
X+ timeout = get_timeout_param (L, 2, &st);
X
X rc = ldap_search_ext (conn->ld, base, scope, filter, attrs, attrsonly,
X NULL, NULL, timeout, sizelimit, &msgid);
X@@ -831,7 +846,8 @@
X
X create_search (L, 1, msgid);
X lua_pushcclosure (L, next_message, 1);
X- return 1;
X+ lua_pushvalue(L, 2);
X+ return 2;
X }
X
X
X@@ -872,7 +888,7 @@
X ** Create a metatable.
X */
X static int lualdap_createmeta (lua_State *L) {
X- const luaL_reg methods[] = {
X+ const luaL_Reg methods[] = {
X {"close", lualdap_close},
X {"add", lualdap_add},
X {"compare", lualdap_compare},
X@@ -887,7 +903,7 @@
X return 0;
X
X /* define methods */
X- luaL_openlib (L, NULL, methods, 0);
X+ luaL_setfuncs(L, methods, 0);
X
X /* define metamethods */
X lua_pushliteral (L, "__gc");
X@@ -939,13 +955,27 @@
X const char *password = luaL_optstring (L, 3, NULL);
X int use_tls = lua_toboolean (L, 4);
X conn_data *conn = (conn_data *)lua_newuserdata (L, sizeof(conn_data));
X+#if defined(LDAP_API_FEATURE_X_OPENLDAP) && LDAP_API_FEATURE_X_OPENLDAP >= 20300
X+ struct berval cred = { 0, NULL };
X+ char *host_with_schema = NULL;
X+#endif
X int err;
X
X /* Initialize */
X lualdap_setmeta (L, LUALDAP_CONNECTION_METATABLE);
X conn->version = 0;
X+#if defined(LDAP_API_FEATURE_X_OPENLDAP) && LDAP_API_FEATURE_X_OPENLDAP >= 20300
X+ host_with_schema = malloc(strlen(host) + 8);
X+ strcpy(host_with_schema, "ldap://");
X+ strcat(host_with_schema, host);
X+ err = ldap_initialize(&conn->ld, host_with_schema);
X+ free(host_with_schema);
X+ host_with_schema = NULL;
X+ if (err != LDAP_SUCCESS)
X+#else
X conn->ld = ldap_init (host, LDAP_PORT);
X if (conn->ld == NULL)
X+#endif
X return faildirect(L,LUALDAP_PREFIX"Error connecting to server");
X /* Set protocol version */
X conn->version = LDAP_VERSION3;
X@@ -959,7 +989,16 @@
X return faildirect (L, ldap_err2string (rc));
X }
X /* Bind to a server */
X+#if defined(LDAP_API_FEATURE_X_OPENLDAP) && LDAP_API_FEATURE_X_OPENLDAP >= 20300
X+ cred.bv_len = strlen(password);
X+ cred.bv_val = malloc(cred.bv_len+1);
X+ strcpy(cred.bv_val, password);
X+ err = ldap_sasl_bind_s (conn->ld, who, LDAP_SASL_SIMPLE, &cred, NULL, NULL, NULL);
X+ free(cred.bv_val);
X+ memset(&cred, 0, sizeof(cred));
X+#else
X err = ldap_bind_s (conn->ld, who, password, LDAP_AUTH_SIMPLE);
X+#endif
X if (err != LDAP_SUCCESS)
X return faildirect (L, ldap_err2string (err));
X
X@@ -987,13 +1026,15 @@
X ** Create ldap table and register the open method.
X */
X int luaopen_lualdap (lua_State *L) {
X- struct luaL_reg lualdap[] = {
X+ struct luaL_Reg lualdap[] = {
X {"open_simple", lualdap_open_simple},
X {NULL, NULL},
X };
X
X lualdap_createmeta (L);
X- luaL_openlib (L, LUALDAP_TABLENAME, lualdap, 0);
X+ luaL_newlib(L, lualdap);
X+ lua_pushvalue(L, -1);
X+ lua_setglobal(L, LUALDAP_TABLENAME);
X set_info (L);
X
X return 1;
7522ff50a0ea8b7f49ea0323984a7f75
echo x - lualdap/pkg-plist
sed 's/^X//' >lualdap/pkg-plist << '413db716190360393f6c1a30a26007c2'
X%%LUA_MODLIBDIR%%/lualdap.so
X%%PORTDOCS%%%%DOCSDIR%%/index.html
X%%PORTDOCS%%%%DOCSDIR%%/license.html
X%%PORTDOCS%%%%DOCSDIR%%/lualdap.png
X%%PORTDOCS%%%%DOCSDIR%%/manual.html
X%%PORTDOCS%%@dirrm %%DOCSDIR%%
413db716190360393f6c1a30a26007c2
echo x - lualdap/pkg-descr
sed 's/^X//' >lualdap/pkg-descr << '7e928cf87fe9ce4b0be56e914aa16c6d'
XLuaLDAP is a simple interface from Lua to an LDAP client.
XIn fact it is a bind to OpenLDAP or to ADSI. It enables a Lua program to:
X
X- connect to an LDAP server;
X- execute any operation (search, add, compare, delete, modify and rename);
X- retrieve entries and references of the search result.
X
XWWW: http://www.keplerproject.org/lualdap/
7e928cf87fe9ce4b0be56e914aa16c6d
echo x - lualdap/Makefile
sed 's/^X//' >lualdap/Makefile << '94fae91482b7d07aa8ffa7609dc1f85a'
X# New ports collection makefile for: lualdap
X# Date created: 5 Oct 2012
X# Whom: Piotr Florczyk <pf at itwf.pl>
X# $FreeBSD$
X
XPORTNAME= lualdap
XPORTVERSION= 1.1.0
XCATEGORIES= net
XMASTER_SITES= http://files.luaforge.net/releases/${PORTNAME}/${PORTNAME}/LuaLDAP${PORTVERSION}/
XPKGNAMEPREFIX= ${LUA_PKGNAMEPREFIX}
X
XMAINTAINER= pf at itwf.pl
XCOMMENT= LDAP support for the Lua language
X
XUSE_GMAKE= yes
XUSE_LUA?= 5.1+
XLUA_COMPS= lua
XUSE_OPENLDAP= yes
X
XMAKE_ARGS+= LUA_LIBDIR="${LUA_LIBDIR}" \
X LUA_INC="${LUA_INCDIR}" \
X OPENLDAP_LIB="-L ${PREFIX}/lib -lldap" \
X LUA_VERSION_NUM="${LUA_VER_STR}0"
X
XALL_TARGET=
X
Xdo-install:
X ${INSTALL_PROGRAM} ${WRKSRC}/src/lualdap.so.${PORTVERSION} ${LUA_MODLIBDIR}/${PORTNAME}.so
X. if !defined(NOPORTDOCS)
X @${MKDIR} ${DOCSDIR}
X @${INSTALL_DATA} ${WRKSRC}/doc/us/* ${DOCSDIR}
X. endif
X
X.include <bsd.port.mk>
94fae91482b7d07aa8ffa7609dc1f85a
echo x - lualdap/distinfo
sed 's/^X//' >lualdap/distinfo << 'bf03d21f8715b6dd063d1da72be90fcb'
XSHA256 (lualdap-1.1.0.tar.gz) = c2875704b8cdc6398c2f1cf25199a16d217ded2c696d134ae591935ab3c98d33
XSIZE (lualdap-1.1.0.tar.gz) = 30087
bf03d21f8715b6dd063d1da72be90fcb
exit
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list