Import updated OID macro support

Rebuild configure
Update CHANGES
This commit is contained in:
Kurt Zeilenga 2001-09-18 20:37:07 +00:00
parent f08ff6ab95
commit 313bd56fea
5 changed files with 65 additions and 37 deletions

View file

@ -3,6 +3,13 @@ OpenLDAP 2.0 Change Log
OpenLDAP 2.0.15 Engineering
Fixed -lldap TLS external handling
Fixed -lldap ldaps:// no host bug
Fixed slapd Statslog bug
Fixed slapd oidm support
Added -lldap oidm support
Added slapd supportedFeatures support
Removed lint
Build environment
Fixed winsock detection
OpenLDAP 2.0.14 Release
Fixed slurpd billionth second bug (ITS#1323)

4
configure vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh
# $OpenLDAP$
# from OpenLDAP
# from OpenLDAP: pkg/ldap/configure.in,v 1.223.2.32 2001/09/18 16:12:10 kurt Exp
# Copyright 1998-2001 The OpenLDAP Foundation. All Rights Reserved.
#
@ -4694,7 +4694,7 @@ else
rm -rf conftest*
ol_cv_winsock=no
fi
rm -f conftest*]
rm -f conftest*
fi
echo "$ac_t""$ol_cv_winsock" 1>&6

View file

@ -106,7 +106,8 @@ typedef struct ldap_objectclass {
#define LDAP_SCHEMA_ALLOW_QUOTED 0x02 /* Allow bogus extra quotes */
#define LDAP_SCHEMA_ALLOW_DESCR 0x04 /* Allow descr instead of OID */
#define LDAP_SCHEMA_ALLOW_DESCR_PREFIX 0x08 /* Allow descr as OID prefix */
#define LDAP_SCHEMA_ALLOW_ALL 0x0f /* Be very liberal in parsing */
#define LDAP_SCHEMA_ALLOW_OID_MACRO 0x10 /* Allow OID macros in slapd */
#define LDAP_SCHEMA_ALLOW_ALL 0x1f /* Be very liberal in parsing */
LDAP_F( LDAP_CONST char * )
ldap_syntax2name LDAP_P((

View file

@ -1413,7 +1413,9 @@ ldap_str2attributetype( const char * s, int * code, const char ** errp, const in
savepos = ss;
at->at_oid = parse_numericoid(&ss,code,0);
if ( !at->at_oid ) {
if ( flags & LDAP_SCHEMA_ALLOW_NO_OID ) {
if ( ( flags & ( LDAP_SCHEMA_ALLOW_NO_OID
| LDAP_SCHEMA_ALLOW_OID_MACRO ) )
&& (ss == savepos) ) {
/* Backtracking */
ss = savepos;
kind = get_token(&ss,&sval);
@ -1433,8 +1435,13 @@ ldap_str2attributetype( const char * s, int * code, const char ** errp, const in
!strncmp(sval, "X-", 2) ) {
/* Missing OID, backtrack */
ss = savepos;
} else {
/* Non-numerical OID, ignore */
} else if ( flags
& LDAP_SCHEMA_ALLOW_OID_MACRO) {
/* Non-numerical OID ... */
int len = ss-savepos;
at->at_oid = LDAP_MALLOC(len+1);
strncpy(at->at_oid, savepos, len);
at->at_oid[len] = 0;
}
}
LDAP_FREE(sval);
@ -1579,15 +1586,38 @@ ldap_str2attributetype( const char * s, int * code, const char ** errp, const in
}
seen_syntax = 1;
parse_whsp(&ss);
savepos = ss;
at->at_syntax_oid =
parse_noidlen(&ss,
code,
&at->at_syntax_len,
flags);
if ( !at->at_syntax_oid ) {
if ( flags & LDAP_SCHEMA_ALLOW_OID_MACRO ) {
kind = get_token(&ss,&sval);
if (kind == TK_BAREWORD)
{
char *sp = strchr(sval, '{');
at->at_syntax_oid = sval;
if (sp)
{
*sp++ = 0;
at->at_syntax_len = atoi(sp);
while ( LDAP_DIGIT(*sp) )
sp++;
if ( *sp != '}' ) {
*code = LDAP_SCHERR_UNEXPTOKEN;
*errp = ss;
ldap_attributetype_free(at);
return NULL;
}
}
}
} else {
*errp = ss;
ldap_attributetype_free(at);
return NULL;
}
}
parse_whsp(&ss);
} else if ( !strcmp(sval,"SINGLE-VALUE") ) {
@ -1757,7 +1787,7 @@ ldap_str2objectclass( const char * s, int * code, const char ** errp, const int
savepos = ss;
oc->oc_oid = parse_numericoid(&ss,code,0);
if ( !oc->oc_oid ) {
if ( flags & LDAP_SCHEMA_ALLOW_ALL ) {
if ( (flags & LDAP_SCHEMA_ALLOW_ALL) && (ss == savepos) ) {
/* Backtracking */
ss = savepos;
kind = get_token(&ss,&sval);
@ -1773,8 +1803,13 @@ ldap_str2objectclass( const char * s, int * code, const char ** errp, const int
!strncmp(sval, "X-", 2) ) {
/* Missing OID, backtrack */
ss = savepos;
} else {
} else if ( flags &
LDAP_SCHEMA_ALLOW_OID_MACRO ) {
/* Non-numerical OID, ignore */
int len = ss-savepos;
oc->oc_oid = LDAP_MALLOC(len+1);
strncpy(oc->oc_oid, savepos, len);
oc->oc_oid[len] = 0;
}
}
LDAP_FREE(sval);

View file

@ -290,32 +290,6 @@ parse_at(
char *oid = NULL;
char *soid = NULL;
/* Kludge for OIDmacros for syntaxes. If the syntax field starts
* nonnumeric, look for and expand a macro. The macro's place in
* the input line will be replaced with a field of '0's to keep
* ldap_str2attributetype happy. The actual oid will be swapped
* into place afterwards.
*/
for (; argv[3]; argv++)
{
/* Allow numeric OIDs to be wrapped in single quotes */
if (!strcasecmp(argv[3], "syntax") && argv[4] != NULL &&
!OID_LEADCHAR(argv[4][argv[4][0] == '\'' ? 1 : 0]))
{
int slen;
Syntax *syn;
syn = syn_find_desc(argv[4], &slen);
if (!syn)
{
fprintf(stderr, "%s: line %d: OID %s not found\n",
fname, lineno, argv[4]);
return 1;
}
memset(strstr(line, argv[4]), '0', slen);
soid = ch_strdup(syn->ssyn_syn.syn_oid );
break;
}
}
at = ldap_str2attributetype(line,&code,&err,LDAP_SCHEMA_ALLOW_ALL);
if ( !at ) {
fprintf( stderr, "%s: line %d: %s before %s\n",
@ -340,9 +314,20 @@ parse_at(
}
}
/* at->at_oid == NULL will be an error someday */
if (soid) {
ldap_memfree(at->at_syntax_oid);
at->at_syntax_oid = soid;
if ( at->at_syntax_oid && !OID_LEADCHAR( at->at_syntax_oid[0] )) {
/* Expand OID macros */
oid = find_oidm( at->at_syntax_oid );
if ( !oid ) {
fprintf(stderr,
"%s: line %d: OID %s not recognized\n",
fname, lineno, at->at_syntax_oid);
return 1;
}
if ( oid != at->at_syntax_oid ) {
ldap_memfree( at->at_syntax_oid );
at->at_syntax_oid = oid;
}
}
code = at_add(at,&err);
if ( code ) {