# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:19
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: uldap

{{{
uldap: Shell pour accéder à un serveur ldap

USAGE
    uldap [options]

OPTIONS
    -C profile
        Sélectionner un profil de connexion. Par défaut, si l'option -H n'est
        pas spécifiée, le premier profil est sélectionné.
    -x  Ne pas tenter de faire une connexion sur le profil par défaut si aucun
        profil n'est sélectionné.
    -f script
        Lire les commandes depuis le script spécifié.
    -n  Avec un script donné en ligne de commande ou lu depuis un fichier, ne pas
        ajouter automatiquement la commande print à la fin
    -i  Si un script est spécifié, passer en mode interactif après l'exécution
        du script.
    -e  Forcer l'arrêt du script si une erreur se produit. C'est l'option par
        défaut pour un script spécifié avec -f.
    -l input.ldif
        Charger le fichier input.ldif comme espace de travail initial
    -H ldapuri
    -D binddn
    -w password
    -b searchbase
    -v var=value

COMMANDES
    $ cmd
        Passer directement une commande au shell.
    set [options] [var=value...]
        Changer des options ou des variables. set sans argument affiche la liste
        des variables définies.
    [set] plain
        Passer en mode 'plain': indiquer que l'espace de travail contient des
        données brutes. Les pré-traitements et post-traitements (uncut_on_load,
        decode_on_load, encode_on_save, cut_on_save) ne sont pas appliqués sur
        cet espace de travail
    [set] ldif
        Passer en mode 'ldif': indiquer que l'espace de travail contient des
        données ldif. Les pré-traitements et post-traitements sont appliqués
        normalement sur cet espace de travail
    [set] append
        Pour certaines opérations, spécifier si le résultat de la *prochaine*
        opération remplace le contenu de l'espace de travail courant (par
        défaut), ou si le résultat est ajouté à la fin.
    last
        Afficher en mode édition la dernière commande. Cette commande n'est
        fonctionnelle qu'avec une version de bash >=4.x
    profile name
        Choisir le profil 'name'. Equivalent à 'set profile=name'. Sans
        argument, afficher la liste des profils valides.
    auth anonymous|binddn [password]
        Spécifier le compte à utiliser pour se connecter. Equivalent à
        'set binddn=binddn; set password=password'
    clear [-k]
        Vider l'espace de travail et passer en mode 'plain'.
        Avec l'option -k, supprimer aussi tout l'historique d'annulation.
    load [-k] input
        Charger un fichier dans l'espace de travail. Si l'extension du fichier
        est .ldif, passer en mode 'ldif'
        En mode append, rajouter le contenu du fichier à l'espace de travail,
        puis repasser en mode replace.
        Le code de retour est 0 si le fichier a été chargé, 1 sinon.
    save [-a] output
        Sauvegarder l'espace de travail dans un fichier.
        Avec l'option -a, rajouter au fichier au lieu de l'écraser
    print
        Afficher l'espace de travail
    alias a=rdn...
        Définir un alias pour la commande cd. 'a' est l'alias, 'rdn' est le dn
        correspondant, exprimé par rapport à $suffix. Sans argument, afficher
        la liste des aliases définis.
    cd rdn
        Changer searchbase. Par défaut, il s'agit d'un rdn relatif à $searchbase
        - Certains aliases sont supportés: .. pour l'objet parent, ~ pour
          $suffix, / pour la racine. 'cd' sans argument équivaut à 'cd ~'
        - Si le dn commence par '~/', il s'agit d'un rdn relatif à $suffix.
        - Si le dn commence par /, searchbase reçoit la valeur rdn sans
          modifications (sauf bien sûr enlever le '/' de tête si nécessaire). Il
          faut alors que ce soit un dn absolu.
    ls [-b searchbase] [filter [attrs...]]
    search [-b searchbase] [filter [attrs...]]
        Utiliser ldapsearch pour faire la recherche, et copier le résultat dans
        l'espace de travail. 'ls' est équivalent à 'search -s one'. Si ce n'est
        pas déjà le cas, passer en mode 'ldif'.
        L'option -b prend une valeur avec la même syntaxe que la commande cd,
        sauf que les alias ne sont pas supportés. En particulier, la valeur est
        relative au $searchbase courant. Pour faire une recherche par rapport à
        $suffix, il faut utiliser la syntaxe ~/searchbase.
        En mode append, rajouter le résultat de la recherche à l'espace de
        travail, puis repasser en mode replace.
        Le code de retour est 1 si aucun enregistrement n'a été trouvé, sinon
        le code de retour est celui de la commande ldapsearch.
    cut Couper les lignes trop longues. Cette action est en principe effectuée
        automatiquement lors de la sauvegarde. Il n'est pas conseillé
        d'appliquer des méthodes de transformation après avoir utilisé cette
        action.
    uncut
        Fusionner les lignes coupées. Cette action est en principe effectuée
        automatiquement lors du chargement ou après la recherche.
    encode [attrs...]
        Encoder en base64 les valeurs des attributs mentionnés.
    decode [attrs...]
        Décoder les valeurs des attributs mentionnés si nécessaire (c'est à dire
        s'ils sont encodés en base64)
    keepattr attrs...
        Garder uniquement les lignes des attributs mentionnés. Ensuite,
        supprimer les objets ayant uniquement la ligne dn: (en d'autres termes,
        keepattr sans argument supprime *tout* l'espace de travail)
    keepval attr patterns...
        Pour l'attribut attr, garder uniquement les lignes pour lesquelles les
        valeurs correspondent aux expressions régulières. Les autres attributs
        ne sont pas modifiés. Ensuite, supprimer les objets ayant uniquement la
        ligne dn:
    exclude attrs...
        Supprimer les lignes des attributs mentionnés. Ensuite, supprimer les
        objets ayant uniquement la ligne dn:
    excludeval attr patterns...
        Pour l'attribut attr, supprimer les lignes pour lesquelles les
        valeurs correspondent aux expressions régulières. Les autres attributs
        ne sont pas modifiés. Ensuite, supprimer les objets ayant uniquement la
        ligne dn:
    keepvalentry attr patterns...
        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 l'entrée
        entière, sinon supprimer l'entrée.
    excludevalentry attr patterns...
        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 l'entrée
        entière, sinon supprimer l'entrée.
    setval attr values...
        Remplacer toutes les valeurs de l'attribut attr par les valeurs
        spécifiées.
    addval attr values...
        Ajouter un nouvel attribut avec les valeurs spécifiées. Si l'attribut
        existe déjà, les nouvelles valeurs sont ajoutées à la fin.
    sed args
        Modifier l'espace de travail avec le résultat de la commande sed.
        note: aucun argument n'est filtré, mais il ne faut pas utiliser les
        options de sed qui provoquent la modification en place du fichier,
        comme par exemple l'option -i
    awk args
        Modifier l'espace de travail avec le résultat de la commande awk.
    grep args
        Modifier l'espace de travail avec le résultat de la commande grep.
    format [options] attrs...
        Formater l'espace de travail en données tabulaires, et passer en mode
        'plain'.
        --show-headers
            Afficher les en-têtes
        -F FSEP
            Spécifier le séparateur pour les attributs. Par défaut, il s'agit du
            caractère de tabulation.
        -R VSEP
            Spécifier le séparateur pour les valeurs des attributs. Par défaut, il
            s'agit du point-virgule ';'
        -e  Retourner les valeurs comme des variables shell. Les options -F et -R
            sont ignorées. Les attributs multivalués sont écrits sous forme de
            tableaux. Par exemple:
                attributes=('mail' 'givenName')
                index=0
                mail='user@domain.fr'
                givenName=('peter' 'gabriel')
        --bc
            Dans le mode -e, spécifier une commande à insérer avant le premier
            enregistrement. Quand cette commande est lancée, index==-1
        -c  Dans le mode -e, spécifier une commande à insérer après chaque
            enregistrement
        --ec
            Dans le mode -e, spécifier une commande à insérer après le dernier
            enregistrement
    sort [args]
        Modifier l'espace de travail avec le résultat de la commande sort.
    edit
        Lancer un éditeur pour modifier l'espace de travail.
    diff [options]
        Afficher les différences entre l'espace de travail et la version
        précédente
    ifok cmd
    iferror cmd
        Si le dernier code de retour est 0 (resp. !=0), lancer la commande cmd
    skip n
        Sauter les n prochaines commandes. A utiliser avec ifok et iferror
    undo
        Annuler la dernière modification effectuée sur l'espace de travail

Les directives suivantes prennent le contenu de l'espace de travail, et le
transforment en une suite de commandes de modifications pour ldapmodify:

    A   Créer un objet de toutes pièces avec les attributs donnés et leurs
        valeurs.
    a   Ajouter les valeurs spécifiée à l'attribut
    r   Remplacer les valeurs de l'attribut par celles spécifiées
    d   Supprimer les valeurs spécifiées de l'attribut
    D   Supprimer l'attribut
    delentry
        Supprimer l'objet
    ldapmodify
        Utiliser ldapmodify pour modifier les objets sur le serveur. Il faut
        utiliser au préalable l'une des méthodes de transformation parmi A, a,
        r, d, D, delentry.
        Le code de retour est celui de la commande ldapmodify.
    ldapadd
        Utiliser ldapadd pour créer les objets situés dans l'espace de travail.
        Le code de retour est celui de la commande ldapadd.
    ldapdelete
        Utiliser ldapdelete pour supprimer la liste des dns situés dans l'espace
        de travail.
        Le code de retour est celui de la commande ldapdelete.

Notes:
- les expressions régulières sont celles reconnues par awk.
- pour spécifier plusieurs actions sur une même ligne, les séparer par //
- le code de retour est 0 si ok, 255 si une erreur s'est produite (erreur de
  syntaxe, de connexion, de lecture/écriture de fichier, etc.). sinon, les
  opérations ldap{search,modify,delete,add} ont leur code de retour respectifs
}}}
