ldif et ldap: match des suffixes sans tenir compte de la casse. modrdn prend un nouvel argument SUFFIX
This commit is contained in:
parent
9eb566acf5
commit
5c466d8c2c
|
@ -129,7 +129,7 @@ function get_dcsuffix() {
|
||||||
# base de donnée non administrative.
|
# base de donnée non administrative.
|
||||||
# retourner 1 si la valeur n'a pas pu être obtenue
|
# retourner 1 si la valeur n'a pas pu être obtenue
|
||||||
local suffix
|
local suffix
|
||||||
suffix="$(get_suffixes "$1" | awk '/(^|,)dc=[^,]+/ { print }')" || return 1
|
suffix="$(get_suffixes "$1" | awk '/(^|,)[dD][cC]=[^,]+/ { print }')" || return 1
|
||||||
<<<"$suffix" head -n1
|
<<<"$suffix" head -n1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,22 +140,23 @@ function get_suffix() {
|
||||||
# retourner 1 si la valeur n'a pas pu être obtenue
|
# retourner 1 si la valeur n'a pas pu être obtenue
|
||||||
local suffixes suffix
|
local suffixes suffix
|
||||||
suffixes="$(get_suffixes "$1")" || return 1
|
suffixes="$(get_suffixes "$1")" || return 1
|
||||||
suffix="$(<<<"$suffixes" awk '/(^|,)dc=[^,]+/ { print }')"
|
suffix="$(<<<"$suffixes" awk '/(^|,)[dD][cC]=[^,]+/ { print }')"
|
||||||
[ -n "$suffix" ] || suffix="$suffixes"
|
[ -n "$suffix" ] || suffix="$suffixes"
|
||||||
<<<"$suffix" head -n1
|
<<<"$suffix" head -n1
|
||||||
}
|
}
|
||||||
|
|
||||||
function reldn() {
|
function reldn() {
|
||||||
local suffix="${2:-$SUFFIX}"
|
local dn="$(strlower "$1")"
|
||||||
|
local suffix="$(strlower "${2:-$SUFFIX}")"
|
||||||
|
|
||||||
# exprimer le dn $1 relativement au suffixe $2(=$SUFFIX)
|
# exprimer le dn $1 relativement au suffixe $2(=$SUFFIX)
|
||||||
if [ -z "$suffix" ]; then
|
if [ -z "$suffix" ]; then
|
||||||
echo "$1"
|
echo "$1"
|
||||||
elif [ -z "$1" -o "$1" == "$suffix" ]; then
|
elif [ -z "$dn" -o "$dn" == "$suffix" ]; then
|
||||||
echo ""
|
echo ""
|
||||||
elif [ "${1%,$suffix}" != "$1" ]; then
|
elif [ "${dn%,$suffix}" != "$dn" ]; then
|
||||||
# absolu, enlever $suffix
|
# absolu, enlever $suffix
|
||||||
echo "${1%,$suffix}"
|
echo "${1:$((${#dn} - ${#suffix}))}"
|
||||||
else
|
else
|
||||||
# relatif
|
# relatif
|
||||||
echo "$1"
|
echo "$1"
|
||||||
|
@ -163,19 +164,20 @@ function reldn() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function _absdn() {
|
function _absdn() {
|
||||||
local suffix="$2"
|
local dn="$(strlower "$1")"
|
||||||
|
local suffix="$(strlower "$2")"
|
||||||
|
|
||||||
# obtenir le dn absolu correspondant au dn $1, le dn de base étant $2
|
# obtenir le dn absolu correspondant au dn $1, le dn de base étant $2
|
||||||
if [ -z "$suffix" ]; then
|
if [ -z "$suffix" ]; then
|
||||||
echo "$1"
|
echo "$1"
|
||||||
elif [ -z "$1" -o "$1" == "$suffix" ]; then
|
elif [ -z "$dn" -o "$dn" == "$suffix" ]; then
|
||||||
echo "$suffix"
|
echo "$2"
|
||||||
elif [ "${1%,$suffix}" != "$1" ]; then
|
elif [ "${dn%,$suffix}" != "$dn" ]; then
|
||||||
# absolu
|
# absolu
|
||||||
echo "$1"
|
echo "$1"
|
||||||
else
|
else
|
||||||
# relatif, ajouter $suffix
|
# relatif, ajouter $suffix
|
||||||
echo "$1,$suffix"
|
echo "$1,$2"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +189,9 @@ function absdn() {
|
||||||
|
|
||||||
function subof() {
|
function subof() {
|
||||||
# tester si le dn absolu $1 est $2 ou un enfant de $2
|
# tester si le dn absolu $1 est $2 ou un enfant de $2
|
||||||
[ "$1" == "$2" -o "${1%,$2}" != "$1" ]
|
local dn="$(strlower "$1")"
|
||||||
|
local par="$(strlower "$2")"
|
||||||
|
[ "$dn" == "$par" -o "${dn%,$par}" != "$dn" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
function rabsdn() {
|
function rabsdn() {
|
||||||
|
@ -207,7 +211,7 @@ function rabsdn() {
|
||||||
if [ "${dn#/}" != "$dn" ]; then
|
if [ "${dn#/}" != "$dn" ]; then
|
||||||
echo "${dn#/}"
|
echo "${dn#/}"
|
||||||
elif [ "$dn" == "~" ]; then
|
elif [ "$dn" == "~" ]; then
|
||||||
echo "$SUFFIX"
|
echo "$suffix"
|
||||||
elif [ "${dn#\~/}" != "$dn" ]; then
|
elif [ "${dn#\~/}" != "$dn" ]; then
|
||||||
_absdn "${dn#\~/}" "$suffix"
|
_absdn "${dn#\~/}" "$suffix"
|
||||||
else
|
else
|
||||||
|
|
|
@ -274,16 +274,27 @@ function tl_deleteentry() {
|
||||||
|
|
||||||
function tl_modrdn() {
|
function tl_modrdn() {
|
||||||
local newrdn newsup keep
|
local newrdn newsup keep
|
||||||
|
local suffix="$(strlower "$3")"
|
||||||
|
local dn="$(strlower "$1")"
|
||||||
|
if [ "${1%,}" != "$1" ]; then
|
||||||
|
# ignorer le suffixe éventuellement fourni
|
||||||
|
set -- "${1%,}" "$2"
|
||||||
|
elif [ -n "$suffix" -a "${dn%,$suffix}" == "$dn" ]; then
|
||||||
|
# rajouter le suffixe
|
||||||
|
set -- "$1,$3" "$2"
|
||||||
|
fi
|
||||||
splitfsep "$1" , newrdn newsup
|
splitfsep "$1" , newrdn newsup
|
||||||
case "$2" in
|
case "$2" in k|keep|keepold|keepoldrdn) keep=1;; esac
|
||||||
k|keep|keepold|keepoldrdn) keep=1;;
|
|
||||||
esac
|
|
||||||
awkrun newrdn:str="$newrdn" newsup:str="$newsup" keep:int="$keep" '
|
awkrun newrdn:str="$newrdn" newsup:str="$newsup" keep:int="$keep" '
|
||||||
/^dn:/ {
|
/^dn:/ {
|
||||||
dn = $0
|
actual_newrdn = newrdn
|
||||||
print dn
|
if (actual_newrdn == "") {
|
||||||
|
actual_newrdn = $2
|
||||||
|
gsub(/,.*$/, "", actual_newrdn)
|
||||||
|
}
|
||||||
|
print
|
||||||
print "changetype: modrdn"
|
print "changetype: modrdn"
|
||||||
print "newrdn: " newrdn
|
print "newrdn: " actual_newrdn
|
||||||
if (keep) print "deleteoldrdn: 0"
|
if (keep) print "deleteoldrdn: 0"
|
||||||
else print "deleteoldrdn: 1"
|
else print "deleteoldrdn: 1"
|
||||||
if (newsup != "") print "newsuperior: " newsup
|
if (newsup != "") print "newsuperior: " newsup
|
||||||
|
@ -1274,9 +1285,18 @@ D, moddelattr
|
||||||
Supprimer l'attribut
|
Supprimer l'attribut
|
||||||
delentry
|
delentry
|
||||||
Supprimer l'objet
|
Supprimer l'objet
|
||||||
rename, modrdn NEWRDN[,NEWSUPERIOR] [keep[oldrdn]]
|
rename, modrdn NEWRDN[,NEWSUPERIOR] [keep[oldrdn]] [SUFFIX]
|
||||||
Déplacer/renommer l'objet. L'ancienne valeur est supprimée, à moins que
|
Déplacer/renommer l'objet. L'ancienne valeur est supprimée, à moins que
|
||||||
l'argument keep ne soit spécifié.
|
l'argument keep ne soit spécifié.
|
||||||
|
Si NEWRDN est vide, alors ',NEWSUPERIOR' doit être spécifié (remarquez la
|
||||||
|
virgule avant le nouveau supérieur), et cela signifie que l'objet a le même
|
||||||
|
RDN dans la nouvelle branche.
|
||||||
|
SUFFIX est le suffixe de la base de donnée. Le DN 'NEWRDN,NEWSUPERIOR' est
|
||||||
|
exprimé relativement à SUFFIX, sauf s'il se termine par une virgule. Par
|
||||||
|
exemple, étant donné SUFFIX='dc=domain,dc=tld', les expressions suivantes
|
||||||
|
sont équivalentes:
|
||||||
|
modrdn uid=new,ou=people <=> modrdn uid=new,ou=people,dc=domain,dc=tld
|
||||||
|
modrdn uid=new,cn=config, <=> modrdn uid=new,cn=config
|
||||||
touchentry
|
touchentry
|
||||||
Forcer la réplication de l'objet en simulant une modification"
|
Forcer la réplication de l'objet en simulant une modification"
|
||||||
|
|
||||||
|
@ -1293,6 +1313,9 @@ function get_transform_cmd() {
|
||||||
# _T_cut_after:
|
# _T_cut_after:
|
||||||
# faut-il découper automatiquement les lignes *après* avoir lancé les
|
# faut-il découper automatiquement les lignes *après* avoir lancé les
|
||||||
# commandes.
|
# commandes.
|
||||||
|
# _T_suffix:
|
||||||
|
# suffixe de la base de données pour les commandes qui prennent des RDN,
|
||||||
|
# e.g. modrdn
|
||||||
local -a cmds cmdparts
|
local -a cmds cmdparts
|
||||||
local cmd dest first=1 xempty xdel
|
local cmd dest first=1 xempty xdel
|
||||||
local auto_uncut="$_T_uncut_before"
|
local auto_uncut="$_T_uncut_before"
|
||||||
|
@ -1395,7 +1418,7 @@ function get_transform_cmd() {
|
||||||
d|md|moddel|moddelval) cmdparts=(tl_modifyattr delete);;
|
d|md|moddel|moddelval) cmdparts=(tl_modifyattr delete);;
|
||||||
D|moddelattr) cmdparts=(tl_deleteattr);;
|
D|moddelattr) cmdparts=(tl_deleteattr);;
|
||||||
delentry|moddelentry) cmdparts=(tl_deleteentry);;
|
delentry|moddelentry) cmdparts=(tl_deleteentry);;
|
||||||
rename|modrdn|modrename|modmodrdn) cmdparts=(tl_modrdn "$@");;
|
rename|modrdn|modrename|modmodrdn) cmdparts=(tl_modrdn "$1" "$2" "${3:-$_T_suffix}");;
|
||||||
touch|touchentry|modtouchentry) cmdparts=(tl_touchentry);;
|
touch|touchentry|modtouchentry) cmdparts=(tl_touchentry);;
|
||||||
litteral) cmdparts=("$@");;
|
litteral) cmdparts=("$@");;
|
||||||
*)
|
*)
|
||||||
|
|
Loading…
Reference in New Issue