int main (int nbarg, char *varg[])
{
char ficonf [120]; // fichier de configuration du système de mail
FILE *fconf; // descripteur du fichier de configuration
int car; // caractère du fichier de configuration
char ligne [120]; // une ligne du fichier de configuration
long posfic; // position dans le fichier de configuration
int i; // compteur
// récupération du nom de l'exécutable
memcom (*varg);
if (--nbarg == 1)
{
// récupérer le nom du fichier de configuration
strcpy (ficonf, varg [1]);
// ouvrir le fichier de configuration
fconf = fopen (ficonf, "r+");
if (fconf)
{
// on saute les 2 premières lignes du fichier de configuration
for (i = 1; i <= 2; i++)
{
do
car = getc (fconf);
while (car != '\n' && car != EOF);
}
// si cryptage du mot de passe
if (getc (fconf) == '%')
{
// se positionner sur le 2ème mot de la ligne
do
car = getc (fconf);
while (car != ' ' && car != EOF);
// s'il y a d'autres blancs, on les cryptera
// en même temps que le mot de passe
// récupérer la position dans le fichier
posfic = ftell (fconf);
// lire le mot de passe
fgets (ligne, sizeof (ligne), fconf);
ligne [strlen (ligne) - 1] = '\0';
// crypter le mot de passe
// simple ou exclusif sur les 5 derniers bits de chaque
// caractère. Les bits de poids fort restent inchangés
// pour éviter qu'un caractère soit transformé en '\n'
for (i = 0; ligne [i] != 0; i++)
ligne [i] = ligne [i] ^ (clecrypt [i & 0x0F] & 0x1F);
// mettre à jour le fichier
fseek (fconf, posfic, SEEK_SET);
fputs (ligne, fconf);
}
// on n'a plus besoin du fichier de configuration
fclose (fconf);
}
else if (access (ficonf, 0) == 0)
// "Fichier %s protégé en lecture ou en écriture"
aff_err_arg ("ACCES_FICH_RW", ficonf);
else
// "Fichier %s non trouvé"
aff_err_arg ("FICH_ABSENT", ficonf);
}
else
// "Syntaxe : %s fichier_configuration"
psyntaxe ("SYNT_GENE_FICONF");