Annotation of coherent/a/usr/bob/uusrc/dcp/dcputil.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * dcputil.c 
        !             3:  *
        !             4:  * miscellaneous utility functions
        !             5:  */
        !             6: 
        !             7: #include <ctype.h>
        !             8: #include <pwd.h>
        !             9: #include "dcp.h"
        !            10: #include "perm.h"
        !            11: 
        !            12: /*
        !            13:  * |myname()| returns a pointer to the local host's UUCP nodename.
        !            14:  *
        !            15:  * If there is a MYNAME entry in the PERMS, then return this entry
        !            16:  * instead of the name in the NODENAME file.
        !            17:  */
        !            18: 
        !            19: char *
        !            20: myname()
        !            21: {
        !            22:        register char *tmp;
        !            23: 
        !            24:        if ( (tmp=perm_value(myname_e)) != NULL )
        !            25:                return( tmp );
        !            26:        else
        !            27:                return( uucpname() );
        !            28: }
        !            29: 
        !            30: /*
        !            31:  *  char *visib(str)  char *str;
        !            32:  *  char *visbuf(data, len)  char *data;  int len;
        !            33:  *
        !            34:  *  Print the string or buffer of data in "visible" format.  Printable
        !            35:  *  characters are printed as themselves, special control characters
        !            36:  *  (CR, LF, BS, HT) are printed in the usual escape format, and others
        !            37:  *  are printed using 3-digit octal escapes.  Returns a pointer to a
        !            38:  *  static buffer containing the visible data.
        !            39:  */
        !            40: 
        !            41: char *
        !            42: visib(str)
        !            43: unsigned char *str;
        !            44: {
        !            45:        return( visbuf(str, strlen(str)) );
        !            46: }
        !            47: 
        !            48: char *
        !            49: visbuf(data, len)
        !            50: unsigned char *data; 
        !            51: int len;
        !            52: {
        !            53:        static char buf[BUFSIZ];
        !            54:        register unsigned char c;
        !            55:        register char *p;
        !            56: 
        !            57: 
        !            58:        if ( len <= 0 )
        !            59:                return("");
        !            60:        p = buf;
        !            61:        while( (p<&buf[BUFSIZ-4]) && (len--) ) {
        !            62:                c = *data++;
        !            63:                if ( (c!='\\') && isascii(c) && (isprint(c) || (c==' ')) ) {
        !            64:                        *p++ = c;
        !            65:                        continue;
        !            66:                }
        !            67:                *p++ = '\\';
        !            68:                switch ( c ) {
        !            69:                case '\\':  *p++ = '\\'; break;
        !            70:                case '\n':  *p++ = 'n';  break;
        !            71:                case '\t':  *p++ = 't';  break;
        !            72:                case '\b':  *p++ = 'b';  break;
        !            73:                case '\r':  *p++ = 'r';  break;
        !            74:                case '\f':  *p++ = 'f';  break;
        !            75:                case '\0':  *p++ = '0';  break;
        !            76:                default:
        !            77:                        sprintf(p, "%03o", c);
        !            78:                        p += 3;
        !            79:                }
        !            80:        }
        !            81:        *p = '\0';
        !            82:        return( buf );
        !            83: }
        !            84: 
        !            85: /*
        !            86:  * |expandtilde(filename)| expands |filename| using the usual "~" convention.
        !            87:  * That is, "~user" expands to the home directory of "user". "~" by itself
        !            88:  * expands to the home directory of the effective userid, which in this
        !            89:  * case is usually the /usr/spool/uucppublic directory. Care is taken not
        !            90:  * to overflow the (static) name buffer.
        !            91:  */
        !            92: char *expandtilde(filename)
        !            93: char *filename;
        !            94: {
        !            95:        struct passwd *pw, *getpwnam(), *getpwuid();
        !            96:        static char namebuf[PATHLEN];
        !            97:        int goodname = 1;
        !            98:        char *p;
        !            99:        char logline[60];
        !           100: 
        !           101:        if ('~' != *filename) {
        !           102:                strcpy(namebuf, filename);
        !           103:        } else {
        !           104:                ++filename;
        !           105:                p = namebuf;
        !           106:                while(*filename && '/' != *filename && (p - namebuf) < PATHLEN)
        !           107:                        *p++ = *filename++;
        !           108:                *p = '\0';
        !           109:                if (strlen(namebuf) == 0)
        !           110:                        pw = getpwuid(geteuid());
        !           111:                else
        !           112:                        pw = getpwnam(namebuf);
        !           113:                if (NULL == pw) {
        !           114:                        goodname = 0;
        !           115:                } else if (strlen(pw->pw_dir)+strlen(filename)+1 > PATHLEN) {
        !           116:                        goodname = 0;
        !           117:                } else {
        !           118:                        strcpy(namebuf, pw->pw_dir);
        !           119:                        strcat(namebuf, filename);
        !           120:                }
        !           121:        }
        !           122:        if (goodname) {
        !           123:                sprintf(logline, "tilde->%s", namebuf);
        !           124:                plog(M_TRANSFER, logline);
        !           125:                return namebuf;
        !           126:        } else {
        !           127:                plog(M_TRANSFER, "tilde->NULL");
        !           128:                return NULL;
        !           129:        }
        !           130: }
        !           131: 

unix.superglobalmegacorp.com

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