Annotation of 43BSD/contrib/news/src/pathinit.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * This software is Copyright (c) 1986 by Rick Adams.
        !             3:  *
        !             4:  * Permission is hereby granted to copy, reproduce, redistribute or
        !             5:  * otherwise use this software as long as: there is no monetary
        !             6:  * profit gained specifically from the use or reproduction or this
        !             7:  * software, it is not sold, rented, traded or otherwise marketed, and
        !             8:  * this copyright notice is included prominently in any copy
        !             9:  * made.
        !            10:  *
        !            11:  * The author make no claims as to the fitness or correctness of
        !            12:  * this software for any use whatsoever, and it is provided as is. 
        !            13:  * Any use of this software is at the user's own risk.
        !            14:  *
        !            15:  * This function initializes all the strings used for the various
        !            16:  * filenames.  They cannot be compiled into the program, since that
        !            17:  * would be non-portable.  With this convention, the netnews sub-system
        !            18:  * can be owned by any non-privileged user.  It is also possible
        !            19:  * to work when the administration randomly moves users from one
        !            20:  * filesystem to another.  The convention is that a particular user
        !            21:  * (HOME, see Makefile) is searched for in /etc/passwd and all files
        !            22:  * are presumed relative to there.  This method also allows one copy
        !            23:  * of the object code to be used on ANY machine.  (this code runs
        !            24:  * un-modified on 50+ machines at IH!!)
        !            25:  *
        !            26:  * The disadvantage to using this method is that all netnews programs
        !            27:  * (inews, readnews, rnews, checknews) must first search /etc/passwd
        !            28:  * before they can start up.  This can cause significant overhead if
        !            29:  * you have a big password file.
        !            30:  *
        !            31:  * Some games are played with ifdefs to get four .o files out of this
        !            32:  * one source file.  INEW is defined for inews, READ for readnews,
        !            33:  * CHKN for checknews, and EXP for expire.
        !            34:  */
        !            35: 
        !            36: #ifdef SCCSID
        !            37: static char    *SccsId = "@(#)pathinit.c       1.17    1/17/86";
        !            38: #endif /* SCCSID */
        !            39: 
        !            40: #if defined(INEW) || defined(EXP)
        !            41: #include       "iparams.h"
        !            42: #endif /* INEW || EXP */
        !            43: 
        !            44: #ifdef READ
        !            45: #include       "rparams.h"
        !            46: #endif /* READ */
        !            47: 
        !            48: #if defined(CHKN)
        !            49: #include "params.h"
        !            50: #endif /* CHKN */
        !            51: 
        !            52: 
        !            53: char *FULLSYSNAME, *SPOOL, *LIB, *BIN, *ACTIVE, *SUBFILE, *ARTFILE,
        !            54:        *username, *userhome;
        !            55: 
        !            56: #ifdef INEW
        !            57: char *LOCKFILE, *SEQFILE, *ARTICLE, *INFILE, *TELLME;
        !            58: #endif /* INEW */
        !            59: 
        !            60: #if defined(INEW) || defined(READ)
        !            61: char *ALIASES;
        !            62: #endif /* INEW || READ */
        !            63: 
        !            64: #ifdef EXP
        !            65: char *OLDNEWS;
        !            66: #endif /* EXP */
        !            67: 
        !            68: #ifdef READ
        !            69: char *MAILPARSER;
        !            70: #endif /* READ */
        !            71: 
        !            72: #ifdef HIDDENNET
        !            73: char *LOCALSYSNAME;
        !            74: #endif /* HIDDENNET */
        !            75: 
        !            76: 
        !            77: struct passwd *getpwnam();
        !            78: char *rindex();
        !            79: 
        !            80: #define Sprintf(where,fmt,arg) (void) sprintf(bfr,fmt,arg); where = AllocCpy(bfr)
        !            81: 
        !            82: char *
        !            83: AllocCpy(cp)
        !            84: register char *cp;
        !            85: {
        !            86:        register char *mp;
        !            87:        char *malloc();
        !            88: 
        !            89:        mp = malloc((unsigned)strlen(cp) + 1);
        !            90: 
        !            91:        if (mp == NULL)
        !            92:                xerror("malloc failed on %s",cp);
        !            93: 
        !            94:        (void) strcpy(mp, cp);
        !            95:        return mp;
        !            96: }
        !            97: 
        !            98: pathinit()
        !            99: {
        !           100: #if defined(INEW) && defined(NOTIFY)
        !           101:        FILE    *nfd;           /* notify file descriptor               */
        !           102:        char *p;
        !           103: #endif /* INEW && NOTIFY */
        !           104: #ifndef ROOTID
        !           105:        struct passwd   *pw;    /* struct for pw lookup                 */
        !           106: #endif /* !ROOTID */
        !           107: #ifdef EXP
        !           108:        char *p;
        !           109: #endif /* EXP */
        !           110: #ifndef CHKN
        !           111:        struct utsname ubuf;
        !           112: 
        !           113:        uname(&ubuf);
        !           114: #ifdef HIDDENNET
        !           115:        FULLSYSNAME = AllocCpy(HIDDENNET);
        !           116:        LOCALSYSNAME = AllocCpy(ubuf.nodename);
        !           117: #else /* !HIDDENNET */
        !           118:        FULLSYSNAME = AllocCpy(ubuf.nodename);
        !           119: #endif /* !HIDDENNET */
        !           120: #endif /* !CHKN */
        !           121: 
        !           122: #ifdef HOME
        !           123:        /* Relative to the home directory of user HOME */
        !           124:        (void) sprintf(bfr, "%s/%s", logdir(HOME), SPOOLDIR);
        !           125:        SPOOL = AllocCpy(bfr);
        !           126:        (void) sprintf(bfr, "%s/%s", logdir(HOME), LIBDIR);
        !           127:        LIB = AllocCpy(bfr);
        !           128: #else /* !HOME */
        !           129:        /* Fixed paths defined in Makefile */
        !           130:        SPOOL = AllocCpy(SPOOLDIR);
        !           131:        LIB = AllocCpy(LIBDIR);
        !           132: #endif /* !HOME */
        !           133: 
        !           134: #ifdef IHCC
        !           135:        (void) sprintf(bfr, "%s/%s", logdir(HOME), BINDIR);
        !           136:        BIN = AllocCpy(bfr);
        !           137: #else /* !IHCC */
        !           138:        Sprintf(BIN, "%s", BINDIR);
        !           139: #endif /* !IHCC */
        !           140: 
        !           141:        Sprintf(ACTIVE, "%s/active", LIB);
        !           142: 
        !           143: #ifdef EXP
        !           144:        (void) strcpy(bfr, SPOOL);
        !           145:        p = rindex(bfr, '/');
        !           146:        if (p) {
        !           147:                strcpy(++p, "oldnews");
        !           148:                OLDNEWS = AllocCpy(bfr);
        !           149:        } else
        !           150:                OLDNEWS = AllocCpy("oldnews");
        !           151: #endif /* EXP */
        !           152: 
        !           153: #ifndef CHKN
        !           154:        Sprintf(SUBFILE, "%s/sys", LIB);
        !           155:        Sprintf(ARTFILE, "%s/history", LIB);
        !           156: # endif /* !CHKN */
        !           157: 
        !           158: # ifdef READ
        !           159: #ifdef SENDMAIL
        !           160:        Sprintf(MAILPARSER, "%s -oi -oem", SENDMAIL);
        !           161: #else /* !SENDMAIL */
        !           162:        Sprintf(MAILPARSER, "%s/recmail", LIB);
        !           163: #endif /* !SENDMAIL */
        !           164: # endif /* READ */
        !           165: 
        !           166: # if defined(READ) || defined(INEW)
        !           167:        Sprintf(ALIASES, "%s/aliases", LIB);
        !           168: # endif /* READ || INEW */
        !           169: # ifdef INEW
        !           170:        Sprintf(LOCKFILE, "%s/LOCK", LIB);
        !           171:        Sprintf(SEQFILE, "%s/seq", LIB);
        !           172:        Sprintf(ARTICLE, "%s/.arXXXXXX", SPOOL);
        !           173:        Sprintf(INFILE, "%s/.inXXXXXX", SPOOL);
        !           174: /*
        !           175:  * The person notified by the netnews sub-system.  Again, no name is
        !           176:  * compiled in, but instead the information is taken from a file.
        !           177:  * If the file does not exist, a "default" person will get the mail.
        !           178:  * If the file exists, but is empty, nobody will get the mail.  This
        !           179:  * may seem backwards, but is a better fail-safe.
        !           180:  */
        !           181: # ifdef NOTIFY
        !           182:        (void) sprintf(bfr, "%s/notify", LIB);
        !           183:        nfd = fopen(bfr, "r");
        !           184:        if (nfd != NULL) {
        !           185:                bfr[0] = '\0';
        !           186:                (void) fgets(bfr, BUFLEN, nfd);
        !           187:                if ((p = index(bfr, '\n')) != NULL)     /* strip newline */
        !           188:                        *p = '\0';
        !           189:                TELLME = AllocCpy(bfr);
        !           190:                (void) fclose(nfd);
        !           191:        } else
        !           192:                TELLME = AllocCpy(NOTIFY);
        !           193: # endif /* NOTIFY */
        !           194: 
        !           195: /*
        !           196:  * Since the netnews owner's id number is different on different
        !           197:  * systems, we'll extract it from the /etc/passwd file.  If no entry,
        !           198:  * default to root.  This id number seems to only be used to control who
        !           199:  * can input certain control messages or cancel any message.  Note that
        !           200:  * entry is the name from the "notify" file as found above if possible.
        !           201:  * Defining ROOTID in defs.h hardwires in a number and avoids
        !           202:  * another search of /etc/passwd.
        !           203:  */
        !           204: # ifndef ROOTID
        !           205:        if ((pw = getpwnam(TELLME)) != NULL)
        !           206:                ROOTID =  pw->pw_uid;
        !           207:        else if ((pw = getpwnam(HOME)) != NULL)
        !           208:                ROOTID =  pw->pw_uid;
        !           209:        else
        !           210:                ROOTID = 0;             /* nobody left, let only root */
        !           211: # endif /* !ROOTID */
        !           212: #endif /* INEW */
        !           213: }

unix.superglobalmegacorp.com

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