Magellan Linux

Annotation of /trunk/mkinitrd-magellan/busybox/libbb/setup_environment.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1123 - (hide annotations) (download)
Wed Aug 18 21:56:57 2010 UTC (13 years, 9 months ago) by niro
File MIME type: text/plain
File size: 2805 byte(s)
-updated to busybox-1.17.1
1 niro 532 /* vi: set sw=4 ts=4: */
2     /*
3     * Copyright 1989 - 1991, Julianne Frances Haugh <jockgrrl@austin.rr.com>
4     * All rights reserved.
5     *
6     * Redistribution and use in source and binary forms, with or without
7     * modification, are permitted provided that the following conditions
8     * are met:
9     * 1. Redistributions of source code must retain the above copyright
10     * notice, this list of conditions and the following disclaimer.
11     * 2. Redistributions in binary form must reproduce the above copyright
12     * notice, this list of conditions and the following disclaimer in the
13     * documentation and/or other materials provided with the distribution.
14     * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
15     * may be used to endorse or promote products derived from this software
16     * without specific prior written permission.
17     *
18     * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
19     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21     * ARE DISCLAIMED. IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
22     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28     * SUCH DAMAGE.
29     */
30    
31     #include "libbb.h"
32    
33 niro 1123 void FAST_FUNC setup_environment(const char *shell, int flags, const struct passwd *pw)
34 niro 816 {
35     /* Change the current working directory to be the home directory
36     * of the user */
37     if (chdir(pw->pw_dir)) {
38 niro 1123 xchdir((flags & SETUP_ENV_TO_TMP) ? "/tmp" : "/");
39 niro 816 bb_error_msg("can't chdir to home directory '%s'", pw->pw_dir);
40     }
41 niro 532
42 niro 1123 if (flags & SETUP_ENV_CLEARENV) {
43 niro 532 const char *term;
44    
45 niro 816 /* Leave TERM unchanged. Set HOME, SHELL, USER, LOGNAME, PATH.
46 niro 1123 * Unset all other environment variables. */
47 niro 532 term = getenv("TERM");
48     clearenv();
49     if (term)
50     xsetenv("TERM", term);
51 niro 816 xsetenv("PATH", (pw->pw_uid ? bb_default_path : bb_default_root_path));
52     goto shortcut;
53     // No, gcc (4.2.1) is not clever enougn to do it itself.
54     //xsetenv("USER", pw->pw_name);
55     //xsetenv("LOGNAME", pw->pw_name);
56     //xsetenv("HOME", pw->pw_dir);
57     //xsetenv("SHELL", shell);
58 niro 1123 } else if (flags & SETUP_ENV_CHANGEENV) {
59 niro 532 /* Set HOME, SHELL, and if not becoming a super-user,
60 niro 1123 * USER and LOGNAME. */
61 niro 532 if (pw->pw_uid) {
62 niro 816 shortcut:
63 niro 532 xsetenv("USER", pw->pw_name);
64     xsetenv("LOGNAME", pw->pw_name);
65     }
66 niro 816 xsetenv("HOME", pw->pw_dir);
67     xsetenv("SHELL", shell);
68 niro 532 }
69     }