Release redbean v3.0.0

This commit is contained in:
Justine Tunney 2024-08-17 06:45:35 -07:00
parent eb6e96f036
commit ca2c30c977
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
5 changed files with 36 additions and 40 deletions

View file

@ -9,8 +9,8 @@ NET_TURFWAR_OBJS = \
$(NET_TURFWAR_SRCS:%.c=o/$(MODE)/%.o)
NET_TURFWAR_COMS = \
$(NET_TURFWAR_SRCS:%.c=o/$(MODE)/%.com) \
o/$(MODE)/net/turfwar/turfbean.com
$(NET_TURFWAR_SRCS:%.c=o/$(MODE)/%) \
o/$(MODE)/net/turfwar/turfbean
NET_TURFWAR_BINS = \
$(NET_TURFWAR_COMS) \
@ -48,7 +48,7 @@ o/$(MODE)/net/turfwar/turfwar.pkg: \
$(NET_TURFWAR_OBJS) \
$(foreach x,$(NET_TURFWAR_DIRECTDEPS),$($(x)_A).pkg)
o/$(MODE)/net/turfwar/%.com.dbg: \
o/$(MODE)/net/turfwar/%.dbg: \
$(NET_TURFWAR_DEPS) \
o/$(MODE)/net/turfwar/%.o \
o/$(MODE)/net/turfwar/turfwar.pkg \
@ -56,7 +56,7 @@ o/$(MODE)/net/turfwar/%.com.dbg: \
$(APE_NO_MODIFY_SELF)
@$(APELINK)
o/$(MODE)/net/turfwar/turfbean.com.dbg: \
o/$(MODE)/net/turfwar/turfbean.dbg: \
$(TOOL_NET_DEPS) \
o/$(MODE)/tool/net/redbean.o \
$(TOOL_NET_REDBEAN_LUA_MODULES) \

View file

@ -892,9 +892,7 @@ void *HttpWorker(void *arg) {
// get client address from frontend
if (HasHeader(kHttpXForwardedFor)) {
if (!IsLoopbackIp(clientip) && //
!IsPrivateIp(clientip) && //
!IsCloudflareIp(clientip)) {
if (!IsLoopbackIp(clientip) && !IsPrivateIp(clientip)) {
LOG("Got X-Forwarded-For from untrusted IPv4 client address "
"%hhu.%hhu.%hhu.%hhu\n",
clientip >> 24, clientip >> 16, clientip >> 8, clientip);

View file

@ -263,7 +263,7 @@ Last-Modified: .*\r\n\
Accept-Ranges: bytes\r\n\
X-Content-Type-Options: nosniff\r\n\
Date: .*\r\n\
Server: redbean/2.2.0\r\n\
Server: redbean/.*\r\n\
Content-Length: 34\r\n\
\r\n\
J\n\

View file

@ -1,6 +1,6 @@
SYNOPSIS
redbean [-?BVabdfghjkmsuvz] [-p PORT] [-D DIR] [-- SCRIPTARGS...]
redbean.com [-?BVabdfghjkmsuvz] [-p PORT] [-D DIR] [-- SCRIPTARGS...]
DESCRIPTION
@ -137,15 +137,15 @@ USAGE
This executable is also a ZIP file that contains static assets.
You can run redbean interactively in your terminal as follows:
./redbean -vvvmbag # starts server verbosely
./redbean.com -vvvmbag # starts server verbosely
open http://127.0.0.1:8080/ # shows zip listing page
CTRL-C # 1x: graceful shutdown
CTRL-C # 2x: forceful shutdown
You can override the default listing page by adding:
zip redbean index.lua # lua server pages take priority
zip redbean index.html # default page for directory
zip redbean.com index.lua # lua server pages take priority
zip redbean.com index.html # default page for directory
The listing page only applies to the root directory. However the
default index page applies to subdirectories too. In order for it
@ -160,7 +160,7 @@ USAGE
--no-parent \
--no-if-modified-since \
http://a.example/index.html
zip -r redbean a.example/ # default page for directory
zip -r redbean.com a.example/ # default page for directory
redbean normalizes the trailing slash for you automatically:
@ -198,18 +198,18 @@ USAGE
by default, embedded as a bas64 data uri. You can override the
custom page for various errors by adding files to the zip root.
zip redbean 404.html # custom not found page
zip redbean.com 404.html # custom not found page
Audio video content should not be compressed in your ZIP files.
Uncompressed assets enable browsers to send Range HTTP request.
On the other hand compressed assets are best for gzip encoding.
zip redbean index.html # adds file
zip -0 redbean video.mp4 # adds without compression
zip redbean.com index.html # adds file
zip -0 redbean.com video.mp4 # adds without compression
You can have redbean run as a daemon by doing the following:
sudo ./redbean -vvdp80 -p443 -L redbean.log -P redbean.pid
sudo ./redbean.com -vvdp80 -p443 -L redbean.log -P redbean.pid
kill -TERM $(cat redbean.pid) # 1x: graceful shutdown
kill -TERM $(cat redbean.pid) # 2x: forceful shutdown
@ -230,14 +230,7 @@ USAGE
run on six different operating systems. To do that, it needs to
extract a 4kb loader program to ${TMPDIR:-${HOME:-.}}/.ape that'll
map your redbean into memory. It does however check to see if `ape`
is on the system path beforehand. You can also "assimilate" any
redbean into the platform-local executable format by running:
$ file redbean
redbean: DOS/MBR boot sector
$ ./redbean --assimilate
$ file redbean
redbean: ELF 64-bit LSB executable
is on the system path beforehand.
────────────────────────────────────────────────────────────────────────────────
SECURITY
@ -406,12 +399,14 @@ REPL
encoded in its preferred executable format. You can assimilate your
redbean into the local format using the following commands:
$ file redbean
redbean: DOS/MBR boot sector
$ ./redbean --assimilate
$ file redbean
redbean: ELF 64-bit LSB executable
$ sudo cp redbean /usr/bin/redbean
$ file redbean.com
redbean.com: DOS/MBR boot sector
$ curl -o assimilate https://cosmo.zip/pub/cosmos/bin/assimilate
$ chmod +x assimilate
$ ./assimilate ./redbean.com
$ file redbean.com
redbean.com: ELF 64-bit LSB executable
$ sudo cp redbean.com /usr/bin/redbean
By following the above steps, redbean can be installed systemwide for
multiple user accounts. It's also possible to chmod the binary to have
@ -461,7 +456,7 @@ GLOBALS
Then your `/.init.lua` file will have the `arg` array like:
arg[-1] = '/usr/bin/redbean'
arg[-1] = '/usr/bin/redbean
arg[ 0] = '/zip/.init.lua'
arg[ 1] = 'arg1'
arg[ 2] = 'arg2'
@ -469,11 +464,11 @@ GLOBALS
If you launch redbean in interpreter mode (rather than web
server) mode, then an invocation like this:
./redbean -i script.lua arg1 arg2
./redbean.com -i script.lua arg1 arg2
Would have an `arg` array like this:
arg[-1] = './redbean'
arg[-1] = './redbean.com'
arg[ 0] = 'script.lua'
arg[ 1] = 'arg1'
arg[ 2] = 'arg2'
@ -3689,7 +3684,6 @@ UNIX MODULE
- `CLOCK_MONOTONIC_RAW`: is actually monotonic but needs Linux 2.6.28+
- `CLOCK_PROCESS_CPUTIME_ID`: linux and bsd
- `CLOCK_THREAD_CPUTIME_ID`: linux and bsd
- `CLOCK_MONOTONIC_COARSE`: linux, freebsd
- `CLOCK_PROF`: linux and netbsd
- `CLOCK_BOOTTIME`: linux and openbsd
- `CLOCK_REALTIME_ALARM`: linux-only
@ -4477,9 +4471,8 @@ UNIX MODULE
If the executable in question needs a loader, then you will need
"rpath prot_exec" too. With APE, security is strongest when you
assimilate your binaries beforehand, using the --assimilate flag,
or the o//tool/build/assimilate program. On OpenBSD this is
mandatory.
assimilate your binaries beforehand using the assimilate program.
On OpenBSD this is mandatory.
prot_exec

View file

@ -71,6 +71,7 @@
#include "libc/stdio/hex.internal.h"
#include "libc/stdio/rand.h"
#include "libc/stdio/stdio.h"
#include "libc/str/locale.h"
#include "libc/str/slice.h"
#include "libc/str/str.h"
#include "libc/str/strwidth.h"
@ -169,7 +170,8 @@ __static_yoink("blink_xnu_aarch64"); // is apple silicon
#define REDBEAN "redbean"
#endif
#define VERSION 0x020200
// XXYYZZ
#define VERSION 0x030000
#define HASH_LOAD_FACTOR /* 1. / */ 4
#define READ(F, P, N) readv(F, &(struct iovec){P, N}, 1)
#define WRITE(F, P, N) writev(F, &(struct iovec){P, N}, 1)
@ -2545,7 +2547,7 @@ static char *CommitOutput(char *p) {
static char *ServeDefaultErrorPage(char *p, unsigned code, const char *reason,
const char *details) {
p = AppendContentType(p, "text/html; charset=ISO-8859-1");
p = AppendContentType(p, "text/html; charset=UTF-8");
reason = FreeLater(EscapeHtml(reason, -1, 0));
appends(&cpm.outbuf, "\
<!doctype html>\r\n\
@ -7428,6 +7430,9 @@ int main(int argc, char *argv[]) {
ShowCrashReports();
#endif
// just in case
setlocale(LC_ALL, "C.UTF-8");
LoadZipArgs(&argc, &argv);
RedBean(argc, argv);