|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.