diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-02-18 11:08:33 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-02-18 11:08:33 +0000 |
commit | c9ca0a32745a43eaa6cb6b7b460718de8ccb84f2 (patch) | |
tree | 2b4bdf035b3a3c0436ce823e137d969af4d3a06f /miscutils | |
parent | 56244736ec7d0a3c338f542204aae83fb0200346 (diff) | |
download | busybox-w32-c9ca0a32745a43eaa6cb6b7b460718de8ccb84f2.tar.gz busybox-w32-c9ca0a32745a43eaa6cb6b7b460718de8ccb84f2.tar.bz2 busybox-w32-c9ca0a32745a43eaa6cb6b7b460718de8ccb84f2.zip |
mount: recognize "dirsync" (closes bug 835)
mount: sanitize environ if called by non-root
*: adjust for slightly different sanitize routine
Diffstat (limited to 'miscutils')
-rw-r--r-- | miscutils/crontab.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/miscutils/crontab.c b/miscutils/crontab.c index bc7f56a22..6b6896469 100644 --- a/miscutils/crontab.c +++ b/miscutils/crontab.c | |||
@@ -97,7 +97,6 @@ int crontab_main(int argc, char **argv) | |||
97 | char *user_name; /* -u USER */ | 97 | char *user_name; /* -u USER */ |
98 | int fd; | 98 | int fd; |
99 | int opt_ler; | 99 | int opt_ler; |
100 | uid_t my_uid; | ||
101 | 100 | ||
102 | /* file [opts] Replace crontab from file | 101 | /* file [opts] Replace crontab from file |
103 | * - [opts] Replace crontab from stdin | 102 | * - [opts] Replace crontab from stdin |
@@ -118,25 +117,22 @@ int crontab_main(int argc, char **argv) | |||
118 | OPT_ler = OPT_l + OPT_e + OPT_r, | 117 | OPT_ler = OPT_l + OPT_e + OPT_r, |
119 | }; | 118 | }; |
120 | 119 | ||
121 | my_uid = getuid(); | ||
122 | |||
123 | opt_complementary = "?1:dr"; /* max one argument; -d implies -r */ | 120 | opt_complementary = "?1:dr"; /* max one argument; -d implies -r */ |
124 | opt_ler = getopt32(argv, "u:c:lerd", &user_name, &crontab_dir); | 121 | opt_ler = getopt32(argv, "u:c:lerd", &user_name, &crontab_dir); |
125 | argv += optind; | 122 | argv += optind; |
126 | 123 | ||
127 | if (my_uid != geteuid()) { /* run by non-root? */ | 124 | if (sanitize_env_if_suid()) { /* Clears dangerous stuff, sets PATH */ |
125 | /* run by non-root? */ | ||
128 | if (opt_ler & (OPT_u|OPT_c)) | 126 | if (opt_ler & (OPT_u|OPT_c)) |
129 | bb_error_msg_and_die("only root can use -c or -u"); | 127 | bb_error_msg_and_die("only root can use -c or -u"); |
130 | /* Clear dangerous stuff, set PATH */ | ||
131 | sanitize_env_for_suid(); | ||
132 | } | 128 | } |
133 | 129 | ||
134 | if (opt_ler & OPT_u) { | 130 | if (opt_ler & OPT_u) { |
135 | pas = getpwnam(user_name); | 131 | pas = getpwnam(user_name); |
136 | if (!pas) | 132 | if (!pas) |
137 | bb_error_msg_and_die("user %s is not known", user_name); | 133 | bb_error_msg_and_die("user %s is not known", user_name); |
138 | my_uid = pas->pw_uid; | ||
139 | } else { | 134 | } else { |
135 | uid_t my_uid = getuid(); | ||
140 | pas = getpwuid(my_uid); | 136 | pas = getpwuid(my_uid); |
141 | if (!pas) | 137 | if (!pas) |
142 | bb_perror_msg_and_die("no user record for UID %u", | 138 | bb_perror_msg_and_die("no user record for UID %u", |
@@ -144,7 +140,6 @@ int crontab_main(int argc, char **argv) | |||
144 | } | 140 | } |
145 | 141 | ||
146 | #define user_name DONT_USE_ME_BEYOND_THIS_POINT | 142 | #define user_name DONT_USE_ME_BEYOND_THIS_POINT |
147 | #define my_uid DONT_USE_ME_BEYOND_THIS_POINT | ||
148 | 143 | ||
149 | /* From now on, keep only -l, -e, -r bits */ | 144 | /* From now on, keep only -l, -e, -r bits */ |
150 | opt_ler &= OPT_ler; | 145 | opt_ler &= OPT_ler; |