On Sun, 11 Mar 2001, Cosmin Chiru wrote:

> 
> Salut!
> 
> Am si eu o problema. Vreau sa fac un program (c, bash) care in momentul
> in care este creeat un nou cont pe server, sa fie trimis un mail la un
> user (nu neaparat root) in care sa fie specificat numele contului si
> numele celui care l-a facut. Se poa` asa ceva?
> T.I.A
> 
> ------
> Chiru Cosmin
> http://ovid.rdsct.ro/~cosminc
> 

Salve. 

Eu am facut un mic program C care citeste periodic ultima linie adaugata
la /etc/passwd si o trimite printr`un mail la o anumita adresa
specificata.

Vezi daca te potzi folosi cumva cu el ...

include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <errno.h>
extern int errno; /** dummy **/

#define LINE_L        512
#define SYSTEM_CMD_L  248
#define SEC_TO_SLEEP  2                  /* potzi alege mai mult: 10, 180
... */
#define PASSWD_FILE   "/etc/passwd"
#define MAIL_ADDR     "[EMAIL PROTECTED]" /* adresa de mail folosita */

    int main () {
      int err, fd, file_length_old = 0, file_length, index;
      char c;
      char line_buff [LINE_L + 0x10];
      char system_cmd_buff [SYSTEM_CMD_L];
      do {
        fd = open (PASSWD_FILE, O_RDONLY, 0644);
        if (fd < 0) {
          perror (PASSWD_FILE);
          return 1;
        }
        file_length = lseek (fd, 0, SEEK_END);
        if (file_length_old == 0) /* first time */
          { file_length_old = file_length; close (fd); continue; }
        if (file_length < 0) goto FILE_ERR;
        if (file_length > file_length_old) {
          err = lseek (fd, file_length_old, SEEK_SET);
          if (err < 0) goto FILE_ERR;
          index = 0;
          do {
            do {
              err = read (fd, &c, 1);
              if (err < 0) {
                if (errno != EINTR) goto FILE_ERR;
                usleep (10);  /** EINTR **/
              }
             else break;
            } while (1);
            if (err == 0 || c == '\n') break;
            line_buff [index++] = c;
          } while(index < LINE_L);
          line_buff [index] = 0x00;
          strcpy (system_cmd_buff, "echo '");
          strcat (system_cmd_buff, line_buff);
          strcat (system_cmd_buff, "' | mail -s 'New user was created!'
");
          strcat (system_cmd_buff, MAIL_ADDR);
          system (system_cmd_buff);
          /*DEBUG printf ("%s\n", system_cmd_buff); */
        }
        file_length_old = file_length;
        close (fd);
        sleep (SEC_TO_SLEEP);
      } while (1);
      /* return 0; */
FILE_ERR:
      perror (PASSWD_FILE);
      close (fd);
      return 2;
    }
/* vim ts=2 */

Bogdan M.


---
Send e-mail to '[EMAIL PROTECTED]' with 'unsubscribe rlug' to 
unsubscribe from this list.

Raspunde prin e-mail lui