Annotation of 42BSD/usr.bin/uucp/uucpname.c, revision 1.1

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

unix.superglobalmegacorp.com

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