Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
openldap
OpenLDAP
Commits
6ed15e33
Commit
6ed15e33
authored
Jan 10, 2002
by
Kurt Zeilenga
Browse files
Another round of operational attribute changes... more to follow.
parent
91644aff
Changes
6
Hide whitespace changes
Inline
Side-by-side
servers/slapd/at.c
View file @
6ed15e33
...
...
@@ -274,7 +274,35 @@ at_add(
MatchingRule
*
mr
;
Syntax
*
syn
;
int
code
;
char
*
cname
;
char
*
cname
;
char
*
oid
;
if
(
!
OID_LEADCHAR
(
at
->
at_oid
[
0
]
))
{
/* Expand OID macros */
oid
=
oidm_find
(
at
->
at_oid
);
if
(
!
oid
)
{
*
err
=
at
->
at_oid
;
return
SLAP_SCHERR_OIDM
;
}
if
(
oid
!=
at
->
at_oid
)
{
ldap_memfree
(
at
->
at_oid
);
at
->
at_oid
=
oid
;
}
}
if
(
at
->
at_syntax_oid
&&
!
OID_LEADCHAR
(
at
->
at_syntax_oid
[
0
]
))
{
/* Expand OID macros */
oid
=
oidm_find
(
at
->
at_syntax_oid
);
if
(
!
oid
)
{
*
err
=
at
->
at_syntax_oid
;
return
SLAP_SCHERR_OIDM
;
}
if
(
oid
!=
at
->
at_syntax_oid
)
{
ldap_memfree
(
at
->
at_syntax_oid
);
at
->
at_syntax_oid
=
oid
;
}
}
if
(
at
->
at_names
&&
at
->
at_names
[
0
]
)
{
int
i
;
...
...
servers/slapd/oidm.c
0 → 100644
View file @
6ed15e33
/* schemaparse.c - routines to parse config file objectclass definitions */
/* $OpenLDAP$ */
/*
* Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include
"portable.h"
#include
<stdio.h>
#include
<ac/ctype.h>
#include
<ac/string.h>
#include
<ac/socket.h>
#include
"slap.h"
static
OidMacro
*
om_list
=
NULL
;
/* Replace an OID Macro invocation with its full numeric OID.
* If the macro is used with "macroname:suffix" append ".suffix"
* to the expansion.
*/
char
*
oidm_find
(
char
*
oid
)
{
OidMacro
*
om
;
/* OID macros must start alpha */
if
(
OID_LEADCHAR
(
*
oid
)
)
{
return
oid
;
}
for
(
om
=
om_list
;
om
;
om
=
om
->
som_next
)
{
char
**
names
=
om
->
som_names
;
if
(
names
==
NULL
)
{
continue
;
}
for
(
;
*
names
!=
NULL
;
names
++
)
{
int
pos
=
dscompare
(
*
names
,
oid
,
':'
);
if
(
pos
)
{
int
suflen
=
strlen
(
oid
+
pos
);
char
*
tmp
=
ch_malloc
(
om
->
som_oid
.
bv_len
+
suflen
+
1
);
strcpy
(
tmp
,
om
->
som_oid
.
bv_val
);
if
(
suflen
)
{
suflen
=
om
->
som_oid
.
bv_len
;
tmp
[
suflen
++
]
=
'.'
;
strcpy
(
tmp
+
suflen
,
oid
+
pos
+
1
);
}
return
tmp
;
}
}
}
return
NULL
;
}
void
oidm_destroy
()
{
OidMacro
*
om
,
*
n
;
for
(
om
=
om_list
;
om
;
om
=
n
)
{
n
=
om
->
som_next
;
charray_free
(
om
->
som_names
);
free
(
om
->
som_oid
.
bv_val
);
free
(
om
);
}
}
int
parse_oidm
(
const
char
*
fname
,
int
lineno
,
int
argc
,
char
**
argv
)
{
char
*
oid
;
OidMacro
*
om
;
if
(
argc
!=
3
)
{
fprintf
(
stderr
,
"%s: line %d: too many arguments
\n
"
,
fname
,
lineno
);
usage:
fprintf
(
stderr
,
"
\t
ObjectIdentifier <name> <oid>
\n
"
);
return
1
;
}
oid
=
oidm_find
(
argv
[
1
]
);
if
(
oid
!=
NULL
)
{
fprintf
(
stderr
,
"%s: line %d: "
"ObjectIdentifier
\"
%s
\"
previously defined
\"
%s
\"
"
,
fname
,
lineno
,
argv
[
1
],
oid
);
return
1
;
}
om
=
(
OidMacro
*
)
ch_malloc
(
sizeof
(
OidMacro
)
);
om
->
som_names
=
NULL
;
charray_add
(
&
om
->
som_names
,
argv
[
1
]
);
om
->
som_oid
.
bv_val
=
oidm_find
(
argv
[
2
]
);
if
(
!
om
->
som_oid
.
bv_val
)
{
fprintf
(
stderr
,
"%s: line %d: OID %s not recognized
\n
"
,
fname
,
lineno
,
argv
[
2
]
);
goto
usage
;
}
if
(
om
->
som_oid
.
bv_val
==
argv
[
2
])
{
om
->
som_oid
.
bv_val
=
ch_strdup
(
argv
[
2
]
);
}
om
->
som_oid
.
bv_len
=
strlen
(
om
->
som_oid
.
bv_val
);
om
->
som_next
=
om_list
;
om_list
=
om
;
return
0
;
}
servers/slapd/proto-slap.h
View file @
6ed15e33
...
...
@@ -571,6 +571,14 @@ LDAP_SLAPD_F (void) mra_free LDAP_P((
MatchingRuleAssertion
*
mra
,
int
freeit
));
/*
* oidm.c
*/
LDAP_SLAPD_F
(
char
*
)
oidm_find
(
char
*
oid
);
LDAP_SLAPD_F
(
void
)
oidm_destroy
LDAP_P
((
void
));
LDAP_SLAPD_F
(
int
)
parse_oidm
LDAP_P
((
const
char
*
fname
,
int
lineno
,
int
argc
,
char
**
argv
));
/*
* operation.c
*/
...
...
@@ -718,7 +726,6 @@ LDAP_SLAPD_F (int) syn_schema_info( Entry *e );
*/
LDAP_SLAPD_F
(
void
)
oc_destroy
LDAP_P
((
void
));
LDAP_SLAPD_F
(
void
)
oidm_destroy
LDAP_P
((
void
));
LDAP_SLAPD_F
(
void
)
at_destroy
LDAP_P
((
void
));
LDAP_SLAPD_F
(
void
)
ad_destroy
LDAP_P
((
AttributeDescription
*
));
LDAP_SLAPD_F
(
void
)
mr_destroy
LDAP_P
((
void
));
...
...
@@ -851,8 +858,6 @@ LDAP_SLAPD_F (int) parse_oc LDAP_P((
const
char
*
fname
,
int
lineno
,
char
*
line
,
char
**
argv
));
LDAP_SLAPD_F
(
int
)
parse_at
LDAP_P
((
const
char
*
fname
,
int
lineno
,
char
*
line
,
char
**
argv
));
LDAP_SLAPD_F
(
int
)
parse_oidm
LDAP_P
((
const
char
*
fname
,
int
lineno
,
int
argc
,
char
**
argv
));
LDAP_SLAPD_F
(
char
*
)
scherr2str
LDAP_P
((
int
code
))
LDAP_GCCATTR
((
const
));
LDAP_SLAPD_F
(
int
)
dscompare
LDAP_P
((
const
char
*
s1
,
const
char
*
s2del
,
char
delim
));
...
...
servers/slapd/schema_prep.c
View file @
6ed15e33
...
...
@@ -408,6 +408,39 @@ static struct slap_schema_syn_map {
int
slap_schema_load
(
void
)
{
int
i
;
for
(
i
=
0
;
ad_map
[
i
].
ssam_name
;
i
++
)
{
if
(
ad_map
[
i
].
ssam_defn
!=
NULL
)
{
LDAPAttributeType
*
at
;
int
code
;
const
char
*
err
;
at
=
ldap_str2attributetype
(
ad_map
[
i
].
ssam_defn
,
&
code
,
&
err
,
LDAP_SCHEMA_ALLOW_ALL
);
if
(
!
at
)
{
fprintf
(
stderr
,
"slap_schema_load: %s: %s before %s
\n
"
,
ad_map
[
i
].
ssam_name
,
ldap_scherr2str
(
code
),
err
);
return
code
;
}
if
(
at
->
at_oid
==
NULL
)
{
fprintf
(
stderr
,
"slap_schema_load: "
"attributeType
\"
%s
\"
has no OID
\n
"
,
ad_map
[
i
].
ssam_name
);
return
LDAP_OTHER
;
}
code
=
at_add
(
at
,
&
err
);
if
(
code
)
{
fprintf
(
stderr
,
"slap_schema_load: "
"%s: %s:
\"
%s
\"\n
"
,
ad_map
[
i
].
ssam_name
,
scherr2str
(
code
),
err
);
return
code
;
}
ldap_memfree
(
at
);
}
}
return
LDAP_SUCCESS
;
}
...
...
servers/slapd/schemaparse.c
View file @
6ed15e33
...
...
@@ -21,7 +21,7 @@ int global_schemacheck = 1; /* schemacheck ON is default */
static
void
oc_usage
(
void
);
static
void
at_usage
(
void
);
static
char
*
const
err2text
[]
=
{
static
char
*
const
err2text
[
SLAP_SCHERR_LAST
+
1
]
=
{
"Success"
,
"Out of memory"
,
"ObjectClass not found"
,
...
...
@@ -38,7 +38,8 @@ static char *const err2text[] = {
"Syntax not found"
,
"Syntax required"
,
"Qualifier not supported"
,
"Invalid NAME"
"Invalid NAME"
,
"OID could not be expanded"
};
char
*
...
...
@@ -88,111 +89,6 @@ dscompare(const char *s1, const char *s2, char delim)
return
0
;
}
static
OidMacro
*
om_list
=
NULL
;
/* Replace an OID Macro invocation with its full numeric OID.
* If the macro is used with "macroname:suffix" append ".suffix"
* to the expansion.
*/
static
char
*
find_oidm
(
char
*
oid
)
{
OidMacro
*
om
;
/* OID macros must start alpha */
if
(
OID_LEADCHAR
(
*
oid
)
)
{
return
oid
;
}
for
(
om
=
om_list
;
om
;
om
=
om
->
som_next
)
{
char
**
names
=
om
->
som_names
;
if
(
names
==
NULL
)
{
continue
;
}
for
(
;
*
names
!=
NULL
;
names
++
)
{
int
pos
=
dscompare
(
*
names
,
oid
,
':'
);
if
(
pos
)
{
int
suflen
=
strlen
(
oid
+
pos
);
char
*
tmp
=
ch_malloc
(
om
->
som_oid
.
bv_len
+
suflen
+
1
);
strcpy
(
tmp
,
om
->
som_oid
.
bv_val
);
if
(
suflen
)
{
suflen
=
om
->
som_oid
.
bv_len
;
tmp
[
suflen
++
]
=
'.'
;
strcpy
(
tmp
+
suflen
,
oid
+
pos
+
1
);
}
return
tmp
;
}
}
}
return
NULL
;
}
void
oidm_destroy
()
{
OidMacro
*
om
,
*
n
;
for
(
om
=
om_list
;
om
;
om
=
n
)
{
n
=
om
->
som_next
;
charray_free
(
om
->
som_names
);
free
(
om
->
som_oid
.
bv_val
);
free
(
om
);
}
}
int
parse_oidm
(
const
char
*
fname
,
int
lineno
,
int
argc
,
char
**
argv
)
{
char
*
oid
;
OidMacro
*
om
;
if
(
argc
!=
3
)
{
fprintf
(
stderr
,
"%s: line %d: too many arguments
\n
"
,
fname
,
lineno
);
usage:
fprintf
(
stderr
,
"
\t
ObjectIdentifier <name> <oid>
\n
"
);
return
1
;
}
oid
=
find_oidm
(
argv
[
1
]
);
if
(
oid
!=
NULL
)
{
fprintf
(
stderr
,
"%s: line %d: "
"ObjectIdentifier
\"
%s
\"
previously defined
\"
%s
\"
"
,
fname
,
lineno
,
argv
[
1
],
oid
);
return
1
;
}
om
=
(
OidMacro
*
)
ch_malloc
(
sizeof
(
OidMacro
)
);
om
->
som_names
=
NULL
;
charray_add
(
&
om
->
som_names
,
argv
[
1
]
);
om
->
som_oid
.
bv_val
=
find_oidm
(
argv
[
2
]
);
if
(
!
om
->
som_oid
.
bv_val
)
{
fprintf
(
stderr
,
"%s: line %d: OID %s not recognized
\n
"
,
fname
,
lineno
,
argv
[
2
]
);
goto
usage
;
}
if
(
om
->
som_oid
.
bv_val
==
argv
[
2
])
{
om
->
som_oid
.
bv_val
=
ch_strdup
(
argv
[
2
]
);
}
om
->
som_oid
.
bv_len
=
strlen
(
om
->
som_oid
.
bv_val
);
om
->
som_next
=
om_list
;
om_list
=
om
;
return
0
;
}
int
parse_oc
(
...
...
@@ -225,7 +121,7 @@ parse_oc(
if
(
!
OID_LEADCHAR
(
oc
->
oc_oid
[
0
]
))
{
/* Expand OID macros */
oid
=
find_oidm
(
oc
->
oc_oid
);
oid
=
oidm_find
(
oc
->
oc_oid
);
if
(
!
oid
)
{
fprintf
(
stderr
,
"%s: line %d: OID %s not recognized
\n
"
,
...
...
@@ -306,7 +202,7 @@ parse_at(
const
char
*
err
;
char
*
oid
=
NULL
;
at
=
ldap_str2attributetype
(
line
,
&
code
,
&
err
,
LDAP_SCHEMA_ALLOW_ALL
);
at
=
ldap_str2attributetype
(
line
,
&
code
,
&
err
,
LDAP_SCHEMA_ALLOW_ALL
);
if
(
!
at
)
{
fprintf
(
stderr
,
"%s: line %d: %s before %s
\n
"
,
fname
,
lineno
,
ldap_scherr2str
(
code
),
err
);
...
...
@@ -322,45 +218,12 @@ parse_at(
return
1
;
}
#if 0
/* operational attributes should be defined internally */
if
(
at
->
at_usage
)
{
fprintf
(
stderr
,
"%s: line %d: attribute type
\"
%s
\"
is operational
\n
"
,
fname
,
lineno
,
at
->
at_oid
);
return
1
;
}
#endif
if
(
!
OID_LEADCHAR
(
at
->
at_oid
[
0
]
))
{
/* Expand OID macros */
oid
=
find_oidm
(
at
->
at_oid
);
if
(
!
oid
)
{
fprintf
(
stderr
,
"%s: line %d: OID %s not recognized
\n
"
,
fname
,
lineno
,
at
->
at_oid
);
return
1
;
}
if
(
oid
!=
at
->
at_oid
)
{
ldap_memfree
(
at
->
at_oid
);
at
->
at_oid
=
oid
;
}
}
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
)
{
...
...
servers/slapd/slap.h
View file @
6ed15e33
...
...
@@ -234,7 +234,9 @@ typedef struct slap_ssf_set {
#define SLAP_SCHERR_SYN_NOT_FOUND 13
#define SLAP_SCHERR_MR_INCOMPLETE 14
#define SLAP_SCHERR_NOT_SUPPORTED 15
#define SLAP_SCHERR_BAD_DESCR 16
#define SLAP_SCHERR_BAD_DESCR 16
#define SLAP_SCHERR_OIDM 17
#define SLAP_SCHERR_LAST SLAP_SCHERR_OIDM
typedef
union
slap_sockaddr
{
struct
sockaddr
sa_addr
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment