mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-07 06:53:33 +00:00
Redbean report write lock failure (#450)
This change updates redbean to report a non-writable path when using StoreAsset, instead of crashing the worker.
This commit is contained in:
parent
b4e9a77e74
commit
283729dfe0
1 changed files with 15 additions and 11 deletions
|
@ -870,7 +870,7 @@ static inline void GetRemoteAddr(uint32_t *ip, uint16_t *port) {
|
|||
(IsPrivateIp(*ip) || IsLoopbackIp(*ip))) {
|
||||
if (ParseForwarded(HeaderData(kHttpXForwardedFor),
|
||||
HeaderLength(kHttpXForwardedFor), ip, port) == -1)
|
||||
WARNF("invalid X-Forwarded-For value: %`'.*s",
|
||||
WARNF("(srvr) invalid X-Forwarded-For value: %`'.*s",
|
||||
HeaderLength(kHttpXForwardedFor), HeaderData(kHttpXForwardedFor));
|
||||
}
|
||||
}
|
||||
|
@ -1024,13 +1024,13 @@ static bool IsServerFd(int fd) {
|
|||
static void ChangeUser(void) {
|
||||
if (changegid) {
|
||||
if (setgid(changegid)) {
|
||||
FATALF("setgid() failed: %m");
|
||||
FATALF("(cfg) setgid() failed: %m");
|
||||
}
|
||||
}
|
||||
// order matters
|
||||
if (changeuid) {
|
||||
if (setuid(changeuid)) {
|
||||
FATALF("setuid() failed: %m");
|
||||
FATALF("(cfg) setuid() failed: %m");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1235,7 +1235,7 @@ static void WaitAll(void) {
|
|||
if (killed) {
|
||||
killed = false;
|
||||
terminated = false;
|
||||
WARNF("(srvr) redbean shall terminate harder");
|
||||
WARNF("(srvr) server shall terminate harder");
|
||||
KillGroup();
|
||||
}
|
||||
errno = 0;
|
||||
|
@ -3403,7 +3403,7 @@ static void StoreAsset(char *path, size_t pathlen, char *data, size_t datalen,
|
|||
if (IsOpenbsd() || IsNetbsd() || IsWindows()) {
|
||||
DIEF("(cfg) StoreAsset() not available on Windows/NetBSD/OpenBSD yet");
|
||||
}
|
||||
INFOF("Storing asset %`'s", path);
|
||||
INFOF("(srvr) storing asset %`'s", path);
|
||||
disk = gflags = iattrs = 0;
|
||||
if (_isutf8(path, pathlen)) gflags |= kZipGflagUtf8;
|
||||
if (_istext(data, datalen)) iattrs |= kZipIattrText;
|
||||
|
@ -3429,7 +3429,11 @@ static void StoreAsset(char *path, size_t pathlen, char *data, size_t datalen,
|
|||
}
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
CHECK_NE(-1, fcntl(zfd, F_SETLKW, &(struct flock){F_WRLCK}));
|
||||
if (-1 == fcntl(zfd, F_SETLKW, &(struct flock){F_WRLCK})) {
|
||||
WARNF("can't place write lock on file descriptor %d: %s",
|
||||
zfd, strerror(errno));
|
||||
return;
|
||||
}
|
||||
OpenZip(false);
|
||||
now = nowl();
|
||||
a = GetAssetZip(path, pathlen);
|
||||
|
@ -5468,7 +5472,7 @@ Content-Length: 0\r\n\
|
|||
|
||||
static void EnterMeltdownMode(void) {
|
||||
if (shared->lastmeltdown && nowl() - shared->lastmeltdown < 1) return;
|
||||
WARNF("(srvr) redbean is melting down (%,d workers)", shared->workers);
|
||||
WARNF("(srvr) server is melting down (%,d workers)", shared->workers);
|
||||
LOGIFNEG1(kill(0, SIGUSR2));
|
||||
shared->lastmeltdown = nowl();
|
||||
++shared->c.meltdowns;
|
||||
|
@ -6798,7 +6802,7 @@ static void MakeExecutableModifiable(void) {
|
|||
close(zfd);
|
||||
ft = __ftrace;
|
||||
if ((zfd = OpenExecutable()) == -1) {
|
||||
WARNF("(srvr) can't restore .ape");
|
||||
WARNF("(srvr) can't open executable for modification: %m");
|
||||
}
|
||||
if (ft > 0) {
|
||||
__ftrace = 0;
|
||||
|
@ -6828,7 +6832,7 @@ static int HandleReadline(void) {
|
|||
errno = 0;
|
||||
return 0;
|
||||
} else {
|
||||
WARNF("unexpected terminal error %d% m", status);
|
||||
WARNF("(srvr) unexpected terminal error %d% m", status);
|
||||
errno = 0;
|
||||
return 0;
|
||||
}
|
||||
|
@ -7070,7 +7074,7 @@ static void TlsInit(void) {
|
|||
if (unsecure) return;
|
||||
|
||||
if (suiteb && !X86_HAVE(AES)) {
|
||||
WARNF("you're using suite b crypto but you don't have aes-ni");
|
||||
WARNF("(srvr) requested suite b crypto, but aes-ni is not present");
|
||||
}
|
||||
|
||||
if (!sslinitialized) {
|
||||
|
@ -7223,7 +7227,7 @@ static void GetOpts(int argc, char *argv[]) {
|
|||
case 'f':
|
||||
funtrace = true;
|
||||
if (ftrace_install() == -1) {
|
||||
WARNF("ftrace failed to install %m");
|
||||
WARNF("(srvr) ftrace failed to install %m");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue