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() { 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]
if (basedn != "") {
print "dn: " rdnattr "=" rdnvalue "," 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,8 +782,26 @@ 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++) {
attr = headers[i]
if (attr == rdnattr) continue
attrvalue = attrvalues[i]
if (attrvalue == "") continue
# ok on doit ecrire le dn
if (basedn != "") {
print "dn: " rdnattr "=" rdnvalue "," basedn
} else {
print "dn: " rdnvalue
}
print "changetype: modify"
printobj = 1
break
}
# maintenant, écrire l"objet le cas échéant
if (printobj) {
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
@ -780,10 +815,6 @@ parse_headers {
} else { } else {
changetype = "replace" changetype = "replace"
} }
if (printdn) {
print "dn: " rdnattr "=" rdnvalue "," basedn "\nchangetype: modify"
printdn = 0
}
print changetype ": " attr print changetype ": " attr
split(attrvalue, values, vsep) split(attrvalue, values, vsep)
for (j = 1; j <= length(values); j++) { for (j = 1; j <= length(values); j++) {
@ -791,7 +822,8 @@ parse_headers {
} }
print "-" print "-"
} }
if (!printdn) print "" 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]