diff --git a/lib/ulib/ldif b/lib/ulib/ldif index f3cb5a9..743999e 100644 --- a/lib/ulib/ldif +++ b/lib/ulib/ldif @@ -505,41 +505,6 @@ END { function tl_ensureval() { local attr="$1"; shift local script="$(def_match_attr "$attr") -function resetp() { - ensure = 0 - found = 0 -} -function get_attrvalue(line) { - sub(/^[^:]+::?[ ]+/, \"\", line) - return line -} -function add_to_found_values(value) { - found_values[found_count] = value - found_count++ -} -function in_found_values(value, i) { - for (i = 0; i < found_count; i++) { - if (found_values[i] == value) { - return 1 - } - } - return 0 -} -function print_ensure_values() { - for (i = 0; i < ensure_count; i++) { - print attr \" \" ensure_values[i] - } - resetp() -} -function print_missing_values( value) { - for (i = 0; i < ensure_count; i++) { - value = ensure_values[i] - if (!in_found_values(value)) { - print attr \" \" value - } - } - resetp() -} BEGIN { resetp() attr = fix_attr($(quoted_awk "$attr")) @@ -556,6 +521,55 @@ BEGIN { found_values[0] = 0 delete found_values }"' +function resetp() { + ensure = 0 + found = 0 +} +function get_attrvalue(line) { + sub(/^[^:]+::?[ ]+/, "", line) + return line +} +function add_to_found_values(value) { + found_values[found_count] = value + found_count++ +} +function in_found_values(value, i, found_value) { + if (value ~ /^{}/) { + sub(/^{}/, "", value) + for (i = 0; i < found_count; i++) { + found_value = found_values[i] + sub(/^{[0-9]+}/, "", found_value) + if (found_value == value) { + return 1 + } + } + } else { + for (i = 0; i < found_count; i++) { + if (found_values[i] == value) { + return 1 + } + } + } + return 0 +} +function print_ensure_values() { + for (i = 0; i < ensure_count; i++) { + value = ensure_values[i] + sub(/^{}/, "", value) + print attr " " value + } + resetp() +} +function print_missing_values( value) { + for (i = 0; i < ensure_count; i++) { + value = ensure_values[i] + if (!in_found_values(value)) { + sub(/^{}/, "", value) + print attr " " value + } + } + resetp() +} /^dn:/ { ensure = 1 } @@ -1056,6 +1070,12 @@ ev, ensureval ATTR VALUES... déjà. Par exemple, pour s'assurer que l'attribut ATTR a les valeurs V0 et V1, on ferait: ensureval ATTR V0 V1 // modaddval + Certains attributs sont ordonnés. Leurs valeurs sont étiquettées avec leur + index, e.g {2}value. Si l'on ne veut pas faire de correspondance exacte, + c'est à dire tester uniquement la présence d'une valeur indépendamment de + son index, il faut utiliser la syntaxe {}value, e.g: + ensureval ATTR {}value // modaddval + S'il faut ajouter les valeurs, elle sont mentionnées sans le préfixe {} sed ARGS awk ARGS grep ARGS