|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1987 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that the above copyright notice and this paragraph are ! 7: * duplicated in all such forms and that any documentation, ! 8: * advertising materials, and other materials related to such ! 9: * distribution and use acknowledge that the software was developed ! 10: * by the University of California, Berkeley. The name of the ! 11: * University may not be used to endorse or promote products derived ! 12: * from this software without specific prior written permission. ! 13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: char copyright[] = ! 20: "@(#) Copyright (c) 1987 Regents of the University of California.\n\ ! 21: All rights reserved.\n"; ! 22: #endif /* not lint */ ! 23: ! 24: #ifndef lint ! 25: static char sccsid[] = "@(#)mesg.c 4.5 (Berkeley) 6/29/88"; ! 26: #endif /* not lint */ ! 27: ! 28: /* ! 29: * mesg -- set current tty to accept or ! 30: * forbid write permission. ! 31: * ! 32: * mesg [y] [n] ! 33: * y allow messages ! 34: * n forbid messages ! 35: */ ! 36: ! 37: #include <sys/types.h> ! 38: #include <sys/stat.h> ! 39: #include <stdio.h> ! 40: ! 41: static char *tty; ! 42: ! 43: main(argc, argv) ! 44: int argc; ! 45: char **argv; ! 46: { ! 47: struct stat sbuf; ! 48: char *ttyname(); ! 49: ! 50: if (!(tty = ttyname(2))) { ! 51: fputs("mesg: not a device in /dev.\n", stderr); ! 52: exit(-1); ! 53: } ! 54: if (stat(tty, &sbuf) < 0) { ! 55: perror("mesg"); ! 56: exit(-1); ! 57: } ! 58: if (argc < 2) { ! 59: if (sbuf.st_mode & 020) { ! 60: fputs("is y\n", stderr); ! 61: exit(0); ! 62: } ! 63: fputs("is n\n", stderr); ! 64: exit(1); ! 65: } ! 66: #define OTHER_WRITE 020 ! 67: switch(*argv[1]) { ! 68: case 'y': ! 69: newmode(sbuf.st_mode | OTHER_WRITE); ! 70: exit(0); ! 71: case 'n': ! 72: newmode(sbuf.st_mode &~ OTHER_WRITE); ! 73: exit(1); ! 74: default: ! 75: fputs("usage: mesg [y] [n]\n", stderr); ! 76: exit(-1); ! 77: } ! 78: /*NOTREACHED*/ ! 79: } ! 80: ! 81: static ! 82: newmode(m) ! 83: u_short m; ! 84: { ! 85: if (chmod(tty, m) < 0) { ! 86: perror("mesg"); ! 87: exit(-1); ! 88: } ! 89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.