/* Nat 1998 à placer en crontab. examine périodiquement la file de mails en attente et la dernière heure de connexion PPP. décide ou non d'effectuer une connexion PPP pour conserver un log des sessions PPP : ip-down.local:echo DOWN `date` >> /etc/ppp/connexions.log ip-up.local:echo UP `/bin/date` >> /etc/ppp/connexions.log /etc/ppp/auto_PPP est un script amorçant une session PPP, qui assure le raccrochage par une forme : { sleep 600; /etc/ppp/pppcut } & commentaires bienvenus nat@linux-france.com */ #include #include #include #include #include #include const char FileName[]="/etc/ppp/connexions.log"; const char Mail_queue_dir[]="/var/spool/mqueue"; int main(void) { int nb_mails_in_queue=0; time_t timeNow, Waiting_Mail=0; struct stat TF; struct dirent *dp; DIR *dirp; if (stat(FileName, &TF) != 0) { fprintf(stderr, "Cannot stat %s", FileName); return(5); } // is there any mail in queue? if (!(dirp = opendir(Mail_queue_dir))) { fprintf(stderr, "Cannot stat %s", Mail_queue_dir); return(3); } while ((dp = readdir(dirp))) { if (dp->d_ino == 0) continue; if (dp->d_name[0] == '.') continue; nb_mails_in_queue++; // printf(" DEBUG mail %s\n", dp->d_name); } closedir(dirp); // connect early Waiting_Mail+=600*nb_mails_in_queue; time(&timeNow); if (((timeNow - TF.st_mtime) + Waiting_Mail) < (nb_mails_in_queue ? 4 : 5) * 3600) { // printf("PPP_repoll.C : pas de connexion %ld %ld\n", (timeNow - TF.st_mtime), Waiting_Mail); return(0); } printf("PPP_repoll.C : connexion %ld %ld\n", (timeNow - TF.st_mtime), Waiting_Mail); // printf("PPP_repoll.C: go /etc/ppp/auto_ISP (%d messages dans la queue)", nb_mails_in_queue); system("/etc/ppp/auto_ISP"); return(0); }