ajout de defval aux commande de transformation de ldif

This commit is contained in:
Jephte CLAIN 2015-01-15 21:18:22 +04:00
parent 3b9c9f7ec8
commit f724bffe82
2 changed files with 101 additions and 49 deletions

View File

@ -1 +1 @@
007018000 007019000

View File

@ -457,6 +457,51 @@ END {
awk "$script" awk "$script"
} }
function tl_defval() {
local attr="$1"; shift
local script="$(def_match_attr "$attr")
function resetp() {
add = 0
found = 0
}
function print_values() {
for (i = 0; i < count; i++) {
print attr \" \" values[i]
}
resetp()
}
BEGIN {
add = 0
found = 0
attr = fix_attr($(quoted_awk "$attr"))
count = $#"
local i value
let i=0
for value in "$@"; do
script="$script
values[$i] = $(quoted_awk "$value")"
let i=$i+1
done
script="$script
}"'
/^dn:/ {
add = 1
}
add && match_attr($1) {
found = 1
}
add && $0 == "" {
if (!found) print_values()
resetp()
}
{ print }
END {
if (add && !found) print_values()
}
'
awk "$script"
}
function tl_decode() { function tl_decode() {
local match_attr="$1" local match_attr="$1"
awkrun -f "$match_attr"' awkrun -f "$match_attr"'
@ -853,45 +898,48 @@ u, uncut
c, cut c, cut
Couper les lignes trop longues. Il n'est pas conseillé d'appliquer des Couper les lignes trop longues. Il n'est pas conseillé d'appliquer des
méthodes de transformation après avoir utilisé cette action. méthodes de transformation après avoir utilisé cette action.
dec, decode [attrs...] dec, decode [ATTRS...]
Décoder les valeurs des attributs mentionnés si nécessaire (c'est à dire Décoder les valeurs des attributs mentionnés si nécessaire (c'est à dire
s'ils sont encodés en base64) s'ils sont encodés en base64)
enc, encode [attrs...] enc, encode [ATTRS...]
Encoder en base64 les valeurs des attributs mentionnés. Encoder en base64 les valeurs des attributs mentionnés.
k, keepattr attrs... k, keepattr ATTRS...
Garder uniquement les lignes des attributs mentionnés. Ensuite, supprimer Garder uniquement les lignes des attributs mentionnés. Ensuite, supprimer
les objets ayant uniquement la ligne dn: (en d'autres termes, keepattr sans les objets ayant uniquement la ligne dn: (en d'autres termes, keepattr sans
argument supprime *tout* le flux) argument supprime *tout* le flux)
kv, keepval attr patterns... kv, keepval ATTR PATTERNS...
Pour l'attribut attr, garder uniquement les lignes pour lesquelles les Pour l'attribut attr, garder uniquement les lignes pour lesquelles les
valeurs correspondent aux expressions régulières. Les autres attributs ne valeurs correspondent aux expressions régulières. Les autres attributs ne
sont pas modifiés. Ensuite, supprimer les objets ayant uniquement la ligne sont pas modifiés. Ensuite, supprimer les objets ayant uniquement la ligne
dn: dn:
x, excludeattr attrs... x, excludeattr ATTRS...
Supprimer les lignes des attributs mentionnés. Ensuite, supprimer les objets Supprimer les lignes des attributs mentionnés. Ensuite, supprimer les objets
ayant uniquement la ligne dn: ayant uniquement la ligne dn:
xv, excludeval attr patterns... xv, excludeval ATTR PATTERNS...
Pour l'attribut attr, supprimer les lignes pour lesquelles les valeurs Pour l'attribut attr, supprimer les lignes pour lesquelles les valeurs
correspondent aux expressions régulières. Les autres attributs ne sont pas correspondent aux expressions régulières. Les autres attributs ne sont pas
modifiés. Ensuite, supprimer les objets ayant uniquement la ligne dn: modifiés. Ensuite, supprimer les objets ayant uniquement la ligne dn:
kve, keepvalentry attr patterns... kve, keepvalentry ATTR PATTERNS...
Pour l'attribut attr, vérifier si *au moins une* valeur correspond à l'une Pour l'attribut attr, vérifier si *au moins une* valeur correspond à l'une
des expressions régulières. Si c'est le cas, garder toute l'entrée, sinon des expressions régulières. Si c'est le cas, garder toute l'entrée, sinon
supprimer toute l'entrée. supprimer toute l'entrée.
xve, excludevalentry attr patterns... xve, excludevalentry ATTR PATTERNS...
Pour l'attribut attr, vérifier si *aucune* des valeurs ne correspond à l'une Pour l'attribut attr, vérifier si *aucune* des valeurs ne correspond à l'une
des expressions régulières. Si c'est le cas, garder toute l'entrée, sinon des expressions régulières. Si c'est le cas, garder toute l'entrée, sinon
supprimer toute l'entrée. supprimer toute l'entrée.
rv, replval attr values... rv, replval ATTR VALUES...
Remplacer toutes les valeurs de l'attribut attr par les valeurs spécifiées. Remplacer toutes les valeurs de l'attribut attr par les valeurs spécifiées.
av, addval attr values... av, addval ATTR VALUES...
Ajouter un nouvel attribut avec les valeurs spécifiées. Si l'attribut existe Ajouter un nouvel attribut avec les valeurs spécifiées. Si l'attribut existe
déjà, les nouvelles valeurs sont ajoutées à la fin. déjà, les nouvelles valeurs sont ajoutées à la fin.
sed args dv, defval ATTR VALUES...
awk args Ajouter un nouvel attribut avec les valeurs spécifiées, s'il n'existe pas
grep args déjà. Si l'attribut existe déjà, cette opération est un NOP.
sort [args] sed ARGS
awkrun [args] awk ARGS
grep ARGS
sort [ARGS]
awkrun [ARGS]
Traiter le flux avec respectivement les commandes sed, awk, grep, sort et Traiter le flux avec respectivement les commandes sed, awk, grep, sort et
awkrun. awkrun est la version 'améliorée' de awk offerte par nutools. awkrun. awkrun est la version 'améliorée' de awk offerte par nutools.
Note: ces commandes ne tiennent pas compte de la locale: elles sont lancées Note: ces commandes ne tiennent pas compte de la locale: elles sont lancées
@ -899,7 +947,7 @@ awkrun [args]
Note: aucun argument n'est filtré, mais il ne faudrait pas utiliser les Note: aucun argument n'est filtré, mais il ne faudrait pas utiliser les
options qui provoquent la modification en place d'un fichier, comme par options qui provoquent la modification en place d'un fichier, comme par
exemple l'option -i de sed exemple l'option -i de sed
format [options] attrs... format [OPTIONS] ATTRS...
Formater le flux au format ldif en données tabulaires. Formater le flux au format ldif en données tabulaires.
Chaque attribut peut être de la forme newname:oldname pour avoir des Chaque attribut peut être de la forme newname:oldname pour avoir des
en-têtes avec un nom différent des noms des attributs. L'effet est le même en-têtes avec un nom différent des noms des attributs. L'effet est le même
@ -951,7 +999,7 @@ format [options] attrs...
--ec --ec
Dans le mode -e, spécifier une commande à insérer après le dernier Dans le mode -e, spécifier une commande à insérer après le dernier
enregistrement enregistrement
formatcsv [options] attrs... formatcsv [OPTIONS] ATTRS...
Equivalent à 'format -F , --show-headers --quote \\\"' Equivalent à 'format -F , --show-headers --quote \\\"'
-n, --no-headers -n, --no-headers
Ne pas afficher les en-têtes. Par défaut, les en-têtes sont affichés. Ne pas afficher les en-têtes. Par défaut, les en-têtes sont affichés.
@ -959,16 +1007,16 @@ formatcsv [options] attrs...
--quote QUOTE --quote QUOTE
--escape ESCAPE --escape ESCAPE
Ces options ont la même signification que pour format Ces options ont la même signification que pour format
parsecsv [options] basedn [attrs...] 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 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=='' 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 est aussi supporté, auquel cas la valeur par défaut de rdnattr n'est plus
'uid' mais 'dn' '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]
Nommer les objets avec la valeur de l'attribut spécifié Nommer les objets avec la valeur de l'attribut spécifié
@ -981,20 +1029,20 @@ parsecsv [options] basedn [attrs...]
-R VSEP -R VSEP
Spécifier le séparateur pour les valeurs des attributs. Par défaut, il Spécifier le séparateur pour les valeurs des attributs. Par défaut, il
s'agit du point-virgule ';' s'agit du point-virgule ';'
parsecsvmod [options] basedn [attrs...] parsecsvmod [OPTIONS] BASEDN [ATTRS...]
Analyser le flux au format CSV qui contient des ordres de modification des Analyser le flux au format CSV qui contient des ordres de modification des
objets LDAP, et construire les modifications au format LDIF. objets LDAP, et construire les modifications au format LDIF.
L'attribut rdnattr est le seul dont la valeur doit être au format standard. L'attribut rdnattr (spécifié avec l'option -u) est le seul dont la valeur
Les valeurs des autres attributs doivent être de la forme [CHANGETYPE:]value doit être au format standard. Les valeurs des autres attributs doivent être
où CHANGETYPE peut valoir replace (par défaut), add, delete. Si une valeur de la forme [CHANGETYPE:]value où CHANGETYPE peut valoir replace, add, ou
est vide, elle est ignorée delete. CHANGETYPE vaut replace par défaut. 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 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=='' 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 est aussi supporté, auquel cas la valeur par défaut de rdnattr n'est plus
'uid' mais 'dn' '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]
Nommer les objets avec la valeur de l'attribut spécifié Nommer les objets avec la valeur de l'attribut spécifié
@ -1007,35 +1055,35 @@ parsecsvmod [options] basedn [attrs...]
-R VSEP -R VSEP
Spécifier le séparateur pour les valeurs des attributs. Par défaut, il Spécifier le séparateur pour les valeurs des attributs. Par défaut, il
s'agit du point-virgule ';' s'agit du point-virgule ';'
awkcsv [options] [attrs...] awkcsv [OPTIONS] [ATTRS...]
$(sed 's/^/ /g' <<<"$__AWKCSV_HELP") $(sed 's/^/ /g' <<<"$__AWKCSV_HELP")
mergecsv [options] left right -k field mergecsv [OPTIONS] LEFT RIGHT -k FIELD
$(sed 's/^/ /g' <<<"$__MERGECSV_HELP") $(sed 's/^/ /g' <<<"$__MERGECSV_HELP")
sortcsv [options] input -k field sortcsv [OPTIONS] INPUT -k FIELD
$(sed 's/^/ /g' <<<"$__SORTCSV_HELP") $(sed 's/^/ /g' <<<"$__SORTCSV_HELP")
lsed args lsed ARGS
lawk args lawk ARGS
lgrep args lgrep ARGS
lsort [args] lsort [ARGS]
lawkrun [args] lawkrun [ARGS]
lawkcsv [options] [attrs...] lawkcsv [OPTIONS] [ATTRS...]
lmergecsv [options] left right -k field lmergecsv [OPTIONS] LEFT RIGHT -k FIELD
lsortcsv [options] input -k field lsortcsv [OPTIONS] INPUT -k FIELD
Ces commandes sont comme les commandes sans le préfixe 'l', mais elles sont Ces commandes sont comme les commandes sans le préfixe 'l', mais elles sont
lancées sans LANG=C, ce qui fait qu'elle tiennent compte de la locale. lancées sans LANG=C, ce qui fait qu'elle tiennent compte de la locale.
En effet, les outils de coreutils utilisent les règles de la locale pour le En effet, les outils de coreutils utilisent les règles de la locale pour le
tri et la comparaison des chaines, et par exemple, avec LANG=fr_FR.UTF-8, la tri et la comparaison des chaines, et par exemple, avec LANG=fr_FR.UTF-8, la
locale indique que les ponctuations doivent être ignorées pour le tri, ce locale indique que les ponctuations doivent être ignorées pour le tri, ce
qui peut poser problème. qui peut poser problème.
csed args csed ARGS
cawk args cawk ARGS
cgrep args cgrep ARGS
csort [args] csort [ARGS]
cawkrun [args] cawkrun [ARGS]
cawkcsv [options] [attrs...] cawkcsv [OPTIONS] [ATTRS...]
cmergecsv [options] left right -k field cmergecsv [OPTIONS] LEFT RIGHT -k FIELD
csortcsv [options] input -k field csortcsv [OPTIONS] INPUT -k FIELD
Ces commandes existent pour compatibilité. Ces commandes sont des aliases Ces commandes existent pour compatibilité. Ces commandes sont des aliases
des commandes sans le préfixe 'c', et existent pour insister sur le fait des commandes sans le préfixe 'c', et existent pour insister sur le fait
qu'elles sont lancées avec LANG=C. qu'elles sont lancées avec LANG=C.
@ -1149,6 +1197,10 @@ function get_transform_cmd() {
cmdparts=(tl_addval "$@") cmdparts=(tl_addval "$@")
xempty=1 xempty=1
;; ;;
dv|defval)
cmdparts=(tl_defval "$@")
xempty=1
;;
xe|xempty|excludeempty) cmdparts=(ensure_complete_objects);; xe|xempty|excludeempty) cmdparts=(ensure_complete_objects);;
sed|awk|grep|sort) cmdparts=(LANG=C "$cmd" "$@");; sed|awk|grep|sort) cmdparts=(LANG=C "$cmd" "$@");;
csed|cawk|cgrep|csort) cmdparts=(LANG=C "${cmd#c}" "$@");; csed|cawk|cgrep|csort) cmdparts=(LANG=C "${cmd#c}" "$@");;