All pastes #817515 Raw Edit

Marc Gariepy

public text v1 · immutable
·published 2007-12-15 17:36 UTC
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 }