Apply post-1.24.0 patches, bump version to 1.24.1

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2015-10-24 02:29:00 +02:00
parent 7ab00a0de9
commit 5c23f2566c
6 changed files with 122 additions and 37 deletions

View File

@ -1,6 +1,6 @@
VERSION = 1
PATCHLEVEL = 24
SUBLEVEL = 0
SUBLEVEL = 1
EXTRAVERSION =
NAME = Unnamed

View File

@ -106,7 +106,9 @@ static struct sort_key {
static char *get_key(char *str, struct sort_key *key, int flags)
{
int start = 0, end = 0, len, j;
int start = start; /* for compiler */
int end;
int len, j;
unsigned i;
/* Special case whole string, so we don't have to make a copy */
@ -123,12 +125,15 @@ static char *get_key(char *str, struct sort_key *key, int flags)
end = len;
/* Loop through fields */
else {
unsigned char ch = 0;
end = 0;
for (i = 1; i < key->range[2*j] + j; i++) {
if (key_separator) {
/* Skip body of key and separator */
while (str[end]) {
if (str[end++] == key_separator)
while ((ch = str[end]) != '\0') {
end++;
if (ch == key_separator)
break;
}
} else {
@ -136,7 +141,7 @@ static char *get_key(char *str, struct sort_key *key, int flags)
while (isspace(str[end]))
end++;
/* Skip body of key */
while (str[end]) {
while (str[end] != '\0') {
if (isspace(str[end]))
break;
end++;
@ -144,8 +149,13 @@ static char *get_key(char *str, struct sort_key *key, int flags)
}
}
/* Remove last delim: "abc:def:" => "abc:def" */
if (key_separator && j && end != 0)
if (j && ch) {
//if (str[end-1] != key_separator)
// bb_error_msg(_and_die("BUG! "
// "str[start:%d,end:%d]:'%.*s'",
// start, end, (int)(end-start), &str[start]);
end--;
}
}
if (!j) start = end;
}

View File

@ -1223,11 +1223,26 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv)
#endif
argv += optind;
if (argv[0]) {
const char *basedir = argv[0];
#if !BB_MMU
G.root_fd = xopen("/", O_RDONLY | O_DIRECTORY);
close_on_exec_on(G.root_fd);
#endif
xchroot(argv[0]);
if (chroot(basedir) == 0)
basedir = "/";
#if !BB_MMU
else {
close(G.root_fd);
G.root_fd = -1;
}
#endif
/*
* If chroot failed, assume that we aren't root,
* and at least chdir to the specified DIR
* (older versions were dying with error message).
* If chroot worked, move current dir to new "/":
*/
xchdir(basedir);
}
#if ENABLE_FEATURE_FTP_AUTHENTICATION

View File

@ -967,19 +967,30 @@ static void send_headers(int responseNum)
}
#endif
if (responseNum == HTTP_MOVED_TEMPORARILY) {
len += sprintf(iobuf + len, "Location: %s/%s%s\r\n",
/* Responding to "GET /dir" with
* "HTTP/1.0 302 Found" "Location: /dir/"
* - IOW, asking them to repeat with a slash.
* Here, overflow IS possible, can't use sprintf:
* mkdir test
* python -c 'print("get /test?" + ("x" * 8192))' | busybox httpd -i -h .
*/
len += snprintf(iobuf + len, IOBUF_SIZE-3 - len,
"Location: %s/%s%s\r\n",
found_moved_temporarily,
(g_query ? "?" : ""),
(g_query ? g_query : ""));
if (len > IOBUF_SIZE-3)
len = IOBUF_SIZE-3;
}
#if ENABLE_FEATURE_HTTPD_ERROR_PAGES
if (error_page && access(error_page, R_OK) == 0) {
strcat(iobuf, "\r\n");
len += 2;
if (DEBUG)
iobuf[len++] = '\r';
iobuf[len++] = '\n';
if (DEBUG) {
iobuf[len] = '\0';
fprintf(stderr, "headers: '%s'\n", iobuf);
}
full_write(STDOUT_FILENO, iobuf, len);
if (DEBUG)
fprintf(stderr, "writing error page: '%s'\n", error_page);
@ -1021,8 +1032,10 @@ static void send_headers(int responseNum)
responseNum, responseString,
responseNum, responseString, infoString);
}
if (DEBUG)
if (DEBUG) {
iobuf[len] = '\0';
fprintf(stderr, "headers: '%s'\n", iobuf);
}
if (full_write(STDOUT_FILENO, iobuf, len) != len) {
if (verbose > 1)
bb_perror_msg("error");

View File

@ -47,18 +47,22 @@ try() {
check_cc() {
local tempname="$(mktemp)"
local r
echo "int main(int argc,char**argv){return argv?argc:0;}" >"$tempname".c
# Can use "-o /dev/null", but older gcc tend to *unlink it* on failure! :(
# "-xc": C language. "/dev/null" is an empty source file.
if $CC $CPPFLAGS $CFLAGS $1 -shared -xc /dev/null -o "$tempname".o >/dev/null 2>&1; then
echo "$1";
else
echo "$2";
fi
rm -f "$tempname" "$tempname".o
# Was using "-xc /dev/null", but we need a valid C program.
# "eval" may be needed if CFLAGS can contain
# '... -D"BB_VER=KBUILD_STR(1.N.M)" ...'
# and we need shell to process quotes!
$CC $CFLAGS $1 "$tempname".c -o "$tempname" >/dev/null 2>&1
r=$?
rm -f "$tempname" "$tempname".c "$tempname".o
return $r
}
check_libc_is_glibc() {
local tempname="$(mktemp)"
local r
echo "\
#include <stdlib.h>
/* Apparently uclibc defines __GLIBC__ (compat trick?). Oh well. */
@ -66,12 +70,10 @@ check_libc_is_glibc() {
syntax error here
#endif
" >"$tempname".c
if $CC $CPPFLAGS $CFLAGS "$tempname".c -c -o "$tempname".o >/dev/null 2>&1; then
echo "$2";
else
echo "$1";
fi
rm -f "$tempname" "$tempname".[co]
! $CC $CFLAGS "$tempname".c -c -o "$tempname".o >/dev/null 2>&1
r=$?
rm -f "$tempname" "$tempname".c "$tempname".o
return $r
}
EXE="$1"
@ -83,32 +85,41 @@ A_FILES="$6"
LDLIBS="$7"
# The --sort-section option is not supported by older versions of ld
SORT_SECTION=`check_cc "-Wl,--sort-section,alignment" ""`
SORT_SECTION="-Wl,--sort-section,alignment"
if ! check_cc "-Wl,--sort-section,alignment"; then
echo "Your linker does not support --sort-section,alignment"
SORT_SECTION=""
fi
START_GROUP="-Wl,--start-group"
END_GROUP="-Wl,--end-group"
INFO_OPTS="-Wl,--warn-common -Wl,-Map,$EXE.map -Wl,--verbose"
# gold may not support --sort-common (yet)
SORT_COMMON=`check_cc "-Wl,--sort-common" ""`
SORT_COMMON="-Wl,--sort-common"
if ! check_cc "-Wl,--sort-common"; then
echo "Your linker does not support --sort-common"
SORT_COMMON=""
fi
# Static linking against glibc produces buggy executables
# (glibc does not cope well with ld --gc-sections).
# See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
# Note that glibc is unsuitable for static linking anyway.
# We are removing -Wl,--gc-sections from link command line.
GC_SECTIONS=`(
. ./.config
if test x"$CONFIG_STATIC" = x"y"; then
check_libc_is_glibc "" "-Wl,--gc-sections"
else
echo "-Wl,--gc-sections"
GC_SECTIONS="-Wl,--gc-sections"
if (. ./.config && test x"$CONFIG_STATIC" = x"y") then
if check_libc_is_glibc; then
echo "Static linking against glibc, can't use --gc-sections"
# GC_SECTIONS=""
fi
fi
)`
# The --gc-sections option is not supported by older versions of ld
if test -n "$GC_SECTIONS"; then
GC_SECTIONS=`check_cc "$GC_SECTIONS" ""`
if ! check_cc "$GC_SECTIONS"; then
echo "Your linker does not support $GC_SECTIONS"
GC_SECTIONS=""
fi
fi
# Sanitize lib list (dups, extra spaces etc)

View File

@ -106,6 +106,42 @@ a/a:a
a:b
" ""
testing "glibc build sort" "sort -t. -k 1,1 -k 2n,2n -k 3 input" "\
GLIBC_2.1
GLIBC_2.1.1
GLIBC_2.2
GLIBC_2.2.1
GLIBC_2.10
GLIBC_2.20
GLIBC_2.21
" "\
GLIBC_2.21
GLIBC_2.1.1
GLIBC_2.2.1
GLIBC_2.2
GLIBC_2.20
GLIBC_2.10
GLIBC_2.1
" ""
testing "glibc build sort unique" "sort -u -t. -k 1,1 -k 2n,2n -k 3 input" "\
GLIBC_2.1
GLIBC_2.1.1
GLIBC_2.2
GLIBC_2.2.1
GLIBC_2.10
GLIBC_2.20
GLIBC_2.21
" "\
GLIBC_2.10
GLIBC_2.2.1
GLIBC_2.1.1
GLIBC_2.20
GLIBC_2.2
GLIBC_2.1
GLIBC_2.21
" ""
testing "sort -u should consider field only when discarding" "sort -u -k2 input" "\
a c
" "\