Sync with HEAD

This commit is contained in:
Kurt Zeilenga 2003-12-15 23:05:08 +00:00
parent 7a49afff08
commit 7570f0cc0a
276 changed files with 13314 additions and 19461 deletions

View file

@ -67,7 +67,7 @@ Making and Installing the OpenLDAP Distribution
6. Test the standalone system
This step requires the standalone LDAP server, slapd(8), with
BDB and/or LDBM support.
BDB, HDB, and/or LDBM support.
% make test

View file

@ -113,6 +113,19 @@
#define vsprintf ber_pvt_vsprintf
#endif
#ifdef OPENLDAP_FD_SETSIZE
/* assume installer desires to enlarge fd_set */
#ifdef HAVE_BITS_TYPES_H
#include <bits/types.h>
#endif
#ifdef __FD_SETSIZE
#undef __FD_SETSIZE
#define __FD_SETSIZE OPENLDAP_FD_SETSIZE
#else
#define FD_SETSIZE OPENLDAP_FD_SETSIZE
#endif
#endif
#include "ldap_cdefs.h"
#include "ldap_features.h"

View file

@ -320,12 +320,11 @@ OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_2,[-ldb-4.2])
OL_BERKELEY_DB_TRY(ol_cv_db_db_4_2,[-ldb-4-2])
OL_BERKELEY_DB_TRY(ol_cv_db_db_4,[-ldb-4])
OL_BERKELEY_DB_TRY(ol_cv_db_db4,[-ldb4])
OL_BERKELEY_DB_TRY(ol_cv_db_db,[-ldb])
OL_BERKELEY_DB_TRY(ol_cv_db_db41,[-ldb41])
OL_BERKELEY_DB_TRY(ol_cv_db_db_41,[-ldb-41])
OL_BERKELEY_DB_TRY(ol_cv_db_db_4_dot_1,[-ldb-4.1])
OL_BERKELEY_DB_TRY(ol_cv_db_db_4_1,[-ldb-4-1])
OL_BERKELEY_DB_TRY(ol_cv_db_db_4,[-ldb-4])
OL_BERKELEY_DB_TRY(ol_cv_db_db,[-ldb])
OL_BERKELEY_DB_TRY(ol_cv_db_db3,[-ldb3])
OL_BERKELEY_DB_TRY(ol_cv_db_db_3,[-ldb-3])
OL_BERKELEY_DB_TRY(ol_cv_db_db2,[-ldb2])

View file

@ -152,10 +152,6 @@ LDAP_LIBLBER_LA = $(LDAP_LIBDIR)/liblber/liblber.la
LDAP_LIBLDAP_LA = $(LDAP_LIBDIR)/libldap/libldap.la
LDAP_LIBLDAP_R_LA = $(LDAP_LIBDIR)/libldap_r/libldap_r.la
LDAP_LIBLDBM_A_no =
LDAP_LIBLDBM_A_yes = $(LDAP_LIBDIR)/libldbm/libldbm.a
LDAP_LIBLDBM_A = $(LDAP_LIBLDBM_A_@BUILD_LDBM@)
LDAP_LIBREWRITE_A = $(LDAP_LIBDIR)/librewrite/librewrite.a
LDAP_LIBLUNICODE_A = $(LDAP_LIBDIR)/liblunicode/liblunicode.a
LDAP_LIBLUTIL_A = $(LDAP_LIBDIR)/liblutil/liblutil.a
@ -164,8 +160,7 @@ LDAP_L = $(LDAP_LIBLUTIL_A) \
$(LDAP_LIBLDAP_LA) $(LDAP_LIBLBER_LA)
SLURPD_L = $(LDAP_LIBLUTIL_A) \
$(LDAP_LIBLDAP_R_LA) $(LDAP_LIBLBER_LA)
SLAPD_L = $(LDAP_LIBLDBM_A) \
$(LDAP_LIBLUNICODE_A) $(LDAP_LIBREWRITE_A) \
SLAPD_L = $(LDAP_LIBLUNICODE_A) $(LDAP_LIBREWRITE_A) \
$(SLURPD_L)
WRAP_LIBS = @WRAP_LIBS@
@ -187,7 +182,6 @@ SECURITY_LIBS = $(SASL_LIBS) $(KRB_LIBS) $(TLS_LIBS) $(AUTH_LIBS)
MODULES_CPPFLAGS = @SLAPD_MODULES_CPPFLAGS@
MODULES_LDFLAGS = @SLAPD_MODULES_LDFLAGS@
MODULES_LIBS = @MODULES_LIBS@
TERMCAP_LIBS = @TERMCAP_LIBS@
SLAPD_PERL_LDFLAGS = @SLAPD_PERL_LDFLAGS@
SLAPD_SQL_LDFLAGS = @SLAPD_SQL_LDFLAGS@

View file

@ -95,7 +95,7 @@ tool_common_usage( void )
{
static const char *const descriptions[] = {
N_(" -c continuous operation mode (do not stop on errors)\n"),
N_(" -C chase referrals\n"),
N_(" -C chase referrals (anonymously)\n"),
N_(" -d level set LDAP debugging level to `level'\n"),
N_(" -D binddn bind DN\n"),
N_(" -e [!]<ctrl>[=<ctrlparam>] general controls (! indicates criticality)\n")
@ -650,35 +650,31 @@ tool_conn_setup( int not, void (*private_setup)( LDAP * ) )
#endif
if ( !not ) {
/* connect to server */
int rc;
if( ( ldaphost != NULL || ldapport ) && ( ldapuri == NULL ) ) {
if ( verbose ) {
fprintf( stderr, "ldap_init( %s, %d )\n",
ldaphost != NULL ? ldaphost : "<DEFAULT>",
ldapport );
}
/* construct URL */
LDAPURLDesc url;
memset( &url, 0, sizeof(url));
ld = ldap_init( ldaphost, ldapport );
if( ld == NULL ) {
char buf[20 + sizeof(": ldap_init")];
sprintf( buf, "%.20s: ldap_init", prog );
perror( buf );
exit( EXIT_FAILURE );
}
url.lud_scheme = "ldap";
url.lud_host = ldaphost;
url.lud_port = ldapport;
url.lud_scope = LDAP_SCOPE_DEFAULT;
} else {
int rc;
if ( verbose ) {
fprintf( stderr, "ldap_initialize( %s )\n",
ldapuri != NULL ? ldapuri : "<DEFAULT>" );
}
rc = ldap_initialize( &ld, ldapuri );
if( rc != LDAP_SUCCESS ) {
fprintf( stderr,
"Could not create LDAP session handle (%d): %s\n",
rc, ldap_err2string(rc) );
exit( EXIT_FAILURE );
}
ldapuri = ldap_url_desc2str( &url );
}
if ( verbose ) {
fprintf( stderr, "ldap_initialize( %s )\n",
ldapuri != NULL ? ldapuri : "<DEFAULT>" );
}
rc = ldap_initialize( &ld, ldapuri );
if( rc != LDAP_SUCCESS ) {
fprintf( stderr,
"Could not create LDAP session handle (%d): %s\n",
rc, ldap_err2string(rc) );
exit( EXIT_FAILURE );
}
if( private_setup ) private_setup( ld );

2545
configure vendored

File diff suppressed because it is too large Load diff

View file

@ -239,6 +239,15 @@ OL_ARG_ENABLE(sql,[ --enable-sql enable sql backend], no)dnl
OL_ARG_WITH(sql_module,[ --with-sql-module module type static|dynamic], static,
[static dynamic])
dnl ----------------------------------------------------------------
dnl SLAPD Overlay Options
AC_ARG_WITH(xxslapoverlays,[
SLAPD Overlay Options:])
OL_ARG_WITH(dyngroup,[ --with-dyngroup Dynamic Group overlay no|yes|mod], no,
[no yes mod])
OL_ARG_WITH(proxycache,[ --with-proxycache Proxy Cache overlay no|yes|mod], no,
[no yes mod])
dnl ----------------------------------------------------------------
dnl SLURPD OPTIONS
AC_ARG_WITH(xxslurpdoptions,[
@ -359,6 +368,12 @@ if test $ol_enable_slapd = no ; then
if test $ol_enable_rewrite = yes ; then
AC_MSG_WARN([slapd disabled, ignoring --enable-rewrite argument])
fi
if test $ol_with_dyngroup != no ; then
AC_MSG_WARN([slapd disabled, ignoring --with-dyngroup argument])
fi
if test $ol_with_proxycache != no ; then
AC_MSG_WARN([slapd disabled, ignoring --with-proxycache argument])
fi
# force settings to no
ol_enable_slapi=no
@ -380,7 +395,6 @@ if test $ol_enable_slapd = no ; then
ol_enable_rlookups=no
ol_enable_aci=no
ol_enable_wrappers=no
ol_enable_dynamic=no
ol_with_ldbm_api=no
ol_with_ldbm_type=no
@ -402,6 +416,9 @@ if test $ol_enable_slapd = no ; then
ol_enable_rewrite=no
ol_with_dyngroup=no
ol_with_proxycache=no
elif test $ol_enable_ldbm = no ; then
dnl SLAPD without LDBM
@ -540,7 +557,6 @@ BUILD_LDAP=no
BUILD_LDBM=no
BUILD_META=no
BUILD_MONITOR=no
BUILD_CACHE=no
BUILD_NULL=no
BUILD_PASSWD=no
BUILD_PERL=no
@ -560,6 +576,11 @@ BUILD_PERL_DYNAMIC=static
BUILD_SHELL_DYNAMIC=static
BUILD_SQL_DYNAMIC=static
BUILD_DYNGROUP=no
BUILD_PROXYCACHE=no
SLAPD_DYNAMIC_OVERLAYS=
SLAPD_MODULES_LDFLAGS=
SLAPD_MODULES_CPPFLAGS=
@ -577,7 +598,6 @@ SLAPD_SQL_INCLUDES=
KRB4_LIBS=
KRB5_LIBS=
SASL_LIBS=
TERMCAP_LIBS=
TLS_LIBS=
MODULES_LIBS=
SLAPI_LIBS=
@ -676,7 +696,7 @@ if test $ol_enable_perl != no ; then
else
PERL_CPPFLAGS="`$PERLBIN -MExtUtils::Embed -e ccopts`"
PERL_LDFLAGS="`$PERLBIN -MExtUtils::Embed -e ldopts|sed -e 's/ -lc / /'`"
PERL_LDFLAGS="`$PERLBIN -MExtUtils::Embed -e ldopts|sed -e 's/ -lc / /' -e 's/ -lc$//'`"
if test x"$ol_with_perl_module" = "xstatic" ; then
SLAPD_PERL_LDFLAGS="$PERL_LDFLAGS"
@ -786,6 +806,14 @@ else
ol_with_perl_module=static
ol_with_shell_module=static
ol_with_sql_module=static
if test $ol_with_dyngroup = mod ; then
AC_MSG_WARN([building static dyngroup overlay])
ol_with_dyngroup = yes
fi
if test $ol_with_proxycache = mod ; then
AC_MSG_WARN([building static proxycache overlay])
ol_with_proxycache = yes
fi
fi
dnl ----------------------------------------------------------------
@ -808,6 +836,7 @@ AC_CHECK_HEADERS( \
arpa/inet.h \
arpa/nameser.h \
assert.h \
bits/types.h \
conio.h \
crypt.h \
direct.h \
@ -2080,7 +2109,7 @@ hosts_access(req)
AC_DEFINE(HAVE_TCPD,1, [define if you have -lwrap])
WRAP_LIBS="-lwrap"
elif test $ol_enable_wrappers = yes ; then
AC_MSG_ERROR([could not find TCP wrappers, select apppropriate options ore disable])
AC_MSG_ERROR([could not find TCP wrappers, select apppropriate options or disable])
else
AC_MSG_WARN([could not find TCP wrappers, support disabled])
WRAP_LIBS=""
@ -2129,34 +2158,6 @@ if test $ol_enable_sql != no ; then
fi
fi
dnl ----------------------------------------------------------------
dnl ud needs termcap (should insert check here)
ol_link_termcap=no
AC_CHECK_HEADERS(termcap.h ncurses.h)
if test $ol_link_termcap = no ; then
AC_CHECK_LIB(termcap, tputs, [have_termcap=yes], [have_termcap=no])
if test $have_termcap = yes ; then
AC_DEFINE(HAVE_TERMCAP, 1, [define if you have -ltermcap])
ol_link_termcap=yes
TERMCAP_LIBS=-ltermcap
fi
fi
if test $ol_link_termcap = no ; then
AC_CHECK_LIB(ncurses, initscr, [have_ncurses=yes], [have_ncurses=no])
if test $have_ncurses = yes ; then
AC_DEFINE(HAVE_NCURSES, 1, [define if you have -lncurses])
ol_link_termcap=yes
TERMCAP_LIBS=-lncurses
fi
fi
if test $ol_link_termcap = no ; then
AC_DEFINE(NO_TERMCAP,1, [define if you have no termcap support])
TERMCAP_LIBS=
fi
dnl ----------------------------------------------------------------
dnl
dnl Check for Cyrus SASL
@ -2551,6 +2552,9 @@ if test "$ol_link_modules" != no ; then
SLAPD_MODULES_LDFLAGS="-dlopen self"
fi
AC_DEFINE(SLAPD_MOD_STATIC,1,[statically linked module])
AC_DEFINE(SLAPD_MOD_DYNAMIC,2,[dynamically linked module])
if test "$ol_enable_bdb" != no ; then
AC_DEFINE(SLAPD_BDB,1,[define to support BDB backend])
BUILD_SLAPD=yes
@ -2637,10 +2641,6 @@ if test "$ol_enable_meta" != no ; then
BUILD_SLAPD=yes
BUILD_META=yes
BUILD_REWRITE=yes
if test $ol_enable_ldbm = yes -o \
$ol_enable_bdb = yes ; then
BUILD_CACHE=yes
fi
if test "$ol_with_meta_module" != static ; then
AC_DEFINE(SLAPD_META_DYNAMIC,1,
[define to support dynamic LDAP Metadirectory backend])
@ -2745,6 +2745,28 @@ if test "$ol_link_sql" != no ; then
fi
fi
if test "$ol_with_dyngroup" != no ; then
BUILD_DYNGROUP=$ol_with_dyngroup
if test "$ol_with_dyngroup" = mod ; then
MFLAG=SLAPD_MOD_DYNAMIC
SLAPD_DYNAMIC_OVERLAYS="$SLAPD_DYNAMIC_OVERLAYS dyngroup.la"
else
MFLAG=SLAPD_MOD_STATIC
fi
AC_DEFINE_UNQUOTED(SLAPD_OVER_DYNGROUP,$MFLAG,[define for Dynamic Group overlay])
fi
if test "$ol_with_proxycache" != no ; then
BUILD_PROXYCACHE=$ol_with_proxycache
if test "$ol_with_proxycache" = mod ; then
MFLAG=SLAPD_MOD_DYNAMIC
SLAPD_DYNAMIC_OVERLAYS="$SLAPD_DYNAMIC_OVERLAYS pcache.la"
else
MFLAG=SLAPD_MOD_STATIC
fi
AC_DEFINE_UNQUOTED(SLAPD_OVER_PROXYCACHE,$MFLAG,[define for Proxy Cache overlay])
fi
if test "$ol_enable_slurpd" != no -a "$ol_link_threads" != no -a \
$BUILD_SLAPD = yes ; then
BUILD_SLURPD=yes
@ -2796,7 +2818,6 @@ AC_SUBST(BUILD_SLAPD)
AC_SUBST(BUILD_LDBM)
AC_SUBST(BUILD_META)
AC_SUBST(BUILD_MONITOR)
AC_SUBST(BUILD_CACHE)
AC_SUBST(BUILD_NULL)
AC_SUBST(BUILD_PASSWD)
AC_SUBST(BUILD_PERL)
@ -2814,6 +2835,8 @@ AC_SUBST(BUILD_SLAPD)
AC_SUBST(BUILD_PERL_DYNAMIC)
AC_SUBST(BUILD_SHELL_DYNAMIC)
AC_SUBST(BUILD_SQL_DYNAMIC)
AC_SUBST(BUILD_DYNGROUP)
AC_SUBST(BUILD_PROXYCACHE)
AC_SUBST(BUILD_SLURPD)
AC_SUBST(LDAP_LIBS)
@ -2830,6 +2853,7 @@ AC_SUBST(SLAPD_MODULES_LDFLAGS)
AC_SUBST(SLAPD_NO_STATIC)
AC_SUBST(SLAPD_STATIC_BACKENDS)
AC_SUBST(SLAPD_DYNAMIC_BACKENDS)
AC_SUBST(SLAPD_DYNAMIC_OVERLAYS)
AC_SUBST(PERL_CPPFLAGS)
AC_SUBST(SLAPD_PERL_LDFLAGS)
@ -2838,7 +2862,6 @@ AC_SUBST(MOD_PERL_LDFLAGS)
AC_SUBST(KRB4_LIBS)
AC_SUBST(KRB5_LIBS)
AC_SUBST(SASL_LIBS)
AC_SUBST(TERMCAP_LIBS)
AC_SUBST(TLS_LIBS)
AC_SUBST(MODULES_LIBS)
AC_SUBST(SLAPI_LIBS)
@ -2876,7 +2899,6 @@ libraries/Makefile:build/top.mk:libraries/Makefile.in:build/dir.mk \
libraries/liblber/Makefile:build/top.mk:libraries/liblber/Makefile.in:build/lib.mk:build/lib-shared.mk \
libraries/libldap/Makefile:build/top.mk:libraries/libldap/Makefile.in:build/lib.mk:build/lib-shared.mk \
libraries/libldap_r/Makefile:build/top.mk:libraries/libldap_r/Makefile.in:build/lib.mk:build/lib-shared.mk \
libraries/libldbm/Makefile:build/top.mk:libraries/libldbm/Makefile.in:build/lib.mk:build/lib-static.mk \
libraries/liblunicode/Makefile:build/top.mk:libraries/liblunicode/Makefile.in:build/lib.mk:build/lib-static.mk \
libraries/liblutil/Makefile:build/top.mk:libraries/liblutil/Makefile.in:build/lib.mk:build/lib-static.mk \
libraries/librewrite/Makefile:build/top.mk:libraries/librewrite/Makefile.in:build/lib.mk:build/lib-static.mk \
@ -2896,6 +2918,7 @@ servers/slapd/back-shell/Makefile:build/top.mk:servers/slapd/back-shell/Makefile
servers/slapd/back-sql/Makefile:build/top.mk:servers/slapd/back-sql/Makefile.in:build/mod.mk \
servers/slapd/shell-backends/Makefile:build/top.mk:servers/slapd/shell-backends/Makefile.in:build/srv.mk \
servers/slapd/slapi/Makefile:build/top.mk:servers/slapd/slapi/Makefile.in:build/lib.mk:build/lib-shared.mk \
servers/slapd/overlays/Makefile:build/top.mk:servers/slapd/overlays/Makefile.in:build/lib.mk \
servers/slapd/tools/Makefile:build/top.mk:servers/slapd/tools/Makefile.in \
servers/slurpd/Makefile:build/top.mk:servers/slurpd/Makefile.in:build/srv.mk \
tests/Makefile:build/top.mk:tests/Makefile.in:build/dir.mk \

View file

@ -20,7 +20,7 @@
* additional notices.
*/
/* ACKNOWLEDGEMENTS:
* This work was initially developed by John Doe (of FOO Corporation).
* Additional significant contributors include:
* Jane Doe of BAR, Inc. (added this and that)
* This work was initially developed by Jane Doe for inclusion in
* OpenLDAP Software. Additional significant contributors include:
* John Doe
*/

View file

@ -43,7 +43,6 @@ Implement authPassword (RFC 3112)
Implement DIT Structure Rules and Name Forms
Implement LDAP Transactions extension
Implement native support for simple SASL mechanisms (e.g. EXTERNAL and PLAIN)
Implement LDAPprep
Redesign slapd memory allocation fault handling
Localize tools
@ -51,8 +50,7 @@ Localize tools
Small projects
--------------
Add dumpasn1 logging support
Implement SASLprep
Redesign test suite to use configure generated run script
Implement LDAPprep and SASLprep
Add tests to test suite
Convert utfconv.txt into man page(s).
Recode linked-list structs to use <ldap_queue.h> macros

View file

@ -1,18 +1,18 @@
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-Drafts.
Internet-Drafts (I-Ds) are working documents of the Internet
Engineering Task Force (IETF), its areas, its working groups, and
individual contributors.
Internet-Drafts are draft documents valid for a maximum of six
months and may be updated, replaced, or obsoleted by other documents
at any time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
I-Ds are only valid for a maximum of six months and may be updated,
replaced, or obsoleted by other documents at any time. It is
inappropriate to use I-Ds as reference material or to cite them
other than as "work in progress."
OpenLDAP maintains copies of drafts for which we find interesting.
Existance here does not necessarily imply any support nor any plans
to support for the I-D. The I-Ds found in this directory may be
stale, expired, or otherwise out of date.
The OpenLDAP Project maintains copies of I-D for which we find
interesting. Existance here does not necessarily imply any support
nor any plans to support for the I-D. The I-Ds found in this
directory may be stale, expired, or otherwise out of date.
Please refer to http://www.ietf.org/ for latest revisions (and
Please go to <http://www.ietf.org/> for latest revisions (and
status).
$OpenLDAP$

File diff suppressed because it is too large Load diff

View file

@ -6,12 +6,14 @@
INTERNET-DRAFT Editor: Kurt D. Zeilenga
Intended Category: Standard Track OpenLDAP Foundation
Expires in six months 4 May 2003
Expires in six months 27 October 2003
Obsoletes: 2253
LDAP: String Representation of Distinguished Names
<draft-ietf-ldapbis-dn-10.txt>
<draft-ietf-ldapbis-dn-12.txt>
Status of Memo
@ -23,7 +25,7 @@ Status of Memo
revision, submitted to the RFC Editor as a Standard Track document
replacing RFC 2253. Distribution of this memo is unlimited.
Technical discussion of this document will take place on the IETF LDAP
Revision (LDAPbis) Working Group mailing list
Revision (LDAPBIS) Working Group mailing list
<ietf-ldapbis@openldap.org>. Please send editorial comments directly
to the document editor <Kurt@OpenLDAP.org>.
@ -40,10 +42,22 @@ Status of Memo
Internet-Draft Shadow Directories can be accessed at
<http://www.ietf.org/shadow.html>.
Copyright 2003, The Internet Society. All Rights Reserved.
Copyright (C) The Internet Society (2003). All Rights Reserved.
Please see the Copyright section near the end of this document for
more information.
Please see the Full Copyright section near the end of this document
for more information.
Zeilenga LDAP: Distinguished Names [Page 1]
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
Abstract
@ -52,14 +66,6 @@ Abstract
entries in the directory. This document defines the string
representation used in the Lightweight Directory Access Protocol
(LDAP) to transfer distinguished names. The string representation is
Zeilenga LDAP: Distinguished Names [Page 1]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
designed to give a clean representation of commonly used distinguished
names, while being able to represent any distinguished name.
@ -75,13 +81,14 @@ Conventions
In X.500-based directory systems [X.500], including those accessed
using the Lightweight Directory Access Protocol (LDAP) [Roadmap],
distinguished names (DNs) are used to unambiguously refer to a
directory entry [X.501][Models].
distinguished names (DNs) are used to unambiguously refer to directory
entries [X.501][Models].
The structure of a DN [X.501] is described in terms of ASN.1 [X.680].
In the X.500 Directory Access Protocol [X.511] (and other ITU-defined
directory protocols), DNs are encoded using the Basic Encoding Rules
(BER) [X.690]. In LDAP, DNs are represented in string form.
(BER) [X.690]. In LDAP, DNs are represented in the string form
described in this document.
It is important to have a common format to be able to unambiguously
represent a distinguished name. The primary goal of this
@ -89,8 +96,8 @@ Conventions
to have names that are human readable. It is not expected that LDAP
implementations with a human user interface would display these
strings directly to the user, but would most likely be performing
translations (such as expressing attribute type names in one of the
local national languages).
translations (such as expressing attribute type names in the local
national language).
This document defines the string representation of Distinguished Names
used in LDAP [Protocol][Syntaxes]. Section 2 details the RECOMMENDED
@ -102,6 +109,13 @@ Conventions
from its ASN.1 structured representation to a string, all algorithms
MUST produce strings which adhere to the requirements of Section 3.
Zeilenga LDAP: Distinguished Names [Page 2]
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
This document does not define a canonical string representation for
DNs. Comparison of DNs for equality is to be performed in accordance
with the distinguishedNameMatch matching rule [Syntaxes].
@ -109,13 +123,6 @@ Conventions
This document is an integral part of the LDAP Technical Specification
[Roadmap].
Zeilenga LDAP: Distinguished Names [Page 2]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
This document obsoletes RFC 2253. Changes since RFC 2253 are
summarized in Appendix B.
@ -141,7 +148,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
This section defines the RECOMMENDED algorithm for converting a
distinguished name from an ASN.1 structured representation to an UTF-8
[RFC2279] encoded Universal Character Set (UCS) [ISO10646] character
[UTF-8] encoded Universal Character Set (UCS) [ISO10646] character
string representation. Other documents may describe other algorithms
for converting a distinguished name to a string, but only strings
which conform to the grammar defined in Section 3 MUST be produced by
@ -158,20 +165,19 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
2.2), starting with the last element of the sequence and moving
backwards toward the first.
Zeilenga LDAP: Distinguished Names [Page 3]
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
The encodings of adjoining RelativeDistinguishedNames are separated by
a comma ("," U+002C) character.
2.2. Converting RelativeDistinguishedName
Zeilenga LDAP: Distinguished Names [Page 3]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
When converting from an ASN.1 RelativeDistinguishedName to a string,
the output consists of the string encodings of each
AttributeTypeAndValue (according to Section 2.3), in any order.
@ -189,14 +195,14 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
encoding of the AttributeValue is given in Section 2.4.
If the AttributeType is defined to have a short name and that short
name is known to be registered [REGISTRY] as identifying the
name is known to be registered [REGISTRY][BCP64bis] as identifying the
AttributeType, that short name, a <descr>, is used. Otherwise the
AttributeType is encoded as the dotted-decimal encoding, a
<numericoid>, of its OBJECT IDENTIFIER. The <descr> and <numericoid>
is defined in [Models].
Implementations are not expected dynamically update their knowledge of
registered short names. However, implementations SHOULD provide a
Implementations are not expected to dynamically update their knowledge
of registered short names. However, implementations SHOULD provide a
mechanism to allow its knowledge of registered short names to be
updated.
@ -214,20 +220,20 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
desired (see Section 5.2).
Otherwise, if the AttributeValue is of a syntax which has a native
string encoding, the value is converted first to a UTF-8 encoded UCS
string according to its syntax specification (see for example Section
6 of [Syntaxes]). If that UTF-8 encoded UCS string does not have any
of the following characters which need escaping, then that string can
be used as the string representation of the value.
Zeilenga LDAP: Distinguished Names [Page 4]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
string encoding, the value is converted first to a UTF-8 encoded UCS
string according to its syntax specification (see for example Section
6 of [Syntaxes]). If that UTF-8 encoded UCS string does not have any
of the following characters which need escaping, then that string can
be used as the string representation of the value.
- a space (" " U+0020) or number sign ("#" U+0023) occurring at
the beginning of the string;
@ -259,7 +265,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
3. Parsing a String back to a Distinguished Name
The string representation of Distinguished Names is restricted to
UTF-8 [RFC2279] encoded characters from the Universal Character Set
UTF-8 [UTF-8] encoded characters from the Universal Character Set
(UCS) [ISO10646]. The structure of this string representation is
specified using the following Augmented BNF [RFC2234] grammar:
@ -271,19 +277,18 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
attributeTypeAndValue = attributeType EQUALS attributeValue
Zeilenga LDAP: Distinguished Names [Page 5]
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
attributeType = descr / numericoid
attributeValue = string / hexstring
; The UTF-8 string shall not contain NULL, ESC, or
Zeilenga LDAP: Distinguished Names [Page 5]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
; one of escaped, shall not start with SHARP or SPACE,
; and shall must not end with SPACE.
string = [ (leadchar / pair)
@ -327,19 +332,19 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
replace <ESC><special> with <special>;
replace <ESC><hexpair> with the octet indicated by the <hexpair>.
If in <hexstring> form, a BER representation can be obtained from
converting each <hexpair> of the <hexstring> to the octet indicated by
the <hexpair>.
One or more attribute values assertions, separated by <PLUS>, for a
Zeilenga LDAP: Distinguished Names [Page 6]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
If in <hexstring> form, a BER representation can be obtained from
converting each <hexpair> of the <hexstring> to the octet indicated by
the <hexpair>.
One or more attribute values assertions, separated by <PLUS>, for a
relative distinguished name.
Zero or more relative distinguished names, separated by <COMMA>, for a
@ -383,19 +388,19 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
OU=Sales+CN=J. Smith,DC=example,DC=net
This example shows the method of escaping of a comma in a common
name:
CN=John Smith\, III,DC=example,DC=net
An example name in which a value contains a carriage return
Zeilenga LDAP: Distinguished Names [Page 7]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
name:
CN=John Smith\, III,DC=example,DC=net
An example name in which a value contains a carriage return
character:
CN=Before\0dAfter,DC=example,DC=net
@ -439,17 +444,19 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
- the common name of the object (i.e. a person's full name)
- an email or TCP/IP address
- its physical location (country, locality, city, street address)
- organizational attributes (such as department name or affiliation)
Most countries have privacy laws regarding the publication of
information about people.
Zeilenga LDAP: Distinguished Names [Page 8]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
- its physical location (country, locality, city, street address)
- organizational attributes (such as department name or affiliation)
Most countries have privacy laws regarding the publication of
information about people.
5.2. Use of Distinguished Names in Security Applications
@ -491,79 +498,97 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
8. Normative References
[X.501] "The Directory -- Models," ITU-T Rec. X.501(1993).
[X.680] ITU-T, "Abstract Syntax Notation One (ASN.1) -
Specification of Basic Notation", X.680, 1994.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119).
[RFC2234] Crocker, D., and P. Overell, "Augmented BNF for Syntax
[X.501] International Telecommunication Union -
Telecommunication Standardization Sector, "The Directory
Zeilenga LDAP: Distinguished Names [Page 9]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
Specifications: ABNF", RFC 2234, November 1997.
-- Models," X.501(1993) (also ISO/IEC 9594-2:1994).
[RFC2279] Yergeau, F., "UTF-8, a transformation format of ISO
10646", RFC 2279, January 1998.
[X.680] International Telecommunication Union -
Telecommunication Standardization Sector, "Abstract
Syntax Notation One (ASN.1) - Specification of Basic
Notation", X.680(1997) (also ISO/IEC 8824-1:1998).
[Models] K. Zeilenga (editor), "LDAP: Directory Information
Models", draft-ietf-ldapbis-models-xx.txt, a work in
progress.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[Roadmap] K. Zeilenga, "LDAP: Technical Specification Road Map",
draft-ietf-ldapbis-roadmap-xx.txt, a work in progress.
[RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[Protocol] J. Sermersheim (editor), "LDAP: The Protocol",
draft-ietf-ldapbis-protocol-xx.txt, a work in progress.
[UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO
10646", draft-yergeau-rfc2279bis-xx.txt, a work in
progress.
[Syntaxes] S. Legg (editor), "LDAP: Syntaxes",
draft-ietf-ldapbis-syntaxes-xx.txt, a work in progress.
[Models] Zeilenga, K. (editor), "LDAP: Directory Information
Models", draft-ietf-ldapbis-models-xx.txt, a work in
progress.
[Schema] K. Dally (editor), "LDAP: User Schema",
draft-ietf-ldapbis-user-schema-xx.txt, a work in
progress.
[Roadmap] Zeilenga, K. (editor), "LDAP: Technical Specification
Road Map", draft-ietf-ldapbis-roadmap-xx.txt, a work in
progress.
[ISO10646] Universal Multiple-Octet Coded Character Set (UCS) -
Architecture and Basic Multilingual Plane, ISO/IEC
10646-1 : 1993.
[Protocol] Sermersheim, J. (editor), "LDAP: The Protocol",
draft-ietf-ldapbis-protocol-xx.txt, a work in progress.
[Syntaxes] Legg, S. (editor), "LDAP: Syntaxes and Matching Rules",
draft-ietf-ldapbis-syntaxes-xx.txt, a work in progress.
[Schema] Dally, K. (editor), "LDAP: User Schema",
draft-ietf-ldapbis-user-schema-xx.txt, a work in
progress.
[ISO10646] International Organization for Standardization,
"Universal Multiple-Octet Coded Character Set (UCS) -
Architecture and Basic Multilingual Plane", ISO/IEC
10646-1 : 1993.
[REGISTRY] IANA, Object Identifier Descriptors Registry,
<http://www.iana.org/...>.
9. Informative References
[X.500] "The Directory -- overview of concepts, models and
services," ITU-T Rec. X.500(1993).
[X.690] ITU-T, "Specification of ASN.1 encoding rules: Basic,
Canonical, and Distinguished Encoding Rules", X.690,
1994.
[RFC3383] K. Zeilenga, "IANA Considerations for LDAP", BCP 64 (also
RFC 3383), September 2002.
[RFC2849] G. Good, "The LDAP Data Interchange Format (LDIF) -
Technical Specification", RFC 2849, June 2000.
Appendix A. Presentation Issues
This appendix is provided for informational purposes only, it is not a
normative part of this specification.
[ASCII] Coded Character Set--7-bit American Standard Code for
Information Interchange, ANSI X3.4-1986.
Zeilenga LDAP: Distinguished Names [Page 10]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
[X.500] International Telecommunication Union -
Telecommunication Standardization Sector, "The Directory
-- Overview of concepts, models and services,"
X.500(1993) (also ISO/IEC 9594-1:1994).
[X.690] International Telecommunication Union -
Telecommunication Standardization Sector, "Specification
of ASN.1 encoding rules: Basic Encoding Rules (BER),
Canonical Encoding Rules (CER), and Distinguished
Encoding Rules (DER)", X.690(1997) (also ISO/IEC
8825-1:1998).
[RFC2849] Good, G., "The LDAP Data Interchange Format (LDIF) -
Technical Specification", RFC 2849, June 2000.
[BCP64bis] Zeilenga, K., "IANA Considerations for LDAP", draft-
ietf-ldapbis-bcp64-xx.txt, a work in progress.
Appendix A. Presentation Issues
This appendix is provided for informational purposes only, it is not a
normative part of this specification.
The string representation described in this document is not intended
to be presented to humans without translation. However, at times it
may be desirable to present non-translated DN strings to users. This
@ -587,6 +612,14 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
demonstrated in the final example of Section 4).
When a DN string is displayed in free form text, it is often necessary
Zeilenga LDAP: Distinguished Names [Page 11]
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
to distinguish the DN string from surrounding text. While this is
often done with white space (as demonstrated in Section 4), it is
noted that DN strings may end with white space. Careful readers of
@ -612,14 +645,6 @@ INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
so it has been line-wrapped for readability. The extra white
space is to be removed before the DN string is used in LDAP.
Zeilenga LDAP: Distinguished Names [Page 11]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
It is not advised to insert white space otherwise as it may not be
obvious to the user which white space is part of the DN string and
which white space was added for readability.
@ -642,18 +667,27 @@ Appendix B. Changes made since RFC 2253
The following substantive changes were made to RFC 2253:
- Removed IESG Note. The IESG Note has been addressed.
- Clarified (in Section 1), that this document does not define a
- Clarified (in Section 1) that this document does not define a
Zeilenga LDAP: Distinguished Names [Page 12]
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
canonical string representation.
- Revised specification (in Section 2) to allow short names of any
registered attribute type to appear in string representations of
DNs instead of being restricted to a "published table". Remove
"as an example" language. Added statement (in Section 3) allowing
recognition of additional names but require recognization of those
names in the published table. The table is now published in
Section 3.
- Replaced specification of additional requirements for LDAPv2
implementations which also support LDAPv3 (RFC 2253, Section 4)
with a statement (in Section 3) allowing recognition of
alternative string representations.
- Clarified (in Section 2.3) that the "published" table of names
which may be appear in DNs is the table which Section 2.3
provides. Remove "as an example" language. Noted this table is
not extensible. Added statement (in Section 3) allowing
recognition of additional names. Added security considerations
(Section 5.3) regarding the use of other names.
- Updated Section 2.3 to indicate attribute type name strings are
case insensitive.
- Updated Section 2.4 to allow hex pair escaping of all characters
@ -669,21 +703,48 @@ Appendix B. Changes made since RFC 2253
- Added discussion of presentation issues (Appendix A).
- Added this appendix.
Zeilenga LDAP: Distinguished Names [Page 12]
INTERNET-DRAFT draft-ietf-ldapbis-dn-10.txt 4 May 2003
In addition, numerous editorial changes were made.
Copyright 2003, The Internet Society. All Rights Reserved.
Intellectual Property Rights
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to pertain
to the implementation or use of the technology described in this
document or the extent to which any license under such rights might or
might not be available; neither does it represent that it has made any
effort to identify any such rights. Information on the IETF's
procedures with respect to rights in standards-track and
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances of
licenses to be made available, or the result of an attempt made to
obtain a general license or permission for the use of such proprietary
rights by implementors or users of this specification can be obtained
from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
Zeilenga LDAP: Distinguished Names [Page 13]
INTERNET-DRAFT draft-ietf-ldapbis-dn-12.txt 27 October 2003
rights which may cover technology that may be required to practice
this standard. Please address the information to the IETF Executive
Director.
Full Copyright
Copyright (C) The Internet Society (2003). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published and
or assist in its implmentation may be prepared, copied, published and
distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
@ -694,15 +755,6 @@ Copyright 2003, The Internet Society. All Rights Reserved.
copyrights defined in the Internet Standards process must be followed,
or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
@ -727,5 +779,9 @@ Copyright 2003, The Internet Society. All Rights Reserved.
Zeilenga LDAP: Distinguished Names [Page 13]
Zeilenga LDAP: Distinguished Names [Page 14]

View file

@ -7,12 +7,12 @@
Network Working Group M. Smith, Editor
Request for Comments: DRAFT Netscape Communications Corp.
Obsoletes: RFC 2254 T. Howes
Expires: 28 August 2003 Opsware, Inc.
28 February 2003
Expires: 25 April 2004 Opsware, Inc.
25 October 2003
LDAP: String Representation of Search Filters
<draft-ietf-ldapbis-filter-04.txt>
<draft-ietf-ldapbis-filter-05.txt>
@ -57,7 +57,7 @@ Expires: 28 August 2003 Opsware, Inc.
Smith & Howes Intended Category: Standards Track [Page 1]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
3. Table of Contents
@ -72,15 +72,16 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
8. Security Considerations........................................7
9. Normative References...........................................7
10. Informative References.........................................8
11. Acknowledgments................................................8
12. Authors' Address...............................................8
13. Full Copyright Statement.......................................9
14. Appendix A: Changes Since RFC 2254.............................9
14.1. Technical Changes...........................................9
14.2. Editorial Changes...........................................10
15. Appendix B: Changes Since Previous Document Revision...........11
15.1. Technical Changes...........................................11
15.2. Editorial Changes...........................................11
11. Intellectual Property Rights...................................8
12. Acknowledgments................................................8
13. Authors' Address...............................................8
14. Full Copyright Statement.......................................9
15. Appendix A: Changes Since RFC 2254.............................9
15.1. Technical Changes...........................................10
15.2. Editorial Changes...........................................10
16. Appendix B: Changes Since Previous Document Revision...........11
16.1. Technical Changes...........................................12
16.2. Editorial Changes...........................................12
4. Introduction
@ -110,10 +111,9 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
Smith & Howes Intended Category: Standards Track [Page 2]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
Filter ::= CHOICE {
@ -160,7 +160,7 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
LDAPString ::= OCTET STRING -- UTF-8 encoded,
-- ISO 10646 characters
where the LDAPString above is limited to the UTF-8 encoding [RFC2279]
where the LDAPString above is limited to the UTF-8 encoding [UTF-8]
of the ISO 10646 character set [ISO10646]. The AttributeDescription
is a string representation of the attribute description and is
defined in [Protocol]. The AttributeValue and AssertionValue OCTET
@ -169,7 +169,7 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
Smith & Howes Intended Category: Standards Track [Page 3]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
STRING have the form defined in [Syntaxes]. The Filter is encoded
@ -201,10 +201,10 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
extensible = attr [dnattrs] [matchingrule] COLON EQUALS assertionvalue
/ [dnattrs] matchingrule COLON EQUALS assertionvalue
/ COLON EQUALS assertionvalue
present = attr EQUALS ASTERIX
present = attr EQUALS ASTERISK
substring = attr EQUALS [initial] any [final]
initial = assertionvalue
any = ASTERIX *(assertionvalue ASTERIX)
any = ASTERISK *(assertionvalue ASTERISK)
final = assertionvalue
attr = attributedescription
; The attributedescription rule is defined in
@ -219,18 +219,18 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
escaped = ESC HEX HEX
UTF1SUBSET = %x01-27 / %x2B-5B / %x5D-7F
; UTF1SUBSET excludes 0x00 (NUL), LPAREN,
; RPAREN, ASTERIX, and ESC.
; RPAREN, ASTERISK, and ESC.
Smith & Howes Intended Category: Standards Track [Page 4]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
EXCLAMATION = %x21 ; exclamation mark ("!")
AMPERSAND = %x26 ; ampersand (or AND symbol) ("&")
ASTERIX = %x2A ; asterix ("*")
ASTERISK = %x2A ; asterisk ("*")
COLON = %x3A ; colon (":")
VERTBAR = %x7C ; vertical bar (or pipe) ("|")
TILDE = %x7E ; tilde ("~")
@ -264,11 +264,11 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
As indicated by the valueencoding rule, implementations MUST escape
all octets greater than 0x7F that are not part of a valid UTF-8
encoding sequence when they generate a string representation of a
search filter. Since RFC 2254 does not clearly define the term
"string representation" (and in particular does mention that the
string representation of an LDAP search filter is a string of UTF-8
encoded ISO 10646-1 characters) implementations SHOULD accept as
input strings that include invalid UTF-8 octet sequences.
search filter. Implementations SHOULD accept as input a string that
includes invalid UTF-8 octet sequences. This is necessary because RFC
2254 did not clearly define the term "string representation" (and in
particular did not mention that the string representation of an LDAP
search filter is a string of UTF-8 encoded ISO 10646-1 characters).
7. Examples
@ -281,7 +281,7 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
Smith & Howes Intended Category: Standards Track [Page 5]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
(!(cn=Tim Howes))
@ -297,7 +297,6 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
(o:dn:=Ace Industry)
(:1.2.3:=Wilma Flintstone)
(:dn:2.4.6.8.10:=Dino)
(:=Fred Flintstone)
The first example shows use of the matching rule "1.2.3.4.5".
@ -316,13 +315,10 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
The fifth example is a filter that should be applied to any attribute
supporting the matching rule given (since the attr has been omitted).
The sixth example is also a filter that should be applied to any
attribute supporting the matching rule given. Attributes supporting
the matching rule contained in the DN should also be considered.
The seventh and final example is a filter that should be applied to
any attribute (since both the attr and matching rule have been
omitted).
The sixth and final example is also a filter that should be applied
to any attribute supporting the matching rule given. Attributes
supporting the matching rule contained in the DN should also be
considered.
The following examples illustrate the use of the escaping mechanism.
@ -333,16 +329,17 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
(sn=Lu\c4\8di\c4\87)
(1.3.6.1.4.1.1466.0=\04\02\48\69)
The first example shows the use of the escaping mechanism to
represent parenthesis characters. The second shows how to represent a
"*" in an assertion value, preventing it from being interpreted as a
Smith & Howes Intended Category: Standards Track [Page 6]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
The first example shows the use of the escaping mechanism to
represent parenthesis characters. The second shows how to represent a
"*" in an assertion value, preventing it from being interpreted as a
substring indicator. The third illustrates the escaping of the
backslash character.
@ -388,33 +385,53 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
[RFC2119] S. Bradner, "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2234] Crocker, D., Overell, P., "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
Smith & Howes Intended Category: Standards Track [Page 7]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
[RFC2234] Crocker, D., Overell, P., "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[RFC2279] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
RFC 2279, January 1998.
[Roadmap] Zeilenga, K. (editor), "LDAP: Technical Specification Road
Map", draft-ietf-ldapbis-roadmap-xx.txt, a work in progress.
[Syntaxes] Dally, K. (editor), "LDAP: Syntaxes", draft-ietf-ldapbis-
syntaxes-xx.txt, a work in progress.
[UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
draft-yergeau-rfc2279bis-xx.txt, a work in progress.
10. Informative References
None.
11. Intellectual Property Rights
11. Acknowledgments
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; neither does it represent that it
has made any effort to identify any such rights. Information on the
IETF's procedures with respect to rights in standards-track and
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances of
licenses to be made available, or the result of an attempt made to
obtain a general license or permission for the use of such
proprietary rights by implementors or users of this specification can
be obtained from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights which may cover technology that may be required to practice
this standard. Please address the information to the IETF Executive
Director.
12. Acknowledgments
This document replaces RFC 2254 by Tim Howes. Changes included in
this revised specification are based upon discussions among the
@ -424,15 +441,23 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
acknowledged.
12. Authors' Address
13. Authors' Address
Mark Smith, Editor
Smith & Howes Intended Category: Standards Track [Page 8]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
Netscape Communications Corp.
360 W. Caribbean Drive
Sunnyvale, CA 94089
USA
+1 650 937-3477
mcs@netscape.com
MarkCSmithWork@aol.com
Tim Howes
Opsware, Inc.
@ -442,19 +467,9 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
+1 408 744-7509
howes@opsware.com
14. Full Copyright Statement
Smith & Howes Intended Category: Standards Track [Page 8]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
13. Full Copyright Statement
Copyright (C) The Internet Society (2003). All Rights Reserved.
Copyright (C) The Internet Society (2003). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
@ -481,9 +496,19 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
14. Appendix A: Changes Since RFC 2254
15. Appendix A: Changes Since RFC 2254
14.1. Technical Changes
Smith & Howes Intended Category: Standards Track [Page 9]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
15.1. Technical Changes
The following technical changes were made to the contents of the
"String Search Filter Definition" section:
@ -501,13 +526,6 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
precisely reference productions from the [Models] and [Protocol]
documents.
Smith & Howes Intended Category: Standards Track [Page 9]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
Introduced the "valueencoding" and associated "normal" and "escaped"
rules to reduce the dependence on descriptive text. The "normal"
production restricts filter strings to valid UTF-8 sequences.
@ -519,7 +537,7 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
of a clear definition of "string representation."
14.2. Editorial Changes
15.2. Editorial Changes
Changed document title to include "LDAP:" prefix.
@ -529,14 +547,23 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
Header and "Authors' Addresses" sections: added Mark Smith as the
document editor and updated affiliation and contact information.
"Table of Contents" section: added.
"Table of Contents" and "Intellectual Property Rights" sections:
added.
Copyright: updated the year.
Copyright: updated per latest IETF guidelines.
"Abstract" section: separated from introductory material.
"Introduction" section: new section; separated from the Abstract.
Updated second paragraph to indicate that RFC 2254 is replaced by
Smith & Howes Intended Category: Standards Track [Page 10]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
this document (instead of RFC 1960). Added reference to the [Roadmap]
document.
@ -550,27 +577,19 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
escaped is replaced by a backslash and two hex digits, which
represent a single octet.
"Examples" section: added five additional examples: (seeAlso=),
(cn:=Betty Rubble), (:1.2.3:=Wilma Flintstone), (:=Fred Flintstone),
and (1.3.6.1.4.1.1466.0=\04\02\48\69). Replaced one occurrence of "a
"Examples" section: added four additional examples: (seeAlso=),
(cn:=Betty Rubble), (:1.2.3:=Wilma Flintstone), and
(1.3.6.1.4.1.1466.0=\04\02\48\69). Replaced one occurrence of "a
value" with "an assertion value".
"Security Considerations" section: added references to [Protocol] and
Smith & Howes Intended Category: Standards Track [Page 10]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
[AuthMeth].
"Normative References" section: renamed from "References" per new RFC
guidelines. Changed from [1] style to [Protocol] style throughout the
document. Added entries for [ISO10646], [RFC2119], [AuthMeth],
[Models], and [Roadmap] and updated UTF-8 reference to RFC 2279.
Replaced RFC 822 reference with a reference to RFC 2234.
[Models], and [Roadmap] and updated the UTF-8 reference. Replaced
RFC 822 reference with a reference to RFC 2234.
"Informative References" section: added for clarity.
@ -582,72 +601,53 @@ INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
added.
15. Appendix B: Changes Since Previous Document Revision
16. Appendix B: Changes Since Previous Document Revision
This appendix lists all changes relative to the last published
revision, draft-ietf-ldapbis-filter-03.txt. Note that when
This appendix lists all changes relative to the previously published
revision, draft-ietf-ldapbis-filter-04.txt. Note that when
appropriate these changes are also included in Appendix A, but are
also included here for the benefit of the people who have already
reviewed draft-ietf-ldapbis-filter-03.txt. This section will be
reviewed draft-ietf-ldapbis-filter-04.txt. This section will be
removed before this document is published as an RFC.
15.1. Technical Changes
"String Search Filter Definition" section: Added statement that the
string representation is a string of UTF-8 encoded ISO 10646-1
characters and statement about expected behavior in light of RFC
2254's lack of a clear definition of "string representation."
"String Search Filter Definition" section: Revised all of the ABNF to
use common productions from [Models]. Revised the "normal"
production to restrict filter strings to valid UTF-8 sequences.
15.2. Editorial Changes
"Status of this Memo" section: updated boilerplate to match current
I-D guidelines.
"Examples" section: removed ;binary from an example.
"LDAP Search Filter Definition " section: updated section references
Smith & Howes Intended Category: Standards Track [Page 11]
INTERNET-DRAFT LDAP: String Repres. of Search Filters 28 February 2003
to match current LDAPBis drafts. Made minor changes to the ASN.1 so
it exactly matches that used in the Protocol document (added
comments).
"Normative References" section: added references to [ISO10646],
[RFC2119] and [Models].
"Informative References" section: added for clarity.
Updated copyright year to 2003.
This Internet Draft expires on 28 August 2003.
INTERNET-DRAFT LDAP: String Repres. of Search Filters 25 October 2003
16.1. Technical Changes
"Examples" section: Removed the (:=Fred Flintstone) example which is
not allowed by the protocol.
16.2. Editorial Changes
"String Search Filter Definition" section: Revised the last two
sentences in this section to improve clarity (the updated text now
begins with the text "Implementations SHOULD accept as input a string
that includes...."
Replaced all occurrences of "asterix" with the correctly spelled
"asterisk."
"Normative References" section: changed UTF-8 reference to point to
the UTF-8 Internet Draft.
"Intellectual Property Rights" section: added.
Author's Addresses section: New email address for Mark Smith.
"Full Copyright Statement" section: updated text to match latest IETF
guidelines.
This Internet Draft expires on 25 April 2004.

View file

@ -6,13 +6,13 @@
INTERNET-DRAFT Editor: Kurt D. Zeilenga
Intended Category: Standard Track OpenLDAP Foundation
Expires in six months 1 March 2003
Expires in six months 27 October 2003
Obsoletes: RFC 2251, RFC 2252, RFC 2256
LDAP: Directory Information Models
<draft-ietf-ldapbis-models-07.txt>
<draft-ietf-ldapbis-models-09.txt>
@ -40,9 +40,10 @@ Status of this Memo
Internet-Draft Shadow Directories can be accessed at
<http://www.ietf.org/shadow.html>.
Copyright 2003, The Internet Society. All Rights Reserved. Please
see the Copyright section near the end of this document for more
information.
Copyright (C) The Internet Society (2003). All Rights Reserved.
Please see the Full Copyright section near the end of this document
for more information.
Abstract
@ -54,10 +55,9 @@ Abstract
Zeilenga LDAP Models [Page 1]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
Table of Contents
@ -67,53 +67,56 @@ Table of Contents
Table of Contents 2
1. Introduction 3
1.1. Relationship to Other LDAP Specifications
1.2. Relationship to ITU Specifications
1.3. Conventions 4
1.2. Relationship to X.501 4
1.3. Conventions
1.4. Common ABNF Productions
2. Model of Directory User Information 6
2.1. The Directory Information Tree
2.2. Naming of Entries 7
2.1. The Directory Information Tree 7
2.2. Naming of Entries
2.3. Structure of an Entry 8
2.4. Object Classes
2.4. Object Classes 9
2.5. Attribute Descriptions 11
2.6. Alias Entries 15
3. Directory Administrative and Operational Information 16
3. Directory Administrative and Operational Information 17
3.1. Subtrees
3.2. Subentries 17
3.3. The 'objectClass' attribute
3.4. Operational attributes 18
4. Directory Schema 20
4.1. Schema Definitions 21
4.2. Subschema Subentries 30
3.2. Subentries
3.3. The 'objectClass' attribute 18
3.4. Operational attributes
4. Directory Schema 21
4.1. Schema Definitions 22
4.2. Subschema Subentries 31
4.3. 'extensibleObject' 34
4.4. Subschema Discovery
4.4. Subschema Discovery 35
5. DSA (Server) Informational Model
5.1. Server-specific Data Requirements 35
6. Other Considerations 38
5.1. Server-specific Data Requirements 36
6. Other Considerations 39
6.1. Preservation of User Information
6.2. Short Names
6.3. Cache and Shadowing 39
7. Implementation Guidelines 40
6.3. Cache and Shadowing 40
7. Implementation Guidelines
7.1. Server Guidelines
7.2. Client Guidelines
8. Security Considerations 41
7.2. Client Guidelines 41
8. Security Considerations
9. IANA Considerations
10. Acknowledgments 42
11. Author's Address
12. References
12. References 43
12.1. Normative References
12.2. Informative References 43
12.2. Informative References 44
Appendix A. Changes
A.1 Changes to RFC 2251 44
A.2 Changes to RFC 2252 46
A.3 Changes to RFC 2256 47
Copyright
A.3 Changes to RFC 2256 48
Intellectual Property Rights
Zeilenga LDAP Models [Page 2]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
Full Copyright 49
1. Introduction
@ -161,20 +164,20 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
This document obsoletes RFC 2251 sections 3.2 and 3.4, as well as
portions of sections 4 and 6. Appendix A.1 summaries changes to these
sections. The remainder of RFC 2251 is obsoleted by the [Protocol],
[AuthMeth], and [Roadmap] documents.
Zeilenga LDAP Models [Page 3]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
sections. The remainder of RFC 2251 is obsoleted by the [Protocol],
[AuthMeth], and [Roadmap] documents.
This document obsoletes RFC 2252 sections 4, 5 and 7. Appendix A.2
summaries changes to these sections. The remainder of RFC 2252 is
obsoleted by [Syntaxes] and [Schema].
obsoleted by [Syntaxes].
This document obsoletes RFC 2256 sections 5.1, 5.2, 7.1 and 7.2.
Appendix A.3 summarizes changes to these sections. The remainder of
@ -184,8 +187,8 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
1.2. Relationship to X.501
This document includes material, with and without adaptation, from the
[X.501]. Due to the adaptation, the material included in this
document takes precedence.
[X.501]. The material in this document takes precedence over that in
[X.501].
1.3. Conventions
@ -217,17 +220,17 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
DIGIT = %x30 / LDIGIT ; "0"-"9"
LDIGIT = %x31-39 ; "1"-"9"
HEX = DIGIT / %x41-46 / %x61-66 ; 0-9 / A-F / a-f
SP = 1*SPACE ; one or more " "
Zeilenga LDAP Models [Page 4]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
HEX = DIGIT / %x41-46 / %x61-66 ; 0-9 / A-F / a-f
SP = 1*SPACE ; one or more " "
WSP = 0*SPACE ; zero or more " "
NULL = %x00 ; null (0)
@ -254,36 +257,37 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
; Any UTF-8 character
UTF8 = UTF1 / UTFMB
UTFMB = UTF2 / UTF3 / UTF4 / UTF5 / UTF6
UTFMB = UTF2 / UTF3 / UTF4
UTF0 = %x80-BF
UTF1 = %x00-7F
UTF2 = %xC0-DF 1(UTF0)
UTF3 = %xE0-EF 2(UTF0)
UTF4 = %xF0-F7 3(UTF0)
UTF5 = %xF8-FB 4(UTF0)
UTF6 = %xFC-FD 5(UTF0)
UTF2 = %xC2-DF UTF0
UTF3 = %xE0 %xA0-BF UTF0 / %xE1-EC 2(UTF0) /
%xED %x80-9F UTF0 / %xEE-EF 2(UTF0)
UTF4 = %xF0 %x90-BF 2(UTF0) / %xF1-F3 3(UTF0) /
%xF4 %x80-8F 2(UTF0)
; Any octet
OCTET = %x00-FF
Object identifiers are represented in LDAP using a dot-decimal format
conforming to the ABNF:
Object identifiers (OIDs) [X.680] are represented in LDAP using a dot-
decimal format conforming to the ABNF:
numericoid = number *( DOT number )
Short names, also known as descriptors, are used as more readable
aliases for object identifiers. Short names are case insensitive and
conform to the ABNF:
descr = keystring
Zeilenga LDAP Models [Page 5]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
conform to the ABNF:
descr = keystring
Where either an object identifier or a short name may be specified,
the following production is used:
@ -329,17 +333,16 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
provides alternative naming. A subentry holds administrative and/or
operational information.
The set of entries representing the DIB are organized hierarchically
in a tree structure known as the Directory Information Tree (DIT).
Zeilenga LDAP Models [Page 6]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
The set of entries representing the DIB are organized hierarchically
in a tree structure known as the Directory Information Tree (DIT).
Section 2.1 describes the Directory Information Tree
Section 2.2 discusses naming of entries.
Section 2.3 discusses the structure of entries.
@ -386,16 +389,14 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
immediate subordinates of the entry's immediate superior (i.e., all
siblings).
The following are example string representations of RDNs [LDAPDN]:
Zeilenga LDAP Models [Page 7]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
The following are example string representations of RDNs [LDAPDN]:
UID=12345
OU=Engineering
CN=Kurt Zeilenga+L=Redwood Shores
@ -446,10 +447,9 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 8]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
Two values are considered equivalent if they would match according to
@ -505,7 +505,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 9]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
allowed to be present in entries belonging to the class. As an entry
@ -561,7 +561,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 10]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
Structural object classes are related to associated entries:
@ -617,7 +617,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 11]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
2.5.1) and a set of zero or more attribute options (see Section
@ -673,7 +673,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 12]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
syntax of its supertype. An attribute type cannot be a subtype of an
@ -695,7 +695,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Not all options can be associated with attributes held in the
directory. Tagging options can be.
Not all options can be use in conjunction with all attribute types.
Not all options can be used in conjunction with all attribute types.
In such cases, the attribute description is to be treated as
unrecognized.
@ -716,7 +716,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
conforming to the <option> production defined in Section 2.5 of this
document.
Procedures for registering options are detailed in BCP 64 [RFC3383].
Procedures for registering options are detailed in BCP 64 [BCP64bis].
2.5.2.1. Tagging Options
@ -729,7 +729,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 13]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
An attribute description with N tagging options is considered a direct
@ -785,7 +785,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 14]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
precisely one attribute description. The description is indicated
@ -841,7 +841,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 15]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
NOTE - The name within the 'aliasedObjectName' is said to be
@ -897,7 +897,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 16]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
( 2.5.4.1 NAME 'aliasedObjectName'
@ -953,7 +953,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 17]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
subentry (e.g., 'subschema' for subschema subentries) to mimic the
@ -987,7 +987,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
all superclasses of the named classes SHALL be implicitly added as
well if not already present. That is, if the auxiliary class 'x-a' is
a subclass of the class 'x-b', adding 'x-a' to 'objectClass' causes
'x-b' to added (if is not already present).
'x-b' to be implicitly added (if is not already present).
Servers SHALL restrict modifications of this attribute to prevent a
superclasses of remaining 'objectClass' values from being deleted.
@ -1009,13 +1009,13 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 18]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
A directory operational attribute is used to represent operational
and/or administrative information in the Directory Information Model.
This includes operational attributes maintained by the server (e.g.
'createTimeStamp') as well as operational attributes which hold values
'createTimestamp') as well as operational attributes which hold values
administrated by the user (e.g. 'ditContentRules').
A DSA-shared operational attribute is used to represent information of
@ -1065,7 +1065,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 19]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
@ -1121,7 +1121,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 20]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
( 2.5.18.2 NAME 'modifyTimestamp'
@ -1177,7 +1177,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 21]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
structural object classes of the entries;
@ -1233,7 +1233,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 22]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
qdstring = SQUOTE dstring SQUOTE
@ -1289,7 +1289,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 23]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
kind = "ABSTRACT" / "STRUCTURAL" / "AUXILIARY"
@ -1317,7 +1317,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
[ SP "NAME" SP qdescrs ] ; short names (descriptors)
[ SP "DESC" SP qdstring ] ; description
[ SP "OBSOLETE" ] ; not active
[ SP "SUP" SP oid ] ; subtype
[ SP "SUP" SP oid ] ; supertype
[ SP "EQUALITY" SP oid ] ; equality matching rule
[ SP "ORDERING" SP oid ] ; ordering matching rule
[ SP "SUBSTR" SP oid ] ; substrings matching rule
@ -1345,7 +1345,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 24]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
EQUALITY, ORDERING, SUBSTRING provide the oid of the equality,
@ -1401,7 +1401,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 25]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
Attribute Type Description. This bound is not part of the syntax name
@ -1457,7 +1457,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 26]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
MatchingRuleUseDescription = LPAREN WSP
@ -1486,7 +1486,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
terms of ASN.1 [X.680] and, optionally, have an octet string encoding
known as the LDAP-specific encoding. Commonly, the LDAP-specific
encoding is constrained to string of Universal Character Set (UCS)
[ISO10646] characters in UTF-8 [RFC2279] form.
[ISO10646] characters in UTF-8 [UTF-8] form.
Each LDAP syntax is identified by an object identifier (OID).
@ -1513,7 +1513,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 27]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
For DIT entries of a particular structural object class, a DIT content
@ -1569,7 +1569,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 28]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
<numericoid> is the object identifier of the structural object class
@ -1625,7 +1625,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 29]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
where:
@ -1681,7 +1681,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 30]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
<numericoid> is object identifier which identifies this name form;
@ -1737,7 +1737,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 31]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
Subschema is held in (sub)entries belonging to the subschema auxiliary
@ -1793,7 +1793,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 32]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
4.2.3. 'matchingRules'
@ -1849,7 +1849,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 33]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
SYNTAX 1.3.6.1.4.1.1466.115.121.1.16
@ -1905,7 +1905,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 34]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
Note that not all servers will implement this object class, and those
@ -1961,7 +1961,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Zeilenga LDAP Models [Page 35]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
5.1. Server-specific Data Requirements
@ -1996,7 +1996,8 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
- supportedLDAPVersion: LDAP versions supported; and
- supportedSASLMechanisms: recognized SASL mechnanisms.
- supportedSASLMechanisms: recognized Simple Authentication and
Security Layers (SASL) [SASL] mechanisms.
The values of these attributes provided may depend on session specific
and other factors. For example, a server supporting the SASL EXTERNAL
@ -2011,15 +2012,16 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Section 4.4.
5.1.1. 'altServer'
Zeilenga LDAP Models [Page 36]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
5.1.1. 'altServer'
The 'altServer' attribute lists URLs referring to alternative servers
which may be contacted when this server becomes unavailable. If the
server does not know of any other servers which could be used this
@ -2065,17 +2067,16 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Object identifiers identifying response controls need not be listed.
Procedures for registering object identifiers used to discovery of
protocol mechanisms are detailed in BCP 64 [RFC3383].
( 1.3.6.1.4.1.1466.101.120.13 NAME 'supportedControl'
protocol mechanisms are detailed in BCP 64 [BCP64bis].
Zeilenga LDAP Models [Page 37]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
( 1.3.6.1.4.1.1466.101.120.13 NAME 'supportedControl'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.38
USAGE dSAOperation )
@ -2097,7 +2098,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
extended operation need not be listed.
Procedures for registering object identifiers used to discovery of
protocol mechanisms are detailed in BCP 64 [RFC3383].
protocol mechanisms are detailed in BCP 64 [BCP64bis].
( 1.3.6.1.4.1.1466.101.120.7 NAME 'supportedExtension'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.38
@ -2123,15 +2124,15 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
5.1.6. 'supportedSASLMechanisms'
The 'supportedSASLMechanisms' attribute lists the SASL mechanisms
[RFC2222] which the server recognizes. The contents of this attribute
Zeilenga LDAP Models [Page 38]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
[RFC2222] which the server recognizes. The contents of this attribute
may depend on the current session state. If the server does not
support any SASL mechanisms this attribute will not be present.
@ -2179,15 +2180,15 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Implementations MUST be prepared that the same short name might be
used in a subschema to refer to the different kinds of schema
elements. That is, there might be an object class 'x-fubar' and an
Zeilenga LDAP Models [Page 39]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
elements. That is, there might be an object class 'x-fubar' and an
attribute type 'x-fubar' in a subschema.
Implementations MUST be prepared that the same short name might be
@ -2196,24 +2197,7 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
in different subschemas.
Procedures for registering short names (descriptors) are detailed in
BCP 64 [RFC3383bis].
[[The remainder of this subsection will be included a subsequent
revision of RFC 3383.]]
To avoid interoperability problems, the following additional
considerations are stated:
Descriptors used to identify various schema elements SHOULD be
registered unless in private-use name space (e.g., they begin with
"x-"). Descriptors defined in RFCs MUST be registered.
While the protocol allows the same descriptor to refer to
different object identifiers in certain cases and the registry
supports multiple registrations of the same descriptor (each
indicating a different kind of schema element and different object
identifier), multiple registrations of the same descriptor are to
be avoided. All such registration requests require Expert Review.
BCP 64 [BCP64bis].
6.3. Cache and Shadowing
@ -2236,14 +2220,6 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
the names of attribute types and object classes defined in Section 3
and 4, respectively, of [Schema].
Zeilenga LDAP Models [Page 40]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Servers MUST ensure that entries conform to user and system schema
rules or other data model constraints.
@ -2260,6 +2236,14 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
Servers MAY implement additional schema elements. Servers SHOULD
provide definitions of all schema elements they support in subschema
Zeilenga LDAP Models [Page 40]
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
(sub)entries.
@ -2292,14 +2276,6 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
9. IANA Considerations
Zeilenga LDAP Models [Page 41]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
It is requested that the Internet Assigned Numbers Authority (IANA)
update the LDAP descriptors registry as indicated the following
template:
@ -2317,6 +2293,13 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
The following descriptors (short names) should be updated to refer
to RFC XXXX.
Zeilenga LDAP Models [Page 41]
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
NAME Type OID
------------------------ ---- -----------------
alias O 2.5.6.1
@ -2349,13 +2332,6 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
10. Acknowledgments
Zeilenga LDAP Models [Page 42]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
This document is based in part on RFC 2251 by M. Wahl, T. Howes, and
S. Kille; RFC 2252 by M. Wahl, A. Coulbeck, T. Howes, S. Kille; and
RFC 2556 by M. Wahl, all products of the IETF Access, Searching and
@ -2364,7 +2340,8 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
International Telephone Union (ITU). Additional text was borrowed
from RFC 2253 by Mark Wahl, Tim Howes, and Steve Kille.
This document is a product of the IETF LDAPBIS Working Group.
This document is a product of the IETF LDAP Revison (LDAPBIS) Working
Group.
11. Author's Address
@ -2373,69 +2350,91 @@ INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
E-mail: <kurt@openldap.org>
Zeilenga LDAP Models [Page 42]
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
12. References
12.1. Normative References
[RFC2279] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
RFC 2279, January 1998.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2119] S. Bradner, "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[RFC2234] Crocker, D., and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[BCP64bis] Zeilenga, K., "IANA Considerations for LDAP", draft-
ietf-ldapbis-bcp64-xx.txt, a work in progress.
[RFC3383] K. Zeilenga, "IANA Considerations for LDAP", BCP 64 (also
RFC 3383), September 2002.
[Roadmap] Zeilenga, K. (editor), "LDAP: Technical Specification
Road Map", draft-ietf-ldapbis-roadmap-xx.txt, a work in
progress.
[Roadmap] K. Zeilenga (editor), "LDAP: Technical Specification Road
Map", draft-ietf-ldapbis-roadmap-xx.txt, a work in
progress.
[Protocol] Sermersheim, J. (editor), "LDAP: The Protocol",
draft-ietf-ldapbis-protocol-xx.txt, a work in progress.
[Protocol] J. Sermersheim (editor), "LDAP: The Protocol",
draft-ietf-ldapbis-protocol-xx.txt, a work in progress.
[AuthMeth] Harrison, R. (editor), "LDAP: Authentication Methods and
Connection Level Security Mechanisms",
draft-ietf-ldapbis-authmeth-xx.txt, a work in progress.
[AuthMeth] R. Harrison (editor), "LDAP: Authentication Methods and
Connection Level Security Mechanisms",
draft-ietf-ldapbis-authmeth-xx.txt, a work in progress.
[LDAPDN] Zeilenga, K. (editor), "LDAP: String Representation of
Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, a
work in progress.
[LDAPDN] K. Zeilenga (editor), "LDAP: String Representation of
Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, a work
in progress.
[Filters] Smith, M. (editor), LDAPbis WG, "LDAP: String
Representation of Search Filters",
draft-ietf-ldapbis-filter-xx.txt, a work in progress.
[LDAPURL] Smith, M. (editor), "LDAP: Uniform Resource Locator",
draft-ietf-ldapbis-url-xx.txt, a work in progress.
[SASL] Melnikov, A. (Editor), "Simple Authentication and
Security Layer (SASL)",
draft-ietf-sasl-rfc2222bis-xx.txt, a work in progress.
[Syntaxes] Legg, S. (editor), "LDAP: Syntaxes and Matching Rules",
draft-ietf-ldapbis-syntaxes-xx.txt, a work in progress.
[Schema] Dally, K. (editor), "LDAP: User Schema",
draft-ietf-ldapbis-user-schema-xx.txt, a work in
progress.
[UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO
10646", draft-yergeau-rfc2279bis-xx.txt, a work in
Zeilenga LDAP Models [Page 43]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
[Filters] M. Smith (editor), LDAPbis WG, "LDAP: String Representation
of Search Filters", draft-ietf-ldapbis-filter-xx.txt, a
work in progress.
progress.
[LDAPURL] M. Smith (editor), "LDAP: Uniform Resource Locator",
draft-ietf-ldapbis-url-xx.txt, a work in progress.
[ISO10646] International Organization for Standardization,
"Universal Multiple-Octet Coded Character Set (UCS) -
Architecture and Basic Multilingual Plane", ISO/IEC
10646-1 : 1993.
[Syntaxes] S. Legg (editor), "LDAP: Syntaxes",
draft-ietf-ldapbis-syntaxes-xx.txt, a work in progress.
[ASCII] Coded Character Set--7-bit American Standard Code for
Information Interchange, ANSI X3.4-1986.
[Schema] K. Dally (editor), "LDAP: User Schema",
draft-ietf-ldapbis-user-schema-xx.txt, a work in progress.
[X.500] International Telecommunication Union -
Telecommunication Standardization Sector, "The Directory
-- Overview of concepts, models and services,"
X.500(1993) (also ISO/IEC 9594-1:1994).
[ISO10646] Universal Multiple-Octet Coded Character Set (UCS) -
Architecture and Basic Multilingual Plane, ISO/IEC 10646-1
: 1993.
[X.501] International Telecommunication Union -
Telecommunication Standardization Sector, "The Directory
-- Models," X.501(1993) (also ISO/IEC 9594-2:1994).
[X.500] ITU-T Rec. X.500, "The Directory: Overview of Concepts,
Models and Service", 1993.
[X.501] ITU-T Rec. X.501, "The Directory: Models", 1993.
[X.680] ITU-T Rec. X.680, "Abstract Syntax Notation One (ASN.1) -
Specification of Basic Notation", 1994.
[X.680] International Telecommunication Union -
Telecommunication Standardization Sector, "Abstract
Syntax Notation One (ASN.1) - Specification of Basic
Notation", X.680(1997) (also ISO/IEC 8824-1:1998).
12.2. Informative References
@ -2463,9 +2462,10 @@ A.1 Changes to RFC 2251
Zeilenga LDAP Models [Page 44]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
A.1.1 Section 3.2 of RFC 2251
@ -2503,7 +2503,7 @@ A.1.2 Section 3.4 of RFC 2251
Changes:
- Clarify that attributes of the root DSE are subject to "other
restrictions" in addition to acccess controls.
restrictions" in addition to access controls.
- Clarify that only recognized extended requests need to be enumerated
'supportedExtension'.
@ -2521,7 +2521,7 @@ A.1.2 Section 3.4 of RFC 2251
Zeilenga LDAP Models [Page 45]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
- Remove inconsistent text regarding handling of the
@ -2577,7 +2577,7 @@ A.2.1 Section 4 of RFC 2252
Zeilenga LDAP Models [Page 46]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
specification "descr is the syntactic representation of an object
@ -2633,7 +2633,7 @@ A.2.3 Section 7 of RFC 2252
Zeilenga LDAP Models [Page 47]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
interacts with precluded attributes.
@ -2662,11 +2662,43 @@ A.3 Changes to RFC 2256
document.
Copyright 2003, The Internet Society. All Rights Reserved.
Intellectual Property Rights
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to pertain
to the implementation or use of the technology described in this
document or the extent to which any license under such rights might or
might not be available; neither does it represent that it has made any
effort to identify any such rights. Information on the IETF's
procedures with respect to rights in standards-track and
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances of
licenses to be made available, or the result of an attempt made to
obtain a general license or permission for the use of such proprietary
rights by implementors or users of this specification can be obtained
from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights which may cover technology that may be required to practice
this standard. Please address the information to the IETF Executive
Director.
Zeilenga LDAP Models [Page 48]
INTERNET-DRAFT draft-ietf-ldapbis-models-09 27 October 2003
Full Copyright
Copyright (C) The Internet Society (2003). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published and
or assist in its implmentation may be prepared, copied, published and
distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
@ -2677,38 +2709,6 @@ Copyright 2003, The Internet Society. All Rights Reserved.
copyrights defined in the Internet Standards process must be followed,
or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
Zeilenga LDAP Models [Page 48]
INTERNET-DRAFT draft-ietf-ldapbis-models-07 1 March 2003
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

File diff suppressed because it is too large Load diff

View file

@ -6,13 +6,13 @@
INTERNET-DRAFT Editor: Kurt D. Zeilenga
Intended Category: Standard Track OpenLDAP Foundation
Expires in six months 1 March 2003
Expires in six months 30 June 2003
Obsoletes: RFC 2251-2256, 2829-2830, 3377
LDAP: Technical Specification Road Map
<draft-ietf-ldapbis-roadmap-02.txt>
<draft-ietf-ldapbis-roadmap-03.txt>
Status of this Memo
@ -39,10 +39,10 @@ Status of this Memo
Internet-Draft Shadow Directories can be accessed at
<http://www.ietf.org/shadow.html>.
Copyright 2003, The Internet Society. All Rights Reserved.
Copyright (C) The Internet Society (2003). All Rights Reserved.
Please see the Copyright section near the end of this document for
more information.
Please see the Full Copyright section near the end of this document
for more information.
Abstract
@ -57,7 +57,7 @@ Abstract
Zeilenga LDAP: TS Road Map [Page 1]
INTERNET-DRAFT draft-ietf-ldapbis-roadmap-02 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-roadmap-03 30 June 2003
Conventions
@ -80,7 +80,8 @@ Conventions
LDAP: String Representation of Distinguished Names [LDAPDN],
LDAP: String Representation of Search Filters [Filters],
LDAP: Uniform Resource Locator [LDAPURL],
LDAP: Syntaxes [Syntaxes], and
LDAP: Syntaxes and Matching Rules [Syntaxes],
LDAP: Internationalized String Preparation [LDAPprep], and
LDAP: User Schema [Schema].
The terms "LDAP" and "LDAPv3" are commonly used to informally refer to
@ -93,27 +94,26 @@ Conventions
this document but may be defined in some future document(s).
IANA (Internet Assigned Numbers Authority) considerations for LDAP
described in BCP 64 [RFC3383] apply fully to this revision of the LDAP
technical specification.
described in BCP 64 [BCP64bis] apply fully to this revision of the
LDAP technical specification.
2. Relationship to X.500
This technical specification defines LDAP in terms of [X.500] as an
X.500 access mechanism. An LDAP server MUST act in accordance with
X.500(1993) series of International Telephone Union (ITU)
Recommendations when providing the service. However, it is not
required that an LDAP server make use of any X.500 protocols in
providing this service, e.g. LDAP can be mapped onto any other
directory system so long as the X.500 data and service models
X.500(1993) series of International Telecommunication Union - Telecom
Standardization (ITU-T) Recommendations when providing the service.
However, it is not required that an LDAP server make use of any X.500
protocols in providing this service, e.g. LDAP can be mapped onto any
other directory system so long as the X.500 data and service models
[X.501][X.511] as used in LDAP is not violated in the LDAP interface.
Zeilenga LDAP: TS Road Map [Page 2]
INTERNET-DRAFT draft-ietf-ldapbis-roadmap-02 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-roadmap-03 30 June 2003
This technical specification explicitly incorporates portions of
@ -137,10 +137,13 @@ INTERNET-DRAFT draft-ietf-ldapbis-roadmap-02 1 March 2003
[Models] replaces portions of RFC 2251, RFC 2252 and RFC 2256.
[Protocol] replaces the majority RFC 2251 and portions of RFC 2252.
[AuthMeth] replaces RFC 2829, RFC 2830, and portions of RFC 2251.
[Syntax] replaces the majority of RFC 2252 and portions of RFC 2256.
[Syntaxes] replaces the majority of RFC 2252 and portions of RFC 2256.
[Schema] replaces the majority of RFC 2256. [LDAPDN] replaces RFC
2253. [Filters] replaces RFC 2254. [LDAPURL] replaces RFC 2255.
[LDAPprep] is new to this revision of the LDAP technical
specification.
Each document of this specification contains appendices summarizing
changes to all sections of the specifications they replace. Appendix
A.1 of this document details changes made to RFC 3377. Appendix A.2
@ -163,57 +166,75 @@ INTERNET-DRAFT draft-ietf-ldapbis-roadmap-02 1 March 2003
E-mail: <kurt@openldap.org>
7. References
Zeilenga LDAP: TS Road Map [Page 3]
INTERNET-DRAFT draft-ietf-ldapbis-roadmap-02 1 March 2003
INTERNET-DRAFT draft-ietf-ldapbis-roadmap-03 30 June 2003
7. References
7.1. Normative References
[RFC2119] S. Bradner, "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC3383] K. Zeilenga, "IANA Considerations for LDAP", BCP 64 (also
RFC 3383), September 2002.
[BCP64bis] Zeilenga, K., "IANA Considerations for LDAP", draft-
ietf-ldapbis-bcp64-xx.txt, a work in progress.
[Models] K. Zeilenga (editor), "LDAP: Directory Information Models",
draft-ietf-ldapbis-models-xx.txt, a work in progress.
[Models] Zeilenga, K. (editor), "LDAP: Directory Information
Models", draft-ietf-ldapbis-models-xx.txt, a work in
progress.
[Protocol] J. Sermersheim (editor), "LDAP: The Protocol",
draft-ietf-ldapbis-protocol-xx.txt, a work in progress.
[Protocol] Sermersheim, J. (editor), "LDAP: The Protocol",
draft-ietf-ldapbis-protocol-xx.txt, a work in progress.
[AuthMeth] R. Harrison (editor), "LDAP: Authentication Methods and
Connection Level Security Mechanisms",
draft-ietf-ldapbis-authmeth-xx.txt, a work in progress.
[AuthMeth] Harrison, R. (editor), "LDAP: Authentication Methods and
Connection Level Security Mechanisms",
draft-ietf-ldapbis-authmeth-xx.txt, a work in progress.
[LDAPDN] K. Zeilenga (editor), "LDAP: String Representation of
Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, a work
in progress.
[LDAPDN] Zeilenga, K. (editor), "LDAP: String Representation of
Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, a
work in progress.
[Filters] M. Smith (editor), LDAPbis WG, "LDAP: String Representation
of Search Filters", draft-ietf-ldapbis-filter-xx.txt, a
work in progress.
[Filters] Smith, M. (editor), LDAPbis WG, "LDAP: String
Representation of Search Filters",
draft-ietf-ldapbis-filter-xx.txt, a work in progress.
[LDAPURL] M. Smith (editor), "LDAP: Uniform Resource Locator",
draft-ietf-ldapbis-url-xx.txt, a work in progress.
[LDAPURL] Smith, M. (editor), "LDAP: Uniform Resource Locator",
draft-ietf-ldapbis-url-xx.txt, a work in progress.
[Syntaxes] S. Legg (editor), "LDAP: Syntaxes",
draft-ietf-ldapbis-syntaxes-xx.txt, a work in progress.
[Syntaxes] Legg, S. (editor), "LDAP: Syntaxes and Matching Rules",
draft-ietf-ldapbis-syntaxes-xx.txt, a work in progress.
[Schema] K. Dally (editor), "LDAP: User Schema",
draft-ietf-ldapbis-user-schema-xx.txt, a work in progress.
[LDAPprep] Zeilenga, K., "LDAP: Internationalized String
Preparation", draft-ietf-ldapbis-strpro-xx.txt, a work
in progress.
[X.500] ITU-T Rec. X.500, "The Directory: Overview of Concepts,
Models and Service", 1993.
[Schema] Dally, K. (editor), "LDAP: User Schema",
draft-ietf-ldapbis-user-schema-xx.txt, a work in
progress.
[X.501] ITU-T Rec. X.501, "The Directory: Models", 1993.
[X.500] International Telecommunication Union -
Telecommunication Standardization Sector, "The Directory
-- Overview of concepts, models and services,"
X.500(1993) (also ISO/IEC 9594-1:1994).
[X.511] ITU-T Rec. X.511, "The Directory: Abstract Service
Definition", 1993.
Zeilenga LDAP: TS Road Map [Page 4]
INTERNET-DRAFT draft-ietf-ldapbis-roadmap-03 30 June 2003
[X.501] International Telecommunication Union -
Telecommunication Standardization Sector, "The Directory
-- Models," X.501(1993) (also ISO/IEC 9594-2:1994).
[X.511] International Telecommunication Union -
Telecommunication Standardization Sector, "The
Directory: Abstract Service Definition", X.511(1993).
7.2. Informative References
@ -221,40 +242,67 @@ INTERNET-DRAFT draft-ietf-ldapbis-roadmap-02 1 March 2003
None.
Zeilenga LDAP: TS Road Map [Page 4]
INTERNET-DRAFT draft-ietf-ldapbis-roadmap-02 1 March 2003
Appendix A. Changes to Previous Documents
This appendix outlines changes this document makes relative
to the documents it replaces (in whole or in part).
This appendix outlines changes this document makes relative to the
documents it replaces (in whole or in part).
Appendix A.1. Changes to RFC 3377
This document is nearly a complete rewrite of RFC 3377 as
much of the material of RFC 3377 is no longer applicable.
These changes include defining the terms "LDAP" and
"LDAPv3" to refer to this revision of the technical
specification.
This document is nearly a complete rewrite of RFC 3377 as much of the
material of RFC 3377 is no longer applicable. The changes include
redefining the terms "LDAP" and "LDAPv3" to refer to this revision of
the technical specification.
Appendix A.2. Changes to Section 3.3 of RFC 2251
The section was modified slightly (the word "document" was
replaced with "technical specification") to clarify that it
applies to the entire LDAP technical specification.
The section was modified slightly (the word "document" was replaced
with "technical specification") to clarify that it applies to the
entire LDAP technical specification.
Copyright 2003, The Internet Society. All Rights Reserved.
Intellectual Property Rights
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to pertain
to the implementation or use of the technology described in this
document or the extent to which any license under such rights might or
might not be available; neither does it represent that it has made any
effort to identify any such rights. Information on the IETF's
procedures with respect to rights in standards-track and
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances of
licenses to be made available, or the result of an attempt made to
Zeilenga LDAP: TS Road Map [Page 5]
INTERNET-DRAFT draft-ietf-ldapbis-roadmap-03 30 June 2003
obtain a general license or permission for the use of such proprietary
rights by implementors or users of this specification can be obtained
from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights which may cover technology that may be required to practice
this standard. Please address the information to the IETF Executive
Director.
Full Copyright
Copyright (C) The Internet Society (2003). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published and
or assist in its implmentation may be prepared, copied, published and
distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
@ -265,19 +313,27 @@ Copyright 2003, The Internet Society. All Rights Reserved.
copyrights defined in the Internet Standards process must be followed,
or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Zeilenga LDAP: TS Road Map [Page 5]
Zeilenga LDAP: TS Road Map [Page 6]

View file

@ -6,12 +6,12 @@
Internet-Draft Kurt D. Zeilenga
Intended Category: Standard Track OpenLDAP Foundation
Expires in six months 26 May 2003
Expires in six months 27 October 2003
LDAP: Internationalized String Preparation
<draft-ietf-ldapbis-strprep-00.txt>
<draft-ietf-ldapbis-strprep-02.txt>
Status of this Memo
@ -46,10 +46,10 @@ Status of this Memo
Abstract
The previous Lightweight Directory Access Protocol (LDAP) technical
specifications did not precisely define how string matching is to be
performed. This lead to a number of usability and interoperability
problems. This document defines string preparation algorithms for
matching rules defined for use in LDAP.
specifications did not precisely define how character string matching
is to be performed. This lead to a number of usability and
interoperability problems. This document defines string preparation
algorithms for character-based matching rules defined for use in LDAP.
@ -57,7 +57,7 @@ Abstract
Zeilenga LDAPprep [Page 1]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
Conventions
@ -113,7 +113,7 @@ Conventions
Zeilenga LDAPprep [Page 2]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
The caseIgnoreMatch matching rule [X.520], for example, is simply
@ -130,22 +130,24 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
(Zs) property as a space, and another implementation may view any
character with the whitespace (WS) category as a space.
The lack of precise specification for string matching has led to
significant interoperability problems. When used in certificate chain
validation, security vulnerabilities can arise. To address these
problems, this document defines precise algorithms for preparing
strings for matching.
The lack of precise specification for character string matching has
led to significant interoperability problems. When used in
certificate chain validation, security vulnerabilities can arise. To
address these problems, this document defines precise algorithms for
preparing character strings for matching.
1.3. Relationship to "stringprep"
The string preparation algorithms described in this document are based
upon the "stringprep" approach [RFC3454]. In "stringprep", presented
and stored values are first prepared for comparison and so that a
character-by-character comparison yields the "correct" result.
The character string preparation algorithms described in this document
are based upon the "stringprep" approach [StringPrep]. In
"stringprep", presented and stored values are first prepared for
comparison and so that a character-by-character comparison yields the
"correct" result.
The approach used here is a refinement of the "stringprep" [RFC3454]
approach. Each algorithm involves two additional preparation steps.
The approach used here is a refinement of the "stringprep"
[StringPrep] approach. Each algorithm involves two additional
preparation steps.
a) prior to applying the Unicode string preparation steps outlined in
"stringprep", the string is transcoded to Unicode;
@ -154,24 +156,24 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
"stringprep", characters insignificant to the matching rules are
removed.
Hence, preparation of strings for X.500 matching involves the
following steps:
Hence, preparation of character strings for X.500 matching involves
the following steps:
1) Transcode
2) Map
3) Normalize
4) Prohibit
5) Check Bidi (Bidirectional)
6) Insignificant Character Removal
Zeilenga LDAPprep [Page 3]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
6) Insignificant Character Removal
These steps are described in Section 2.
@ -181,8 +183,8 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
[Roadmap] which obsoletes the previously defined LDAP technical
specification [RFC3377] in its entirety.
This document details new LDAP internationalized string preparation
algorithms used by [Syntaxes] and possible other technical
This document details new LDAP internationalized character string
preparation algorithms used by [Syntaxes] and possible other technical
specifications defining LDAP syntaxes and/or matching rules.
@ -190,15 +192,17 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
LDAP is defined [Roadmap] in X.500 terms as an X.500 access mechanism.
As such, there is a strong desire for alignment between LDAP and X.500
syntax and semantics. The string preparation algorithms described in
this document are based upon "Internationalized String Matching Rules
for X.500" [XMATCH] proposal to ITU/ISO Joint Study Group 2.
syntax and semantics. The character string preparation algorithms
described in this document are based upon "Internationalized String
Matching Rules for X.500" [XMATCH] proposal to ITU/ISO Joint Study
Group 2.
2. String Preparation
The following six-step process SHALL be applied to each presented and
attribute value in preparation for string match rule evaluation.
attribute value in preparation for character string matching rule
evaluation.
1) Transcode
2) Map
@ -207,11 +211,23 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
5) Check bidi
6) Insignificant Character Removal
Failure in any step is be cause the assertion to be Undefined.
Failure in any step causes the assertion to evaluate to Undefined.
This process is intended to act upon non-empty character strings. If
the string to prepare is empty, this process is not applied and the
assertion is evaluated to Undefined.
The character repertoire of this process is Unicode 3.2 [Unicode].
Zeilenga LDAPprep [Page 4]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
2.1. Transcode
Each non-Unicode string value is transcoded to Unicode.
@ -221,22 +237,11 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
PrintableString [X.680] value are transcoded directly to Unicode.
Zeilenga LDAPprep [Page 4]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
UniversalString, UTF8String, and bmpString [X.680] values need not be
transcoded as they are Unicode-based strings (in the case of
bmpString, a subset of Unicode).
If the implementation is unable or unwilling to perform the
transcoding as described above, or the transcoding fails, this step
fails and the assertion is evaluated to Undefined.
The transcoded string is the output string.
The output is the transcoded string.
2.2. Map
@ -259,44 +264,55 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Zp) are mapped to SPACE (U+0020).
For case ignore, numeric, and stored prefix string matching rules,
characters are case folded per B.2 of [RFC3454].
characters are case folded per B.2 of [StringPrep].
The output is the mapped string.
2.3. Normalize
The input string is be normalized to Unicode Form KC (compatibility
composed) as described in [UAX15].
composed) as described in [UAX15]. The output is the normalized
string.
2.4. Prohibit
All Unassigned, Private Use, and non-character code points are
prohibited. Surrogate codes (U+D800-DFFFF) are prohibited.
The REPLACEMENT CHARACTER (U+FFFD) code point is prohibited.
The first code point of a string is prohibited from being a combining
Zeilenga LDAPprep [Page 5]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
2.4. Prohibit
All Unassigned code points are prohibited. Unassigned code points are
listed in Table A.1 of [StringPrep].
Private Use (U+E000-F8FF, F0000-FFFFD, 100000-10FFFD) code points are
prohibited.
All non-character code points (U+FDD0-FDEF, FFFE-FFFF, 1FFFE-1FFFF,
2FFFE-2FFFF, 3FFFE-3FFFF, 4FFFE-4FFFF, 5FFFE-5FFFF, 6FFFE-6FFFF,
7FFFE-7FFFF, 8FFFE-8FFFF, 9FFFE-9FFFF, AFFFE-AFFFF, BFFFE-BFFFF,
CFFFE-CFFFF, DFFFE-DFFFF, EFFFE-EFFFF, FFFFE-FFFFF, 10FFFE-10FFFF) are
prohibited.
Surrogate codes (U+D800-DFFFF) are prohibited.
The REPLACEMENT CHARACTER (U+FFFD) code point is prohibited.
The first code point of a string is prohibited from being a combining
character.
Empty strings are prohibited.
The step fails and the assertion is evaluated to Undefined if the
input string contains any prohibited code point. The output string is
the input string.
The step fails if the input string contains any prohibited code point.
The output is the input string.
2.5. Check bidi
There are no bidirectional restrictions. The output string is the
input string.
There are no bidirectional restrictions. The output is the input
string.
2.5. Insignificant Character Removal
@ -305,21 +321,31 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
removed. The characters to be removed differ from matching rule to
matching rule.
Section 2.6.1 applies to case ignore and exact string matching.
Section 2.6.2 applies to numericString matching.
Section 2.6.3 applies to telephoneNumber matching
Section 2.5.1 applies to case ignore and exact string matching.
Section 2.5.2 applies to numericString matching.
Section 2.5.3 applies to telephoneNumber matching
2.6.1. Insignificant Space Removal
2.5.1. Insignificant Space Removal
For the purposes of this section, a space is defined to be the SPACE
(U+0020) code point followed by no combining marks.
NOTE - The previous steps ensure that the string cannot contain any
Zeilenga LDAPprep [Page 6]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
code points in the separator class, other than SPACE (U+0020).
The following spaces are regarded as not significant and are to be
removed:
If the input string consists entirely of spaces or is empty, the
output is a string consisting of exactly one space (e.g. " ").
Otherwise, the following spaces are removed:
- leading spaces (i.e. those preceding the first character that is
not a space);
- trailing spaces (i.e. those following the last character that is
@ -327,19 +353,8 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
- multiple consecutive spaces (these are taken as equivalent to a
single space character).
A string consisting entirely of spaces is equivalent to a string
containing exactly one space.
For example, removal of spaces from the Form KC string:
"<SPACE><SPACE>foo<SPACE><SPACE>bar<SPACE><SPACE>"
Zeilenga LDAPprep [Page 6]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
would result in the output string:
"foo<SPACE>bar"
and the Form KC string:
@ -348,38 +363,61 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
"<SPACE>".
2.6.2. numericString Insignificant Character Removal
2.5.2. numericString Insignificant Character Removal
For the purposes of this section, a space is defined to be the SPACE
(U+0020) code point followed by no combining marks.
All spaces are regarded as not significant and are to be removed.
All spaces are regarded as not significant. If the input string
consists entirely of spaces or is empty, the output is a string
consisting of exactly one space (e.g. " "). Otherwise, all spaces are
to be removed.
For example, removal of spaces from the Form KC string:
"<SPACE><SPACE>123<SPACE><SPACE>456<SPACE><SPACE>" would result in
the output string:
"<SPACE><SPACE>123<SPACE><SPACE>456<SPACE><SPACE>"
would result in the output string:
"123456"
and the Form KC string:
"<SPACE><SPACE><SPACE>"
would result in an empty output string.
would result in the output string:
"<SPACE>".
2.6.3. telephoneNumber Insignificant Character Removal
2.5.3. telephoneNumber Insignificant Character Removal
For the purposes of this section, a hyphen is defined to be
HYPHEN-MINUS (U+002D), ARMENIAN HYPHEN (U+058A), HYPHEN (U+2010),
NON-BREAKING HYPHEN (U+2011), MINUS SIGN (U+2212), SMALL HYPHEN-MINUS
Zeilenga LDAPprep [Page 7]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
(U+FE63), or FULLWIDTH HYPHEN-MINUS (U+FF0D) code point followed by no
combining marks and a space is defined to be the SPACE (U+0020) code
point followed by no combining marks.
All hyphens and spaces are regarded as not significant and are to be
All hyphens and spaces are considered insignificant. If the string
contains only spaces and hyphens or is empty, then the output is a
string consisting of one space. Otherwise, all hyphens and spaces are
removed.
For example, removal of hyphens and spaces from the Form KC string:
"<SPACE><HYPHEN>123<SPACE><SPACE>456<SPACE><HYPHEN>"
would result in the output string:
"123456"
and the Form KC string:
"<HYPHEN><HYPHEN><HYPHEN>"
would result in the output string:
"<SPACE>".
3. Security Considerations
"Preparation for International Strings ('stringprep')" [RFC3454]
"Preparation for International Strings ('stringprep')" [StringPrep]
security considerations generally apply to the algorithms described
here.
@ -388,14 +426,6 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Appendix A and B of this document were authored by Howard Chu
<hyc@symas.com> of Symas Corporation (based upon information provided
Zeilenga LDAPprep [Page 7]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
in RFC 1345).
@ -403,14 +433,25 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
The approach used in this document is based upon design principles and
algorithms described in "Preparation of Internationalized Strings
('stringprep')" [RFC3454] by Paul Hoffman and Marc Blanchet. Some
('stringprep')" [StringPrep] by Paul Hoffman and Marc Blanchet. Some
additional guidance was drawn from Unicode Technical Standards,
Technical Reports, and Notes.
This document is a product of the IETF LDAP Revision (LDAPBIS) Working
Group.
6. Author's Address
Kurt Zeilenga
Zeilenga LDAPprep [Page 8]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
E-mail: <kurt@openldap.org>
@ -421,14 +462,14 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC3454] Hoffman, P. and M. Blanchet, "Preparation of
Internationalized Strings ('stringprep')", RFC 3454,
December 2002.
[Roadmap] Zeilenga, K. (editor), "LDAP: Technical Specification
Road Map", draft-ietf-ldapbis-roadmap-xx.txt, a work in
progress.
[StringPrep] Hoffman P. and M. Blanchet, "Preparation of
Internationalized Strings ('stringprep')",
draft-hoffman-rfc3454bis-xx.txt, a work in progress.
[Syntaxes] Legg, S. (editor), "LDAP: Syntaxes and Matching Rules",
draft-ietf-ldapbis-syntaxes-xx.txt, a work in progress.
@ -445,13 +486,6 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
"Unicode Standard Annex #28: Unicode 3.2"
(http://www.unicode.org/reports/tr28/).
Zeilenga LDAPprep [Page 8]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
[UAX15] Davis, M. and M. Duerst, "Unicode Standard Annex #15:
Unicode Normalization Forms, Version 3.2.0".
<http://www.unicode.org/unicode/reports/tr15/tr15-22.html>,
@ -466,6 +500,14 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Character Sets for the International Teletex Service",
T.61, 1988.
Zeilenga LDAPprep [Page 9]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
7.2. Informative References
[X.500] International Telecommunication Union -
@ -491,7 +533,7 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
2000.
[XMATCH] Zeilenga, K., "Internationalized String Matching Rules
for X.500", draft-zeilenga-ldapbis-strmatch-xx.txt a
for X.500", draft-zeilenga-ldapbis-strmatch-xx.txt, a
work in progress.
[RFC1345] Simonsen, K., "Character Mnemonics & Character Sets",
@ -500,17 +542,9 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Appendix A. Teletex (T.61) to Unicode
Zeilenga LDAPprep [Page 9]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
This appendix defines an algorithm for transcoding [T.61] characters
to [Unicode] characters for use in string preparation for LDAP
matching rules. This appendix is a normative.
matching rules. This appendix is normative.
The transcoding algorithm is derived from the T.61-8bit definition
provided in [RFC1345]. With a few exceptions, the T.61 character
@ -522,6 +556,14 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
The codes from x80 to x9f are also equivalent to the corresponding
Unicode code points. This is specified for completeness only, as
Zeilenga LDAPprep [Page 10]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
these codes are control characters, and will be mapped to nothing in
the LDAP String Preparation Mapping step.
@ -532,9 +574,9 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Undefined matching result. For diagnostic purposes, this algorithm
does not fail for undefined input codes. Instead, undefined codes in
the input are mapped to the Unicode REPLACEMENT CHARACTER (U+FFFD).
As the LDAP String Preparation Probhibit step disallows the
REPLACEMENT CHARACTER from appearing in its output, this transcoding
yields the desired effect.
As the LDAP String Preparation Prohibit step disallows the REPLACEMENT
CHARACTER from appearing in its output, this transcoding yields the
desired effect.
Note: RFC 1345 listed the non-spacing accent codepoints as residing in
the range starting at (U+E000). In the current Unicode
@ -556,14 +598,6 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
e8| 0141 | 00d8 | 0152 | 00ba | 00de | 0166 | 014a | 0149 |
f0| 0138 | 00e6 | 0111 | 00f0 | 0127 | 0131 | 0133 | 0140 |
f8| 0142 | 00f8 | 0153 | 00df | 00fe | 0167 | 014b | ?? |
Zeilenga LDAPprep [Page 10]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
--+------+------+------+------+------+------+------+------+
Table A.1: Mapping of 8-bit T.61 codes to Unicode
@ -579,12 +613,19 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Appendix B. Additional Teletex (T.61) to Unicode Tables
Zeilenga LDAPprep [Page 11]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
All of the accented characters in T.61 have a corresponding code point
in Unicode. For the sake of completeness, the combined character
codes are presented in the following tables. This is informational
only; for matching purposes it is sufficient to map the non-spacing
accent and exchange the order of the character pair as specified in
Appendix A.
Appendix A. This appendix is informative.
B.1. Combinations with SPACE
@ -612,14 +653,6 @@ B.2. Combinations for xc1: (Grave accent)
40| ?? | 00c0 | ?? | ?? | ?? | 00c8 | ?? | ?? |
48| ?? | 00cc | ?? | ?? | ?? | ?? | 01f8 | 00d2 |
50| ?? | ?? | ?? | ?? | ?? | 00d9 | ?? | 1e80 |
Zeilenga LDAPprep [Page 11]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
58| ?? | 1ef2 | ?? | ?? | ?? | ?? | ?? | ?? |
60| ?? | 00e0 | ?? | ?? | ?? | 00e8 | ?? | ?? |
68| ?? | 00ec | ?? | ?? | ?? | ?? | 01f9 | 00f2 |
@ -635,6 +668,14 @@ B.3. Combinations for xc2: (Acute accent)
C, L, N, R, S, and Z. Unicode also defines G, K, M, P, and W. All of
these combinations are present in Table B.3.
Zeilenga LDAPprep [Page 12]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
--+------+------+------+------+------+------+------+------+
40| ?? | 00c1 | ?? | 0106 | ?? | 00c9 | ?? | 01f4 |
@ -669,13 +710,6 @@ B.4. Combinations for xc3: (Circumflex)
Table B.4: Mapping of T.61 Circumflex Accent Combinations
Zeilenga LDAPprep [Page 12]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
B.5. Combinations for xc4: (Tilde)
T.61 has predefined characters for combinations with A, I, O, U, and
@ -690,6 +724,14 @@ B.5. Combinations for xc4: (Tilde)
58| ?? | 1ef8 | ?? | ?? | ?? | ?? | ?? | ?? |
60| ?? | 00e3 | ?? | ?? | ?? | 1ebd | ?? | ?? |
68| ?? | 0129 | ?? | ?? | ?? | ?? | 00f1 | 00f5 |
Zeilenga LDAPprep [Page 13]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
70| ?? | ?? | ?? | ?? | ?? | 0169 | 1e7d | ?? |
78| ?? | 1ef9 | ?? | ?? | ?? | ?? | ?? | ?? |
--+------+------+------+------+------+------+------+------+
@ -724,14 +766,6 @@ B.7. Combinations for xc6: (Breve)
Unicode also defines E, I, and O. All of these combinations are
present in Table B.7.
Zeilenga LDAPprep [Page 13]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
--+------+------+------+------+------+------+------+------+
40| ?? | 0102 | ?? | ?? | ?? | 0114 | ?? | 011e |
@ -746,6 +780,14 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
Table B.7: Mapping of T.61 Breve Accent Combinations
Zeilenga LDAPprep [Page 14]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
B.8. Combinations for xc7: (Dot Above)
T.61 has predefined characters for C, E, G, I, and Z. Unicode also
@ -780,14 +822,6 @@ B.9. Combinations for xc8: (Diaeresis)
58| 1e8c | 0178 | ?? | ?? | ?? | ?? | ?? | ?? |
60| ?? | 00e4 | ?? | ?? | ?? | 00eb | ?? | ?? |
68| 1e27 | 00ef | ?? | ?? | ?? | ?? | ?? | 00f6 |
Zeilenga LDAPprep [Page 14]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
70| ?? | ?? | ?? | ?? | 1e97 | 00fc | ?? | 1e85 |
78| 1e8d | 00ff | ?? | ?? | ?? | ?? | ?? | ?? |
--+------+------+------+------+------+------+------+------+
@ -802,6 +836,14 @@ B.10. Combinations for xca: (Ring Above)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
--+------+------+------+------+------+------+------+------+
40| ?? | 00c5 | ?? | ?? | ?? | ?? | ?? | ?? |
Zeilenga LDAPprep [Page 15]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
48| ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
50| ?? | ?? | ?? | ?? | ?? | 016e | ?? | ?? |
58| ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? |
@ -836,14 +878,6 @@ B.11. Combinations for xcb: (Cedilla)
B.12. Combinations for xcd: (Double Acute Accent)
T.61 has predefined characters for O, and U. These combinations are
Zeilenga LDAPprep [Page 15]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
present in Table B.12.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
@ -858,6 +892,14 @@ Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
B.13. Combinations for xce: (Ogonek)
Zeilenga LDAPprep [Page 16]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
T.61 has predefined characters for A, E, I, and U. Unicode also
defines the combination for O. All of these combinations are present
in Table B.13.
@ -892,20 +934,11 @@ B.14. Combinations for xcf: (Caron)
68| 021f | 01d0 | 01f0 | 01e9 | 013e | ?? | 0148 | 01d2 |
70| ?? | ?? | 0159 | 0161 | 0165 | 01d4 | ?? | ?? |
78| ?? | ?? | 017e | ?? | ?? | ?? | ?? | ?? |
Zeilenga LDAPprep [Page 16]
Internet-Draft draft-ietf-ldapbis-strprep-00 26 May 2003
--+------+------+------+------+------+------+------+------+
Table B.14: Mapping of T.61 Caron Accent Combinations
Intellectual Property Rights
The IETF takes no position regarding the validity or scope of any
@ -915,6 +948,14 @@ Intellectual Property Rights
might not be available; neither does it represent that it has made any
effort to identify any such rights. Information on the IETF's
procedures with respect to rights in standards-track and
Zeilenga LDAPprep [Page 17]
Internet-Draft draft-ietf-ldapbis-strprep-02 27 October 2003
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances of
licenses to be made available, or the result of an attempt made to
@ -951,5 +992,20 @@ Full Copyright
Zeilenga LDAPprep [Page 17]
Zeilenga LDAPprep [Page 18]

File diff suppressed because it is too large Load diff

View file

@ -7,13 +7,13 @@
Network Working Group Mark Smith, Editor
Request for Comments: DRAFT Netscape Communications Corp.
Obsoletes: RFC 2255 Tim Howes
Expires: 28 August 2003 Opsware, Inc.
Expires: 25 April 2004 Opsware, Inc.
28 February 2003
25 October 2003
LDAP: Uniform Resource Locator
<draft-ietf-ldapbis-url-03.txt>
<draft-ietf-ldapbis-url-04.txt>
@ -57,7 +57,7 @@ Copyright (C) The Internet Society (2003). All Rights Reserved.
Smith & Howes Intended Category: Standards Track [Page 1]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
3. Table of Contents
@ -67,20 +67,22 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
3. Table of Contents..............................................2
4. Introduction...................................................2
5. URL Definition.................................................2
5.1. Escaping Using the Method.................................4
6. Defaults for Fields of the LDAP URL............................5
7. Examples.......................................................5
8. Security Considerations........................................7
9. Acknowledgements...............................................8
10. Normative References...........................................9
11. Informative References.........................................9
12. Authors' Address...............................................9
13. Full Copyright Statement.......................................10
14. Appendix A: Changes Since RFC 2255.............................10
14.1. Technical Changes...........................................10
14.2. Editorial Changes...........................................11
15. Appendix B: Changes Since Previous Document Revision...........13
15.1. Technical Changes...........................................13
15.2. Editorial Changes...........................................13
7. Examples.......................................................6
8. Security Considerations........................................8
9. Normative References...........................................8
10. Informative References.........................................9
11. Intellectual Property Rights...................................9
12. Acknowledgements...............................................10
13. Authors' Address...............................................10
14. Full Copyright Statement.......................................11
15. Appendix A: Changes Since RFC 2255.............................11
15.1. Technical Changes...........................................11
15.2. Editorial Changes...........................................12
16. Appendix B: Changes Since Previous Document Revision...........13
16.1. Technical Changes...........................................14
16.2. Editorial Changes...........................................14
4. Introduction
@ -106,37 +108,42 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
5. URL Definition
An LDAP URL begins with the protocol prefix "ldap" and is defined by
the following grammar, following the ABNF notation defined in
[RFC2234].
Smith & Howes Intended Category: Standards Track [Page 2]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
the following grammar, following the ABNF notation defined in
[RFC2234].
ldapurl = scheme COLON SLASH SLASH [hostport] [SLASH dn
[QUESTION [attributes] [QUESTION [scope]
[QUESTION [filter] [QUESTION extensions]]]]]
scheme = "ldap"
hostport = <hostport from Section 3.2.2 of [RFC2396]>
; as updated by [RFC2732] to allow IPv6 literal addresses
; as updated by [RFC2732] to allow IPv6 literal addresses
dn = <distinguishedName from Section 3 of [LDAPDN]>
; see the "Escaping Using the % Method" section below.
attributes = attrdesc *(COMMA attrdesc)
attrdesc = <AttributeDescription from Section 4.1.4 of [Protocol]>
/ ASTERIX
/ ASTERISK
; see the "Escaping Using the % Method" section below.
scope = "base" / "one" / "sub"
filter = <filter from Section 4 of [Filters]>
; see the "Escaping Using the % Method" section below.
extensions = extension *(COMMA extension)
extension = [EXCLAMATION] extype [EQUALS exvalue]
extype = oid / oiddescr
exvalue = <LDAPString from section 4.1.2 of [Protocol]>
; see the "Escaping Using the % Method" section below.
oid = <LDAPOID from section 4.1.2 of [Protocol]>
oiddescr = <name from section 3.3 of [LDAPIANA]>
oiddescr = <name from section 3.3 of [RFC3383]>
EXCLAMATION = %x21 ; exclamation mark ("!")
ASTERIX = %x2A ; asterix ("*")
ASTERISK = %x2A ; asterisk ("*")
COLON = %x3A ; colon (":")
QUESTION = %x3F ; question mark ("?")
SLASH = %x5C; forward slash ("/")
@ -157,6 +164,14 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
The scope construct is used to specify the scope of the search to
perform in the given LDAP server. The allowable scopes are "base"
Smith & Howes Intended Category: Standards Track [Page 3]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
for a base object search, "one" for a one-level search, or "sub" for
a subtree search.
@ -164,14 +179,6 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
within the specified scope during the search. It has the format
specified in [Filters].
Smith & Howes Intended Category: Standards Track [Page 3]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
The extensions construct provides the LDAP URL with an extensibility
mechanism, allowing the capabilities of the URL to be extended in the
future. Extensions are a simple comma-separated list of type=value
@ -199,18 +206,29 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
The extension type (extype) MAY be specified using the oid form
(e.g., 1.2.3.4) or the oiddesc form (e.g., myLDAPURLExtension). Use
of the oiddesc form SHOULD be restricted to registered object
identifier descriptive names. See [LDAPIANA] for registration
details and usage guidelines for descriptive names.
identifier descriptive names. See [RFC3383] for registration details
and usage guidelines for descriptive names.
No LDAP URL extensions are defined in this document. Other documents
or a future version of this document MAY define one or more
extensions.
5.1. Escaping Using the % Method
A generated LDAP URL MUST consist only of the restricted set of
characters included in the uric production that is defined in section
2 of [RFC2396]. Implementations SHOULD accept other valid UTF-8
strings as input. An octet MUST be escaped using the % method
described in section 2.4 of [RFC2396] in any of these situations:
strings [UTF-8] as input. An octet MUST be escaped using the %
method described in section 2.4 of [RFC2396] in any of these
Smith & Howes Intended Category: Standards Track [Page 4]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
situations:
The octet is not in the reserved set defined in section 2.2 of
[RFC2396] or in the unreserved set defined in section 2.3 of
@ -221,13 +239,6 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
It is a comma character ',' that occurs inside an extension value.
Smith & Howes Intended Category: Standards Track [Page 4]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
6. Defaults for Fields of the LDAP URL
Some fields of the LDAP URL are optional, as described above. In the
@ -263,6 +274,16 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
If extensions is omitted, no extensions are assumed.
Smith & Howes Intended Category: Standards Track [Page 5]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
7. Examples
The following are some example LDAP URLs using the format defined
@ -277,13 +298,6 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
ldap://ldap1.example.net/o=University%20of%20Michigan,c=US
Smith & Howes Intended Category: Standards Track [Page 5]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
Both of these URLs correspond to a base object search of the
"o=University of Michigan,c=US" entry using a filter of
"(objectclass=*)", requesting all attributes.
@ -318,28 +332,28 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
the LDAP entry named "o=Question?,c=US" is given below, illustrating
the use of the escaping mechanism on the reserved character '?'.
Smith & Howes Intended Category: Standards Track [Page 6]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
ldap://ldap2.example.com/o=Question%3f,c=US?mail
The next example illustrates the interaction between the LDAP string
representation of filters quoting mechanism and URL quoting
mechanisms.
ldap://ldap3.example.com/o=Babsco,c=US???(int=%5c00%5c00%5c00%5c04)
The filter in this example uses the LDAP escaping mechanism of \ to
encode three zero or null bytes in the value. In LDAP, the filter
would be written as (int=\00\00\00\04). Because the \ character must
be escaped in a URL, the \'s are escaped as %5c in the URL encoding.
ldap://ldap3.example.com/o=Babsco,c=US???(four-octet=%5c00%5c00%5c00%5c04)
IP The filter in this example uses the LDAP escaping mechanism of \
to encode three zero or null bytes in the value. In LDAP, the filter
would be written as (four-octet=\00\00\00\04). Because the \
character must be escaped in a URL, the \'s are escaped as %5c in the
URL encoding.
The next example illustrates the interaction between the LDAP string
Smith & Howes Intended Category: Standards Track [Page 6]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
representation of DNs quoting mechanism and URL quoting mechanisms.
ldap://ldap.example.com/o=An%20Example%5c2c%20Inc.,c=US
@ -374,6 +388,14 @@ name extension (the value associated with the extension is an LDAP DN).
the e-bindname extension.
Smith & Howes Intended Category: Standards Track [Page 7]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
8. Security Considerations
General URL security considerations discussed in [RFC2396] are
@ -388,14 +410,6 @@ name extension (the value associated with the extension is an LDAP DN).
with this policy. If a client chooses to reuse an existing
connection when resolving one or more LDAP URL, it MUST ensure that
the connection is compatible with the URL and that no security
Smith & Howes Intended Category: Standards Track [Page 7]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
policies are violated.
Sending authentication information, no matter the mechanism, may
@ -427,7 +441,88 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
search, etc. The security implications of resolving an LDAP URL are
the same as those of resolving an LDAP search query.
9. Acknowledgements
9. Normative References
[LDAPDN] Zeilenga, K. (editor), "LDAP: String Representation of
Smith & Howes Intended Category: Standards Track [Page 8]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, a work in
progress.
[Filters] Smith, M. and Howes, T., "LDAP: String Representation of
Search Filters", draft-ietf-ldapbis-filter-xx.txt, a work in
progress.
[RFC2119] Bradner, S., "Key Words for use in RFCs to Indicate
Requirement Levels," RFC 2119, BCP 14, March 1997.
[Protocol] Sermersheim, J. (editor), "LDAP: The Protocol", draft-
ietf-ldapbis-protocol-xx.txt, a work in progress.
[RFC2234] Crocker, D., Overell, P., "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[RFC2396] Berners-Lee, T., Fielding, R., and Masinter, L., "Uniform
Resource Identifiers (URI): Generic Syntax", RFC 2396, August 1998.
[RFC2732] Hinden, R., Carpenter, B., Masinter, L., "Format for
Literal IPv6 Addresses in URL's", RFC 2732, December 1999.
[RFC3383] Zeilenga, K., "Internet Assigned Numbers Authority (IANA)
Considerations for the Lightweight Directory Access Protocol
(LDAP)", RFC 3383, September 2002.
[AuthMeth] Harrison, R. (editor), "LDAP: Authentication Methods",
draft-ietf-ldapbis-authmeth-xx.txt, a work in progress. a work in
progress.
[Roadmap] K. Zeilenga (editor), "LDAP: Technical Specification Road
Map", draft-ietf-ldapbis-roadmap-xx.txt, a work in progress.
[UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
draft-yergeau-rfc2279bis-xx.txt, a work in progress.
10. Informative References
None.
11. Intellectual Property Rights
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; neither does it represent that it
has made any effort to identify any such rights. Information on the
Smith & Howes Intended Category: Standards Track [Page 9]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
IETF's procedures with respect to rights in standards-track and
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances of
licenses to be made available, or the result of an attempt made to
obtain a general license or permission for the use of such
proprietary rights by implementors or users of this specification can
be obtained from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights which may cover technology that may be required to practice
this standard. Please address the information to the IETF Executive
Director.
12. Acknowledgements
The LDAP URL format was originally defined at the University of
Michigan. This material is based upon work supported by the National
@ -445,54 +540,7 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
Kurt Zeilenga, Jim Sermersheim, and Hallvard Furuseth deserve special
thanks for their contributions.
Smith & Howes Intended Category: Standards Track [Page 8]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
10. Normative References
[LDAPDN] Zeilenga, K. (editor), "LDAP: String Representation of
Distinguished Names", draft-ietf-ldapbis-dn-xx.txt, a work in
progress.
[LDAPIANA] Zeilenga, K., "IANA Considerations for LDAP", draft-ietf-
ldapbis-iana-xx.txt, a work in progress.
[Filters] Smith, M. and Howes, T., "LDAP: String Representation of
Search Filters", draft-ietf-ldapbis-filter-xx.txt, a work in
progress. [RFC2119] Bradner, S., "Key Words for use in RFCs to
Indicate Requirement Levels," RFC 2119, BCP 14, March 1997.
[Protocol] Sermersheim, J. (editor), "LDAP: The Protocol", draft-
ietf-ldapbis-protocol-xx.txt, a work in progress.
[RFC2234] Crocker, D., Overell, P., "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[RFC2279] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
RFC 2279, January 1998.
[RFC2396] Berners-Lee, T., Fielding, R., and Masinter, L., "Uniform
Resource Identifiers (URI): Generic Syntax", RFC 2396, August 1998.
[RFC2732] Hinden, R., Carpenter, B., Masinter, L., "Format for
Literal IPv6 Addresses in URL's", RFC 2732, December 1999.
[AuthMeth] Harrison, R. (editor), "LDAP: Authentication Methods",
draft-ietf-ldapbis-authmeth-xx.txt, a work in progress. a work in
progress.
[Roadmap] K. Zeilenga (editor), "LDAP: Technical Specification Road
Map", draft-ietf-ldapbis-roadmap-xx.txt, a work in progress.
11. Informative References
None.
12. Authors' Address
13. Authors' Address
Mark Smith, Editor
Netscape Communications Corp.
@ -500,15 +548,7 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
Sunnyvale, CA 94089
USA
+1 650 937-3477
Smith & Howes Intended Category: Standards Track [Page 9]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
mcs@netscape.com
MarkCSmithWork@aol.com
Tim Howes
Opsware, Inc.
@ -516,9 +556,17 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
Sunnyvale, CA 94085
USA
+1 408 744-7509
Smith & Howes Intended Category: Standards Track [Page 10]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
howes@opsware.com
13. Full Copyright Statement
14. Full Copyright Statement
Copyright (C) The Internet Society (2003). All Rights Reserved.
@ -546,48 +594,46 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
15. Appendix A: Changes Since RFC 2255
14. Appendix A: Changes Since RFC 2255
14.1. Technical Changes
15.1. Technical Changes
The following technical changes were made to the contents of the "URL
Definition" section:
Revised all of the ABNF to use common productions from [Models].
Smith & Howes Intended Category: Standards Track [Page 10]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
Added note and references to [RFC2732] to allow literal IPv6
addresses inside the hostport portion of the URL.
Added missing ASTERIX as an alternative for the attrdesc part of the
Added missing ASTERISK as an alternative for the attrdesc part of the
URL. It is believed that existing implementations of RFC 2255
already support this.
Added angle brackets around free-form prose in the "dn", "hostport",
"attrdesc", "filter", and "exvalue" rules.
Smith & Howes Intended Category: Standards Track [Page 11]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
Changed the ABNF for ldapurl to group the dn component with the
preceding slash.
Changed the extype rule to be an LDAPOID from [Protocol] or an OID
description from [LDAPIANA].
description from [RFC3383].
Changed the text about extension types so it references [LDAPIANA].
Changed the text about extension types so it references [RFC3383].
Reordered rules to more closely follow the order the elements appear
in the URL.
"Bindname Extension": removed due to lack of known implementations.
14.2. Editorial Changes
15.2. Editorial Changes
Changed document title to include "LDAP:" prefix.
@ -612,14 +658,6 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
"URL Definition" section: removed second copy of ldapurl grammar and
following two paragraphs (editorial error in RFC 2255). Fixed line
Smith & Howes Intended Category: Standards Track [Page 11]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
break within '!' sequence. Reworded last paragraph to clarify which
characters must be URL escaped. Added text to indicate that LDAP
URLs are used for references and referrals. Added text that refers
@ -630,6 +668,14 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
"URL Processing" section: clarified that connections MAY be reused
only if the open connection is compatible with the URL. Added text
Smith & Howes Intended Category: Standards Track [Page 12]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
to indicate that use of security services is encouraged and that they
SHOULD be used when updates are involved. Removed "dn" from
discussion of authentication methods. Added note that the client MAY
@ -639,9 +685,11 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
example.net hostnames. Added missing '?' to the LDAP URL example
whose filter contains three null bytes. Removed space after one
comma within a DN. Revised the bindname example to use e-bindname.
Added an example that demonstrates the interaction between DN
escaping and URL escaping. Added some examples to show URL
equivalence with respect to the dn portion of the URL.
Changed the name of an attribute used in one example from "int" to
"four-octet" to avoid potential confusion. Added an example that
demonstrates the interaction between DN escaping and URL escaping.
Added some examples to show URL equivalence with respect to the dn
portion of the URL.
"Security Considerations" section: Added a note about connection
reuse. Added a note about using strong authentication methods for
@ -654,11 +702,11 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
"Normative References" section: renamed from "References" per new RFC
guidelines. Changed from [1] style to [Protocol] style throughout the
document. Added references to RFCs 2234 and 2829. Updated RFC 1738
references to the appropriate sections within RFC 2396. Updated the
references to refer to LDAPBis WG documents. Removed the reference to
the LDAP Attribute Syntaxes document and added references to the LDAP
IANA and Roadmap documents.
document. Added references to RFCs 2234, 2829, and 3383. Updated
RFC 1738 references to the appropriate sections within RFC 2396.
Updated the references to refer to LDAPBis WG documents. Removed the
reference to the LDAP Attribute Syntaxes document and added a
reference to the Roadmap document.
"Informative References" section: added for clarity.
@ -668,64 +716,72 @@ INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
Copyright: updated the year.
16. Appendix B: Changes Since Previous Document Revision
Smith & Howes Intended Category: Standards Track [Page 12]
INTERNET-DRAFT LDAP: Uniform Resource Locator 28 February 2003
15. Appendix B: Changes Since Previous Document Revision
This appendix lists all changes relative to the last published
revision, draft-ietf-ldapbis-url-02.txt. Note that when appropriate
This appendix lists all changes relative to the previously published
revision, draft-ietf-ldapbis-url-03.txt. Note that when appropriate
these changes are also included in Appendix A, but are also included
here for the benefit of the people who have already reviewed draft-
ietf-ldapbis-url-02.txt. This section will be removed before this
ietf-ldapbis-url-03.txt. This section will be removed before this
document is published as an RFC.
15.1. Technical Changes
"URL Definition" section: revised all of the ABNF to use common
productions from [Models] and added note and references to [RFC2732]
to allow literal IPv6 addresses inside the hostport portion of the
URL.
15.2. Editorial Changes
"Status of this Memo" section: updated boilerplate to match current
I-D guidelines.
"URL Definition" section: replaced misleading phrase "MAY define
other extensions" with "MAY define one or more extensions" (this
document no longer defines any extensions). Rewrote the last
paragraph of this section to more clearly describe the escaping rules
and to reference [RFC2396] accurately.
"Examples" section: added an example that demonstrates the
interaction between DN escaping and URL escaping and clarified the
text that introduces the LDAP filter escaping interaction example.
"Acknowledgements" section: added Hallvard Furuseth.
"Normative References" section: added a reference to [RFC2732].
"Informative References" section: added for clarity.
Copyright: updated the year to 2003.
"Authors' Address" section: updated Tim's contact information.
Appendix A: added an older editorial change that was accidently
overlooked (Changed document title to include "LDAP:" prefix).
This Internet Draft expires on 28 August 2003.
Smith & Howes Intended Category: Standards Track [Page 13]
INTERNET-DRAFT LDAP: Uniform Resource Locator 25 October 2003
16.1. Technical Changes
None.
16.2. Editorial Changes
"URL Definition" section: added comments in the ABNF to point the
reader to the "Escaping Using the % Method" section, which was
changed into a section of its own to highlight the importance of
escaping the URL components correctly.
"Examples" section: changed the name of an attribute used in one
example from "int" to "four-octet" to avoid potential confusion.
Replaced all occurrences of "asterix" with the correctly spelled
"asterisk."
"Normative References" section: changed UTF-8 reference to point to
the UTF-8 Internet Draft; replace [LDAPIANA] Internet Draft reference
with a reference to RFC 3383.
"Intellectual Property Rights" section: added.
Author's Addresses section: New email address for Mark Smith.
"Full Copyright Statement" section: updated text to match latest IETF
guidelines.
This Internet Draft expires on 25 April 2004.
Smith & Howes Intended Category: Standards Track [Page 14]

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -6,11 +6,11 @@
INTERNET-DRAFT Kurt D. Zeilenga
Intended Category: Informational OpenLDAP Foundation
Expires in six months 20 December 2002
Expires in six months 26 October 2003
LDAP: Requesting Attributes by Object Class
<draft-zeilenga-ldap-adlist-04.txt>
<draft-zeilenga-ldap-adlist-06.txt>
Status of this Memo
@ -21,9 +21,9 @@ Status of this Memo
This document is intended to be, after appropriate review and
revision, submitted to the RFC Editor as an Informational document.
Distribution of this memo is unlimited. Technical discussion of this
document will take place on the IETF LDAP Extensions Working Group
mailing list <ldapext@ietf.org>. Please send editorial comments
directly to the author <Kurt@OpenLDAP.org>.
document will take place on the IETF LDAP Extensions mailing list
<ldapext@ietf.org>. Please send editorial comments directly to the
author <Kurt@OpenLDAP.org>.
Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups. Note that other
@ -38,10 +38,10 @@ Status of this Memo
Internet-Draft Shadow Directories can be accessed at
<http://www.ietf.org/shadow.html>.
Copyright 2002, The Internet Society. All Rights Reserved.
Copyright (C) The Internet Society (2003). All Rights Reserved.
Please see the Copyright section near the end of this document for
more information.
Please see the Full Copyright section near the end of this document
for more information.
Abstract
@ -57,7 +57,7 @@ Abstract
Zeilenga Requesting Attributes by Object Class [Page 1]
INTERNET-DRAFT draft-zeilenga-ldap-adlist-04 20 December 2002
INTERNET-DRAFT draft-zeilenga-ldap-adlist-06 26 October 2003
1. Overview
@ -82,14 +82,21 @@ INTERNET-DRAFT draft-zeilenga-ldap-adlist-04 20 December 2002
[RFC2256].
This extension is intended to be used where the user is in direct
control of the parameters of the LDAP search operation.
control of the parameters of the LDAP search operation, such as when
entering a LDAP URL [RFC2255] into a web browser.
2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 [RFC2119].
DSA stands for Directory System Agent (or server).
DSE stands for DSA-specific Entry.
2. Return of all Attributes of an Object Class
3. Return of all Attributes of an Object Class
This extension allows object class identifiers is to be provided in
the attributes field of the LDAP SearchRequest [RFC2251]. For each
@ -101,6 +108,14 @@ INTERNET-DRAFT draft-zeilenga-ldap-adlist-04 20 December 2002
unrecognized attribute description.
This extension redefines the attributes field of the SearchRequest to
Zeilenga Requesting Attributes by Object Class [Page 2]
INTERNET-DRAFT draft-zeilenga-ldap-adlist-06 26 October 2003
be a DescriptionList described by the following ASN.1 [X.680] data
type:
@ -109,13 +124,6 @@ INTERNET-DRAFT draft-zeilenga-ldap-adlist-04 20 December 2002
The Description is string conforming to the ABNF [RFC2234]:
Zeilenga Requesting Attributes by Object Class [Page 2]
INTERNET-DRAFT draft-zeilenga-ldap-adlist-04 20 December 2002
Description = AttributeDescription | ObjectClassDescription.
ObjectClassDescription = "+" ObjectClass *( ";" options )
@ -129,9 +137,11 @@ INTERNET-DRAFT draft-zeilenga-ldap-adlist-04 20 December 2002
zero options in the attributes field of a SearchRequest. Other uses
may be defined in future specifications.
Servers supporting this feature SHOULD publish the Object Identifier
1.3.6.1.4.1.4203.1.11.2 as a value of the 'supportedFeatures'
[FEATURES] attribute in the root DSE.
Servers supporting this feature SHOULD publish the object identifier
(OID) 1.3.6.1.4.1.4203.1.11.2 as a value of the 'supportedFeatures'
[FEATURES] attribute in the root DSE. Clients supporting this feature
SHOULD NOT use the feature unless they have knowledge the server
supports it.
3. Security Considerations
@ -147,29 +157,30 @@ INTERNET-DRAFT draft-zeilenga-ldap-adlist-04 20 December 2002
4. IANA Considerations
This OID 1.3.6.1.4.1.4203.1.11.2 to identify the LDAP "OC AD List?
feature. This OID was assigned [ASSIGN] by OpenLDAP Foundation, under
its IANA-assigned private enterprise allocation [PRIVATE], for use in
this specification.
The OID 1.3.6.1.4.1.4203.1.11.2 is used to identify the LDAP "OC AD
List" feature. This OID was assigned [ASSIGN] by OpenLDAP Foundation,
under its IANA-assigned private enterprise allocation [PRIVATE], for
use in this specification.
Registration of this protocol mechansism is requested per BCP 64
Registration of this protocol mechanism is requested per BCP 64
[RFC3383].
Subject: Request for LDAP Protocol Mechansism Registration
Object Identifier: 1.3.6.1.4.1.4203.1.5.2
Description: OC AD Lists
Person & email address to contact for further information:
Kurt Zeilenga <kurt@openldap.org>
Usage: Feature
Specification: RFCxxxx
Author/Change Controller: Kurt Zeilenga <kurt@openldap.org>
Comments: none
Zeilenga Requesting Attributes by Object Class [Page 3]
INTERNET-DRAFT draft-zeilenga-ldap-adlist-04 20 December 2002
INTERNET-DRAFT draft-zeilenga-ldap-adlist-06 26 October 2003
Subject: Request for LDAP Protocol Mechanism Registration
Object Identifier: 1.3.6.1.4.1.4203.1.5.2
Description: OC AD Lists
Person & email address to contact for further information:
Kurt Zeilenga <kurt@openldap.org>
Usage: Feature
Specification: RFC XXXX
Author/Change Controller: Kurt Zeilenga <kurt@openldap.org>
Comments: none
5. Author's Address
@ -181,58 +192,66 @@ INTERNET-DRAFT draft-zeilenga-ldap-adlist-04 20 December 2002
6. Normative References
[RFC2119] S. Bradner, "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2234] D. Crocker, P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[RFC2251] M. Wahl, T. Howes, S. Kille, "Lightweight Directory Access
Protocol (v3)", RFC 2251, December 1997.
[RFC2251] Wahl, M., T. Howes and S. Kille, "Lightweight Directory
Access Protocol (v3)", RFC 2251, December 1997.
[RFC2252] M. Wahl, A. Coulbeck, T. Howes, S. Kille, "Lightweight
Directory Access Protocol (v3): Attribute Syntax
Definitions", RFC 2252, December 1997.
[RFC2252] Wahl, M., A. Coulbeck, T. Howes, and S. Kille,
"Lightweight Directory Access Protocol (v3): Attribute
Syntax Definitions", RFC 2252, December 1997.
[RFC3377] J. Hodges, R. Morgan, "Lightweight Directory Access
Protocol (v3): Technical Specification", RFC 3377,
September 2002.
[RFC3377] Hodges, J. and R. Morgan, "Lightweight Directory Access
Protocol (v3): Technical Specification", RFC 3377,
September 2002.
[FEATURES] K. Zeilenga, "Feature Discovery in LDAP",
draft-zeilenga-ldap-features-xx.txt (a work in progress).
[FEATURES] Zeilenga, K., "Feature Discovery in LDAP",
draft-zeilenga-ldap-features-xx.txt, a work in progress.
[X.680] ITU-T, "Abstract Syntax Notation One (ASN.1) -
Specification of Basic Notation", X.680, 1994.
[X.680] International Telecommunication Union -
Telecommunication Standardization Sector, "Abstract
Syntax Notation One (ASN.1) - Specification of Basic
Notation", X.680(1997) (also ISO/IEC 8824-1:1998).
7. Informative References
[RFC2256] M. Wahl, "A Summary of the X.500(96) User Schema for use
with LDAPv3", RFC 2256, December 1997.
[RFC3383] K. Zeilenga, "IANA Considerations for LDAP", RFC 3383,
September 2002.
[ASSIGN] OpenLDAP Foundation, "OpenLDAP OID Delegations",
http://www.openldap.org/foundation/oid-delegate.txt.
[PRIVATE] IANA, "Private Enterprise Numbers",
http://www.iana.org/assignments/enterprise-numbers.
Zeilenga Requesting Attributes by Object Class [Page 4]
INTERNET-DRAFT draft-zeilenga-ldap-adlist-04 20 December 2002
INTERNET-DRAFT draft-zeilenga-ldap-adlist-06 26 October 2003
Copyright 2002, The Internet Society. All Rights Reserved.
[RFC2255] Howes, T. and M. Smith, "The LDAP URL Format", RFC 2255,
December, 1997.
[RFC2256] Wahl, M., "A Summary of the X.500(96) User Schema for
use with LDAPv3", RFC 2256, December 1997.
[RFC3383] Zeilenga, K., "IANA Considerations for LDAP", BCP 64
(also RFC 3383), September 2002.
[ASSIGN] OpenLDAP Foundation, "OpenLDAP OID Delegations",
http://www.openldap.org/foundation/oid-delegate.txt.
[PRIVATE] IANA, "Private Enterprise Numbers",
http://www.iana.org/assignments/enterprise-numbers.
Full Copyright
Copyright (C) The Internet Society (2003). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published and
or assist in its implmentation may be prepared, copied, published and
distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
@ -243,25 +262,6 @@ Copyright 2002, The Internet Society. All Rights Reserved.
copyrights defined in the Internet Standards process must be followed,
or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

View file

@ -6,11 +6,11 @@
INTERNET-DRAFT Kurt D. Zeilenga
Intended Category: Standard Track OpenLDAP Foundation
Expires in six months 11 May 2003
Expires in six months 25 October 2003
The LDAP Assertion Control
<draft-zeilenga-ldap-assert-00.txt>
<draft-zeilenga-ldap-assert-01.txt>
Status of this Memo
@ -22,8 +22,8 @@ Status of this Memo
revision, submitted to the IESG for consideration as a Standard Track
document. Distribution of this memo is unlimited. Technical
discussion of this document will take place on the IETF LDAP
Extensions Working Group mailing list <ldapext@ietf.org>. Please send
editorial comments directly to the author <Kurt@OpenLDAP.org>.
Extensions mailing list <ldapext@ietf.org>. Please send editorial
comments directly to the author <Kurt@OpenLDAP.org>.
Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups. Note that other
@ -48,30 +48,30 @@ Abstract
This document defines the Lightweight Directory Access Protocol (LDAP)
Assertion Control which allows a client to specify that a directory
operation should only be processed if the assertion when applied to
the target entry of the operation. It can be used to construct "test
and set" and "test and clear" operations.
operation should only be processed if an assertion applied to the
target entry of the operation is true. It can be used to construct
"test and set" and "test and clear" and other conditional operations.
Zeilenga LDAP Assertion Control [Page 1]
INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-assert-01 25 October 2003
1. Overview
This document defines the Lightweight Directory Access Protocol (LDAP)
[RFC3377] assertion control. The assertion control allows the client
to specify a condition which allows the operation to be processed
normally only when true. Otherwise the operation fails.
to specify a condition which must be true for the operation to be
processed normally. Otherwise the operation fails.
The control can be used with the Modify operation [RFC2251] to perform
atomic "test and set" and "test and clear" operations as the the
asserted condition is evaluated as an integral part the operation.
The control may be attached to other update operations to support
conditional add, delete, and renaming of objects.
atomic "test and set" and "test and clear" operations as the asserted
condition is evaluated as an integral part the operation. The control
may be attached to other update operations to support conditional add,
delete, and renaming of objects.
The control may also be used with the search operation. Here the
assertion is applied to the base object of the search before searching
@ -83,13 +83,12 @@ INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
2. Terminology
Protocol elements are described using ASN.1 [X.680]. The term
"BER-encoded" means the element is to be encoded using the Basic
Encoding Rules [X.690] under the restrictions detailed in Section 5.1
of [RFC2251].
Protocol elements are described using ASN.1 [X.680] with implicit
tags. The term "BER-encoded" means the element is to be encoded using
the Basic Encoding Rules [X.690] under the restrictions detailed in
Section 5.1 of [RFC2251].
DN stands for Distinguished Name.
DSA stands for Directory System Agent (i.e., a directory server).
DSA stands for Directory System Agent (or server).
DSE stands for DSA-specific Entry.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
@ -104,30 +103,25 @@ INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
[RFC2251, Section 4.5.1]. The criticality may be TRUE or FALSE.
There is no corresponding response control.
Servers implementing this technical specification SHOULD publish
IANA-ASSIGNED-OID as a value of the 'supportedControl' attribute
[RFC2252] in their root DSE.
The control is appropriate for both LDAP interrogation and update
operations [RFC2251] including Add, Compare, Delete, Modify, ModifyDN
(rename), and Search. It is inappropriate for Abandon, Bind nor
Unbind operations. It is also inappropriate for the Start TLS
[RFC2830] operation.
Zeilenga LDAP Assertion Control [Page 2]
INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-assert-01 25 October 2003
The control is appropriate for both LDAP interrogation and update
operations [RFC2251] including Add, Compare, Delete, Modify, ModifyDN
(rename), and Search. It is not appropriate for Abandon, Bind nor
Unbind operations. Nor is it appropriate for the Start TLS [RFC2830]
operation.
When the control is attached to an LDAP request, the processing of the
request is conditional on the evaluation of the Filter as applied
against the target of the operation. If the Filter evaluates to TRUE,
then the request is processed normally. If the Filter evaluates to
FALSE, then assertionFailed (IANA-ASSIGNED-CODE) resultCode is
returned and no further processing is performed.
FALSE or Undefined, then assertionFailed (IANA-ASSIGNED-CODE)
resultCode is returned and no further processing is performed.
For Add, Compare, and ModifyDN the target is indicated by the entry
field in the request. For Modify, the target is indicated by the
@ -135,23 +129,29 @@ INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
type. For the Compare operation and all update operations, the
evaluation of the assertion MUST be performed as an integral part of
the operation. That is, the evaluation of the assertion and the
normal processing SHALL be done as one atomic action.
normal processing of the operation SHALL be done as one atomic action.
For search operation, the target is indicated by the baseObject field
and the evaluation is done after "finding" but before "searching"
[RFC2251]. Hence, if the evaluation fails, no entries or
continuations references are returned.
Servers implementing this technical specification SHOULD publish the
object identifier IANA-ASSIGNED-OID as a value of the
'supportedControl' attribute [RFC2252] in their root DSE. A server
MAY choose to advertise this extension only when the client is
authorized to use it.
Other documents may specify how this control applies to other LDAP
operations. In doing so, they must how the target entry is
operations. In doing so, they must state how the target entry is
determined.
3. Security Considerations
4. Security Considerations
The filter may, like other values of the request, contain sensitive
information. When so, this information should be appropriately
protected.
The filter may, like other components of the request, contain
sensitive information. When so, this information should be
appropriately protected.
As with any general assertion mechanism, the mechanism can be used to
determine directory content. Hence, the mechanism SHOULD be subject
@ -169,16 +169,16 @@ INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
Zeilenga LDAP Assertion Control [Page 3]
INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-assert-01 25 October 2003
4. IANA Considerations
5. IANA Considerations
4.1. Object Identifier
5.1. Object Identifier
It is requested that IANA register upon Standards Action an LDAP
Object Identifier [RFC3383] to identify the LDAP Assertion Control
defined in this document.
It is requested that IANA assign upon Standards Action an LDAP Object
Identifier [RFC3383] to identify the LDAP Assertion Control defined in
this document.
Subject: Request for LDAP Object Identifier Registration
Person & email address to contact for further information:
@ -188,7 +188,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
Comments:
Identifies the LDAP Assertion Control
4.2 LDAP Protocol Mechanism
5.2 LDAP Protocol Mechanism
Registration of this protocol mechanism [RFC3383] is requested.
@ -203,7 +203,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
Comments: none
4.3 LDAP Result Code
5.3 LDAP Result Code
Assignment of an LDAP Result Code [RFC3383] called 'assertionFailed'
is requested.
@ -217,7 +217,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
Comments: none
5. Acknowledgments
6. Acknowledgments
The assertion control concept is attributed to Morteza Ansari.
@ -225,17 +225,17 @@ INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
Zeilenga LDAP Assertion Control [Page 4]
INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-assert-01 25 October 2003
6. Author's Address
7. Author's Address
Kurt D. Zeilenga
OpenLDAP Foundation
<Kurt@OpenLDAP.org>
7. Normative References
8. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
@ -252,7 +252,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
September 2002.
8. Informative References
9. Informative References
[RFC3383] Zeilenga, K., "IANA Considerations for LDAP", BCP 64
(also RFC 3383), September 2002.
@ -281,7 +281,7 @@ Intellectual Property Rights
Zeilenga LDAP Assertion Control [Page 5]
INTERNET-DRAFT draft-zeilenga-ldap-assert-00 11 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-assert-01 25 October 2003
copyrights, patents or patent applications, or other proprietary

View file

@ -6,12 +6,12 @@
INTERNET-DRAFT Kurt D. Zeilenga
Intended Category: Standard Track OpenLDAP Foundation
Expires in six months 17 May 2002
Expires in six months 1 November 2002
LDAP "Who am I?" Operation
<draft-zeilenga-ldap-authzid-06.txt>
<draft-zeilenga-ldap-authzid-08.txt>
Status of this Memo
@ -23,8 +23,8 @@ Status of this Memo
revision, submitted to the RFC Editor as a Standard Track document.
Distribution of this memo is unlimited. Technical discussion of this
document will take place on the IETF LDAP Extension Working Group
mailing list <ietf-ldapext@netscape.com>. Please send editorial
comments directly to the author <Kurt@OpenLDAP.org>.
mailing list <ldapext@ietf.org>. Please send editorial comments
directly to the author <Kurt@OpenLDAP.org>.
Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups. Note that other
@ -57,7 +57,7 @@ Abstract
Zeilenga LDAP "Who am I?" [Page 1]
INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
INTERNET-DRAFT draft-zeilenga-ldap-authzid-08 1 November 2002
Conventions
@ -70,27 +70,20 @@ Conventions
1. Background and Intent of Use
This specification describes a Lightweight Directory Access Protocol
(LDAP) [RFC2251] extended operation which clients can use to obtain
the primary authorization identity in its primary form which the
server has associated with the user or application entity.
Servers often associate multiple authorization identities with the
client and each authorization identity may be represented by multiple
authzId [RFC2829] strings. This operation requests and returns the
authzId the server considers to be primary. In the specification, the
term "the authorization identity" and "the authzid" are to generally
read as "the primary authorization identity" and the "the primary
authzid", respectively.
(LDAP) [RFC3377] operation which clients can use to obtain the primary
authorization identity in its primary form which the server has
associated with the user or application entity. The operation is
called the "Who am I?" operation.
This specification is intended to replace the existing [AUTHCTL]
mechanism which uses Bind request and response controls to request and
return the authorization identity. Bind controls are not protected by
the security layers established by the Bind operation which they are
transferred as part of. While it is possible to establish security
layers prior to the Bind operation, it is often desirable to only use
security layers established by the Bind operation. An extended
operation sent after a Bind operation is protected by the security
layers established by the Bind operation.
layers using Start TLS [RFC2830] prior to the Bind operation, it is
often desirable to use security layers established by the Bind
operation. An extended operation sent after a Bind operation is
protected by the security layers established by the Bind operation.
There are other cases where it is desirable to request the
authorization identity which the server associated with the client
@ -101,26 +94,31 @@ Conventions
Control. The "Who am I?" operation can also be used prior to the Bind
operation.
The LDAP "Who am I?" operation is named after the UNIX whoami(1)
command. The whoami(1) command displays the effective user id.
Servers often associate multiple authorization identities with the
client and each authorization identity may be represented by multiple
authzId [RFC2829] strings. This operation requests and returns the
authzId the server considers to be primary. In the specification, the
term "the authorization identity" and "the authzId" are generally to
be read as "the primary authorization identity" and the "the primary
authzId", respectively.
2. The "Who am I?" Operation
The "Who am I?" operation is defined as an LDAP Extended Operation
[RFC2251, Section 4.12] identified by the whoamiOID Object Identifier
(OID). This section details the syntax of the operation's whoami
Zeilenga LDAP "Who am I?" [Page 2]
INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
INTERNET-DRAFT draft-zeilenga-ldap-authzid-08 1 November 2002
[RFC2251, Section 4.12] identified by the whoamiOID Object Identifier
(OID). This section details the syntax of the operation's whoami
request and response messages.
whoamiOID ::= "1.3.6.1.4.1.4203.1.11.3"
whoamiOID ::= "1.3.6.1.4.1.4203.1.11.3"
2.1. The whoami Request
@ -130,48 +128,54 @@ INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
example, a whoami request could be encoded as the sequence of octets
(in hex):
30 1e 02 01 02 77 19 80 17 31 2e 33 2e 36 2e 31
2e 34 2e 31 2e 34 32 30 33 2e 31 2e 31 31 2e 33
2.2. The whoami Response
The whoami response is an ExtendedResponse where the responseName
field is absent and, if present, the response field is empty or an
field is absent and the response field, if present, is empty or an
authzId [RFC2829]. For example, a whoami response returning the
authzid "u:kurt@OPENLDAP.ORG" (in response to the example request)
authzId "u:kurt@OPENLDAP.ORG" (in response to the example request)
would be encoded as the sequence of octets (in hex):
30 21 02 01 02 78 1c 0a 01 00 04 00 04 00 8b 13
75 3a 6b 75 72 74 40 4f 50 45 4e 4c 44 41 50 2e
4f 52 47
3. Operational Semantics
The function of the "Who am I?" operation is to request that the
server returns the authorization identity it currently associates with
the client. The client requests this authorization identity by
issuing a whoami Request. The server responds to this request with a
whoami Response.
The "Who am I?" operation provides a mechanism, a whoami Request, for
the client to request that the server returns the authorization
identity it currently associates with the client and provides a
mechanism, a whoami Response, for the server to respond to that
request.
If the server is willing and able to provide the authorization
identity it associates with the client, the server SHALL return a
whoami Response with a success resultCode. If the server is treating
the client as an anonymous entity, the response field is empty.
Otherwise the server is to provide the authzId [RFC2829] representing
the authorization identity it currently associates with the client in
the response field.
the client as an anonymous entity, the response field is present but
empty. Otherwise the server provides the authzId [RFC2829]
representing the authorization identity it currently associates with
the client in the response field.
If the server is unwilling or unable to provide the authorization
identity it associates with the client, the server SHALL return a
whoami Response with an appropriate non-success resultCode (such as
operationsError, protocolError, confidentialityRequired,
insufficientAccessRights, busy, unavailable, unwillingToPerform, or
other) and an absent response field.
Zeilenga LDAP "Who am I?" [Page 3]
INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
INTERNET-DRAFT draft-zeilenga-ldap-authzid-08 1 November 2002
operationsError, protocolError, confidentialityRequired,
insufficientAccessRights, busy, unavailable, unwillingToPerform, or
other) and an absent response field.
As described in [RFC2251] and [RFC2829], an LDAP session has an
"anonymous" association until the client has been successfully
authenticated using the Bind operation. Clients MUST NOT invoke the
@ -183,10 +187,10 @@ INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
4. Extending the "Who am I?" operation with controls
Future specifications may extend the "Who am I?" operation using the
control mechanism. When extended by controls, the "Who am I?"
operation requests and returns the authorization identity the server
associates with the client in a particular context indicated by the
controls.
control mechanism [RFC2251]. When extended by controls, the "Who am
I?" operation requests and returns the authorization identity the
server associates with the client in a particular context indicated by
the controls.
4.1. Proxied Authorization Control
@ -204,7 +208,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
it associates with the assumed identity.
When a Proxied Authorization Control is be attached to the "Who Am I?"
operation, the operation requests the return of the authzid the server
operation, the operation requests the return of the authzId the server
associates with the identity asserted in the Proxied Authorization
Control. The TBD result code is used to indicate that the server does
not allow the client to assume the asserted identity. [[Note to RFC
@ -216,33 +220,50 @@ INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
Identities associated with users may be sensitive information. When
so, security layers [RFC2829][RFC2830] should be established to
protect this information. This mechanism is specifically designed to
allow security layers established by a Bind operation to protect the
integrity and/or confidentiality of the authorization identity.
Zeilenga LDAP "Who am I?" [Page 4]
INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
INTERNET-DRAFT draft-zeilenga-ldap-authzid-08 1 November 2002
protect this information. This mechanism is specifically designed to
allow security layers established by a Bind operation to protect the
integrity and/or confidentiality of the authorization identity.
Servers may place access control or other restrictions upon the use of
this operation.
As with any other extended operations, general LDAP considerations
apply. These are detailed in [RFC2251], [RFC2829], and [RFC2830].
As with any other extended operations, general LDAP security
considerations [RFC3377] apply.
6. IANA Considerations
No IANA assignments are requested.
This OID 1.3.6.1.4.1.4203.1.11.3 to identify the LDAP "Who Am I?
extended operation. This OID was assigned [ASSIGN] by OpenLDAP
Foundation, under its IANA-assigned private enterprise allocation
[PRIVATE], for use in this specification.
This document uses the OID 1.3.6.1.4.1.4203.1.11.3 to identify the
LDAP "Who Am I? extended operation. This OID was assigned [ASSIGN] by
OpenLDAP Foundation under its IANA assigned private enterprise
allocation [PRIVATE] for use in this specification.
Registration of this protocol mechansism is requested [RFC3383].
Subject: Request for LDAP Protocol Mechansism Registration
Object Identifier: 1.3.6.1.4.1.4203.1.11.3
Description: Who am I?
Person & email address to contact for further information:
Kurt Zeilenga <kurt@openldap.org>
Usage: Extended Operation
Specification: RFCxxxx
Author/Change Controller: IESG
Comments: none
7. Acknowledgment
@ -251,6 +272,17 @@ INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
"Authentication Response Control" [AUTHCTL] by Rob Weltman, Mark Smith
and Mark Wahl.
The LDAP "Who am I?" operation takes it name from the UNIX whoami(1)
command. The whoami(1) command displays the effective user id.
Zeilenga LDAP "Who am I?" [Page 5]
INTERNET-DRAFT draft-zeilenga-ldap-authzid-08 1 November 2002
8. Author's Address
@ -274,18 +306,19 @@ INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
Access Protocol (v3): Extension for Transport Layer
Security", RFC 2830, May 2000.
[RFC3377] J. Hodges, R. Morgan, "Lightweight Directory Access
Protocol (v3): Technical Specification", RFC 3377,
September 2002.
[PROXYCTL] R. Weltman, "LDAP Proxied Authentication Control", draft-
weltman-ldapv3-proxy-xx.txt (a work in progress).
Zeilenga LDAP "Who am I?" [Page 5]
INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
10. Informative References
[RFC3383] K. Zeilenga, "IANA Considerations for LDAP", BCP 64 (also
RFC 3383), September 2002.
[ASSIGN] OpenLDAP Foundation, "OpenLDAP OID Delegations",
http://www.openldap.org/foundation/oid-delegate.txt.
@ -299,6 +332,14 @@ INTERNET-DRAFT draft-zeilenga-ldap-authzid-06 17 May 2002
Copyright 2002, The Internet Society. All Rights Reserved.
Zeilenga LDAP "Who am I?" [Page 6]
INTERNET-DRAFT draft-zeilenga-ldap-authzid-08 1 November 2002
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published and
@ -335,5 +376,20 @@ Copyright 2002, The Internet Society. All Rights Reserved.
Zeilenga LDAP "Who am I?" [Page 6]
Zeilenga LDAP "Who am I?" [Page 7]

View file

@ -6,11 +6,11 @@
INTERNET-DRAFT Kurt D. Zeilenga
Intended Category: Standard Track OpenLDAP Foundation
Expires in six months 3 May 2003
Expires in six months 25 October 2003
LDAP Cancel Extended Operation
<draft-zeilenga-ldap-cancel-08.txt>
LDAP Cancel Operation
<draft-zeilenga-ldap-cancel-10.txt>
1. Status of this Memo
@ -21,9 +21,9 @@ Expires in six months 3 May 2003
This document is intended to be, after appropriate review and
revision, submitted to the RFC Editor as a Standard Track document.
Distribution of this memo is unlimited. Technical discussion of this
document will take place on the IETF LDAP Extension Working Group
mailing list <ldapext@ietf.org>. Please send editorial comments
directly to the author <Kurt@OpenLDAP.org>.
document will take place on the IETF LDAP Extensions mailing list
<ldapext@ietf.org>. Please send editorial comments directly to the
author <Kurt@OpenLDAP.org>.
Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups. Note that other
@ -38,10 +38,10 @@ Expires in six months 3 May 2003
Internet-Draft Shadow Directories can be accessed at
<http://www.ietf.org/shadow.html>.
Copyright 2003, The Internet Society. All Rights Reserved.
Copyright (C) The Internet Society (2003). All Rights Reserved.
Please see the Copyright section near the end of this document for
more information.
Please see the Full Copyright section near the end of this document
for more information.
Abstract
@ -57,20 +57,23 @@ Abstract
Zeilenga LDAP Cancel [Page 1]
INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-cancel-10 25 Octeboer 2003
Conventions
Terminology
Protocol elements are described using ASN.1 [X.680] with implicit
tags. The term "BER-encoded" means the element is to be encoded using
the Basic Encoding Rules [X.690] under the restrictions detailed in
Section 5.1 of [RFC2251].
DSA stands for Directory System Agent (or server).
DSE stands for DSA-specific Entry.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 [RFC2119].
Protocol elements are described using ASN.1 [X.680]. The term
"BER-encoded" means the element is to be encoded using the Basic
Encoding Rules [X.690] under the restrictions detailed in Section 5.1
of [RFC2251].
1. Background and Intent of Use
@ -83,10 +86,10 @@ Conventions
X.511 Directory Access Protocol (DAP) [X.511] provides an Abandon
operation which does have a response and also requires the abandoned
operation to return a response indicating it was canceled. The Cancel
operation is modeled after the DAP Abandon operation.
operation to return a response indicating it was canceled. The LDAP
Cancel operation is modeled after the DAP Abandon operation.
The Cancel operation SHOULD be used instead of the LDAP Abandon
The LDAP Cancel operation SHOULD be used instead of the LDAP Abandon
operation when the client needs an indication of the outcome. This
operation may be used to cancel both interrogation and update
operations.
@ -106,18 +109,17 @@ Conventions
2.1. Cancel Request
The Cancel request is an ExtendedRequest with the requestName field
containing the IANA-0IGNED-OID and a requestValue field which contains
Zeilenga LDAP Cancel [Page 2]
INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-cancel-10 25 Octeboer 2003
a BER-encoded cancelRequestValue value. The cancelID field contains
the message id associated with the operation to be canceled.
The Cancel request is an ExtendedRequest with the requestName field
containing the IANA-ASSIGNED-OID and a requestValue field which
contains a BER-encoded cancelRequestValue value. The cancelID field
contains the message id associated with the operation to be canceled.
2.2. Cancel Response
@ -143,10 +145,10 @@ INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
cancel an outstanding operation issued within the same session.
The client requests the cancelation of an outstanding operation by
issuing a Cancel Response with a cancelID with the message id
identifying the outstanding operation. The Cancel Request itself has
a distinct message id. Clients SHOULD NOT request cancelation of an
operation multiple times.
issuing a Cancel Response with a cancelID set to the message id of the
outstanding operation. The Cancel Request itself has a distinct
message id. Clients SHOULD NOT request cancelation of an operation
multiple times.
If the server is willing and able to cancel the outstanding operation
identified by the cancelId, the server SHALL return a Cancel Response
@ -162,22 +164,24 @@ INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
knowledge of the operation requested to be canceled.
The cannotCancel resultCode is returned if the identified operation
does not support cancelation or the cancel operation could not be
performed. The following classes of operations are not cancelable:
Zeilenga LDAP Cancel [Page 3]
INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-cancel-10 25 Octeboer 2003
does not support cancelation or the cancel operation could not be
performed. The following classes of operations are not cancelable:
- operations which have no response,
- operations which associate or disassociate authentication and/or
- operations which create, alter, or destroy authentication and/or
authorization associations,
- operations which establish or tear-down security services, and
- operations which establish, alter, or tear-down security services,
and
- operations which abandon or cancel other operations.
@ -187,20 +191,22 @@ INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
The tooLate resultCode is returned to indicate that it is too late to
cancel the outstanding operation. For example, the server may return
tooLate for a request to cancel an outstanding modify operation which
as already commited updates to the underlying datastore.
as already committed updates to the underlying data store.
Servers SHOULD indicate their support for this extended operation by
providing IANA-ASSIGNED-OID as a value of the supportedExtension
providing IANA-ASSIGNED-OID as a value of the 'supportedExtension'
attribute type in their root DSE. A server MAY choose to advertise
this extension only when the client is authorized to use this
operation.
this extension only when the client is authorized to use it.
4. Security Considerations
This operation is intended to allow a user to cancel operations they
previously issued. No user should be allowed to cancel an operation
issued by another user.
This operation is intended to allow user to cancel operations they
previously issued during the current LDAP association. In certain
cases, such as when the Proxy Authorization Control is in use,
different outstanding operations may be processed under different LDAP
associations. Servers MUST NOT allow a user to cancel an operation
belonging to another user.
Some operations should not be cancelable for security reasons. This
specification disallows cancelation of Bind operation and Start TLS
@ -215,28 +221,26 @@ INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
Registration of the following values [RFC3383] is requested.
5.1. Object Identifier
It is requested that IANA register upon Standards Action an LDAP
Object Identifier to identify the LDAP Cancel Extended Operation as
defined in this document.
Zeilenga LDAP Cancel [Page 4]
INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-cancel-10 25 Octeboer 2003
The following registration template is suggested:
5.1. Object Identifier
It is requested that IANA register upon Standards Action an LDAP
Object Identifier to identify the LDAP Cancel Operation as defined in
this document.
Subject: Request for LDAP Object Identifier Registration
Person & email address to contact for further information:
Kurt Zeilenga <kurt@OpenLDAP.org>
Specification: RFCXXXX
Specification: RFC XXXX
Author/Change Controller: IESG
Comments:
Identifies the LDAP Cancel Extended Operation
Identifies the LDAP Cancel Operation
5.2. LDAP Protocol Mechanism
@ -244,13 +248,13 @@ INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
It is requested that IANA register upon Standards Action the LDAP
Protocol Mechanism described in this document.
Subject: Request for LDAP Protocol Mechansism Registration
Subject: Request for LDAP Protocol Mechanism Registration
Object Identifier: IANA-ASSIGNED-OID
Description: LDAP Cancel Extended Operation
Description: LDAP Cancel Operation
Person & email address to contact for further information:
Kurt Zeilenga <kurt@openldap.org>
Usage: Extended Operation
Specification: RFCXXXX
Specification: RFC XXXX
Author/Change Controller: IESG
Comments: none
in 2
@ -268,78 +272,112 @@ INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
Result Code Name: noSuchOperation
Result Code Name: tooLate
Result Code Name: cannotCancel
Specification: RFCXXXX
Specification: RFC XXXX
Author/Change Controller: IESG
Comments: request four consecutive result codes be assigned
6. Acknowledgment
The LDAP Cancel operation is modeled after the X.511 DAP Abandon
Zeilenga LDAP Cancel [Page 5]
INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-cancel-10 25 Octeboer 2003
6. Acknowledgment
The LDAP Cancel operation is modeled after the X.511 DAP Abandon
operation.
7. Normative References
[RFC2119] S. Bradner, "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2251] M. Wahl, T. Howes, S. Kille, "Lightweight Directory Access
Protocol (v3)", RFC 2251, December 1997.
[RFC2251] Wahl, M., T. Howes and S. Kille, "Lightweight Directory
Access Protocol (v3)", RFC 2251, December 1997.
[RFC2830] J. Hodges, R. Morgan, and M. Wahl, "Lightweight Directory
Access Protocol (v3): Extension for Transport Layer
Security", RFC 2830, May 2000.
[RFC2830] Hodges, J., R. Morgan, and M. Wahl, "Lightweight
Directory Access Protocol (v3): Extension for Transport
Layer Security", RFC 2830, May 2000.
[RFC3377] J. Hodges, R. Morgan, "Lightweight Directory Access Protocol
(v3): Technical Specification", RFC 3377, September 2002.
[RFC3377] Hodges, J. and R. Morgan, "Lightweight Directory Access
Protocol (v3): Technical Specification", RFC 3377,
September 2002.
[X.680] ITU-T, "Abstract Syntax Notation One (ASN.1) - Specification
of Basic Notation", X.680, 1994.
[X.680] International Telecommunication Union -
Telecommunication Standardization Sector, "Abstract
Syntax Notation One (ASN.1) - Specification of Basic
Notation", X.680(1997) (also ISO/IEC 8824-1:1998).
[X.690] ITU-T, "Specification of ASN.1 encoding rules: Basic,
Canonical, and Distinguished Encoding Rules", X.690, 1994.
[X.690] International Telecommunication Union -
Telecommunication Standardization Sector, "Specification
of ASN.1 encoding rules: Basic Encoding Rules (BER),
Canonical Encoding Rules (CER), and Distinguished
Encoding Rules (DER)", X.690(1997) (also ISO/IEC
8825-1:1998).
8. Informative References
[RFC3383] K. Zeilenga, "IANA Considerations for LDAP", RFC 3383,
September 2002.
[RFC3383] Zeilenga, K., "IANA Considerations for LDAP", BCP 64
(also RFC 3383), September 2002.
[X.511] ITU-T, "The Directory: Abstract Service Definition", X.511,
1993.
[X.511] International Telecommunication Union -
Telecommunication Standardization Sector, "The
Directory: Abstract Service Definition", X.511(1993).
9. Author's Address
Kurt D. Zeilenga
OpenLDAP Foundation
<Kurt@OpenLDAP.org>
Copyright 2003, The Internet Society. All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published and
distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are
Zeilenga LDAP Cancel [Page 6]
INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-cancel-10 25 Octeboer 2003
OpenLDAP Foundation
<Kurt@OpenLDAP.org>
Intellectual Property Rights
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to pertain
to the implementation or use of the technology described in this
document or the extent to which any license under such rights might or
might not be available; neither does it represent that it has made any
effort to identify any such rights. Information on the IETF's
procedures with respect to rights in standards-track and
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances of
licenses to be made available, or the result of an attempt made to
obtain a general license or permission for the use of such proprietary
rights by implementors or users of this specification can be obtained
from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights which may cover technology that may be required to practice
this standard. Please address the information to the IETF Executive
Director.
Full Copyright
Copyright (C) The Internet Society (2003). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implmentation may be prepared, copied, published and
distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
@ -347,44 +385,6 @@ INTERNET-DRAFT draft-zeilenga-ldap-cancel-08 3 May 2003
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be followed,
or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

View file

@ -6,12 +6,12 @@
INTERNET-DRAFT Editor: Kurt D. Zeilenga
Intended Category: Standard Track OpenLDAP Foundation
Expires in six months 1 March 2002
Expires in six months 9 December 2002
Obsoletes: RFC 2596
Language Tags and Ranges in LDAP
draft-zeilenga-ldap-rfc2596-01.txt
draft-zeilenga-ldap-rfc2596-04.txt
Status of Memo
@ -23,9 +23,8 @@ Status of Memo
revision, submitted to the RFC Editor as a Standard Track document.
Distribution of this memo is unlimited. Technical discussion of this
document will take place on the IETF LDAP Extensions Working Group
(LDAPext) mailing list <ietf-ldapext@netscape.com>. Please send
editorial comments directly to the document editor
<Kurt@OpenLDAP.org>.
(LDAPext) mailing list <ldapext@ietf.org>. Please send editorial
comments directly to the document editor <Kurt@OpenLDAP.org>.
Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups. Note that other
@ -55,9 +54,10 @@ Abstract
Zeilenga Language Tags and Ranges in LDAP [Page 1]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
Conventions
@ -69,7 +69,7 @@ Conventions
1. Background and Intended Use
The Lightweight Directory Access Protocol (LDAP) [Roadmap] provides a
The Lightweight Directory Access Protocol (LDAP) [RFC3377] provides a
means for clients to interrogate and modify information stored in a
distributed directory system. The information in the directory is
maintained as attributes of entries. Most of these attributes have
@ -79,8 +79,8 @@ Conventions
This document describes how language tags and ranges [RFC3066] are
carried in LDAP and are to be interpreted by LDAP implementations.
All implementations MUST be prepared to accept language tags and
ranges in the LDAP protocol.
All LDAP implementations MUST be prepared to accept language tags and
ranges.
This document replaces RFC 2596. Appendix A summaries changes made
since RFC 2596.
@ -88,8 +88,7 @@ Conventions
Appendix B discusses differences from X.500(1997) "contexts"
mechanism.
Appendix A and B are provided for information purposes and are not a
normative part of this specification.
Appendix A and B are provided for informational purposes only.
The remainder of this section provides a summary of Language Tags,
Language Ranges, and Attribute Descriptions.
@ -98,89 +97,81 @@ Conventions
1.1. Language Tags
Section 2 of BCP 47 [RFC3066] describes the language tag format which
is used in LDAP. Briefly, it is a string of ASCII alphabetic
characters and hyphens. Examples include "fr", "en-US" and "ja-JP".
Language tags are case insensitive. For example, the language tag
"en-us" is the same as "EN-US".
is used in LDAP. Briefly, it is a string of ASCII letters and
hyphens. Examples include "fr", "en-US" and "ja-JP". Language tags
are case insensitive. That is, the language tag "en-us" is the same
as "EN-US".
Section 2 of this document details use of language tags in LDAP.
1.2. Language Ranges
Section 2.5 of BCP 47 [RFC3066] describes the language ranges.
Zeilenga Language Tags and Ranges in LDAP [Page 2]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
Section 2.5 of BCP 47 [RFC3066] describes the language ranges.
Language ranges are used to specify sets of language tags.
A language range matches a language tag if it exactly equals the tag,
or if it exactly equals a prefix of the tag such that the first
character following the prefix is "-". The special tag "*" matches
all tags.
A language range matches a language tag if it is exactly equal to the
tag, or if it is exactly equal to a prefix of the tag such that the
first character following the prefix is "-". That is, the language
range "de" matches the language tags "de" and "de-CH" but not "den".
The special language range "*" matches all language tags.
Due to restrictions upon option naming in LDAP, this document uses a
different language range syntax. However, the semantics of language
ranges in LDAP is consistent with BCP 47.
Due to attribute description option naming restrictions in LDAP, this
document defines a different language range syntax. However, the
semantics of language ranges in LDAP is consistent with BCP 47.
Section 3 of this document details use of language ranges in LDAP.
1.3. Attribute Descriptions
This section provides an overview of attributes in LDAP. LDAP
attributes are defined in [Models].
This section provides an overview of attribute descriptions in LDAP.
LDAP attributes and attribute descriptions are defined in [RFC2251].
An attribute consists of a type, a set of zero or more associated
tagging options, and a set of one or more values. The type and the
options are combined into the AttributeDescription.
AttributeDescriptions can also contain options which are not part of
the attribute, but indicate some other function such as the transfer
encoding.
the attribute, but indicate some other function (such as range
assertion or transfer encoding).
An attribute with one or more tagging options is a direct subtype of
each attribute of the same with all but one of the tagging options.
If the attribute's type is a direct subtype of some other type, then
the attribute is also a direct subtype of the attribute whose
description consists of the the supertype and all of the tagging
options. That is, CN;x-bar;x-foo is a direct subtype of CN;x-bar,
CN;x-foo, and name;x-bar;x-foo. Note that CN is a subtype of name.
If the attribute description contains an unrecognized option, the
attribute description is treated as an unrecognized attribute type.
As language tags are intended to stored with the attribute, they are
to treated as tagging options as described in Section 2. Language
range are used only to match against language ranges and are not
stored with the attribute. They are not treated tagging options (nor
as transfer options), but as described in Section 3.
An AttributeDescription with one or more tagging options is a direct
subtype of each AttributeDescription of the same type with all but one
of the tagging options. If the AttributeDescription's type is a
direct subtype of some other type, then the AttributeDescription is
also a direct subtype of the AttributeDescription which consists of
the supertype and all of the tagging options. That is,
"CN;x-bar;x-foo" is a direct subtype of "CN;x-bar", "CN;x-foo", and
"name;x-bar;x-foo". Note that "CN" is a subtype of "name".
2. Use of Language Tags in LDAP
This section describes how LDAP implementations MUST interpret
Zeilenga Language Tags and Ranges in LDAP [Page 3]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
language tags in performing operations.
Servers which support storing attributes with language tag options in
the Directory Information Tree (DIT) SHOULD allow any attribute type
it recognizes that has the Directory String, IA5 String, or other
textual string syntax to have language tag options associated with it.
Servers MAY allow language options to be associated with other
textual string syntaxes to have language tag options associated with
it. Servers MAY allow language options to be associated with other
attributes types.
Zeilenga Language Tags and Ranges in LDAP [Page 3]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
Clients SHOULD NOT assume servers are capable of storing attributes
with language tags in the directory.
@ -194,8 +185,8 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
2.1. Language Tag Options
A language tag option associates a natural language with values of an
attribute. An attribute description MAY contain multiple language tag
options. An entry MAY contain multiple attributes with same attribute
attribute. An attribute description may contain multiple language tag
options. An entry may contain multiple attributes with same attribute
type but different combinations of language tag (and other) options.
A language tag option conforms to the following ABNF [RFC2234]:
@ -216,17 +207,9 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
DIGIT = %x30-39 ; 0-9
A language tag option is a tagging option [Models]. A language tag
option has no effect on the syntax of the attribute's values nor their
transfer encoding.
Zeilenga Language Tags and Ranges in LDAP [Page 4]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
A language tag option is a tagging option. A language tag option has
no effect on the syntax of the attribute's values nor their transfer
encoding.
Examples of valid AttributeDescription:
@ -237,6 +220,14 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
description;x-foobar
CN
Zeilenga Language Tags and Ranges in LDAP [Page 4]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
Notes: The last two have no language tag options. The x-foobar option
is fictious and used for example purposes.
@ -249,13 +240,13 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
type or its subtypes and contains each of the presented (and possibly
other) options is to be matched.
Thus for example a filter of an equality match of type
Thus, for example, a filter of an equality match of type
"name;lang-en-US" and assertion value "Billy Ray", against the
following directory entry
following directory entry:
dn: SN=Ray,DC=example,DC=com
objectclass: top DOES NOT MATCH (wrong type)
objectclass: person DOES NOT MATCH (wrong type)
objectclass: extensibleObject DOES NOT MATCH (wrong type)
name;lang-en-US: Billy Ray MATCHES
name;lang-en-US: Billy Bob DOES NOT MATCH (wrong value)
CN;lang-en-US: Billy Ray MATCHES
@ -267,7 +258,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
SN: Ray DOES NOT MATCH (no lang-,
wrong value)
(Note that "CN" and "SN" are subtypes of "name".)
Note that "CN" and "SN" are subtypes of "name".
It is noted that providing a language tag option in a search filter
AttributeDescription will filter out desirable values where the tag
@ -276,14 +267,6 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
If the server does not support storing attributes with language tag
options in the DIT, then any assertion which includes a language tag
Zeilenga Language Tags and Ranges in LDAP [Page 5]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
option will not match as such it is an unrecognized attribute type.
No error would be returned because of this; a presence assertion would
evaluate to FALSE and all other assertions to Undefined.
@ -292,12 +275,20 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
attribute type and the assertion value need match the value in the
directory.
Thus for example a filter of an equality match of type "name" and
assertion value "Billy Ray", against the following directory entry
Thus, for example, a filter of an equality match of type "name" and
dn: SN=Ray,DC=example,DC=net
objectclass: top DOES NOT MATCH (wrong type)
Zeilenga Language Tags and Ranges in LDAP [Page 5]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
assertion value "Billy Ray", against the following directory entry:
dn: SN=Ray,DC=example,DC=com
objectclass: person DOES NOT MATCH (wrong type)
objectclass: extensibleObject DOES NOT MATCH (wrong type)
name;lang-en-US: Billy Ray MATCHES
name;lang-en-US: Billy Bob DOES NOT MATCH (wrong value)
CN;lang-en-US;x-foobar: Billy Ray MATCHES
@ -310,19 +301,20 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
2.3. Requested Attributes in Search
Clients can provide language tag options in AttributeDescription in
the requested attribute list in a search request.
Clients can provide language tag options in each AttributeDescription
in the requested attribute list in a search request.
If language tag options are provided in an attribute description, then
only attributes in a directory entry whose attribute descriptions have
the same attribute type or its subtype and the provided language tags
options are to be returned. Thus if a client requests just the
attribute "name;lang-en", the server would return "name;lang-en" and
the same attribute type or its subtype and contains each of the
presented (and possibly other) language tag options are to be
returned. Thus if a client requests just the attribute
"name;lang-en", the server would return "name;lang-en" and
"CN;lang-en;lang-ja" but not "SN" nor "name;lang-fr".
Clients can provide in the attribute list multiple
AttributeDescription which have the same base attribute type but
different options. For example a client could provide both
AttributeDescriptions which have the same base attribute type but
different options. For example, a client could provide both
"name;lang-en" and "name;lang-fr", and this would permit an attribute
with either language tag option to be returned. Note there would be
no need to provide both "name" and "name;lang-en" since all subtypes
@ -333,13 +325,6 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
include language tag options are to be ignored, just as if they were
unknown attribute types.
Zeilenga Language Tags and Ranges in LDAP [Page 6]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
If a request is made specifying all attributes or an attribute is
requested without providing a language tag option, then all attribute
values regardless of their language tag option are returned.
@ -347,18 +332,24 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
For example, if the client requests a "description" attribute, and a
matching entry contains the following attributes:
Zeilenga Language Tags and Ranges in LDAP [Page 6]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
objectclass: top
objectclass: organization
O: Software GmbH
description: software
description: software products
description;lang-en: software products
description;lang-de: Softwareprodukte
postalAddress: Berlin 8001 Germany
postalAddress;lang-de: Berlin 8001 Deutschland
The server would return:
description: software
description: software products
description;lang-en: software products
description;lang-de: Softwareprodukte
@ -369,11 +360,12 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
a compare request AttributeValueAssertion. This is to be treated by
servers the same as the use of language tag options in a search filter
with an equality match, as described in Section 2.2. If there is no
attribute in the entry with the same subtype and language tag options,
the noSuchAttributeType error will be returned.
attribute in the entry with the same attribute type or its subtype and
and contains each of the presented (or possibly other) language tag
options, the noSuchAttributeType error will be returned.
Thus for example a compare request of type "name" and assertion value
"Johann", against an entry containing the following attributes:
Thus, for example, a compare request of type "name" and assertion
value "Johann", against an entry containing the following attributes:
objectclass: top
objectclass: person
@ -388,14 +380,6 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
would fail with the noSuchAttributeType error.
If the server does not support storing attributes with language tag
Zeilenga Language Tags and Ranges in LDAP [Page 7]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
options in the DIT, then any comparison which includes a language tag
option will always fail to locate an attribute, and
noSuchAttributeType will be returned.
@ -404,25 +388,30 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
2.5. Add Operation
Clients can provide language options in AttributeDescription in
Zeilenga Language Tags and Ranges in LDAP [Page 7]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
attributes of a new entry to be created.
A client can provide multiple attributes with the same attribute type
and value, so long as each attribute has a different set of language
tag options.
For example, the following is a legal request.
For example, the following is a valid request:
dn: CN=John Smith,DC=example,DC=com
objectclass: top
objectclass: person
objectclass: residentialPerson
name: John Smith
CN: John Smith
CN;lang-en: John Smith
SN: Smith
SN;lang-en;lang-en-US: Smith
SN;lang-en: Smith
streetAddress: 1 University Street
streetAddress;lang-en: 1 University Street
streetAddress;lang-en-US: 1 University Street
streetAddress;lang-fr: 1 rue Universite
houseIdentifier;lang-fr: 9e etage
@ -444,14 +433,6 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
"delete", then if the stored values to be deleted have language tag
options, then those language tag options MUST be provided in the
modify operation, and if the stored values to be deleted do not have
Zeilenga Language Tags and Ranges in LDAP [Page 8]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
any language tag option, then no language tag option is to be
provided.
@ -463,6 +444,14 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
3. Use of Language Ranges in LDAP
Zeilenga Language Tags and Ranges in LDAP [Page 8]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
Since the publication of RFC 2596, it has become apparent that there
is a need to provide a mechanism for a client to request attributes
based upon set of language tag options whose tags all begin with the
@ -479,20 +468,10 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
language-range-option = "lang-" [ Language-Tag "-" ]
where the Language-Tag production is as defined in BCP 47 [RFC3066].
This production and those it imports from [RFC2234] are provided here
for convenience:
This production and those it imports from [RFC2234] are provided in
Section 2.1 for convenience.
Language-Tag = Primary-subtag *( "-" Subtag )
Primary-subtag = 1*8ALPHA
Subtag = 1*8(ALPHA / DIGIT)
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39 ; 0-9
A language range option matches a language tag option if language
A language range option matches a language tag option if the language
range option less the trailing "-" matches exactly the language tag or
if the language range option (including the trailing "-") matches a
prefix of the language tag option. Note that the language range
@ -501,15 +480,9 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
Examples of valid AttributeDescription containing language range
options:
Zeilenga Language Tags and Ranges in LDAP [Page 9]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
givenName;lang-en-
CN;lang-
SN;lang-de-;lang-gem-
O;lang-x-;x-foobar
A language range option is not a tagging option. Attributes cannot be
@ -521,23 +494,32 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
the syntax of the attribute values.
Servers SHOULD support assertion of language ranges for any attribute
which they allow to stored with language tags.
type which they allow to be stored with language tags.
3.1. Search Filter
If a language range option is present in an AttributeDescription in an
Zeilenga Language Tags and Ranges in LDAP [Page 9]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
assertion, then for each entry within scope, the values of each
attribute whose AttributeDescription consists of the same attribute
type or its subtypes and contains a language tag option matching the
language range option are to be returned.
Thus for example a filter of an equality match of type "name;lang-en-"
and assertion value "Billy Ray", against the following directory entry
Thus, for example, a filter of an equality match of type
"name;lang-en-" and assertion value "Billy Ray", against the following
directory entry:
dn: SN=Ray,DC=example,DC=com
objectclass: top DOES NOT MATCH (wrong type)
objectclass: person DOES NOT MATCH (wrong type)
objectclass: extensibleObject DOES NOT MATCH (wrong type)
name;lang-en-US: Billy Ray MATCHES
name;lang-en-US: Billy Bob DOES NOT MATCH (wrong value)
CN;lang-en-US: Billy Ray MATCHES
@ -549,7 +531,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
SN: Ray DOES NOT MATCH (no lang-,
wrong value)
(Note that "CN" and "SN" are subtypes of "name".)
Note that "CN" and "SN" are subtypes of "name".
If the server does not support storing attributes with language tag
options in the DIT, then any assertion which includes a language range
@ -558,16 +540,11 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
evaluate to FALSE and all other assertions to Undefined.
Zeilenga Language Tags and Ranges in LDAP [Page 10]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
3.2. Requested Attributes in Search
Clients can provide language range options in AttributeDescription in
the requested attribute list in a search request.
Clients can provide language range options in each
AttributeDescription in the requested attribute list in a search
request.
If a language range option is provided in an attribute description,
then only attributes in a directory entry whose attribute descriptions
@ -578,7 +555,15 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
nor "name;lang-fr".
Clients can provide in the attribute list multiple
AttributeDescription which have the same base attribute type but
AttributeDescriptions which have the same base attribute type but
Zeilenga Language Tags and Ranges in LDAP [Page 10]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
different options. For example a client could provide both
"name;lang-en-" and "name;lang-fr-", and this would permit an
attribute whose type was name or subtype of name and with a language
@ -599,8 +584,9 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
is no attribute in the entry with the same subtype and a matching
language tag option, the noSuchAttributeType error will be returned.
Thus for example a compare request of type "name;lang-" and assertion
value "Johann", against the entry with the following attributes:
Thus, for example, a compare request of type "name;lang-" and
assertion value "Johann", against the entry with the following
attributes:
objectclass: top
objectclass: person
@ -612,14 +598,6 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
range option "lang-" matches any language tag option.)
However, if the client issued a compare request of type "name;lang-de"
Zeilenga Language Tags and Ranges in LDAP [Page 11]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
and assertion value "Sibelius" against the above entry, the request
would fail with the noSuchAttributeType error.
@ -632,13 +610,22 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
4. Discovering Language Option Support
A server SHOULD indicate that it supports storing attributes with
language tag options in the DIT by publishing OID.TDB as a value of
the supportedFeatures [FEATURES] attribute in the root DSE.
language tag options in the DIT by publishing 1.3.6.1.4.1.4203.1.5.4
as a value of the "supportedFeatures" [FEATURES] attribute in the root
Zeilenga Language Tags and Ranges in LDAP [Page 11]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
DSE.
A server SHOULD indicate that it supports language range matching of
attributes with language tag options stored in the DIT by publishing
OID.TDB as a value of the supportedFeatures [FEATURES] attribute in
the root DSE.
1.3.6.1.4.1.4203.1.5.5 as a value of the "supportedFeatures"
[FEATURES] attribute in the root DSE.
A server MAY restrict use of language tag options to a subset of the
attribute types it recognizes. This document does not define a
@ -653,51 +640,96 @@ INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
fulfill the user's language needed. These options are not known to
raise specific security considerations. However, the reader should
consider general directory security issues detailed in the LDAP
technical specification [Roadmap].
technical specification [RFC3377].
6. Acknowledgments
6. IANA Considerations
This document is a revision of RFC 2596 by Mark Wahl and Tim Howes.
RFC 2596 was a product of the IETF ASID and LDAPEXT working groups.
The OIDs 1.3.6.1.4.1.4203.1.5.4 and 1.3.6.1.4.1.4203.1.5.5 identify
the features described above. These OIDs were assigned [ASSIGN] by
OpenLDAP Foundation, under its IANA-assigned private enterprise
allocation [PRIVATE], for use in this specification.
This document borrows from a number of IETF documents including BCP
47.
Registration of these protocol mechanisms [RFC3383] is requested.
Subject: Request for LDAP Protocol Mechanism Registration
7. Normative References
Object Identifier: 1.3.6.1.4.1.4203.1.5.4
Description: Language Tag Options
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Object Identifier: 1.3.6.1.4.1.4203.1.5.5
Description: Language Range Options
Person & email address to contact for further information:
Kurt Zeilenga <kurt@openldap.org>
Usage: Feature
Specification: RFCxxxx
Author/Change Controller: IESG
Zeilenga Language Tags and Ranges in LDAP [Page 12]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
Comments: none
7. Acknowledgments
This document is a revision of RFC 2596 by Mark Wahl and Tim Howes.
RFC 2596 was a product of the IETF ASID and LDAPEXT working groups.
This document also borrows from a number of IETF documents including
BCP 47 by H. Alvestrand.
8. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2234] D. Crocker, P. Overell, "Augmented BNF for Syntax
[RFC2234] D. Crocker, P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
[RFC2251] M. Wahl, T. Howes, S. Kille, "Lightweight Directory Access
Protocol (v3)", RFC 2251, December 1997.
[RFC3066] Alvestrand, H., "Tags for the Identification of Languages",
BCP 47 (also RFC 3066), January 2001.
[Roadmap] K. Zeilenga (editor), "LDAP: Technical Specification Road
Map", draft-ietf-ldapbis-roadmap-xx.txt, a work in
progress.
[Models] K. Zeilenga (editor), "LDAP: Directory Information Models",
draft-ietf-ldapbis-models-xx.txt, a work in progress.
[RFC3377] J. Hodges, R. Morgan, "Lightweight Directory Access
Protocol (v3): Technical Specification", RFC 3377,
September 2002.
[FEATURES] K. Zeilenga, "Feature Discovery in LDAP",
draft-zeilenga-ldap-features-xx.txt (a work in progress).
8. Informative References
9. Informative References
[X.501] "The Directory: Models", ITU-T Recommendation X.501, 1997.
[X.501] ITU, "The Directory: Models", ITU-T Recommendation X.501,
1997.
[RFC3383] K. Zeilenga, "IANA Considerations for LDAP", BCP 64 (also
RFC 3383), September 2002.
[ASSIGN] OpenLDAP Foundation, "OpenLDAP OID Delegations",
http://www.openldap.org/foundation/oid-delegate.txt.
[PRIVATE] IANA, "Private Enterprise Numbers",
http://www.iana.org/assignments/enterprise-numbers.
Zeilenga Language Tags and Ranges in LDAP [Page 13]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
Appendix A. Differences from RFC 2596
@ -719,19 +751,13 @@ Appendix B. Differences from X.500(1997)
matches a value in the directory without a language code.
b) LDAP references BCP 47 [RFC3066], which allows for IANA
registration of new tags as well as unregistered tags.
c) LDAP supports language ranges.
c) LDAP supports language ranges (new in this revision).
d) LDAP does not allow language tags (and ranges) in distinguished
names.
e) X.500 describes subschema administration procedures to allow
language codes to be associated with particular attributes types.
Zeilenga Language Tags and Ranges in LDAP [Page 13]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-01.txt 1 March 2002
Copyright 2002, The Internet Society. All Rights Reserved.
This document and translations of it may be copied and furnished to
@ -754,6 +780,14 @@ Copyright 2002, The Internet Society. All Rights Reserved.
"AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
Zeilenga Language Tags and Ranges in LDAP [Page 14]
INTERNET-DRAFT draft-zeilenga-ldap-rfc2596-04.txt 9 December 2002
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
@ -783,5 +817,27 @@ Copyright 2002, The Internet Society. All Rights Reserved.
Zeilenga Language Tags and Ranges in LDAP [Page 14]
Zeilenga Language Tags and Ranges in LDAP [Page 15]

View file

@ -6,12 +6,12 @@
INTERNET-DRAFT Kurt D. Zeilenga
Intended Category: Standard Track OpenLDAP Foundation
Expires in six months 3 May 2003
Expires in six months 25 October 2003
LDAP Absolute True and False Filters
<draft-zeilenga-ldap-t-f-05.txt>
<draft-zeilenga-ldap-t-f-07.txt>
Status of this Memo
@ -22,9 +22,9 @@ Status of this Memo
This document is intended to be, after appropriate review and
revision, submitted to the RFC Editor as a Standard Track document.
Distribution of this memo is unlimited. Technical discussion of this
document will take place on the IETF LDAP Extensions Working Group
mailing list <ldapext@ietf.org>. Please send editorial comments
directly to the author <Kurt@OpenLDAP.org>.
document will take place on the IETF LDAP Extensions mailing list
<ldapext@ietf.org>. Please send editorial comments directly to the
author <Kurt@OpenLDAP.org>.
Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups. Note that other
@ -39,10 +39,10 @@ Status of this Memo
Internet-Draft Shadow Directories can be accessed at
<http://www.ietf.org/shadow.html>.
Copyright 2003, The Internet Society. All Rights Reserved.
Copyright (C) The Internet Society (2003). All Rights Reserved.
Please see the Copyright section near the end of this document for
more information.
Please see the Full Copyright section near the end of this document
for more information.
Abstract
@ -57,10 +57,10 @@ Abstract
Zeilenga LDAP True & False Filters [Page 1]
INTERNET-DRAFT draft-zeilenga-ldap-t-f-05.txt 3 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-t-f-07.txt 25 October 2003
1. Background and Intended Use
1. Background
The X.500 Directory Access Protocol (DAP) [X.511] supports absolute
True and False assertions. An 'and' filter with zero elements always
@ -69,17 +69,21 @@ INTERNET-DRAFT draft-zeilenga-ldap-t-f-05.txt 3 May 2003
specific Entries (DSEs) which do not necessarily have 'objectClass'
attributes. That is, where "(objectClass=*)" may evaluate to False.
While LDAPv2 [RFC1777] placed no restriction on the number of elements
in 'and' and 'or' filter sets, the LDAPv2 string representation
[RFC1960] could not represent empty 'and' and 'or' filter sets. Due
to this, absolute True or False filters were (unfortunately)
eliminated from LDAPv3 [RFC3377].
While LDAPv2 [RFC1777][RFC3494] placed no restriction on the number of
elements in 'and' and 'or' filter sets, the LDAPv2 string
representation [RFC1960] could not represent empty 'and' and 'or'
filter sets. Due to this, absolute True or False filters were
(unfortunately) eliminated from LDAPv3 [RFC3377].
This documents extends LDAPv3 to support absolute True and False
matches by allowing empty 'and' and 'or' in Search filters [RFC2251]
and extends the filter string representation [RFC2254] to allow empty
filter lists.
This feature is intended to allow a more direct mapping between DAP
and LDAP (as needed to implement DAP-to-LDAP gateways).
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 [RFC2119].
@ -97,25 +101,26 @@ INTERNET-DRAFT draft-zeilenga-ldap-t-f-05.txt 3 May 2003
False. This filter is represented by the string "(|)".
Servers supporting this feature SHOULD publish the Object Identifier
1.3.6.1.4.1.4203.1.5.3 as a value of the supportedFeatures [FEATURES]
attribute in the root DSE.
(OID) 1.3.6.1.4.1.4203.1.5.3 as a value of the 'supportedFeatures'
[FEATURES] attribute in the root DSE.
Clients supporting this feature SHOULD NOT use the feature unless they
have knowledge the server supports it.
Zeilenga LDAP True & False Filters [Page 2]
INTERNET-DRAFT draft-zeilenga-ldap-t-f-07.txt 25 October 2003
3. Security Considerations
The (re)introduction of absolute True and False filters is not
believed to raise any new security considerations.
Zeilenga LDAP True & False Filters [Page 2]
INTERNET-DRAFT draft-zeilenga-ldap-t-f-05.txt 3 May 2003
Implementors of this (or any) LDAPv3 extension should be familiar with
general LDAPv3 security considerations [RFC3377].
@ -135,7 +140,7 @@ INTERNET-DRAFT draft-zeilenga-ldap-t-f-05.txt 3 May 2003
Person & email address to contact for further information:
Kurt Zeilenga <kurt@openldap.org>
Usage: Feature
Specification: RFCxxxx
Specification: RFC XXXX
Author/Change Controller: IESG
Comments: none
@ -149,58 +154,102 @@ INTERNET-DRAFT draft-zeilenga-ldap-t-f-05.txt 3 May 2003
6. Normative References
[RFC2119] S. Bradner, "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
[RFC2251] M. Wahl, T. Howes, S. Kille, "Lightweight Directory Access
Protocol (v3)", RFC 2251, December 1997.
[RFC2251] Wahl, M., T. Howes and S. Kille, "Lightweight Directory
Access Protocol (v3)", RFC 2251, December 1997.
[RFC2254] T. Howes, "A String Representation of LDAP Search Filters",
RFC 2254, December 1997.
[RFC2254] Howes, T., "A String Representation of LDAP Search
Filters", RFC 2254, December 1997.
[RFC3377] J. Hodges, R. Morgan, "Lightweight Directory Access
Protocol (v3): Technical Specification", RFC 3377,
September 2002.
[FEATURES] K. Zeilenga, "Feature Discovery in LDAP",
draft-zeilenga-ldap-features-xx.txt (a work in progress).
[RFC3377] Hodges, J. and R. Morgan, "Lightweight Directory Access
Zeilenga LDAP True & False Filters [Page 3]
INTERNET-DRAFT draft-zeilenga-ldap-t-f-05.txt 3 May 2003
INTERNET-DRAFT draft-zeilenga-ldap-t-f-07.txt 25 October 2003
Protocol (v3): Technical Specification", RFC 3377,
September 2002.
[FEATURES] Zeilenga, K., "Feature Discovery in LDAP",
draft-zeilenga-ldap-features-xx.txt, a work in progress.
7. Informative References
[RFC1777] Yeong, W., Howes, T., and S. Kille, "Lightweight Directory
Access Protocol", RFC 1777, March 1995.
[RFC1777] Yeong, W., Howes, T., and S. Kille, "Lightweight
Directory Access Protocol", RFC 1777, March 1995.
[RFC1960] T. Howes, "A String Representation of LDAP Search Filters",
RFC 1960, June 1996.
[RFC1960] Howes, T., "A String Representation of LDAP Search
Filters", RFC 1960, June 1996.
[RFC3383] K. Zeilenga, "IANA Considerations for LDAP", BCP 64 (also
RFC 3383), September 2002.
[RFC3383] Zeilenga, K., "IANA Considerations for LDAP", BCP 64
(also RFC 3383), September 2002.
[X.500] ITU-T Rec. X.500, "The Directory: Overview of Concepts,
Models and Service", 1993.
[RFC3494] Zeilenga, K., "Lightweight Directory Access Protocol
version 2 (LDAPv2) to Historic Status", RFC 3494, March
2003.
[X.511] ITU-T Rec. X.511, "The Directory: Abstract Service
Definition", 1993.
[X.500] International Telecommunication Union -
Telecommunication Standardization Sector, "The Directory
-- Overview of concepts, models and services,"
X.500(1993) (also ISO/IEC 9594-1:1994).
[ASSIGN] OpenLDAP Foundation, "OpenLDAP OID Delegations",
http://www.openldap.org/foundation/oid-delegate.txt.
[X.501] International Telecommunication Union -
Telecommunication Standardization Sector, "The Directory
-- Models," X.501(1993) (also ISO/IEC 9594-2:1994).
[PRIVATE] IANA, "Private Enterprise Numbers",
http://www.iana.org/assignments/enterprise-numbers.
[ASSIGN] OpenLDAP Foundation, "OpenLDAP OID Delegations",
http://www.openldap.org/foundation/oid-delegate.txt.
[PRIVATE] IANA, "Private Enterprise Numbers",
http://www.iana.org/assignments/enterprise-numbers.
Copyright 2003, The Internet Society. All Rights Reserved.
Intellectual Property Rights
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to pertain
to the implementation or use of the technology described in this
document or the extent to which any license under such rights might or
might not be available; neither does it represent that it has made any
effort to identify any such rights. Information on the IETF's
procedures with respect to rights in standards-track and
Zeilenga LDAP True & False Filters [Page 4]
INTERNET-DRAFT draft-zeilenga-ldap-t-f-07.txt 25 October 2003
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances of
licenses to be made available, or the result of an attempt made to
obtain a general license or permission for the use of such proprietary
rights by implementors or users of this specification can be obtained
from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights which may cover technology that may be required to practice
this standard. Please address the information to the IETF Executive
Director.
Full Copyright
Copyright (C) The Internet Society (2003). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published and
or assist in its implmentation may be prepared, copied, published and
distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
@ -211,17 +260,24 @@ Copyright 2003, The Internet Society. All Rights Reserved.
copyrights defined in the Internet Standards process must be followed,
or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Zeilenga LDAP True & False Filters [Page 4]
Zeilenga LDAP True & False Filters [Page 5]

File diff suppressed because it is too large Load diff

View file

@ -6,11 +6,11 @@
INTERNET-DRAFT Kurt D. Zeilenga
Intended Category: Standard Track OpenLDAP Foundation
Expires in six months 11 May 2003
Expires in six months 25 October 2003
The LDAP entryUUID operational attribute
<draft-zeilenga-ldap-uuid-00.txt>
<draft-zeilenga-ldap-uuid-02.txt>
Status of this Memo
@ -21,9 +21,9 @@ Status of this Memo
This document is intended to be, after appropriate review and
revision, submitted to the RFC Editor as an Standard Track document.
Distribution of this memo is unlimited. Technical discussion of this
document will take place on the IETF LDAP Extension Working Group
mailing list <ldapext@ietf.org>. Please send editorial comments
directly to the author <Kurt@OpenLDAP.org>.
document will take place on the IETF LDAP Extensions mailing list
<ldapext@ietf.org>. Please send editorial comments directly to the
author <Kurt@OpenLDAP.org>.
Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups. Note that other
@ -55,9 +55,9 @@ Abstract
Zeilenga draft-zeilenga-ldap-uuid-00 [Page 1]
Zeilenga draft-zeilenga-ldap-uuid-02 [Page 1]
INTERNET-DRAFT LDAP entryUUID 11 May 2003
INTERNET-DRAFT LDAP entryUUID 25 October 2003
1. Background and Intended Use
@ -69,11 +69,11 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
DN which previously identified another (now renamed or deleted)
object.
This document describes the 'entryUUID' operational attribute holds
the Universally Unique Identifier (UUID) [ISO11578] assigned to the
object by the server. Clients may use this attribute to distinguish
objects identified by a distinguished name or to locate an object
after renaming.
This document describes the 'entryUUID' operational attribute which
holds the Universally Unique Identifier (UUID) [ISO11578] assigned to
the object by the server. Clients may use this attribute to
distinguish objects identified by a distinguished name or to locate an
object after renaming.
This document defines the UUID syntax, the 'uuidMatch' and
'uuidOrderingMatch' matching rules, the 'entryUUID' attribute type.
@ -91,32 +91,42 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
2.1 UUID Syntax
A Universally Unique Identifier (UUID) [ISO11578] is a 16-octet value
which identifies object. The ASN.1 [X.690] type UUID is defined to
represent UUIDs.
A Universally Unique Identifier (UUID) [ISO11578] is a 16-octet
(128-bit) value which identifies an object. The ASN.1 [X.690] type
UUID is defined to represent UUIDs.
UUID ::= OCTET STRING{16} -- constrained to an UUID [ISO 11578]
UUID ::= OCTET STRING (SIZE(16))
-- constrained to an UUID [ISO 11578]
In LDAP, values of the UUID are encoded using the string
representation described in [ISO11578]. For example,
597ae2f6-16a6-1027-98f4-d28b5365dc14.
In LDAP, values of the UUID type are encoded using the [ASCII]
character string representation described in [ISO11578]. For example,
"597ae2f6-16a6-1027-98f4-d28b5365dc14".
The following is a LDAP syntax description [RFC2252] suitable for
publication in the subschema.
( IANA-ASSIGNED-OID.1 DESC 'UUID' )
Zeilenga draft-zeilenga-ldap-uuid-02 [Page 2]
INTERNET-DRAFT LDAP entryUUID 25 October 2003
2.2 'uuidMatch' Matching Rule
The 'uuidMatch' matching rule compares an asserted UUID with a stored
UUID for equality. Its semantics are same as octetStringMatch
UUID for equality. Its semantics are same as the octetStringMatch
[X.520][RFC2252] matching rule. The rule differs from
octetStringMatch in that the assertion value is encoded using the UUID
string representation instead of the normal OCTET STRING string
representation.
Zeilenga draft-zeilenga-ldap-uuid-00 [Page 2]
INTERNET-DRAFT LDAP entryUUID 11 May 2003
[X.520][RFC2252].
The following is a LDAP matching rule description [RFC2252] suitable
for publication in the subschema.
( IANA-ASSIGNED-OID.2 NAME 'uuidMatch'
SYNTAX IANA-ASSIGNED-OID.1 )
@ -125,22 +135,43 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
2.3 'uuidOrderingMatch' Matching Rule
The 'uuidOrderingMatch' matching rule compares an asserted UUID
with a stored UUID for ordering. Its semantics are the same as
octetStringOrderingMatch [X.520][RFC2252].
with a stored UUID for ordering. Its semantics are the same as the
octetStringOrderingMatch [X.520][RFC2252] matching rule. The rule
differs from octetStringOrderingMatch in that the assertion value
is encoded using the UUID string representation instead of the
normal OCTET STRING string representation.
The following is a LDAP matching rule description [RFC2252] suitable
for publication in the subschema.
( IANA-ASSIGNED-OID.3 NAME 'uuidMatch'
SYNTAX IANA-ASSIGNED-OID.1 )
It is noted that not all UUID variants have a defined ordering and,
even where so, servers are not obligated to assign UUIDs in any
particular order. This matching rule is provided for completeness.
2.4. 'entryUUID' attribute
The 'entryUUID' operational attribute provides the Universally Unique
Identifier (UUID) [ISO11578] assigned to the entry.
The following is a LDAP attribute type description [RFC2252] suitable
for publication in the subschema.
( IANA-ASSIGNED-OID.4 NAME 'entryUUID'
DESC 'UUID of the entry'
EQUALITY uuidMatch
ORDERING uuidOrderingMatch
Zeilenga draft-zeilenga-ldap-uuid-02 [Page 3]
INTERNET-DRAFT LDAP entryUUID 25 October 2003
SYNTAX IANA-ASSIGNED-OID.1
SINGLE-VALUE
NO-USER-MODIFICATION
@ -164,14 +195,6 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
4.1. Object Identifier Registration
It is requested that IANA register upon Standards Action an LDAP
Zeilenga draft-zeilenga-ldap-uuid-00 [Page 3]
INTERNET-DRAFT LDAP entryUUID 11 May 2003
Object Identifier for use in this technical specification.
Subject: Request for LDAP OID Registration
@ -198,6 +221,13 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
Author/Change Controller: IESG
Zeilenga draft-zeilenga-ldap-uuid-02 [Page 4]
INTERNET-DRAFT LDAP entryUUID 25 October 2003
4.3. Registration of the uuidOrderingMatch descriptor
It is requested that IANA register upon Standards Action the LDAP
@ -220,14 +250,6 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
Subject: Request for LDAP Descriptor Registration
Descriptor (short name): entryUUID
Zeilenga draft-zeilenga-ldap-uuid-00 [Page 4]
INTERNET-DRAFT LDAP entryUUID 11 May 2003
Object Identifier: IANA-ASSIGNED-OID.4
Person & email address to contact for further information:
Kurt Zeilenga <kurt@OpenLDAP.org>
@ -239,7 +261,8 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
5. Acknowledgments
This document is based upon discussions in the LDAP Update and
Duplication Protocols (LDUP) WG.
Duplication Protocols (LDUP) WG. Members of the concluded LDAP
Extensions (LDAPEXT) Working Group provided review.
6. Author's Address
@ -254,6 +277,13 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14 (also RFC 2119), March 1997.
Zeilenga draft-zeilenga-ldap-uuid-02 [Page 5]
INTERNET-DRAFT LDAP entryUUID 25 October 2003
[RFC2252] Wahl, M., A. Coulbeck, T. Howes, and S. Kille,
"Lightweight Directory Access Protocol (v3): Attribute
Syntax Definitions", RFC 2252, December 1997.
@ -266,6 +296,9 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
"Information technology - Open Systems Interconnection -
Remote Procedure Call", ISO/IEC 11578:1996.
[ASCII] Coded Character Set--7-bit American Standard Code for
Information Interchange, ANSI X3.4-1986.
[X.501] International Telecommunication Union -
Telecommunication Standardization Sector, "The Directory
-- Models," X.501(1993) (also ISO/IEC 9594-2:1994).
@ -276,14 +309,6 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
ISO/IEC 9594-6:1994).
[X.680] International Telecommunication Union -
Zeilenga draft-zeilenga-ldap-uuid-00 [Page 5]
INTERNET-DRAFT LDAP entryUUID 11 May 2003
Telecommunication Standardization Sector, "Abstract
Syntax Notation One (ASN.1) - Specification of Basic
Notation", X.680(1997) (also ISO/IEC 8824-1:1998).
@ -294,16 +319,27 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
[RFC3383] Zeilenga, K., "IANA Considerations for LDAP", BCP 64
(also RFC 3383), September 2002.
[UUIDinfo] The Open Group, "Universally Unique Identifier" section
of "CDE 1.1: Remote Procedure Calls",
<http://www.opengroup.org/onlinepubs/9629399/apdxa.htm>,
April 1997.
[UUIDinfo] The Open Group, "Universally Unique Identifier" appendix
of the CAE Specification "DCE 1.1: Remote Procedure
Calls", Document Number C706,
<http://www.opengroup.org/products/publications/catalog/c706.htm>
(appendix available at:
<http://www.opengroup.org/onlinepubs/9629399/apdxa.htm>),
August 1997.
Intellectual Property Rights
The IETF takes no position regarding the validity or scope of any
Zeilenga draft-zeilenga-ldap-uuid-02 [Page 6]
INTERNET-DRAFT LDAP entryUUID 25 October 2003
intellectual property or other rights that might be claimed to pertain
to the implementation or use of the technology described in this
document or the extent to which any license under such rights might or
@ -332,14 +368,6 @@ Full Copyright
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implmentation may be prepared, copied, published and
Zeilenga draft-zeilenga-ldap-uuid-00 [Page 6]
INTERNET-DRAFT LDAP entryUUID 11 May 2003
distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
@ -363,33 +391,5 @@ INTERNET-DRAFT LDAP entryUUID 11 May 2003
Zeilenga draft-zeilenga-ldap-uuid-00 [Page 7]
Zeilenga draft-zeilenga-ldap-uuid-02 [Page 7]

File diff suppressed because it is too large Load diff

View file

@ -53,7 +53,9 @@ directives of the first backend (and any global directives) are
used.
.LP
Arguments that should be replaced by actual text are shown in
brackets <>. The structure of the access control directives is
brackets <>.
.SH THE ACCESS DIRECTIVE
The structure of the access control directives is
.TP
.B access to <what> "[ by <who> <access> [ <control> ] ]+"
Grant access (specified by
@ -62,7 +64,7 @@ to a set of entries and/or attributes (specified by
.BR <what> )
by one or more requestors (specified by
.BR <who> ).
.LP
.SH THE <WHAT> FIELD
The field
.BR <what>
specifies the entity the access control directive applies to.
@ -140,7 +142,7 @@ the provided value is used as a regular expression pattern.
The dn, filter, and attrs statements are additive; they can be used in sequence
to select entities the access rule applies to based on naming context,
value and attribute type simultaneously.
.LP
.SH THE <WHO> FIELD
The field
.B <who>
indicates whom the access rules apply to.
@ -344,7 +346,7 @@ The statements
and
.BR sasl_ssf=<n>
set the required Security Strength Factor (ssf) required to grant access.
.LP
.SH THE <ACCESS> FIELD
The field
.B <access> ::= [self]{<level>|<priv>}
determines the access level or the specific access privileges the
@ -470,6 +472,100 @@ or the (even more silly) example
.LP
which grants everybody search and compare privileges, and adds read
privileges to authenticated clients.
.SH OPERATION REQUIREMENTS
Operations require different privileges on different portions of entries.
The following summary applies to primary database backends such as
the LDBM, BDB, and HDB backends. Requirements for other backends may
(and often do) differ.
.LP
The
.B add
operation requires
.B write (=w)
privileges on the pseudo-attribute
.B entry
of the entry being added, and
.B write (=w)
privileges on the pseudo-attribute
.B children
of the entry's parent.
.LP
The
.B bind
operation, when credentials are stored in the directory, requires
.B auth (=x)
privileges on the attribute the credentials are stored in (usually
.BR userPassword ).
.LP
The
.B compare
operation requires
.B compare (=c)
privileges on the attribute that is being compared.
.LP
The
.B delete
operation requires
.B write (=w)
privileges on the pseudo-attribute
.B entry
of the entry being deleted, and
.B write (=w)
privileges on the
.B children
pseudo-attribute of the entry's parent.
.LP
The
.B modify
operation requires
.B write (=w)
privileges on the attibutes being modified.
.LP
The
.B modrdn
operation requires
.B write (=w)
privileges on the pseudo-attribute
.B entry
of the entry whose relative DN is being modified,
.B write (=w)
privileges on the pseudo-attribute
.B children
of the old and new entry's parents, and
.B write (=w)
privileges on the attributes that are present in the new relative DN.
.B Write (=w)
privileges are also required on the attributes that are present
in the old relative DN if
.B deleteoldrdn
is set to 1.
.LP
The
.B search
operation, for each entry, requires
.B search (=s)
privileges on the attributes that are defined in the filter.
Then, the resulting entries are tested for
.B read (=r)
privileges on the pseudo-attribute
.B entry
(for read access to the entry itself)
and for
.B read (=r)
access on each value of each attribute that is requested.
Also, for each
.B referral
object used in generating continuation references, the operation requires
.B read (=r)
access on the pseudo-attribute
.B entry
(for read access to the referral object itself),
as well as
.B read (=r)
access to the attribute holding the referral information
(generally the
.B ref
attribute).
.SH CAVEATS
It is strongly recommended to explicitly use the most appropriate
DN

View file

@ -120,8 +120,8 @@ a trailing `-') matches all options starting with that name, as well
as the option with the range name sans the trailing `-'.
That is, `x-foo-bar-' matches `x-foo-bar' and `x-foo-bar-baz'.
RFC2251 reserves options beginning with `x-' for private experiments.
Other options should be registered with IANA, see RFC3383 section 3.4.
RFC 2251 reserves options beginning with `x-' for private experiments.
Other options should be registered with IANA, see RFC 3383 section 3.4.
OpenLDAP also has the `binary' option built in, but this is a transfer
option, not a tagging option.
.HP
@ -514,7 +514,7 @@ value "oid.xx" will be used.
.B password-hash <hash>
This option sets the hash to be used in generation of user
passwords, stored in userPassword, during processing of
LDAP Password Modify Extended Operations (RFC 3052).
LDAP Password Modify Extended Operations (RFC 3062).
The <hash> must be one of
.BR {SSHA} ,
.BR {SHA} ,
@ -1208,6 +1208,10 @@ The
parameter specifies the DN in the consumer site
which is allowed to make changes to the replica.
The DN should have read/write access to the replica database.
Generally, this DN
.I should not
be the same as the
.BR rootdn .
A
.B bindmethod
of
@ -1247,7 +1251,10 @@ This option is only applicable in a slave
It specifies the DN permitted to update (subject to access controls)
the replica (typically, this is the DN
.BR slurpd (8)
binds to update the replica).
binds to update the replica). Generally, this DN
.I should not
be the same as the
.BR rootdn .
.TP
.B updateref <url>
Specify the referral to pass back when

View file

@ -582,16 +582,16 @@ LBER_F( struct berval * )
ber_bvdup LDAP_P((
struct berval *src ));
LBER_F( struct berval * )
ber_str2bv LDAP_P((
LDAP_CONST char *, ber_len_t len, int dup, struct berval *bv));
LBER_F( struct berval * )
ber_mem2bv LDAP_P((
LDAP_CONST char *, ber_len_t len, int dup, struct berval *bv));
#define ber_bvstr(a) ber_str2bv(a, 0, 0, NULL)
#define ber_bvstrdup(a) ber_str2bv(a, 0, 1, NULL)
LBER_F( struct berval * )
ber_str2bv LDAP_P((
LDAP_CONST char *, ber_len_t len, int dup, struct berval *bv));
#define ber_bvstr(a) ((ber_str2bv)((a), 0, 0, NULL))
#define ber_bvstrdup(a) ((ber_str2bv)((a), 0, 1, NULL))
LBER_F( char * )
ber_strdup LDAP_P((

View file

@ -66,6 +66,7 @@ LDAP_BEGIN_DECL
/* #define LDAP_API_OPERATION_SESSION_SAFE 1 */
#endif
#define LDAP_PORT 389 /* ldap:/// default LDAP port */
#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */
@ -208,23 +209,28 @@ typedef struct ldapcontrol {
#define LDAP_CONTROL_SYNC_DONE "1.3.6.1.4.1.4203.666.5.8"
#define LDAP_SYNC_INFO "1.3.6.1.4.1.4203.666.10.2"
#define LDAP_SYNC_REFRESH_PRESENTS 0
#define LDAP_SYNC_REFRESH_DELETES 1
#define LDAP_SYNC_NONE 0x00
#define LDAP_SYNC_REFRESH_ONLY 0x01
#define LDAP_SYNC_RESERVED 0x02
#define LDAP_SYNC_REFRESH_AND_PERSIST 0x03
#define LDAP_SYNC_REFRESH_PRESENTS 0
#define LDAP_SYNC_REFRESH_DELETES 1
#define LDAP_TAG_SYNC_NEW_COOKIE ((ber_tag_t) 0x80U)
#define LDAP_TAG_SYNC_REFRESH_DELETE ((ber_tag_t) 0xa1U)
#define LDAP_TAG_SYNC_REFRESH_PRESENT ((ber_tag_t) 0xa2U)
#define LDAP_TAG_SYNC_ID_SET ((ber_tag_t) 0xa3U)
#define LDAP_TAG_SYNC_COOKIE ((ber_tag_t) 0x04U)
#define LDAP_TAG_REFRESHDELETES ((ber_tag_t) 0x01U)
#define LDAP_TAG_REFRESHDONE ((ber_tag_t) 0x01U)
#define LDAP_TAG_RELOAD_HINT ((ber_tag_t) 0x01U)
#define LDAP_TAG_SYNC_COOKIE ((ber_tag_t) 0x04U)
#define LDAP_TAG_REFRESHDELETES ((ber_tag_t) 0x01U)
#define LDAP_TAG_REFRESHDONE ((ber_tag_t) 0x01U)
#define LDAP_TAG_RELOAD_HINT ((ber_tag_t) 0x01U)
#define LDAP_SYNC_PRESENT 0
#define LDAP_SYNC_ADD 1
#define LDAP_SYNC_MODIFY 2
#define LDAP_SYNC_DELETE 3
#define LDAP_SYNC_PRESENT 0
#define LDAP_SYNC_ADD 1
#define LDAP_SYNC_MODIFY 2
#define LDAP_SYNC_DELETE 3
#define LDAP_CONTROL_SORTREQUEST "1.2.840.113556.1.4.473"
#define LDAP_CONTROL_SORTRESPONSE "1.2.840.113556.1.4.474"
@ -448,52 +454,51 @@ typedef struct ldapcontrol {
#define LDAP_OTHER 0x50
#define LDAP_API_ERROR(n) LDAP_RANGE((n),0x51,0x61) /* 81-97 */
#define LDAP_API_RESULT(n) (((n) == LDAP_SUCCESS) || \
LDAP_RANGE((n),0x51,0x61)) /* 0,81-97 */
/* Expermental result codes */
#define LDAP_X_ERROR(n) LDAP_RANGE((n),0x1000,0x3FFF) /* experimental */
#define LDAP_PVT_ERROR(n) LDAP_RANGE((n),0x4000,0xFFFF) /* private use */
/* reserved for APIs */
#define LDAP_SERVER_DOWN 0x51
#define LDAP_LOCAL_ERROR 0x52
#define LDAP_ENCODING_ERROR 0x53
#define LDAP_DECODING_ERROR 0x54
#define LDAP_TIMEOUT 0x55
#define LDAP_AUTH_UNKNOWN 0x56
#define LDAP_FILTER_ERROR 0x57
#define LDAP_USER_CANCELLED 0x58
#define LDAP_PARAM_ERROR 0x59
#define LDAP_NO_MEMORY 0x5a
#define LDAP_SYNC_RESOURCES_EXHAUSTED 0x4100
#define LDAP_SYNC_SECURITY_VIOLATION 0x4101
#define LDAP_SYNC_INVALID_COOKIE 0x4102
#define LDAP_SYNC_UNSUPPORTED_SCHEME 0x4103
#define LDAP_SYNC_CLIENT_DISCONNECT 0x4104
#define LDAP_SYNC_RELOAD_REQUIRED 0x4105
/* used but not reserved for APIs */
#define LDAP_CONNECT_ERROR 0x5b /* draft-ietf-ldap-c-api-xx */
#define LDAP_NOT_SUPPORTED 0x5c /* draft-ietf-ldap-c-api-xx */
#define LDAP_CONTROL_NOT_FOUND 0x5d /* draft-ietf-ldap-c-api-xx */
#define LDAP_NO_RESULTS_RETURNED 0x5e /* draft-ietf-ldap-c-api-xx */
#define LDAP_MORE_RESULTS_TO_RETURN 0x5f /* draft-ietf-ldap-c-api-xx */
#define LDAP_CLIENT_LOOP 0x60 /* draft-ietf-ldap-c-api-xx */
#define LDAP_REFERRAL_LIMIT_EXCEEDED 0x61 /* draft-ietf-ldap-c-api-xx */
#define LDAP_ASSERTION_FAILED 0x410f
#define LDAP_SYNC_RESOURCES_EXHAUSTED 0x100
#define LDAP_SYNC_SECURITY_VIOLATION 0x101
#define LDAP_SYNC_INVALID_COOKIE 0x102
#define LDAP_SYNC_UNSUPPORTED_SCHEME 0x103
#define LDAP_SYNC_CLIENT_DISCONNECT 0x104
#define LDAP_SYNC_RELOAD_REQUIRED 0x105
#define LDAP_ASSERTION_FAILED 0x10f
#ifdef LDAP_EXOP_X_CANCEL
/* resultCode for Cancel Response */
#define LDAP_CANCELLED 0x110
#define LDAP_NO_SUCH_OPERATION 0x111
#define LDAP_TOO_LATE 0x112
#define LDAP_CANNOT_CANCEL 0x113
#endif
#define LDAP_CANCELLED 0x4110
#define LDAP_NO_SUCH_OPERATION 0x4111
#define LDAP_TOO_LATE 0x4112
#define LDAP_CANNOT_CANCEL 0x4113
/* API Error Codes
*
* Based on draft-ietf-ldap-c-api-xx
* but with new (negative) codes
*/
#define LDAP_API_ERROR(n) ((n)<0)
#define LDAP_API_RESULT(n) ((n)<=0)
#define LDAP_SERVER_DOWN (-1)
#define LDAP_LOCAL_ERROR (-2)
#define LDAP_ENCODING_ERROR (-3)
#define LDAP_DECODING_ERROR (-4)
#define LDAP_TIMEOUT (-5)
#define LDAP_AUTH_UNKNOWN (-6)
#define LDAP_FILTER_ERROR (-7)
#define LDAP_USER_CANCELLED (-8)
#define LDAP_PARAM_ERROR (-9)
#define LDAP_NO_MEMORY (-10)
#define LDAP_CONNECT_ERROR (-11)
#define LDAP_NOT_SUPPORTED (-12)
#define LDAP_CONTROL_NOT_FOUND (-13)
#define LDAP_NO_RESULTS_RETURNED (-14)
#define LDAP_MORE_RESULTS_TO_RETURN (-15)
#define LDAP_CLIENT_LOOP (-16)
#define LDAP_REFERRAL_LIMIT_EXCEEDED (-17)
/* LDAP SYNC request type */
#define LDAP_SYNC_NONE 0x00
#define LDAP_SYNC_REFRESH_ONLY 0x01
#define LDAP_SYNC_REFRESH_AND_PERSIST 0x03
/*
* This structure represents both ldap messages and ldap responses.
@ -693,10 +698,12 @@ ldap_abandon_ext LDAP_P((
LDAPControl **serverctrls,
LDAPControl **clientctrls ));
#ifdef LDAP_DEPRECATED
LDAP_F( int )
ldap_abandon LDAP_P(( /* deprecated */
LDAP *ld,
int msgid ));
#endif
/*
@ -719,6 +726,7 @@ ldap_add_ext_s LDAP_P((
LDAPControl **serverctrls,
LDAPControl **clientctrls ));
#ifdef LDAP_DEPRECATED
LDAP_F( int )
ldap_add LDAP_P(( /* deprecated */
LDAP *ld,
@ -730,6 +738,7 @@ ldap_add_s LDAP_P(( /* deprecated */
LDAP *ld,
LDAP_CONST char *dn,
LDAPMod **attrs ));
#endif
/*
@ -792,6 +801,7 @@ ldap_parse_sasl_bind_result LDAP_P((
struct berval **servercredp,
int freeit ));
#ifdef LDAP_DEPRECATED
/*
* in bind.c:
* (deprecated)
@ -814,13 +824,13 @@ ldap_bind_s LDAP_P(( /* deprecated */
* in sbind.c:
*/
LDAP_F( int )
ldap_simple_bind LDAP_P((
ldap_simple_bind LDAP_P(( /* deprecated */
LDAP *ld,
LDAP_CONST char *who,
LDAP_CONST char *passwd ));
LDAP_F( int )
ldap_simple_bind_s LDAP_P((
ldap_simple_bind_s LDAP_P(( /* deprecated */
LDAP *ld,
LDAP_CONST char *who,
LDAP_CONST char *passwd ));
@ -854,6 +864,7 @@ LDAP_F( int )
ldap_kerberos_bind2_s LDAP_P(( /* deprecated */
LDAP *ld,
LDAP_CONST char *who ));
#endif
/*
@ -896,6 +907,7 @@ ldap_compare_ext_s LDAP_P((
LDAPControl **serverctrls,
LDAPControl **clientctrls ));
#ifdef LDAP_DEPRECATED
LDAP_F( int )
ldap_compare LDAP_P(( /* deprecated */
LDAP *ld,
@ -909,6 +921,7 @@ ldap_compare_s LDAP_P(( /* deprecated */
LDAP_CONST char *dn,
LDAP_CONST char *attr,
LDAP_CONST char *value ));
#endif
/*
@ -929,6 +942,7 @@ ldap_delete_ext_s LDAP_P((
LDAPControl **serverctrls,
LDAPControl **clientctrls ));
#ifdef LDAP_DEPRECATED
LDAP_F( int )
ldap_delete LDAP_P(( /* deprecated */
LDAP *ld,
@ -938,6 +952,7 @@ LDAP_F( int )
ldap_delete_s LDAP_P(( /* deprecated */
LDAP *ld,
LDAP_CONST char *dn ));
#endif
/*
@ -958,6 +973,7 @@ LDAP_F( char * )
ldap_err2string LDAP_P((
int err ));
#ifdef LDAP_DEPRECATED
LDAP_F( int )
ldap_result2error LDAP_P(( /* deprecated */
LDAP *ld,
@ -968,6 +984,7 @@ LDAP_F( void )
ldap_perror LDAP_P(( /* deprecated */
LDAP *ld,
LDAP_CONST char *s ));
#endif
/*
@ -990,6 +1007,7 @@ ldap_modify_ext_s LDAP_P((
LDAPControl **serverctrls,
LDAPControl **clientctrls ));
#ifdef LDAP_DEPRECATED
LDAP_F( int )
ldap_modify LDAP_P(( /* deprecated */
LDAP *ld,
@ -1001,6 +1019,7 @@ ldap_modify_s LDAP_P(( /* deprecated */
LDAP *ld,
LDAP_CONST char *dn,
LDAPMod **mods ));
#endif
/*
@ -1027,6 +1046,7 @@ ldap_rename_s LDAP_P((
LDAPControl **sctrls,
LDAPControl **cctrls ));
#ifdef LDAP_DEPRECATED
LDAP_F( int )
ldap_rename2 LDAP_P(( /* deprecated */
LDAP *ld,
@ -1068,13 +1088,15 @@ ldap_modrdn2_s LDAP_P(( /* deprecated */
LDAP_CONST char *dn,
LDAP_CONST char *newrdn,
int deleteoldrdn));
#endif
/*
* in open.c:
*/
#ifdef LDAP_DEPRECATED
LDAP_F( LDAP * )
ldap_init LDAP_P((
ldap_init LDAP_P(( /* deprecated */
LDAP_CONST char *host,
int port ));
@ -1082,6 +1104,7 @@ LDAP_F( LDAP * )
ldap_open LDAP_P(( /* deprecated */
LDAP_CONST char *host,
int port ));
#endif
LDAP_F( int )
ldap_create LDAP_P((
@ -1353,6 +1376,7 @@ LDAP_F( void )
ldap_value_free_len LDAP_P((
struct berval **vals ));
#ifdef LDAP_DEPRECATED
LDAP_F( char ** )
ldap_get_values LDAP_P(( /* deprecated */
LDAP *ld,
@ -1366,6 +1390,7 @@ ldap_count_values LDAP_P(( /* deprecated */
LDAP_F( void )
ldap_value_free LDAP_P(( /* deprecated */
char **vals ));
#endif
/*
* in result.c:
@ -1427,6 +1452,7 @@ ldap_search_ext_s LDAP_P((
int sizelimit,
LDAPMessage **res ));
#ifdef LDAP_DEPRECATED
LDAP_F( int )
ldap_search LDAP_P(( /* deprecated */
LDAP *ld,
@ -1456,19 +1482,12 @@ ldap_search_st LDAP_P(( /* deprecated */
int attrsonly,
struct timeval *timeout,
LDAPMessage **res ));
#endif
/*
* in unbind.c
*/
LDAP_F( int )
ldap_unbind LDAP_P(( /* deprecated */
LDAP *ld ));
LDAP_F( int )
ldap_unbind_s LDAP_P(( /* deprecated */
LDAP *ld ));
LDAP_F( int )
ldap_unbind_ext LDAP_P((
LDAP *ld,
LDAPControl **serverctrls,
@ -1480,6 +1499,16 @@ ldap_unbind_ext_s LDAP_P((
LDAPControl **serverctrls,
LDAPControl **clientctrls));
#ifdef LDAP_DEPRECATED
LDAP_F( int )
ldap_unbind LDAP_P(( /* deprecated */
LDAP *ld ));
LDAP_F( int )
ldap_unbind_s LDAP_P(( /* deprecated */
LDAP *ld ));
#endif
/*
* in filter.c
*/
@ -1524,9 +1553,9 @@ ldap_mods_free LDAP_P((
int freemods ));
#ifdef LDAP_DEPRECATED
/*
* in sort.c
* (deprecated)
* in sort.c (deprecated)
*/
typedef int (LDAP_SORT_AD_CMP_PROC) LDAP_P(( /* deprecated */
LDAP_CONST char *left,
@ -1552,7 +1581,7 @@ LDAP_F( int ) /* deprecated */
ldap_sort_strcasecmp LDAP_P((
LDAP_CONST void *a,
LDAP_CONST void *b ));
#endif
/*
* in url.c
@ -1582,12 +1611,14 @@ LDAP_F( void )
ldap_free_urldesc LDAP_P((
LDAPURLDesc *ludp ));
/*
* in sortctrl.c
*/
/*
* structure for a sort-key
* LDAP Server Side Sort
* in sortctrl.c
*/
#define LDAP_API_FEATURE_SERVER_SIDE_SORT 1000
/* structure for a sort-key */
typedef struct ldapsortkey {
char * attributeType;
char * orderingRule;
@ -1619,21 +1650,21 @@ ldap_parse_sort_control LDAP_P((
/*
* in vlvctrl.c
* LDAP Virtual List View
* in vlvctrl.c
*/
#define LDAP_API_FEATURE_VIRTUAL_LIST_VIEW 1000
/*
* structure for virtual list.
*/
/* structure for virtual list */
typedef struct ldapvlvinfo {
int ldvlv_version;
unsigned long ldvlv_before_count;
unsigned long ldvlv_after_count;
unsigned long ldvlv_offset;
unsigned long ldvlv_count;
struct berval *ldvlv_attrvalue;
struct berval *ldvlv_context;
void *ldvlv_extradata;
struct berval * ldvlv_attrvalue;
struct berval * ldvlv_context;
void * ldvlv_extradata;
} LDAPVLVInfo;
LDAP_F( int )
@ -1652,7 +1683,8 @@ ldap_parse_vlv_control LDAP_P((
int *errcodep ));
/*
* LDAP Who Am I? (whoami.c)
* LDAP Who Am I?
* in whoami.c
*/
LDAP_F( int )
@ -1675,7 +1707,8 @@ ldap_whoami_s LDAP_P((
LDAPControl **cctrls ));
/*
* in passwd.c
* LDAP Password Modify
* in passwd.c
*/
LDAP_F( int )
@ -1703,5 +1736,6 @@ ldap_passwd_s LDAP_P((
LDAPControl **sctrls,
LDAPControl **cctrls ));
LDAP_END_DECL
#endif /* _LDAP_H */

View file

@ -60,10 +60,4 @@
/* LDAP v2 Referrals */
#undef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
/* LDAP Server Side Sort. */
#define LDAP_API_FEATURE_SERVER_SIDE_SORT 1000
/* LDAP Virtual List View. */
#define LDAP_API_FEATURE_VIRTUAL_LIST_VIEW 1000
#endif /* LDAP_FEATURES */

View file

@ -24,6 +24,7 @@
#include <lber.h> /* get ber_slen_t */
#include <ac/bytes.h>
#include "../libraries/liblunicode/ucdata/ucdata.h"
LDAP_BEGIN_DECL

View file

@ -29,7 +29,7 @@ LDAP_BEGIN_DECL
/* Avoid floating point math through extra padding */
#define LUTIL_BASE64_ENCODE_LEN(n) (((n)+2)/3 * 4)
#define LUTIL_BASE64_DECODE_LEN(n) (((n)+3)/4 * 3)
#define LUTIL_BASE64_DECODE_LEN(n) ((n)/4*3)
/* ISC Base64 Routines */
/* base64.c */

View file

@ -350,6 +350,9 @@
/* Define if you have the <assert.h> header file. */
#undef HAVE_ASSERT_H
/* Define if you have the <bits/types.h> header file. */
#undef HAVE_BITS_TYPES_H
/* Define if you have the <conio.h> header file. */
#undef HAVE_CONIO_H
@ -443,9 +446,6 @@
/* Define if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define if you have the <ncurses.h> header file. */
#undef HAVE_NCURSES_H
/* Define if you have the <ndbm.h> header file. */
#undef HAVE_NDBM_H
@ -581,9 +581,6 @@
/* Define if you have the <tcpd.h> header file. */
#undef HAVE_TCPD_H
/* Define if you have the <termcap.h> header file. */
#undef HAVE_TERMCAP_H
/* Define if you have the <termios.h> header file. */
#undef HAVE_TERMIOS_H
@ -797,15 +794,6 @@
/* define if you have -lwrap */
#undef HAVE_TCPD
/* define if you have -ltermcap */
#undef HAVE_TERMCAP
/* define if you have -lncurses */
#undef HAVE_NCURSES
/* define if you have no termcap support */
#undef NO_TERMCAP
/* define if you have Cyrus SASL */
#undef HAVE_CYRUS_SASL
@ -953,6 +941,12 @@
/* define to support modules */
#undef SLAPD_MODULES
/* statically linked module */
#undef SLAPD_MOD_STATIC
/* dynamically linked module */
#undef SLAPD_MOD_DYNAMIC
/* define to support BDB backend */
#undef SLAPD_BDB
@ -1025,6 +1019,12 @@
/* define to support dynamic SQL backend */
#undef SLAPD_SQL_DYNAMIC
/* define for Dynamic Group overlay */
#undef SLAPD_OVER_DYNGROUP
/* define for Proxy Cache overlay */
#undef SLAPD_OVER_PROXYCACHE
/* define to enable rewriting in back-ldap and back-meta */
#undef ENABLE_REWRITE
@ -1070,6 +1070,19 @@
#define vsprintf ber_pvt_vsprintf
#endif
#ifdef OPENLDAP_FD_SETSIZE
/* assume installer desires to enlarge fd_set */
#ifdef HAVE_BITS_TYPES_H
#include <bits/types.h>
#endif
#ifdef __FD_SETSIZE
#undef __FD_SETSIZE
#define __FD_SETSIZE OPENLDAP_FD_SETSIZE
#else
#define FD_SETSIZE OPENLDAP_FD_SETSIZE
#endif
#endif
#include "ldap_cdefs.h"
#include "ldap_features.h"

View file

@ -18,6 +18,5 @@ SUBDIRS= \
liblber \
liblunicode \
libldap libldap_r \
libldbm \
librewrite

View file

@ -32,12 +32,6 @@
#include "lber.h"
#include "ldap_pvt.h"
struct DEBUGLEVEL
{
char *subsystem;
int level;
};
int ldap_loglevels[LDAP_SUBSYS_NUM];
static FILE *log_file = NULL;
@ -60,26 +54,26 @@ static int debug2syslog(int l) {
}
#endif
static char *lutil_levels[] = {
static char *debug_levels[] = {
"emergency", "alert", "critical",
"error", "warning", "notice",
"information", "entry", "args",
"results", "detail1", "detail2",
NULL };
static char *lutil_subsys[LDAP_SUBSYS_NUM] = {
"global","operation", "transport",
"connection", "filter", "ber",
"config", "acl", "cache", "index",
"ldif", "tools", "slapd", "slurpd",
"backend", "back_bdb", "back_ldbm",
"back_ldap", "back_meta", "back_mon" };
static char *debug_subsys[LDAP_SUBSYS_NUM] = {
"GLOBAL", "OPERATION", "TRANSPORT",
"CONNECTION", "FILTER", "BER",
"CONFIG", "ACL", "CACHE", "INDEX",
"LDIF", "TOOLS", "SLAPD", "SLURPD",
"BACKEND", "BACK_BDB", "BACK_LDBM",
"BACK_LDAP", "BACK_META", "BACK_MON" };
int lutil_mnem2subsys( const char *subsys )
{
int i;
for( i = 0; i < LDAP_SUBSYS_NUM; i++ ) {
if ( !strcasecmp( subsys, lutil_subsys[i] ) ) {
if ( !strcasecmp( subsys, debug_subsys[i] ) ) {
return i;
}
}
@ -89,9 +83,8 @@ int lutil_mnem2subsys( const char *subsys )
void lutil_set_all_backends( int level )
{
int i;
for( i = 0; i < LDAP_SUBSYS_NUM; i++ ) {
if ( !strncasecmp( "back_", lutil_subsys[i], strlen("back_") ) ) {
if ( !strncasecmp( "BACK_", debug_subsys[i], sizeof("BACK_")-1 ) ) {
ldap_loglevels[i] = level;
}
}
@ -100,8 +93,8 @@ void lutil_set_all_backends( int level )
int lutil_mnem2level( const char *level )
{
int i;
for( i = 0; lutil_levels[i] != NULL; i++ ) {
if ( !strcasecmp( level, lutil_levels[i] ) ) {
for( i = 0; debug_levels[i] != NULL; i++ ) {
if ( !strcasecmp( level, debug_levels[i] ) ) {
return i;
}
}
@ -112,7 +105,7 @@ static int addSubsys( const char *subsys, int level )
{
int subsys_num;
if ( !strcasecmp( subsys, "backend" ) ) {
if ( !strcasecmp( subsys, "BACKEND" ) ) {
lutil_set_all_backends( level );
return level;
@ -154,15 +147,8 @@ void lutil_log_int(
struct tm *today;
#endif
size_t i;
char * t_subsys;
char * tmp;
t_subsys = strdup(subsys);
for(tmp = t_subsys, i = 0; i < strlen(t_subsys); i++, tmp++) {
*tmp = TOUPPER( (unsigned char) *tmp );
}
#ifdef LDAP_SYSLOG
/* we're configured to use syslog */
if( use_syslog ) {
@ -218,7 +204,7 @@ void lutil_log_int(
* format the output data.
*/
fprintf(file, "\n%s:: ", t_subsys );
fprintf(file, "\n%s:: ", subsys );
vfprintf( file, fmt, vl );
fflush( file );
}
@ -234,7 +220,7 @@ void lutil_log( const int subsys, int level, const char *fmt, ... )
va_list vl;
va_start( vl, fmt );
ber_get_option( NULL, LBER_OPT_LOG_PRINT_FILE, &outfile );
lutil_log_int( outfile, lutil_subsys[subsys], level, fmt, vl );
lutil_log_int( outfile, debug_subsys[subsys], level, fmt, vl );
va_end( vl );
}
@ -274,9 +260,9 @@ void lutil_log_initialize(int argc, char **argv)
global_level = atoi( optarg );
ldap_loglevels[0] = global_level;
/*
* if a negative number was used, make the global level the
* maximum sane level.
*/
* if a negative number was used, make the global level the
* maximum sane level.
*/
if ( global_level < 0 ) {
global_level = 65535;
ldap_loglevels[0] = 65535;
@ -305,16 +291,14 @@ void (lutil_debug)( int debug, int level, const char *fmt, ... )
ber_set_option( NULL, LBER_OPT_LOG_PRINT_FILE, log_file );
}
#endif
va_start( vl, fmt );
va_start( vl, fmt );
vsnprintf( buffer, sizeof(buffer), fmt, vl );
buffer[sizeof(buffer)-1] = '\0';
if( log_file != NULL ) {
fputs( buffer, log_file );
fflush( log_file );
}
fputs( buffer, stderr );
va_end( vl );
}

View file

@ -499,6 +499,11 @@ ldap_int_sasl_open(
return ld->ld_errno;
}
if ( ldap_int_sasl_init() ) {
ld->ld_errno = LDAP_LOCAL_ERROR;
return ld->ld_errno;
}
#if SASL_VERSION_MAJOR >= 2
rc = sasl_client_new( "ldap", host, NULL, NULL,
NULL, 0, &ctx );

View file

@ -121,7 +121,7 @@ static struct ldaperror ldap_builtin_errlist[] = {
{LDAP_CANNOT_CANCEL, N_("Cannot Cancel")},
#endif
{-1, NULL}
{0, NULL}
};
static struct ldaperror *ldap_errlist = ldap_builtin_errlist;

View file

@ -611,6 +611,4 @@ void ldap_int_initialize( struct ldapoptions *gopts, int *dbglvl )
}
openldap_ldap_init_w_env(gopts, NULL);
ldap_int_sasl_init();
}

View file

@ -56,7 +56,7 @@
* Note: Deallocate structure when the process exits
*/
# define LDAP_INT_GLOBAL_OPT() ldap_int_global_opt()
struct ldapoptions *ldap_int_global_opt(void);
struct ldapoptions *ldap_int_global_opt(void);
#else
# define LDAP_INT_GLOBAL_OPT() (&ldap_int_global_options)
#endif
@ -84,6 +84,7 @@
#endif /* LDAP_DEBUG */
#define LDAP_DEPRECATED 1
#include "ldap.h"
#include "ldap_pvt.h"

View file

@ -92,20 +92,36 @@ ldap_sort_entries(
int (*cmp) (LDAP_CONST char *, LDAP_CONST char *)
)
{
int i, count;
int i, count = 0;
struct entrything *et;
LDAPMessage *e, *last;
LDAPMessage *e, *ehead = NULL, *etail = NULL;
LDAPMessage *ohead = NULL, *otail = NULL;
LDAPMessage **ep;
assert( ld != NULL );
count = ldap_count_entries( ld, *chain );
/* Separate entries from non-entries */
for ( e = *chain; e; e=e->lm_chain ) {
if ( e->lm_msgtype == LDAP_RES_SEARCH_ENTRY ) {
count++;
if ( !ehead ) ehead = e;
if ( etail ) etail->lm_chain = e;
etail = e;
} else {
if ( !ohead ) ohead = e;
if ( otail ) otail->lm_chain = e;
otail = e;
}
}
if ( count < 0 ) {
return -1;
} else if ( count < 2 ) {
if ( count < 2 ) {
/* zero or one entries -- already sorted! */
if ( ehead ) {
etail->lm_chain = ohead;
*chain = ehead;
} else {
*chain = ohead;
}
return 0;
}
@ -115,7 +131,7 @@ ldap_sort_entries(
return( -1 );
}
e = *chain;
e = ehead;
for ( i = 0; i < count; i++ ) {
et[i].et_cmp_fn = cmp;
et[i].et_msg = e;
@ -131,7 +147,6 @@ ldap_sort_entries(
e = e->lm_chain;
}
last = e;
qsort( et, count, sizeof(struct entrything), et_cmp );
@ -142,7 +157,8 @@ ldap_sort_entries(
LDAP_VFREE( et[i].et_vals );
}
*ep = last;
*ep = ohead;
LDAP_FREE( (char *) et );
return( 0 );

View file

@ -1,25 +0,0 @@
# Makefile for -lldbm
# $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
## Copyright 1998-2003 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted only as authorized by the OpenLDAP
## Public License.
##
## A copy of this license is available in the file LICENSE in the
## top-level directory of the distribution or, alternatively, at
## <http://www.OpenLDAP.org/license.html>.
LIBRARY = libldbm.a
SRCS = ldbm.c
OBJS = ldbm.o
LDAP_INCDIR= ../../include
LDAP_LIBDIR= ../../libraries
XLIBS = $(LIBRARY)
XXLIBS = $(LDBM_LIBS)

View file

@ -1,137 +0,0 @@
# Microsoft Developer Studio Project File - Name="libldbm" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=libldbm - Win32 Single Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "libldbm.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "libldbm.mak" CFG="libldbm - Win32 Single Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libldbm - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "libldbm - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE "libldbm - Win32 Single Debug" (based on "Win32 (x86) Static Library")
!MESSAGE "libldbm - Win32 Single Release" (based on\
"Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
!IF "$(CFG)" == "libldbm - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\..\Release"
# PROP Intermediate_Dir "..\..\Release\libldbm"
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\..\Release\oldbm32.lib"
!ELSEIF "$(CFG)" == "libldbm - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\..\Debug"
# PROP Intermediate_Dir "..\..\Debug\libldbm"
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\..\Debug\oldbm32.lib"
!ELSEIF "$(CFG)" == "libldbm - Win32 Single Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "libldbm_"
# PROP BASE Intermediate_Dir "libldbm_"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\..\SDebug"
# PROP Intermediate_Dir "..\..\SDebug\libldbm"
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE CPP /nologo /MTd /W3 /GX /Z7 /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /Z7 /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo /out:"..\Debug\oldbm32.lib"
# ADD LIB32 /nologo /out:"..\..\SDebug\oldbm32.lib"
!ELSEIF "$(CFG)" == "libldbm - Win32 Single Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "libldbm0"
# PROP BASE Intermediate_Dir "libldbm0"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\..\SRelease"
# PROP Intermediate_Dir "..\..\SRelease\libldbm"
# PROP Target_Dir ""
RSC=rc.exe
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo /out:"..\Release\oldbm32.lib"
# ADD LIB32 /nologo /out:"..\..\SRelease\oldbm32.lib"
!ENDIF
# Begin Target
# Name "libldbm - Win32 Release"
# Name "libldbm - Win32 Debug"
# Name "libldbm - Win32 Single Debug"
# Name "libldbm - Win32 Single Release"
# Begin Source File
SOURCE=.\ldbm.c
# End Source File
# Begin Source File
SOURCE=..\..\include\ldbm.h
# End Source File
# End Target
# End Project

View file

@ -65,7 +65,7 @@ typedef struct {
/*
* A simple array of 32-bit masks for lookup.
*/
static unsigned long masks32[32] = {
static ac_uint4 masks32[32] = {
0x00000001UL, 0x00000002UL, 0x00000004UL, 0x00000008UL,
0x00000010UL, 0x00000020UL, 0x00000040UL, 0x00000080UL,
0x00000100UL, 0x00000200UL, 0x00000400UL, 0x00000800UL,
@ -117,9 +117,9 @@ _ucopenfile(char *paths, char *filename, char *mode)
*
**************************************************************************/
static unsigned long _ucprop_size;
static unsigned short *_ucprop_offsets;
static unsigned long *_ucprop_ranges;
static ac_uint4 _ucprop_size;
static ac_uint2 *_ucprop_offsets;
static ac_uint4 *_ucprop_ranges;
/*
* Return -1 on error, 0 if okay
@ -128,7 +128,7 @@ static int
_ucprop_load(char *paths, int reload)
{
FILE *in;
unsigned long size, i;
ac_uint4 size, i;
_ucheader_t hdr;
if (_ucprop_size > 0) {
@ -169,7 +169,7 @@ _ucprop_load(char *paths, int reload)
/*
* Allocate all the storage needed for the lookup table.
*/
_ucprop_offsets = (unsigned short *) malloc(hdr.size.bytes);
_ucprop_offsets = (ac_uint2 *) malloc(hdr.size.bytes);
/*
* Calculate the offset into the storage for the ranges. The offsets
@ -177,15 +177,15 @@ _ucprop_load(char *paths, int reload)
* the header count field. This means the offset to the ranges must be
* calculated after aligning the count to a 4-byte boundary.
*/
if ((size = ((hdr.cnt + 1) * sizeof(unsigned short))) & 3)
if ((size = ((hdr.cnt + 1) * sizeof(ac_uint2))) & 3)
size += 4 - (size & 3);
size >>= 1;
_ucprop_ranges = (unsigned long *) (_ucprop_offsets + size);
_ucprop_ranges = (ac_uint4 *) (_ucprop_offsets + size);
/*
* Load the offset array.
*/
fread((char *) _ucprop_offsets, sizeof(unsigned short), size, in);
fread((char *) _ucprop_offsets, sizeof(ac_uint2), size, in);
/*
* Do an endian swap if necessary. Don't forget there is an extra node on
@ -200,7 +200,7 @@ _ucprop_load(char *paths, int reload)
* Load the ranges. The number of elements is in the last array position
* of the offsets.
*/
fread((char *) _ucprop_ranges, sizeof(unsigned long),
fread((char *) _ucprop_ranges, sizeof(ac_uint4),
_ucprop_offsets[_ucprop_size], in);
fclose(in);
@ -230,7 +230,7 @@ _ucprop_unload(void)
}
static int
_ucprop_lookup(unsigned long code, unsigned long n)
_ucprop_lookup(ac_uint4 code, ac_uint4 n)
{
long l, r, m;
@ -272,9 +272,9 @@ _ucprop_lookup(unsigned long code, unsigned long n)
}
int
ucisprop(unsigned long code, unsigned long mask1, unsigned long mask2)
ucisprop(ac_uint4 code, ac_uint4 mask1, ac_uint4 mask2)
{
unsigned long i;
ac_uint4 i;
if (mask1 == 0 && mask2 == 0)
return 0;
@ -298,9 +298,9 @@ ucisprop(unsigned long code, unsigned long mask1, unsigned long mask2)
*
**************************************************************************/
static unsigned long _uccase_size;
static unsigned short _uccase_len[2];
static unsigned long *_uccase_map;
static ac_uint4 _uccase_size;
static ac_uint2 _uccase_len[2];
static ac_uint4 *_uccase_map;
/*
* Return -1 on error, 0 if okay
@ -309,7 +309,7 @@ static int
_uccase_load(char *paths, int reload)
{
FILE *in;
unsigned long i;
ac_uint4 i;
_ucheader_t hdr;
if (_uccase_size > 0) {
@ -345,13 +345,13 @@ _uccase_load(char *paths, int reload)
_uccase_len[0] = hdr.size.len[0] * 3;
_uccase_len[1] = hdr.size.len[1] * 3;
_uccase_map = (unsigned long *)
malloc(_uccase_size * sizeof(unsigned long));
_uccase_map = (ac_uint4 *)
malloc(_uccase_size * sizeof(ac_uint4));
/*
* Load the case mapping table.
*/
fread((char *) _uccase_map, sizeof(unsigned long), _uccase_size, in);
fread((char *) _uccase_map, sizeof(ac_uint4), _uccase_size, in);
/*
* Do an endian swap if necessary.
@ -374,8 +374,8 @@ _uccase_unload(void)
_uccase_size = 0;
}
static unsigned long
_uccase_lookup(unsigned long code, long l, long r, int field)
static ac_uint4
_uccase_lookup(ac_uint4 code, long l, long r, int field)
{
long m;
@ -400,8 +400,8 @@ _uccase_lookup(unsigned long code, long l, long r, int field)
return code;
}
unsigned long
uctoupper(unsigned long code)
ac_uint4
uctoupper(ac_uint4 code)
{
int field;
long l, r;
@ -427,8 +427,8 @@ uctoupper(unsigned long code)
return _uccase_lookup(code, l, r, field);
}
unsigned long
uctolower(unsigned long code)
ac_uint4
uctolower(ac_uint4 code)
{
int field;
long l, r;
@ -454,8 +454,8 @@ uctolower(unsigned long code)
return _uccase_lookup(code, l, r, field);
}
unsigned long
uctotitle(unsigned long code)
ac_uint4
uctotitle(ac_uint4 code)
{
int field;
long l, r;
@ -490,8 +490,8 @@ uctotitle(unsigned long code)
*
**************************************************************************/
static unsigned long _uccomp_size;
static unsigned long *_uccomp_data;
static ac_uint4 _uccomp_size;
static ac_uint4 *_uccomp_data;
/*
* Return -1 on error, 0 if okay
@ -500,7 +500,7 @@ static int
_uccomp_load(char *paths, int reload)
{
FILE *in;
unsigned long size, i;
ac_uint4 size, i;
_ucheader_t hdr;
if (_uccomp_size > 0) {
@ -528,13 +528,13 @@ _uccomp_load(char *paths, int reload)
}
_uccomp_size = hdr.cnt;
_uccomp_data = (unsigned long *) malloc(hdr.size.bytes);
_uccomp_data = (ac_uint4 *) malloc(hdr.size.bytes);
/*
* Read the composition data in.
*/
size = hdr.size.bytes / sizeof(unsigned long);
fread((char *) _uccomp_data, sizeof(unsigned long), size, in);
size = hdr.size.bytes / sizeof(ac_uint4);
fread((char *) _uccomp_data, sizeof(ac_uint4), size, in);
/*
* Do an endian swap if necessary.
@ -568,7 +568,7 @@ _uccomp_unload(void)
}
int
uccomp(unsigned long node1, unsigned long node2, unsigned long *comp)
uccomp(ac_uint4 node1, ac_uint4 node2, ac_uint4 *comp)
{
int l, r, m;
@ -595,7 +595,7 @@ uccomp(unsigned long node1, unsigned long node2, unsigned long *comp)
}
int
uccomp_hangul(unsigned long *str, int len)
uccomp_hangul(ac_uint4 *str, int len)
{
const int SBase = 0xAC00, LBase = 0x1100,
VBase = 0x1161, TBase = 0x11A7,
@ -604,7 +604,7 @@ uccomp_hangul(unsigned long *str, int len)
SCount = LCount * NCount; /* 11172 */
int i, rlen;
unsigned long ch, last, lindex, sindex;
ac_uint4 ch, last, lindex, sindex;
last = str[0];
rlen = 1;
@ -613,9 +613,9 @@ uccomp_hangul(unsigned long *str, int len)
/* check if two current characters are L and V */
lindex = last - LBase;
if (lindex < (unsigned long) LCount) {
unsigned long vindex = ch - VBase;
if (vindex < (unsigned long) VCount) {
if (lindex < (ac_uint4) LCount) {
ac_uint4 vindex = ch - VBase;
if (vindex < (ac_uint4) VCount) {
/* make syllable of form LV */
last = SBase + (lindex * VCount + vindex) * TCount;
str[rlen-1] = last; /* reset last */
@ -625,11 +625,11 @@ uccomp_hangul(unsigned long *str, int len)
/* check if two current characters are LV and T */
sindex = last - SBase;
if (sindex < (unsigned long) SCount
if (sindex < (ac_uint4) SCount
&& (sindex % TCount) == 0)
{
unsigned long tindex = ch - TBase;
if (tindex <= (unsigned long) TCount) {
ac_uint4 tindex = ch - TBase;
if (tindex <= (ac_uint4) TCount) {
/* make syllable of form LVT */
last += tindex;
str[rlen-1] = last; /* reset last */
@ -646,10 +646,10 @@ uccomp_hangul(unsigned long *str, int len)
}
int
uccanoncomp(unsigned long *str, int len)
uccanoncomp(ac_uint4 *str, int len)
{
int i, stpos, copos;
unsigned long cl, prevcl, st, ch, co;
ac_uint4 cl, prevcl, st, ch, co;
st = str[0];
stpos = 0;
@ -680,13 +680,13 @@ uccanoncomp(unsigned long *str, int len)
*
**************************************************************************/
static unsigned long _ucdcmp_size;
static unsigned long *_ucdcmp_nodes;
static unsigned long *_ucdcmp_decomp;
static ac_uint4 _ucdcmp_size;
static ac_uint4 *_ucdcmp_nodes;
static ac_uint4 *_ucdcmp_decomp;
static unsigned long _uckdcmp_size;
static unsigned long *_uckdcmp_nodes;
static unsigned long *_uckdcmp_decomp;
static ac_uint4 _uckdcmp_size;
static ac_uint4 *_uckdcmp_nodes;
static ac_uint4 *_uckdcmp_decomp;
/*
* Return -1 on error, 0 if okay
@ -695,7 +695,7 @@ static int
_ucdcmp_load(char *paths, int reload)
{
FILE *in;
unsigned long size, i;
ac_uint4 size, i;
_ucheader_t hdr;
if (_ucdcmp_size > 0) {
@ -723,14 +723,14 @@ _ucdcmp_load(char *paths, int reload)
}
_ucdcmp_size = hdr.cnt << 1;
_ucdcmp_nodes = (unsigned long *) malloc(hdr.size.bytes);
_ucdcmp_nodes = (ac_uint4 *) malloc(hdr.size.bytes);
_ucdcmp_decomp = _ucdcmp_nodes + (_ucdcmp_size + 1);
/*
* Read the decomposition data in.
*/
size = hdr.size.bytes / sizeof(unsigned long);
fread((char *) _ucdcmp_nodes, sizeof(unsigned long), size, in);
size = hdr.size.bytes / sizeof(ac_uint4);
fread((char *) _ucdcmp_nodes, sizeof(ac_uint4), size, in);
/*
* Do an endian swap if necessary.
@ -750,7 +750,7 @@ static int
_uckdcmp_load(char *paths, int reload)
{
FILE *in;
unsigned long size, i;
ac_uint4 size, i;
_ucheader_t hdr;
if (_uckdcmp_size > 0) {
@ -778,14 +778,14 @@ _uckdcmp_load(char *paths, int reload)
}
_uckdcmp_size = hdr.cnt << 1;
_uckdcmp_nodes = (unsigned long *) malloc(hdr.size.bytes);
_uckdcmp_nodes = (ac_uint4 *) malloc(hdr.size.bytes);
_uckdcmp_decomp = _uckdcmp_nodes + (_uckdcmp_size + 1);
/*
* Read the decomposition data in.
*/
size = hdr.size.bytes / sizeof(unsigned long);
fread((char *) _uckdcmp_nodes, sizeof(unsigned long), size, in);
size = hdr.size.bytes / sizeof(ac_uint4);
fread((char *) _uckdcmp_nodes, sizeof(ac_uint4), size, in);
/*
* Do an endian swap if necessary.
@ -827,7 +827,7 @@ _uckdcmp_unload(void)
}
int
ucdecomp(unsigned long code, unsigned long *num, unsigned long **decomp)
ucdecomp(ac_uint4 code, ac_uint4 *num, ac_uint4 **decomp)
{
long l, r, m;
@ -859,7 +859,7 @@ ucdecomp(unsigned long code, unsigned long *num, unsigned long **decomp)
}
int
uckdecomp(unsigned long code, unsigned long *num, unsigned long **decomp)
uckdecomp(ac_uint4 code, ac_uint4 *num, ac_uint4 **decomp)
{
long l, r, m;
@ -891,15 +891,15 @@ uckdecomp(unsigned long code, unsigned long *num, unsigned long **decomp)
}
int
ucdecomp_hangul(unsigned long code, unsigned long *num, unsigned long decomp[])
ucdecomp_hangul(ac_uint4 code, ac_uint4 *num, ac_uint4 decomp[])
{
if (!ucishangul(code))
return 0;
code -= 0xac00;
decomp[0] = 0x1100 + (unsigned long) (code / 588);
decomp[1] = 0x1161 + (unsigned long) ((code % 588) / 28);
decomp[2] = 0x11a7 + (unsigned long) (code % 28);
decomp[0] = 0x1100 + (ac_uint4) (code / 588);
decomp[1] = 0x1161 + (ac_uint4) ((code % 588) / 28);
decomp[2] = 0x11a7 + (ac_uint4) (code % 28);
*num = (decomp[2] != 0x11a7) ? 3 : 2;
return 1;
@ -907,15 +907,15 @@ ucdecomp_hangul(unsigned long code, unsigned long *num, unsigned long decomp[])
/* mode == 0 for canonical, mode == 1 for compatibility */
static int
uccanoncompatdecomp(const unsigned long *in, int inlen,
unsigned long **out, int *outlen, short mode, void *ctx)
uccanoncompatdecomp(const ac_uint4 *in, int inlen,
ac_uint4 **out, int *outlen, short mode, void *ctx)
{
int l, size;
unsigned i, j, k;
unsigned long num, class, *decomp, hangdecomp[3];
ac_uint4 num, class, *decomp, hangdecomp[3];
size = inlen * 2;
*out = (unsigned long *) ber_memalloc_x(size * sizeof(**out), ctx);
*out = (ac_uint4 *) ber_memalloc_x(size * sizeof(**out), ctx);
if (*out == NULL)
return *outlen = -1;
@ -924,7 +924,7 @@ uccanoncompatdecomp(const unsigned long *in, int inlen,
if (mode ? uckdecomp(in[j], &num, &decomp) : ucdecomp(in[j], &num, &decomp)) {
if ( size - i < num) {
size = inlen + i - j + num - 1;
*out = (unsigned long *) ber_memrealloc_x(*out, size * sizeof(**out), ctx );
*out = (ac_uint4 *) ber_memrealloc_x(*out, size * sizeof(**out), ctx );
if (*out == NULL)
return *outlen = -1;
}
@ -944,7 +944,7 @@ uccanoncompatdecomp(const unsigned long *in, int inlen,
} else if (ucdecomp_hangul(in[j], &num, hangdecomp)) {
if (size - i < num) {
size = inlen + i - j + num - 1;
*out = (unsigned long *) ber_memrealloc_x(*out, size * sizeof(**out), ctx);
*out = (ac_uint4 *) ber_memrealloc_x(*out, size * sizeof(**out), ctx);
if (*out == NULL)
return *outlen = -1;
}
@ -955,7 +955,7 @@ uccanoncompatdecomp(const unsigned long *in, int inlen,
} else {
if (size - i < 1) {
size = inlen + i - j;
*out = (unsigned long *) ber_memrealloc_x(*out, size * sizeof(**out), ctx);
*out = (ac_uint4 *) ber_memrealloc_x(*out, size * sizeof(**out), ctx);
if (*out == NULL)
return *outlen = -1;
}
@ -976,15 +976,15 @@ uccanoncompatdecomp(const unsigned long *in, int inlen,
}
int
uccanondecomp(const unsigned long *in, int inlen,
unsigned long **out, int *outlen, void *ctx)
uccanondecomp(const ac_uint4 *in, int inlen,
ac_uint4 **out, int *outlen, void *ctx)
{
return uccanoncompatdecomp(in, inlen, out, outlen, 0, ctx);
}
int
uccompatdecomp(const unsigned long *in, int inlen,
unsigned long **out, int *outlen, void *ctx)
uccompatdecomp(const ac_uint4 *in, int inlen,
ac_uint4 **out, int *outlen, void *ctx)
{
return uccanoncompatdecomp(in, inlen, out, outlen, 1, ctx);
}
@ -995,8 +995,8 @@ uccompatdecomp(const unsigned long *in, int inlen,
*
**************************************************************************/
static unsigned long _uccmcl_size;
static unsigned long *_uccmcl_nodes;
static ac_uint4 _uccmcl_size;
static ac_uint4 *_uccmcl_nodes;
/*
* Return -1 on error, 0 if okay
@ -1005,7 +1005,7 @@ static int
_uccmcl_load(char *paths, int reload)
{
FILE *in;
unsigned long i;
ac_uint4 i;
_ucheader_t hdr;
if (_uccmcl_size > 0) {
@ -1033,12 +1033,12 @@ _uccmcl_load(char *paths, int reload)
}
_uccmcl_size = hdr.cnt * 3;
_uccmcl_nodes = (unsigned long *) malloc(hdr.size.bytes);
_uccmcl_nodes = (ac_uint4 *) malloc(hdr.size.bytes);
/*
* Read the combining classes in.
*/
fread((char *) _uccmcl_nodes, sizeof(unsigned long), _uccmcl_size, in);
fread((char *) _uccmcl_nodes, sizeof(ac_uint4), _uccmcl_size, in);
/*
* Do an endian swap if necessary.
@ -1061,8 +1061,8 @@ _uccmcl_unload(void)
_uccmcl_size = 0;
}
unsigned long
uccombining_class(unsigned long code)
ac_uint4
uccombining_class(ac_uint4 code)
{
long l, r, m;
@ -1088,8 +1088,8 @@ uccombining_class(unsigned long code)
*
**************************************************************************/
static unsigned long *_ucnum_nodes;
static unsigned long _ucnum_size;
static ac_uint4 *_ucnum_nodes;
static ac_uint4 _ucnum_size;
static short *_ucnum_vals;
/*
@ -1099,7 +1099,7 @@ static int
_ucnumb_load(char *paths, int reload)
{
FILE *in;
unsigned long size, i;
ac_uint4 size, i;
_ucheader_t hdr;
if (_ucnum_size > 0) {
@ -1127,7 +1127,7 @@ _ucnumb_load(char *paths, int reload)
}
_ucnum_size = hdr.cnt;
_ucnum_nodes = (unsigned long *) malloc(hdr.size.bytes);
_ucnum_nodes = (ac_uint4 *) malloc(hdr.size.bytes);
_ucnum_vals = (short *) (_ucnum_nodes + _ucnum_size);
/*
@ -1146,7 +1146,7 @@ _ucnumb_load(char *paths, int reload)
* Determine the number of values that have to be adjusted.
*/
size = (hdr.size.bytes -
(_ucnum_size * (sizeof(unsigned long) << 1))) /
(_ucnum_size * (sizeof(ac_uint4) << 1))) /
sizeof(short);
for (i = 0; i < size; i++)
@ -1167,7 +1167,7 @@ _ucnumb_unload(void)
}
int
ucnumber_lookup(unsigned long code, struct ucnumber *num)
ucnumber_lookup(ac_uint4 code, struct ucnumber *num)
{
long l, r, m;
short *vp;
@ -1196,7 +1196,7 @@ ucnumber_lookup(unsigned long code, struct ucnumber *num)
}
int
ucdigit_lookup(unsigned long code, int *digit)
ucdigit_lookup(ac_uint4 code, int *digit)
{
long l, r, m;
short *vp;
@ -1227,7 +1227,7 @@ ucdigit_lookup(unsigned long code, int *digit)
}
struct ucnumber
ucgetnumber(unsigned long code)
ucgetnumber(ac_uint4 code)
{
struct ucnumber num;
@ -1244,7 +1244,7 @@ ucgetnumber(unsigned long code)
}
int
ucgetdigit(unsigned long code)
ucgetdigit(ac_uint4 code)
{
int dig;
@ -1343,7 +1343,7 @@ void
main(void)
{
int dig;
unsigned long i, lo, *dec;
ac_uint4 i, lo, *dec;
struct ucnumber num;
ucdata_setup(".");

View file

@ -120,8 +120,7 @@ LDAP_BEGIN_DECL
* call this function with some set of masks.
*/
LDAP_LUNICODE_F (int)
ucisprop LDAP_P((unsigned long code, unsigned long mask1,
unsigned long mask2));
ucisprop LDAP_P((ac_uint4 code, ac_uint4 mask1, ac_uint4 mask2));
#define ucisalpha(cc) ucisprop(cc, UC_LU|UC_LL|UC_LM|UC_LO|UC_LT, 0)
#define ucisdigit(cc) ucisprop(cc, UC_ND, 0)
@ -210,9 +209,9 @@ ucisprop LDAP_P((unsigned long code, unsigned long mask1,
*
**************************************************************************/
LDAP_LUNICODE_F (unsigned long) uctoupper LDAP_P((unsigned long code));
LDAP_LUNICODE_F (unsigned long) uctolower LDAP_P((unsigned long code));
LDAP_LUNICODE_F (unsigned long) uctotitle LDAP_P((unsigned long code));
LDAP_LUNICODE_F (ac_uint4) uctoupper LDAP_P((ac_uint4 code));
LDAP_LUNICODE_F (ac_uint4) uctolower LDAP_P((ac_uint4 code));
LDAP_LUNICODE_F (ac_uint4) uctotitle LDAP_P((ac_uint4 code));
/**************************************************************************
*
@ -225,20 +224,20 @@ LDAP_LUNICODE_F (unsigned long) uctotitle LDAP_P((unsigned long code));
* If it returns 0, there is no composition. Any other value indicates a
* composition was returned in comp.
*/
LDAP_LUNICODE_F (int) uccomp LDAP_P((unsigned long node1, unsigned long node2,
unsigned long *comp));
LDAP_LUNICODE_F (int) uccomp LDAP_P((ac_uint4 node1, ac_uint4 node2,
ac_uint4 *comp));
/*
* Does Hangul composition on the string str with length len, and returns
* the length of the composed string.
*/
LDAP_LUNICODE_F (int) uccomp_hangul LDAP_P((unsigned long *str, int len));
LDAP_LUNICODE_F (int) uccomp_hangul LDAP_P((ac_uint4 *str, int len));
/*
* Does canonical composition on the string str with length len, and returns
* the length of the composed string.
*/
LDAP_LUNICODE_F (int) uccanoncomp LDAP_P((unsigned long *str, int len));
LDAP_LUNICODE_F (int) uccanoncomp LDAP_P((ac_uint4 *str, int len));
/**************************************************************************
*
@ -252,24 +251,24 @@ LDAP_LUNICODE_F (int) uccanoncomp LDAP_P((unsigned long *str, int len));
* returned.
*/
LDAP_LUNICODE_F (int)
ucdecomp LDAP_P((unsigned long code, unsigned long *num,
unsigned long **decomp));
ucdecomp LDAP_P((ac_uint4 code, ac_uint4 *num,
ac_uint4 **decomp));
/*
* Equivalent to ucdecomp() except that it includes compatibility
* decompositions.
*/
LDAP_LUNICODE_F (int)
uckdecomp LDAP_P((unsigned long code, unsigned long *num,
unsigned long **decomp));
uckdecomp LDAP_P((ac_uint4 code, ac_uint4 *num,
ac_uint4 **decomp));
/*
* If the code is a Hangul syllable, this routine decomposes it into the array
* passed. The array size should be at least 3.
*/
LDAP_LUNICODE_F (int)
ucdecomp_hangul LDAP_P((unsigned long code, unsigned long *num,
unsigned long decomp[]));
ucdecomp_hangul LDAP_P((ac_uint4 code, ac_uint4 *num,
ac_uint4 decomp[]));
/*
* This routine does canonical decomposition of the string in of length
@ -278,16 +277,16 @@ ucdecomp_hangul LDAP_P((unsigned long code, unsigned long *num,
* of the decomposed string if okay, and -1 on error.
*/
LDAP_LUNICODE_F (int)
uccanondecomp LDAP_P((const unsigned long *in, int inlen,
unsigned long **out, int *outlen, void *ctx));
uccanondecomp LDAP_P((const ac_uint4 *in, int inlen,
ac_uint4 **out, int *outlen, void *ctx));
/*
* Equivalent to uccanondecomp() except that it includes compatibility
* decompositions.
*/
LDAP_LUNICODE_F (int)
uccompatdecomp LDAP_P((const unsigned long *in, int inlen,
unsigned long **out, int *outlen, void *ctx));
uccompatdecomp LDAP_P((const ac_uint4 *in, int inlen,
ac_uint4 **out, int *outlen, void *ctx));
/**************************************************************************
*
@ -299,7 +298,7 @@ uccompatdecomp LDAP_P((const unsigned long *in, int inlen,
* This will return the combining class for a character to be used with the
* Canonical Ordering algorithm.
*/
LDAP_LUNICODE_F (unsigned long) uccombining_class LDAP_P((unsigned long code));
LDAP_LUNICODE_F (ac_uint4) uccombining_class LDAP_P((ac_uint4 code));
/**************************************************************************
*
@ -313,16 +312,16 @@ struct ucnumber {
};
LDAP_LUNICODE_F (int)
ucnumber_lookup LDAP_P((unsigned long code, struct ucnumber *num));
ucnumber_lookup LDAP_P((ac_uint4 code, struct ucnumber *num));
LDAP_LUNICODE_F (int)
ucdigit_lookup LDAP_P((unsigned long code, int *digit));
ucdigit_lookup LDAP_P((ac_uint4 code, int *digit));
/*
* For compatibility with John Cowan's "uctype" package.
*/
LDAP_LUNICODE_F (struct ucnumber) ucgetnumber LDAP_P((unsigned long code));
LDAP_LUNICODE_F (int) ucgetdigit LDAP_P((unsigned long code));
LDAP_LUNICODE_F (struct ucnumber) ucgetnumber LDAP_P((ac_uint4 code));
LDAP_LUNICODE_F (int) ucgetdigit LDAP_P((ac_uint4 code));
/**************************************************************************
*

View file

@ -55,7 +55,7 @@
* A header written to the output file with the byte-order-mark and the number
* of property nodes.
*/
static unsigned short hdr[2] = {0xfeff, 0};
static ac_uint2 hdr[2] = {0xfeff, 0};
#define NUMPROPS 50
#define NEEDPROPS (NUMPROPS + (4 - (NUMPROPS & 3)))
@ -92,9 +92,9 @@ static _prop_t props[NUMPROPS] = {
};
typedef struct {
unsigned long *ranges;
unsigned short used;
unsigned short size;
ac_uint4 *ranges;
ac_uint2 used;
ac_uint2 size;
} _ranges_t;
static _ranges_t proptbl[NUMPROPS];
@ -102,20 +102,20 @@ static _ranges_t proptbl[NUMPROPS];
/*
* Make sure this array is sized to be on a 4-byte boundary at compile time.
*/
static unsigned short propcnt[NEEDPROPS];
static ac_uint2 propcnt[NEEDPROPS];
/*
* Array used to collect a decomposition before adding it to the decomposition
* table.
*/
static unsigned long dectmp[64];
static unsigned long dectmp_size;
static ac_uint4 dectmp[64];
static ac_uint4 dectmp_size;
typedef struct {
unsigned long code;
unsigned short size;
unsigned short used;
unsigned long *decomp;
ac_uint4 code;
ac_uint2 size;
ac_uint2 used;
ac_uint4 *decomp;
} _decomp_t;
/*
@ -124,70 +124,70 @@ typedef struct {
* compatibility mappings.
*/
static _decomp_t *decomps;
static unsigned long decomps_used;
static unsigned long decomps_size;
static ac_uint4 decomps_used;
static ac_uint4 decomps_size;
static _decomp_t *kdecomps;
static unsigned long kdecomps_used;
static unsigned long kdecomps_size;
static ac_uint4 kdecomps_used;
static ac_uint4 kdecomps_size;
/*
* Composition exclusion table stuff.
*/
#define COMPEX_SET(c) (compexs[(c) >> 5] |= (1 << ((c) & 31)))
#define COMPEX_TEST(c) (compexs[(c) >> 5] & (1 << ((c) & 31)))
static unsigned long compexs[2048];
static ac_uint4 compexs[2048];
/*
* Struct for holding a composition pair, and array of composition pairs
*/
typedef struct {
unsigned long comp;
unsigned long count;
unsigned long code1;
unsigned long code2;
ac_uint4 comp;
ac_uint4 count;
ac_uint4 code1;
ac_uint4 code2;
} _comp_t;
static _comp_t *comps;
static unsigned long comps_used;
static ac_uint4 comps_used;
/*
* Types and lists for handling lists of case mappings.
*/
typedef struct {
unsigned long key;
unsigned long other1;
unsigned long other2;
ac_uint4 key;
ac_uint4 other1;
ac_uint4 other2;
} _case_t;
static _case_t *upper;
static _case_t *lower;
static _case_t *title;
static unsigned long upper_used;
static unsigned long upper_size;
static unsigned long lower_used;
static unsigned long lower_size;
static unsigned long title_used;
static unsigned long title_size;
static ac_uint4 upper_used;
static ac_uint4 upper_size;
static ac_uint4 lower_used;
static ac_uint4 lower_size;
static ac_uint4 title_used;
static ac_uint4 title_size;
/*
* Array used to collect case mappings before adding them to a list.
*/
static unsigned long cases[3];
static ac_uint4 cases[3];
/*
* An array to hold ranges for combining classes.
*/
static unsigned long *ccl;
static unsigned long ccl_used;
static unsigned long ccl_size;
static ac_uint4 *ccl;
static ac_uint4 ccl_used;
static ac_uint4 ccl_size;
/*
* Structures for handling numbers.
*/
typedef struct {
unsigned long code;
unsigned long idx;
ac_uint4 code;
ac_uint4 idx;
} _codeidx_t;
typedef struct {
@ -199,22 +199,22 @@ typedef struct {
* Arrays to hold the mapping of codes to numbers.
*/
static _codeidx_t *ncodes;
static unsigned long ncodes_used;
static unsigned long ncodes_size;
static ac_uint4 ncodes_used;
static ac_uint4 ncodes_size;
static _num_t *nums;
static unsigned long nums_used;
static unsigned long nums_size;
static ac_uint4 nums_used;
static ac_uint4 nums_size;
/*
* Array for holding numbers.
*/
static _num_t *nums;
static unsigned long nums_used;
static unsigned long nums_size;
static ac_uint4 nums_used;
static ac_uint4 nums_size;
static void
add_range(unsigned long start, unsigned long end, char *p1, char *p2)
add_range(ac_uint4 start, ac_uint4 end, char *p1, char *p2)
{
int i, j, k, len;
_ranges_t *rlp;
@ -247,12 +247,12 @@ add_range(unsigned long start, unsigned long end, char *p1, char *p2)
*/
if (rlp->used == rlp->size) {
if (rlp->size == 0)
rlp->ranges = (unsigned long *)
malloc(sizeof(unsigned long) << 3);
rlp->ranges = (ac_uint4 *)
malloc(sizeof(ac_uint4) << 3);
else
rlp->ranges = (unsigned long *)
rlp->ranges = (ac_uint4 *)
realloc((char *) rlp->ranges,
sizeof(unsigned long) * (rlp->size + 8));
sizeof(ac_uint4) * (rlp->size + 8));
rlp->size += 8;
}
@ -312,10 +312,10 @@ add_range(unsigned long start, unsigned long end, char *p1, char *p2)
}
static void
ordered_range_insert(unsigned long c, char *name, int len)
ordered_range_insert(ac_uint4 c, char *name, int len)
{
int i, j;
unsigned long s, e;
ac_uint4 s, e;
_ranges_t *rlp;
if (len == 0)
@ -355,12 +355,12 @@ ordered_range_insert(unsigned long c, char *name, int len)
*/
if (rlp->used == rlp->size) {
if (rlp->size == 0)
rlp->ranges = (unsigned long *)
malloc(sizeof(unsigned long) << 3);
rlp->ranges = (ac_uint4 *)
malloc(sizeof(ac_uint4) << 3);
else
rlp->ranges = (unsigned long *)
rlp->ranges = (ac_uint4 *)
realloc((char *) rlp->ranges,
sizeof(unsigned long) * (rlp->size + 8));
sizeof(ac_uint4) * (rlp->size + 8));
rlp->size += 8;
}
@ -437,12 +437,12 @@ ordered_range_insert(unsigned long c, char *name, int len)
}
static void
add_decomp(unsigned long code, short compat)
add_decomp(ac_uint4 code, short compat)
{
unsigned long i, j, size;
ac_uint4 i, j, size;
_decomp_t **pdecomps;
unsigned long *pdecomps_used;
unsigned long *pdecomps_size;
ac_uint4 *pdecomps_used;
ac_uint4 *pdecomps_size;
if (compat) {
pdecomps = &kdecomps;
@ -496,12 +496,12 @@ add_decomp(unsigned long code, short compat)
size = dectmp_size + (4 - (dectmp_size & 3));
if ((*pdecomps)[i].size < size) {
if ((*pdecomps)[i].size == 0)
(*pdecomps)[i].decomp = (unsigned long *)
malloc(sizeof(unsigned long) * size);
(*pdecomps)[i].decomp = (ac_uint4 *)
malloc(sizeof(ac_uint4) * size);
else
(*pdecomps)[i].decomp = (unsigned long *)
(*pdecomps)[i].decomp = (ac_uint4 *)
realloc((char *) (*pdecomps)[i].decomp,
sizeof(unsigned long) * size);
sizeof(ac_uint4) * size);
(*pdecomps)[i].size = size;
}
@ -511,7 +511,7 @@ add_decomp(unsigned long code, short compat)
(*pdecomps)[i].code = code;
(*pdecomps)[i].used = dectmp_size;
(void) AC_MEMCPY((char *) (*pdecomps)[i].decomp, (char *) dectmp,
sizeof(unsigned long) * dectmp_size);
sizeof(ac_uint4) * dectmp_size);
/*
* NOTICE: This needs changing later so it is more general than simply
@ -522,9 +522,9 @@ add_decomp(unsigned long code, short compat)
}
static void
add_title(unsigned long code)
add_title(ac_uint4 code)
{
unsigned long i, j;
ac_uint4 i, j;
/*
* Always map the code to itself.
@ -562,9 +562,9 @@ add_title(unsigned long code)
}
static void
add_upper(unsigned long code)
add_upper(ac_uint4 code)
{
unsigned long i, j;
ac_uint4 i, j;
/*
* Always map the code to itself.
@ -609,9 +609,9 @@ add_upper(unsigned long code)
}
static void
add_lower(unsigned long code)
add_lower(ac_uint4 code)
{
unsigned long i, j;
ac_uint4 i, j;
/*
* Always map the code to itself.
@ -656,16 +656,16 @@ add_lower(unsigned long code)
}
static void
ordered_ccl_insert(unsigned long c, unsigned long ccl_code)
ordered_ccl_insert(ac_uint4 c, ac_uint4 ccl_code)
{
unsigned long i, j;
ac_uint4 i, j;
if (ccl_used == ccl_size) {
if (ccl_size == 0)
ccl = (unsigned long *) malloc(sizeof(unsigned long) * 24);
ccl = (ac_uint4 *) malloc(sizeof(ac_uint4) * 24);
else
ccl = (unsigned long *)
realloc((char *) ccl, sizeof(unsigned long) * (ccl_size + 24));
ccl = (ac_uint4 *)
realloc((char *) ccl, sizeof(ac_uint4) * (ccl_size + 24));
ccl_size += 24;
}
@ -728,10 +728,10 @@ ordered_ccl_insert(unsigned long c, unsigned long ccl_code)
* Adds a number if it does not already exist and returns an index value
* multiplied by 2.
*/
static unsigned long
static ac_uint4
make_number(short num, short denom)
{
unsigned long n;
ac_uint4 n;
/*
* Determine if the number already exists.
@ -758,9 +758,9 @@ make_number(short num, short denom)
}
static void
add_number(unsigned long code, short num, short denom)
add_number(ac_uint4 code, short num, short denom)
{
unsigned long i, j;
ac_uint4 i, j;
/*
* Insert the code in order.
@ -811,7 +811,7 @@ add_number(unsigned long code, short num, short denom)
static void
read_cdata(FILE *in)
{
unsigned long i, lineno, skip, code, ccl_code;
ac_uint4 i, lineno, skip, code, ccl_code;
short wnum, neg, number[2], compat;
char line[512], *s, *e;
@ -1096,7 +1096,7 @@ read_cdata(FILE *in)
}
static _decomp_t *
find_decomp(unsigned long code, short compat)
find_decomp(ac_uint4 code, short compat)
{
long l, r, m;
_decomp_t *decs;
@ -1119,7 +1119,7 @@ find_decomp(unsigned long code, short compat)
static void
decomp_it(_decomp_t *d, short compat)
{
unsigned long i;
ac_uint4 i;
_decomp_t *dp;
for (i = 0; i < d->used; i++) {
@ -1137,7 +1137,7 @@ decomp_it(_decomp_t *d, short compat)
static void
expand_decomp(void)
{
unsigned long i;
ac_uint4 i;
for (i = 0; i < decomps_used; i++) {
dectmp_size = 0;
@ -1171,10 +1171,10 @@ cmpcomps(const void *v_comp1, const void *v_comp2)
static void
read_compexdata(FILE *in)
{
unsigned short i, code;
ac_uint2 i, code;
char line[512], *s;
(void) memset((char *) compexs, 0, sizeof(unsigned long) << 11);
(void) memset((char *) compexs, 0, sizeof(ac_uint4) << 11);
while (fgets(line, sizeof(line), in)) {
if( (s=strchr(line, '\n')) ) *s = '\0';
@ -1207,7 +1207,7 @@ read_compexdata(FILE *in)
static void
create_comps(void)
{
unsigned long i, cu;
ac_uint4 i, cu;
comps = (_comp_t *) malloc(comps_used * sizeof(_comp_t));
@ -1229,8 +1229,8 @@ write_cdata(char *opath)
{
FILE *out;
ac_uint4 bytes;
unsigned long i, idx, nprops;
unsigned short casecnt[2];
ac_uint4 i, idx, nprops;
ac_uint2 casecnt[2];
char path[BUFSIZ];
/*****************************************************************
@ -1273,10 +1273,10 @@ write_cdata(char *opath)
* Calculate the byte count needed and pad the property counts array to a
* 4-byte boundary.
*/
if ((bytes = sizeof(unsigned short) * (NUMPROPS + 1)) & 3)
if ((bytes = sizeof(ac_uint2) * (NUMPROPS + 1)) & 3)
bytes += 4 - (bytes & 3);
nprops = bytes / sizeof(unsigned short);
bytes += sizeof(unsigned long) * idx;
nprops = bytes / sizeof(ac_uint2);
bytes += sizeof(ac_uint4) * idx;
/*
* Write the header.
@ -1286,19 +1286,19 @@ write_cdata(char *opath)
/*
* Write the byte count.
*/
fwrite((char *) &bytes, sizeof(unsigned long), 1, out);
fwrite((char *) &bytes, sizeof(ac_uint4), 1, out);
/*
* Write the property list counts.
*/
fwrite((char *) propcnt, sizeof(unsigned short), nprops, out);
fwrite((char *) propcnt, sizeof(ac_uint2), nprops, out);
/*
* Write the property lists.
*/
for (i = 0; i < NUMPROPS; i++) {
if (proptbl[i].used > 0)
fwrite((char *) proptbl[i].ranges, sizeof(unsigned long),
fwrite((char *) proptbl[i].ranges, sizeof(ac_uint4),
proptbl[i].used, out);
}
@ -1327,12 +1327,12 @@ write_cdata(char *opath)
/*
* Write the header.
*/
fwrite((char *) hdr, sizeof(unsigned short), 2, out);
fwrite((char *) hdr, sizeof(ac_uint2), 2, out);
/*
* Write the upper and lower case table sizes.
*/
fwrite((char *) casecnt, sizeof(unsigned short), 2, out);
fwrite((char *) casecnt, sizeof(ac_uint2), 2, out);
if (upper_used > 0)
/*
@ -1375,14 +1375,14 @@ write_cdata(char *opath)
/*
* Write the header.
*/
hdr[1] = (unsigned short) comps_used * 4;
fwrite((char *) hdr, sizeof(unsigned short), 2, out);
hdr[1] = (ac_uint2) comps_used * 4;
fwrite((char *) hdr, sizeof(ac_uint2), 2, out);
/*
* Write out the byte count to maintain header size.
*/
bytes = comps_used * sizeof(_comp_t);
fwrite((char *) &bytes, sizeof(unsigned long), 1, out);
fwrite((char *) &bytes, sizeof(ac_uint4), 1, out);
/*
* Now, if comps exist, write them out.
@ -1415,44 +1415,44 @@ write_cdata(char *opath)
/*
* Write the header.
*/
fwrite((char *) hdr, sizeof(unsigned short), 2, out);
fwrite((char *) hdr, sizeof(ac_uint2), 2, out);
/*
* Write a temporary byte count which will be calculated as the
* decompositions are written out.
*/
bytes = 0;
fwrite((char *) &bytes, sizeof(unsigned long), 1, out);
fwrite((char *) &bytes, sizeof(ac_uint4), 1, out);
if (decomps_used) {
/*
* Write the list of decomp nodes.
*/
for (i = idx = 0; i < decomps_used; i++) {
fwrite((char *) &decomps[i].code, sizeof(unsigned long), 1, out);
fwrite((char *) &idx, sizeof(unsigned long), 1, out);
fwrite((char *) &decomps[i].code, sizeof(ac_uint4), 1, out);
fwrite((char *) &idx, sizeof(ac_uint4), 1, out);
idx += decomps[i].used;
}
/*
* Write the sentinel index as the last decomp node.
*/
fwrite((char *) &idx, sizeof(unsigned long), 1, out);
fwrite((char *) &idx, sizeof(ac_uint4), 1, out);
/*
* Write the decompositions themselves.
*/
for (i = 0; i < decomps_used; i++)
fwrite((char *) decomps[i].decomp, sizeof(unsigned long),
fwrite((char *) decomps[i].decomp, sizeof(ac_uint4),
decomps[i].used, out);
/*
* Seek back to the beginning and write the byte count.
*/
bytes = (sizeof(unsigned long) * idx) +
(sizeof(unsigned long) * ((hdr[1] << 1) + 1));
fseek(out, sizeof(unsigned short) << 1, 0L);
fwrite((char *) &bytes, sizeof(unsigned long), 1, out);
bytes = (sizeof(ac_uint4) * idx) +
(sizeof(ac_uint4) * ((hdr[1] << 1) + 1));
fseek(out, sizeof(ac_uint2) << 1, 0L);
fwrite((char *) &bytes, sizeof(ac_uint4), 1, out);
fclose(out);
}
@ -1469,44 +1469,44 @@ write_cdata(char *opath)
/*
* Write the header.
*/
fwrite((char *) hdr, sizeof(unsigned short), 2, out);
fwrite((char *) hdr, sizeof(ac_uint2), 2, out);
/*
* Write a temporary byte count which will be calculated as the
* decompositions are written out.
*/
bytes = 0;
fwrite((char *) &bytes, sizeof(unsigned long), 1, out);
fwrite((char *) &bytes, sizeof(ac_uint4), 1, out);
if (kdecomps_used) {
/*
* Write the list of kdecomp nodes.
*/
for (i = idx = 0; i < kdecomps_used; i++) {
fwrite((char *) &kdecomps[i].code, sizeof(unsigned long), 1, out);
fwrite((char *) &idx, sizeof(unsigned long), 1, out);
fwrite((char *) &kdecomps[i].code, sizeof(ac_uint4), 1, out);
fwrite((char *) &idx, sizeof(ac_uint4), 1, out);
idx += kdecomps[i].used;
}
/*
* Write the sentinel index as the last decomp node.
*/
fwrite((char *) &idx, sizeof(unsigned long), 1, out);
fwrite((char *) &idx, sizeof(ac_uint4), 1, out);
/*
* Write the decompositions themselves.
*/
for (i = 0; i < kdecomps_used; i++)
fwrite((char *) kdecomps[i].decomp, sizeof(unsigned long),
fwrite((char *) kdecomps[i].decomp, sizeof(ac_uint4),
kdecomps[i].used, out);
/*
* Seek back to the beginning and write the byte count.
*/
bytes = (sizeof(unsigned long) * idx) +
(sizeof(unsigned long) * ((hdr[1] << 1) + 1));
fseek(out, sizeof(unsigned short) << 1, 0L);
fwrite((char *) &bytes, sizeof(unsigned long), 1, out);
bytes = (sizeof(ac_uint4) * idx) +
(sizeof(ac_uint4) * ((hdr[1] << 1) + 1));
fseek(out, sizeof(ac_uint2) << 1, 0L);
fwrite((char *) &bytes, sizeof(ac_uint4), 1, out);
fclose(out);
}
@ -1533,19 +1533,19 @@ write_cdata(char *opath)
/*
* Write the header.
*/
fwrite((char *) hdr, sizeof(unsigned short), 2, out);
fwrite((char *) hdr, sizeof(ac_uint2), 2, out);
/*
* Write out the byte count to maintain header size.
*/
bytes = ccl_used * sizeof(unsigned long);
fwrite((char *) &bytes, sizeof(unsigned long), 1, out);
bytes = ccl_used * sizeof(ac_uint4);
fwrite((char *) &bytes, sizeof(ac_uint4), 1, out);
if (ccl_used > 0)
/*
* Write the combining class ranges out.
*/
fwrite((char *) ccl, sizeof(unsigned long), ccl_used, out);
fwrite((char *) ccl, sizeof(ac_uint4), ccl_used, out);
fclose(out);
@ -1566,18 +1566,18 @@ write_cdata(char *opath)
* The count part of the header will be the total number of codes that
* have numbers.
*/
hdr[1] = (unsigned short) (ncodes_used << 1);
hdr[1] = (ac_uint2) (ncodes_used << 1);
bytes = (ncodes_used * sizeof(_codeidx_t)) + (nums_used * sizeof(_num_t));
/*
* Write the header.
*/
fwrite((char *) hdr, sizeof(unsigned short), 2, out);
fwrite((char *) hdr, sizeof(ac_uint2), 2, out);
/*
* Write out the byte count to maintain header size.
*/
fwrite((char *) &bytes, sizeof(unsigned long), 1, out);
fwrite((char *) &bytes, sizeof(ac_uint4), 1, out);
/*
* Now, if number mappings exist, write them out.

View file

@ -15,6 +15,7 @@
#include "portable.h"
#include <ac/bytes.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/stdlib.h>
@ -109,7 +110,7 @@ struct berval * UTF8bvnormalize(
{
int i, j, len, clen, outpos, ucsoutlen, outsize, last;
char *out, *outtmp, *s;
unsigned long *ucs, *p, *ucsout;
ac_uint4 *ucs, *p, *ucsout;
static unsigned char mask[] = {
0, 0x7f, 0x1f, 0x0f, 0x07, 0x03, 0x01 };
@ -302,7 +303,7 @@ int UTF8bvnormcmp(
{
int i, l1, l2, len, ulen, res = 0;
char *s1, *s2, *done;
unsigned long *ucs, *ucsout1, *ucsout2;
ac_uint4 *ucs, *ucsout1, *ucsout2;
unsigned casefold = flags & LDAP_UTF8_CASEFOLD;
unsigned norm1 = flags & LDAP_UTF8_ARG1NFC;
@ -382,7 +383,7 @@ int UTF8bvnormcmp(
/*
* XXYYZ: we convert to ucs4 even though -llunicode
* expects ucs2 in an unsigned long
* expects ucs2 in an ac_uint4
*/
/* convert and normalize 1st string */

View file

@ -36,6 +36,9 @@
*/
/* $Id: urestubs.c,v 1.2 1999/09/21 15:47:44 mleisher Exp $" */
#include "portable.h"
#include <ac/bytes.h>
#include "ure.h"
#ifdef _MSC_VER

View file

@ -57,6 +57,9 @@ lutil_csnstr(char *buf, size_t len, unsigned int replica, unsigned int mod)
time_t t;
unsigned int op;
struct tm *ltm;
#ifdef HAVE_GMTIME_R
struct tm ltm_buf;
#endif
int n;
time( &t );
@ -66,7 +69,11 @@ lutil_csnstr(char *buf, size_t len, unsigned int replica, unsigned int mod)
}
op = ++csnop;
#ifdef HAVE_GMTIME_R
ltm = gmtime_r( &t, &ltm_buf );
#else
ltm = gmtime( &t );
#endif
n = snprintf( buf, len,
"%4d%02d%02d%02d%02d%02dZ#%06x#%02x#%06x",
ltm->tm_year + 1900, ltm->tm_mon + 1, ltm->tm_mday, ltm->tm_hour,

View file

@ -1,5 +1,4 @@
/* $OpenLDAP$ */
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 1998-2003 The OpenLDAP Foundation.
@ -102,6 +101,8 @@ struct pw_slist {
/* password check routines */
#define SALT_SIZE 4
static LUTIL_PASSWD_CHK_FUNC chk_md5;
static LUTIL_PASSWD_CHK_FUNC chk_smd5;
static LUTIL_PASSWD_HASH_FUNC hash_smd5;
@ -484,7 +485,8 @@ static int chk_ssha1(
unsigned char *orig_pass = NULL;
/* safety check */
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <= sizeof(SHA1digest)) {
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <
sizeof(SHA1digest)+SALT_SIZE) {
return -1;
}
@ -496,7 +498,7 @@ static int chk_ssha1(
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
if (rc < 0 || (unsigned)rc <= sizeof(SHA1digest)) {
if (rc < (int)(sizeof(SHA1digest)+SALT_SIZE)) {
ber_memfree(orig_pass);
return -1;
}
@ -527,6 +529,11 @@ static int chk_sha1(
int rc;
unsigned char *orig_pass = NULL;
/* safety check */
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) < sizeof(SHA1digest)) {
return -1;
}
/* base64 un-encode password */
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
@ -565,7 +572,8 @@ static int chk_smd5(
unsigned char *orig_pass = NULL;
/* safety check */
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <= sizeof(MD5digest)) {
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <
sizeof(MD5digest)+SALT_SIZE) {
return -1;
}
@ -577,7 +585,7 @@ static int chk_smd5(
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
if (rc < 0 || (unsigned)rc <= sizeof(MD5digest)) {
if (rc < (int)(sizeof(MD5digest)+SALT_SIZE)) {
ber_memfree(orig_pass);
return -1;
}
@ -609,6 +617,11 @@ static int chk_md5(
int rc;
unsigned char *orig_pass = NULL;
/* safety check */
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) < sizeof(MD5digest)) {
return -1;
}
/* base64 un-encode password */
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
@ -1174,7 +1187,7 @@ static struct berval *hash_ssha1(
{
lutil_SHA1_CTX SHA1context;
unsigned char SHA1digest[LUTIL_SHA1_BYTES];
char saltdata[4];
char saltdata[SALT_SIZE];
struct berval digest;
struct berval salt;
@ -1224,7 +1237,7 @@ static struct berval *hash_smd5(
{
lutil_MD5_CTX MD5context;
unsigned char MD5digest[LUTIL_MD5_BYTES];
char saltdata[4];
char saltdata[SALT_SIZE];
struct berval digest;
struct berval salt;

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,29 +1,25 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>
#define LDAP_DEPRECATED 1
#include "rewrite-int.h"
#include "rewrite-map.h"

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#ifndef REWRITE_INT_H
#define REWRITE_INT_H

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#ifndef MAP_H
#define MAP_H

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>

View file

@ -1,26 +1,21 @@
/******************************************************************************
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
******************************************************************************/
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
/* ACKNOWLEDGEMENT:
* This work was initially developed by Pierangelo Masarati for
* inclusion in OpenLDAP Software.
*/
#include <portable.h>
@ -30,6 +25,7 @@
#include <pwd.h>
#endif
#define LDAP_DEPRECATED 1
#include "rewrite-int.h"
#include "rewrite-map.h"

View file

@ -14,9 +14,11 @@
## <http://www.OpenLDAP.org/license.html>.
PROGRAMS=slapd
XPROGRAMS=sslapd libbackends.a .backend
XPROGRAMS=sslapd libbackends.a .backend liboverlays.a
XSRCS=version.c
SUBDIRS=back-* shell-backends slapi overlays tools
NT_SRCS = nt_svc.c
NT_OBJS = nt_svc.o ../../libraries/liblutil/slapdmsg.res
@ -52,7 +54,7 @@ LDAP_INCDIR= ../../include -I$(srcdir)/slapi
LDAP_LIBDIR= ../../libraries
SLAP_DIR=
SLAPD_STATIC_DEPENDS=@SLAPD_NO_STATIC@ libbackends.a
SLAPD_STATIC_DEPENDS=@SLAPD_NO_STATIC@ libbackends.a liboverlays.a
SLAPD_STATIC_BACKENDS=@SLAPD_STATIC_BACKENDS@
SLAPD_DYNAMIC_BACKENDS=@SLAPD_DYNAMIC_BACKENDS@
@ -297,6 +299,9 @@ libbackends.a: .backend
fi
@ls -l libbackends.a; echo ""
liboverlays.a: FORCE
@cd overlays; $(MAKE) $(MFLAGS) all
version.c: Makefile
@-$(RM) $@
$(MKVERSION) -s -n Versionstr slapd > $@
@ -304,7 +309,7 @@ version.c: Makefile
version.o: version.c $(OBJS) $(SLAPD_LIBDEPEND)
depend-local-srv: FORCE
@for i in back-* shell-backends slapi tools; do \
@for i in $(SUBDIRS); do \
if test -d $$i -a -f $$i/Makefile ; then \
echo; echo " cd $$i; $(MAKE) $(MFLAGS) depend"; \
( cd $$i; $(MAKE) $(MFLAGS) depend ); \
@ -317,7 +322,7 @@ clean-local:
rm -f *.exp *.def *.base *.a *.objs symdummy.c
clean-local-srv: FORCE
@for i in back-* shell-backends slapi tools; do \
@for i in $(SUBDIRS); do \
if test -d $$i -a -f $$i/Makefile ; then \
echo; echo " cd $$i; $(MAKE) $(MFLAGS) clean"; \
( cd $$i; $(MAKE) $(MFLAGS) clean ); \
@ -327,7 +332,7 @@ clean-local-srv: FORCE
rm -f *.tmp all-cffiles
veryclean-local-srv: FORCE
@for i in back-* shell-backends slapi tools; do \
@for i in $(SUBDIRS); do \
if test -d $$i -a -f $$i/Makefile ; then \
echo; echo " cd $$i; $(MAKE) $(MFLAGS) clean"; \
( cd $$i; $(MAKE) $(MFLAGS) veryclean ); \
@ -341,7 +346,7 @@ install-slapd: FORCE
-$(MKDIR) $(DESTDIR)$(localstatedir)
$(LTINSTALL) $(INSTALLFLAGS) -s -m 755 \
slapd$(EXEEXT) $(DESTDIR)$(libexecdir)
@for i in back-* shell-backends slapi tools; do \
@for i in $(SUBDIRS); do \
if test -d $$i -a -f $$i/Makefile ; then \
echo; echo " cd $$i; $(MAKE) $(MFLAGS) install"; \
( cd $$i; $(MAKE) $(MFLAGS) install ); \

View file

@ -588,15 +588,15 @@ int
slap_entry2mods(
Entry *e,
Modifications **mods,
const char **text
)
const char **text,
char *textbuf, size_t textlen )
{
Modifications *modhead = NULL;
Modifications *mod;
Modifications **modtail = &modhead;
Attribute *a_new;
AttributeDescription *a_new_desc;
int i, count, rc;
int i, count;
a_new = e->e_attrs;
@ -604,12 +604,9 @@ slap_entry2mods(
a_new_desc = a_new->a_desc;
mod = (Modifications *) malloc( sizeof( Modifications ));
if ( a_new_desc != slap_schema.si_ad_queryid )
mod->sml_op = LDAP_MOD_REPLACE;
else
mod->sml_op = LDAP_MOD_ADD;
mod->sml_op = LDAP_MOD_REPLACE;
ber_dupbv( &mod->sml_type, &a_new_desc->ad_cname );
mod->sml_type = a_new_desc->ad_cname;
for ( count = 0; a_new->a_vals[count].bv_val; count++ );
@ -675,16 +672,20 @@ static int doPreAddPluginFNs( Operation *op )
* entire operation.
*/
#ifdef NEW_LOGGING
LDAP_LOG( OPERATION, INFO, "do_add: add preoperation plugin failed\n",
0, 0, 0);
LDAP_LOG( OPERATION, INFO,
"do_add: add preoperation plugin failed\n",
0, 0, 0);
#else
Debug(LDAP_DEBUG_TRACE, "do_add: add preoperation plugin failed.\n",
0, 0, 0);
if ( ( slapi_pblock_get( op->o_pb, SLAPI_RESULT_CODE, (void *)&rc ) != 0 ) ||
rc == LDAP_SUCCESS ) {
Debug(LDAP_DEBUG_TRACE,
"do_add: add preoperation plugin failed.\n",
0, 0, 0);
#endif
if (( slapi_pblock_get( op->o_pb, SLAPI_RESULT_CODE,
(void *)&rc ) != 0 ) || rc == LDAP_SUCCESS )
{
rc = LDAP_OTHER;
}
#endif
} else {
rc = LDAP_SUCCESS;
}
@ -699,11 +700,13 @@ static void doPostAddPluginFNs( Operation *op )
rc = doPluginFNs( op->o_bd, SLAPI_PLUGIN_POST_ADD_FN, op->o_pb );
if ( rc < 0 ) {
#ifdef NEW_LOGGING
LDAP_LOG( OPERATION, INFO, "do_add: add postoperation plugin failed\n",
0, 0, 0);
LDAP_LOG( OPERATION, INFO,
"do_add: add postoperation plugin failed\n",
0, 0, 0);
#else
Debug(LDAP_DEBUG_TRACE, "do_add: add postoperation plugin failed.\n",
0, 0, 0);
Debug(LDAP_DEBUG_TRACE,
"do_add: add postoperation plugin failed\n",
0, 0, 0);
#endif
}
}

View file

@ -80,6 +80,13 @@ get_ava(
rc = slap_bv2ad( &type, &aa->aa_desc, text );
if( rc != LDAP_SUCCESS ) {
#ifdef NEW_LOGGING
LDAP_LOG( FILTER, ERR,
"get_ava: unknown attributeType %s\n", type.bv_val, 0, 0 );
#else
Debug( LDAP_DEBUG_FILTER,
"get_ava: unknown attributeType %s\n", type.bv_val, 0, 0 );
#endif
op->o_tmpfree( aa, op->o_tmpmemctx );
return rc;
}
@ -89,6 +96,13 @@ get_ava(
usage, &value, &aa->aa_value, text, op->o_tmpmemctx );
if( rc != LDAP_SUCCESS ) {
#ifdef NEW_LOGGING
LDAP_LOG( FILTER, ERR,
"get_ava: illegal value for attributeType %s\n", type.bv_val, 0, 0 );
#else
Debug( LDAP_DEBUG_FILTER,
"get_ava: illegal value for attributeType %s\n", type.bv_val, 0, 0 );
#endif
op->o_tmpfree( aa, op->o_tmpmemctx );
return rc;
}

View file

@ -15,14 +15,14 @@
SRCS = init.c tools.c config.c \
add.c bind.c compare.c delete.c modify.c modrdn.c search.c \
extended.c passwd.c referral.c operational.c \
extended.c referral.c operational.c \
attr.c index.c key.c dbcache.c filterindex.c \
dn2entry.c dn2id.c error.c id2entry.c idl.c \
nextid.c cache.c trans.c ctxcsn.c
OBJS = init.lo tools.lo config.lo \
add.lo bind.lo compare.lo delete.lo modify.lo modrdn.lo search.lo \
extended.lo passwd.lo referral.lo operational.lo \
extended.lo referral.lo operational.lo \
attr.lo index.lo key.lo dbcache.lo filterindex.lo \
dn2entry.lo dn2id.lo error.lo id2entry.lo idl.lo \
nextid.lo cache.lo trans.lo ctxcsn.lo

View file

@ -497,6 +497,14 @@ retry: /* transaction retry */
}
}
if ( rs->sr_err == LDAP_SUCCESS && !noop && !op->o_no_psearch ) {
ldap_pvt_thread_rdwr_rlock( &bdb->bi_pslist_rwlock );
LDAP_LIST_FOREACH ( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
bdb_psearch( op, rs, ps_list, op->oq_add.rs_e, LDAP_PSEARCH_BY_ADD );
}
ldap_pvt_thread_rdwr_runlock( &bdb->bi_pslist_rwlock );
}
if(( rs->sr_err=TXN_COMMIT( ltid, 0 )) != 0 ) {
rs->sr_text = "txn_commit failed";
} else {
@ -538,12 +546,6 @@ retry: /* transaction retry */
return_results:
send_ldap_result( op, rs );
if ( rs->sr_err == LDAP_SUCCESS && !noop && !op->o_no_psearch ) {
LDAP_LIST_FOREACH ( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
bdb_psearch( op, rs, ps_list, op->oq_add.rs_e, LDAP_PSEARCH_BY_ADD );
}
}
if( rs->sr_err == LDAP_SUCCESS && bdb->bi_txn_cp ) {
ldap_pvt_thread_yield();
TXN_CHECKPOINT( bdb->bi_dbenv,

View file

@ -171,7 +171,7 @@ struct bdb_info {
ID bi_lastid;
ldap_pvt_thread_mutex_t bi_lastid_mutex;
LDAP_LIST_HEAD(pl, slap_op) bi_psearch_list;
ldap_pvt_thread_mutex_t bi_pslist_mutex;
ldap_pvt_thread_rdwr_t bi_pslist_rwlock;
LDAP_LIST_HEAD(se, slap_session_entry) bi_session_list;
#ifdef SLAP_IDL_CACHE
int bi_idl_cache_max_size;

View file

@ -252,9 +252,7 @@ bdb_db_config(
/* anything else */
} else {
fprintf( stderr, "%s: line %d: "
"unknown directive \"%s\" in bdb database definition (ignored)\n",
fname, lineno, argv[0] );
return SLAP_CONF_UNKNOWN;
}
return 0;

View file

@ -521,6 +521,14 @@ retry: /* transaction retry */
}
}
if ( rs->sr_err == LDAP_SUCCESS && !noop && !op->o_no_psearch ) {
ldap_pvt_thread_rdwr_rlock( &bdb->bi_pslist_rwlock );
LDAP_LIST_FOREACH( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
bdb_psearch( op, rs, ps_list, e, LDAP_PSEARCH_BY_DELETE );
}
ldap_pvt_thread_rdwr_runlock( &bdb->bi_pslist_rwlock );
}
rs->sr_err = TXN_COMMIT( ltid, 0 );
}
ltid = NULL;
@ -560,12 +568,6 @@ retry: /* transaction retry */
return_results:
send_ldap_result( op, rs );
if ( rs->sr_err == LDAP_SUCCESS && !noop && !op->o_no_psearch ) {
LDAP_LIST_FOREACH( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
bdb_psearch( op, rs, ps_list, e, LDAP_PSEARCH_BY_DELETE );
}
}
if(rs->sr_err == LDAP_SUCCESS && bdb->bi_txn_cp ) {
ldap_pvt_thread_yield();
TXN_CHECKPOINT( bdb->bi_dbenv,

View file

@ -27,7 +27,6 @@ static struct exop {
struct berval *oid;
BI_op_extended *extended;
} exop_table[] = {
{ (struct berval *)&slap_EXOP_MODIFY_PASSWD, bdb_exop_passwd },
{ NULL, NULL }
};

View file

@ -164,7 +164,6 @@ static int indexer(
const char *text;
DB *db;
struct berval *keys;
void *mark;
assert( mask );
@ -183,10 +182,6 @@ static int indexer(
return LDAP_OTHER;
}
#if 0 /* No longer needed, our frees are in order so nothing accumulates */
mark = sl_mark(op->o_tmpmemctx);
#endif
if( IS_SLAP_INDEX( mask, SLAP_INDEX_PRESENT ) ) {
rc = bdb_key_change( op->o_bd, db, txn, &presence_key, id, opid );
if( rc ) {
@ -260,9 +255,6 @@ static int indexer(
}
done:
#if 0
sl_release( mark, op->o_tmpmemctx );
#endif
return rc;
}

View file

@ -104,6 +104,7 @@ bdb_db_init( BackendDB *be )
ldap_pvt_thread_mutex_init( &bdb->bi_database_mutex );
ldap_pvt_thread_mutex_init( &bdb->bi_lastid_mutex );
ldap_pvt_thread_rdwr_init ( &bdb->bi_pslist_rwlock );
ldap_pvt_thread_mutex_init( &bdb->bi_cache.lru_mutex );
ldap_pvt_thread_mutex_init( &bdb->bi_cache.c_dntree.bei_kids_mutex );
ldap_pvt_thread_rdwr_init ( &bdb->bi_cache.c_rwlock );
@ -411,14 +412,14 @@ bdb_db_open( BackendDB *be )
path,
/* bdbi_databases[i].name, */ NULL,
bdbi_databases[i].type,
bdbi_databases[i].flags | flags | DB_AUTO_COMMIT,
bdbi_databases[i].flags | flags,
bdb->bi_dbenv_mode );
#else
rc = DB_OPEN( db->bdi_db,
bdbi_databases[i].file,
/* bdbi_databases[i].name, */ NULL,
bdbi_databases[i].type,
bdbi_databases[i].flags | flags | DB_AUTO_COMMIT,
bdbi_databases[i].flags | flags,
bdb->bi_dbenv_mode );
#endif
@ -548,6 +549,7 @@ bdb_db_destroy( BackendDB *be )
ldap_pvt_thread_rdwr_destroy ( &bdb->bi_cache.c_rwlock );
ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.lru_mutex );
ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.c_dntree.bei_kids_mutex );
ldap_pvt_thread_rdwr_destroy ( &bdb->bi_pslist_rwlock );
ldap_pvt_thread_mutex_destroy( &bdb->bi_lastid_mutex );
ldap_pvt_thread_mutex_destroy( &bdb->bi_database_mutex );
#ifdef SLAP_IDL_CACHE
@ -590,9 +592,7 @@ bdb_initialize(
LDAP_CONTROL_ASSERT,
LDAP_CONTROL_MANAGEDSAIT,
LDAP_CONTROL_NOOP,
#ifdef LDAP_CONTROL_PAGEDRESULTS
LDAP_CONTROL_PAGEDRESULTS,
#endif
#ifdef LDAP_CONTROL_SUBENTRIES
LDAP_CONTROL_SUBENTRIES,
#endif

View file

@ -488,9 +488,11 @@ retry: /* transaction retry */
}
if ( rs->sr_err == LDAP_SUCCESS && !op->o_noop && !op->o_no_psearch ) {
ldap_pvt_thread_rdwr_rlock( &bdb->bi_pslist_rwlock );
LDAP_LIST_FOREACH ( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
bdb_psearch(op, rs, ps_list, e, LDAP_PSEARCH_BY_PREMODIFY );
}
ldap_pvt_thread_rdwr_runlock( &bdb->bi_pslist_rwlock );
}
if( op->o_preread ) {
@ -626,6 +628,24 @@ retry: /* transaction retry */
}
}
if ( rs->sr_err == LDAP_SUCCESS && !op->o_noop ) {
/* Loop through in-scope entries for each psearch spec */
ldap_pvt_thread_rdwr_rlock( &bdb->bi_pslist_rwlock );
LDAP_LIST_FOREACH ( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
bdb_psearch( op, rs, ps_list, e, LDAP_PSEARCH_BY_MODIFY );
}
ldap_pvt_thread_rdwr_runlock( &bdb->bi_pslist_rwlock );
pm_list = LDAP_LIST_FIRST(&op->o_pm_list);
while ( pm_list != NULL ) {
bdb_psearch(op, rs, pm_list->ps_op,
e, LDAP_PSEARCH_BY_SCOPEOUT);
LDAP_LIST_REMOVE ( pm_list, ps_link );
pm_prev = pm_list;
pm_list = LDAP_LIST_NEXT ( pm_list, ps_link );
ch_free( pm_prev );
}
}
rs->sr_err = TXN_COMMIT( ltid, 0 );
}
ltid = NULL;
@ -667,22 +687,6 @@ retry: /* transaction retry */
return_results:
send_ldap_result( op, rs );
if ( rs->sr_err == LDAP_SUCCESS && !op->o_noop ) {
/* Loop through in-scope entries for each psearch spec */
LDAP_LIST_FOREACH ( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
bdb_psearch( op, rs, ps_list, e, LDAP_PSEARCH_BY_MODIFY );
}
pm_list = LDAP_LIST_FIRST(&op->o_pm_list);
while ( pm_list != NULL ) {
bdb_psearch(op, rs, pm_list->ps_op,
e, LDAP_PSEARCH_BY_SCOPEOUT);
LDAP_LIST_REMOVE ( pm_list, ps_link );
pm_prev = pm_list;
pm_list = LDAP_LIST_NEXT ( pm_list, ps_link );
ch_free( pm_prev );
}
}
if( rs->sr_err == LDAP_SUCCESS && bdb->bi_txn_cp ) {
ldap_pvt_thread_yield();
TXN_CHECKPOINT( bdb->bi_dbenv,

View file

@ -883,9 +883,11 @@ retry: /* transaction retry */
}
if ( rs->sr_err == LDAP_SUCCESS && !op->o_noop && !op->o_no_psearch ) {
ldap_pvt_thread_rdwr_rlock( &bdb->bi_pslist_rwlock );
LDAP_LIST_FOREACH ( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
bdb_psearch( op, rs, ps_list, e, LDAP_PSEARCH_BY_PREMODIFY );
}
ldap_pvt_thread_rdwr_runlock( &bdb->bi_pslist_rwlock );
}
/* modify entry */
@ -997,6 +999,24 @@ retry: /* transaction retry */
}
}
if ( rs->sr_err == LDAP_SUCCESS && !op->o_noop ) {
/* Loop through in-scope entries for each psearch spec */
ldap_pvt_thread_rdwr_rlock( &bdb->bi_pslist_rwlock );
LDAP_LIST_FOREACH ( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
bdb_psearch( op, rs, ps_list, e, LDAP_PSEARCH_BY_MODIFY );
}
ldap_pvt_thread_rdwr_runlock( &bdb->bi_pslist_rwlock );
pm_list = LDAP_LIST_FIRST(&op->o_pm_list);
while ( pm_list != NULL ) {
bdb_psearch(op, rs, pm_list->ps_op,
e, LDAP_PSEARCH_BY_SCOPEOUT);
pm_prev = pm_list;
LDAP_LIST_REMOVE ( pm_list, ps_link );
pm_list = LDAP_LIST_NEXT ( pm_list, ps_link );
ch_free( pm_prev );
}
}
if(( rs->sr_err=TXN_COMMIT( ltid, 0 )) != 0 ) {
rs->sr_text = "txn_commit failed";
} else {
@ -1036,22 +1056,6 @@ retry: /* transaction retry */
return_results:
send_ldap_result( op, rs );
if ( rs->sr_err == LDAP_SUCCESS && !op->o_noop ) {
/* Loop through in-scope entries for each psearch spec */
LDAP_LIST_FOREACH ( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
bdb_psearch( op, rs, ps_list, e, LDAP_PSEARCH_BY_MODIFY );
}
pm_list = LDAP_LIST_FIRST(&op->o_pm_list);
while ( pm_list != NULL ) {
bdb_psearch(op, rs, pm_list->ps_op,
e, LDAP_PSEARCH_BY_SCOPEOUT);
pm_prev = pm_list;
LDAP_LIST_REMOVE ( pm_list, ps_link );
pm_list = LDAP_LIST_NEXT ( pm_list, ps_link );
ch_free( pm_prev );
}
}
if( rs->sr_err == LDAP_SUCCESS && bdb->bi_txn_cp ) {
ldap_pvt_thread_yield();
TXN_CHECKPOINT( bdb->bi_dbenv,

View file

@ -1,330 +0,0 @@
/* passwd.c - bdb backend password routines */
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 2000-2003 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License.
*
* A copy of this license is available in the file LICENSE in the
* top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>.
*/
#include "portable.h"
#include <stdio.h>
#include <ac/string.h>
#include "back-bdb.h"
#include "external.h"
#include "lber_pvt.h"
int
bdb_exop_passwd( Operation *op, SlapReply *rs )
{
struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
int rc;
Entry *e = NULL;
EntryInfo *ei;
struct berval hash = { 0, NULL };
DB_TXN *ltid = NULL, *lt2;
struct bdb_op_info opinfo;
char textbuf[SLAP_TEXT_BUFLEN];
size_t textlen = sizeof textbuf;
struct berval id = { 0, NULL };
struct berval new = { 0, NULL };
struct berval dn = { 0, NULL };
struct berval ndn = { 0, NULL };
u_int32_t locker = 0;
DB_LOCK lock;
int num_retries = 0;
assert( ber_bvcmp( &slap_EXOP_MODIFY_PASSWD, &op->oq_extended.rs_reqoid ) == 0 );
rc = slap_passwd_parse( op->oq_extended.rs_reqdata,
&id, NULL, &new, &rs->sr_text );
#ifdef NEW_LOGGING
LDAP_LOG ( ACL, ENTRY,
"==>bdb_exop_passwd: \"%s\"\n", id.bv_val ? id.bv_val : "", 0, 0 );
#else
Debug( LDAP_DEBUG_ARGS, "==> bdb_exop_passwd: \"%s\"\n",
id.bv_val ? id.bv_val : "", 0, 0 );
#endif
if( rc != LDAP_SUCCESS ) {
goto done;
}
if( new.bv_len == 0 ) {
slap_passwd_generate(&new);
if( new.bv_len == 0 ) {
rs->sr_text = "password generation failed.";
rc = LDAP_OTHER;
goto done;
}
rs->sr_rspdata = slap_passwd_return( &new );
}
slap_passwd_hash( &new, &hash, &rs->sr_text );
if( hash.bv_len == 0 ) {
if( !rs->sr_text ) rs->sr_text = "password hash failed";
rc = LDAP_OTHER;
goto done;
}
if( id.bv_len ) {
dn = id;
} else {
dn = op->o_dn;
}
#ifdef NEW_LOGGING
LDAP_LOG ( ACL, DETAIL1, "bdb_exop_passwd: \"%s\"%s\"\n",
dn.bv_val, id.bv_len ? " (proxy)" : "", 0 );
#else
Debug( LDAP_DEBUG_TRACE, "bdb_exop_passwd: \"%s\"%s\n",
dn.bv_val, id.bv_len ? " (proxy)" : "", 0 );
#endif
if( dn.bv_len == 0 ) {
rs->sr_text = "No password is associated with the Root DSE";
rc = LDAP_UNWILLING_TO_PERFORM;
goto done;
}
rc = dnNormalize( 0, NULL, NULL, &dn, &ndn, op->o_tmpmemctx );
if( rc != LDAP_SUCCESS ) {
rs->sr_text = "Invalid DN";
goto done;
}
if( 0 ) {
retry: /* transaction retry */
if ( e != NULL ) {
bdb_unlocked_cache_return_entry_w(&bdb->bi_cache, e);
}
#ifdef NEW_LOGGING
LDAP_LOG ( ACL, DETAIL1, "bdb_exop_passwd: retrying...\n", 0, 0, 0 );
#else
Debug( LDAP_DEBUG_TRACE, "bdb_exop_passwd: retrying...\n", 0, 0, 0 );
#endif
rc = TXN_ABORT( ltid );
ltid = NULL;
op->o_private = NULL;
op->o_do_not_cache = opinfo.boi_acl_cache;
if( rc != 0 ) {
rc = LDAP_OTHER;
rs->sr_text = "internal error";
goto done;
}
ldap_pvt_thread_yield();
bdb_trans_backoff( ++num_retries );
}
/* begin transaction */
rc = TXN_BEGIN( bdb->bi_dbenv, NULL, &ltid,
bdb->bi_db_opflags );
rs->sr_text = NULL;
if( rc != 0 ) {
#ifdef NEW_LOGGING
LDAP_LOG ( ACL, ERR,
"bdb_exop_passwd: txn_begin failed: %s (%d)\n",
db_strerror(rc), rc, 0 );
#else
Debug( LDAP_DEBUG_TRACE,
"bdb_exop_passwd: txn_begin failed: %s (%d)\n",
db_strerror(rc), rc, 0 );
#endif
rc = LDAP_OTHER;
rs->sr_text = "internal error";
goto done;
}
locker = TXN_ID ( ltid );
opinfo.boi_bdb = op->o_bd;
opinfo.boi_txn = ltid;
opinfo.boi_locker = locker;
opinfo.boi_err = 0;
opinfo.boi_acl_cache = op->o_do_not_cache;
op->o_private = &opinfo;
/* get entry */
rc = bdb_dn2entry( op, ltid, &ndn, &ei, 0 , locker, &lock );
switch(rc) {
case DB_LOCK_DEADLOCK:
case DB_LOCK_NOTGRANTED:
goto retry;
case DB_NOTFOUND:
case 0:
break;
case LDAP_BUSY:
rs->sr_text = "ldap server busy";
goto done;
default:
rc = LDAP_OTHER;
rs->sr_text = "internal error";
goto done;
}
if ( ei ) e = ei->bei_e;
if ( e == NULL || is_entry_glue( e )) {
/* FIXME: dn2entry() should return non-glue entry */
rs->sr_text = "could not locate authorization entry";
rc = LDAP_NO_SUCH_OBJECT;
goto done;
}
#ifdef BDB_SUBENTRIES
if( is_entry_subentry( e ) ) {
/* entry is a subentry, don't allow operation */
rs->sr_text = "authorization entry is subentry";
rc = LDAP_OTHER;
goto done;
}
#endif
#ifdef BDB_ALIASES
if( is_entry_alias( e ) ) {
/* entry is an alias, don't allow operation */
rs->sr_text = "authorization entry is alias";
rc = LDAP_ALIAS_PROBLEM;
goto done;
}
#endif
if( is_entry_referral( e ) ) {
/* entry is an referral, don't allow operation */
rs->sr_text = "authorization entry is referral";
rc = LDAP_OTHER;
goto done;
}
/* nested transaction */
rc = TXN_BEGIN( bdb->bi_dbenv, ltid, &lt2,
bdb->bi_db_opflags );
rs->sr_text = NULL;
if( rc != 0 ) {
#ifdef NEW_LOGGING
LDAP_LOG ( OPERATION, ERR,
"bdb_exop_passwd: txn_begin(2) failed: %s (%d)\n",
db_strerror(rs->sr_err), rs->sr_err, 0 );
#else
Debug( LDAP_DEBUG_TRACE,
"bdb_exop_passwd: txn_begin(2) failed: %s (%d)\n",
db_strerror(rs->sr_err), rs->sr_err, 0 );
#endif
rc = LDAP_OTHER;
rs->sr_text = "internal error";
goto done;
}
{
Modifications ml;
struct berval vals[2];
Entry dummy, *save;
save = e;
dummy = *e;
e = &dummy;
vals[0] = hash;
vals[1].bv_val = NULL;
ml.sml_desc = slap_schema.si_ad_userPassword;
ml.sml_values = vals;
ml.sml_nvalues = NULL;
ml.sml_op = LDAP_MOD_REPLACE;
ml.sml_next = NULL;
rc = bdb_modify_internal( op, lt2,
&ml, e, &rs->sr_text, textbuf, textlen );
if ( (rc == LDAP_INSUFFICIENT_ACCESS) && opinfo.boi_err ) {
rc = opinfo.boi_err;
}
switch(rc) {
case DB_LOCK_DEADLOCK:
case DB_LOCK_NOTGRANTED:
rs->sr_text = NULL;
goto retry;
case 0:
rs->sr_text = NULL;
break;
default:
rc = LDAP_OTHER;
rs->sr_text = "entry modify failed";
goto done;
}
/* change the entry itself */
rc = bdb_id2entry_update( op->o_bd, lt2, e );
if( rc != 0 ) {
switch(rc) {
case DB_LOCK_DEADLOCK:
case DB_LOCK_NOTGRANTED:
goto retry;
}
rs->sr_text = "entry update failed";
rc = LDAP_OTHER;
}
if ( TXN_COMMIT( lt2, 0 ) != 0 ) {
rc = LDAP_OTHER;
rs->sr_text = "txn_commit(2) failed";
}
if( rc == 0 ) {
if( op->o_noop ) {
rc = TXN_ABORT( ltid );
} else {
bdb_cache_modify( save, e->e_attrs,
bdb->bi_dbenv, locker, &lock );
rc = TXN_COMMIT( ltid, 0 );
}
ltid = NULL;
}
op->o_private = NULL;
if( rc == LDAP_SUCCESS ) {
op->o_req_dn = e->e_name;
op->o_req_ndn = e->e_nname;
op->oq_modify.rs_modlist = &ml;
replog( op );
op->oq_extended.rs_reqoid = slap_EXOP_MODIFY_PASSWD;
}
}
done:
if( e != NULL ) {
bdb_unlocked_cache_return_entry_w( &bdb->bi_cache, e );
}
if( hash.bv_val != NULL ) {
free( hash.bv_val );
}
if( ndn.bv_val != NULL ) {
op->o_tmpfree( ndn.bv_val, op->o_tmpmemctx );
}
if( ltid != NULL ) {
TXN_ABORT( ltid );
op->o_private = NULL;
}
return rc;
}

View file

@ -379,13 +379,6 @@ int bdb_modify_internal(
char *textbuf,
size_t textlen );
/*
* passwd.c
*/
#define bdb_exop_passwd BDB_SYMBOL(exop_passwd)
BI_op_extended bdb_exop_passwd;
/*
* cache.c

View file

@ -437,12 +437,12 @@ bdb_do_search( Operation *op, SlapReply *rs, Operation *sop,
/* psearch needs to be registered before refresh begins */
/* psearch and refresh transmission is serialized in send_ldap_ber() */
if ( !IS_PSEARCH && sop->o_sync_mode & SLAP_SYNC_PERSIST ) {
ldap_pvt_thread_mutex_lock( &bdb->bi_pslist_mutex );
ldap_pvt_thread_rdwr_wlock( &bdb->bi_pslist_rwlock );
LDAP_LIST_INSERT_HEAD( &bdb->bi_psearch_list, sop, o_ps_link );
ldap_pvt_thread_mutex_unlock( &bdb->bi_pslist_mutex );
ldap_pvt_thread_rdwr_wunlock( &bdb->bi_pslist_rwlock );
} else if ( !IS_PSEARCH && sop->o_sync_mode & SLAP_SYNC_REFRESH_AND_PERSIST
&& sop->o_sync_slog_size >= 0 ) {
ldap_pvt_thread_mutex_lock( &bdb->bi_pslist_mutex );
ldap_pvt_thread_rdwr_wlock( &bdb->bi_pslist_rwlock );
LDAP_LIST_FOREACH( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
if ( ps_list->o_sync_slog_size >= 0 ) {
if ( ps_list->o_sync_state.sid == sop->o_sync_state.sid ) {
@ -476,7 +476,7 @@ bdb_do_search( Operation *op, SlapReply *rs, Operation *sop,
} else {
sop->o_sync_state.sid = -1;
}
ldap_pvt_thread_mutex_unlock( &bdb->bi_pslist_mutex );
ldap_pvt_thread_rdwr_wunlock( &bdb->bi_pslist_rwlock );
}
null_attr.an_desc = NULL;
@ -733,19 +733,23 @@ dn2entry_retry:
}
e = NULL;
rs->sr_err = bdb_get_commit_csn( sop, rs, &search_context_csn, locker, &ctxcsn_lock );
if ( !IS_PSEARCH ) {
rs->sr_err = bdb_get_commit_csn( sop, rs, &search_context_csn, locker, &ctxcsn_lock );
if ( rs->sr_err != LDAP_SUCCESS ) {
send_ldap_error( sop, rs, rs->sr_err, "error in csn management in search" );
goto done;
}
if ( rs->sr_err != LDAP_SUCCESS ) {
send_ldap_error( sop, rs, rs->sr_err, "error in csn management in search" );
goto done;
}
if ( sop->o_sync_mode != SLAP_SYNC_NONE && sop->o_sync_state.ctxcsn &&
sop->o_sync_state.ctxcsn->bv_val &&
ber_bvcmp( &sop->o_sync_state.ctxcsn[0], search_context_csn ) == 0 )
{
bdb_cache_entry_db_unlock( bdb->bi_dbenv, &ctxcsn_lock );
goto nochange;
if ( sop->o_sync_mode != SLAP_SYNC_NONE && sop->o_sync_state.ctxcsn &&
sop->o_sync_state.ctxcsn->bv_val &&
ber_bvcmp( &sop->o_sync_state.ctxcsn[0], search_context_csn ) == 0 )
{
bdb_cache_entry_db_unlock( bdb->bi_dbenv, &ctxcsn_lock );
goto nochange;
}
} else {
search_context_csn = ber_dupbv( NULL, &op->o_sync_csn );
}
/* select candidates */
@ -758,8 +762,10 @@ dn2entry_retry:
rs->sr_err = search_candidates( op, sop, rs, &base, locker, candidates, scopes );
}
if ( sop->o_sync_mode != SLAP_SYNC_NONE ) {
bdb_cache_entry_db_unlock( bdb->bi_dbenv, &ctxcsn_lock );
if ( !IS_PSEARCH ) {
if ( sop->o_sync_mode != SLAP_SYNC_NONE ) {
bdb_cache_entry_db_unlock( bdb->bi_dbenv, &ctxcsn_lock );
}
}
/* start cursor at beginning of candidates.
@ -812,7 +818,6 @@ dn2entry_retry:
tentries = BDB_IDL_N(candidates);
}
#ifdef LDAP_CONTROL_PAGEDRESULTS
if ( get_pagedresults(sop) ) {
if ( sop->o_pagedresults_state.ps_cookie == 0 ) {
id = 0;
@ -844,7 +849,6 @@ dn2entry_retry:
}
goto loop_begin;
}
#endif
if ( (sop->o_sync_mode & SLAP_SYNC_REFRESH) || IS_PSEARCH )
{
@ -1184,7 +1188,6 @@ id2entry_retry:
goto done;
}
#ifdef LDAP_CONTROL_PAGEDRESULTS
if ( get_pagedresults(sop) ) {
if ( rs->sr_nentries >= sop->o_pagedresults_size ) {
send_pagerequest_response( sop, rs,
@ -1193,7 +1196,6 @@ id2entry_retry:
}
lastid = id;
}
#endif
if (e) {
/* safe default */
@ -1410,7 +1412,7 @@ nochange:
} else {
if ( !no_sync_state_change ) {
int slog_found = 0;
ldap_pvt_thread_mutex_lock( &bdb->bi_pslist_mutex );
ldap_pvt_thread_rdwr_rlock( &bdb->bi_pslist_rwlock );
LDAP_LIST_FOREACH( ps_list, &bdb->bi_psearch_list, o_ps_link ) {
if ( ps_list->o_sync_slog_size > 0 ) {
if ( ps_list->o_sync_state.sid == sop->o_sync_state.sid ) {
@ -1426,7 +1428,7 @@ nochange:
rs->sr_ctrls = NULL;
slap_send_session_log( op, ps_list, rs );
}
ldap_pvt_thread_mutex_unlock( &bdb->bi_pslist_mutex );
ldap_pvt_thread_rdwr_runlock( &bdb->bi_pslist_rwlock );
}
rs->sr_err = LDAP_SUCCESS;
rs->sr_rspoid = LDAP_SYNC_INFO;
@ -1452,7 +1454,7 @@ nochange:
} else {
if ( !no_sync_state_change ) {
int slog_found = 0;
ldap_pvt_thread_mutex_lock( &bdb->bi_pslist_mutex );
ldap_pvt_thread_rdwr_rlock( &bdb->bi_pslist_rwlock );
LDAP_LIST_FOREACH( ps_list, &bdb->bi_psearch_list,
o_ps_link ) {
if ( ps_list->o_sync_slog_size > 0 ) {
@ -1467,7 +1469,7 @@ nochange:
if ( slog_found ) {
slap_send_session_log( op, ps_list, rs );
}
ldap_pvt_thread_mutex_unlock( &bdb->bi_pslist_mutex );
ldap_pvt_thread_rdwr_runlock( &bdb->bi_pslist_rwlock );
}
slap_build_sync_done_ctrl( sop, rs, ctrls,
num_ctrls++, 1, &cookie, LDAP_SYNC_REFRESH_DELETES );
@ -1547,6 +1549,8 @@ static int oc_filter(
{
int rc = 0;
assert( f );
if( cur > *max ) *max = cur;
switch(f->f_choice) {
@ -1735,7 +1739,6 @@ static int search_candidates(
return rc;
}
#ifdef LDAP_CONTROL_PAGEDRESULTS
static void
send_pagerequest_response(
Operation *op,
@ -1790,4 +1793,3 @@ send_pagerequest_response(
done:
(void) ber_free_buf( ber );
}
#endif

View file

@ -47,10 +47,7 @@ dnssrv_back_db_config(
/* no configuration options (yet) */
{
fprintf( stderr,
"%s: line %d: unknown directive \"%s\""
" in DNSSRV database definition (ignored)\n",
fname, lineno, argv[0] );
return SLAP_CONF_UNKNOWN;
}
return 0;
}

View file

@ -19,13 +19,13 @@ XXDIR = $(srcdir)/../back-bdb
XXSRCS = init.c tools.c config.c \
add.c bind.c compare.c delete.c modify.c modrdn.c search.c \
extended.c passwd.c referral.c operational.c \
extended.c referral.c operational.c \
attr.c index.c key.c dbcache.c filterindex.c trans.c \
dn2entry.c dn2id.c error.c id2entry.c idl.c nextid.c cache.c ctxcsn.c
SRCS = $(XXSRCS)
OBJS = init.lo tools.lo config.lo \
add.lo bind.lo compare.lo delete.lo modify.lo modrdn.lo search.lo \
extended.lo passwd.lo referral.lo operational.lo \
extended.lo referral.lo operational.lo \
attr.lo index.lo key.lo dbcache.lo filterindex.lo trans.lo \
dn2entry.lo dn2id.lo error.lo id2entry.lo idl.lo nextid.lo cache.lo ctxcsn.lo

View file

@ -1,121 +0,0 @@
Copyright 2000, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
The backend back-ldap has been modified as follows:
* The LDAP handlers have been put under an avl tree, in an attempt
to improve the access to connections in heavy loaded environments
(many clients connecting simultaneously for long times, e.g.
authenticators that make successive searches and binds without
renewing the handler).
This required to change the lcs member of struct ldapinfo into
an (Avlnode *) member called conntree.
The member next in the ldapconn struct has been eliminated because
it is no longer needed.
* The ldap_back_dobind function has been forced to return the value
of the bound flag instead of void; there is no longer need to test
for the flag outside the function as a test was already in.
Now the function can be called as
if ( !ldap_back_dobind( lc, op ) ) {
/* handle error */
}
* The suffix of the operations can be "massaged", i.e. changed to
a different suffix to implement what has been termed a
"virtual naming context": an incoming request with a certain
base or related to a certain dn is turned into a request to a different
server with the base or the dn changed in its terminal part (the naming
context). The resulting entries, if any, have the real naming context
changed back into the virtual naming context.
This required to add a suffixMassage configuration line of the form
suffix "virtual naming context"
suffixMassage "virtual naming context" "real naming context"
(the name of the configuration parameter will be changed to something
more appropriate as will result from a debate in the -devel mailing
list).
The "virtual naming context" must appear in a suffix configuration line
so the server can select the appropriate backend; then the suffixMassage
configuration line maps the "virtual" and the "real" naming contexts
back and forth.
This allows one to map multiple real naming contexts as branches
of a single naming context, provided these reside on the same server:
suffix "ou=Branch 1, o=My Org, c=IT"
suffixMassage "ou=Branch 1, o=My Org, c=IT" "o=Org 1, c=IT"
suffix "ou=Branch 2, o=My Org, c=IT"
suffixMassage "ou=Branch 2, o=My Org, c=IT" "dc=host, dc=net"
suffix "o=My Org, c=IT"
suffixMassage "o=My Org, c=IT" "dc=host, dc=it"
Note that the "same server" limitation can be overcome by using
multiple back-ldap databases, each pointing to the appropriate
server.
Another choice, which would not allow multiple naming contexts
being served by the same database, is to use the "dn" part of the
"uri" configuration parameter, e.g.:
suffix "virtual naming context"
uri "ldap://ldap.my.org:port/real naming context"
This has not been implemented yet.
A possible future enhancement will allow the ldap backend to handle
multiple servers within a single naming context.
Two functions, ldap_back_dn_massage and ldap_back_dn_restore, have
been added. The former changes the bind dn or the search base,
in case its terminal portion matches the "virtual naming context"
of a suffixMassage entry, to the corresponding "real naming context"
suffixed value.
The latter turns the entry's dn back to the "virtual naming context"
suffixed form if the real dn terminal portion matches any "real naming
context" part of a suffixMassage configuration line.
The deferred bind required to add the bound_dn member to the ldapconn
struct.
As of the time of this writing, all the backend operations that
require writing (add, delete, modify, modrdn) have been added the
massaging capability; it can be safely turned off by turning on
the readonly mode at the backend level. The massaging is performed
only on the dn of the entry that is modified, and in the modrdn
operation it affects both the old and the newSuperior dn.
* Cleanup/minor bug fixes/software enhancements:
- the suffix member (unused) has been eliminated (commented out)
from the ldapinfo struct.
- bind.c:ldap_back_op_result: a check of the value of "match" and
"msg" variables is added before freeing them (got a NULL "match"
when the server the backend points to was restarted).
- search.c:ldap_send_entry: the member a_desc in the (Attribute *)
"attr" must be set to NULL before calling slap_str2ad, otherwise
an assertion fails (ITS #919).
- search.c:ldap_send_entry: the entry's ent.e_dn and ent.e_ndn members
need be freed before returning because they were allocated inside
the routine.
- modify.c:ldap_back_modify: the Modifications member sml_op needs be
ORed with LDAP_MOD_BVALUES to force the ldap_modify_s routine
handle the modifications as bervals:
mods[i].mod_op = ml->sml_op | LDAP_MOD_BVALUES;
* Notes:
- there a possible memory leak in the backend, because the memory
occupation of the slapd processes steadily grows when it is
repeatedly accessed.
- when writing (add/modify) lastmod must be set to OFF otherwise
the lastmod attributes will be added to the entry mods and the
target server will complain about
ldap_modify: Constraint violation
ldap_modify: additional info: no user modification allowed

View file

@ -1,45 +0,0 @@
Copyright 1999-2003 The OpenLDAP Foundation.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted only as authorized by the OpenLDAP
Public License.
A copy of this license is available in the file LICENSE in the
top-level directory of the distribution or, alternatively, at
<http://www.OpenLDAP.org/license.html>.
---
This is an "altered version".
---
Portions Copyright 1999, Howard Chu, All rights reserved.
<hyc@highlandsun.com>
Permission is granted to anyone to use this software for any purpose
on any computer system, and to alter it and redistribute it, subject
to the following restrictions:
1. The author is not responsible for the consequences of use of this
software, no matter how awful, even if they arise from flaws in it.
2. The origin of this software must not be misrepresented, either by
explicit claim or by omission. Since few users ever read sources,
credits should appear in the documentation.
3. Altered versions must be plainly marked as such, and must not be
misrepresented as being the original software. Since few users
ever read sources, credits should appear in the documentation.
4. This notice may not be removed or altered.
---
Portions Copyright 2000, Pierangelo Masarati, All rights reserved.
<ando@sys-net.it>
This software is being modified by Pierangelo Masarati.
The previously reported conditions apply to the modified code as well.
Changes in the original code are highlighted where required.
Credits for the original code go to the author, Howard Chu.

View file

@ -30,9 +30,12 @@ BUILD_MOD_DYNAMIC = @BUILD_LDAP_DYNAMIC@
mod_DEFS = -DSLAPD_IMPORT
MOD_DEFS = $(@BUILD_LDAP@_DEFS)
mod_REWRITE = $(LDAP_LIBREWRITE_A)
REWRITE = $(@BUILD_META@_REWRITE) $(@BUILD_LDAP@_REWRITE)
shared_LDAP_LIBS = $(LDAP_LIBLDAP_R_LA) $(LDAP_LIBLBER_LA)
NT_LINK_LIBS = -L.. -lslapd $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS)
UNIX_LINK_LIBS = $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS)
NT_LINK_LIBS = -L.. -lslapd $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS) $(REWRITE)
UNIX_LINK_LIBS = $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS) $(REWRITE)
LIBBASE = back_ldap

View file

@ -3,6 +3,8 @@
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 1999-2003 The OpenLDAP Foundation.
* Portions Copyright 2000-2003 Pierangelo Masarati.
* Portions Copyright 1999-2003 Howard Chu.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -18,36 +20,6 @@
* in OpenLDAP Software and subsequently enhanced by Pierangelo
* Masarati.
*/
/* This is an altered version */
/*
* Copyright 1999, Howard Chu, All rights reserved. <hyc@highlandsun.com>
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
*
*
* Copyright 2000, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
*
* This software is being modified by Pierangelo Masarati.
* The previously reported conditions apply to the modified code as well.
* Changes in the original code are highlighted where required.
* Credits for the original code go to the author, Howard Chu.
*/
#include "portable.h"
@ -73,6 +45,10 @@ ldap_back_add(
struct berval mdn = { 0, NULL };
ber_int_t msgid;
dncookie dc;
#ifdef LDAP_BACK_PROXY_AUTHZ
LDAPControl **ctrls = NULL;
int rc = LDAP_SUCCESS;
#endif /* LDAP_BACK_PROXY_AUTHZ */
#ifdef NEW_LOGGING
LDAP_LOG( BACK_LDAP, ENTRY, "ldap_back_add: %s\n", op->o_req_dn.bv_val, 0, 0 );
@ -149,8 +125,29 @@ ldap_back_add(
}
attrs[i] = NULL;
#ifdef LDAP_BACK_PROXY_AUTHZ
rc = ldap_back_proxy_authz_ctrl( lc, op, rs, &ctrls );
if ( rc != LDAP_SUCCESS ) {
goto cleanup;
}
#endif /* LDAP_BACK_PROXY_AUTHZ */
rs->sr_err = ldap_add_ext(lc->ld, mdn.bv_val, attrs,
op->o_ctrls, NULL, &msgid);
#ifdef LDAP_BACK_PROXY_AUTHZ
ctrls,
#else /* ! LDAP_BACK_PROXY_AUTHZ */
op->o_ctrls,
#endif /* ! LDAP_BACK_PROXY_AUTHZ */
NULL, &msgid);
#ifdef LDAP_BACK_PROXY_AUTHZ
cleanup:
if ( ctrls && ctrls != op->o_ctrls ) {
free( ctrls[ 0 ] );
free( ctrls );
}
#endif /* LDAP_BACK_PROXY_AUTHZ */
for (--i; i>= 0; --i) {
ch_free(attrs[i]->mod_vals.modv_bvals);
ch_free(attrs[i]);
@ -159,7 +156,12 @@ ldap_back_add(
if ( mdn.bv_val != op->o_req_dn.bv_val ) {
free( mdn.bv_val );
}
#ifdef LDAP_BACK_PROXY_AUTHZ
if ( rc != LDAP_SUCCESS ) {
send_ldap_result( op, rs );
return -1;
}
#endif /* LDAP_BACK_PROXY_AUTHZ */
return ldap_back_op_result( lc, op, rs, msgid, 1 ) != LDAP_SUCCESS;
}

View file

@ -3,6 +3,8 @@
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 1999-2003 The OpenLDAP Foundation.
* Portions Copyright 2000-2003 Pierangelo Masarati.
* Portions Copyright 1999-2003 Howard Chu.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -18,36 +20,6 @@
* in OpenLDAP Software and subsequently enhanced by Pierangelo
* Masarati.
*/
/* This is an altered version */
/*
* Copyright 1999, Howard Chu, All rights reserved. <hyc@highlandsun.com>
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
*
*
* Copyright 2000, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
*
* This software is being modified by Pierangelo Masarati.
* The previously reported conditions apply to the modified code as well.
* Changes in the original code are highlighted where required.
* Credits for the original code go to the author, Howard Chu.
*/
#ifndef SLAPD_LDAP_H
#define SLAPD_LDAP_H
@ -111,6 +83,10 @@ struct ldapinfo {
char *url;
struct berval binddn;
struct berval bindpw;
#ifdef LDAP_BACK_PROXY_AUTHZ
struct berval proxyauthzdn;
struct berval proxyauthzpw;
#endif /* LDAP_BACK_PROXY_AUTHZ */
ldap_pvt_thread_mutex_t conn_mutex;
int savecred;
Avlnode *conntree;
@ -210,6 +186,15 @@ extern int ldap_dnattr_result_rewrite( dncookie *dc, BerVarray a_vals );
extern int ldap_chain_setup();
#ifdef LDAP_BACK_PROXY_AUTHZ
extern int
ldap_back_proxy_authz_ctrl(
struct ldapconn *lc,
Operation *op,
SlapReply *rs,
LDAPControl ***pctrls );
#endif /* LDAP_BACK_PROXY_AUTHZ */
LDAP_END_DECL
#endif /* SLAPD_LDAP_H */

View file

@ -3,6 +3,8 @@
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 1999-2003 The OpenLDAP Foundation.
* Portions Copyright 2000-2003 Pierangelo Masarati.
* Portions Copyright 1999-2003 Howard Chu.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -18,36 +20,6 @@
* in OpenLDAP Software and subsequently enhanced by Pierangelo
* Masarati.
*/
/* This is an altered version */
/*
* Copyright 1999, Howard Chu, All rights reserved. <hyc@highlandsun.com>
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
*
*
* Copyright 2000, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
*
* This software is being modified by Pierangelo Masarati.
* The previously reported conditions apply to the modified code as well.
* Changes in the original code are highlighted where required.
* Credits for the original code go to the author, Howard Chu.
*/
#include "portable.h"
@ -404,13 +376,51 @@ ldap_back_getconn(Operation *op, SlapReply *rs)
int
ldap_back_dobind( struct ldapconn *lc, Operation *op, SlapReply *rs )
{
struct ldapinfo *li = (struct ldapinfo *)op->o_bd->be_private;
int rc;
ber_int_t msgid;
ldap_pvt_thread_mutex_lock( &lc->lc_mutex );
if ( !lc->bound ) {
rs->sr_err = ldap_sasl_bind(lc->ld, lc->bound_dn.bv_val,
LDAP_SASL_SIMPLE, &lc->cred, NULL, NULL, &msgid);
#ifdef LDAP_BACK_PROXY_AUTHZ
int gotit = 0;
#if 0
/*
* FIXME: we need to let clients use proxyAuthz
* otherwise we cannot do symmetric pools of servers;
* we have to live with the fact that a user can
* authorize itself as any ID that is allowed
* by the saslAuthzTo directive of the "proxyauthzdn".
*/
/*
* NOTE: current Proxy Authorization specification
* and implementation do not allow proxy authorization
* control to be provided with Bind requests
*/
gotit = op->o_proxy_authz;
#endif
/*
* if no bind took place yet, but the connection is bound
* and the "proxyauthzdn" is set, then bind as
* "proxyauthzdn" and explicitly add the proxyAuthz
* control to every operation with the dn bound
* to the connection as control value.
*/
if ( ( lc->bound_dn.bv_val == NULL || lc->bound_dn.bv_len == 0 )
&& ( op->o_conn && op->o_conn->c_dn.bv_val != NULL && op->o_conn->c_dn.bv_len != 0 )
&& ( li->proxyauthzdn.bv_val != NULL && li->proxyauthzdn.bv_len != 0 )
&& ! gotit ) {
rs->sr_err = ldap_sasl_bind(lc->ld, li->proxyauthzdn.bv_val,
LDAP_SASL_SIMPLE, &li->proxyauthzpw, NULL, NULL, &msgid);
} else
#endif /* LDAP_BACK_PROXY_AUTHZ */
{
rs->sr_err = ldap_sasl_bind(lc->ld, lc->bound_dn.bv_val,
LDAP_SASL_SIMPLE, &lc->cred, NULL, NULL, &msgid);
}
rc = ldap_back_op_result( lc, op, rs, msgid, 0 );
if (rc == LDAP_SUCCESS) {
lc->bound = 1;
@ -550,3 +560,89 @@ ldap_back_op_result(struct ldapconn *lc, Operation *op, SlapReply *rs,
return( (rs->sr_err == LDAP_SUCCESS) ? 0 : -1 );
}
#ifdef LDAP_BACK_PROXY_AUTHZ
/*
* ldap_back_proxy_authz_ctrl() prepends a proxyAuthz control
* to existing server-side controls if required; if not,
* the existing server-side controls are placed in *pctrls.
* The caller, after using the controls in client API
* operations, if ( *pctrls != op->o_ctrls ), should
* free( (*pctrls)[ 0 ] ) and free( *pctrls ).
* The function returns success if the control could
* be added if required, or if it did nothing; in the future,
* it might return some error if it failed.
*
* if no bind took place yet, but the connection is bound
* and the "proxyauthzdn" is set, then bind as "proxyauthzdn"
* and explicitly add proxyAuthz the control to every operation
* with the dn bound to the connection as control value.
*
* If no server-side controls are defined for the operation,
* simply add the proxyAuthz control; otherwise, if the
* proxyAuthz control is not already set, add it as
* the first one (FIXME: is controls order significant
* for security?).
*/
int
ldap_back_proxy_authz_ctrl(
struct ldapconn *lc,
Operation *op,
SlapReply *rs,
LDAPControl ***pctrls )
{
struct ldapinfo *li = (struct ldapinfo *) op->o_bd->be_private;
LDAPControl **ctrls = NULL;
*pctrls = NULL;
if ( ( lc->bound_dn.bv_val == NULL || lc->bound_dn.bv_len == 0 )
&& ( op->o_conn && op->o_conn->c_dn.bv_val != NULL && op->o_conn->c_dn.bv_len != 0 )
&& ( li->proxyauthzdn.bv_val != NULL && li->proxyauthzdn.bv_len != 0 ) ) {
int i = 0;
if ( !op->o_proxy_authz ) {
ctrls = ch_malloc( sizeof( LDAPControl * ) * (i + 2) );
ctrls[ 0 ] = ch_malloc( sizeof( LDAPControl ) );
ctrls[ 0 ]->ldctl_oid = LDAP_CONTROL_PROXY_AUTHZ;
ctrls[ 0 ]->ldctl_iscritical = 1;
ctrls[ 0 ]->ldctl_value.bv_len = op->o_conn->c_dn.bv_len + 3;
ctrls[ 0 ]->ldctl_value.bv_val = ch_malloc( ctrls[ 0 ]->ldctl_value.bv_len + 1 );
AC_MEMCPY( ctrls[ 0 ]->ldctl_value.bv_val, "dn:", sizeof( "dn:" ) - 1 );
AC_MEMCPY( ctrls[ 0 ]->ldctl_value.bv_val + sizeof( "dn:") - 1,
op->o_conn->c_dn.bv_val, op->o_conn->c_dn.bv_len + 1 );
if ( op->o_ctrls ) {
for ( i = 0; op->o_ctrls[ i ]; i++ ) {
ctrls[ i + 1 ] = op->o_ctrls[ i ];
}
}
ctrls[ i + 1 ] = NULL;
} else {
/*
* FIXME: we do not want to perform proxyAuthz
* on behalf of the client, because this would
* be performed with "proxyauthzdn" privileges.
*
* This might actually be too strict, since
* the "proxyauthzdn" saslAuthzTo, and each entry's
* saslAuthzFrom attributes may be crafted
* to avoid unwanted proxyAuthz to take place.
*/
#if 0
rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
rs->sr_text = "proxyAuthz not allowed within namingContext";
#endif
}
}
if ( ctrls == NULL ) {
ctrls = op->o_ctrls;
}
*pctrls = ctrls;
return rs->sr_err;
}
#endif /* LDAP_BACK_PROXY_AUTHZ */

View file

@ -3,6 +3,7 @@
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 2003 The OpenLDAP Foundation.
* Portions Copyright 2003 Howard Chu.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -17,27 +18,6 @@
* This work was initially developed by the Howard Chu for inclusion
* in OpenLDAP Software.
*/
/* This is an altered version */
/*
* Copyright 2003, Howard Chu, All rights reserved. <hyc@highlandsun.com>
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*/
#include "portable.h"

View file

@ -3,6 +3,8 @@
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 2003 The OpenLDAP Foundation.
* Portions Copyright 1999-2003 Howard Chu.
* Portions Copyright 2000-2003 Pierangelo Masarati.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -18,36 +20,6 @@
* in OpenLDAP Software and subsequently enhanced by Pierangelo
* Masarati.
*/
/* This is an altered version */
/*
* Copyright 1999, Howard Chu, All rights reserved. <hyc@highlandsun.com>
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
*
*
* Copyright 2000, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
*
* This software is being modified by Pierangelo Masarati.
* The previously reported conditions apply to the modified code as well.
* Changes in the original code are highlighted where required.
* Credits for the original code go to the author, Howard Chu.
*/
#include "portable.h"
@ -66,11 +38,15 @@ ldap_back_compare(
{
struct ldapinfo *li = (struct ldapinfo *) op->o_bd->be_private;
struct ldapconn *lc;
struct berval mapped_at, mapped_val;
struct berval mapped_at = { 0, NULL }, mapped_val = { 0, NULL };
struct berval mdn = { 0, NULL };
ber_int_t msgid;
int freeval = 0;
dncookie dc;
#ifdef LDAP_BACK_PROXY_AUTHZ
LDAPControl **ctrls = NULL;
int rc = LDAP_SUCCESS;
#endif /* LDAP_BACK_PROXY_AUTHZ */
lc = ldap_back_getconn(op, rs);
if (!lc || !ldap_back_dobind( lc, op, rs ) ) {
@ -119,18 +95,47 @@ ldap_back_compare(
} else if (mapped_val.bv_val != op->orc_ava->aa_value.bv_val) {
freeval = 1;
}
} else {
mapped_val = op->orc_ava->aa_value;
}
}
rs->sr_err = ldap_compare_ext( lc->ld, mdn.bv_val, mapped_at.bv_val,
&mapped_val, op->o_ctrls, NULL, &msgid );
#ifdef LDAP_BACK_PROXY_AUTHZ
rc = ldap_back_proxy_authz_ctrl( lc, op, rs, &ctrls );
if ( rc != LDAP_SUCCESS ) {
goto cleanup;
}
#endif /* LDAP_BACK_PROXY_AUTHZ */
rs->sr_err = ldap_compare_ext( lc->ld, mdn.bv_val,
mapped_at.bv_val, &mapped_val,
#ifdef LDAP_BACK_PROXY_AUTHZ
ctrls,
#else /* ! LDAP_BACK_PROXY_AUTHZ */
op->o_ctrls,
#endif /* ! LDAP_BACK_PROXY_AUTHZ */
NULL, &msgid );
#ifdef LDAP_BACK_PROXY_AUTHZ
cleanup:
if ( ctrls && ctrls != op->o_ctrls ) {
free( ctrls[ 0 ] );
free( ctrls );
}
#endif /* LDAP_BACK_PROXY_AUTHZ */
if ( mdn.bv_val != op->o_req_dn.bv_val ) {
free( mdn.bv_val );
}
if ( freeval ) {
free( mapped_val.bv_val );
}
#ifdef LDAP_BACK_PROXY_AUTHZ
if ( rc != LDAP_SUCCESS ) {
send_ldap_result( op, rs );
return -1;
}
#endif /* LDAP_BACK_PROXY_AUTHZ */
return( ldap_back_op_result( lc, op, rs, msgid, 1 ) );
}

View file

@ -3,6 +3,8 @@
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 2003 The OpenLDAP Foundation.
* Portions Copyright 1999-2003 Howard Chu.
* Portions Copyright 2000-2003 Pierangelo Masarati.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -18,36 +20,6 @@
* in OpenLDAP Software and subsequently enhanced by Pierangelo
* Masarati.
*/
/* This is an altered version */
/*
* Copyright 1999, Howard Chu, All rights reserved. <hyc@highlandsun.com>
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
*
*
* Copyright 2000, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
*
* This software is being modified by Pierangelo Masarati.
* The previously reported conditions apply to the modified code as well.
* Changes in the original code are highlighted where required.
* Credits for the original code go to the author, Howard Chu.
*/
#include "portable.h"
@ -127,7 +99,29 @@ ldap_back_db_config(
return( 1 );
}
ber_str2bv( argv[1], 0, 1, &li->bindpw );
#ifdef LDAP_BACK_PROXY_AUTHZ
/* name to use for proxyAuthz propagation */
} else if ( strcasecmp( argv[0], "proxyauthzdn" ) == 0 ) {
if (argc != 2) {
fprintf( stderr,
"%s: line %d: missing name in \"proxyauthzdn <name>\" line\n",
fname, lineno );
return( 1 );
}
ber_str2bv( argv[1], 0, 1, &li->proxyauthzdn );
/* password to use for proxyAuthz propagation */
} else if ( strcasecmp( argv[0], "proxyauthzpw" ) == 0 ) {
if (argc != 2) {
fprintf( stderr,
"%s: line %d: missing password in \"proxyauthzpw <password>\" line\n",
fname, lineno );
return( 1 );
}
ber_str2bv( argv[1], 0, 1, &li->proxyauthzpw );
#endif /* LDAP_BACK_PROXY_AUTHZ */
/* save bind creds for referral rebinds? */
} else if ( strcasecmp( argv[0], "rebind-as-user" ) == 0 ) {
if (argc != 1) {
@ -262,9 +256,7 @@ ldap_back_db_config(
/* anything else */
} else {
fprintf( stderr, "%s: line %d: unknown directive \"%s\" "
"in ldap database definition (ignored)\n",
fname, lineno, argv[0] );
return SLAP_CONF_UNKNOWN;
}
return 0;
}

View file

@ -3,6 +3,8 @@
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 2003 The OpenLDAP Foundation.
* Portions Copyright 1999-2003 Howard Chu.
* Portions Copyright 2000-2003 Pierangelo Masarati.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -18,36 +20,6 @@
* in OpenLDAP Software and subsequently enhanced by Pierangelo
* Masarati.
*/
/* This is an altered version */
/*
* Copyright 1999, Howard Chu, All rights reserved. <hyc@highlandsun.com>
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
*
*
* Copyright 2000, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
*
* This software is being modified by Pierangelo Masarati.
* The previously reported conditions apply to the modified code as well.
* Changes in the original code are highlighted where required.
* Credits for the original code go to the author, Howard Chu.
*/
#include "portable.h"
@ -68,6 +40,10 @@ ldap_back_delete(
struct ldapconn *lc;
ber_int_t msgid;
dncookie dc;
#ifdef LDAP_BACK_PROXY_AUTHZ
LDAPControl **ctrls = NULL;
int rc = LDAP_SUCCESS;
#endif /* LDAP_BACK_PROXY_AUTHZ */
struct berval mdn = { 0, NULL };
@ -93,13 +69,40 @@ ldap_back_delete(
send_ldap_result( op, rs );
return -1;
}
rs->sr_err = ldap_delete_ext( lc->ld, mdn.bv_val, op->o_ctrls,
#ifdef LDAP_BACK_PROXY_AUTHZ
rc = ldap_back_proxy_authz_ctrl( lc, op, rs, &ctrls );
if ( rc != LDAP_SUCCESS ) {
goto cleanup;
}
#endif /* LDAP_BACK_PROXY_AUTHZ */
rs->sr_err = ldap_delete_ext( lc->ld, mdn.bv_val,
#ifdef LDAP_BACK_PROXY_AUTHZ
ctrls,
#else /* ! LDAP_BACK_PROXY_AUTHZ */
op->o_ctrls,
#endif /* ! LDAP_BACK_PROXY_AUTHZ */
NULL, &msgid );
#ifdef LDAP_BACK_PROXY_AUTHZ
cleanup:
if ( ctrls && ctrls != op->o_ctrls ) {
free( ctrls[ 0 ] );
free( ctrls );
}
#endif /* LDAP_BACK_PROXY_AUTHZ */
if ( mdn.bv_val != op->o_req_dn.bv_val ) {
free( mdn.bv_val );
}
#ifdef LDAP_BACK_PROXY_AUTHZ
if ( rc != LDAP_SUCCESS ) {
send_ldap_result( op, rs );
return -1;
}
#endif /* LDAP_BACK_PROXY_AUTHZ */
return( ldap_back_op_result( lc, op, rs, msgid, 1 ) );
}

View file

@ -18,7 +18,6 @@
* in OpenLDAP Software and subsequently enhanced by Pierangelo
* Masarati.
*/
/* This is an altered version */
#include "portable.h"
@ -48,7 +47,40 @@ ldap_back_extended(
for( i=0; exop_table[i].extended != NULL; i++ ) {
if( ber_bvcmp( exop_table[i].oid, &op->oq_extended.rs_reqoid ) == 0 ) {
#ifdef LDAP_BACK_PROXY_AUTHZ
struct ldapconn *lc;
LDAPControl **oldctrls = NULL;
int rc;
/* FIXME: this needs to be called here, so it is
* called twice; maybe we could avoid the
* ldap_back_dobind() call inside each extended()
* call ... */
lc = ldap_back_getconn(op, rs);
if (!lc || !ldap_back_dobind(lc, op, rs) ) {
return -1;
}
oldctrls = op->o_ctrls;
if ( ldap_back_proxy_authz_ctrl( lc, op, rs, &op->o_ctrls ) ) {
op->o_ctrls = oldctrls;
send_ldap_result( op, rs );
rs->sr_text = NULL;
return rs->sr_err;
}
rc = (exop_table[i].extended)( op, rs );
if ( op->o_ctrls && op->o_ctrls != oldctrls ) {
free( op->o_ctrls[ 0 ] );
free( op->o_ctrls );
}
op->o_ctrls = oldctrls;
return rc;
#else /* ! LDAP_BACK_PROXY_AUTHZ */
return (exop_table[i].extended)( op, rs );
#endif /* ! LDAP_BACK_PROXY_AUTHZ */
}
}

View file

@ -17,7 +17,6 @@
* in OpenLDAP Software and subsequently enhanced by Pierangelo
* Masarati.
*/
/* This is an altered version */
#ifndef _LDAP_EXTERNAL_H
#define _LDAP_EXTERNAL_H

View file

@ -3,6 +3,8 @@
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 2003 The OpenLDAP Foundation.
* Portions Copyright 1999-2003 Howard Chu.
* Portions Copyright 2000-2003 Pierangelo Masarati.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -18,36 +20,6 @@
* in OpenLDAP Software and subsequently enhanced by Pierangelo
* Masarati.
*/
/* This is an altered version */
/*
* Copyright 1999, Howard Chu, All rights reserved. <hyc@highlandsun.com>
*
* Permission is granted to anyone to use this software for any purpose
* on any computer system, and to alter it and redistribute it, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits should appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users
* ever read sources, credits should appear in the documentation.
*
* 4. This notice may not be removed or altered.
*
*
*
* Copyright 2000, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
*
* This software is being modified by Pierangelo Masarati.
* The previously reported conditions apply to the modified code as well.
* Changes in the original code are highlighted where required.
* Credits for the original code go to the author, Howard Chu.
*/
#include "portable.h"
@ -133,6 +105,13 @@ ldap_back_db_init(
li->bindpw.bv_val = NULL;
li->bindpw.bv_len = 0;
#ifdef LDAP_BACK_PROXY_AUTHZ
li->proxyauthzdn.bv_val = NULL;
li->proxyauthzdn.bv_len = 0;
li->proxyauthzpw.bv_val = NULL;
li->proxyauthzpw.bv_len = 0;
#endif /* LDAP_BACK_PROXY_AUTHZ */
#ifdef ENABLE_REWRITE
li->rwmap.rwm_rw = rewrite_info_init( REWRITE_MODE_USE_DEFAULT );
if ( li->rwmap.rwm_rw == NULL ) {
@ -207,6 +186,16 @@ ldap_back_db_destroy(
ch_free(li->bindpw.bv_val);
li->bindpw.bv_val = NULL;
}
#ifdef LDAP_BACK_PROXY_AUTHZ
if (li->proxyauthzdn.bv_val) {
ch_free(li->proxyauthzdn.bv_val);
li->proxyauthzdn.bv_val = NULL;
}
if (li->proxyauthzpw.bv_val) {
ch_free(li->proxyauthzpw.bv_val);
li->proxyauthzpw.bv_val = NULL;
}
#endif /* LDAP_BACK_PROXY_AUTHZ */
if (li->conntree) {
avl_free( li->conntree, ldap_back_conn_free );
}

Some files were not shown because too many files have changed in this diff Show more