begin process at 2012 05 29 10:01:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

invalid application of ‘sizeof’ to incomplete type ‘struct pam_handle’


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

invalid application of 'sizeof' to incomplete type 'struct pam_handle'

mercredi 19 août 2009 à 12:19:53 | invalid application of 'sizeof' to incomplete type 'struct pam_handle'

razuki

Bonjour,
j'ai le message d'erreur suivante à la compilation :
invalid application of ‘sizeof’ to incomplete type ‘struct pam_handle’

dans mon fichier loginh.h j'ai defini :

Code C/C++ :
typedef struct pam_handle pam_handle_t; // une structure dont la definition et le fichier qui la contient est tenu secrète.

typedef struct login_handle login_handle_t;

struct login_handle{
unsigned int use_lp;
unsigned int use_sc;
pam_handle_t *login_pamh;
//pkcs11_handle_t *sc_ph; //a gerer
};

dans pam_pkcs11.c, j'inclut loginh.h, j'alloue de la mémoire avec malloc :

Code C/C++ :

login_handle_t *lh;
lh->login_pamh = (pam_handle_t *)malloc(sizeof(pam_handle_t));


puis j'ai réessayé avec :

Code C/C++ :
 

login_handle_t *lh;
lh->login_pamh = (pam_handle_t *)malloc(sizeof(struct pam_handle));


mais j'obtiens toujours la meme erreur.

- Que signifie cette erreur ?
- Comment je dois corriger mon programme ?

Merci d'avance pour votre aide

mercredi 19 août 2009 à 15:36:27 | Re : invalid application of 'sizeof' to incomplete type 'struct pam_handle'

juju12

Tu dis, "une structure dont la definition et le fichier qui la contient est tenu secrète."
Est-ce-que tu entends par là que la structure est bien définie mais que tu ne veux pas la détailler sur le forum? Dans le cas contraire, sizeof() ne peut bien évidemment pas connaître la taille de la structure puisqu'il ne la connaît pas.

mercredi 19 août 2009 à 15:39:19 | Re : invalid application of 'sizeof' to incomplete type 'struct pam_handle'

juju12

oh et accessoirement grosse faute (mais distincte du problème) :

Code C/C++ :

login_handle_t *lh;
lh->login_pamh = (pam_handle_t *)malloc(sizeof(struct pam_handle));


Où as-tu initialisé lh? Nulle part effectivement, donc il ne pointe sur rien et erreur de segmentation à l'exécution.

mercredi 19 août 2009 à 15:54:26 | Re : invalid application of 'sizeof' to incomplete type 'struct pam_handle'

razuki

Oui. Effectivement il sait pas quelle taille fait pam_handle qui est une structure opaque ( blind structure ) la definition est tenue secrète par les developpeurs PAM.

Ou est ce que j'ai initialisé lh ?
Voici une partie du code :

Code C/C++ :

static void *ask_for_login(void* data){
int rv;

static void *ask_for_login(void* data){
int rv;
login_handle_t *lh;
lh->login_pamh = (pam_handle_t *)malloc(sizeof(pam_handle_t));
lh = (login_handle_t *)data;// c'est ici que je l'initialise ... Est - ce incorrecte ? Je fais pas de malloc(sizeof(login_handle_t))

mercredi 19 août 2009 à 17:43:12 | Re : invalid application of 'sizeof' to incomplete type 'struct pam_handle'

juju12

non OK c'est correct, du moment que c'est dans l'autre sens...

Code C/C++ :

static void *ask_for_login(void* data){
int rv;
login_handle_t *lh;
lh = (login_handle_t *)data;
lh->login_pamh = (pam_handle_t *)malloc(sizeof(pam_handle_t));

jeudi 20 août 2009 à 23:48:27 | Re : invalid application of 'sizeof' to incomplete type 'struct pam_handle'

Kotomine


la definition est tenue secrète par les developpeurs PAM.



Euh, t'y vas un peu fort là ... PAM c'est du GPL.
Ce qu'il faut comprendre, c'est que PAM c'est un système d'authentification sous linux , et que par conséquent, ça brasse des données noyeau et utilisateur.
Le noyeau t'offre une structure globale mais masque les donneés sensibles qui seront protégées par des pages non accessibles de droit.


Mais garde à l'esprit qu'un truc opaque (pointeur, structure), tu n'as PAS LE DROIT de l'allouer ou de le modifier (Car tu ne cannait rien de ce que tu manipules)

Revois ton design, tu ne dois pas a avoir à créer toi même cette structure, mais tu dois utiliser un appel quelconque à pam.

je vais t'illustrer mes propos avec un exemple tout bête:

Code C/C++ :

// definition d'un message protégé opaque
struct messageOpaque{
char * message;
}

// structure réelle : non opaque
struct messageClear{
char * message;
int checksum;
}

// fonction abstraite que je ne commente pas qui réalise un checksum du
// message (un code symbolisant son contenu)
int makeChksum(const char * msg);

// fonction qui fabrique un message protégé
struct messageOpaque * createMessage(const char * message){
struct messageClear * msg = malloc(sizeof(messageClear));
msg->message=strdup(message);
msg->checksum=makeChksum(message);
return (struct messageOpaque*) msg; // hop on change le type du pointeur comme ça personne ne peut acceder au checksum
}


int isMessageTrafiqued(const struct messageOpaque *msg){
// on demasque le message
struct messageClear * realMsg= (struct messageClear) msg;
return makeChksum(msg->message)!=msg->checksum;
}



Voici un exemple d'utilisation

Code C/C++ :

struct messageOpaque * msg = createMessage("rick roll");
msg->message="pouet pouet";
if(isMessageTrafiqued()){
// on passera par la
}


En mémoire, la fonction createMessage va écrire à un endroit quelconque :
[ pointeur de chaine "rick roll" , 456747] (le 456747 étant le checksum présumé ...)

Ici, je fais aparaitre un champ caché (checksum) qui n'aparait pas dans la version opaque de la structure.
Imagine qu'un malin face

Code C/C++ :

struct messageOpaque *truc=malloc(sizeof(struct messageOpaque));
truc->message="CHEZ MOI IL PLEUT";

isMessageTrafiqued(truc);

En mémoiore, tu aura uniquement [pointeur de chaine "CHEZ MOI IL PLEUT"] [données aléatoires etinaccessibles]

la fonction isMessageTrafiqued qui lit apres le pointeur de chaine, va lire n'importe ou.

Dans la fonction truc, on va essayer d'acceder au checksum, mais e
; I'm just keeping the hopeless cross to increase the meaninglessness



Cette discussion est classée dans : code, login, handle, struct, pam


Répondre à ce message

Sujets en rapport avec ce message

Recuperer un path et le mettre en handle [ par lcampeur ] J'ai une openDialog sur laquelle je choisi des fichiers. Je recupere leur chemin comme ceci :CString pathFiles[10] ;pathFiles[nbFichiers] = objDialog. Handle de listbox avec C++Builder [ par laurentl2000 ] J'ai créé une listbox dans une form avec C++Builder. Comment faire pour trouver le handle de la listbox ?Si son ID était fixe, je pourrais faire ceci Pb de structures, listes chainees !!! [ par flopflopp ] C encore moi , au vu de qq problème j'ai changé mes structures pour mon éditeur de texte :ma structure ligne est devenu la suivante :Code:struct ligne [Dev-Cpp]Pb de compilation [ par Cyr62110 ] Voila mon probleme, j'ai fait la source suivante :#include #define _WIN32_IE 0x0500#include #include #define IDB_GO 100#define IDB_UPLOAD 101#define Définition et utilisation de structures dans plusieurs fichiers sources [ par bvincent84 ] Bonjour à tous, J'ai toujours du mal à utiliser les structures, en plus je voudrais les définir dans un .c et les utiliser aussi dans un autre (exter Incomprehension d'une ligne de code [ par LordBob ] Bonjour a tous,voila je regardais une source du site, une de Brunews sur les boites de dialogue de type login/pass... et il y a une partie de la sour pb de code source [ par Peabody ] Bonjour à tous,Alors voila je debute en C et mon programme a un petit problème.Voici le code source:#include #include #define maxi 5void main (void){  type @char * [ par cocotueur ] Bonjour, J'utilise gSoap en c++ pour attaquer un web service. Lorsque j'ajoute le fichier wsse.h, le code suivant ne compile pas sous visual studio 2 erreur : Invalid struct or union type [ par Nico_35136 ] Bonjour, Voila , en ce moment je m'arrache les cheveux sur une allocation dynamique d'une structure en mémoire. Voici mes variable et structure que écriture pointeur de struct [ par Vaughn018 ] Bonjour j'ai un oubli complet (trop de code tue le code!) sur la façon d'écrire des données lorsqu'il s'agit du cas suivant :typedef struct Point{


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales