diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-09-29 23:55:30 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-09-29 23:55:30 +0000 |
commit | 43f0a0bb3a178794ac9fa3f5010db680c5d1b018 (patch) | |
tree | 7f3c2fae714d8260c100fbad6627c7ae4e8c43fe | |
parent | e755e827f7c8ecb21787a4369d7afdeda54d112b (diff) | |
download | busybox-w32-1_7_2.tar.gz busybox-w32-1_7_2.tar.bz2 busybox-w32-1_7_2.zip |
apply all post-1.7.1 patches, set version to 1.7.21_7_2
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | coreutils/install.c | 122 | ||||
-rw-r--r-- | findutils/find.c | 6 | ||||
-rw-r--r-- | libbb/lineedit.c | 22 | ||||
-rw-r--r-- | loginutils/login.c | 40 | ||||
-rw-r--r-- | networking/httpd.c | 9 | ||||
-rw-r--r-- | runit/runsvdir.c | 2 | ||||
-rw-r--r-- | selinux/chcon.c | 2 | ||||
-rw-r--r-- | selinux/setfiles.c | 2 | ||||
-rw-r--r-- | util-linux/fdisk.c | 8 |
10 files changed, 136 insertions, 79 deletions
@@ -1,6 +1,6 @@ | |||
1 | VERSION = 1 | 1 | VERSION = 1 |
2 | PATCHLEVEL = 7 | 2 | PATCHLEVEL = 7 |
3 | SUBLEVEL = 1 | 3 | SUBLEVEL = 2 |
4 | EXTRAVERSION = | 4 | EXTRAVERSION = |
5 | NAME = Unnamed | 5 | NAME = Unnamed |
6 | 6 | ||
diff --git a/coreutils/install.c b/coreutils/install.c index cf62a0022..516208474 100644 --- a/coreutils/install.c +++ b/coreutils/install.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | 1 | /* vi: set sw=4 ts=4: */ |
2 | /* | 2 | /* |
3 | * Copyright (C) 2003 by Glenn McGrath <bug1@iinet.net.au> | 3 | * Copyright (C) 2003 by Glenn McGrath |
4 | * SELinux support: by Yuichi Nakamura <ynakam@hitachisoft.jp> | 4 | * SELinux support: by Yuichi Nakamura <ynakam@hitachisoft.jp> |
5 | * | 5 | * |
6 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. | 6 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. |
@@ -23,6 +23,8 @@ static const char install_longopts[] ALIGN1 = | |||
23 | "group\0" No_argument "g" | 23 | "group\0" No_argument "g" |
24 | "mode\0" No_argument "m" | 24 | "mode\0" No_argument "m" |
25 | "owner\0" No_argument "o" | 25 | "owner\0" No_argument "o" |
26 | /* autofs build insists of using -b --suffix=.orig */ | ||
27 | /* TODO? (short option for --suffix is -S) */ | ||
26 | #if ENABLE_SELINUX | 28 | #if ENABLE_SELINUX |
27 | "context\0" Required_argument "Z" | 29 | "context\0" Required_argument "Z" |
28 | "preserve_context\0" No_argument "\xff" | 30 | "preserve_context\0" No_argument "\xff" |
@@ -33,8 +35,6 @@ static const char install_longopts[] ALIGN1 = | |||
33 | 35 | ||
34 | 36 | ||
35 | #if ENABLE_SELINUX | 37 | #if ENABLE_SELINUX |
36 | static bool use_default_selinux_context = 1; | ||
37 | |||
38 | static void setdefaultfilecon(const char *path) | 38 | static void setdefaultfilecon(const char *path) |
39 | { | 39 | { |
40 | struct stat s; | 40 | struct stat s; |
@@ -73,25 +73,31 @@ int install_main(int argc, char **argv) | |||
73 | mode_t mode; | 73 | mode_t mode; |
74 | uid_t uid; | 74 | uid_t uid; |
75 | gid_t gid; | 75 | gid_t gid; |
76 | char *arg, *last; | ||
76 | const char *gid_str; | 77 | const char *gid_str; |
77 | const char *uid_str; | 78 | const char *uid_str; |
78 | const char *mode_str; | 79 | const char *mode_str; |
79 | int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE; | 80 | int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE; |
80 | int ret = EXIT_SUCCESS, flags, i, isdir; | 81 | int flags; |
82 | int ret = EXIT_SUCCESS; | ||
83 | int isdir; | ||
81 | #if ENABLE_SELINUX | 84 | #if ENABLE_SELINUX |
82 | security_context_t scontext; | 85 | security_context_t scontext; |
86 | bool use_default_selinux_context = 1; | ||
83 | #endif | 87 | #endif |
84 | enum { | 88 | enum { |
85 | OPT_CMD = 0x1, | 89 | OPT_c = 1 << 0, |
86 | OPT_DIRECTORY = 0x2, | 90 | OPT_v = 1 << 1, |
87 | OPT_PRESERVE_TIME = 0x4, | 91 | OPT_b = 1 << 2, |
88 | OPT_STRIP = 0x8, | 92 | OPT_DIRECTORY = 1 << 3, |
89 | OPT_GROUP = 0x10, | 93 | OPT_PRESERVE_TIME = 1 << 4, |
90 | OPT_MODE = 0x20, | 94 | OPT_STRIP = 1 << 5, |
91 | OPT_OWNER = 0x40, | 95 | OPT_GROUP = 1 << 6, |
96 | OPT_MODE = 1 << 7, | ||
97 | OPT_OWNER = 1 << 8, | ||
92 | #if ENABLE_SELINUX | 98 | #if ENABLE_SELINUX |
93 | OPT_SET_SECURITY_CONTEXT = 0x80, | 99 | OPT_SET_SECURITY_CONTEXT = 1 << 9, |
94 | OPT_PRESERVE_SECURITY_CONTEXT = 0x100, | 100 | OPT_PRESERVE_SECURITY_CONTEXT = 1 << 10, |
95 | #endif | 101 | #endif |
96 | }; | 102 | }; |
97 | 103 | ||
@@ -100,21 +106,24 @@ int install_main(int argc, char **argv) | |||
100 | #endif | 106 | #endif |
101 | opt_complementary = "s--d:d--s" USE_SELINUX(":Z--\xff:\xff--Z"); | 107 | opt_complementary = "s--d:d--s" USE_SELINUX(":Z--\xff:\xff--Z"); |
102 | /* -c exists for backwards compatibility, it's needed */ | 108 | /* -c exists for backwards compatibility, it's needed */ |
103 | 109 | /* -v is ignored ("print name of each created directory") */ | |
104 | flags = getopt32(argv, "cdpsg:m:o:" USE_SELINUX("Z:"), | 110 | /* -b is ignored ("make a backup of each existing destination file") */ |
111 | flags = getopt32(argv, "cvb" "dpsg:m:o:" USE_SELINUX("Z:"), | ||
105 | &gid_str, &mode_str, &uid_str USE_SELINUX(, &scontext)); | 112 | &gid_str, &mode_str, &uid_str USE_SELINUX(, &scontext)); |
113 | argc -= optind; | ||
114 | argv += optind; | ||
106 | 115 | ||
107 | #if ENABLE_SELINUX | 116 | #if ENABLE_SELINUX |
108 | if (flags & OPT_PRESERVE_SECURITY_CONTEXT) { | 117 | if (flags & (OPT_PRESERVE_SECURITY_CONTEXT|OPT_SET_SECURITY_CONTEXT)) { |
109 | use_default_selinux_context = 0; | ||
110 | copy_flags |= FILEUTILS_PRESERVE_SECURITY_CONTEXT; | ||
111 | selinux_or_die(); | ||
112 | } | ||
113 | if (flags & OPT_SET_SECURITY_CONTEXT) { | ||
114 | selinux_or_die(); | 118 | selinux_or_die(); |
115 | setfscreatecon_or_die(scontext); | ||
116 | use_default_selinux_context = 0; | 119 | use_default_selinux_context = 0; |
117 | copy_flags |= FILEUTILS_SET_SECURITY_CONTEXT; | 120 | if (flags & OPT_PRESERVE_SECURITY_CONTEXT) { |
121 | copy_flags |= FILEUTILS_PRESERVE_SECURITY_CONTEXT; | ||
122 | } | ||
123 | if (flags & OPT_SET_SECURITY_CONTEXT) { | ||
124 | setfscreatecon_or_die(scontext); | ||
125 | copy_flags |= FILEUTILS_SET_SECURITY_CONTEXT; | ||
126 | } | ||
118 | } | 127 | } |
119 | #endif | 128 | #endif |
120 | 129 | ||
@@ -123,58 +132,63 @@ int install_main(int argc, char **argv) | |||
123 | copy_flags |= FILEUTILS_PRESERVE_STATUS; | 132 | copy_flags |= FILEUTILS_PRESERVE_STATUS; |
124 | } | 133 | } |
125 | mode = 0666; | 134 | mode = 0666; |
126 | if (flags & OPT_MODE) bb_parse_mode(mode_str, &mode); | 135 | if (flags & OPT_MODE) |
136 | bb_parse_mode(mode_str, &mode); | ||
127 | uid = (flags & OPT_OWNER) ? get_ug_id(uid_str, xuname2uid) : getuid(); | 137 | uid = (flags & OPT_OWNER) ? get_ug_id(uid_str, xuname2uid) : getuid(); |
128 | gid = (flags & OPT_GROUP) ? get_ug_id(gid_str, xgroup2gid) : getgid(); | 138 | gid = (flags & OPT_GROUP) ? get_ug_id(gid_str, xgroup2gid) : getgid(); |
129 | if (flags & (OPT_OWNER|OPT_GROUP)) umask(0); | 139 | if (flags & (OPT_OWNER|OPT_GROUP)) |
140 | umask(0); | ||
130 | 141 | ||
131 | /* Create directories | 142 | /* Create directories |
132 | * don't use bb_make_directory() as it can't change uid or gid | 143 | * don't use bb_make_directory() as it can't change uid or gid |
133 | * perhaps bb_make_directory() should be improved. | 144 | * perhaps bb_make_directory() should be improved. |
134 | */ | 145 | */ |
135 | if (flags & OPT_DIRECTORY) { | 146 | if (flags & OPT_DIRECTORY) { |
136 | for (argv += optind; *argv; argv++) { | 147 | while ((arg = *argv++) != NULL) { |
137 | char *old_argv_ptr = *argv + 1; | 148 | char *slash = arg; |
138 | char *argv_ptr; | 149 | while (1) { |
139 | do { | 150 | slash = strchr(slash + 1, '/'); |
140 | argv_ptr = strchr(old_argv_ptr, '/'); | 151 | if (slash) |
141 | old_argv_ptr = argv_ptr; | 152 | *slash = '\0'; |
142 | if (argv_ptr) { | 153 | if (mkdir(arg, mode | 0111) == -1) { |
143 | *argv_ptr = '\0'; | ||
144 | old_argv_ptr++; | ||
145 | } | ||
146 | if (mkdir(*argv, mode | 0111) == -1) { | ||
147 | if (errno != EEXIST) { | 154 | if (errno != EEXIST) { |
148 | bb_perror_msg("cannot create %s", *argv); | 155 | bb_perror_msg("cannot create %s", arg); |
149 | ret = EXIT_FAILURE; | 156 | ret = EXIT_FAILURE; |
150 | break; | 157 | break; |
151 | } | 158 | } |
152 | } | 159 | } /* dir was created, chown? */ |
153 | if ((flags & (OPT_OWNER|OPT_GROUP)) | 160 | else if ((flags & (OPT_OWNER|OPT_GROUP)) |
154 | && lchown(*argv, uid, gid) == -1 | 161 | && lchown(arg, uid, gid) == -1 |
155 | ) { | 162 | ) { |
156 | bb_perror_msg("cannot change ownership of %s", *argv); | 163 | bb_perror_msg("cannot change ownership of %s", arg); |
157 | ret = EXIT_FAILURE; | 164 | ret = EXIT_FAILURE; |
158 | break; | 165 | break; |
159 | } | 166 | } |
160 | if (argv_ptr) { | 167 | if (!slash) |
161 | *argv_ptr = '/'; | 168 | break; |
162 | } | 169 | *slash = '/'; |
163 | } while (old_argv_ptr); | 170 | } |
164 | } | 171 | } |
165 | return ret; | 172 | return ret; |
166 | } | 173 | } |
167 | 174 | ||
168 | /* coreutils install resolves link in this case, don't use lstat */ | 175 | if (argc < 2) |
169 | isdir = stat(argv[argc - 1], &statbuf) < 0 ? 0 : S_ISDIR(statbuf.st_mode); | 176 | bb_show_usage(); |
170 | 177 | ||
171 | for (i = optind; i < argc - 1; i++) { | 178 | last = argv[argc - 1]; |
172 | char *dest; | 179 | argv[argc - 1] = NULL; |
180 | /* coreutils install resolves link in this case, don't use lstat */ | ||
181 | isdir = stat(last, &statbuf) < 0 ? 0 : S_ISDIR(statbuf.st_mode); | ||
173 | 182 | ||
174 | dest = argv[argc - 1]; | 183 | while ((arg = *argv++) != NULL) { |
184 | char *dest = last; | ||
175 | if (isdir) | 185 | if (isdir) |
176 | dest = concat_path_file(argv[argc - 1], basename(argv[i])); | 186 | dest = concat_path_file(last, basename(arg)); |
177 | ret |= copy_file(argv[i], dest, copy_flags); | 187 | if (copy_file(arg, dest, copy_flags)) { |
188 | /* copy is not made */ | ||
189 | ret = EXIT_FAILURE; | ||
190 | goto next; | ||
191 | } | ||
178 | 192 | ||
179 | /* Set the file mode */ | 193 | /* Set the file mode */ |
180 | if ((flags & OPT_MODE) && chmod(dest, mode) == -1) { | 194 | if ((flags & OPT_MODE) && chmod(dest, mode) == -1) { |
@@ -202,7 +216,9 @@ int install_main(int argc, char **argv) | |||
202 | ret = EXIT_FAILURE; | 216 | ret = EXIT_FAILURE; |
203 | } | 217 | } |
204 | } | 218 | } |
205 | if (ENABLE_FEATURE_CLEAN_UP && isdir) free(dest); | 219 | next: |
220 | if (ENABLE_FEATURE_CLEAN_UP && isdir) | ||
221 | free(dest); | ||
206 | } | 222 | } |
207 | 223 | ||
208 | return ret; | 224 | return ret; |
diff --git a/findutils/find.c b/findutils/find.c index 21584681b..f3167a083 100644 --- a/findutils/find.c +++ b/findutils/find.c | |||
@@ -383,9 +383,11 @@ static int fileAction(const char *fileName, struct stat *statbuf, void *userData | |||
383 | #if ENABLE_FEATURE_FIND_XDEV | 383 | #if ENABLE_FEATURE_FIND_XDEV |
384 | if (S_ISDIR(statbuf->st_mode) && xdev_count) { | 384 | if (S_ISDIR(statbuf->st_mode) && xdev_count) { |
385 | for (i = 0; i < xdev_count; i++) { | 385 | for (i = 0; i < xdev_count; i++) { |
386 | if (xdev_dev[i] != statbuf->st_dev) | 386 | if (xdev_dev[i] == statbuf->st_dev) |
387 | return SKIP; | 387 | break; |
388 | } | 388 | } |
389 | if (i == xdev_count) | ||
390 | return SKIP; | ||
389 | } | 391 | } |
390 | #endif | 392 | #endif |
391 | i = exec_actions(actions, fileName, statbuf); | 393 | i = exec_actions(actions, fileName, statbuf); |
diff --git a/libbb/lineedit.c b/libbb/lineedit.c index 62f8949d6..f2972e422 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c | |||
@@ -81,8 +81,9 @@ static int num_ok_lines = 1; | |||
81 | #endif | 81 | #endif |
82 | 82 | ||
83 | #if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR | 83 | #if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR |
84 | static char *user_buf = (char*)""; | 84 | static const char null_str[] = ""; |
85 | static char *home_pwd_buf = (char*)""; | 85 | static char *user_buf; |
86 | static char *home_pwd_buf = (char*)null_str; | ||
86 | #endif | 87 | #endif |
87 | 88 | ||
88 | /* Put 'command_ps[cursor]', cursor++. | 89 | /* Put 'command_ps[cursor]', cursor++. |
@@ -311,7 +312,7 @@ static void username_tab_completion(char *ud, char *with_shash_flg) | |||
311 | 312 | ||
312 | if (with_shash_flg) { /* "~/..." or "~user/..." */ | 313 | if (with_shash_flg) { /* "~/..." or "~user/..." */ |
313 | char *sav_ud = ud - 1; | 314 | char *sav_ud = ud - 1; |
314 | char *home = 0; | 315 | char *home = NULL; |
315 | char *temp; | 316 | char *temp; |
316 | 317 | ||
317 | if (*ud == '/') { /* "~/..." */ | 318 | if (*ud == '/') { /* "~/..." */ |
@@ -1119,7 +1120,7 @@ static void parse_prompt(const char *prmt_ptr) | |||
1119 | switch (c) { | 1120 | switch (c) { |
1120 | #if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR | 1121 | #if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR |
1121 | case 'u': | 1122 | case 'u': |
1122 | pbuf = user_buf; | 1123 | pbuf = user_buf ? user_buf : (char*)""; |
1123 | break; | 1124 | break; |
1124 | #endif | 1125 | #endif |
1125 | case 'h': | 1126 | case 'h': |
@@ -1143,7 +1144,7 @@ static void parse_prompt(const char *prmt_ptr) | |||
1143 | case 'w': | 1144 | case 'w': |
1144 | pbuf = pwd_buf; | 1145 | pbuf = pwd_buf; |
1145 | l = strlen(home_pwd_buf); | 1146 | l = strlen(home_pwd_buf); |
1146 | if (home_pwd_buf[0] != 0 | 1147 | if (l != 0 |
1147 | && strncmp(home_pwd_buf, pbuf, l) == 0 | 1148 | && strncmp(home_pwd_buf, pbuf, l) == 0 |
1148 | && (pbuf[l]=='/' || pbuf[l]=='\0') | 1149 | && (pbuf[l]=='/' || pbuf[l]=='\0') |
1149 | && strlen(pwd_buf+l)<PATH_MAX | 1150 | && strlen(pwd_buf+l)<PATH_MAX |
@@ -1253,6 +1254,11 @@ static void win_changed(int nsig) | |||
1253 | #undef CTRL | 1254 | #undef CTRL |
1254 | #define CTRL(a) ((a) & ~0x40) | 1255 | #define CTRL(a) ((a) & ~0x40) |
1255 | 1256 | ||
1257 | /* Returns: | ||
1258 | * -1 on read errors or EOF, or on bare Ctrl-D. | ||
1259 | * 0 on ctrl-C, | ||
1260 | * >0 length of input string, including terminating '\n' | ||
1261 | */ | ||
1256 | int read_line_input(const char* prompt, char* command, int maxsize, line_input_t *st) | 1262 | int read_line_input(const char* prompt, char* command, int maxsize, line_input_t *st) |
1257 | { | 1263 | { |
1258 | int lastWasTab = FALSE; | 1264 | int lastWasTab = FALSE; |
@@ -1305,8 +1311,14 @@ int read_line_input(const char* prompt, char* command, int maxsize, line_input_t | |||
1305 | 1311 | ||
1306 | entry = getpwuid(geteuid()); | 1312 | entry = getpwuid(geteuid()); |
1307 | if (entry) { | 1313 | if (entry) { |
1314 | /* If we enter read_line_input for the Nth time, | ||
1315 | * they may be already allocated! Need to free. */ | ||
1316 | free(user_buf); | ||
1317 | if (home_pwd_buf != null_str) | ||
1318 | free(home_pwd_buf); | ||
1308 | user_buf = xstrdup(entry->pw_name); | 1319 | user_buf = xstrdup(entry->pw_name); |
1309 | home_pwd_buf = xstrdup(entry->pw_dir); | 1320 | home_pwd_buf = xstrdup(entry->pw_dir); |
1321 | /* They are not freed on exit (too small to bother) */ | ||
1310 | } | 1322 | } |
1311 | } | 1323 | } |
1312 | #endif | 1324 | #endif |
diff --git a/loginutils/login.c b/loginutils/login.c index 3b4cf2af8..7f8907543 100644 --- a/loginutils/login.c +++ b/loginutils/login.c | |||
@@ -307,18 +307,26 @@ int login_main(int argc, char **argv) | |||
307 | goto pam_auth_failed; | 307 | goto pam_auth_failed; |
308 | } | 308 | } |
309 | pamret = pam_authenticate(pamh, 0); | 309 | pamret = pam_authenticate(pamh, 0); |
310 | if (pamret == PAM_SUCCESS) { | 310 | if (pamret != PAM_SUCCESS) { |
311 | char *pamuser; | 311 | failed_msg = "pam_authenticate"; |
312 | /* check that the account is healthy. */ | 312 | goto pam_auth_failed; |
313 | pamret = pam_acct_mgmt(pamh, 0); | 313 | /* TODO: or just "goto auth_failed" |
314 | if (pamret != PAM_SUCCESS) { | 314 | * since user seems to enter wrong password |
315 | failed_msg = "account setup"; | 315 | * (in this case pamret == 7) |
316 | goto pam_auth_failed; | 316 | */ |
317 | } | 317 | } |
318 | /* read user back */ | 318 | /* check that the account is healthy */ |
319 | pamret = pam_acct_mgmt(pamh, 0); | ||
320 | if (pamret != PAM_SUCCESS) { | ||
321 | failed_msg = "account setup"; | ||
322 | goto pam_auth_failed; | ||
323 | } | ||
324 | /* read user back */ | ||
325 | { | ||
326 | const char *pamuser; | ||
319 | /* gcc: "dereferencing type-punned pointer breaks aliasing rules..." | 327 | /* gcc: "dereferencing type-punned pointer breaks aliasing rules..." |
320 | * thus we use double cast */ | 328 | * thus we cast to (void*) */ |
321 | if (pam_get_item(pamh, PAM_USER, (const void **)(void*)&pamuser) != PAM_SUCCESS) { | 329 | if (pam_get_item(pamh, PAM_USER, (void*)&pamuser) != PAM_SUCCESS) { |
322 | failed_msg = "pam_get_item(USER)"; | 330 | failed_msg = "pam_get_item(USER)"; |
323 | goto pam_auth_failed; | 331 | goto pam_auth_failed; |
324 | } | 332 | } |
@@ -331,7 +339,7 @@ int login_main(int argc, char **argv) | |||
331 | break; | 339 | break; |
332 | goto auth_failed; | 340 | goto auth_failed; |
333 | pam_auth_failed: | 341 | pam_auth_failed: |
334 | bb_error_msg("%s failed: %s", failed_msg, pam_strerror(pamh, pamret)); | 342 | bb_error_msg("%s failed: %s (%d)", failed_msg, pam_strerror(pamh, pamret), pamret); |
335 | safe_strncpy(username, "UNKNOWN", sizeof(username)); | 343 | safe_strncpy(username, "UNKNOWN", sizeof(username)); |
336 | #else /* not PAM */ | 344 | #else /* not PAM */ |
337 | pw = getpwnam(username); | 345 | pw = getpwnam(username); |
@@ -360,6 +368,7 @@ int login_main(int argc, char **argv) | |||
360 | auth_failed: | 368 | auth_failed: |
361 | opt &= ~LOGIN_OPT_f; | 369 | opt &= ~LOGIN_OPT_f; |
362 | bb_do_delay(FAIL_DELAY); | 370 | bb_do_delay(FAIL_DELAY); |
371 | /* TODO: doesn't sound like correct English phrase to me */ | ||
363 | puts("Login incorrect"); | 372 | puts("Login incorrect"); |
364 | if (++count == 3) { | 373 | if (++count == 3) { |
365 | syslog(LOG_WARNING, "invalid password for '%s'%s", | 374 | syslog(LOG_WARNING, "invalid password for '%s'%s", |
@@ -423,7 +432,9 @@ int login_main(int argc, char **argv) | |||
423 | tmp = pw->pw_shell; | 432 | tmp = pw->pw_shell; |
424 | if (!tmp || !*tmp) | 433 | if (!tmp || !*tmp) |
425 | tmp = DEFAULT_SHELL; | 434 | tmp = DEFAULT_SHELL; |
435 | /* setup_environment params: shell, loginshell, changeenv, pw */ | ||
426 | setup_environment(tmp, 1, !(opt & LOGIN_OPT_p), pw); | 436 | setup_environment(tmp, 1, !(opt & LOGIN_OPT_p), pw); |
437 | /* FIXME: login shell = 1 -> 3rd parameter is ignored! */ | ||
427 | 438 | ||
428 | motd(); | 439 | motd(); |
429 | 440 | ||
@@ -454,7 +465,8 @@ int login_main(int argc, char **argv) | |||
454 | * should it leave SIGINT etc enabled or disabled? */ | 465 | * should it leave SIGINT etc enabled or disabled? */ |
455 | signal(SIGINT, SIG_DFL); | 466 | signal(SIGINT, SIG_DFL); |
456 | 467 | ||
457 | run_shell(tmp, 1, 0, 0); /* exec the shell finally */ | 468 | /* Exec login shell with no additional parameters */ |
469 | run_shell(tmp, 1, NULL, NULL); | ||
458 | 470 | ||
459 | return EXIT_FAILURE; | 471 | /* return EXIT_FAILURE; - not reached */ |
460 | } | 472 | } |
diff --git a/networking/httpd.c b/networking/httpd.c index a888c2424..e67e6bd64 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
@@ -598,7 +598,7 @@ static void parse_conf(const char *path, int flag) | |||
598 | ++p; /* so keep last character */ | 598 | ++p; /* so keep last character */ |
599 | } | 599 | } |
600 | *p = '\0'; | 600 | *p = '\0'; |
601 | sprintf(p0, "%s:%s", p0, c); | 601 | sprintf(p0 + strlen(p0), ":%s", c); |
602 | } | 602 | } |
603 | #endif | 603 | #endif |
604 | 604 | ||
@@ -1602,6 +1602,13 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) | |||
1602 | if (fromAddr->sa.sa_family == AF_INET) { | 1602 | if (fromAddr->sa.sa_family == AF_INET) { |
1603 | rmt_ip = ntohl(fromAddr->sin.sin_addr.s_addr); | 1603 | rmt_ip = ntohl(fromAddr->sin.sin_addr.s_addr); |
1604 | } | 1604 | } |
1605 | #if ENABLE_FEATURE_IPV6 | ||
1606 | if (fromAddr->sa.sa_family == AF_INET6 | ||
1607 | && fromAddr->sin6.sin6_addr.s6_addr32[0] == 0 | ||
1608 | && fromAddr->sin6.sin6_addr.s6_addr32[1] == 0 | ||
1609 | && ntohl(fromAddr->sin6.sin6_addr.s6_addr32[2]) == 0xffff) | ||
1610 | rmt_ip = ntohl(fromAddr->sin6.sin6_addr.s6_addr32[3]); | ||
1611 | #endif | ||
1605 | if (ENABLE_FEATURE_HTTPD_CGI || DEBUG || verbose) { | 1612 | if (ENABLE_FEATURE_HTTPD_CGI || DEBUG || verbose) { |
1606 | rmt_ip_str = xmalloc_sockaddr2dotted(&fromAddr->sa); | 1613 | rmt_ip_str = xmalloc_sockaddr2dotted(&fromAddr->sa); |
1607 | } | 1614 | } |
diff --git a/runit/runsvdir.c b/runit/runsvdir.c index 38da7f8ae..94397bc36 100644 --- a/runit/runsvdir.c +++ b/runit/runsvdir.c | |||
@@ -300,10 +300,10 @@ int runsvdir_main(int argc, char **argv) | |||
300 | stamplog = now + 900; | 300 | stamplog = now + 900; |
301 | } | 301 | } |
302 | } | 302 | } |
303 | deadline = now + (check ? 1 : 5); | ||
304 | 303 | ||
305 | pfd[0].revents = 0; | 304 | pfd[0].revents = 0; |
306 | sig_block(SIGCHLD); | 305 | sig_block(SIGCHLD); |
306 | deadline = (check ? 1 : 5); | ||
307 | if (rplog) | 307 | if (rplog) |
308 | poll(pfd, 1, deadline*1000); | 308 | poll(pfd, 1, deadline*1000); |
309 | else | 309 | else |
diff --git a/selinux/chcon.c b/selinux/chcon.c index f0590b5b0..3609880cb 100644 --- a/selinux/chcon.c +++ b/selinux/chcon.c | |||
@@ -136,7 +136,7 @@ int chcon_main(int argc, char **argv) | |||
136 | ":\xff--urtl:u--\xff:r--\xff:t--\xff:l--\xff" | 136 | ":\xff--urtl:u--\xff:r--\xff:t--\xff:l--\xff" |
137 | #endif | 137 | #endif |
138 | ":f--v:v--f"; /* 'verbose' and 'quiet' are exclusive */ | 138 | ":f--v:v--f"; /* 'verbose' and 'quiet' are exclusive */ |
139 | getopt32(argv, "Rchf:u:r:t:l:v", | 139 | getopt32(argv, "Rchfu:r:t:l:v", |
140 | &user, &role, &type, &range, &reference_file); | 140 | &user, &role, &type, &range, &reference_file); |
141 | argv += optind; | 141 | argv += optind; |
142 | 142 | ||
diff --git a/selinux/setfiles.c b/selinux/setfiles.c index 174d4ce60..c3775cd90 100644 --- a/selinux/setfiles.c +++ b/selinux/setfiles.c | |||
@@ -189,7 +189,7 @@ static int match(const char *name, struct stat *sb, char **con) | |||
189 | file_sep = strrchr(tmp_path, '/'); | 189 | file_sep = strrchr(tmp_path, '/'); |
190 | if (file_sep == tmp_path) { | 190 | if (file_sep == tmp_path) { |
191 | file_sep++; | 191 | file_sep++; |
192 | p[0] = '\0'; | 192 | path[0] = '\0'; |
193 | p = path; | 193 | p = path; |
194 | } else if (file_sep) { | 194 | } else if (file_sep) { |
195 | *file_sep++ = '\0'; | 195 | *file_sep++ = '\0'; |
diff --git a/util-linux/fdisk.c b/util-linux/fdisk.c index 2a91a8f2f..7981abc9f 100644 --- a/util-linux/fdisk.c +++ b/util-linux/fdisk.c | |||
@@ -638,8 +638,16 @@ static void | |||
638 | seek_sector(ullong secno) | 638 | seek_sector(ullong secno) |
639 | { | 639 | { |
640 | secno *= sector_size; | 640 | secno *= sector_size; |
641 | #if ENABLE_FDISK_SUPPORT_LARGE_DISKS | ||
641 | if (lseek64(fd, (off64_t)secno, SEEK_SET) == (off64_t) -1) | 642 | if (lseek64(fd, (off64_t)secno, SEEK_SET) == (off64_t) -1) |
642 | fdisk_fatal(unable_to_seek); | 643 | fdisk_fatal(unable_to_seek); |
644 | #else | ||
645 | if (secno > MAXINT(off_t) | ||
646 | || lseek(fd, (off_t)secno, SEEK_SET) == (off_t) -1 | ||
647 | ) { | ||
648 | fdisk_fatal(unable_to_seek); | ||
649 | } | ||
650 | #endif | ||
643 | } | 651 | } |
644 | 652 | ||
645 | #if ENABLE_FEATURE_FDISK_WRITABLE | 653 | #if ENABLE_FEATURE_FDISK_WRITABLE |