rendered paste body#include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h> // pour bzero() bcopy() strlen()
4 // includes réseau
5 #include <unistd.h> // pour close()
6 #include <netdb.h> // pour gethostbyname()
7 #include <arpa/inet.h> // 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: <system@js.homeunix.net>\n"
79 "RCPT TO: <jslabonte@gmail.com>\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 }