overlays reworking

This commit is contained in:
Pierangelo Masarati 2004-03-18 18:59:46 +00:00
parent ea14637a0d
commit fa3baaeae9
11 changed files with 123 additions and 29 deletions

View file

@ -244,6 +244,10 @@ dnl ----------------------------------------------------------------
dnl SLAPD Overlay Options dnl SLAPD Overlay Options
AC_ARG_WITH(xxslapoverlays,[ AC_ARG_WITH(xxslapoverlays,[
SLAPD Overlay Options:]) SLAPD Overlay Options:])
OL_ARG_WITH(chain,[ --with-chain LDAP Chain Response no|yes|mod], no,
[no yes mod])
OL_ARG_WITH(denyop,[ --with-denyop Deny Operation overlay no|yes|mod], no,
[no yes mod])
OL_ARG_WITH(dyngroup,[ --with-dyngroup Dynamic Group overlay no|yes|mod], no, OL_ARG_WITH(dyngroup,[ --with-dyngroup Dynamic Group overlay no|yes|mod], no,
[no yes mod]) [no yes mod])
OL_ARG_WITH(proxycache,[ --with-proxycache Proxy Cache overlay no|yes|mod], no, OL_ARG_WITH(proxycache,[ --with-proxycache Proxy Cache overlay no|yes|mod], no,
@ -377,6 +381,13 @@ if test $ol_enable_slapd = no ; then
if test $ol_enable_rewrite = yes ; then if test $ol_enable_rewrite = yes ; then
AC_MSG_WARN([slapd disabled, ignoring --enable-rewrite argument]) AC_MSG_WARN([slapd disabled, ignoring --enable-rewrite argument])
fi fi
dnl overlays
if test $ol_with_chain != no ; then
AC_MSG_WARN([slapd disabled, ignoring --with-chain argument])
fi
if test $ol_with_denyop != no ; then
AC_MSG_WARN([slapd disabled, ignoring --with-denyop argument])
fi
if test $ol_with_dyngroup != no ; then if test $ol_with_dyngroup != no ; then
AC_MSG_WARN([slapd disabled, ignoring --with-dyngroup argument]) AC_MSG_WARN([slapd disabled, ignoring --with-dyngroup argument])
fi fi
@ -430,6 +441,8 @@ if test $ol_enable_slapd = no ; then
ol_enable_rewrite=no ol_enable_rewrite=no
ol_with_chain=no
ol_with_denyop=no
ol_with_dyngroup=no ol_with_dyngroup=no
ol_with_proxycache=no ol_with_proxycache=no
ol_with_rwm=no ol_with_rwm=no
@ -594,6 +607,8 @@ BUILD_RELAY_DYNAMIC=static
BUILD_SHELL_DYNAMIC=static BUILD_SHELL_DYNAMIC=static
BUILD_SQL_DYNAMIC=static BUILD_SQL_DYNAMIC=static
BUILD_CHAIN=no
BUILD_DENYOP=no
BUILD_DYNGROUP=no BUILD_DYNGROUP=no
BUILD_PROXYCACHE=no BUILD_PROXYCACHE=no
BUILD_RWM=no BUILD_RWM=no
@ -826,6 +841,14 @@ else
ol_with_relay_module=static ol_with_relay_module=static
ol_with_shell_module=static ol_with_shell_module=static
ol_with_sql_module=static ol_with_sql_module=static
if test $ol_with_chain = mod ; then
AC_MSG_WARN([building static chain overlay])
ol_with_chain=yes
fi
if test $ol_with_denyop = mod ; then
AC_MSG_WARN([building static denyop overlay])
ol_with_denyop=yes
fi
if test $ol_with_dyngroup = mod ; then if test $ol_with_dyngroup = mod ; then
AC_MSG_WARN([building static dyngroup overlay]) AC_MSG_WARN([building static dyngroup overlay])
ol_with_dyngroup=yes ol_with_dyngroup=yes
@ -2767,6 +2790,28 @@ if test "$ol_link_sql" != no ; then
fi fi
fi fi
if test "$ol_with_chain" != no ; then
BUILD_CHAIN=$ol_with_chain
if test "$ol_with_chain" = mod ; then
MFLAG=SLAPD_MOD_DYNAMIC
SLAPD_DYNAMIC_OVERLAYS="$SLAPD_DYNAMIC_OVERLAYS chain.la"
else
MFLAG=SLAPD_MOD_STATIC
fi
AC_DEFINE_UNQUOTED(SLAPD_OVER_CHAIN,$MFLAG,[define for Dynamic Group overlay])
fi
if test "$ol_with_denyop" != no ; then
BUILD_DENYOP=$ol_with_denyop
if test "$ol_with_denyop" = mod ; then
MFLAG=SLAPD_MOD_DYNAMIC
SLAPD_DYNAMIC_OVERLAYS="$SLAPD_DYNAMIC_OVERLAYS denyop.la"
else
MFLAG=SLAPD_MOD_STATIC
fi
AC_DEFINE_UNQUOTED(SLAPD_OVER_DENYOP,$MFLAG,[define for Dynamic Group overlay])
fi
if test "$ol_with_dyngroup" != no ; then if test "$ol_with_dyngroup" != no ; then
BUILD_DYNGROUP=$ol_with_dyngroup BUILD_DYNGROUP=$ol_with_dyngroup
if test "$ol_with_dyngroup" = mod ; then if test "$ol_with_dyngroup" = mod ; then
@ -2843,8 +2888,10 @@ AC_SUBST(WITH_TLS)
AC_SUBST(BUILD_LIBS_DYNAMIC) AC_SUBST(BUILD_LIBS_DYNAMIC)
AC_SUBST(BUILD_SLAPD) AC_SUBST(BUILD_SLAPD)
dnl slapi
AC_SUBST(BUILD_SLAPI) AC_SUBST(BUILD_SLAPI)
AC_SUBST(SLAPD_SLAPI_DEPEND) AC_SUBST(SLAPD_SLAPI_DEPEND)
dnl backends
AC_SUBST(BUILD_BDB) AC_SUBST(BUILD_BDB)
AC_SUBST(BUILD_DNSSRV) AC_SUBST(BUILD_DNSSRV)
AC_SUBST(BUILD_HDB) AC_SUBST(BUILD_HDB)
@ -2858,6 +2905,7 @@ AC_SUBST(BUILD_SLAPD)
AC_SUBST(BUILD_PERL) AC_SUBST(BUILD_PERL)
AC_SUBST(BUILD_SHELL) AC_SUBST(BUILD_SHELL)
AC_SUBST(BUILD_SQL) AC_SUBST(BUILD_SQL)
dnl backend modules
AC_SUBST(BUILD_BDB_DYNAMIC) AC_SUBST(BUILD_BDB_DYNAMIC)
AC_SUBST(BUILD_DNSSRV_DYNAMIC) AC_SUBST(BUILD_DNSSRV_DYNAMIC)
AC_SUBST(BUILD_HDB_DYNAMIC) AC_SUBST(BUILD_HDB_DYNAMIC)
@ -2871,6 +2919,9 @@ AC_SUBST(BUILD_SLAPD)
AC_SUBST(BUILD_RELAY_DYNAMIC) AC_SUBST(BUILD_RELAY_DYNAMIC)
AC_SUBST(BUILD_SHELL_DYNAMIC) AC_SUBST(BUILD_SHELL_DYNAMIC)
AC_SUBST(BUILD_SQL_DYNAMIC) AC_SUBST(BUILD_SQL_DYNAMIC)
dnl overlays
AC_SUBST(BUILD_CHAIN)
AC_SUBST(BUILD_DENYOP)
AC_SUBST(BUILD_DYNGROUP) AC_SUBST(BUILD_DYNGROUP)
AC_SUBST(BUILD_PROXYCACHE) AC_SUBST(BUILD_PROXYCACHE)
AC_SUBST(BUILD_RWM) AC_SUBST(BUILD_RWM)

View file

@ -12,7 +12,7 @@ running in the same
instance into a virtual naming context, with attributeType instance into a virtual naming context, with attributeType
and objectClass manipulation, if required. and objectClass manipulation, if required.
It requires the It requires the
.B rewrite-remap .B rwm
.BR overlay . .BR overlay .
.LP .LP
This backend and the above mentioned overlay are experimental. This backend and the above mentioned overlay are experimental.
@ -32,7 +32,7 @@ under a virtual naming context.
The presence of the directive implies that one single database The presence of the directive implies that one single database
will be presented under a virtual naming context. will be presented under a virtual naming context.
This directive automatically instantiates the This directive automatically instantiates the
.B rewrite-remap .B rwm
.BR overlay . .BR overlay .
If the optional If the optional
.B massage .B massage
@ -60,7 +60,7 @@ e.g. groups on one database and persons on another.
.LP .LP
.SH Caveats .SH Caveats
The The
.B rewrite-remap overlay .B rwm overlay
is far from complete. is far from complete.
.LP .LP
.SH EXAMPLES .SH EXAMPLES
@ -79,7 +79,7 @@ that looks up the real naming context for each operation, use
.nf .nf
database relay database relay
suffix "dc=virtual,dc=naming,dc=context" suffix "dc=virtual,dc=naming,dc=context"
overlay rewrite-remap overlay rwm
suffixmassage "dc=virtual,dc=naming,dc=context" suffixmassage "dc=virtual,dc=naming,dc=context"
"dc=real,dc=naming,dc=context" "dc=real,dc=naming,dc=context"
.fi .fi
@ -104,7 +104,7 @@ back from the real to the virtual naming context, use
.LP .LP
Note that the virtual database is bound to a single real database, Note that the virtual database is bound to a single real database,
so the so the
.B rewrite-remap overlay .B rwm overlay
is automatically instantiated, but the rewrite rules is automatically instantiated, but the rewrite rules
are written explicitly to map all the virtual to real are written explicitly to map all the virtual to real
naming context data flow, but none of the real to virtual. naming context data flow, but none of the real to virtual.

View file

@ -15,10 +15,10 @@
SRCS = init.c config.c search.c bind.c unbind.c add.c compare.c \ SRCS = init.c config.c search.c bind.c unbind.c add.c compare.c \
delete.c modify.c modrdn.c \ delete.c modify.c modrdn.c \
suffixmassage.c map.c extended.c chain.c suffixmassage.c map.c extended.c
OBJS = init.lo config.lo search.lo bind.lo unbind.lo add.lo compare.lo \ OBJS = init.lo config.lo search.lo bind.lo unbind.lo add.lo compare.lo \
delete.lo modify.lo modrdn.lo \ delete.lo modify.lo modrdn.lo \
suffixmassage.lo map.lo extended.lo chain.lo suffixmassage.lo map.lo extended.lo
LDAP_INCDIR= ../../../include LDAP_INCDIR= ../../../include
LDAP_LIBDIR= ../../../libraries LDAP_LIBDIR= ../../../libraries

View file

@ -184,8 +184,6 @@ extern int suffix_massage_config( struct rewrite_info *info,
extern int ldap_dnattr_rewrite( dncookie *dc, BerVarray a_vals ); extern int ldap_dnattr_rewrite( dncookie *dc, BerVarray a_vals );
extern int ldap_dnattr_result_rewrite( dncookie *dc, BerVarray a_vals ); extern int ldap_dnattr_result_rewrite( dncookie *dc, BerVarray a_vals );
extern int ldap_chain_setup();
#ifdef LDAP_BACK_PROXY_AUTHZ #ifdef LDAP_BACK_PROXY_AUTHZ
extern int extern int
ldap_back_proxy_authz_ctrl( ldap_back_proxy_authz_ctrl(

View file

@ -82,8 +82,6 @@ ldap_back_initialize(
bi->bi_connection_init = 0; bi->bi_connection_init = 0;
bi->bi_connection_destroy = ldap_back_conn_destroy; bi->bi_connection_destroy = ldap_back_conn_destroy;
ldap_chain_setup();
return 0; return 0;
} }

View file

@ -91,10 +91,9 @@ relay_back_db_config(
ri->ri_realsuffix = ndn; ri->ri_realsuffix = ndn;
if ( overlay_config( be, "rewrite-remap" ) ) { if ( overlay_config( be, "rwm" ) ) {
fprintf( stderr, "%s: line %d: unable to install " fprintf( stderr, "%s: line %d: unable to install "
"rewrite-remap overlay " "rwm overlay "
"in back-relay "
"in \"relay <dn> [massage]\" line\n", "in \"relay <dn> [massage]\" line\n",
fname, lineno ); fname, lineno );
return 1; return 1;

View file

@ -13,10 +13,18 @@
## top-level directory of the distribution or, alternatively, at ## top-level directory of the distribution or, alternatively, at
## <http://www.OpenLDAP.org/license.html>. ## <http://www.OpenLDAP.org/license.html>.
SRCS = overlays.c dyngroup.c pcache.c \ SRCS = overlays.c \
rwm.c rwmconf.c rwmdn.c rwmmap.c denyop.c chain.c \
OBJS = overlays.lo dyngroup.lo pcache.lo \ denyop.c \
rwm.lo rwmconf.lo rwmdn.lo rwmmap.lo denyop.lo dyngroup.c \
pcache.c \
rwm.c rwmconf.c rwmdn.c rwmmap.c
OBJS = overlays.lo \
chain.c \
denyop.lo \
dyngroup.lo \
pcache.lo \
rwm.lo rwmconf.lo rwmdn.lo rwmmap.lo
LDAP_INCDIR= ../../../include LDAP_INCDIR= ../../../include
LDAP_LIBDIR= ../../../libraries LDAP_LIBDIR= ../../../libraries
@ -33,6 +41,12 @@ PROGRAMS = @SLAPD_DYNAMIC_OVERLAYS@
XINCPATH = -I.. -I$(srcdir)/.. XINCPATH = -I.. -I$(srcdir)/..
XDEFS = $(MODULES_CPPFLAGS) XDEFS = $(MODULES_CPPFLAGS)
chain.la : chain.lo $(@PLAT@_LINK_LIBS)
$(LTLINK_MOD) -module -o $@ chain.lo version.lo $(LINK_LIBS)
denyop.la : denyop.lo $(@PLAT@_LINK_LIBS)
$(LTLINK_MOD) -module -o $@ denyop.lo version.lo $(LINK_LIBS)
dyngroup.la : dyngroup.lo $(@PLAT@_LINK_LIBS) dyngroup.la : dyngroup.lo $(@PLAT@_LINK_LIBS)
$(LTLINK_MOD) -module -o $@ dyngroup.lo version.lo $(LINK_LIBS) $(LTLINK_MOD) -module -o $@ dyngroup.lo version.lo $(LINK_LIBS)
@ -42,9 +56,6 @@ pcache.la : pcache.lo $(@PLAT@_LINK_LIBS)
rwm.la : rwm.lo $(@PLAT@_LINK_LIBS) rwm.la : rwm.lo $(@PLAT@_LINK_LIBS)
$(LTLINK_MOD) -module -o $@ rwm.lo rwmconf.lo rwmdn.lo rwmmap.lo version.lo $(LINK_LIBS) $(LTLINK_MOD) -module -o $@ rwm.lo rwmconf.lo rwmdn.lo rwmmap.lo version.lo $(LINK_LIBS)
denyop.la : denyop.lo $(@PLAT@_LINK_LIBS)
$(LTLINK_MOD) -module -o $@ denyop.lo version.lo $(LINK_LIBS)
install-local: $(PROGRAMS) install-local: $(PROGRAMS)
@if test -n "$?" ; then \ @if test -n "$?" ; then \
$(MKDIR) $(DESTDIR)$(moduledir); \ $(MKDIR) $(DESTDIR)$(moduledir); \

View file

@ -21,13 +21,17 @@
#include "portable.h" #include "portable.h"
#if defined(SLAPD_LDAP)
#ifdef SLAPD_OVER_CHAIN
#include <stdio.h> #include <stdio.h>
#include <ac/string.h> #include <ac/string.h>
#include <ac/socket.h> #include <ac/socket.h>
#include "slap.h" #include "slap.h"
#include "back-ldap.h" #include "../back-ldap/back-ldap.h"
static int static int
ldap_chain_response( Operation *op, SlapReply *rs ) ldap_chain_response( Operation *op, SlapReply *rs )
@ -145,10 +149,19 @@ static int ldap_chain_config(
{ {
slap_overinst *on = (slap_overinst *) be->bd_info; slap_overinst *on = (slap_overinst *) be->bd_info;
void *private = be->be_private; void *private = be->be_private;
char *argv0 = NULL;
int rc; int rc;
be->be_private = on->on_bi.bi_private; be->be_private = on->on_bi.bi_private;
if ( strncasecmp( argv[ 0 ], "chain-", sizeof( "chain-" ) - 1 ) == 0 ) {
argv0 = argv[ 0 ];
argv[ 0 ] = &argv[ 0 ][ sizeof( "chain-" ) - 1 ];
}
rc = ldap_back_db_config( be, fname, lineno, argc, argv ); rc = ldap_back_db_config( be, fname, lineno, argc, argv );
if ( argv0 ) {
argv[ 0 ] = argv0;
}
be->be_private = private; be->be_private = private;
return rc; return rc;
} }
@ -185,7 +198,7 @@ static int ldap_chain_destroy(
static slap_overinst ldapchain; static slap_overinst ldapchain;
int ldap_chain_setup() int chain_init()
{ {
ldapchain.on_bi.bi_type = "chain"; ldapchain.on_bi.bi_type = "chain";
ldapchain.on_bi.bi_db_init = ldap_chain_init; ldapchain.on_bi.bi_db_init = ldap_chain_init;
@ -195,3 +208,13 @@ int ldap_chain_setup()
return overlay_register( &ldapchain ); return overlay_register( &ldapchain );
} }
#if SLAPD_OVER_CHAIN == SLAPD_MOD_DYNAMIC
int init_module(int argc, char *argv[]) {
return chain_init();
}
#endif /* SLAPD_OVER_CHAIN == SLAPD_MOD_DYNAMIC */
#endif /* SLAPD_OVER_CHAIN */
#endif /* ! defined(SLAPD_LDAP) */

View file

@ -223,7 +223,8 @@ denyop_destroy(
static slap_overinst denyop; static slap_overinst denyop;
int denyop_init() { int
denyop_init() {
memset( &denyop, 0, sizeof( slap_overinst ) ); memset( &denyop, 0, sizeof( slap_overinst ) );
denyop.on_bi.bi_type = "denyop"; denyop.on_bi.bi_type = "denyop";
denyop.on_bi.bi_db_init = denyop_over_init; denyop.on_bi.bi_db_init = denyop_over_init;
@ -246,7 +247,8 @@ int denyop_init() {
} }
#if SLAPD_OVER_DENYOP == SLAPD_MOD_DYNAMIC #if SLAPD_OVER_DENYOP == SLAPD_MOD_DYNAMIC
int init_module(int argc, char *argv[]) { int
init_module(int argc, char *argv[]) {
return denyop_init(); return denyop_init();
} }
#endif #endif

View file

@ -24,6 +24,12 @@
#include "slap.h" #include "slap.h"
#if SLAPD_OVER_CHAIN == SLAPD_MOD_STATIC
extern int chain_init();
#endif
#if SLAPD_OVER_DENYOP == SLAPD_MOD_STATIC
extern int denyop_init();
#endif
#if SLAPD_OVER_DYNGROUP == SLAPD_MOD_STATIC #if SLAPD_OVER_DYNGROUP == SLAPD_MOD_STATIC
extern int dyngroup_init(); extern int dyngroup_init();
#endif #endif
@ -38,6 +44,12 @@ static struct {
char *name; char *name;
int (*func)(); int (*func)();
} funcs[] = { } funcs[] = {
#if SLAPD_OVER_CHAIN == SLAPD_MOD_STATIC
{ "LDAP Chain Response", chain_init },
#endif
#if SLAPD_OVER_DENYOP == SLAPD_MOD_STATIC
{ "Deny Operation", denyop_init },
#endif
#if SLAPD_OVER_DYNGROUP == SLAPD_MOD_STATIC #if SLAPD_OVER_DYNGROUP == SLAPD_MOD_STATIC
{ "Dynamic Group", dyngroup_init }, { "Dynamic Group", dyngroup_init },
#endif #endif

View file

@ -738,7 +738,7 @@ rwm_init(void)
{ {
memset( &rwm, 0, sizeof(slap_overinst) ); memset( &rwm, 0, sizeof(slap_overinst) );
rwm.on_bi.bi_type = "rewrite-remap"; rwm.on_bi.bi_type = "rwm";
rwm.on_bi.bi_db_init = rwm_over_init; rwm.on_bi.bi_db_init = rwm_over_init;
rwm.on_bi.bi_db_config = rwm_config; rwm.on_bi.bi_db_config = rwm_config;
rwm.on_bi.bi_db_destroy = rwm_destroy; rwm.on_bi.bi_db_destroy = rwm_destroy;