#include 2 #include 3 #include // pour bzero() bcopy() strlen() 4 // includes réseau 5 #include // pour close() 6 #include // pour gethostbyname() 7 #include // pour sockaddr_in 8 9 // Declarations de fonctions 10 void BackupLogs(); 11 void Message(); 12 void SmtpSend(); 13 14 int main() 15 { 16 int iChoix; 17 18 while (iChoix!=9){ 19 20 // system("clear"); 21 printf("*******Bienvenue a votre tableau de bord*******"); 22 printf("\n\nQue desirez vous faire aujourd'hui ?"); 23 printf("\n1. Faire une copie de sauvegarde des logs contenus dans /var/log/"); 24 printf("\n2. print Hello World!"); 25 printf("\n9. Quitter le programme"); 26 printf("\nVotre choix: "); 27 scanf("%i",&iChoix); 28 29 switch (iChoix) 30 { 31 case 1: 32 BackupLogs(); 33 break; 34 case 2: // 35 Message(); 36 break; 37 // case 3: // 38 // MontrerWho(); 39 // break; 40 case 9: // 41 printf("\n\nAu revoir !\n\n"); 42 break; 43 default: // 44 printf("\nChoix invalide, appuyez sur une touche pour recommencer\n"); 45 getchar(); 46 break; 47 48 } 49 } 50 //printf("\nAu revoir !"); 51 return 0; 52 } 53 54 void BackupLogs() 55 /* Cette fonction sauvegarde le contenu du repertoire de logs avec tar */ 56 { 57 system("tar cvzpf /backups/logs_$(date +%Y-%m-%d-%h).tgz /var/log"); 58 system("logger Sauvegarde quotidienne des logs reussie"); 59 system("clear"); 60 printf("\nOperation réussie!\n"); 61 system("cat disk.ascii"); 62 // system("sleep 1"); 63 } 64 65 void Message() 66 { 67 printf("Hello World!"); 68 } 69 70 void SmtpSend() 71 // Fonction qui envoi un mail a roo@localhost 72 { 73 int sk = -1; //le descripteur du socket 74 75 char serveur[] = "pop.videotron.ca"; 76 77 char lemail[] = "HELO videotron.ca\r\n" 78 "MAIL FROM: \n" 79 "RCPT TO: \n" 80 "DATA\r\n" 81 "Subject: Sauvegarde quotidienne\r\n" 82 "Sauvegarde effectuée avec succès.\r\n" 83 ".\r\n" 84 "QUIT\r\n\r\n"; 85 //Déclaration des Prototypes de fonctions 86 unsigned short init_socket(); 87 void recevoir_reponse(); 88 89 90 91 92 93 int main (int argc, char *argv[]) 94 { 95 96 if (init_socket()) 97 { 98 send(sk, lemail, strlen(lemail)-1, 0); 99 recevoir_reponse(); //fermera le socket. 100 } 101 102 return 0; 103 } 104 105 106 107 108 109 unsigned short init_socket() 110 { 111 struct sockaddr_in serveurSockAddr; // addresse 112 struct hostent *serveurHostEnt; // description host serveur 113 unsigned long hostAddr; // addr du serveur 114 115 bzero(&serveurSockAddr,sizeof(serveurSockAddr)); 116 hostAddr = inet_addr(serveur); // convertit l'adresse ip en entier long 117 118 if ( (long)hostAddr != (long)-1) 119 bcopy(&hostAddr,&serveurSockAddr.sin_addr,sizeof(hostAddr)); 120 else // on a donné un nom, pas une IP 121 { 122 serveurHostEnt = gethostbyname(serveur); 123 if (serveurHostEnt == NULL) 124 { 125 puts("probleme gethost"); 126 return 0; 127 } 128 bcopy(serveurHostEnt->h_addr,&serveurSockAddr.sin_addr, serveurHostEnt->h_length); 129 } 130 131 serveurSockAddr.sin_port = htons(25); //port 25 pour SMTP 132 serveurSockAddr.sin_family = AF_INET; 133 134 if ( (sk = socket(AF_INET,SOCK_STREAM,0)) < 0) 135 { 136 puts("Impossible de creer le socket"); 137 return 0; 138 } 139 140 if(connect(sk,(struct sockaddr *)&serveurSockAddr, sizeof(serveurSockAddr)) < 0) 141 { 142 puts("probleme sur connect()"); 143 return 0; 144 } 145 else 146 { 147 printf("Connecté au serveur %s\n",serveur); 148 return 1; 149 } 150 } 151 152 153 void recevoir_reponse() 154 { 155 puts("En attente de la reponse ...\n"); 156 char tempBuffer[1024]; 157 int retval; 158 159 while(1) 160 { 161 retval = recv(sk, tempBuffer, sizeof(tempBuffer)-1, 0); 162 if (retval==0) 163 { 164 shutdown(sk,2); //ferme le socket 165 close(sk); 166 puts("Socket fermé."); 167 break; 168 } 169 else if (retval == -1) 170 { 171 puts("Erreur pendant la reception"); 172 } 173 else 174 { 175 tempBuffer[retval] = 0; 176 puts(tempBuffer); 177 } 178 } 179 } 180 }