--- rpl/src/chainage.c 2010/03/04 17:42:46 1.5 +++ rpl/src/chainage.c 2010/03/05 11:20:08 1.6 @@ -56,6 +56,7 @@ chainage(struct_processus *s_etat_proces long nombre_caracteres_source; unsigned char *commande; + unsigned char *executable_candidat; unsigned char *instructions = "sed -e '1,1s/^#!/\\/\\//g' %s | " "%s/bin/%s | " "%s/bin/rpliconv `%s/bin/rplfile " @@ -99,6 +100,9 @@ chainage(struct_processus *s_etat_proces return(d_erreur); } + // Avant d'exécuter la commande, on teste les sommes de hashage + // des utilitaires de la famille RPL/2. + if ((*s_etat_processus).rpl_home == NULL) { if ((commande = (unsigned char *) malloc((strlen(ds_preprocesseur) + @@ -118,6 +122,75 @@ chainage(struct_processus *s_etat_proces d_exec_path, ds_preprocesseur, d_exec_path, d_exec_path, d_exec_path, (*s_etat_processus).nom_fichier_source, nom_fichier_temporaire); + + if (alsprintf(&executable_candidat, "%s/bin/rpliconv", + d_exec_path) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rpliconv_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rpliconv_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + free(executable_candidat); + + if (alsprintf(&executable_candidat, "%s/bin/rplfile", + d_exec_path) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rplfile_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rplfile_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + free(executable_candidat); + + if (alsprintf(&executable_candidat, "%s/bin/rplpp", + d_exec_path) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rplpp_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rplpp_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + free(executable_candidat); } else { @@ -140,6 +213,75 @@ chainage(struct_processus *s_etat_proces (*s_etat_processus).rpl_home, (*s_etat_processus).nom_fichier_source, nom_fichier_temporaire); + + if (alsprintf(&executable_candidat, "%s/bin/rpliconv", + (*s_etat_processus).rpl_home) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rpliconv_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rpliconv_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + free(executable_candidat); + + if (alsprintf(&executable_candidat, "%s/bin/rplfile", + (*s_etat_processus).rpl_home) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rplfile_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rplfile_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + free(executable_candidat); + + if (alsprintf(&executable_candidat, "%s/bin/rplpp", + (*s_etat_processus).rpl_home) < 0) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "md5", + rplpp_md5) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + if (controle(s_etat_processus, executable_candidat, "sha1", + rplpp_sha1) != d_vrai) + { + (*s_etat_processus).erreur_systeme = d_es_somme_controle; + return(d_erreur); + } + + free(executable_candidat); } if ((f_source = popen(commande, "r")) == NULL)