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

 C++ Discussion :

retransmettre l'erreur à l'appliation au dessus


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut retransmettre l'erreur à l'appliation au dessus
    Bonjour,
    je développe une brique sécurisée entre TCP et une appli.
    Quand ma fonction de chargement de certificat echoue, en l'occurence la clef privée ne correspond pas au certificat, j'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
    En effet, afin d'obtenir le résultat ci-dessus, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    err = ERR_get_error(); // cette fonction récupère la dernière erreur arrivée sur la pile.
    ERR_error_string_n(ERR_get_error(), sizeof(buf));// traduit l'erreur en string pour que je puisse comprendre ce qui s'était passé.
    Ma question :
    Je ne veux pas traiter moi même ce qu'il faut faire si une telle erreur se produit. Je veux juste retransmettre l'erreur au programmeur de l'appli ( qui utilisera donc ma brique ), pour qu'il puisse faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(err = PVKEY_DOES_NOT_MATCH_WITH_CERT) {
         //traiter ici ce qu'il faut faire
    }
    En gros, comment faire correspondre PVKEY_DOES_NOT_MATCH_WITH_CERT à mon type d'erreur.

    PS: je suis débutant en C/C++

    Merci d'avance

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 133
    Par défaut
    Je ne suis pas sûr d'avoir bien compris la question.

    Est-ce qu'il ne suffirait pas de faire des return dans chaque fonction ? Si tu renvoie 0 alors c'est bon, et sinon tu renvoies le numéro de l'erreur, avec un define pour la lisibilité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define PVKEY_DOES_NOT_MATCH_WITH_CERT 1
    #define AUTRE_ERREUR 2
    ...
    et alors l'utilisateur aura juste a faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unsigned int err=la_fonction();
    if(err)
    {
      // étude de cas selon la valeur de err ou avec un "case"
      if(err==PVKEY_DOES_NOT_MATCH_WITH_CERT)
     
    }
    Enfin bon j'ai surement mal compris la question étant donné la simplicité de la solution que je propose

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    A la place des define, je propose l'utilisation d'un enum.
    Après, je mettrais cet enum dans un .h (disons errors_code.h) qui sera utilisé par votre application de lien, mais aussi par l'application parente.
    Ainsi, si vous utilisez le lien (votre brique sécurisante) comme programme externe (un autre .exe / .elf) vous regardez le code de retour de l'application et vous determinez su c'est une erreur ou pas (avec les codes du fichier errors_code.h)
    Sinon, ce qui me semble plus logique, c'est que votre brique soit une bibliothèque, alors là les fonctions de celles-ci peuvent retourné des erreurs, qui utilisent toujours errors_code.h
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    Michel 57 > Je ne pense pas non plus que ca soit une bonne idée. En fait, l'utilisateur au dessus n'est pas censé faire la correspondance, c'est à dire il n' a pas à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define PVKEY_DOES_NOT_MATCH_WITH_CERT 1
     
    etc ...
    il se contente d'utiliser PVKEY_DOES_NOT_MATCH_WITH_CERT.

    Donc je dois faire un enum quelque part. En fait, dans dans cette stack de sécurité que je développe, il y a déjà un enum d'erreur que le gars d'avant a défini.
    Le problème c'est que je ne sais pas quel numero mettre. En effet, l'enum ressemble à ceci :

    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
    19
    20
    21
    22
    23
    24
    25
    typedef enum LAB_ERRORS_ {
    LAB_ERROR_NOERROR 		= 0,
      LAB_ERROR_SUCCESS 		= 0,
     
      LAB_ERROR_BASE                = 0x0D430000,      
     
      /* generic errors */
      LAB_ERROR_BUFFERTOOSMALL,                          
      LAB_ERROR_TIMEOUT,                                 
      LAB_ERROR_OUTOFMEMORY,                                                      
      LAB_ERROR_SOCKETERROR,                             
      LAB_ERROR_OS,                                      
     
      /* network errors */
      LAB_ERROR_NETWORK = (LAB_ERROR_BASE + 0x1000),
      LAB_ERROR_CONNECTIONREFUSED,                      
      LAB_ERROR_PACKETTOOLARGE,                          
     
     
      /*security errors */
      LAB_ERROR_SEC = (LAB_ERROR_BASE + 0x2000),
      LAB_ERROR_KEYSUNAVAILABLE,                        
      LAB_ERROR_REVOKEDCERTIFICATE,
      LAB_ERROR_CERTIFICATENOTLOADED
       } LAB_ERRORS;
    alors que moi mon programme renvoie un entier en DECIMAL quand il y a un pb de chargement de la clef privée. Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     if (SSL_CTX_use_PrivateKey_file(cli_ctx, KEY_FILE, SSL_FILETYPE_PEM) <= 0) {
        err_tmp = ERR_get_error();
        ERR_error_string_n(err_tmp, buf_tmp, sizeof(buf_tmp));
        printf("probleme de chargement de clef privee : \n\terr num: %d\n\t%s", err_tmp, buf_tmp);// remplacer par bio
        exit(1);
      }
    Et voici ce que ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    probleme de chargement de clef privee : 
    	err num: 185073780
    	error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
    ...
    Donc en gros je ne sais pas quel numero je dois faire correpondre à PVKEY_DOES_NOT_MATCH_WITH_CERT.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Citation Envoyé par ikuzar Voir le message
    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
    19
    20
    21
    22
    23
    24
    25
    typedef enum LAB_ERRORS_ {
    LAB_ERROR_NOERROR 		= 0,
      LAB_ERROR_SUCCESS 		= 0,
     
      LAB_ERROR_BASE                = 0x0D430000,      
     
      /* generic errors */
      LAB_ERROR_BUFFERTOOSMALL,                          
      LAB_ERROR_TIMEOUT,                                 
      LAB_ERROR_OUTOFMEMORY,                                                      
      LAB_ERROR_SOCKETERROR,                             
      LAB_ERROR_OS,                                      
     
      /* network errors */
      LAB_ERROR_NETWORK = (LAB_ERROR_BASE + 0x1000),
      LAB_ERROR_CONNECTIONREFUSED,                      
      LAB_ERROR_PACKETTOOLARGE,                          
     
     
      /*security errors */
      LAB_ERROR_SEC = (LAB_ERROR_BASE + 0x2000),
      LAB_ERROR_KEYSUNAVAILABLE,                        
      LAB_ERROR_REVOKEDCERTIFICATE,
      LAB_ERROR_CERTIFICATENOTLOADED
       } LAB_ERRORS;
    En prennant ce que je comprends (pas grand chose) ... il faut changer votre
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exit(LAB_ERROR_CERTIFICATENOTLOADED);
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    Oui, en fait à la place du exit j'ai mis autre chose ( ce bout de code contenant exit était à la base un petit brouillon qui n'avait rien à voir avec la stack que je développe ).

    Sinon, dans l'enum contenant les codes d'erreurs, est ce que je devrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PVKEY_DOES_NOT_MATCH_WITH_CERT 0B080074
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PVKEY_DOES_NOT_MATCH_WITH_CERT 185073780
    Est ce que ca a un sens ... ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/01/2011, 21h38
  2. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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