Intégration de la branche ldapt

This commit is contained in:
Jephté Clain 2015-04-16 13:53:16 +04:00
commit d756a6c6d2
1 changed files with 183 additions and 170 deletions

View File

@ -13,7 +13,7 @@ function def_match_attr() {
return attr \":\" return attr \":\"
} }
function norm_attr(attr) { function norm_attr(attr) {
return tolower(attr) return tolower(attr)
} }
function match_attr(attr) { function match_attr(attr) {
attr = tolower(attr) attr = tolower(attr)
@ -88,7 +88,7 @@ BEGIN {
} }
END { END {
if (inline) print line if (inline) print line
} }
' '
} }
@ -170,23 +170,23 @@ END { dump_ldif() }
function tl_addattr() { function tl_addattr() {
awk ' awk '
/^dn:/ { /^dn:/ {
lastattr = "" lastattr = ""
dn = $0 dn = $0
next next
} }
{ {
attr = $1 attr = $1
if (attr != "") { if (attr != "") {
if (dn != "") { if (dn != "") {
print dn print dn
print "changetype: add" print "changetype: add"
dn = "" dn = ""
}
sub(/:+$/, "", attr)
} }
print sub(/:+$/, "", attr)
lastattr = attr }
print
lastattr = attr
} }
' '
} }
@ -195,33 +195,33 @@ function tl_modifyattr() {
local modtype="$1" local modtype="$1"
awkrun modtype="$modtype" ' awkrun modtype="$modtype" '
/^dn:/ { /^dn:/ {
lastattr = "" lastattr = ""
dn = $0 dn = $0
next next
} }
{ {
attr = $1 attr = $1
if (attr == "") { if (attr == "") {
if (lastattr != "") { if (lastattr != "") {
print "-" print "-"
}
} else {
if (dn != "") {
print dn
print "changetype: modify"
dn = ""
}
sub(/:+$/, "", attr)
if (lastattr != attr) {
if (lastattr != "") {
print "-"
}
print modtype ": " attr
}
} }
print } else {
lastattr = attr if (dn != "") {
print dn
print "changetype: modify"
dn = ""
}
sub(/:+$/, "", attr)
if (lastattr != attr) {
if (lastattr != "") {
print "-"
}
print modtype ": " attr
}
}
print
lastattr = attr
} }
' '
} }
@ -229,33 +229,33 @@ function tl_modifyattr() {
function tl_deleteattr() { function tl_deleteattr() {
awk ' awk '
/^dn:/ { /^dn:/ {
lastattr = "" lastattr = ""
dn = $0 dn = $0
next next
} }
{ {
attr = $1 attr = $1
if (attr == "") { if (attr == "") {
if (lastattr != "") { if (lastattr != "") {
print "-" print "-"
print print
}
} else {
if (dn != "") {
print dn
print "changetype: modify"
dn = ""
}
sub(/:+$/, "", attr)
if (lastattr != attr) {
if (lastattr != "") {
print "-"
}
print "delete: " attr
}
} }
lastattr = attr } else {
if (dn != "") {
print dn
print "changetype: modify"
dn = ""
}
sub(/:+$/, "", attr)
if (lastattr != attr) {
if (lastattr != "") {
print "-"
}
print "delete: " attr
}
}
lastattr = attr
} }
' '
} }
@ -263,11 +263,11 @@ function tl_deleteattr() {
function tl_deleteentry() { function tl_deleteentry() {
awk ' awk '
/^dn:/ { /^dn:/ {
dn = $0 dn = $0
print dn print dn
print "changetype: delete" print "changetype: delete"
print "" print ""
next next
} }
' '
} }
@ -275,11 +275,11 @@ function tl_deleteentry() {
function tl_touchentry() { function tl_touchentry() {
awk ' awk '
/^dn:/ { /^dn:/ {
dn = $0 dn = $0
print dn print dn
print "changetype: modify" print "changetype: modify"
print "" print ""
next next
} }
' '
} }
@ -288,7 +288,7 @@ function tl_keepattr() {
local match_attr="$1" local match_attr="$1"
awk "$match_attr"' awk "$match_attr"'
$0 == "" || match_attr($1) { $0 == "" || match_attr($1) {
print print
} }
' '
} }
@ -447,11 +447,11 @@ add && match_attr($1) {
print_values() print_values()
} }
add && $0 == "" { add && $0 == "" {
print_values() print_values()
} }
{ print } { print }
END { END {
if (add) print_values() if (add) print_values()
} }
' '
awk "$script" awk "$script"
@ -496,7 +496,7 @@ add && $0 == "" {
} }
{ print } { print }
END { END {
if (add && !found) print_values() if (add && !found) print_values()
} }
' '
awk "$script" awk "$script"
@ -505,41 +505,6 @@ END {
function tl_ensureval() { function tl_ensureval() {
local attr="$1"; shift local attr="$1"; shift
local script="$(def_match_attr "$attr") 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 { BEGIN {
resetp() resetp()
attr = fix_attr($(quoted_awk "$attr")) attr = fix_attr($(quoted_awk "$attr"))
@ -556,6 +521,55 @@ BEGIN {
found_values[0] = 0 found_values[0] = 0
delete found_values 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:/ { /^dn:/ {
ensure = 1 ensure = 1
} }
@ -584,28 +598,28 @@ function tl_decode() {
local match_attr="$1" local match_attr="$1"
awkrun -f "$match_attr"' awkrun -f "$match_attr"'
function split_base64(text, result) { function split_base64(text, result) {
result = "" result = ""
while (text != "") { while (text != "") {
if (result != "") result = result "\n" if (result != "") result = result "\n"
result = result substr(text, 1, 64) result = result substr(text, 1, 64)
text = substr(text, 65) text = substr(text, 65)
} }
return result return result
} }
/^[^:]+:: / && match_attr($1) { /^[^:]+:: / && match_attr($1) {
name = $0; sub(/::.*$/, "", name) name = $0; sub(/::.*$/, "", name)
value = $0; sub(/^[^:]+:: /, "", value) value = $0; sub(/^[^:]+:: /, "", value)
decoded_value = b64decode(value) decoded_value = b64decode(value)
#cmd = "echo '\''" split_base64(value) "'\'' | openssl base64 -d" #cmd = "echo '\''" split_base64(value) "'\'' | openssl base64 -d"
#decoded_value = "" #decoded_value = ""
#while ((cmd | getline line) > 0) { #while ((cmd | getline line) > 0) {
# decoded_value = decoded_value line # decoded_value = decoded_value line
#} #}
#close(cmd) #close(cmd)
print name ": " decoded_value print name ": " decoded_value
next next
} }
{ print } { print }
' '
@ -615,23 +629,23 @@ function tl_encode() {
local match_attr="$1" local match_attr="$1"
awkrun "$match_attr"' awkrun "$match_attr"'
function quote(text) { function quote(text) {
# remplacer les quotes par le caractere echappement approprie # remplacer les quotes par le caractere echappement approprie
gsub('"/'/, \"'\\\\''\""', text) gsub('"/'/, \"'\\\\''\""', text)
return text return text
} }
/^[^:]+: / && match_attr($1) { /^[^:]+: / && match_attr($1) {
name = $0; sub(/:.*$/, "", name) name = $0; sub(/:.*$/, "", name)
value = $0; sub(/^[^:]+: /, "", value) value = $0; sub(/^[^:]+: /, "", value)
cmd = "echo '\''" quote(value) "'\'' | openssl base64" cmd = "echo '\''" quote(value) "'\'' | openssl base64"
coded_value = "" coded_value = ""
while ((cmd | getline line) > 0) { while ((cmd | getline line) > 0) {
coded_value = coded_value line coded_value = coded_value line
} }
close(cmd) close(cmd)
print name ":: " coded_value print name ":: " coded_value
next next
} }
{ print } { print }
' '
@ -1019,22 +1033,25 @@ dec, decode [ATTRS...]
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... xe, xempty, excludeempty
Garder uniquement les lignes des attributs mentionnés. Ensuite, supprimer Supprimer les objets sans attributs, qui ont uniquement une ligne dn:
les objets ayant uniquement la ligne dn: (en d'autres termes, keepattr sans k, keepattr [--no-xempty] ATTRS...
argument supprime *tout* le flux) Garder uniquement les attributs mentionnés, puis supprimer les objets sans
kv, keepval ATTR PATTERNS... attributs avec xempty, sauf si l'option --no-xempty est spécifiée (en
d'autres termes, keepattr sans argument supprime *tout* le flux)
kv, keepval [--no-xempty] 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 sans attributs avec xempty,
dn: sauf si l'option --no-xempty est spécifiée
x, excludeattr ATTRS... x, excludeattr [--no-xempty] 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: sans attributs avec xempty, sauf si l'option --no-xempty est spécifiée
xv, excludeval ATTR PATTERNS... xv, excludeval [--no-xempty] 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 sans attributs avec xempty, sauf si
l'option --no-xempty est spécifiée.
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
@ -1056,6 +1073,12 @@ ev, ensureval ATTR VALUES...
déjà. Par exemple, pour s'assurer que l'attribut ATTR a les valeurs V0 et déjà. Par exemple, pour s'assurer que l'attribut ATTR a les valeurs V0 et
V1, on ferait: V1, on ferait:
ensureval ATTR V0 V1 // modaddval 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 sed ARGS
awk ARGS awk ARGS
grep ARGS grep ARGS
@ -1281,23 +1304,24 @@ function get_transform_cmd() {
;; ;;
dec|decode) cmdparts=(tl_decode "$(def_match_attr "$@")");; dec|decode) cmdparts=(tl_decode "$(def_match_attr "$@")");;
enc|encode) cmdparts=(tl_encode "$(def_match_attr "$@")");; enc|encode) cmdparts=(tl_encode "$(def_match_attr "$@")");;
xe|xempty|excludeempty) cmdparts=(ensure_complete_objects);;
k|keep|keepattr) k|keep|keepattr)
[ "$1" == --no-xempty ] && shift || xempty=1
cmdparts=(tl_keepattr "$(def_match_attr dn "$@")") cmdparts=(tl_keepattr "$(def_match_attr dn "$@")")
xempty=1
;; ;;
K|kv|keepval) K|kv|keepval)
[ "$1" == --no-xempty ] && shift || xempty=1
local match_attr="$(def_match_attr "$1")"; shift local match_attr="$(def_match_attr "$1")"; shift
cmdparts=(tl_keepval "$match_attr" "$(def_match_value "$@")") cmdparts=(tl_keepval "$match_attr" "$(def_match_value "$@")")
xempty=1
;; ;;
x|exclude|excludeattr) x|exclude|excludeattr)
[ "$1" == --no-xempty ] && shift || xempty=1
cmdparts=(tl_excludeattr "$(def_match_attr "$@")") cmdparts=(tl_excludeattr "$(def_match_attr "$@")")
xempty=1
;; ;;
dv|delval|X|xv|excludeval) dv|delval|X|xv|excludeval)
[ "$1" == --no-xempty ] && shift || xempty=1
local match_attr="$(def_match_attr "$1")"; shift local match_attr="$(def_match_attr "$1")"; shift
cmdparts=(tl_excludeval "$match_attr" "$(def_match_value "$@")") cmdparts=(tl_excludeval "$match_attr" "$(def_match_value "$@")")
xempty=1
;; ;;
xve|excludevalentry) xve|excludevalentry)
local match_attr="$(def_match_attr "$1")"; shift local match_attr="$(def_match_attr "$1")"; shift
@ -1312,21 +1336,10 @@ function get_transform_cmd() {
sv|setval|rv|replval) sv|setval|rv|replval)
local match_attr="$(def_match_attr "$1")"; shift local match_attr="$(def_match_attr "$1")"; shift
cmdparts=(tl_replval "$match_attr" "$@") cmdparts=(tl_replval "$match_attr" "$@")
xempty=1
;; ;;
av|addval) av|addval) cmdparts=(tl_addval "$@");;
cmdparts=(tl_addval "$@") fv|defval) cmdparts=(tl_defval "$@");;
xempty=1 ev|ensureval) cmdparts=(tl_ensureval "$@");;
;;
fv|defval)
cmdparts=(tl_defval "$@")
xempty=1
;;
ev|ensureval)
cmdparts=(tl_ensureval "$@")
xempty=1
;;
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}" "$@");;
lsed|lawk|lgrep|lsort) cmdparts=("${cmd#l}" "$@");; lsed|lawk|lgrep|lsort) cmdparts=("${cmd#l}" "$@");;