Make code a little more portable. In particular, fix sed scripts.

git-svn-id: https://shellinabox.googlecode.com/svn/trunk@56 0da03de8-d603-11dd-86c2-0f8696b7b6f9
This commit is contained in:
zodiac 2009-02-02 21:42:33 +00:00
parent 90d9d492b7
commit 75c09f9f83
6 changed files with 508 additions and 201 deletions

View file

@ -49,7 +49,7 @@ libhttp_la_SOURCES = libhttp/hashmap.c \
$(LIBHTTP_INCLUDES) \ $(LIBHTTP_INCLUDES) \
libhttp/libhttp.sym libhttp/libhttp.sym
libhttp_la_LDFLAGS = -export-symbols $(top_srcdir)/libhttp/libhttp.sym \ libhttp_la_LDFLAGS = -export-symbols $(top_srcdir)/libhttp/libhttp.sym \
-version 1:0:0 -ldl -version 1:0:0
shellinaboxd_SOURCES = shellinabox/shellinaboxd.c \ shellinaboxd_SOURCES = shellinabox/shellinaboxd.c \
shellinabox/externalfile.c \ shellinabox/externalfile.c \
@ -71,21 +71,24 @@ shellinaboxd_SOURCES = shellinabox/shellinaboxd.c \
shellinabox/beep.wav shellinabox/beep.wav
shellinaboxd_LDADD = liblogging.la \ shellinaboxd_LDADD = liblogging.la \
libhttp.la libhttp.la
shellinaboxd_LDFLAGS = -static -ldl shellinaboxd_LDFLAGS = -static
libtool: $(LIBTOOL_DEPS) libtool: $(LIBTOOL_DEPS)
$(SHELL) ./config.status --recheck $(SHELL) ./config.status --recheck
shellinaboxd.1: shellinabox/shellinaboxd.man.in shellinaboxd.1: shellinabox/shellinaboxd.man.in
@echo preprocess "$<" '>'"$@" @src="${top_srcdir}/shellinabox/shellinaboxd.man.in"; \
@if echo " $(DEFS)" | grep HAVE_OPENSSL_BIO_H | \ echo preprocess "$$src" '>'"$@"; \
if echo " $(DEFS)" | grep HAVE_OPENSSL_BIO_H | \
grep HAVE_OPENSSL_ERR_H | \ grep HAVE_OPENSSL_ERR_H | \
grep -q HAVE_OPENSSL_SSL_H; then \ grep -q HAVE_OPENSSL_SSL_H; then \
sed -e '/^#ifdef *HAVE_OPENSSL$$/d;/^#endif$$/d' "$<" >"$@"; \ sed -e '/^#ifdef *HAVE_OPENSSL$$/d' \
-e '/^#endif$$/d' "$$src" >"$@"; \
else \ else \
sed -e '/^#ifdef *HAVE_OPENSSL$$/,/^#endif$$/d' "$<" >"$@"; \ sed -e '/^#ifdef *HAVE_OPENSSL$$/,/^#endif$$/d' "$$src" >"$@"; \
fi fi
@man -Tps "./$@" >`echo "$@"|sed -e 's/\.[^.]*$$/.ps/'` || true @man -Tps "./$@" >`echo "$@" 2>/dev/null|sed -e 's/\.[^.]*$$/.ps/'` \
|| true
clean-local: clean-local:
-rm -rf shellinaboxd.1 \ -rm -rf shellinaboxd.1 \
@ -102,19 +105,23 @@ clean-local:
grep -q '^i[0-9]86$$' && \ grep -q '^i[0-9]86$$' && \
echo ' -O elf32-i386 -B i386' || \ echo ' -O elf32-i386 -B i386' || \
echo ' -O elf64-x86-64 -B i386:x86-64'` \ echo ' -O elf64-x86-64 -B i386:x86-64'` \
`echo "$<" | sed -e ' \ `echo "$<" | sed \
s/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /; \ -e 's/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /' \
t0; s/\([^.]*\)\([.].*\)/\1\2=\1 /; t0; s/.*/&=& /;:0; \ -e 't0' \
s/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/; \ -e 's/\([^.]*\)\([.].*\)/\1\2=\1 /' \
:1; \ -e 't0' \
s/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/; \ -e 's/.*/&=& /' \
t1; \ -e ':0' \
s/.\{53\}$$//; \ -e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
s/[/.]/_/g; \ -e ':1' \
s/^/--redefine-sym _binary_/; \ -e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
s/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/; \ -e 't1' \
s/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/; \ -e 's/.\{53\}$$//' \
s/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \ -e 's/[/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/' \
-e 's/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \
"$<" "$@" "$<" "$@"
.html.o: .html.o:
@ -124,19 +131,23 @@ clean-local:
grep -q '^i[0-9]86$$' && \ grep -q '^i[0-9]86$$' && \
echo ' -O elf32-i386 -B i386' || \ echo ' -O elf32-i386 -B i386' || \
echo ' -O elf64-x86-64 -B i386:x86-64'` \ echo ' -O elf64-x86-64 -B i386:x86-64'` \
`echo "$<" | sed -e ' \ `echo "$<" | sed \
s/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /; \ -e 's/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /' \
t0; s/\([^.]*\)\([.].*\)/\1\2=\1 /; t0; s/.*/&=& /;:0; \ -e 't0' \
s/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/; \ -e 's/\([^.]*\)\([.].*\)/\1\2=\1 /' \
:1; \ -e 't0' \
s/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/; \ -e 's/.*/&=& /' \
t1; \ -e ':0' \
s/.\{53\}$$//; \ -e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
s/[/.]/_/g; \ -e ':1' \
s/^/--redefine-sym _binary_/; \ -e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
s/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/; \ -e 't1' \
s/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/; \ -e 's/.\{53\}$$//' \
s/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \ -e 's/[/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/' \
-e 's/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \
"$<" "$@" "$<" "$@"
.ico.o: .ico.o:
@ -146,46 +157,55 @@ clean-local:
grep -q '^i[0-9]86$$' && \ grep -q '^i[0-9]86$$' && \
echo ' -O elf32-i386 -B i386' || \ echo ' -O elf32-i386 -B i386' || \
echo ' -O elf64-x86-64 -B i386:x86-64'` \ echo ' -O elf64-x86-64 -B i386:x86-64'` \
`echo "$<" | sed -e ' \ `echo "$<" | sed \
s/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /; \ -e 's/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /' \
t0; s/\([^.]*\)\([.].*\)/\1\2=\1 /; t0; s/.*/&=& /;:0; \ -e 't0' \
s/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/; \ -e 's/\([^.]*\)\([.].*\)/\1\2=\1 /' \
:1; \ -e 't0' \
s/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/; \ -e 's/.*/&=& /' \
t1; \ -e ':0' \
s/.\{53\}$$//; \ -e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
s/[/.]/_/g; \ -e ':1' \
s/^/--redefine-sym _binary_/; \ -e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
s/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/; \ -e 't1' \
s/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/; \ -e 's/.\{53\}$$//' \
s/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \ -e 's/[/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/' \
-e 's/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \
"$<" "$@" "$<" "$@"
.js.o: .js.o:
@$(ECHO) preprocess "$<" \| objcopy "$@" @$(ECHO) preprocess "$<" \| objcopy "$@"
@trap 'rm -f "$@.pre"' EXIT INT TERM QUIT; \ @trap 'rm -f "$@.pre"' EXIT INT TERM QUIT; \
sed -e "`sed -e 's/^#define *\([^ ]*\) *\(.*\)/\/^[^#]\/s\/\1\/\2 \\\\\/* \1 *\\\\\/\/g/; \ sed -e "`sed -e 's/^#define *\([^ ]*\) *\(.*\)/\/^[^#]\/s\/\1\/\2 \\\\\/* \1 *\\\\\/\/g/' \
t;d' "$<"` \ -e t \
;s/^#/\/\/ #/ \ -e d "$<"`" \
;s/VERSION/\"@VERSION@\"/g" "$<" >"$@.pre" && \ -e "s/^#/\/\/ #/" \
objcopy \ -e "s/VERSION/\"@VERSION@\"/g" "$<" >"$@.pre" && \
\
-I binary `echo $(host_cpu) | \ -I binary `echo $(host_cpu) | \
grep -q '^i[0-9]86$$' && \ grep -q '^i[0-9]86$$' && \
echo ' -O elf32-i386 -B i386' || \ echo ' -O elf32-i386 -B i386' || \
echo ' -O elf64-x86-64 -B i386:x86-64'` \ echo ' -O elf64-x86-64 -B i386:x86-64'` \
`echo "$@" | sed -e ' \ `echo "$@" | sed \
s/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /; \ -e 's/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /' \
t0; s/\([^.]*\)\([.].*\)/\1\2=\1 /; t0; s/.*/&=& /;:0; \ -e 't0' \
s/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/; \ -e 's/\([^.]*\)\([.].*\)/\1\2=\1 /' \
:1; \ -e 't0' \
s/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/; \ -e 's/.*/&=& /' \
t1; \ -e ':0' \
s/.\{53\}$$//; \ -e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
s/[/.]/_/g; \ -e ':1' \
s/^/--redefine-sym _binary_/; \ -e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
s/\([^=]*\)\(=[^ ]*\)/& \1_pre_end\2End/; \ -e 't1' \
s/\([^=]*\)\(=[^ ]*\)/& \1_pre_start\2Start/; \ -e 's/.\{53\}$$//' \
s/[^ ]*\([^=]*\)=[^ ]*/-N\1_pre_size/'` \ -e 's/[/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_pre_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_pre_start\2Start/' \
-e 's/[^ ]*\([^=]*\)=[^ ]*/-N\1_pre_size/'` \
"$@.pre" "$@" "$@.pre" "$@"
.wav.o: .wav.o:
@ -195,18 +215,22 @@ objcopy \
grep -q '^i[0-9]86$$' && \ grep -q '^i[0-9]86$$' && \
echo ' -O elf32-i386 -B i386' || \ echo ' -O elf32-i386 -B i386' || \
echo ' -O elf64-x86-64 -B i386:x86-64'` \ echo ' -O elf64-x86-64 -B i386:x86-64'` \
`echo "$<" | sed -e ' \ `echo "$<" | sed \
s/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /; \ -e 's/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /' \
t0; s/\([^.]*\)\([.].*\)/\1\2=\1 /; t0; s/.*/&=& /;:0; \ -e 't0' \
s/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/; \ -e 's/\([^.]*\)\([.].*\)/\1\2=\1 /' \
:1; \ -e 't0' \
s/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/; \ -e 's/.*/&=& /' \
t1; \ -e ':0' \
s/.\{53\}$$//; \ -e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
s/[/.]/_/g; \ -e ':1' \
s/^/--redefine-sym _binary_/; \ -e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
s/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/; \ -e 't1' \
s/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/; \ -e 's/.\{53\}$$//' \
s/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \ -e 's/[/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/' \
-e 's/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \
"$<" "$@" "$<" "$@"

View file

@ -287,7 +287,7 @@ libhttp_la_SOURCES = libhttp/hashmap.c \
libhttp/libhttp.sym libhttp/libhttp.sym
libhttp_la_LDFLAGS = -export-symbols $(top_srcdir)/libhttp/libhttp.sym \ libhttp_la_LDFLAGS = -export-symbols $(top_srcdir)/libhttp/libhttp.sym \
-version 1:0:0 -ldl -version 1:0:0
shellinaboxd_SOURCES = shellinabox/shellinaboxd.c \ shellinaboxd_SOURCES = shellinabox/shellinaboxd.c \
shellinabox/externalfile.c \ shellinabox/externalfile.c \
@ -311,7 +311,7 @@ shellinaboxd_SOURCES = shellinabox/shellinaboxd.c \
shellinaboxd_LDADD = liblogging.la \ shellinaboxd_LDADD = liblogging.la \
libhttp.la libhttp.la
shellinaboxd_LDFLAGS = -static -ldl shellinaboxd_LDFLAGS = -static
all: all-am all: all-am
.SUFFIXES: .SUFFIXES:
@ -968,15 +968,18 @@ libtool: $(LIBTOOL_DEPS)
$(SHELL) ./config.status --recheck $(SHELL) ./config.status --recheck
shellinaboxd.1: shellinabox/shellinaboxd.man.in shellinaboxd.1: shellinabox/shellinaboxd.man.in
@echo preprocess "$<" '>'"$@" @src="${top_srcdir}/shellinabox/shellinaboxd.man.in"; \
@if echo " $(DEFS)" | grep HAVE_OPENSSL_BIO_H | \ echo preprocess "$$src" '>'"$@"; \
if echo " $(DEFS)" | grep HAVE_OPENSSL_BIO_H | \
grep HAVE_OPENSSL_ERR_H | \ grep HAVE_OPENSSL_ERR_H | \
grep -q HAVE_OPENSSL_SSL_H; then \ grep -q HAVE_OPENSSL_SSL_H; then \
sed -e '/^#ifdef *HAVE_OPENSSL$$/d;/^#endif$$/d' "$<" >"$@"; \ sed -e '/^#ifdef *HAVE_OPENSSL$$/d' \
-e '/^#endif$$/d' "$$src" >"$@"; \
else \ else \
sed -e '/^#ifdef *HAVE_OPENSSL$$/,/^#endif$$/d' "$<" >"$@"; \ sed -e '/^#ifdef *HAVE_OPENSSL$$/,/^#endif$$/d' "$$src" >"$@"; \
fi fi
@man -Tps "./$@" >`echo "$@"|sed -e 's/\.[^.]*$$/.ps/'` || true @man -Tps "./$@" >`echo "$@" 2>/dev/null|sed -e 's/\.[^.]*$$/.ps/'` \
|| true
clean-local: clean-local:
-rm -rf shellinaboxd.1 \ -rm -rf shellinaboxd.1 \
@ -993,19 +996,23 @@ clean-local:
grep -q '^i[0-9]86$$' && \ grep -q '^i[0-9]86$$' && \
echo ' -O elf32-i386 -B i386' || \ echo ' -O elf32-i386 -B i386' || \
echo ' -O elf64-x86-64 -B i386:x86-64'` \ echo ' -O elf64-x86-64 -B i386:x86-64'` \
`echo "$<" | sed -e ' \ `echo "$<" | sed \
s/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /; \ -e 's/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /' \
t0; s/\([^.]*\)\([.].*\)/\1\2=\1 /; t0; s/.*/&=& /;:0; \ -e 't0' \
s/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/; \ -e 's/\([^.]*\)\([.].*\)/\1\2=\1 /' \
:1; \ -e 't0' \
s/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/; \ -e 's/.*/&=& /' \
t1; \ -e ':0' \
s/.\{53\}$$//; \ -e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
s/[/.]/_/g; \ -e ':1' \
s/^/--redefine-sym _binary_/; \ -e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
s/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/; \ -e 't1' \
s/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/; \ -e 's/.\{53\}$$//' \
s/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \ -e 's/[/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/' \
-e 's/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \
"$<" "$@" "$<" "$@"
.html.o: .html.o:
@ -1015,19 +1022,23 @@ clean-local:
grep -q '^i[0-9]86$$' && \ grep -q '^i[0-9]86$$' && \
echo ' -O elf32-i386 -B i386' || \ echo ' -O elf32-i386 -B i386' || \
echo ' -O elf64-x86-64 -B i386:x86-64'` \ echo ' -O elf64-x86-64 -B i386:x86-64'` \
`echo "$<" | sed -e ' \ `echo "$<" | sed \
s/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /; \ -e 's/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /' \
t0; s/\([^.]*\)\([.].*\)/\1\2=\1 /; t0; s/.*/&=& /;:0; \ -e 't0' \
s/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/; \ -e 's/\([^.]*\)\([.].*\)/\1\2=\1 /' \
:1; \ -e 't0' \
s/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/; \ -e 's/.*/&=& /' \
t1; \ -e ':0' \
s/.\{53\}$$//; \ -e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
s/[/.]/_/g; \ -e ':1' \
s/^/--redefine-sym _binary_/; \ -e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
s/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/; \ -e 't1' \
s/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/; \ -e 's/.\{53\}$$//' \
s/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \ -e 's/[/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/' \
-e 's/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \
"$<" "$@" "$<" "$@"
.ico.o: .ico.o:
@ -1037,46 +1048,55 @@ clean-local:
grep -q '^i[0-9]86$$' && \ grep -q '^i[0-9]86$$' && \
echo ' -O elf32-i386 -B i386' || \ echo ' -O elf32-i386 -B i386' || \
echo ' -O elf64-x86-64 -B i386:x86-64'` \ echo ' -O elf64-x86-64 -B i386:x86-64'` \
`echo "$<" | sed -e ' \ `echo "$<" | sed \
s/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /; \ -e 's/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /' \
t0; s/\([^.]*\)\([.].*\)/\1\2=\1 /; t0; s/.*/&=& /;:0; \ -e 't0' \
s/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/; \ -e 's/\([^.]*\)\([.].*\)/\1\2=\1 /' \
:1; \ -e 't0' \
s/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/; \ -e 's/.*/&=& /' \
t1; \ -e ':0' \
s/.\{53\}$$//; \ -e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
s/[/.]/_/g; \ -e ':1' \
s/^/--redefine-sym _binary_/; \ -e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
s/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/; \ -e 't1' \
s/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/; \ -e 's/.\{53\}$$//' \
s/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \ -e 's/[/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/' \
-e 's/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \
"$<" "$@" "$<" "$@"
.js.o: .js.o:
@$(ECHO) preprocess "$<" \| objcopy "$@" @$(ECHO) preprocess "$<" \| objcopy "$@"
@trap 'rm -f "$@.pre"' EXIT INT TERM QUIT; \ @trap 'rm -f "$@.pre"' EXIT INT TERM QUIT; \
sed -e "`sed -e 's/^#define *\([^ ]*\) *\(.*\)/\/^[^#]\/s\/\1\/\2 \\\\\/* \1 *\\\\\/\/g/; \ sed -e "`sed -e 's/^#define *\([^ ]*\) *\(.*\)/\/^[^#]\/s\/\1\/\2 \\\\\/* \1 *\\\\\/\/g/' \
t;d' "$<"` \ -e t \
;s/^#/\/\/ #/ \ -e d "$<"`" \
;s/VERSION/\"@VERSION@\"/g" "$<" >"$@.pre" && \ -e "s/^#/\/\/ #/" \
objcopy \ -e "s/VERSION/\"@VERSION@\"/g" "$<" >"$@.pre" && \
\
-I binary `echo $(host_cpu) | \ -I binary `echo $(host_cpu) | \
grep -q '^i[0-9]86$$' && \ grep -q '^i[0-9]86$$' && \
echo ' -O elf32-i386 -B i386' || \ echo ' -O elf32-i386 -B i386' || \
echo ' -O elf64-x86-64 -B i386:x86-64'` \ echo ' -O elf64-x86-64 -B i386:x86-64'` \
`echo "$@" | sed -e ' \ `echo "$@" | sed \
s/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /; \ -e 's/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /' \
t0; s/\([^.]*\)\([.].*\)/\1\2=\1 /; t0; s/.*/&=& /;:0; \ -e 't0' \
s/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/; \ -e 's/\([^.]*\)\([.].*\)/\1\2=\1 /' \
:1; \ -e 't0' \
s/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/; \ -e 's/.*/&=& /' \
t1; \ -e ':0' \
s/.\{53\}$$//; \ -e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
s/[/.]/_/g; \ -e ':1' \
s/^/--redefine-sym _binary_/; \ -e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
s/\([^=]*\)\(=[^ ]*\)/& \1_pre_end\2End/; \ -e 't1' \
s/\([^=]*\)\(=[^ ]*\)/& \1_pre_start\2Start/; \ -e 's/.\{53\}$$//' \
s/[^ ]*\([^=]*\)=[^ ]*/-N\1_pre_size/'` \ -e 's/[/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_pre_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_pre_start\2Start/' \
-e 's/[^ ]*\([^=]*\)=[^ ]*/-N\1_pre_size/'` \
"$@.pre" "$@" "$@.pre" "$@"
.wav.o: .wav.o:
@ -1086,19 +1106,23 @@ objcopy \
grep -q '^i[0-9]86$$' && \ grep -q '^i[0-9]86$$' && \
echo ' -O elf32-i386 -B i386' || \ echo ' -O elf32-i386 -B i386' || \
echo ' -O elf64-x86-64 -B i386:x86-64'` \ echo ' -O elf64-x86-64 -B i386:x86-64'` \
`echo "$<" | sed -e ' \ `echo "$<" | sed \
s/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /; \ -e 's/\(.*\/\)\([^.]*\)\([.].*\)/\1\2\3=\2 /' \
t0; s/\([^.]*\)\([.].*\)/\1\2=\1 /; t0; s/.*/&=& /;:0; \ -e 't0' \
s/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/; \ -e 's/\([^.]*\)\([.].*\)/\1\2=\1 /' \
:1; \ -e 't0' \
s/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/; \ -e 's/.*/&=& /' \
t1; \ -e ':0' \
s/.\{53\}$$//; \ -e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
s/[/.]/_/g; \ -e ':1' \
s/^/--redefine-sym _binary_/; \ -e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
s/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/; \ -e 't1' \
s/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/; \ -e 's/.\{53\}$$//' \
s/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \ -e 's/[/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/' \
-e 's/[^ ]*\([^=]*\)=[^ ]*/-N\1_size/'` \
"$<" "$@" "$<" "$@"
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.

213
configure vendored
View file

@ -20142,6 +20142,219 @@ fi
done done
for ac_func in dlopen
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
#define $ac_func innocuous_$ac_func
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func (); below.
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
<limits.h> exists even on freestanding compilers. */
#ifdef __STDC__
# include <limits.h>
#else
# include <assert.h>
#endif
#undef $ac_func
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined __stub_$ac_func || defined __stub___$ac_func
choke me
#endif
int
main ()
{
return $ac_func ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_link") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext &&
$as_test_x conftest$ac_exeext; then
eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
eval "$as_ac_var=no"
fi
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
fi
ac_res=`eval echo '${'$as_ac_var'}'`
{ echo "$as_me:$LINENO: result: $ac_res" >&5
echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
else
{ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
if test "${ac_cv_lib_dl_dlopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldl $LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char dlopen ();
int
main ()
{
return dlopen ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_link") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext &&
$as_test_x conftest$ac_exeext; then
ac_cv_lib_dl_dlopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_lib_dl_dlopen=no
fi
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
if test $ac_cv_lib_dl_dlopen = yes; then
LIBS="-ldl $LIBS"
fi
fi
done
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE
#endif
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <stdlib.h>
int
main ()
{
ptsname_r(0, 0, 0);
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_link") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext &&
$as_test_x conftest$ac_exeext; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_PTSNAME_R 1
_ACEOF
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files Makefile"
cat >confcache <<\_ACEOF cat >confcache <<\_ACEOF

View file

@ -10,5 +10,17 @@ AC_PROG_GCC_TRADITIONAL
AC_CHECK_HEADERS([openssl/bio.h openssl/err.h openssl/ssl.h pthread.h \ AC_CHECK_HEADERS([openssl/bio.h openssl/err.h openssl/ssl.h pthread.h \
security/pam_appl.h security/pam_misc.h sys/prctrl.h \ security/pam_appl.h security/pam_misc.h sys/prctrl.h \
utmpx.h]) utmpx.h])
AC_CHECK_FUNCS(dlopen, [],
[AC_CHECK_LIB(dl, dlopen, LIBS="-ldl $LIBS")])
AC_TRY_LINK([#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE
#endif
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <stdlib.h>],
[ptsname_r(0, 0, 0);],
[AC_DEFINE(HAVE_PTSNAME_R, 1,
Define to 1 if you have a re-entrant version of ptsname)])
AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([Makefile])
AC_OUTPUT AC_OUTPUT

View file

@ -366,11 +366,35 @@ void closeAllFds(int *exceptFds, int num) {
} }
} }
#ifndef HAVE_PTSNAME_R
static int ptsname_r(int fd, char *buf, size_t buflen) {
// It is unfortunate that ptsname_r is not universally available.
// For the time being, this is not a big problem, as ShellInABox is
// single-threaded (and so is the launcher process). But if this
// code gets re-used in a multi-threaded application, that could
// lead to problems.
if (buf == NULL) {
errno = EINVAL;
return -1;
}
char *p = ptsname(fd);
if (p == NULL) {
return -1;
}
if (buflen < strlen(p) + 1) {
errno = ERANGE;
return -1;
}
strcpy(buf, p);
return 0;
}
#endif
static int forkPty(int *pty, int useLogin, struct Utmp **utmp, static int forkPty(int *pty, int useLogin, struct Utmp **utmp,
const char *peerName) { const char *peerName) {
int slave; int slave;
char ptyPath[PATH_MAX]; char ptyPath[PATH_MAX];
if ((*pty = getpt()) < 0 || if ((*pty = posix_openpt(O_RDWR|O_NOCTTY)) < 0 ||
grantpt(*pty) < 0 || grantpt(*pty) < 0 ||
unlockpt(*pty) < 0 || unlockpt(*pty) < 0 ||
ptsname_r(*pty, ptyPath, sizeof(ptyPath)) < 0 || ptsname_r(*pty, ptyPath, sizeof(ptyPath)) < 0 ||
@ -438,7 +462,9 @@ static const struct passwd *getPWEnt(uid_t uid) {
struct passwd pwbuf, *pw; struct passwd pwbuf, *pw;
char *buf; char *buf;
int len = sysconf(_SC_GETPW_R_SIZE_MAX); int len = sysconf(_SC_GETPW_R_SIZE_MAX);
check(len > 0); if (len <= 0) {
len = 4096;
}
check(buf = malloc(len)); check(buf = malloc(len));
check(!getpwuid_r(uid, &pwbuf, buf, len, &pw) && pw); check(!getpwuid_r(uid, &pwbuf, buf, len, &pw) && pw);
struct passwd *passwd; struct passwd *passwd;

View file

@ -156,7 +156,9 @@ const char *getUserName(uid_t uid) {
struct passwd pwbuf, *pw; struct passwd pwbuf, *pw;
char *buf; char *buf;
int len = sysconf(_SC_GETPW_R_SIZE_MAX); int len = sysconf(_SC_GETPW_R_SIZE_MAX);
check(len > 0); if (len <= 0) {
len = 4096;
}
check(buf = malloc(len)); check(buf = malloc(len));
char *user; char *user;
if (getpwuid_r(uid, &pwbuf, buf, len, &pw) || !pw) { if (getpwuid_r(uid, &pwbuf, buf, len, &pw) || !pw) {
@ -173,7 +175,9 @@ uid_t getUserId(const char *name) {
struct passwd pwbuf, *pw; struct passwd pwbuf, *pw;
char *buf; char *buf;
int len = sysconf(_SC_GETPW_R_SIZE_MAX); int len = sysconf(_SC_GETPW_R_SIZE_MAX);
check(len > 0); if (len <= 0) {
len = 4096;
}
check(buf = malloc(len)); check(buf = malloc(len));
if (getpwnam_r(name, &pwbuf, buf, len, &pw) || !pw) { if (getpwnam_r(name, &pwbuf, buf, len, &pw) || !pw) {
fatal("Cannot look up user id \"%s\"", name); fatal("Cannot look up user id \"%s\"", name);
@ -204,7 +208,9 @@ const char *getGroupName(gid_t gid) {
struct group grbuf, *gr; struct group grbuf, *gr;
char *buf; char *buf;
int len = sysconf(_SC_GETGR_R_SIZE_MAX); int len = sysconf(_SC_GETGR_R_SIZE_MAX);
check(len > 0); if (len <= 0) {
len = 4096;
}
check(buf = malloc(len)); check(buf = malloc(len));
char *group; char *group;
if (getgrgid_r(gid, &grbuf, buf, len, &gr) || !gr) { if (getgrgid_r(gid, &grbuf, buf, len, &gr) || !gr) {
@ -221,7 +227,9 @@ gid_t getGroupId(const char *name) {
struct group grbuf, *gr; struct group grbuf, *gr;
char *buf; char *buf;
int len = sysconf(_SC_GETGR_R_SIZE_MAX); int len = sysconf(_SC_GETGR_R_SIZE_MAX);
check(len > 0); if (len <= 0) {
len = 4096;
}
check(buf = malloc(len)); check(buf = malloc(len));
if (getgrnam_r(name, &grbuf, buf, len, &gr) || !gr) { if (getgrnam_r(name, &grbuf, buf, len, &gr) || !gr) {
fatal("Cannot look up group \"%s\"", name); fatal("Cannot look up group \"%s\"", name);