Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
O
OpenLDAP
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jaak Ristioja
OpenLDAP
Commits
3f6e23cb
Commit
3f6e23cb
authored
24 years ago
by
Kurt Zeilenga
Browse files
Options
Downloads
Patches
Plain Diff
Add LDAPv3 rename support
parent
8d4ec581
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
clients/tools/ldapmodify.c
+60
-50
60 additions, 50 deletions
clients/tools/ldapmodify.c
with
60 additions
and
50 deletions
clients/tools/ldapmodify.c
+
60
−
50
View file @
3f6e23cb
...
...
@@ -72,11 +72,21 @@ static LDAP *ld;
static
void
usage
LDAP_P
((
const
char
*
prog
))
LDAP_GCCATTR
((
noreturn
));
static
int
process_ldif_rec
LDAP_P
((
char
*
rbuf
,
int
count
));
static
void
addmodifyop
LDAP_P
((
LDAPMod
***
pmodsp
,
int
modop
,
char
*
attr
,
char
*
value
,
int
vlen
));
static
int
domodify
LDAP_P
((
char
*
dn
,
LDAPMod
**
pmods
,
int
newentry
));
static
int
dodelete
LDAP_P
((
char
*
dn
));
static
int
domodrdn
LDAP_P
((
char
*
dn
,
char
*
newrdn
,
int
deleteoldrdn
));
static
void
addmodifyop
LDAP_P
((
LDAPMod
***
pmodsp
,
int
modop
,
const
char
*
attr
,
struct
berval
*
value
));
static
int
domodify
LDAP_P
((
const
char
*
dn
,
LDAPMod
**
pmods
,
int
newentry
));
static
int
dodelete
LDAP_P
((
const
char
*
dn
));
static
int
dorename
LDAP_P
((
const
char
*
dn
,
const
char
*
newrdn
,
const
char
*
newsup
,
int
deleteoldrdn
));
static
char
*
read_one_record
LDAP_P
((
FILE
*
fp
));
static
void
...
...
@@ -493,14 +503,14 @@ main( int argc, char **argv )
static
int
process_ldif_rec
(
char
*
rbuf
,
int
count
)
{
char
*
line
,
*
dn
,
*
type
,
*
value
,
*
newrdn
,
*
newsup
,
*
p
;
char
*
line
,
*
dn
,
*
type
,
*
newrdn
,
*
newsup
,
*
p
;
int
rc
,
linenum
,
modop
,
replicaport
;
ber_len_t
vlen
;
int
expect_modop
,
expect_sep
,
expect_ct
,
expect_newrdn
,
expect_newsup
;
int
expect_deleteoldrdn
,
deleteoldrdn
;
int
saw_replica
,
use_record
,
new_entry
,
delete_entry
,
got_all
;
LDAPMod
**
pmods
;
int
version
;
struct
berval
val
;
new_entry
=
ldapadd
;
...
...
@@ -523,7 +533,7 @@ process_ldif_rec( char *rbuf, int count )
continue
;
}
if
(
ldif_parse_line
(
line
,
&
type
,
&
val
ue
,
&
v
len
)
<
0
)
{
if
(
ldif_parse_line
(
line
,
&
type
,
&
val
.
bv_val
,
&
val
.
bv_
len
)
<
0
)
{
fprintf
(
stderr
,
"%s: invalid format (line %d) entry:
\"
%s
\"\n
"
,
prog
,
linenum
,
dn
==
NULL
?
""
:
dn
);
rc
=
LDAP_PARAM_ERROR
;
...
...
@@ -533,27 +543,27 @@ process_ldif_rec( char *rbuf, int count )
if
(
dn
==
NULL
)
{
if
(
!
use_record
&&
strcasecmp
(
type
,
T_REPLICA_STR
)
==
0
)
{
++
saw_replica
;
if
((
p
=
strchr
(
val
ue
,
':'
))
==
NULL
)
{
if
((
p
=
strchr
(
val
.
bv_val
,
':'
))
==
NULL
)
{
replicaport
=
0
;
}
else
{
*
p
++
=
'\0'
;
replicaport
=
atoi
(
p
);
}
if
(
ldaphost
!=
NULL
&&
strcasecmp
(
val
ue
,
ldaphost
)
==
0
&&
if
(
ldaphost
!=
NULL
&&
strcasecmp
(
val
.
bv_val
,
ldaphost
)
==
0
&&
replicaport
==
ldapport
)
{
use_record
=
1
;
}
}
else
if
(
count
==
1
&&
linenum
==
1
&&
strcasecmp
(
type
,
T_VERSION_STR
)
==
0
)
{
if
(
vlen
==
0
||
atoi
(
val
ue
)
!=
1
)
{
if
(
v
al
.
bv_
len
==
0
||
atoi
(
val
.
bv_val
)
!=
1
)
{
fprintf
(
stderr
,
"%s: invalid version %s, line %d (ignored)
\n
"
,
prog
,
val
ue
==
NULL
?
"(null)"
:
val
ue
,
linenum
);
prog
,
val
.
bv_val
==
NULL
?
"(null)"
:
val
.
bv_val
,
linenum
);
}
version
++
;
}
else
if
(
strcasecmp
(
type
,
T_DN_STR
)
==
0
)
{
if
((
dn
=
strdup
(
val
ue
?
value
:
""
))
==
NULL
)
{
if
((
dn
=
strdup
(
val
.
bv_val
?
val
.
bv_val
:
""
))
==
NULL
)
{
perror
(
"strdup"
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -570,27 +580,27 @@ process_ldif_rec( char *rbuf, int count )
prog
,
dn
);
free
(
dn
);
ber_memfree
(
type
);
ber_memfree
(
val
ue
);
ber_memfree
(
val
.
bv_val
);
return
(
0
);
}
if
(
strcasecmp
(
type
,
T_CHANGETYPESTR
)
==
0
)
{
if
(
strcasecmp
(
val
ue
,
T_MODIFYCTSTR
)
==
0
)
{
if
(
strcasecmp
(
val
.
bv_val
,
T_MODIFYCTSTR
)
==
0
)
{
new_entry
=
0
;
expect_modop
=
1
;
}
else
if
(
strcasecmp
(
val
ue
,
T_ADDCTSTR
)
==
0
)
{
}
else
if
(
strcasecmp
(
val
.
bv_val
,
T_ADDCTSTR
)
==
0
)
{
new_entry
=
1
;
}
else
if
(
strcasecmp
(
val
ue
,
T_MODRDNCTSTR
)
==
0
||
strcasecmp
(
val
ue
,
T_MODDNCTSTR
)
==
0
||
strcasecmp
(
val
ue
,
T_RENAMECTSTR
)
==
0
)
}
else
if
(
strcasecmp
(
val
.
bv_val
,
T_MODRDNCTSTR
)
==
0
||
strcasecmp
(
val
.
bv_val
,
T_MODDNCTSTR
)
==
0
||
strcasecmp
(
val
.
bv_val
,
T_RENAMECTSTR
)
==
0
)
{
expect_newrdn
=
1
;
}
else
if
(
strcasecmp
(
val
ue
,
T_DELETECTSTR
)
==
0
)
{
}
else
if
(
strcasecmp
(
val
.
bv_val
,
T_DELETECTSTR
)
==
0
)
{
got_all
=
delete_entry
=
1
;
}
else
{
fprintf
(
stderr
,
"%s: unknown %s
\"
%s
\"
(line %d of entry
\"
%s
\"
)
\n
"
,
prog
,
T_CHANGETYPESTR
,
val
ue
,
linenum
,
dn
);
prog
,
T_CHANGETYPESTR
,
val
.
bv_val
,
linenum
,
dn
);
rc
=
LDAP_PARAM_ERROR
;
}
goto
end_line
;
...
...
@@ -610,11 +620,11 @@ process_ldif_rec( char *rbuf, int count )
goto
end_line
;
}
else
if
(
strcasecmp
(
type
,
T_MODOPREPLACESTR
)
==
0
)
{
modop
=
LDAP_MOD_REPLACE
;
addmodifyop
(
&
pmods
,
modop
,
val
ue
,
NULL
,
0
);
addmodifyop
(
&
pmods
,
modop
,
val
.
bv_val
,
NULL
);
goto
end_line
;
}
else
if
(
strcasecmp
(
type
,
T_MODOPDELETESTR
)
==
0
)
{
modop
=
LDAP_MOD_DELETE
;
addmodifyop
(
&
pmods
,
modop
,
val
ue
,
NULL
,
0
);
addmodifyop
(
&
pmods
,
modop
,
val
.
bv_val
,
NULL
);
goto
end_line
;
}
else
{
/* no modify op: use default */
modop
=
replace
?
LDAP_MOD_REPLACE
:
LDAP_MOD_ADD
;
...
...
@@ -623,7 +633,7 @@ process_ldif_rec( char *rbuf, int count )
if
(
expect_newrdn
)
{
if
(
strcasecmp
(
type
,
T_NEWRDNSTR
)
==
0
)
{
if
((
newrdn
=
strdup
(
val
ue
))
==
NULL
)
{
if
((
newrdn
=
strdup
(
val
.
bv_val
?
val
.
bv_val
:
""
))
==
NULL
)
{
perror
(
"strdup"
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -636,7 +646,7 @@ process_ldif_rec( char *rbuf, int count )
}
}
else
if
(
expect_deleteoldrdn
)
{
if
(
strcasecmp
(
type
,
T_DELETEOLDRDNSTR
)
==
0
)
{
deleteoldrdn
=
(
*
val
ue
==
'0'
)
?
0
:
1
;
deleteoldrdn
=
(
*
val
.
bv_val
==
'0'
)
?
0
:
1
;
expect_deleteoldrdn
=
0
;
expect_newsup
=
1
;
got_all
=
1
;
...
...
@@ -647,7 +657,7 @@ process_ldif_rec( char *rbuf, int count )
}
}
else
if
(
expect_newsup
)
{
if
(
strcasecmp
(
type
,
T_NEWSUPSTR
)
==
0
)
{
if
((
newsup
=
strdup
(
val
ue
))
==
NULL
)
{
if
((
newsup
=
strdup
(
val
.
bv_val
?
val
.
bv_val
:
""
))
==
NULL
)
{
perror
(
"strdup"
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -663,12 +673,12 @@ process_ldif_rec( char *rbuf, int count )
prog
,
linenum
,
dn
);
rc
=
LDAP_PARAM_ERROR
;
}
else
{
addmodifyop
(
&
pmods
,
modop
,
type
,
val
ue
,
vlen
);
addmodifyop
(
&
pmods
,
modop
,
type
,
val
.
bv_val
==
NULL
?
NULL
:
&
val
);
}
end_line:
ber_memfree
(
type
);
ber_memfree
(
val
ue
);
ber_memfree
(
val
.
bv_val
);
}
if
(
linenum
==
0
)
{
...
...
@@ -683,7 +693,7 @@ end_line:
if
(
delete_entry
)
{
rc
=
dodelete
(
dn
);
}
else
if
(
newrdn
!=
NULL
)
{
rc
=
do
modrdn
(
dn
,
newrdn
,
deleteoldrdn
);
rc
=
do
rename
(
dn
,
newrdn
,
newsup
,
deleteoldrdn
);
}
else
{
rc
=
domodify
(
dn
,
pmods
,
new_entry
);
}
...
...
@@ -708,11 +718,14 @@ end_line:
static
void
addmodifyop
(
LDAPMod
***
pmodsp
,
int
modop
,
char
*
attr
,
char
*
value
,
int
vlen
)
addmodifyop
(
LDAPMod
***
pmodsp
,
int
modop
,
const
char
*
attr
,
struct
berval
*
val
)
{
LDAPMod
**
pmods
;
int
i
,
j
;
struct
berval
*
bvp
;
pmods
=
*
pmodsp
;
modop
|=
LDAP_MOD_BVALUES
;
...
...
@@ -753,7 +766,7 @@ addmodifyop( LDAPMod ***pmodsp, int modop, char *attr, char *value, int vlen )
}
}
if
(
val
ue
!=
NULL
)
{
if
(
val
!=
NULL
)
{
j
=
0
;
if
(
pmods
[
i
]
->
mod_bvalues
!=
NULL
)
{
for
(
;
pmods
[
i
]
->
mod_bvalues
[
j
]
!=
NULL
;
++
j
)
{
...
...
@@ -769,28 +782,20 @@ addmodifyop( LDAPMod ***pmodsp, int modop, char *attr, char *value, int vlen )
}
pmods
[
i
]
->
mod_bvalues
[
j
+
1
]
=
NULL
;
bvp
=
(
struct
berval
*
)
ber_memalloc
(
sizeof
(
struct
ber
val
)
);
if
(
bvp
==
NULL
)
{
perror
(
"ber_
memalloc
"
);
pmods
[
i
]
->
mod_bvalues
[
j
]
=
ber_bvdup
(
val
);
if
(
pmods
[
i
]
->
mod_bvalues
[
j
]
==
NULL
)
{
perror
(
"ber_
bvdup
"
);
exit
(
EXIT_FAILURE
);
}
pmods
[
i
]
->
mod_bvalues
[
j
]
=
bvp
;
bvp
->
bv_len
=
vlen
;
bvp
->
bv_val
=
(
char
*
)
ber_memalloc
(
vlen
+
1
);
if
(
bvp
->
bv_val
==
NULL
)
{
perror
(
"malloc"
);
exit
(
EXIT_FAILURE
);
}
SAFEMEMCPY
(
bvp
->
bv_val
,
value
,
vlen
);
bvp
->
bv_val
[
vlen
]
=
'\0'
;
}
}
static
int
domodify
(
char
*
dn
,
LDAPMod
**
pmods
,
int
newentry
)
domodify
(
const
char
*
dn
,
LDAPMod
**
pmods
,
int
newentry
)
{
int
i
,
j
,
k
,
notascii
,
op
;
struct
berval
*
bvp
;
...
...
@@ -855,7 +860,8 @@ domodify( char *dn, LDAPMod **pmods, int newentry )
static
int
dodelete
(
char
*
dn
)
dodelete
(
const
char
*
dn
)
{
int
rc
;
...
...
@@ -877,7 +883,11 @@ dodelete( char *dn )
static
int
domodrdn
(
char
*
dn
,
char
*
newrdn
,
int
deleteoldrdn
)
dorename
(
const
char
*
dn
,
const
char
*
newrdn
,
const
char
*
newsup
,
int
deleteoldrdn
)
{
int
rc
;
...
...
@@ -888,7 +898,7 @@ domodrdn( char *dn, char *newrdn, int deleteoldrdn )
newrdn
,
deleteoldrdn
?
"do not "
:
""
);
}
if
(
!
not
)
{
if
((
rc
=
ldap_
modrdn
2_s
(
ld
,
dn
,
newrdn
,
deleteoldrdn
))
if
((
rc
=
ldap_
rename
2_s
(
ld
,
dn
,
newrdn
,
newsup
,
deleteoldrdn
))
!=
LDAP_SUCCESS
)
{
ldap_perror
(
ld
,
"ldap_modrdn"
);
}
else
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment