|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)uucpname.c 5.1 (Berkeley) 7/2/83"; ! 3: #endif ! 4: ! 5: #include "uucp.h" ! 6: #include <sys/types.h> ! 7: #include <sys/stat.h> ! 8: ! 9: #ifdef GETMYHNAME ! 10: #include <UNET/unetio.h> ! 11: #endif ! 12: ! 13: #ifdef UNAME ! 14: /* Use USG uname() library routine */ ! 15: #include <sys/utsname.h> ! 16: #endif ! 17: ! 18: #ifdef CCWHOAMI ! 19: /* Compile in 'sysname' as found in standard(!) include file */ ! 20: #include <whoami.h> ! 21: #endif ! 22: ! 23: /******* ! 24: * uucpname(name) get the uucp name ! 25: * ! 26: * return code - none ! 27: */ ! 28: ! 29: uucpname(name) ! 30: register char *name; ! 31: { ! 32: register char *s, *d; ! 33: ! 34: /* HUGE KLUDGE HERE! rti!trt ! 35: * Since some UNIX systems do not honor the set-user-id bit ! 36: * when the invoking user is root, we must change the uid here. ! 37: * So uucp files are created with the correct owner. ! 38: */ ! 39: if (geteuid() == 0 && getuid() == 0) { ! 40: struct stat stbuf; ! 41: stbuf.st_uid = 0; /* In case the stat fails */ ! 42: stbuf.st_gid = 0; ! 43: stat(UUCICO, &stbuf); /* Assume uucico is correctly owned */ ! 44: setgid(stbuf.st_gid); ! 45: setuid(stbuf.st_uid); ! 46: } ! 47: ! 48: s = NULL; /* system name unknown, so far */ ! 49: ! 50: #ifdef GETHOSTNAME ! 51: /* Use 4.1a library routine */ ! 52: if (s == NULL || *s == '\0') { ! 53: char hostname[32]; ! 54: ! 55: s = hostname; ! 56: if(gethostname(hostname, sizeof(hostname)) == -1) { ! 57: DEBUG(1, "gethostname", "FAILED"); ! 58: s = NULL; ! 59: } ! 60: } ! 61: #endif ! 62: ! 63: #ifdef UNAME ! 64: /* Use USG library routine */ ! 65: if (s == NULL || *s == '\0') { ! 66: struct utsname utsn; ! 67: ! 68: s = utsn.nodename; ! 69: if (uname(&utsn) == -1) { ! 70: DEBUG(1, "uname", "FAILED"); ! 71: s = NULL; ! 72: } ! 73: } ! 74: #endif ! 75: ! 76: #ifdef WHOAMI ! 77: /* Use fake gethostname() routine */ ! 78: if (s == NULL || *s == '\0') { ! 79: char fakehost[32]; ! 80: ! 81: s = fakehost; ! 82: if (fakegethostname(fakehost, sizeof(fakehost)) == -1) { ! 83: DEBUG(1, "whoami search", "FAILED"); ! 84: s = NULL; ! 85: } ! 86: } ! 87: #endif ! 88: ! 89: #ifdef CCWHOAMI ! 90: /* compile sysname right into uucp */ ! 91: if (s == NULL || *s == '\0') { ! 92: s = sysname; ! 93: } ! 94: #endif ! 95: ! 96: #ifdef UUNAME ! 97: /* uucp name is stored in /etc/uucpname or /local/uucpname */ ! 98: if (s == NULL || *s == '\0') { ! 99: FILE *uucpf; ! 100: char stmp[10]; ! 101: ! 102: s = stmp; ! 103: if (((uucpf = fopen("/etc/uucpname", "r")) == NULL && ! 104: (uucpf = fopen("/local/uucpname", "r")) == NULL) || ! 105: fgets(s, 8, uucpf) == NULL) { ! 106: DEBUG(1, "uuname search", "FAILED"); ! 107: s = NULL; ! 108: } else { ! 109: for (d = stmp; *d && *d != '\n' && d < stmp + 8; d++) ! 110: ; ! 111: *d = '\0'; ! 112: } ! 113: if (uucpf != NULL) ! 114: fclose(uucpf); ! 115: } ! 116: #endif ! 117: ! 118: #ifdef GETMYHNAME ! 119: /* Use 3Com's getmyhname() routine */ ! 120: if (s == NULL || *s == '\0') { ! 121: if ((s == getmyhname()) == NULL) ! 122: DEBUG(1, "getmyhname", "FAILED"); ! 123: } ! 124: #endif ! 125: ! 126: #ifdef MYNAME ! 127: if (s == NULL || *s == '\0') { ! 128: s = MYNAME; ! 129: } ! 130: #endif ! 131: ! 132: if (s == NULL || *s == '\0') { ! 133: /* ! 134: * As a last ditch thing, we *could* search Spool ! 135: * for D.<uucpname> and use that, ! 136: * but that is too much trouble, isn't it? ! 137: */ ! 138: logent("SYSTEM NAME", "CANNOT DETERMINE"); ! 139: s = "unknown"; ! 140: } ! 141: ! 142: /* ! 143: * copy uucpname back to caller-supplied buffer, ! 144: * truncating to 7 characters. ! 145: * Also set up subdirectory names, if subdirs are being used. ! 146: */ ! 147: d = name; ! 148: while ((*d = *s++) && d < name + 7) ! 149: d++; ! 150: *(name + 7) = '\0'; ! 151: DEBUG(1, "My uucpname = %s\n", name); ! 152: ! 153: #ifdef UUDIR ! 154: sprintf(DLocal, "D.%s", name); ! 155: sprintf(DLocalX, "D.%sX", name); ! 156: #endif ! 157: } ! 158: ! 159: #ifdef WHOAMI ! 160: /* ! 161: * simulate the 4.1a bsd system call by reading /usr/include/whoami.h ! 162: * and looking for the #define sysname ! 163: * CHANGE NOTICE (rti!trt): returns -1 on failure, 0 on success. ! 164: */ ! 165: ! 166: #define HDRFILE "/usr/include/whoami.h" ! 167: ! 168: fakegethostname(name, len) ! 169: char *name; ! 170: int len; ! 171: { ! 172: char buf[BUFSIZ]; ! 173: char bname[32]; ! 174: char hname[32]; ! 175: char nname[128]; ! 176: register char *p, *q, *nptr; ! 177: int i; ! 178: register FILE *fd; ! 179: ! 180: fd = fopen(HDRFILE, "r"); ! 181: if (fd == NULL) ! 182: return(-1); ! 183: ! 184: hname[0] = 0; /* rti!trt: was "hostunknown" */ ! 185: nname[0] = 0; ! 186: nptr = nname; ! 187: ! 188: while (fgets(buf, sizeof buf, fd) != NULL) { /* each line in the file */ ! 189: if (sscanf(buf, "#define sysname \"%[^\"]\"", bname) == 1) { ! 190: strcpy(hname, bname); ! 191: } else if (sscanf(buf, "#define nickname \"%[^\"]\"", bname) == 1) { ! 192: strcpy(nptr, bname); ! 193: nptr += strlen(bname) + 1; ! 194: } else if (sscanf(buf, "#define nickname%d \"%[^\"]\"", &i, bname) == 2) { ! 195: strcpy(nptr, bname); ! 196: nptr += strlen(bname) + 1; ! 197: } ! 198: } ! 199: fclose(fd); ! 200: if (hname[0] == 0) ! 201: return(-1); /* added by rti!trt */ ! 202: strncpy(name, hname, len); ! 203: p = nname; ! 204: i = strlen(hname) + 1; ! 205: q = name + i; ! 206: while (i < len && (p[0] != 0 || p[1] != 0)) { ! 207: *q++ = *p++; ! 208: i++; ! 209: } ! 210: *q++ = 0; ! 211: return(0); ! 212: } ! 213: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.