Annotation of researchv10no/cmd/netnews/src/pathinit.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * This function initializes all the strings used for the various
                      3:  * filenames.  They cannot be compiled into the program, since that
                      4:  * would be non-portable.  With this convention, the netnews sub-system
                      5:  * can be owned by any non-priviledged user.  It is also possible
                      6:  * to work when the administration randomly moves users from one
                      7:  * filesystem to another.  The convention is that a particular user
                      8:  * (HOME, see Makefile) is searched for in /etc/passwd and all files
                      9:  * are presumed relative to there.  This method also allows one copy
                     10:  * of the object code to be used on ANY machine.  (this code runs
                     11:  * un-modified on 50+ machines at IH!!)
                     12:  *
                     13:  * The disadvantage to using this method is that all netnews programs
                     14:  * (inews, readnews, rnews, checknews) must first search /etc/passwd
                     15:  * before they can start up.  This can cause significant overhead if
                     16:  * you have a big password file.
                     17:  *
                     18:  * Some games are played with ifdefs to get three .o files out of this
                     19:  * one source file.  INEW is defined for inews, READ for readnews,
                     20:  * and CHKN for checknews.
                     21:  */
                     22: static char *sccsid = "@(#)pathinit.c  1.2     3/30/83";
                     23: 
                     24: #ifdef INEW
                     25: #include       "iparams.h"
                     26: #endif
                     27: 
                     28: #ifdef READ
                     29: #include       "rparams.h"
                     30: extern char    MAILPARSER[];
                     31: #endif
                     32: 
                     33: #ifdef CHKN
                     34: #include <stdio.h>
                     35: extern char    SPOOL[];
                     36: extern char    LIB[];
                     37: extern char    ACTIVE[];
                     38: #endif
                     39: 
                     40: #ifdef EXP
                     41: #include <stdio.h>
                     42: extern char    SPOOL[];
                     43: extern char    LIB[];
                     44: extern char    ACTIVE[];
                     45: extern char    OLDNEWS[];
                     46: #endif
                     47: 
                     48: struct passwd *getpwname();
                     49: char *rindex();
                     50: 
                     51: pathinit()
                     52: {
                     53:        struct passwd   *pw;    /* struct for pw lookup                 */
                     54:        FILE    *nfd;           /* notify file descriptor               */
                     55:        char *p;
                     56: #if INEW || READ
                     57:        struct utsname ubuf;
                     58: 
                     59:        uname(&ubuf);
                     60:        strcpy(FULLSYSNAME, ubuf.nodename);
                     61:        strcpy(SYSNAME, ubuf.nodename);
                     62:        SYSNAME[SNLN] = '\0';
                     63: #endif
                     64: 
                     65: #ifdef HOME
                     66:        /* Relative to the home directory of user HOME */
                     67:        sprintf(SPOOL, "%s/%s", logdir(HOME), SPOOLDIR);
                     68:        sprintf(LIB, "%s/%s", logdir(HOME), LIBDIR);
                     69: #else
                     70:        /* Fixed paths defined in Makefile */
                     71:        strcpy(SPOOL, SPOOLDIR);
                     72:        strcpy(LIB, LIBDIR);
                     73: #endif
                     74: 
                     75:        sprintf(ACTIVE, "%s/active", LIB);
                     76: 
                     77: #ifdef EXP
                     78:        strcpy(OLDNEWS, SPOOL);
                     79:        p = rindex(OLDNEWS, '/');
                     80:        if (p)
                     81:                strcpy(++p, "oldnews");
                     82: #endif
                     83: 
                     84: #if INEW || READ
                     85:        sprintf(LOCKFILE, "%s/LOCK", LIB);
                     86:        sprintf(SEQFILE, "%s/seq", LIB);
                     87:        sprintf(NGFILE, "%s/ngfile", LIB);
                     88:        sprintf(SUBFILE, "%s/sys", LIB);
                     89:        sprintf(ARTFILE, "%s/history", LIB);
                     90: # ifdef INEW
                     91:        sprintf(ARTICLE, "%s/.arXXXXXX", SPOOL);
                     92:        sprintf(INFILE, "%s/.inXXXXXX", SPOOL);
                     93:        sprintf(logfname, "%s/log", LIB);
                     94:        sprintf(STASH, "%s/junk", LIB);
                     95: # endif
                     96: # ifdef READ
                     97:        sprintf(HELPFILE, "%s/help", LIB);
                     98:        sprintf(CAESAR, "%s/caesar", LIB);
                     99:        sprintf(USERS, "%s/users", LIB);
                    100: #ifdef SENDMAIL
                    101:        strcpy(MAILPARSER, SENDMAIL);   /* SENDMAIL includes -t */
                    102: #else
                    103:        sprintf(MAILPARSER, "%s/recmail", LIB);
                    104: #endif
                    105: # endif
                    106: 
                    107: /*
                    108:  * The person notified by the netnews sub-system.  Again, no name is
                    109:  * compiled in, but instead the information is taken from a file.
                    110:  * If the file does not exist, a "default" person will get the mail.
                    111:  * If the file exists, but is empty, nobody will get the mail.  This
                    112:  * may seem backwards, but is a better fail-safe.
                    113:  */
                    114: # ifdef NOTIFY
                    115:        sprintf(TELLFILE, "%s/notify", LIB);
                    116:        nfd = fopen(TELLFILE, "r");
                    117:        if (nfd == NULL)
                    118:                sprintf(TELLME, "%s", NOTIFY);
                    119:        else if (fscanf(nfd, "%s", TELLME) == EOF)
                    120:                strcpy(TELLME, "");
                    121: # endif
                    122: 
                    123: /*
                    124:  * Since the netnews owner's id number is different on different
                    125:  * systems, we'll extract it from the /etc/passwd file.  If no entry,
                    126:  * default to root.  This id number seems to only be used to control who
                    127:  * can input certain control messages or cancel any message.  Note that
                    128:  * entry is the name from the "notify" file as found above if possible.
                    129:  * Defining ROOTID in defs.h hardwires in a number and avoids
                    130:  * another search of /etc/passwd.
                    131:  */
                    132: # ifndef ROOTID
                    133:        if ((pw = getpwname(TELLME)) != NULL)
                    134:                ROOTID =  pw->pw_uid;
                    135:        else if ((pw = getpwname(HOME)) != NULL)
                    136:                ROOTID =  pw->pw_uid;
                    137:        else
                    138:                ROOTID = 0;             /* nobody left, let only root */
                    139: # endif ROOTID
                    140: #endif INEW || READ
                    141: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.