GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: usr.bin/mesg/mesg.c Lines: 0 25 0.0 %
Date: 2016-12-06 Branches: 0 19 0.0 %

Line Branch Exec Source
1
/*	$OpenBSD: mesg.c,v 1.12 2016/07/07 09:26:26 semarie Exp $	*/
2
/*	$NetBSD: mesg.c,v 1.4 1994/12/23 07:16:32 jtc Exp $	*/
3
4
/*
5
 * Copyright (c) 1987, 1993
6
 *	The Regents of the University of California.  All rights reserved.
7
 * (c) UNIX System Laboratories, Inc.
8
 * All or some portions of this file are derived from material licensed
9
 * to the University of California by American Telephone and Telegraph
10
 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
11
 * the permission of UNIX System Laboratories, Inc.
12
 *
13
 * Redistribution and use in source and binary forms, with or without
14
 * modification, are permitted provided that the following conditions
15
 * are met:
16
 * 1. Redistributions of source code must retain the above copyright
17
 *    notice, this list of conditions and the following disclaimer.
18
 * 2. Redistributions in binary form must reproduce the above copyright
19
 *    notice, this list of conditions and the following disclaimer in the
20
 *    documentation and/or other materials provided with the distribution.
21
 * 3. Neither the name of the University nor the names of its contributors
22
 *    may be used to endorse or promote products derived from this software
23
 *    without specific prior written permission.
24
 *
25
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35
 * SUCH DAMAGE.
36
 */
37
38
#include <sys/types.h>
39
#include <sys/stat.h>
40
41
#include <err.h>
42
#include <errno.h>
43
#include <stdio.h>
44
#include <stdlib.h>
45
#include <string.h>
46
#include <unistd.h>
47
48
int
49
main(int argc, char *argv[])
50
{
51
	struct stat sb;
52
	char *tty;
53
	int ch;
54
55
	if (pledge("stdio rpath fattr wpath cpath", NULL) == -1)
56
		err(2, "pledge");
57
58
	while ((ch = getopt(argc, argv, "")) != -1)
59
		switch (ch) {
60
		case '?':
61
		default:
62
			goto usage;
63
		}
64
	argc -= optind;
65
	argv += optind;
66
67
	if ((tty = ttyname(STDERR_FILENO)) == NULL)
68
		err(2, "ttyname");
69
	if (stat(tty, &sb) < 0)
70
		err(2, "%s", tty);
71
72
	sb.st_mode &= ACCESSPERMS;
73
74
	if (*argv == NULL) {
75
		if (sb.st_mode & S_IWGRP) {
76
			(void)fprintf(stderr, "is y\n");
77
			exit(0);
78
		}
79
		(void)fprintf(stderr, "is n\n");
80
		exit(1);
81
	}
82
83
	switch (*argv[0]) {
84
	case 'y':
85
		if (chmod(tty, sb.st_mode | S_IWGRP) < 0)
86
			err(2, "%s", tty);
87
		exit(0);
88
	case 'n':
89
		if (chmod(tty, sb.st_mode & ~S_IWGRP) < 0)
90
			err(2, "%s", tty);
91
		exit(1);
92
	}
93
94
usage:	(void)fprintf(stderr, "usage: mesg [n | y]\n");
95
	exit(2);
96
}