Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package siege for openSUSE:Factory checked in at 2025-07-30 11:46:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/siege (Old) and /work/SRC/openSUSE:Factory/.siege.new.13279 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "siege" Wed Jul 30 11:46:21 2025 rev:13 rq:1296510 version:4.1.7 Changes: -------- --- /work/SRC/openSUSE:Factory/siege/siege.changes 2023-01-17 17:36:01.921428185 +0100 +++ /work/SRC/openSUSE:Factory/.siege.new.13279/siege.changes 2025-07-30 11:47:31.112038791 +0200 @@ -1,0 +2,8 @@ +Tue Jul 8 10:16:00 UTC 2025 - pgaj...@suse.com + +- version update to 4.1.7 +- added patches + https://github.com/JoeDog/siege/issues/248 + + siege-gcc15.patch + +------------------------------------------------------------------- Old: ---- siege-4.1.6.tar.gz New: ---- siege-4.1.7.tar.gz siege-gcc15.patch ----------(New B)---------- New: https://github.com/JoeDog/siege/issues/248 + siege-gcc15.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ siege.spec ++++++ --- /var/tmp/diff_new_pack.xdO2Xi/_old 2025-07-30 11:47:31.756065433 +0200 +++ /var/tmp/diff_new_pack.xdO2Xi/_new 2025-07-30 11:47:31.760065598 +0200 @@ -18,13 +18,15 @@ Name: siege -Version: 4.1.6 +Version: 4.1.7 Release: 0 Summary: HTTP Regression Testing/Benchmarking Utility License: GPL-2.0-or-later Group: Productivity/Networking/Web/Utilities URL: https://www.joedog.org/siege-home/ Source: http://download.joedog.org/siege/siege-%{version}.tar.gz +# https://github.com/JoeDog/siege/issues/248 +Patch0: siege-gcc15.patch BuildRequires: perl BuildRequires: pkgconfig BuildRequires: pkgconfig(openssl) @@ -42,7 +44,7 @@ 3.0.0 it also supports FTP. %prep -%setup -q +%autosetup -p1 %build %configure \ ++++++ siege-4.1.6.tar.gz -> siege-4.1.7.tar.gz ++++++ ++++ 3374 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/ChangeLog new/siege-4.1.7/ChangeLog --- old/siege-4.1.6/ChangeLog 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/ChangeLog 2024-11-14 14:57:23.000000000 +0100 @@ -1,6 +1,40 @@ To email a contributor remove "DELETE" from the email address. (The DELETEs are necessary as this list is published online.) +2023/09/2023 Hennik Hunsaker https://github.com/danhunsaker + * src/setup.h to change the size + * src/main.c to check the size rather than use a hard coded value + * src/init.c to check the size and offer half to the config; + * src/version.c Version increment: 4.1.7-b6 + +2023/06/20 Jeroen Derks https://github.com/Magentron + * src/cookie.c Solves #223 + * src/page.c Solves #223 + * src/version.c Version increment: 4.1.7-b5 + +2023/06/20 Jeroen Derks https://github.com/Magentron + * src/cookie.c Fixed integrity checks + * src/version.c Version increment: 4.1.7-b4 + +2023/04/10 Jeffrey Fulmer https://www.joedog.org/support/ + * src/cookie.c Added siege attribute persistent + * src/cookie.h Added public prototypes + * src/cookies.c Added persistence for -g/--get cookies + * src/init.c Added auth-urls for 403 challenges + * src/setup.h Added auth-url array + * src/version.c Version increment: 4.1.7-b3 + +2023/04/04 Jeffrey Fulmer https://www.joedog.org/support/ + * src/browser.c Don't accept auth challenge if we have no creds + * src/auth.c Return "" if we can't build a header + * src/auth.h Added BOOLEAN auth_has_credentials + * src/version.c Version increment: 4.1.7-b2 + +2023/02/21 Kirit Sælensminde https://github.com/KayEss + * .gitignore Added generated files + * src/main.c Added precision to output metrics + * src/version.c Version increment: 4.1.7-b1 + 2023/01/05 Jeffrey Fulmer https://www.joedog.org/support/ * src/version.c Version increment: 4.1.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/configure.ac new/siege-4.1.7/configure.ac --- old/siege-4.1.6/configure.ac 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/configure.ac 2024-11-14 14:57:23.000000000 +0100 @@ -158,7 +158,7 @@ SSL_INCLUDE="-I$dir/include/openssl -I$dir/include" SSL_LIBS="-lssl -lcrypto" AC_MSG_CHECKING([for OpenSSL version]) - CPPFLAGS="$SSL_INCLUDE" + CPPFLAGS="$SSL_INCLUDE $CPPFLAGS" AC_EGREP_CPP(yes,[ #include <openssl/opensslv.h> #if OPENSSL_VERSION_NUMBER >= 0x0090800fL @@ -185,7 +185,7 @@ SSL_INCLUDE="-I$MYSSL/include/openssl -I$MYSSL/include" SSL_LIBS="-lssl -lcrypto" AC_MSG_CHECKING([for OpenSSL version]) - CPPFLAGS="$SSL_INCLUDE" + CPPFLAGS="$SSL_INCLUDE $CPPFLAGS" AC_EGREP_CPP(yes,[ #include <openssl/opensslv.h> #if OPENSSL_VERSION_NUMBER >= 0x0090800fL @@ -247,7 +247,7 @@ Z_INCLUDE="-I$MYZ/include/zlib -I$MYZ/include" Z_LIBS="-lz" AC_MSG_CHECKING([for ZLIB version]) - CPPFLAGS="$Z_INCLUDE" + CPPFLAGS="$Z_INCLUDE $CPPFLAGS" AC_SUBST(Z_CFLAGS) AC_SUBST(Z_INCLUDE) AC_SUBST(Z_LDFLAGS) @@ -263,7 +263,7 @@ Z_INCLUDE="-I$MYZ/include/zlib -I$MYZ/include" Z_LIBS="-lz" AC_MSG_CHECKING([for OpenSSL version]) - CPPFLAGS="$Z_INCLUDE" + CPPFLAGS="$Z_INCLUDE $CPPFLAGS" AC_SUBST(Z_CFLAGS) AC_SUBST(Z_INCLUDE) AC_SUBST(Z_LDFLAGS) @@ -332,6 +332,7 @@ AC_CHECK_FUNCS(strdup) AC_CHECK_FUNCS(rand_r) AC_CHECK_FUNCS(localtime_r) +AC_CHECK_FUNCS(getaddrinfo) AC_CHECK_FUNCS(gethostbyname_r) AC_CHECK_FUNCS(gmtime_r) AC_CHECK_FUNCS(getipnodebyname) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/doc/bombardment.1.in new/siege-4.1.7/doc/bombardment.1.in --- old/siege-4.1.6/doc/bombardment.1.in 2023-01-05 16:53:01.000000000 +0100 +++ new/siege-4.1.7/doc/bombardment.1.in 2024-11-14 15:01:38.000000000 +0100 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) +.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== @@ -46,7 +46,7 @@ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" -.\" If the F register is turned on, we'll generate index entries on stderr for +.\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. @@ -56,12 +56,12 @@ .. .nr rF 0 .if \n(.g .if rF .nr rF 1 -.if (\n(rF:(\n(.g==0)) \{ -. if \nF \{ +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. -. if !\nF==2 \{ +. if !\nF==2 \{\ . nr % 0 . nr F 2 . \} @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "BOMBARDMENT 1" -.TH BOMBARDMENT 1 "2023-01-05" "JoeDog" "bombardment" +.TH BOMBARDMENT 1 "2024-11-14" "JoeDog" "bombardment" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -167,7 +167,7 @@ between requests. The \f(CW$_PROGRAM\fR default is overridden by bombardment .SH "SEE ALSO" .IX Header "SEE ALSO" -\&\fIsiege\fR\|(1), \fIsiege2csv\fR\|(1) +\&\fBsiege\fR\|(1), \fBsiege2csv\fR\|(1) .SH "AUTHOR" .IX Header "AUTHOR" Written by Peter Hutnick, et al. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/doc/siege.1.in new/siege-4.1.7/doc/siege.1.in --- old/siege-4.1.6/doc/siege.1.in 2023-01-05 16:53:01.000000000 +0100 +++ new/siege-4.1.7/doc/siege.1.in 2024-11-14 15:01:38.000000000 +0100 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) +.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== @@ -46,7 +46,7 @@ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" -.\" If the F register is turned on, we'll generate index entries on stderr for +.\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. @@ -56,12 +56,12 @@ .. .nr rF 0 .if \n(.g .if rF .nr rF 1 -.if (\n(rF:(\n(.g==0)) \{ -. if \nF \{ +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. -. if !\nF==2 \{ +. if !\nF==2 \{\ . nr % 0 . nr F 2 . \} @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "SIEGE 1" -.TH SIEGE 1 "2023-01-05" "JoeDog" "Siege Load Tester" +.TH SIEGE 1 "2024-11-14" "JoeDog" "Siege Load Tester" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -405,7 +405,7 @@ .SH "URL FORMAT" .IX Header "URL FORMAT" \&\f(CW$_PROGRAM\fR supports \s-1RFC 1738 URL\s0 formats but it takes pains to implement -commonly used shortcuts for your convenience. In addition to \s-1RFC 1738 \s0 +commonly used shortcuts for your convenience. In addition to \s-1RFC 1738\s0 formats, siege introduces its own \s-1URL\s0 format to indicate protocol method. .PP An \s-1RFC 1738 URL\s0 looks like this: @@ -565,7 +565,7 @@ .PP This program is distributed in the hope that it will be useful, but \&\s-1WITHOUT ANY WARRANTY\s0; without even the implied warranty of -\&\s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A PARTICULAR PURPOSE. \s0 See the \s-1GNU \s0 +\&\s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A PARTICULAR PURPOSE.\s0 See the \s-1GNU\s0 General Public License for more details. .PP You should have received a copy of the \s-1GNU\s0 General Public License along @@ -573,9 +573,9 @@ 675 Mass Ave, Cambridge, \s-1MA 02139, USA.\s0 .SH "AVAILABILITY" .IX Header "AVAILABILITY" -The most recent released version of \f(CW$_PROGRAM\fR is available by \s-1HTTP \s0 +The most recent released version of \f(CW$_PROGRAM\fR is available by \s-1HTTP\s0 download: http://download.joedog.org/pub/siege .SH "SEE ALSO" .IX Header "SEE ALSO" -\&\fIsiege.config\fR\|(1) \fIbombardment\fR\|(1) \fIsiege2csv\fR\|(1) +\&\fBsiege.config\fR\|(1) \fBbombardment\fR\|(1) \fBsiege2csv\fR\|(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/doc/siege.config.1.in new/siege-4.1.7/doc/siege.config.1.in --- old/siege-4.1.6/doc/siege.config.1.in 2023-01-05 16:53:01.000000000 +0100 +++ new/siege-4.1.7/doc/siege.config.1.in 2024-11-14 15:01:38.000000000 +0100 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) +.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== @@ -46,7 +46,7 @@ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" -.\" If the F register is turned on, we'll generate index entries on stderr for +.\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. @@ -56,12 +56,12 @@ .. .nr rF 0 .if \n(.g .if rF .nr rF 1 -.if (\n(rF:(\n(.g==0)) \{ -. if \nF \{ +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. -. if !\nF==2 \{ +. if !\nF==2 \{\ . nr % 0 . nr F 2 . \} @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "SIEGE.CONFIG 1" -.TH SIEGE.CONFIG 1 "2023-01-05" "JoeDog" "siege.config utility" +.TH SIEGE.CONFIG 1 "2024-11-14" "JoeDog" "siege.config utility" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -170,7 +170,7 @@ or (at your option) any later version. .PP This program is distributed in the hope that it will be useful, but \s-1WITHOUT ANY WARRANTY\s0; without -even the implied warranty of \s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A PARTICULAR PURPOSE. \s0 See the \s-1GNU\s0 +even the implied warranty of \s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A PARTICULAR PURPOSE.\s0 See the \s-1GNU\s0 General Public License for more details. .PP You should have received a copy of the \s-1GNU\s0 General Public License along with this program; if not, @@ -180,4 +180,4 @@ \&\f(CW$_PROGRAM\fR.config is distributed as part of \f(CW$_PROGRAM\fR .SS "\s-1SEE ALSO\s0" .IX Subsection "SEE ALSO" -$\fI_PROGRAM\fR\|(1) +$\fB_PROGRAM\fR\|(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/doc/siege2csv.1.in new/siege-4.1.7/doc/siege2csv.1.in --- old/siege-4.1.6/doc/siege2csv.1.in 2023-01-05 16:53:01.000000000 +0100 +++ new/siege-4.1.7/doc/siege2csv.1.in 2024-11-14 15:01:38.000000000 +0100 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) +.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== @@ -46,7 +46,7 @@ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" -.\" If the F register is turned on, we'll generate index entries on stderr for +.\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. @@ -56,12 +56,12 @@ .. .nr rF 0 .if \n(.g .if rF .nr rF 1 -.if (\n(rF:(\n(.g==0)) \{ -. if \nF \{ +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. -. if !\nF==2 \{ +. if !\nF==2 \{\ . nr % 0 . nr F 2 . \} @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "BOMBARDMENT 1" -.TH BOMBARDMENT 1 "2023-01-05" "JoeDog" "siege2csv" +.TH BOMBARDMENT 1 "2024-11-14" "JoeDog" "siege2csv" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -167,7 +167,7 @@ between requests. The \f(CW$_PROGRAM\fR default is overridden by bombardment .SH "SEE ALSO" .IX Header "SEE ALSO" -\&\fIsiege\fR\|(1), \fIsiege2csv\fR\|(1) +\&\fBsiege\fR\|(1), \fBsiege2csv\fR\|(1) .SH "AUTHOR" .IX Header "AUTHOR" Written by Peter Hutnick, et al. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/doc/siegerc.in new/siege-4.1.7/doc/siegerc.in --- old/siege-4.1.6/doc/siegerc.in 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/doc/siegerc.in 2024-11-14 14:57:23.000000000 +0100 @@ -521,6 +521,17 @@ # # login-url = +# +# Auth URL. This feature is similar to the Login URL except it's invoked +# for form-based authentication after a 403 challenge. If the server responds +# with 403 Forbidden, siege will attempt form based authentication with a +# auth-url whose hostname matches the current hostname. You can set more than +# one auth-url. Siege will attempt to select the appropriate one. +# +# ex: auth-url = https://www.joedog.org/lemme-in POST user=ted&pass=excellent +# +# auth-url = + # # FTP login - There are two ways to login to an ftp server with siege. You # can use this directive to set login credentials or you can set them in a diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/include/config.h.in new/siege-4.1.7/include/config.h.in --- old/siege-4.1.6/include/config.h.in 2023-01-05 16:53:00.000000000 +0100 +++ new/siege-4.1.7/include/config.h.in 2024-11-14 15:01:37.000000000 +0100 @@ -33,6 +33,9 @@ /* Define to 1 if you have the `freehostent' function. */ #undef HAVE_FREEHOSTENT +/* Define to 1 if you have the `getaddrinfo' function. */ +#undef HAVE_GETADDRINFO + /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/include/joedog/path.h new/siege-4.1.7/include/joedog/path.h --- old/siege-4.1.6/include/joedog/path.h 2023-01-05 16:53:26.000000000 +0100 +++ new/siege-4.1.7/include/joedog/path.h 2024-11-14 15:01:56.000000000 +0100 @@ -23,10 +23,10 @@ #ifndef JOEDOG_PATH_H #define JOEDOG_PATH_H -#define SIEGE_HOME "/opt/siege-4.1.6" -#define URL_FILE "/opt/siege-4.1.6/etc/urls.txt" -#define CNF_FILE "/opt/siege-4.1.6/etc/siegerc" -#define LOG_FILE "/opt/siege-4.1.6/var/log/siege.log" +#define SIEGE_HOME "/home/jeff" +#define URL_FILE "/home/jeff/etc/urls.txt" +#define CNF_FILE "/home/jeff/etc/siegerc" +#define LOG_FILE "/home/jeff/var/log/siege.log" #define PLATFORM "pc-x86_64-linux-gnu" #endif/*JOEDOG_PATH_H*/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/auth.c new/siege-4.1.7/src/auth.c --- old/siege-4.1.6/src/auth.c 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/auth.c 2024-11-14 14:57:23.000000000 +0100 @@ -173,6 +173,14 @@ return; } +BOOLEAN +auth_has_credentials(AUTH this) +{ + size_t len = array_length(this->creds); + printf("LENGTH: %ld\n", len); + return TRUE; +} + void auth_display(AUTH this, SCHEME scheme) { @@ -193,9 +201,9 @@ auth_get_basic_header(AUTH this, SCHEME scheme) { if (scheme == PROXY) { - return this->proxy.encode; + return this->proxy.encode != NULL ? this->proxy.encode : ""; } else { - return this->basic.encode; + return this->basic.encode != NULL ? this->basic.encode : ""; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/auth.h new/siege-4.1.7/src/auth.h --- old/siege-4.1.6/src/auth.h 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/auth.h 2024-11-14 14:57:23.000000000 +0100 @@ -38,6 +38,7 @@ AUTH auth_destroy(AUTH this); void auth_add(AUTH this, CREDS creds); void auth_display(AUTH this, SCHEME scheme); +BOOLEAN auth_has_credentials(AUTH this); char * auth_get_basic_header(AUTH this, SCHEME scheme); BOOLEAN auth_set_basic_header(AUTH this, SCHEME scheme, char *realm); char * auth_get_ntlm_header(AUTH this, SCHEME scheme); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/browser.c new/siege-4.1.7/src/browser.c --- old/siege-4.1.6/src/browser.c 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/browser.c 2024-11-14 14:57:23.000000000 +0100 @@ -112,7 +112,7 @@ private void __increment_failures(); private int __select_color(int code); private void __display_result(BROWSER this, RESPONSE resp, URL U, unsigned long bytes, float etime); - +private void __init_cookies(BROWSER this); #ifdef SIGNAL_CLIENT_PLATFORM private void __signal_handler(int sig); @@ -250,6 +250,8 @@ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &this->state); #endif/*SIGNAL_CLIENT_PLATFORM*/ + __init_cookies(this); + if (my.login == TRUE) { URL tmp = new_url(array_next(my.lurl)); url_set_ID(tmp, 0); @@ -376,10 +378,12 @@ void browser_set_cookies(BROWSER this, HASH cookies) { - int i = 0; - this->cookies = cookies; +} +private void +__init_cookies(BROWSER this) { + int i; if (this->cookies != NULL) { char **keys = hash_get_keys(this->cookies); for (i = 0; i < hash_get_entries(this->cookies); i ++){ @@ -420,6 +424,8 @@ private BOOLEAN __http(BROWSER this, URL U) { + char *url; + BOOLEAN res; unsigned long bytes = 0; int code, okay, fail; float etime; @@ -678,10 +684,12 @@ b = auth_set_ntlm_header ( my.auth, HTTP, response_get_www_auth_challenge(resp), response_get_www_auth_realm(resp) ); + if (b == FALSE) return b; } if (response_get_www_auth_type(resp) == BASIC) { this->auth.type.www = BASIC; - auth_set_basic_header(my.auth, HTTP, response_get_www_auth_realm(resp)); + b = auth_set_basic_header(my.auth, HTTP, response_get_www_auth_realm(resp)); + if (b == FALSE) return b; } if ((__request(this, U)) == FALSE) { fprintf(stderr, "ERROR from http_request\n"); @@ -689,14 +697,30 @@ } } break; + case 403: + res = FALSE; + while ((url = array_pop(my.aurl)) != NULL) { + URL tmp = new_url(url); + if (strmatch(url_get_hostname(U), url_get_hostname(tmp))) { + url_set_ID(tmp, 0); + res = __request(this, tmp); + if (res == TRUE) { + xfree(url); + res = __request(this, U); + return res; + } + } + xfree(url); + } + return res; case 407: /** * Proxy-Authenticate challenge from the proxy server. */ this->auth.proxy = (this->auth.proxy==0) ? 1 : this->auth.proxy; if ((this->auth.bids.proxy++) < my.bids - 1) { + BOOLEAN b; if (response_get_proxy_auth_type(resp) == DIGEST) { - BOOLEAN b; this->auth.type.proxy = DIGEST; b = auth_set_digest_header ( my.auth, &(this->auth.pchlg), &(this->auth.pcred), &(this->rseed), @@ -712,7 +736,8 @@ } if (response_get_proxy_auth_type(resp) == BASIC) { this->auth.type.proxy = BASIC; - auth_set_basic_header(my.auth, PROXY, response_get_proxy_auth_realm(resp)); + b = auth_set_basic_header(my.auth, PROXY, response_get_proxy_auth_realm(resp)); + if (b == FALSE) return b; } if ((__request(this, U)) == FALSE) return FALSE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/cookie.c new/siege-4.1.7/src/cookie.c --- old/siege-4.1.6/src/cookie.c 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/cookie.c 2024-11-14 14:57:23.000000000 +0100 @@ -20,6 +20,7 @@ char * string; BOOLEAN session; BOOLEAN secure; + BOOLEAN persistent; }; size_t COOKIESIZE = sizeof(struct COOKIE_T); @@ -32,6 +33,8 @@ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; +char *__cookie_none = "none"; + /** * Creates a cookie with the value of the * Set-cookie header. @@ -45,14 +48,15 @@ COOKIE this; this = calloc(sizeof(struct COOKIE_T), 1); - this->name = NULL; - this->value = NULL; - this->domain = NULL; - this->expires = 0; - this->expstr = NULL; - this->string = NULL; - this->session = TRUE; - this->none = strdup("none"); + this->name = NULL; + this->value = NULL; + this->domain = NULL; + this->expires = 0; + this->expstr = NULL; + this->string = NULL; + this->session = TRUE; + this->persistent = FALSE; + this->none = strdup(__cookie_none); if (__parse_input(this, str, host) == FALSE) { return cookie_destroy(this); } @@ -120,6 +124,12 @@ this->expires = expires; } +void +cookie_set_persistent(COOKIE this, BOOLEAN persistent) +{ + this->persistent = persistent; +} + /** * Returns the name of the cookie * Example: Set-Cookie: exes=X; expires=Fri, 01-May-2015 12:51:25 GMT @@ -128,8 +138,8 @@ char * cookie_get_name(COOKIE this) { - if (this == NULL && this->name == NULL) - return this->none; + if (this == NULL || this->name == NULL) + return __cookie_none; return this->name; } @@ -141,8 +151,8 @@ char * cookie_get_value(COOKIE this) { - if (this == NULL && this->value == NULL) - return this->none; + if (this == NULL || this->value == NULL) + return __cookie_none; return this->value; } @@ -152,8 +162,8 @@ char * cookie_get_domain(COOKIE this) { - if (this == NULL && this->domain == NULL) - return this->none; + if (this == NULL || this->domain == NULL) + return __cookie_none; return this->domain; } @@ -163,8 +173,8 @@ char * cookie_get_path(COOKIE this) { - if (this == NULL && this->path == NULL) - return this->none; + if (this == NULL || this->path == NULL) + return __cookie_none; return this->path; } @@ -184,6 +194,14 @@ return this->session; } +BOOLEAN +cookie_get_persistent(COOKIE this) +{ + if (this == NULL) + return TRUE; + return this->persistent; +} + /** * Returns the string value of the cookie * (Mainly a debugging tool; we want cookie_expires for anything useful) @@ -195,9 +213,6 @@ char * cookie_expires_string(COOKIE this) { - /*if (this->expstr == NULL) - this->expstr = malloc(sizeof (char*) * 128); - else */ this->expstr = realloc(this->expstr, sizeof(this->expstr)*128); memset(this->expstr, '\0', 128); struct tm * timeinfo; @@ -217,9 +232,10 @@ memset(this->string, '\0', len); snprintf( - this->string, len, "%s=%s; domain=%s; path=%s; expires=%lld", + this->string, len, "%s=%s; domain=%s; path=%s; expires=%lld%s", this->name, this->value, (this->domain != NULL) ? this->domain : "none", - (this->path != NULL) ? this->path : "/", (long long)this->expires + (this->path != NULL) ? this->path : "/", (long long)this->expires, + (this->persistent == TRUE) ? "; persistent=true" : "" ); return this->string; } @@ -248,10 +264,10 @@ COOKIE cookie_clone(COOKIE this, COOKIE that) { - this->value = strealloc(this->value, cookie_get_value(that)); - this->domain = strealloc(this->domain, cookie_get_domain(that)); - this->path = strealloc(this->path, cookie_get_path(that)); - //if ((time_t*)cookie_get_expires(that) != 0) { + this->value = strealloc(this->value, cookie_get_value(that)); + this->domain = strealloc(this->domain, cookie_get_domain(that)); + this->path = strealloc(this->path, cookie_get_path(that)); + this->persistent = cookie_get_persistent(that); if (this->expires > 0) { this->expires = time((time_t*)cookie_get_expires(that)); } @@ -322,6 +338,10 @@ cookie_set_domain(this, val); } else if (!strncasecmp(key, "secure", 6)) { this->secure = TRUE; + } else if (!strncasecmp(key, "persistent", 10)) { + if (!strncasecmp(val, "true", 4)) { + this->persistent = TRUE; + } } else { this->name = strdup(key); this->value = strdup(val); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/cookie.h new/siege-4.1.7/src/cookie.h --- old/siege-4.1.6/src/cookie.h 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/cookie.h 2024-11-14 14:57:23.000000000 +0100 @@ -38,12 +38,14 @@ void cookie_set_path(COOKIE this, char *str); void cookie_set_domain(COOKIE this, char *str); void cookie_set_expires(COOKIE this, time_t expires); +void cookie_set_persistent(COOKIE this, BOOLEAN persistent); char * cookie_get_name(COOKIE this); char * cookie_get_value(COOKIE this); char * cookie_get_domain(COOKIE this); char * cookie_get_path(COOKIE this); time_t cookie_get_expires(COOKIE this); BOOLEAN cookie_get_session(COOKIE this); +BOOLEAN cookie_get_persistent(COOKIE this); char * cookie_expires_string(COOKIE this); char * cookie_to_string(COOKIE this); COOKIE cookie_clone(COOKIE this, COOKIE that); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/cookies.c new/siege-4.1.7/src/cookies.c --- old/siege-4.1.6/src/cookies.c 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/cookies.c 2024-11-14 14:57:23.000000000 +0100 @@ -67,8 +67,6 @@ cookies_add(COOKIES this, char *str, char *host) { size_t id = pthread_self(); - //int hlen = 0; - //int dlen = 0; NODE *cur = NULL; NODE *pre = NULL; NODE *new = NULL; @@ -80,8 +78,6 @@ for (cur = pre = this->head; cur != NULL; pre = cur, cur = cur->next) { const char *domainptr = cookie_get_domain(cur->cookie); if (*domainptr == '.') ++domainptr; - //hlen = host ? strlen(host) : 0; - //dlen = domainptr ? strlen(domainptr) : 0; if (__endswith(host, domainptr)){ valid = TRUE; } @@ -92,17 +88,26 @@ found = TRUE; break; } + if (my.get && valid && !strcasecmp(cookie_get_name(cur->cookie), cookie_get_name(oreo))) { + cookie_reset_value(cur->cookie, cookie_get_value(oreo)); + oreo = cookie_destroy(oreo); + found = TRUE; + break; + } } if (!found) { + if (my.get && strlen(host) > 1) { + cookie_set_persistent(oreo, TRUE); + } new = (NODE*)malloc(sizeof(NODE)); - new->threadID = id; + new->threadID = (cookie_get_persistent(oreo) == TRUE) ? 999999999999999 : id; new->cookie = oreo; new->next = cur; if (cur == this->head) this->head = new; else - pre->next = new; + if (pre != NULL) pre->next = new; } return TRUE; @@ -142,7 +147,7 @@ NODE *cur; NODE *pre; pthread_t id = pthread_self(); - + puts("DELETE ALL"); // XXX: delete cookies by thread; not every cookie in the list for (cur = pre = this->head; cur != NULL; pre = cur, cur = cur->next) { if (cur->threadID == id) { @@ -172,7 +177,6 @@ size_t id = pthread_self(); memset(oreo, '\0', sizeof oreo); - tmp = time(NULL); gmtime_r(&tmp, &tm); tm.tm_isdst = -1; // force mktime to figure it out! @@ -219,8 +223,9 @@ if (tmp == NULL) ; else printf( - "%lld: NAME: %s\n VALUE: %s\n Expires: %s\n", - (long long)cur->threadID, cookie_get_name(tmp), cookie_get_value(tmp), cookie_expires_string(tmp) + "%lld: NAME: %s\n VALUE: %s\n Expires: %s Persistent: %s\n", + (long long)cur->threadID, cookie_get_name(tmp), cookie_get_value(tmp), cookie_expires_string(tmp), + (cookie_get_persistent(tmp)==TRUE) ? "true" : "false" ); } } @@ -291,28 +296,38 @@ chomp(line); if (strlen(line) > 1) { int num = 2; + char *key; + char *val; char **pair; pair = split('|', line, &num); trim(pair[0]); trim(pair[1]); - if (pair[0] != NULL && pair[1] != NULL) { - if (hash_get(IDX, pair[0]) == NULL) { + if (strstr(pair[1], "persistent=true") != NULL) { + key = xstrdup("999999999999999"); + } else { + key = xstrdup(pair[0]); + } + val = xstrdup(pair[1]); + if (key != NULL && val != NULL) { + if (hash_get(IDX, key) == NULL) { char tmp[1024]; n += 1; memset(tmp, '\0', 1024); snprintf(tmp, 1024, "%d", n); - hash_add(IDX, pair[0], tmp); + hash_add(IDX, key, tmp); } - HASH tmp = (HASH)hash_get(HOH, hash_get(IDX, pair[0])); + HASH tmp = (HASH)hash_get(HOH, hash_get(IDX, key)); if (tmp == NULL) { tmp = new_hash(); - hash_add(tmp, pair[1], pair[1]); - hash_nadd(HOH, hash_get(IDX, pair[0]), tmp, HASHSIZE); + hash_add(tmp, val, val); + hash_nadd(HOH, hash_get(IDX, key), tmp, HASHSIZE); } else { - hash_add(tmp, pair[1], pair[1]); + hash_add(tmp, val, val); } } split_free(pair, num); + xfree(key); + xfree(val); } memset(line, '\0', len); } @@ -356,7 +371,12 @@ if (tmp != NULL && cookie_get_session(tmp) != TRUE && cookie_get_expires(cur->cookie) >= now) { memset(line, '\0', len); if (cookie_to_string(tmp) != NULL) { - snprintf(line, len, "%ld | %s\n", cur->threadID, cookie_to_string(tmp)); + snprintf( + line, len, + "%ld | %s\n", + (my.get || cookie_get_persistent(tmp)) ? 999999999999999 : cur->threadID, + cookie_to_string(tmp) + ); } fputs(line, fp); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/init.c new/siege-4.1.7/src/init.c --- old/siege-4.1.6/src/init.c 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/init.c 2024-11-14 14:57:23.000000000 +0100 @@ -39,6 +39,9 @@ #include <unistd.h> #include <errno.h> #include <stdlib.h> +#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) +#include <signal.h> +#endif #define LINESZ 1024 @@ -129,6 +132,7 @@ my.ssl_key = NULL; my.ssl_ciphers = NULL; my.lurl = new_array(); + my.aurl = new_array(); my.cookies = new_cookies(); my.nomap = xcalloc(1, sizeof(LINES)); my.nomap->index = 0; @@ -253,6 +257,7 @@ xfree(method); my.auth = auth_destroy(my.auth); my.lurl = array_destroy(my.lurl); + my.aurl = array_destroy(my.aurl); my.cookies = cookies_destroy(my.cookies); if (EXIT) exit(0); @@ -537,7 +542,6 @@ xstrncpy(my.encoding, value, sizeof(my.encoding)); } } - #if 1 else if (!strncasecmp(option, "login", 5)) { if(strmatch(option, "login-url")){ my.login = TRUE; @@ -547,7 +551,9 @@ auth_add(my.auth, new_creds(HTTP, value)); } } - #endif + else if(strmatch(option, "auth-url")){ + array_push(my.aurl, value); + } else if (strmatch(option, "attempts")) { if (value != NULL) { my.bids = atoi(value); @@ -610,7 +616,8 @@ } else if (strmatch(option, "header")) { if (!strchr(value,':')) NOTIFY(FATAL, "no ':' in http-header"); - if ((strlen(value) + strlen(my.extra) + 3) > 512) NOTIFY(FATAL, "too many headers"); + if ((strlen(value) + strlen(my.extra) + 3) > sizeof(my.extra) / 2) // leave half of the header space to be used internally + NOTIFY(FATAL, "too many headers"); strcat(my.extra,value); strcat(my.extra,"\015\012"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/main.c new/siege-4.1.7/src/main.c --- old/siege-4.1.6/src/main.c 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/main.c 2024-11-14 14:57:23.000000000 +0100 @@ -293,7 +293,7 @@ case 'H': { if(!strchr(optarg,':')) NOTIFY(FATAL, "no ':' in http-header"); - if((strlen(optarg) + strlen(my.extra) + 3) > 2048) + if((strlen(optarg) + strlen(my.extra) + 3) > sizeof(my.extra)) // sizeof(*my.extra) == 1, so this is accurate NOTIFY(FATAL, "header is too large"); strcat(my.extra,optarg); strcat(my.extra,"\015\012"); @@ -531,24 +531,24 @@ fprintf(stderr, "%s aborted due to excessive socket failure; you\n", program_name); fprintf(stderr, "can change the failure threshold in $HOME/.%src\n", program_name); } - fprintf(stderr, "\nTransactions:\t\t%12u hits\n", data_get_count(data)); + fprintf(stderr, "\nTransactions:\t\t%9u hits\n", data_get_count(data)); fprintf(stderr, "Availability:\t\t%12.2f %%\n", data_get_count(data)==0 ? 0 : (double)data_get_count(data) / (data_get_count(data)+my.failed)*100 ); fprintf(stderr, "Elapsed time:\t\t%12.2f secs\n", data_get_elapsed(data)); fprintf(stderr, "Data transferred:\t%12.2f MB\n", data_get_megabytes(data)); /*%12llu*/ - fprintf(stderr, "Response time:\t\t%12.2f secs\n", data_get_response_time(data)); + fprintf(stderr, "Response time:\t\t%12.2f ms\n", 1000.0f * data_get_response_time(data)); fprintf(stderr, "Transaction rate:\t%12.2f trans/sec\n", data_get_transaction_rate(data)); fprintf(stderr, "Throughput:\t\t%12.2f MB/sec\n", data_get_throughput(data)); fprintf(stderr, "Concurrency:\t\t%12.2f\n", data_get_concurrency(data)); - fprintf(stderr, "Successful transactions:%12u\n", data_get_code(data)); + fprintf(stderr, "Successful transactions:%9u\n", data_get_code(data)); if (my.debug) { - fprintf(stderr, "HTTP OK received:\t%12u\n", data_get_okay(data)); + fprintf(stderr, "HTTP OK received:\t%9u\n", data_get_okay(data)); } - fprintf(stderr, "Failed transactions:\t%12u\n", my.failed); - fprintf(stderr, "Longest transaction:\t%12.2f\n", data_get_highest(data)); - fprintf(stderr, "Shortest transaction:\t%12.2f\n", data_get_lowest(data)); + fprintf(stderr, "Failed transactions:\t%9u\n", my.failed); + fprintf(stderr, "Longest transaction:\t%12.2f ms\n", 1000.0f * data_get_highest(data)); + fprintf(stderr, "Shortest transaction:\t%12.2f ms\n", 1000.0f * data_get_lowest(data)); fprintf(stderr, " \n"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/page.c new/siege-4.1.7/src/page.c --- old/siege-4.1.6/src/page.c 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/page.c 2024-11-14 14:57:23.000000000 +0100 @@ -36,6 +36,7 @@ this->size = 0; free(this->buf); free(this); + this = NULL; } return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/setup.h new/siege-4.1.7/src/setup.h --- old/siege-4.1.6/src/setup.h 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/setup.h 2024-11-14 14:57:23.000000000 +0100 @@ -191,7 +191,7 @@ AUTH auth; BOOLEAN keepalive; /* boolean, connection keep-alive value */ int signaled; /* timed based testing notification bool. */ - char extra[2048]; /* extra http request headers */ + char extra[8192]; /* extra http request headers */ #if 0 struct { BOOLEAN required; /* boolean, TRUE == use a proxy server. */ @@ -203,6 +203,7 @@ BOOLEAN login; /* boolean, client must login first. */ char *loginurl; /* XXX: deprecated the initial login URL */ ARRAY lurl; + ARRAY aurl; int failures; /* number of failed attempts before abort. */ int failed; /* total number of socket failures. */ BOOLEAN escape; /* boolean, TRUE == url-escaping */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/sock.c new/siege-4.1.7/src/sock.c --- old/siege-4.1.6/src/sock.c 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/sock.c 2024-11-14 14:57:23.000000000 +0100 @@ -94,7 +94,7 @@ char hn[512]; int port; int domain; -#if defined(__GLIBC__) +#if defined(HAVE_GETADDRINFO) char port_str[10]; struct addrinfo hints; struct addrinfo *addr_res; @@ -143,7 +143,7 @@ return -1; } -#if defined(__GLIBC__) +#if defined(HAVE_GETADDRINFO) { snprintf(port_str, sizeof(port_str), "%d", port); @@ -182,13 +182,13 @@ herrno = h_errno; #else /** - * Let's just hope gethostbyname is tread-safe + * Let's just hope gethostbyname is thread-safe */ hp = gethostbyname(hn); herrno = h_errno; #endif/*OS SPECIFICS*/ -#if !defined(__GLIBC__) +#if !defined(HAVE_GETADDRINFO) /* gethostbyname only offers IPv4 support */ domain = AF_INET; @@ -219,7 +219,7 @@ s_addr = (struct sockaddr *)&cli; addrlen = sizeof(struct sockaddr_in); -#endif /* end of __GLIBC__ not defined */ +#endif /* end of HAVE_GETADDRINFO not defined */ /* create a socket, return -1 on failure */ if (__socket_create(C, domain) < 0) { @@ -233,7 +233,7 @@ */ conn = connect(C->sock, s_addr, addrlen); pthread_testcancel(); -#if defined(__GLIBC__) +#if defined(HAVE_GETADDRINFO) /** * The result of getaddrinfo is a linked list. Attempt * to connect to each result until successful diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/url.c new/siege-4.1.7/src/url.c --- old/siege-4.1.6/src/url.c 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/url.c 2024-11-14 14:57:23.000000000 +0100 @@ -661,9 +661,36 @@ private void __parse_post_data(URL this, char *datap) { + char *ctype; + char *end_ctype; + + // check content type + ctype = strstr(datap,"-T"); + if (!empty(my.conttype)) { + this->conttype = xstrdup(my.conttype); + }else{ + this->conttype = xstrdup("application/x-www-form-urlencoded"); + } + + //if -T arg passed in line retrieve content type + if (ctype != NULL) { + // get end of content type defined by ; delimeter and separate strings with null terminator + // url file line should be constructed like this: http://url -T application/json; {data} + end_ctype = strstr(datap, ";"); + *end_ctype = '\0'; + // ctype moves to beginning of content type definition + ctype += 3; + // set conttype + this->conttype = xstrdup(ctype); + // move datap to char after null terminator + datap = end_ctype + 1; + } + for (; isspace((unsigned int)*datap); datap++) { /* Advance past white space */ } + + if (*datap == '<') { datap++; load_file(this, datap); @@ -673,11 +700,6 @@ } else { this->postdata = xstrdup(datap); this->postlen = strlen(this->postdata); - if (! empty(my.conttype)) { - this->conttype = xstrdup(my.conttype); - } else { - this->conttype = xstrdup("application/x-www-form-urlencoded"); - } return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/siege-4.1.6/src/version.c new/siege-4.1.7/src/version.c --- old/siege-4.1.6/src/version.c 2023-01-05 16:52:49.000000000 +0100 +++ new/siege-4.1.7/src/version.c 2024-11-14 14:57:48.000000000 +0100 @@ -4,12 +4,12 @@ * used by configure to dynamically assign those values * to documentation files. */ -const char *version_string = "4.1.6"; +const char *version_string = "4.1.7"; const char *program_name = "siege"; const char *author_name = "Jeffrey Fulmer, et al."; const char *email_address = "j...@joedog.org"; -const char *years = "1999-2023"; -const char *copyright = "Copyright (C) 2023 by Jeffrey Fulmer, et al.\n\ +const char *years = "1999-2024"; +const char *copyright = "Copyright (C) 2024 by Jeffrey Fulmer, et al.\n\ This is free software; see the source for copying conditions.\n\ There is NO warranty; not even for MERCHANTABILITY or FITNESS\n\ FOR A PARTICULAR PURPOSE.\n"; ++++++ siege-gcc15.patch ++++++ diff -upr siege-4.1.7.orig/src/crew.c siege-4.1.7/src/crew.c --- siege-4.1.7.orig/src/crew.c 2025-07-08 09:49:10.798475362 +0000 +++ siege-4.1.7/src/crew.c 2025-07-08 09:57:07.179600520 +0000 @@ -147,7 +147,7 @@ private void } BOOLEAN -crew_add(CREW crew, void (*routine)(), void *arg) +crew_add(CREW crew, void (*routine)(void *), void *arg) { int c; WORK *workptr; diff -upr siege-4.1.7.orig/src/crew.h siege-4.1.7/src/crew.h --- siege-4.1.7.orig/src/crew.h 2025-07-08 09:49:10.797947904 +0000 +++ siege-4.1.7/src/crew.h 2025-07-08 09:58:32.764227730 +0000 @@ -28,7 +28,7 @@ typedef struct work { - void (*routine)(); + void (*routine)(void *); void *arg; struct work *next; } WORK; @@ -36,7 +36,7 @@ typedef struct work typedef struct CREW_T *CREW; CREW new_crew(int size, int maxsize, BOOLEAN block); -BOOLEAN crew_add(CREW this, void (*routine)(), void *arg); +BOOLEAN crew_add(CREW this, void (*routine)(void *), void *arg); BOOLEAN crew_cancel(CREW this); BOOLEAN crew_join(CREW this, BOOLEAN finish, void **payload); void crew_destroy(CREW this); diff -upr siege-4.1.7.orig/src/date.h siege-4.1.7/src/date.h --- siege-4.1.7.orig/src/date.h 2025-07-08 09:49:10.797744846 +0000 +++ siege-4.1.7/src/date.h 2025-07-08 09:55:32.894259646 +0000 @@ -34,7 +34,7 @@ extern size_t DATESIZE; * because then we have one destroyer * that we can pass to the HASH */ -DATE new_date(); +DATE new_date(char *date); DATE new_etag(char *etag); DATE date_destroy(DATE this); diff -upr siege-4.1.7.orig/src/handler.h siege-4.1.7/src/handler.h --- siege-4.1.7.orig/src/handler.h 2025-07-08 09:49:10.798750599 +0000 +++ siege-4.1.7/src/handler.h 2025-07-08 09:58:59.491423601 +0000 @@ -26,7 +26,7 @@ #include <signal.h> #include <crew.h> -void spin_doctor(); +void spin_doctor(CREW crew); void sig_handler(CREW crew); #endif/*HANDLER_H*/ diff -upr siege-4.1.7.orig/src/page.h siege-4.1.7/src/page.h --- siege-4.1.7.orig/src/page.h 2025-07-08 09:49:10.798683939 +0000 +++ siege-4.1.7/src/page.h 2025-07-08 09:56:06.940110550 +0000 @@ -7,7 +7,7 @@ */ typedef struct PAGE_T *PAGE; -PAGE new_page(); +PAGE new_page(char *str); PAGE page_destroy(PAGE this); void page_concat(PAGE this, const char *str, const int len); void page_clear(PAGE this); diff -upr siege-4.1.7.orig/src/setup.h siege-4.1.7/src/setup.h --- siege-4.1.7.orig/src/setup.h 2025-07-08 09:49:10.796492272 +0000 +++ siege-4.1.7/src/setup.h 2025-07-08 09:53:58.006460026 +0000 @@ -96,16 +96,16 @@ char *strchr (), *strrchr (); #ifndef HAVE_STRCASECMP -int strcasecmp(); +int strcasecmp(const char *, const char *); #endif #ifndef HAVE_STRNCASECMP -int strncasecmp(); +int strncasecmp(const char s1[], const char s2[], size_t n); #endif #ifndef HAVE_STRNCMP -int strncmp(); +int strncmp(const); #endif #ifndef HAVE_STRLEN -int strlen(); +int strlen(const char s1[], const char s2[], size_t n); #endif #include <url.h>