IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Problème avec un attribut Ldap dans mon script shell : base64 invalid input


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 46
    Par défaut Problème avec un attribut Ldap dans mon script shell : base64 invalid input
    Bonjour,

    Je suis en train de faire un script sous linux et je rencontre un pb avec des attribut Ldap que je récupère.
    Voici mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ldapsearch -H ldaps://tutu.chezmoi -x -S uid  -b ou=people,dc=chezmoi,dc=fr -D "cn=LDAP,ou=administrators,dc=chezmoi,dc=fr" -w "grrrrr"  "(&(titi=OFFI)(toto=xxxx))" uid cn  mail bizbizEntiteAffectationPrincipale \
        | sed -e '/::/s/\(.*:: \)\(.*\)/echo \1 $(echo \2 |base64 --decode)/e' >monfichier.txt
    Je pensais que le /::/s/\(.*:: \)\(.*\)/echo \1 $(echo \2 |base64 --decode)/ permettrait à l'attribut bizbizEntiteAffectationPrincipale de ne pas poser de pb et d'être decodé mais en fait j'ai le message suivant dès que je mets cet attribut dans ma selection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    base64: invalid input
    Est-ce que quelqu'un aurait une idée de ce que je dois mettre pour que cet attribut soit récupéré correctement , svp ?

    Merci d'avance,

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 739
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 739
    Par défaut
    Bonjour,

    et avec des guillemets autour du \2 ?

    tu peux nous confier la sortie de ldap ?
    un dysfonctionnement du forum insère ma signature dans tous mes messages, même si je ne le souhaite pas.
    C'est très pénible.

  3. #3
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 46
    Par défaut
    Bonjour,

    Désolée pour la réponse tardive ...
    Alors non ça ne fonctionne pas mieux avec des guillemets autour de \2.
    @N_BAH : qu'entends-tu par confier la sortie de ldap ?
    Merci d'avance pour vos réponses,
    FredNV

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 739
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 739
    Par défaut
    il faudrait qu'on ait la sortie de ldapsearch pour adapter la commande sed.
    le mieux serait de rediriger la sortie vers un fichier, puis de joindre le fichier, afin qu'on ne perde rien du format, et éventuels caractères spéciaux/invisibles.
    un dysfonctionnement du forum insère ma signature dans tous mes messages, même si je ne le souhaite pas.
    C'est très pénible.

  5. #5
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 46
    Par défaut
    Bonjour,

    En fait, je ne vais pas pouvoir vous donner la sortie avec un fichier pour des raisons de confidentialité.
    Du coup, si je résume un peu mon pb , c'est que le résultat du ldapsearch me donne ,pour 1 de mes attributs, l'attribut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bizbizEntiteAffectationPrincipale
    à la fois des valeurs hashées et des valeurs non hashées.
    Du coup, si j'ai bien compris il faut que je ne traite que les valeurs commençant par ":: ".
    Et c'est là que ça pose un pb car je ne sais pas comment écrire le truc.
    Si j'ai comme attributs de sortie : uid, cn,bizbizEntiteAffectationPrincipale, postaladress ,comment dire de ne decoder que les valeurs hashées de bizbizEntiteffecttaionPrincipale et idem pour postaladress.
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    |sed -e '/::/s/\(.*:: \)\(.*\)/echo \1 $(echo \2 |base64 --decode)/e'
    pourquoi ça ne decode pas bizbizEntiteAffectationPrincipale et postladress ?

    Je pense que cette ligne a une erreur et decode des données non hashées également ( d'où le message d'erreur), non ?

    Merci d 'avance,

    fredNV

  6. #6
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 46
    Par défaut
    En fait, je dois decoder la partie 2 de ma ligne.
    Si j'ai bizbaffectationprincipale :: toto et que toto est hashée , il faut que je decode toto mais je ne comprends pas pourquoi mon sed ne fonctionne pas.

    Cordialement,
    fredNV

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 307
    Par défaut
    Bonjour

    Difficile de diagnostiquer à l'aveugle.

    et idem pour postaladress
    Comment ça "et idem" ? Je ne vois nulle-part que tu traites deux cas. Je suis d'ailleurs assez surpris que tu ne traites pas la virgule séparant les deux champs.

    pourquoi ça ne decode pas bizbizEntiteAffectationPrincipale et postladress ?
    Parce que base64 voit une virgule, en plein milieu, qu'il ne comprend pas ?

    Et c'est là que ça pose un pb car je ne sais pas comment écrire le truc.
    C'est mignon de vouloir tout faire d'un coup. Mais si tu n'y arrives pas, décompose. Enlève le drapeau "e", pour savoir ce qu'il tente d'exécuter, par exemple. Fais des tests avec base64 pour savoir quelle part du champ marche, par exemple. Utilise un fichier intermédiaire pour t'entraîner, par exemple.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 46
    Par défaut
    re-bonjour,

    je pense avoir trouvé d'où vient mon problème.
    Si je lis mon Ldap via un browser et que je prends le cas suivant :
    dans mon browser : postaladress = rue de la mode, code postal
    avec ma recherche ldapsearch en ligne de commande sur mon serveur : postaladress est hashée et le fait d'avoir la virgule renvoit à la ligne la deuxième partie de postaladress et par conséquent cela génère une erreur lorsque je lance mon sed qui ne peut pas se fiare sur cette deuxième partie puisque pas de "::" de présent:
    Qu'en pensez-vous ? comment résoudre un tel problème ?

    Merci d'avance pour vos réponses,
    Nadège

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 739
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 739
    Par défaut
    un enregistrement est séparé en champs par un séparateur.
    un champ peut contenir des "sous-champs" distingués par un autre séparateur.
    par exemple : dans ce cas là, j'utiliserais plutôt awk qui est vraiment adapté traiter des enregistrements, contrairement à sed qui est un éditeur de texte.
    un dysfonctionnement du forum insère ma signature dans tous mes messages, même si je ne le souhaite pas.
    C'est très pénible.

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 426
    Par défaut
    A quoi ressemble ta ligne et est-ce toujours le cas ou pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ echo 'postaladress = ' $(base64 <<<'rue de la mode')$(base64<<<',code postal')
    postaladress =  cnVlIGRlIGxhIG1vZGUKLGNvZGUgcG9zdGFsCg==
    $ echo 'postaladress = ' $(base64 <<<'rue de la mode')$(base64<<<'code postal')
    postaladress =  cnVlIGRlIGxhIG1vZGUKY29kZSBwb3N0YWwK
    $ echo 'postaladress = ' $(base64 <<<'rue de la mode') ', ' $(base64<<<'code postal')
    postaladress =  cnVlIGRlIGxhIG1vZGUK ,  Y29kZSBwb3N0YWwK
    $ echo -e 'postaladress = ' $(base64 <<<'rue de la mode') ',\n' $(base64<<<'code postal')
    postaladress =  cnVlIGRlIGxhIG1vZGUK ,
     Y29kZSBwb3N0YWwK
    $ echo -e 'postaladress = ' $(base64 <<<'rue de la mode') '\n' $(base64<<<'code postal')
    postaladress =  cnVlIGRlIGxhIG1vZGUK
     Y29kZSBwb3N0YWwK
    C'est pas compliqué de répondre à ça avec un exemple sans compromettre ta confidentialité !!
    Cordialement.

  11. #11
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 46
    Par défaut
    Bonjour,

    Merci à tous pour vos réponses et vos indications.
    J'ai fini par m'en sortir un peu ....au final, j'arrive à décoder les valeurs codées en passant par un awk ( fortement inspiré d'un autre trouvé car je n'ai pas vraiment ce niv) et ensuite j'ai fait du nettoyage avec un sed.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    ldapsearch -H ldaps://ldaptutu -x -S uid  -b ou=people,dc=toto,dc=fr -D "cn=titi,ou=administrators,dc=tutu,dc=fr" -w "oupsssss"  "(&(Status=OFFI)(eduPersonAffiliation=essai))" uid cn Civilite EmpId employeeType mail EntiteAffectationPrincipale postalAddress telephoneNumber | awk '
    /^dn: / {
    if (NR > 1) print "-----"
    }
    /^ / { sub(/^ /,""); line=line $0; next }
    line { print line; line="" }
    { line=$0 }
    END { if (line) print line }
    ' | awk -F':: ' '
    NF==2 {
    cmd="echo \"" $2 "\" | base64 --decode"
    cmd | getline decoded
    close(cmd)
    sub(":: .*", ": " decoded)
    }
    { print }
    '|sed -e '1,8d' -e '/#/d' -e 's/dn://g' -e 's/ou=people,dc=tutu,dc=fr//g' -e 's/uid=/uid: /g' -e '/ uid:/d' -e 's/: /:/'> fichierldap_essai.txt
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    cn:blabla Amanda
    EmpId:229
    mail:a.blbla@tutu.fr
    supannCivilite:MME
    uid:xxxx
    EntiteAffectationPrincipale:Essai
    employeeType:B.R
    postalAddress:33 RUE du 11 Novembre$25000 ESSAI CEDEX 2
    telephonenumber : 01020304
    Puis j'enchaîne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk -F\: 'BEGIN{PROCINFO["sorted_in"]="@ind_str_asc"};NF <= 1{for (k in A){ printf(A[k]";")};print "";next}{X=$1;$1="";A[X]=$0}END{for (k in A) {printf(A[k]";")};print ""}' fichierldap_essai.txt > fichierldap_essai2.txt
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    blabla Amanda; B.R; a.blabla@tutu.fr; 33 RUE du 11 Novembre$42023S25000 ESSAI CEDEX 2; MME; 229; xxxx; Essai;
    Ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk 'BEGIN { printf  "%s\n","category;" "niv 1 nom;" "niv 1 code;" "niv 2 nom;" "niv 2 code;" "niv 3 nom;" "niv 3 code;" "niv 4 nom;" "niv 4 code;" "niv 5 nom;" "niv 5 code;" "nom ;" "code ;""type;" "email;" "quantite;" "capacite;" "departement(URL);" "note;" "departement-autresdonnées(civilite);" "service;" "adresse1;" "adresse2;" "codepostal;" "ville;" "etat;""pays;" "telephone;" "fax;" "codeX;" "codeY;" "codeZ;" "fuseauhoraire;"  "Profil" "verif" } { print 7  ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" $1 ";" $6 ";" "Hello" ";"  $3 1 ";"  1 ";" ""  ";" $5 ";" $8 ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" "" ";" 0}' fichierldap_essai2.txt >fichierldap_essaifinal.csv
    Et là j'ai un résultat qui me pose pb car apparemment dans $1(c'est juste un exemple) il ne prend que blabla et non blabla Amanda ...et pourtant je dis bien , il me semble , que le séparateur est ";" et non espace.

    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    2;;;;;;;;;;;blabla;RUE;Hello;Amanda;1;1;;33;11;;;;;;;;;;;;;0
    Auriez-vous une idée d'où vient cet ultime souci ( enfin j'espère) ? Merci.
    fredNV

  12. #12
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 426
    Par défaut
    Dans ton dernier awk, je ne vois pas quand tu précise le séparateur de champs et en plus on voit un print 7 .... et la ligne résultat que tu donnes commence par 2;;;...
    c'est compliqué à comprendre...
    Cordialement.

  13. #13
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 46
    Par défaut
    Oui j'ai changé le 2 en 7 mais ça ne change rien à la problématique.
    Et bien je ne sais pas s'il faut ou pas préciser le séparateur à cette étape ?

    Merci,
    fredNV

  14. #14
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 426
    Par défaut
    Bah, pour moi, si, il faut le préciser puisque tu le mets toi même dans ton awk précédent.
    Cordialement.

  15. #15
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 739
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 739
    Par défaut
    Y a-t-il encore des données confidentielles dans la sortie de ldapsearch qui comrrespond au résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cn:blabla Amanda
    EmpId:229
    mail:a.blbla@tutu.fr
    supannCivilite:MME
    uid:xxxx
    EntiteAffectationPrincipale:Essai
    employeeType:B.R
    postalAddress:33 RUE du 11 Novembre$25000 ESSAI CEDEX 2
    telephonenumber : 01020304
    ?
    sinon, peut-on l'avoir afin de tests ?
    parce que tous ces awk plus un sed, c'est maladroit.

    NB: j'ai bien entendu que tu ne connais pas assez awk pour le faire sans répétitions
    on doit pouvoir simplifier.
    un dysfonctionnement du forum insère ma signature dans tous mes messages, même si je ne le souhaite pas.
    C'est très pénible.

  16. #16
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 46
    Par défaut
    Bonjour,

    J'ai suivi le conseil de disedorgue et tout est ok.
    Merci à tous,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PowerShell] Probleme avec file.deleteObject() en fonction de sa position dans mon script
    Par Borowsky dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 06/02/2020, 14h20
  2. Dessin avec Imager.. erreur dans mon script
    Par Chekov dans le forum Modules
    Réponses: 2
    Dernier message: 18/06/2006, 15h14
  3. [MySQL] Problème dans mon script de pagination
    Par speedylol dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/11/2005, 20h37
  4. erreur dans mon script
    Par Swata dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 01h02
  5. [langage]erreur dans mon script
    Par Fabouney dans le forum Langage
    Réponses: 11
    Dernier message: 30/06/2005, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo