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
9160692a
Commit
9160692a
authored
Jul 31, 1999
by
Kurt Zeilenga
Browse files
Remove "const" error... and add prototype for yet unimplemented
ldif_fetch_url().
parent
3f566efb
Changes
3
Hide whitespace changes
Inline
Side-by-side
clients/tools/ldapmodify.c
View file @
9160692a
...
...
@@ -374,7 +374,7 @@ process_ldif_rec( char *rbuf, int count )
}
if
(
ldif_parse_line
(
line
,
&
type
,
&
value
,
&
vlen
)
<
0
)
{
fprintf
(
stderr
,
"%s: invalid format (line %d
of
entry:
%s
\n
"
,
fprintf
(
stderr
,
"%s: invalid format (line %d
)
entry:
\"
%s
\"
\n
"
,
prog
,
linenum
,
dn
==
NULL
?
""
:
dn
);
rc
=
LDAP_PARAM_ERROR
;
break
;
...
...
include/ldif.h
View file @
9160692a
...
...
@@ -53,7 +53,13 @@ ldif_parse_line LDAP_P((
LDAP_CONST
char
*
line
,
char
**
name
,
char
**
value
,
ber_len_t
*
vlen
));
ber_len_t
*
vlen
));
LDAP_F
(
int
)
ldif_fetch_url
LDAP_P
((
LDAP_CONST
char
*
line
,
char
**
value
,
ber_len_t
*
vlen
));
LDAP_F
(
char
*
)
ldif_getline
LDAP_P
((
char
**
next
));
...
...
libraries/libldif/line64.c
View file @
9160692a
...
...
@@ -53,43 +53,69 @@ static const unsigned char b642nib[0x80] = {
int
ldif_parse_line
(
LDAP_CONST
char
*
line
,
char
**
type
,
char
**
value
,
ber_len_t
*
vlen
char
**
type
p
,
char
**
value
p
,
ber_len_t
*
vlen
p
)
{
char
*
p
,
*
s
,
*
d
,
*
byte
,
*
stop
;
char
*
s
,
*
p
,
*
d
;
char
nib
;
int
i
,
b64
;
int
b64
,
url
;
char
*
freeme
,
*
type
,
*
value
;
ber_len_t
vlen
;
*
typep
=
NULL
;
*
valuep
=
NULL
;
*
vlenp
=
NULL
;
/* skip any leading space */
while
(
isspace
(
(
unsigned
char
)
*
line
)
)
{
line
++
;
}
*
type
=
line
;
for
(
s
=
line
;
*
s
&&
*
s
!=
':'
;
s
++
)
/* EMPTY */
;
if
(
*
s
==
'\0'
)
{
freeme
=
ber_strdup
(
line
);
if
(
freeme
==
NULL
)
{
ber_pvt_log_printf
(
LDAP_DEBUG_ANY
,
ldif_debug
,
"ldif_parse_line: line malloc failed
\n
"
);
return
(
-
1
);
}
type
=
freeme
;
s
=
strchr
(
type
,
':'
);
if
(
s
==
NULL
)
{
ber_pvt_log_printf
(
LDAP_DEBUG_PARSE
,
ldif_debug
,
"ldif_parse_line missing ':'
\n
"
);
"ldif_parse_line: missing ':' after %s
\n
"
,
type
);
ber_memfree
(
freeme
);
return
(
-
1
);
}
/* trim any space between type and : */
for
(
p
=
s
-
1
;
p
>
lin
e
&&
isspace
(
(
unsigned
char
)
*
p
);
p
--
)
{
for
(
p
=
&
s
[
-
1
]
;
p
>
typ
e
&&
isspace
(
*
(
unsigned
char
*
)
p
);
p
--
)
{
*
p
=
'\0'
;
}
*
s
++
=
'\0'
;
/* check for double : - indicates base 64 encoded value */
if
(
*
s
==
':'
)
{
if
(
*
s
==
'\0'
)
{
/* no value */
value
=
NULL
;
vlen
=
0
;
goto
done
;
}
url
=
0
;
b64
=
0
;
if
(
*
s
==
'<'
)
{
s
++
;
url
=
1
;
}
else
if
(
*
s
==
':'
)
{
/* base 64 encoded value */
s
++
;
b64
=
1
;
/* single : - normally encoded value */
}
else
{
b64
=
0
;
}
/* skip space between : and value */
...
...
@@ -100,8 +126,11 @@ ldif_parse_line(
/* if no value is present, error out */
if
(
*
s
==
'\0'
)
{
ber_pvt_log_printf
(
LDAP_DEBUG_PARSE
,
ldif_debug
,
"ldif_parse_line missing value
\n
"
);
return
(
-
1
);
"ldif_parse_line: %s missing %svalue
\n
"
,
type
,
url
?
"URL "
:
b64
?
"base64 "
:
""
);
value
=
NULL
;
vlen
=
0
;
goto
done
;
}
/* check for continued line markers that should be deleted */
...
...
@@ -111,17 +140,21 @@ ldif_parse_line(
}
*
d
=
'\0'
;
*
value
=
s
;
if
(
b64
)
{
stop
=
strchr
(
s
,
'\0'
);
byte
=
s
;
for
(
p
=
s
,
*
vlen
=
0
;
p
<
stop
;
p
+=
4
,
*
vlen
+=
3
)
{
char
*
byte
=
s
;
value
=
s
;
for
(
p
=
s
,
vlen
=
0
;
p
<
d
;
p
+=
4
,
vlen
+=
3
)
{
int
i
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
if
(
p
[
i
]
!=
'='
&&
(
p
[
i
]
&
0x80
||
b642nib
[
p
[
i
]
&
0x7f
]
>
0x3f
)
)
{
ber_pvt_log_printf
(
LDAP_DEBUG_ANY
,
ldif_debug
,
"ldif_parse_line: invalid base 64 encoding char (%c) 0x%x
\n
"
,
p
[
i
],
p
[
i
]
);
"ldif_parse_line: %s: invalid base64 encoding"
" char (%c) 0x%x
\n
"
,
type
,
p
[
i
],
p
[
i
]
);
ber_memfree
(
freeme
);
return
(
-
1
);
}
}
...
...
@@ -135,7 +168,7 @@ ldif_parse_line(
byte
[
1
]
=
(
nib
&
RIGHT4
)
<<
4
;
/* third digit */
if
(
p
[
2
]
==
'='
)
{
*
vlen
+=
1
;
vlen
+=
1
;
break
;
}
nib
=
b642nib
[
p
[
2
]
&
0x7f
];
...
...
@@ -143,7 +176,7 @@ ldif_parse_line(
byte
[
2
]
=
(
nib
&
RIGHT2
)
<<
6
;
/* fourth digit */
if
(
p
[
3
]
==
'='
)
{
*
vlen
+=
2
;
vlen
+=
2
;
break
;
}
nib
=
b642nib
[
p
[
3
]
&
0x7f
];
...
...
@@ -151,11 +184,49 @@ ldif_parse_line(
byte
+=
3
;
}
s
[
*
vlen
]
=
'\0'
;
s
[
vlen
]
=
'\0'
;
}
else
if
(
url
)
{
if
(
ldif_fetch_url
(
s
,
&
value
,
&
vlen
)
)
{
ber_pvt_log_printf
(
LDAP_DEBUG_ANY
,
ldif_debug
,
"ldif_parse_line: %s: URL
\"
%s
\"
fetch failed
\n
"
,
type
,
s
);
ber_memfree
(
freeme
);
return
(
-
1
);
}
}
else
{
*
vlen
=
(
int
)
(
d
-
s
);
value
=
s
;
vlen
=
(
int
)
(
d
-
s
);
}
done:
type
=
ber_strdup
(
type
);
if
(
type
==
NULL
)
{
ber_pvt_log_printf
(
LDAP_DEBUG_ANY
,
ldif_debug
,
"ldif_parse_line: type malloc failed
\n
"
);
ber_memfree
(
freeme
);
return
(
-
1
);
}
if
(
!
url
&&
value
!=
NULL
)
{
value
=
ber_strdup
(
value
);
if
(
value
==
NULL
)
{
ber_pvt_log_printf
(
LDAP_DEBUG_ANY
,
ldif_debug
,
"ldif_parse_line: value malloc failed
\n
"
);
ber_memfree
(
type
);
ber_memfree
(
freeme
);
return
(
-
1
);
}
}
ber_memfree
(
freeme
);
*
typep
=
type
;
*
valuep
=
value
;
*
vlenp
=
vlen
;
return
(
0
);
}
...
...
@@ -204,6 +275,18 @@ ldif_getline( char **next )
return
(
line
);
}
int
ldif_fetch_url
(
LDAP_CONST
char
*
url
,
char
**
valuep
,
ber_len_t
*
vlenp
)
{
*
valuep
=
NULL
;
*
vlenp
=
NULL
;
return
-
1
;
}
/* compatibility with U-Mich off by one bug */
#define LDIF_KLUDGE 1
...
...
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