Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package siege for openSUSE:Factory checked in at 2026-10-28 17:48:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/siege (Old) and /work/SRC/openSUSE:Factory/.siege.new.2252680 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "siege" Wed Oct 28 17:48:24 2026 rev:15 rq:1393256 version:4.2.2 Changes: -------- --- /work/SRC/openSUSE:Factory/siege/siege.changes 2026-08-20 16:17:27.476830926 +0200 +++ /work/SRC/openSUSE:Factory/.siege.new.2252680/siege.changes 2026-10-28 17:48:28.423899053 +0100 @@ -1,0 +2,10 @@ +Wed Oct 28 06:39:21 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to 4.2.2: + * New -E/--extended and -e/--extended-errors options printing + a per-code breakdown of HTTP error statuses, in standard + and JSON output modes + * Fix cookie parsing for RFC850 two-digit dates (from 4.2.1) + * Silence OpenSSL deprecation warnings + +------------------------------------------------------------------- Old: ---- siege-4.2.0.tar.gz New: ---- siege-4.2.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ siege.spec ++++++ --- /var/tmp/diff_new_pack.CLi2ci/_old 2026-10-28 17:48:29.207931852 +0100 +++ /var/tmp/diff_new_pack.CLi2ci/_new 2026-10-28 17:48:29.210931978 +0100 @@ -18,7 +18,7 @@ Name: siege -Version: 4.2.0 +Version: 4.2.2 Release: 0 Summary: HTTP Regression Testing/Benchmarking Utility License: GPL-2.0-or-later ++++++ siege-4.2.0.tar.gz -> siege-4.2.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/ChangeLog new/siege-4.2.2/ChangeLog --- old/siege-4.2.0/ChangeLog 2026-08-18 21:16:15.000000000 +0200 +++ new/siege-4.2.2/ChangeLog 2026-10-27 20:14:08.000000000 +0100 @@ -1,6 +1,18 @@ To email a contributor remove "DELETE" from the email address. (The DELETEs are necessary as this list is published online.) +2026/10/27 Salma El-Sayed https://github.com/salmaaliia + * src/auth.c Silenced openssl deprecation warnings (JF) + * src/browser.c Collect and count HTTP errors by type + * src/browser.h Prototype: STATUS_MAP * browser_get_status_map(BROWSER this); + * src/main.c Added extended and extended-errors to getopts + * setup.h extended and extended-errors helpers + * src/version.c Version increment: 4.2.2 (JF) + +2026/09/30 Jeffrey Fulmer https://www.joedog.org/support/ + * src/cookie.c Fixed parsing error for RFC850 two-digit dates + * src/version.c Version increment: 4.2.1 + 2026/08/18 Jeffrey Fulmer https://www.joedog.org/support/ * src/init.c Fixed empty test for logfile[] * src/ftp.c Made Macintosh clang happy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/configure new/siege-4.2.2/configure --- old/siege-4.2.0/configure 2026-08-18 21:17:05.000000000 +0200 +++ new/siege-4.2.2/configure 2026-10-27 20:16:55.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for siege 4.2.0. +# Generated by GNU Autoconf 2.69 for siege 4.2.2. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ # Identity of this package. PACKAGE_NAME='siege' PACKAGE_TARNAME='siege' -PACKAGE_VERSION='4.2.0' -PACKAGE_STRING='siege 4.2.0' +PACKAGE_VERSION='4.2.2' +PACKAGE_STRING='siege 4.2.2' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1352,7 +1352,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures siege 4.2.0 to adapt to many kinds of systems. +\`configure' configures siege 4.2.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1423,7 +1423,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of siege 4.2.0:";; + short | recursive ) echo "Configuration of siege 4.2.2:";; esac cat <<\_ACEOF @@ -1539,7 +1539,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -siege configure 4.2.0 +siege configure 4.2.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1958,7 +1958,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by siege $as_me 4.2.0, which was +It was created by siege $as_me 4.2.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2823,7 +2823,7 @@ # Define the identity of the package. PACKAGE='siege' - VERSION='4.2.0' + VERSION='4.2.2' cat >>confdefs.h <<_ACEOF @@ -15251,7 +15251,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by siege $as_me 4.2.0, which was +This file was extended by siege $as_me 4.2.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15317,7 +15317,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -siege config.status 4.2.0 +siege config.status 4.2.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/doc/bombardment.1.in new/siege-4.2.2/doc/bombardment.1.in --- old/siege-4.2.0/doc/bombardment.1.in 2026-08-18 21:17:06.000000000 +0200 +++ new/siege-4.2.2/doc/bombardment.1.in 2026-10-27 20:16:56.000000000 +0100 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "BOMBARDMENT 1" -.TH BOMBARDMENT 1 "2026-08-18" "JoeDog" "bombardment" +.TH BOMBARDMENT 1 "2026-10-27" "JoeDog" "bombardment" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/doc/siege.1.in new/siege-4.2.2/doc/siege.1.in --- old/siege-4.2.0/doc/siege.1.in 2026-08-18 21:17:06.000000000 +0200 +++ new/siege-4.2.2/doc/siege.1.in 2026-10-27 20:16:56.000000000 +0100 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "SIEGE 1" -.TH SIEGE 1 "2026-08-18" "JoeDog" "Siege Load Tester" +.TH SIEGE 1 "2026-10-27" "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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/doc/siege.config.1.in new/siege-4.2.2/doc/siege.config.1.in --- old/siege-4.2.0/doc/siege.config.1.in 2026-08-18 21:17:06.000000000 +0200 +++ new/siege-4.2.2/doc/siege.config.1.in 2026-10-27 20:16:56.000000000 +0100 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "SIEGE.CONFIG 1" -.TH SIEGE.CONFIG 1 "2026-08-18" "JoeDog" "siege.config utility" +.TH SIEGE.CONFIG 1 "2026-10-27" "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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/doc/siege2csv.1.in new/siege-4.2.2/doc/siege2csv.1.in --- old/siege-4.2.0/doc/siege2csv.1.in 2026-08-18 21:17:06.000000000 +0200 +++ new/siege-4.2.2/doc/siege2csv.1.in 2026-10-27 20:16:56.000000000 +0100 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "BOMBARDMENT 1" -.TH BOMBARDMENT 1 "2026-08-18" "JoeDog" "siege2csv" +.TH BOMBARDMENT 1 "2026-10-27" "JoeDog" "siege2csv" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/src/auth.c new/siege-4.2.2/src/auth.c --- old/siege-4.2.0/src/auth.c 2026-08-18 20:52:31.000000000 +0200 +++ new/siege-4.2.2/src/auth.c 2026-10-27 20:01:40.000000000 +0100 @@ -39,6 +39,11 @@ #include <openssl/des.h> #include <openssl/md4.h> #include <openssl/opensslv.h> +# if OPENSSL_VERSION_NUMBER >= 0x30000000L +# if defined(__GNUC__) || defined(__clang__) +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +# endif +# endif # if OPENSSL_VERSION_NUMBER < 0x00907001L # define DES_key_schedule des_key_schedule # define DES_cblock des_cblock diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/src/browser.c new/siege-4.2.2/src/browser.c --- old/siege-4.2.0/src/browser.c 2026-08-18 20:52:31.000000000 +0200 +++ new/siege-4.2.2/src/browser.c 2026-10-27 20:01:40.000000000 +0100 @@ -104,6 +104,7 @@ unsigned long hits; unsigned long long bytes; unsigned int rseed; + STATUS_MAP status_map; }; size_t BROWSERSIZE = sizeof(struct BROWSER_T); @@ -229,6 +230,12 @@ return this->lomark; } +STATUS_MAP * +browser_get_status_map(BROWSER this) +{ + return &(this->status_map); +} + void * start(BROWSER this) { @@ -504,6 +511,12 @@ code = response_get_code(resp); + if (my.extended == EXT_ALL && code >= 200 && code < 600) { + status_map_increment(&(this->status_map), code, 1); + } else if (my.extended == EXT_ERRORS && code >= 400 && code < 600) { + status_map_increment(&(this->status_map), code, 1); + } + if (code == 418) { /** * I don't know what server we're talking to but I diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/src/browser.h new/siege-4.2.2/src/browser.h --- old/siege-4.2.0/src/browser.h 2026-08-18 20:52:31.000000000 +0200 +++ new/siege-4.2.2/src/browser.h 2026-10-27 20:01:40.000000000 +0100 @@ -45,5 +45,6 @@ unsigned int browser_get_fail(BROWSER this); float browser_get_himark(BROWSER this); float browser_get_lomark(BROWSER this); +STATUS_MAP * browser_get_status_map(BROWSER this); #endif/*__BROWSER_H*/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/src/cookie.c new/siege-4.2.2/src/cookie.c --- old/siege-4.2.0/src/cookie.c 2026-08-18 20:52:31.000000000 +0200 +++ new/siege-4.2.2/src/cookie.c 2026-10-27 18:54:10.000000000 +0100 @@ -14,7 +14,7 @@ size_t COOKIESIZE = sizeof(struct COOKIE_T); private BOOLEAN __parse_input(COOKIE this, char *str, char *host); -private int __parse_time(const char *str); +private time_t __parse_time(const char *str); private time_t __timegm(struct tm *tm); private int __mkmonth(char * s, char ** ends); private char * months[12] = { @@ -575,8 +575,8 @@ * Wkd Mon 00 00:00:00 0000 GMT (CTIME) * 1*DIGIT (delta-seconds) */ -private int -__parse_time(const char *str) +private time_t +__parse_time(const char *str) { char *s; struct tm tm; @@ -594,8 +594,14 @@ if ((int)strlen(s) < 18) return 0; tm.tm_mday = strtol(s, &s, 10); tm.tm_mon = __mkmonth(++s, &s); - tm.tm_year = strtol(++s, &s, 10); - tm.tm_year += (tm.tm_year < 70) ? 100 : 0; // 2-digit year correction + + long year = strtol(++s, &s, 10); + if (year >= 1900) { + tm.tm_year = year - 1900; + } else { + tm.tm_year = year + ((year < 70) ? 100 : 0); + } + tm.tm_hour = strtol(++s, &s, 10); tm.tm_min = strtol(++s, &s, 10); tm.tm_sec = strtol(++s, &s, 10); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/src/init.c new/siege-4.2.2/src/init.c --- old/siege-4.2.0/src/init.c 2026-08-18 20:52:31.000000000 +0200 +++ new/siege-4.2.2/src/init.c 2026-10-27 20:01:40.000000000 +0100 @@ -123,6 +123,7 @@ my.chunked = FALSE; my.unique = TRUE; my.json_output = FALSE; + my.extended = EXT_NONE; my.extra[0] = 0; my.follow = TRUE; my.zero_ok = TRUE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/src/main.c new/siege-4.2.2/src/main.c --- old/siege-4.2.0/src/main.c 2026-08-18 20:52:31.000000000 +0200 +++ new/siege-4.2.2/src/main.c 2026-10-27 20:01:40.000000000 +0100 @@ -84,6 +84,8 @@ { "user-agent", required_argument, NULL, 'A' }, { "content-type", required_argument, NULL, 'T' }, { "json-output", no_argument, NULL, 'j' }, + { "extended", no_argument, NULL, 'E' }, + { "extended-errors", no_argument, NULL, 'e' }, {0, 0, 0, 0} }; @@ -158,6 +160,8 @@ puts(" -A, --user-agent=\"text\" Sets User-Agent in request" ); puts(" -T, --content-type=\"text\" Sets Content-Type in request" ); puts(" -j, --json-output JSON OUTPUT, print final stats to stdout as JSON"); + puts(" -E, --extended EXTENDED, print breakdown of all HTTP status codes"); + puts(" -e, --extended-errors EXTENDED ERRORS, print breakdown of each error code"); puts(" --no-parser NO PARSER, turn off the HTML page parser"); puts(" --no-follow NO FOLLOW, do not follow HTTP redirects"); puts(""); @@ -180,7 +184,7 @@ strcpy(my.rc, ""); while( a > -1 ){ - a = getopt_long(argc, argv, "VhvqCDNFpgl::ibr:t:f:d:c:m:H:R:A:T:j", long_options, (int*)0); + a = getopt_long(argc, argv, "VhvqEeCDNFpgl::ibr:t:f:d:c:m:H:R:A:T:j", long_options, (int*)0); if(a == 'R'){ strcpy(my.rc, optarg); a = -1; @@ -199,7 +203,7 @@ { int c = 0; int nargs; - while ((c = getopt_long(argc, argv, "VhvqCDNFpgl::ibr:t:f:d:c:m:H:R:A:T:j", long_options, (int *)0)) != EOF) { + while ((c = getopt_long(argc, argv, "VhvqEeCDNFpgl::ibr:t:f:d:c:m:H:R:A:T:j", long_options, (int *)0)) != EOF) { switch (c) { case 'V': display_version(TRUE); @@ -302,6 +306,12 @@ case 'j': my.json_output = TRUE; break; + case 'E': + my.extended = EXT_ALL; + break; + case 'e': + my.extended = EXT_ERRORS; + break; } /* end of switch( c ) */ } /* end of while c = getopt_long */ @@ -423,6 +433,8 @@ pthread_t cease; pthread_t timer; pthread_attr_t scope_attr; + STATUS_MAP status_count; + memset(&status_count, 0, sizeof(STATUS_MAP)); file = xmalloc(sizeof (char*) * length); @@ -569,6 +581,7 @@ data_set_highest (data, browser_get_himark(B)); data_set_lowest (data, browser_get_lomark(B)); data_increment_cookies(data, browser_get_cookies(B)); + status_map_merge (&status_count, browser_get_status_map(B)); } crew_destroy(crew); __save_cookies(file, data_get_cookies(data)); @@ -598,6 +611,9 @@ 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)); + if (my.extended != EXT_NONE) { + status_map_print(&status_count); + } fprintf(stderr, " \n"); } @@ -628,7 +644,10 @@ printf("\t\"failed_transactions\":\t\t%12u,\n", my.failed); printf("\t\"longest_transaction\":\t\t%12.2f,\n", data_get_highest(data)); - printf("\t\"shortest_transaction\":\t\t%12.2f\n", data_get_lowest(data)); + printf("\t\"shortest_transaction\":\t\t%12.2f%s\n", data_get_lowest(data), (my.extended != EXT_NONE) ? "," : ""); + if (my.extended != EXT_NONE) { + status_map_print_json(&status_count); + } puts("}"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/src/setup.h new/siege-4.2.2/src/setup.h --- old/siege-4.2.0/src/setup.h 2026-08-18 20:52:31.000000000 +0200 +++ new/siege-4.2.2/src/setup.h 2026-10-27 20:01:40.000000000 +0100 @@ -133,6 +133,30 @@ char **line; } LINES; +typedef enum { + EXT_NONE = 0, + EXT_ERRORS = 1, /* --extended-errors (4xx, 5xx) */ + EXT_ALL = 2 /* --extended (all codes: 2xx-5xx) */ +} EXT_MODE; + +#define MAX_STATUS_TYPES 64 + +typedef struct{ + int code; /* HTTP status code, e.g. 404, 500 */ + unsigned int count; /* Number of occurrences */ +} STATUS_ENTRY; + +typedef struct { + STATUS_ENTRY entries[MAX_STATUS_TYPES]; + int total_types; +} STATUS_MAP; + +void status_map_increment(STATUS_MAP *map, int code, unsigned int count); +void status_map_sort(STATUS_MAP *map); +void status_map_merge(STATUS_MAP *dest, const STATUS_MAP *src); +void status_map_print(STATUS_MAP *map); +void status_map_print_json(STATUS_MAP *map); + void display_help(); void display_version(BOOLEAN b); @@ -197,7 +221,8 @@ BOOLEAN login; /* boolean, client must login first. */ char *loginurl; /* XXX: deprecated the initial login URL */ ARRAY lurl; - ARRAY aurl; + ARRAY aurl; + EXT_MODE extended; /* extended reporting mode */ 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' old/siege-4.2.0/src/util.c new/siege-4.2.2/src/util.c --- old/siege-4.2.0/src/util.c 2026-08-18 20:52:31.000000000 +0200 +++ new/siege-4.2.2/src/util.c 2026-10-27 20:01:40.000000000 +0100 @@ -415,3 +415,103 @@ return NULL; } #endif + +/** + * Increment the count for an error code, or add it as a new entry. + */ +void +status_map_increment(STATUS_MAP *map, int code, unsigned int count) +{ + if (map == NULL || count == 0) return; + + for (int i = 0; i < map->total_types; i++) { + if(map->entries[i].code == code) { + map->entries[i].count += count; + return; + } + } + + if (map->total_types < MAX_STATUS_TYPES) { + map->entries[map->total_types].code = code; + map->entries[map->total_types].count = count; + map->total_types++; + } +} + +/** + * Sort error map entries in ascending numerical order of HTTP status code. + */ +void +status_map_sort(STATUS_MAP *map) +{ + if (map == NULL || map->total_types <= 1) return; + + for (int i = 0; i < map->total_types - 1; i++) { + for (int j = 0; j < map->total_types - i - 1; j++) { + if (map->entries[j].code > map->entries[j + 1].code) { + STATUS_ENTRY temp = map->entries[j]; + map->entries[j] = map->entries[j + 1]; + map->entries[j + 1] = temp; + } + } + } +} + +/** + * Merge all error codes from a worker's map into the main total map. + */ +void +status_map_merge(STATUS_MAP *dest, const STATUS_MAP *src) +{ + if (dest == NULL || src == NULL) return; + + for(int i = 0; i < src->total_types; i++) { + status_map_increment(dest, src->entries[i].code, src->entries[i].count); + } +} + +/** + * Sort and print the error breakdown in Siege's summary table format. + */ +void +status_map_print(STATUS_MAP *map) +{ + if (map == NULL || map->total_types == 0) return; + + status_map_sort(map); + + if (my.extended == EXT_ERRORS) { + fprintf(stderr, "HTTP error response codes:\n"); + } else { + fprintf(stderr, "HTTP response codes:\n"); + } + + for (int i = 0; i < map->total_types; i++) { + fprintf(stderr, " HTTP-%d:\t\t%9u\n", map->entries[i].code, map->entries[i].count); + } +} + +/** + * Sort and print the error breakdown as JSON fields (for -j mode). + */ +void +status_map_print_json(STATUS_MAP *map) +{ + if (map == NULL || map->total_types == 0) return; + + status_map_sort(map); + + if (my.extended == EXT_ERRORS) { + printf("\t\"extended_errors\": {\n"); + } else { + printf("\t\"response_codes\": {\n"); + } + + for (int i = 0; i < map->total_types; i++) { + printf("\t\t\"HTTP-%d\":\t\t%12u%s\n", + map->entries[i].code, + map->entries[i].count, + (i < map->total_types - 1) ? "," : ""); + } + printf("\t}\n"); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/siege-4.2.0/src/version.c new/siege-4.2.2/src/version.c --- old/siege-4.2.0/src/version.c 2026-08-18 21:16:31.000000000 +0200 +++ new/siege-4.2.2/src/version.c 2026-10-27 20:14:19.000000000 +0100 @@ -4,7 +4,7 @@ * used by configure to dynamically assign those values * to documentation files. */ -const char *version_string = "4.2.0"; +const char *version_string = "4.2.2"; const char *program_name = "siege"; const char *author_name = "Jeffrey Fulmer, et al."; const char *email_address = "[email protected]";
