supporter basedn=='' et rdnattr=='dn'

This commit is contained in:
Jephte CLAIN 2014-07-04 18:43:19 +04:00
parent b750422b94
commit e0220c0877
1 changed files with 64 additions and 22 deletions

View File

@ -686,7 +686,7 @@ function tl_formatcsv() {
function tl_parsecsv() {
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 \
-u:,--rdnattr: rdnattr= \
-s:,--skip-lines: skip_lines= \
@ -699,6 +699,11 @@ function tl_parsecsv() {
return 1
fi
basedn="$1"; shift
if [ -n "$basedn" ]; then
[ -n "$rdnattr" ] || rdnattr=uid
else
[ -n "$rdnattr" ] || rdnattr=dn
fi
[ -n "$*" ] && headers=("$@")
[ -n "${headers[*]}" ] || parse_headers=1
@ -717,12 +722,19 @@ parse_headers {
array_parsecsv(attrs, $0)
rdnindex = key_index(rdnattr, headers)
rdnvalue = attrs[rdnindex]
print "dn: " rdnattr "=" rdnvalue "," basedn
if (basedn != "") {
print "dn: " rdnattr "=" rdnvalue "," basedn
} else {
print "dn: " rdnvalue
}
nbheaders = length(headers)
for (i = 1; i <= nbheaders; i++) {
attr = attrs[i]
split(attr, values, vsep)
attr = headers[i]
if (basedn == "" && attr == rdnattr) {
continue # ne pas écrire deux fois le même attribut
}
for (j = 1; j <= length(values); j++) {
print attr ": " values[j]
}
@ -734,7 +746,7 @@ parse_headers {
function tl_parsecsvmod() {
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 \
-u:,--rdnattr: rdnattr= \
-s:,--skip-lines: skip_lines= \
@ -747,6 +759,11 @@ function tl_parsecsvmod() {
return 1
fi
basedn="$1"; shift
if [ -n "$basedn" ]; then
[ -n "$rdnattr" ] || rdnattr=uid
else
[ -n "$rdnattr" ] || rdnattr=dn
fi
[ -n "$*" ] && headers=("$@")
[ -n "${headers[*]}" ] || parse_headers=1
@ -765,33 +782,48 @@ parse_headers {
array_parsecsv(attrvalues, $0)
rdnindex = key_index(rdnattr, headers)
rdnvalue = attrvalues[rdnindex]
printdn = 1
nbheaders = length(headers)
# déterminer d"abord s"il faut écrire l"objet
printobj = 0
for (i = 1; i <= nbheaders; i++) {
attr = headers[i]
if (attr == rdnattr) continue
attrvalue = attrvalues[i]
if (attrvalue == "") {
continue
} else if (attrvalue ~ /^(replace|add|delete):/) {
changetype = attrvalue
sub(/:.*/, "", changetype)
attrvalue = substr(attrvalue, length(changetype) + 2)
if (attrvalue == "") continue
# ok on doit ecrire le dn
if (basedn != "") {
print "dn: " rdnattr "=" rdnvalue "," basedn
} else {
changetype = "replace"
print "dn: " rdnvalue
}
if (printdn) {
print "dn: " rdnattr "=" rdnvalue "," basedn "\nchangetype: modify"
printdn = 0
}
print changetype ": " attr
split(attrvalue, values, vsep)
for (j = 1; j <= length(values); j++) {
print attr ": " values[j]
}
print "-"
print "changetype: modify"
printobj = 1
break
}
# maintenant, écrire l"objet le cas échéant
if (printobj) {
for (i = 1; i <= nbheaders; i++) {
attr = headers[i]
if (attr == rdnattr) continue
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
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
DN de base des objets à construire
-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
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
DN de base des objets à construire
-u, --rdnattr rdnattr[=uid]