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.