Annotation of researchv10dc/libc/sys/label.c, revision 1.1

1.1     ! root        1: /* interfaces to "secure unix" system calls, designed to
        !             2:    "work" on systems with or without these calls */
        !             3: 
        !             4: #include <errno.h>
        !             5: #include "label.h"             /* SHOULD BE <sys/label.h> */
        !             6: 
        !             7: extern int errno;
        !             8: #ifndef ENOSYS
        !             9: #define ENOSYS 39
        !            10: #endif
        !            11: 
        !            12: static struct label lbot = {0, L_BITS };
        !            13: static struct label lfloor = { 0, L_BITS };
        !            14: static int labels = 1;
        !            15: 
        !            16: static iflabeled()
        !            17: {
        !            18:        if(errno==100 || errno==ENOSYS)
        !            19:                return labels = errno = 0;
        !            20:        else
        !            21:                return -1;
        !            22: }
        !            23: getflab(name, lp)
        !            24: char *name;
        !            25: struct label *lp;
        !            26: {
        !            27:        register r;
        !            28: 
        !            29:        r = labels? syscall(64+30, name, lp): 0;
        !            30:        if(r == -1)
        !            31:                r = iflabeled();
        !            32:        if(!labels)
        !            33:                *lp = lbot;
        !            34:        return(r);
        !            35: }
        !            36: fgetflab(fd, lp)
        !            37: struct label *lp;
        !            38: {
        !            39:        register r;
        !            40: 
        !            41:        r = labels? syscall(64+31, fd, lp): 0;
        !            42:        if(r == -1)
        !            43:                r = iflabeled();
        !            44:        if(!labels)
        !            45:                *lp = lbot;
        !            46:        return(r);
        !            47: }
        !            48: setflab(name, lp)
        !            49: char *name;
        !            50: struct label *lp;
        !            51: {
        !            52:        register r;
        !            53: 
        !            54:        r = labels? syscall(64+32, name, lp): 0;
        !            55:        if(r == -1)
        !            56:                r = iflabeled();
        !            57:        return(r);
        !            58: }
        !            59: fsetflab(fd, lp)
        !            60: struct label *lp;
        !            61: {
        !            62:        register r;
        !            63: 
        !            64:        r = labels? syscall(64+33, fd, lp): 0;
        !            65:        if(r == -1)
        !            66:                r = iflabeled();
        !            67:        return(r);
        !            68: }
        !            69: flabclr(fd)
        !            70: {
        !            71:        if(getflab("/etc/floor", &lfloor) == -1)
        !            72:                iflabeled();
        !            73:        lfloor.lb_priv = lbot.lb_priv;
        !            74:        fsetflab(fd, &lfloor);
        !            75: }
        !            76: getplab(lp, cp)
        !            77: struct label *lp, *cp;
        !            78: {
        !            79:        register r;
        !            80: 
        !            81:        r = labels? syscall(64+34, lp, cp): 0;
        !            82:        if(r == -1)
        !            83:                r = iflabeled();
        !            84:        if(!labels) {
        !            85:                *lp = lbot;
        !            86:                *cp = lbot;
        !            87:        }
        !            88:        return(r);
        !            89: }
        !            90: setplab(lp, cp)
        !            91: struct label *lp, *cp;
        !            92: {
        !            93:        register r;
        !            94: 
        !            95:        r = labels? syscall(64+35, lp, cp): 0;
        !            96:        if(r == -1)
        !            97:                r = iflabeled();
        !            98:        return(r);
        !            99: }
        !           100: nochk(fd, flag)
        !           101: {
        !           102:        register r;
        !           103: 
        !           104:        r = labels? syscall(64+29, fd, flag): 0;
        !           105:        if(r == -1)
        !           106:                r = iflabeled();
        !           107:        return(r);
        !           108: }
        !           109: #include <sys/types.h>
        !           110: #include <sys/filio.h>
        !           111: 
        !           112: #ifndef FIOGSRC
        !           113: # define       FIOGSRC         (('f'<<8)|106)
        !           114: # define       FIOSSRC         (('f'<<8)|107)
        !           115: #endif
        !           116: 
        !           117: static char buf[100]; /* <sys/stream.h>: sizeof( (struct stdata *)->source) */
        !           118: 
        !           119: setstsrc(fd, name)
        !           120: char *name;
        !           121: {
        !           122:        strncpy(buf, name?name:"", sizeof(buf));
        !           123:        return ioctl(fd, FIOSSRC, buf);
        !           124: }
        !           125: 
        !           126: set2stsrc(fd, s1, s2)
        !           127: char *s1;
        !           128: char *s2;
        !           129: {
        !           130:        strncpy(buf, s1?s1:"", sizeof(buf)-1);
        !           131:        strncat(buf, s2?s2:"", sizeof(buf)-strlen(buf));
        !           132:        return ioctl(fd, FIOSSRC, buf);
        !           133: }
        !           134: 
        !           135: char *
        !           136: getstsrc(fd) 
        !           137: {
        !           138:        if(ioctl(fd, FIOGSRC, buf) == -1)
        !           139:                return 0;
        !           140:        else
        !           141:                return buf;
        !           142: }

unix.superglobalmegacorp.com

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