# slapo-retcode
Overlay retcode
Utile pour des tests, les réponses sont générées en accord avec
différentes stratégies. Dans le premier cas, pour toutes les opérations
ciblées dans une sous-arborecence, la recherche est effectuées et
vérifiée pour le code de retour, plus un message textuel optionnel.
Les codes de réponse connus sont fournis dans retcodes.conf. Dans le
second cas, les classes d'objet qui héritent de errAbsObject comme
errObject ou errAuxObject, retournent un code dicté par ce contenu. Un
Troisième cas recherche l'objet dans une base pour découvrir si leur
classe hérite de errAbsObject. Dans ce cas, leur contenu est utilisé
pour calculer la réponse correspondante. Désactivé en utilisant le
contrôle manageDSAit.
## OPTIONS
**retcode-parent ‹DN›** Définis le DN parent où les entrées générées
dynamiquement résident.
**retcode-item ‹RDN› ‹errCode› \[op=‹oplist›\] \[text=‹message›\]
\[ref=‹referral›\] md**
**\[unsolicited=‹OID›\[ :‹data›\]\]
\[flags=\[pre|post-\]disconnect\[,...\]\]** Une entrée générée
dynamiquement sous retcode-parent. **errCode** est le numéro du code de
réponse. **oplist** est une liste d'opérations qui génère la génération
du code. **matched** est le DN matché qui est retourné avec l'erreur.
**text** est le message optionnel, **ref** est permis pour le code
referral. **sleeptime** secondes avant de traiter l'opération.
**unsolicited** peut être utilisé pour forcer un message de réponse
unsolicited rfc4511. **OID** si non 0, génère une réponse étendue avec
data ajouté. **flags** contient disconnect ou pre-disconnect (fore la
déconnection sans notification) ou post-disconnect (déconnection après
avoir envoyé la réponse)
**retcode-indir** Active l'exploitation de errAbsObject.
**retcode-sleep \[-\]‹n›** Secondes d'attente avant de manipuler les
opérations. une valeur négative indique une valeur aléatoire entre 0 et
la valeur indiquée.
## Schéma
Le code
d'erreur:
( 1.3.6.1.4.1.4203.666.11.4.1.1 NAME ( 'errCode' ) DESC 'LDAP error
code' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX
1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
L'opération qui déclenche le code de
réponse:
( 1.3.6.1.4.1.4203.666.11.4.1.2 NAME ( 'errOp' ) DESC 'Operations the
errObject applies to' EQUALITY caseIgnoreMatch SUBSTR
caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
le message
textuel:
( 1.3.6.1.4.1.4203.666.11.4.1.3 NAME ( 'errText' ) DESC 'LDAP error
textual description' EQUALITY caseIgnoreMatch SUBSTR
caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )
Temps d'attente avant de retourner la
réponse:
( 1.3.6.1.4.1.4203.666.11.4.1.4 NAME ( 'errSleepTime' ) DESC 'Time to
wait before returning the error' EQUALITY integerMatch SYNTAX
1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
DN retourné au
client:
( 1.3.6.1.4.1.4203.666.11.4.1.5 NAME ( 'errMatchedDN' ) DESC 'Value to
be returned as matched DN' EQUALITY distinguishedNameMatch SYNTAX
1.3.6.1.4.1.1466.115.121.1.12 SINGLE-VALUE )
OID retourné comme réponse étendue unsolicited
responses:
( 1.3.6.1.4.1.4203.666.11.4.1.6 NAME ( 'errUnsolicitedOID' ) DESC 'OID
to be returned within unsolicited response' EQUALITY
objectIdentifierMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 SINGLE-VALUE
)
Chaîne d'octet à retourner comme donnée de réponse
étendue:
( 1.3.6.1.4.1.4203.666.11.4.1.7 NAME ( 'errUnsolicitedData' ) DESC 'Data
to be returned within unsolicited response' SYNTAX
1.3.6.1.4.1.1466.115.121.1.40 SINGLE-VALUE )
Mode de
déconnexion:
( 1.3.6.1.4.1.4203.666.11.4.1.8 NAME ( 'errDisconnect' ) DESC
'Disconnect without notice' SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
SINGLE-VALUE )
Déclencheur de
l'overlay:
( 1.3.6.1.4.1.4203.666.11.4.3.0 NAME ( 'errAbsObject' ) SUP top ABSTRACT
MUST ( errCode ) MAY ( cn $ description $ errOp $ errText $ errSleepTime
$ errMatchedDN ) )
( 1.3.6.1.4.1.4203.666.11.4.3.1 NAME ( 'errObject' ) SUP errAbsObject
STRUCTURAL )
( 1.3.6.1.4.1.4203.666.11.4.3.2 NAME ( 'errAuxObject' ) SUP errAbsObject
AUXILIARY )
## Exemples
retcode.conf se trouve dans tests/data/
**include ./retcode.conf**
Attendre 10 secondes, puis retourner un succès (0x00)
**retcode-item "cn=Success after 10 seconds" 0x00 sleeptime=10**
Attendre 10 secondes, puis retouner timelimitExceeded (0x03)
**retcode-item "cn=Timelimit after 10 seconds" 0x03 sleeptime=10**