# 2.11BSD#431 - /usr/src/usr.bin/uucp/uucpname.c

##### Functions

    fakegethostname   X
    uucpname          X

##### Variables

    Myfullname        X

##### Macros

    HDRFILE           X

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

#### Defined functions

fakegethostname defined in line 181; used 1 times

- in line 89

uucpname defined in line 30; used 8 times

- in /usr/src/usr.bin/uucp/cico.c line 114
- in /usr/src/usr.bin/uucp/uuclean.c line 49
- in /usr/src/usr.bin/uucp/uucp.c line 42
- in /usr/src/usr.bin/uucp/uuname.c line 46
- in /usr/src/usr.bin/uucp/uupoll.c line 38
- in /usr/src/usr.bin/uucp/uuq.c line 79
- in /usr/src/usr.bin/uucp/uux.c line 70
- in /usr/src/usr.bin/uucp/uuxqt.c line 84

#### Defined variables

Myfullname defined in line 23; used 48 times

- in line 54-61(5), 78-79(3), 88-89(3), 100(2), 109-116(4), 133(2), 140(2), 151, 162-165(2)
- in /usr/src/usr.bin/uucp/uucpname.c line 54-61(5), 78-79(3), 88-89(3), 100(2), 109-116(4), 133(2), 140(2), 151, 162-165(2)

sccsid defined in line 2; never used

#### Defined macros

HDRFILE defined in line 179; used 1 times

- in line 193

Last modified: 1987-02-17 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 844 |