supporter basedn=='' et rdnattr=='dn'
This commit is contained in:
parent
b750422b94
commit
e0220c0877
86
ulib/ldif
86
ulib/ldif
|
@ -686,7 +686,7 @@ function tl_formatcsv() {
|
||||||
|
|
||||||
function tl_parsecsv() {
|
function tl_parsecsv() {
|
||||||
local -a args headers
|
local -a args headers
|
||||||
local basedn= rdnattr=uid skip_lines=0 parse_headers= vsep=';'
|
local basedn= rdnattr= skip_lines=0 parse_headers= vsep=';'
|
||||||
if parse_opts \
|
if parse_opts \
|
||||||
-u:,--rdnattr: rdnattr= \
|
-u:,--rdnattr: rdnattr= \
|
||||||
-s:,--skip-lines: skip_lines= \
|
-s:,--skip-lines: skip_lines= \
|
||||||
|
@ -699,6 +699,11 @@ function tl_parsecsv() {
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
basedn="$1"; shift
|
basedn="$1"; shift
|
||||||
|
if [ -n "$basedn" ]; then
|
||||||
|
[ -n "$rdnattr" ] || rdnattr=uid
|
||||||
|
else
|
||||||
|
[ -n "$rdnattr" ] || rdnattr=dn
|
||||||
|
fi
|
||||||
[ -n "$*" ] && headers=("$@")
|
[ -n "$*" ] && headers=("$@")
|
||||||
[ -n "${headers[*]}" ] || parse_headers=1
|
[ -n "${headers[*]}" ] || parse_headers=1
|
||||||
|
|
||||||
|
@ -717,12 +722,19 @@ parse_headers {
|
||||||
array_parsecsv(attrs, $0)
|
array_parsecsv(attrs, $0)
|
||||||
rdnindex = key_index(rdnattr, headers)
|
rdnindex = key_index(rdnattr, headers)
|
||||||
rdnvalue = attrs[rdnindex]
|
rdnvalue = attrs[rdnindex]
|
||||||
print "dn: " rdnattr "=" rdnvalue "," basedn
|
if (basedn != "") {
|
||||||
|
print "dn: " rdnattr "=" rdnvalue "," basedn
|
||||||
|
} else {
|
||||||
|
print "dn: " rdnvalue
|
||||||
|
}
|
||||||
nbheaders = length(headers)
|
nbheaders = length(headers)
|
||||||
for (i = 1; i <= nbheaders; i++) {
|
for (i = 1; i <= nbheaders; i++) {
|
||||||
attr = attrs[i]
|
attr = attrs[i]
|
||||||
split(attr, values, vsep)
|
split(attr, values, vsep)
|
||||||
attr = headers[i]
|
attr = headers[i]
|
||||||
|
if (basedn == "" && attr == rdnattr) {
|
||||||
|
continue # ne pas écrire deux fois le même attribut
|
||||||
|
}
|
||||||
for (j = 1; j <= length(values); j++) {
|
for (j = 1; j <= length(values); j++) {
|
||||||
print attr ": " values[j]
|
print attr ": " values[j]
|
||||||
}
|
}
|
||||||
|
@ -734,7 +746,7 @@ parse_headers {
|
||||||
|
|
||||||
function tl_parsecsvmod() {
|
function tl_parsecsvmod() {
|
||||||
local -a args headers
|
local -a args headers
|
||||||
local basedn= rdnattr=uid skip_lines=0 parse_headers= vsep=';'
|
local basedn= rdnattr= skip_lines=0 parse_headers= vsep=';'
|
||||||
if parse_opts \
|
if parse_opts \
|
||||||
-u:,--rdnattr: rdnattr= \
|
-u:,--rdnattr: rdnattr= \
|
||||||
-s:,--skip-lines: skip_lines= \
|
-s:,--skip-lines: skip_lines= \
|
||||||
|
@ -747,6 +759,11 @@ function tl_parsecsvmod() {
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
basedn="$1"; shift
|
basedn="$1"; shift
|
||||||
|
if [ -n "$basedn" ]; then
|
||||||
|
[ -n "$rdnattr" ] || rdnattr=uid
|
||||||
|
else
|
||||||
|
[ -n "$rdnattr" ] || rdnattr=dn
|
||||||
|
fi
|
||||||
[ -n "$*" ] && headers=("$@")
|
[ -n "$*" ] && headers=("$@")
|
||||||
[ -n "${headers[*]}" ] || parse_headers=1
|
[ -n "${headers[*]}" ] || parse_headers=1
|
||||||
|
|
||||||
|
@ -765,33 +782,48 @@ parse_headers {
|
||||||
array_parsecsv(attrvalues, $0)
|
array_parsecsv(attrvalues, $0)
|
||||||
rdnindex = key_index(rdnattr, headers)
|
rdnindex = key_index(rdnattr, headers)
|
||||||
rdnvalue = attrvalues[rdnindex]
|
rdnvalue = attrvalues[rdnindex]
|
||||||
printdn = 1
|
|
||||||
nbheaders = length(headers)
|
nbheaders = length(headers)
|
||||||
|
# déterminer d"abord s"il faut écrire l"objet
|
||||||
|
printobj = 0
|
||||||
for (i = 1; i <= nbheaders; i++) {
|
for (i = 1; i <= nbheaders; i++) {
|
||||||
attr = headers[i]
|
attr = headers[i]
|
||||||
if (attr == rdnattr) continue
|
if (attr == rdnattr) continue
|
||||||
attrvalue = attrvalues[i]
|
attrvalue = attrvalues[i]
|
||||||
if (attrvalue == "") {
|
if (attrvalue == "") continue
|
||||||
continue
|
# ok on doit ecrire le dn
|
||||||
} else if (attrvalue ~ /^(replace|add|delete):/) {
|
if (basedn != "") {
|
||||||
changetype = attrvalue
|
print "dn: " rdnattr "=" rdnvalue "," basedn
|
||||||
sub(/:.*/, "", changetype)
|
|
||||||
attrvalue = substr(attrvalue, length(changetype) + 2)
|
|
||||||
} else {
|
} else {
|
||||||
changetype = "replace"
|
print "dn: " rdnvalue
|
||||||
}
|
}
|
||||||
if (printdn) {
|
print "changetype: modify"
|
||||||
print "dn: " rdnattr "=" rdnvalue "," basedn "\nchangetype: modify"
|
printobj = 1
|
||||||
printdn = 0
|
break
|
||||||
}
|
}
|
||||||
print changetype ": " attr
|
# maintenant, écrire l"objet le cas échéant
|
||||||
split(attrvalue, values, vsep)
|
if (printobj) {
|
||||||
for (j = 1; j <= length(values); j++) {
|
for (i = 1; i <= nbheaders; i++) {
|
||||||
print attr ": " values[j]
|
attr = headers[i]
|
||||||
}
|
if (attr == rdnattr) continue
|
||||||
print "-"
|
attrvalue = attrvalues[i]
|
||||||
|
if (attrvalue == "") {
|
||||||
|
continue
|
||||||
|
} else if (attrvalue ~ /^(replace|add|delete):/) {
|
||||||
|
changetype = attrvalue
|
||||||
|
sub(/:.*/, "", changetype)
|
||||||
|
attrvalue = substr(attrvalue, length(changetype) + 2)
|
||||||
|
} else {
|
||||||
|
changetype = "replace"
|
||||||
|
}
|
||||||
|
print changetype ": " attr
|
||||||
|
split(attrvalue, values, vsep)
|
||||||
|
for (j = 1; j <= length(values); j++) {
|
||||||
|
print attr ": " values[j]
|
||||||
|
}
|
||||||
|
print "-"
|
||||||
|
}
|
||||||
|
print ""
|
||||||
}
|
}
|
||||||
if (!printdn) print ""
|
|
||||||
}
|
}
|
||||||
'
|
'
|
||||||
}
|
}
|
||||||
|
@ -913,6 +945,11 @@ parsecsv [options] basedn [attrs...]
|
||||||
Analyser le flux au format CSV (qui a par exemple été générée avec la
|
Analyser le flux au format CSV (qui a par exemple été générée avec la
|
||||||
commande formatcsv), et reconstruire les objets LDAP associés.
|
commande formatcsv), et reconstruire les objets LDAP associés.
|
||||||
|
|
||||||
|
En principe, basedn n'est pas vide, et l'option -u détermine l'attribut dont
|
||||||
|
la valeur est utilisée pour nommer les objets. Le cas particulier basedn==''
|
||||||
|
est aussi supporté, auquel cas la valeur par défaut de rdnattr n'est plus
|
||||||
|
'uid' mais 'dn'
|
||||||
|
|
||||||
basedn
|
basedn
|
||||||
DN de base des objets à construire
|
DN de base des objets à construire
|
||||||
-u, --rdnattr rdnattr[=uid]
|
-u, --rdnattr rdnattr[=uid]
|
||||||
|
@ -934,6 +971,11 @@ parsecsvmod [options] basedn [attrs...]
|
||||||
où CHANGETYPE peut valoir replace (par défaut), add, delete. Si une valeur
|
où CHANGETYPE peut valoir replace (par défaut), add, delete. Si une valeur
|
||||||
est vide, elle est ignorée
|
est vide, elle est ignorée
|
||||||
|
|
||||||
|
En principe, basedn n'est pas vide, et l'option -u détermine l'attribut dont
|
||||||
|
la valeur est utilisée pour nommer les objets. Le cas particulier basedn==''
|
||||||
|
est aussi supporté, auquel cas la valeur par défaut de rdnattr n'est plus
|
||||||
|
'uid' mais 'dn'
|
||||||
|
|
||||||
basedn
|
basedn
|
||||||
DN de base des objets à construire
|
DN de base des objets à construire
|
||||||
-u, --rdnattr rdnattr[=uid]
|
-u, --rdnattr rdnattr[=uid]
|
||||||
|
|
Loading…
Reference in New Issue