⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 updatehosts.c

📁 A* sudo sudo/* B* adduser script adduser C* rmuser script rmuser E* tout tout/*
💻 C
📖 第 1 页 / 共 2 页
字号:
                            sizeof(*wrkline),freadcount,fd))  < 0) {                            sprintf(wrkline,"%s: Can't fwrite() %s",                            progname,secfile);                            mail(NEDITOR,wrkline,JTY,0,0);                            upexit(FAKEFAIL);                        }                                if ( (fclose(fd) == EOF) ) {                            sprintf(wrkline,"%s: Can't fclose() %s",                            progname,secfile);                            mail(NEDITOR,wrkline,JTY,0,0);                            upexit(FAKEFAIL);                    }                    fclose(tfd);                    unlink(tempfile);                                    sprintf(wrkline,"%s, %s",NEDITOR,adminmail);                    sprintf(wrkline1,                    "%s: \"%s\" submitted by \"%s\" successfully",                    progname,secname,adminmail);                    mail(wrkline,wrkline1,"Revised file: \n",secfile,NOINDENT);                     /*                    ** do a 'make hosts'                    */                    sprintf(wrkline,"cd %s;make hosts > /dev/null\n",HOSTDIR);                    if ( (systatus = system(wrkline)) != SUCCESS) {                        fclose(efd);                        sprintf(wrkline1,"%s: make returns %d",				progname,systatus);                        mail(NEDITOR,wrkline1,wrkline,STDERR,INDENT);                        upexit(FAKEFAIL);		    }                                        break;                default:                    break;        }    }    upexit(SUCCESS);}    /*** tolowers(string) - convert string to lowercase***/        tolowers(string)char *string;{    char *s;    s = string;        while (*s++)            *s = (isupper(*s) ? tolower(*s) : *s ) ;}/*** parseline(line,arg) - determine what kinda line it is ****  line - input string**  arg  - string parsed out of Begin: End: or adminmail: line**** returns BEGIN        - if it was a '# Begin:'**         END          - if it was a '# End:'**         ADMINMAIL    - if it was a '# AdminMail:'**         MAILHEAD     - if it was a 'From '**         DATA         - if it was anything else**         SEND         - if it was a 'Subject: Send '**         HELP         - if it was a 'Subject: Help '**         SUBJECT      - if it was a 'Subject: anything'*/parseline(s,arg)char *s,*arg;{    char wrkline[256];    char *cp;    int result;        strcpy(wrkline,s);        cp = wrkline;                result = DATA;        if (strncmp(cp,"From ",strlen("From ")) == 0) {                sscanf(cp,"%*s %s",arg);                    result = MAILHEAD;                return(result);        }        tolowers(wrkline);        /*         ** check out subject line for 'help' or 'send'        */        if (strncmp(cp,"Subject:",strlen("Subject:")) == 0) {                sscanf(cp,"%*s %s",arg);                    if (strncmp(arg,"send",strlen("send")) == 0) {                        arg = "";                        result = SEND;                        return(result);                }                if (strncmp(arg,"help",strlen("help")) == 0) {                        arg = "";                        result = HELP;                        return(result);                }                result = SUBJECT;                return(result);        }                        if (*cp++ == '#')         {            while (*cp == ' ' || *cp == '\t')              cp++;            if (strncmp(cp,"begin:",strlen("begin:")) == 0)                    result = BEGIN;            if (strncmp(cp,"end:",strlen("end:")) == 0)                     result = END;            if (strncmp(cp,"adminmail:",strlen("adminmail:")) == 0)                    result = ADMINMAIL;    		sscanf(cp,"%*s %s",arg);            return(result);        }    return(result);}/*** mail(recipient,subject,message,file,indent) - send somebuddy mail.*****/staticmail(recip,subj,mesg,file,indent)char *recip, *subj, *mesg, *file;int indent;{    FILE *pfd;    FILE *ifd;    char *aav[11];    int fildes[2];    int stdin_fd;    int pid;    char retaddr[128];    char line[128];    /*    ** put together arglist for sendmail     */    sprintf(retaddr,"%s@%s",progname,hostname);    aav[0] = "/usr/lib/sendmail";    aav[1] = "-t";    aav[2] = "-oi";    aav[3] = "-f";    aav[4] = retaddr;    aav[5] = "-F";    aav[6] = "/etc/host updating facility";    aav[7] = NULL;      /* grimble snort */    /* prep pipe to write to child */    pipe (fildes);    /* save stdin  */    stdin_fd = dup(0);    /* cauterize stdin temporarily */    dup2(fildes[0], 0);    /* fork; child execs sendmail, parent writes to child (sendmail). */    if ( (pid = vfork()) < 0) {        fputs("vfork botch",stderr);        perror(progname);    }    if (pid == 0) {            execv (aav[0],aav);    }    /* make standard in normal again in parent  */    dup2 (stdin_fd, 0);    /* associate file descriptor with a stream so we can fputs, etc */    if ( (pfd = fdopen(fildes[1],"w")) ==  NULL)        perror(progname);        fprintf(pfd,"To: %s\n",recip);    fprintf(pfd,"Subject: %s\n",subj);    fputs("\n",pfd);    fprintf(pfd,"%s", mesg);    /*     ** read send file along    */    if (file != 0) {        if ( (ifd = fopen(file,"r")) == NULL)             fprintf(pfd,">> Couldn't fopen() %s\n",file);        if (indent)                 fputs("> \n",pfd);        while(fgets(line,sizeof(line),ifd) != NULL) {		if (indent)			fputs("> ",pfd);	        fputs(line,pfd);        }        fclose(ifd);    }        fprintf(pfd,"\nyours truly,\n\n");    fprintf(pfd,"%s",retaddr);    fclose(pfd);    close (fildes[1]);    return(SUCCESS);}/*** skipheader(fd) - skip over mail header****  actually just read until you get a blank line...***/skipheader(fd)FILE *fd;{    char line[256];    while(fgets(line,sizeof(line),fd) != NULL) {        if (line[0] == '\n')                break;    }}/* ** getcuradmin(secfile) - read an existing section file and **                      return the adminmail: arg*/char *getcuradmin(secfile)char *secfile;{    FILE *fd;    char line[256];    char arg[256];    char s[256];    if ( (fd = fopen(secfile,"r")) == 0) {            sprintf(wrkline,"%s: Can't fopen() %s",                    progname,secfile);            mail(NEDITOR,wrkline,JTY,0,0);            upexit(FAKEFAIL);    }    while ( (fgets(line,256,fd) != NULL ))  {        switch (parseline(line,arg)) {        case ADMINMAIL:            strcpy(s,arg);            break;        default:            break;        }       }fclose(fd);return(s);}/*** upexit(code) - clean up and pass 'code' to system exit()*/upexit(code)int code;{    if (tfd != NULL) fclose(tfd);    if (efd != NULL) fclose(efd);    if (fd  != NULL) fclose(fd);    unlink(tempfile);    unlink(STDERR);    exit(code);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -