mirror of https://github.com/sheumann/hush.git
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:
parent
7ab00a0de9
commit
5c23f2566c
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
|||
VERSION = 1
|
||||
PATCHLEVEL = 24
|
||||
SUBLEVEL = 0
|
||||
SUBLEVEL = 1
|
||||
EXTRAVERSION =
|
||||
NAME = Unnamed
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
" "\
|
||||
|
|
Loading…
Reference in New Issue