1/*- 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Kenneth Almquist. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 19 unchanged lines hidden (view full) --- 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * |
36 * $Id: options.c,v 1.7 1996/09/01 10:21:16 peter Exp $ |
37 */ 38 39#ifndef lint 40static char sccsid[] = "@(#)options.c 8.2 (Berkeley) 5/4/95"; 41#endif /* not lint */ 42 43#include <signal.h> 44#include <unistd.h> --- 42 unchanged lines hidden (view full) --- 87{ 88 int i; 89 90 argptr = argv; 91 if (argc > 0) 92 argptr++; 93 for (i = 0; i < NOPTS; i++) 94 optlist[i].val = 2; |
95 privileged = (getuid() != geteuid() || getgid() != getegid()); |
96 options(1); 97 if (*argptr == NULL && minusc == NULL) 98 sflag = 1; 99 if (iflag == 2 && sflag == 1 && isatty(0) && isatty(1)) 100 iflag = 1; 101 if (mflag == 2) 102 mflag = iflag; 103 for (i = 0; i < NOPTS; i++) --- 76 unchanged lines hidden (view full) --- 180#ifdef NOHACK 181 break; 182#endif 183 } else if (c == 'o') { 184 minus_o(*argptr, val); 185 if (*argptr) 186 argptr++; 187 } else { |
188 if (c == 'p' && !val && privileged) { 189 (void) setuid(getuid()); 190 (void) setgid(getgid()); 191 } |
192 setoption(c, val); 193 } 194 } 195 } 196} 197 198STATIC void 199minus_o(name, val) --- 5 unchanged lines hidden (view full) --- 205 if (name == NULL) { 206 out1str("Current option settings\n"); 207 for (i = 0; i < NOPTS; i++) 208 out1fmt("%-16s%s\n", optlist[i].name, 209 optlist[i].val ? "on" : "off"); 210 } else { 211 for (i = 0; i < NOPTS; i++) 212 if (equal(name, optlist[i].name)) { |
213 if (!val && privileged && equal(name, "privileged")) { 214 (void) setuid(getuid()); 215 (void) setgid(getgid()); 216 } |
217 setoption(optlist[i].letter, val); 218 return; 219 } 220 error("Illegal option -o %s", name); 221 } 222} 223 224 --- 241 unchanged lines hidden --- |