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