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