Skip to content

Commit 7d5a9dd

Browse files
authored
Litespeed sapi OpenBSD build fix (#3999)
attempt to core dump in the proper place. implement sendfile
1 parent c1bf4b3 commit 7d5a9dd

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

sapi/litespeed/lsapilib.c

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@ static void lsapi_enable_core_dump(void)
359359
int mib[2];
360360
size_t len;
361361

362+
#if !defined(__OpenBSD__)
362363
len = 2;
363364
if ( sysctlnametomib("kern.sugid_coredump", mib, &len) == 0 )
364365
{
@@ -367,6 +368,15 @@ static void lsapi_enable_core_dump(void)
367368
perror( "sysctl: Failed to set 'kern.sugid_coredump', "
368369
"core dump may not be available!");
369370
}
371+
#else
372+
int set = 3;
373+
len = sizeof(set);
374+
mib[0] = CTL_KERN;
375+
mib[1] = KERN_NOSUIDCOREDUMP;
376+
if (sysctl(mib, 2, NULL, 0, &set, len) == 0) {
377+
s_enable_core_dump = 1;
378+
}
379+
#endif
370380

371381

372382
#endif
@@ -1944,7 +1954,7 @@ ssize_t LSAPI_Write_r( LSAPI_Request * pReq, const char * pBuf, size_t len )
19441954
}
19451955

19461956

1947-
#if defined(__FreeBSD__ ) || defined(__NetBSD__) || defined(__OpenBSD__)
1957+
#if defined(__FreeBSD__ )
19481958
ssize_t gsendfile( int fdOut, int fdIn, off_t* off, size_t size )
19491959
{
19501960
ssize_t ret;
@@ -1959,6 +1969,40 @@ ssize_t gsendfile( int fdOut, int fdIn, off_t* off, size_t size )
19591969
}
19601970
#endif
19611971

1972+
#if defined(__OpenBSD__) || defined(__NetBSD__)
1973+
ssize_t gsendfile( int fdOut, int fdIn, off_t* off, size_t size )
1974+
{
1975+
ssize_t ret;
1976+
off_t written = 0;
1977+
const size_t bufsiz = 16384;
1978+
unsigned char in[bufsiz] = {0};
1979+
1980+
if (lseek(fdIn, *off, SEEK_SET) == -1) {
1981+
return -1;
1982+
}
1983+
1984+
while (size > 0) {
1985+
size_t tor = size > sizeof(in) ? sizeof(in) : size;
1986+
ssize_t c = read(fdIn, in, tor);
1987+
if (c <= 0) {
1988+
goto end;
1989+
}
1990+
1991+
ssize_t w = write(fdOut, in, c);
1992+
if (w != c) {
1993+
goto end;
1994+
}
1995+
1996+
written += w;
1997+
size -= c;
1998+
}
1999+
2000+
end:
2001+
*off += written;
2002+
return 0;
2003+
}
2004+
#endif
2005+
19622006

19632007
#if defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
19642008
ssize_t gsendfile( int fdOut, int fdIn, off_t* off, size_t size )

0 commit comments

Comments
 (0)