xref: /freebsd/usr.bin/printenv/printenv.c (revision 0b8224d1cc9dc6c9778ba04a75b2c8d47e5d7481)
1a751987aSXin LI /*-
28a16b7a1SPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
38a16b7a1SPedro F. Giffuni  *
40da30e9aSPeter Wemm  * Copyright (c) 1987, 1993
50da30e9aSPeter Wemm  *	The Regents of the University of California.  All rights reserved.
60da30e9aSPeter Wemm  *
70da30e9aSPeter Wemm  * Redistribution and use in source and binary forms, with or without
80da30e9aSPeter Wemm  * modification, are permitted provided that the following conditions
90da30e9aSPeter Wemm  * are met:
100da30e9aSPeter Wemm  * 1. Redistributions of source code must retain the above copyright
110da30e9aSPeter Wemm  *    notice, this list of conditions and the following disclaimer.
120da30e9aSPeter Wemm  * 2. Redistributions in binary form must reproduce the above copyright
130da30e9aSPeter Wemm  *    notice, this list of conditions and the following disclaimer in the
140da30e9aSPeter Wemm  *    documentation and/or other materials provided with the distribution.
15fbbd9655SWarner Losh  * 3. Neither the name of the University nor the names of its contributors
160da30e9aSPeter Wemm  *    may be used to endorse or promote products derived from this software
170da30e9aSPeter Wemm  *    without specific prior written permission.
180da30e9aSPeter Wemm  *
190da30e9aSPeter Wemm  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
200da30e9aSPeter Wemm  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
210da30e9aSPeter Wemm  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
220da30e9aSPeter Wemm  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
230da30e9aSPeter Wemm  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
240da30e9aSPeter Wemm  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
250da30e9aSPeter Wemm  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
260da30e9aSPeter Wemm  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
270da30e9aSPeter Wemm  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
280da30e9aSPeter Wemm  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
290da30e9aSPeter Wemm  * SUCH DAMAGE.
300da30e9aSPeter Wemm  */
310da30e9aSPeter Wemm 
320da30e9aSPeter Wemm #include <sys/types.h>
330da30e9aSPeter Wemm 
34cd1693d3SConrad Meyer #include <capsicum_helpers.h>
35cd1693d3SConrad Meyer #include <err.h>
360da30e9aSPeter Wemm #include <stdlib.h>
370da30e9aSPeter Wemm #include <stdio.h>
380da30e9aSPeter Wemm #include <string.h>
390da30e9aSPeter Wemm #include <unistd.h>
400da30e9aSPeter Wemm 
41d3cb5dedSWarner Losh void	usage(void);
42a751987aSXin LI extern char **environ;
430da30e9aSPeter Wemm 
440da30e9aSPeter Wemm /*
450da30e9aSPeter Wemm  * printenv
460da30e9aSPeter Wemm  *
470da30e9aSPeter Wemm  * Bill Joy, UCB
480da30e9aSPeter Wemm  * February, 1979
490da30e9aSPeter Wemm  */
500da30e9aSPeter Wemm int
main(int argc,char * argv[])51f4ac32deSDavid Malone main(int argc, char *argv[])
520da30e9aSPeter Wemm {
53f4ac32deSDavid Malone 	char *cp, **ep;
54f4ac32deSDavid Malone 	size_t len;
550da30e9aSPeter Wemm 	int ch;
560da30e9aSPeter Wemm 
57*7672a014SMariusz Zaborski 	if (caph_limit_stdio() < 0 || caph_enter() < 0)
58cd1693d3SConrad Meyer 		err(1, "capsicum");
59cd1693d3SConrad Meyer 
601c8af878SWarner Losh 	while ((ch = getopt(argc, argv, "")) != -1)
610da30e9aSPeter Wemm 		switch(ch) {
620da30e9aSPeter Wemm 		case '?':
630da30e9aSPeter Wemm 		default:
640da30e9aSPeter Wemm 			usage();
650da30e9aSPeter Wemm 		}
660da30e9aSPeter Wemm 	argc -= optind;
670da30e9aSPeter Wemm 	argv += optind;
680da30e9aSPeter Wemm 
690da30e9aSPeter Wemm 	if (argc == 0) {
700da30e9aSPeter Wemm 		for (ep = environ; *ep; ep++)
710da30e9aSPeter Wemm 			(void)printf("%s\n", *ep);
720da30e9aSPeter Wemm 		exit(0);
730da30e9aSPeter Wemm 	}
740da30e9aSPeter Wemm 	len = strlen(*argv);
750da30e9aSPeter Wemm 	for (ep = environ; *ep; ep++)
760da30e9aSPeter Wemm 		if (!memcmp(*ep, *argv, len)) {
770da30e9aSPeter Wemm 			cp = *ep + len;
783652bc8eSPietro Cerutti 			if (*cp == '=') {
793652bc8eSPietro Cerutti 				(void)printf("%s\n", cp + 1);
800da30e9aSPeter Wemm 				exit(0);
810da30e9aSPeter Wemm 			}
820da30e9aSPeter Wemm 		}
830da30e9aSPeter Wemm 	exit(1);
840da30e9aSPeter Wemm }
850da30e9aSPeter Wemm 
860da30e9aSPeter Wemm void
usage(void)87f4ac32deSDavid Malone usage(void)
880da30e9aSPeter Wemm {
890da30e9aSPeter Wemm 	(void)fprintf(stderr, "usage: printenv [name]\n");
900da30e9aSPeter Wemm 	exit(1);
910da30e9aSPeter Wemm }
92