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
52cf422c
Commit
52cf422c
authored
May 19, 2000
by
Kurt Zeilenga
Browse files
SLAPD_SCHEMA_NOT_COMPAT: implement str2entry()
parent
56c186cb
Changes
2
Hide whitespace changes
Inline
Side-by-side
servers/slapd/attr.c
View file @
52cf422c
...
...
@@ -121,7 +121,6 @@ attr_normalize( char *s )
}
#endif
#ifndef SLAPD_SCHEMA_NOT_COMPAT
/*
* attr_merge_fast - merge the given type and value with the list of
* attributes in attrs. called from str2entry(), where we can make some
...
...
@@ -130,6 +129,9 @@ attr_normalize( char *s )
* -1 trouble
*/
#ifdef SLAPD_SCHEMA_NOT_COMPAT
/* not yet implemented */
#else
int
attr_merge_fast
(
Entry
*
e
,
...
...
@@ -168,6 +170,7 @@ attr_merge_fast(
}
#endif
/*
* attr_merge - merge the given type and value with the list of
* attributes in attrs.
...
...
servers/slapd/entry.c
View file @
52cf422c
...
...
@@ -29,20 +29,25 @@ int entry_destroy(void)
return
0
;
}
Entry
*
str2entry
(
char
*
s
)
{
int
rc
;
Entry
*
e
;
Attribute
**
a
=
NULL
;
char
*
type
;
char
*
value
;
char
*
next
;
ber_len_t
vlen
;
struct
berval
value
;
struct
berval
*
vals
[
2
];
#ifdef SLAPD_SCHEMA_NOT_COMPAT
AttributeDescription
*
ad
;
char
*
text
;
#else
int
nvals
=
0
;
int
maxvals
=
0
;
struct
berval
bval
;
struct
berval
*
vals
[
2
];
char
ptype
[
64
]
;
char
ptype
[
64
];
/* fixed size buffer */
#endif
char
*
next
;
/*
* LDIF is used as the string format.
...
...
@@ -62,8 +67,6 @@ str2entry( char *s )
Debug
(
LDAP_DEBUG_TRACE
,
"=> str2entry
\n
"
,
s
?
s
:
"NULL"
,
0
,
0
);
next
=
s
;
/* initialize reader/writer lock */
e
=
(
Entry
*
)
ch_malloc
(
sizeof
(
Entry
)
);
...
...
@@ -82,27 +85,32 @@ str2entry( char *s )
e
->
e_private
=
NULL
;
/* dn + attributes */
vals
[
0
]
=
&
b
val
;
vals
[
0
]
=
&
val
ue
;
vals
[
1
]
=
NULL
;
#ifndef SLAPD_SCHEMA_NOT_COMPAT
ptype
[
0
]
=
'\0'
;
#endif
next
=
s
;
while
(
(
s
=
ldif_getline
(
&
next
))
!=
NULL
)
{
if
(
*
s
==
'\n'
||
*
s
==
'\0'
)
{
break
;
}
if
(
ldif_parse_line
(
s
,
&
type
,
&
value
,
&
v
len
)
!=
0
)
{
if
(
ldif_parse_line
(
s
,
&
type
,
&
value
.
bv_val
,
&
value
.
bv_
len
)
!=
0
)
{
Debug
(
LDAP_DEBUG_TRACE
,
"<= str2entry NULL (parse_line)
\n
"
,
0
,
0
,
0
);
continue
;
}
#ifndef SLAPD_SCHEMA_NOT_COMPAT
if
(
strcasecmp
(
type
,
ptype
)
!=
0
)
{
strncpy
(
ptype
,
type
,
sizeof
(
ptype
)
-
1
);
nvals
=
0
;
maxvals
=
0
;
a
=
NULL
;
}
#endif
if
(
strcasecmp
(
type
,
"dn"
)
==
0
)
{
free
(
type
);
...
...
@@ -111,34 +119,49 @@ str2entry( char *s )
Debug
(
LDAP_DEBUG_ANY
,
"str2entry: entry %ld has multiple dns
\"
%s
\"
and
\"
%s
\"
(second ignored)
\n
"
,
e
->
e_id
,
e
->
e_dn
,
value
!=
NULL
?
value
:
NULL
);
if
(
value
!=
NULL
)
free
(
value
);
value
.
bv_val
!=
NULL
?
value
.
bv_val
:
""
);
if
(
value
.
bv_val
!=
NULL
)
free
(
value
.
bv_val
);
continue
;
}
e
->
e_dn
=
value
!=
NULL
?
value
:
ch_strdup
(
""
);
e
->
e_dn
=
value
.
bv_val
!=
NULL
?
value
.
bv_val
:
ch_strdup
(
""
);
continue
;
}
bval
.
bv_val
=
value
;
bval
.
bv_len
=
vlen
;
#ifdef SLAPD_SCHEMA_NOT_COMPAT
/* not yet implemented */
ad
=
NULL
;
rc
=
slap_str2ad
(
type
,
&
ad
,
&
text
);
if
(
rc
!=
LDAP_SUCCESS
)
{
Debug
(
LDAP_DEBUG_TRACE
,
"<= str2entry NULL (str2ad=%s)
\n
"
,
text
,
0
,
0
);
entry_free
(
e
);
free
(
value
.
bv_val
);
free
(
type
);
return
(
NULL
);
}
rc
=
attr_merge
(
e
,
ad
,
vals
);
ad_free
(
ad
,
1
);
#else
if
(
attr_merge_fast
(
e
,
type
,
vals
,
nvals
,
1
,
&
maxvals
,
&
a
)
!=
0
)
{
rc
=
attr_merge_fast
(
e
,
type
,
vals
,
nvals
,
1
,
&
maxvals
,
&
a
)
#endif
if
(
rc
!=
0
)
{
Debug
(
LDAP_DEBUG_TRACE
,
"<= str2entry NULL (attr_merge)
\n
"
,
0
,
0
,
0
);
entry_free
(
e
);
free
(
value
);
free
(
value
.
bv_val
);
free
(
type
);
return
(
NULL
);
}
#endif
free
(
value
);
free
(
type
);
free
(
value
.
bv_val
);
#ifndef SLAPD_SCHEMA_NOT_COMPAT
nvals
++
;
#endif
}
/* check to make sure there was a dn: line */
...
...
@@ -159,6 +182,7 @@ str2entry( char *s )
return
(
e
);
}
#define GRABSIZE BUFSIZ
#define MAKE_SPACE( n ) { \
...
...
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