ksgi

Форк
0
/
versions.xml 
1751 строка · 67.1 Кб
1
<?xml version="1.0" encoding="UTF-8" ?>
2
<!-- vim: set tw=100: -->
3
<articles>
4
	<article data-sblg-article="1" data-sblg-tags="version">
5
		<header>
6
			<h1>0.13.3</h1>
7
			<address>Kristaps Dzonsons</address>
8
			<time datetime="2023-12-02">2023-12-02</time>
9
		</header>
10
		<aside>
11
			<div>
12
				Fix shared library on Mac OS X.
13
			</div>
14
		</aside>
15
	</article>
16
	<article data-sblg-article="1" data-sblg-tags="version">
17
		<header>
18
			<h1>0.13.2</h1>
19
			<address>Kristaps Dzonsons</address>
20
			<time datetime="2023-11-25">2023-11-25</time>
21
		</header>
22
		<aside>
23
			<div>
24
				Un-break seccomp for i386.
25
			</div>
26
			<div>
27
				Start installing shared libraries alongside the static archives.
28
				Also restrict symbol visibility to the contents of the public header
29
				files.
30
			</div>
31
			<div>
32
				Decouple writer libraries (<a href="kcgihtml.3.html">kcgihtml(3)</a>
33
				and such) from reaching into private functions of 
34
				<a href="libkcgi.3.html">libkcgi(3)</a>.  This meant moving some
35
				writer functions (e.g., 
36
				<a href="kcgi_writer_write.3.html">kcgi_writer_write(3)</a> into the
37
				public header file.
38
				This also allows for creating external writer routines.
39
			</div>
40
		</aside>
41
	</article>
42
	<article data-sblg-article="1" data-sblg-tags="version">
43
		<header>
44
			<h1>0.13.1</h1>
45
			<address>Kristaps Dzonsons</address>
46
			<time datetime="2023-11-19">2023-11-19</time>
47
		</header>
48
		<aside>
49
			<div>
50
				Re-enable seccomp by default after introducing
51
				<a href="https://github.com/kristapsdz/kcgi/actions">GitHub actions</a>
52
				to test on
53
				alternate architectures (armv7, aarch64, etc.).
54
			</div>
55
			<div>
56
				Add
57
				<a href="khttp_fcgi_getfd.3.html">khttp_fcgi_getfd(3)</a>, which
58
				allows for asynchronous applications (those with a descriptor
59
				polling loop) to incorporate <span class="nm">kcgi</span>.
60
			</div>
61
		</aside>
62
	</article>
63
	<article data-sblg-article="1" data-sblg-tags="version">
64
		<header>
65
			<h1>0.13.0</h1>
66
			<address>Kristaps Dzonsons</address>
67
			<time datetime="2021-09-23">2021-09-23</time>
68
		</header>
69
		<aside>
70
			<div>
71
				<strong>Disable Linux's seccomp by default.</strong>
72
				I'm just not able to maintain this facility in a reliable way.  For
73
				future work, it looks like <a href="https://landlock.io">landlock</a>
74
				might be a better solution.  Maintainers can enable seccomp by
75
				editing the Makefile to re-add support.  (This will also add
76
				debugging.)  I'll continue to add patches for those running with
77
				seccomp, but don't have the bandwidth to test them.
78
			</div>
79
			<div>
80
				Allow
81
				<a href="khttpbasic_validate.3.html">khttpbasic_validate(3)</a>
82
				to validate both <q>bearer</q> and <q>basic</q> requests.
83
				This follows from conventional usage of bearer tokens.
84
			</div>
85
		</aside>
86
	</article>
87
	<article data-sblg-article="1" data-sblg-tags="version">
88
		<header>
89
			<h1>0.12.5</h1>
90
			<address>Kristaps Dzonsons</address>
91
			<time datetime="2021-05-08">2021-05-08</time>
92
		</header>
93
		<aside>
94
			<div>
95
				Add support for <q>bearer</q> authorisation tokens.  These are
96
				described in 
97
				<a href="https://tools.ietf.org/html/rfc6750">RFC 6750</a>.
98
				Fix <a href="khttp_fcgi_test.3.html">khttp_fcgi_test(3)</a> to work
99
				properly when in variable-pool mode.
100
			</div>
101
		</aside>
102
	</article>
103
	<article data-sblg-article="1" data-sblg-tags="version">
104
		<header>
105
			<h1>0.12.4</h1>
106
			<address>Kristaps Dzonsons</address>
107
			<time datetime="2021-03-02">2021-03-02</time>
108
		</header>
109
		<aside>
110
			<div>
111
				Add some attributes and elements for
112
				<a href="https://www.w3.org/TR/html52/">HTML5.2</a>, which is the
113
				standard supported by <a href="kcgihtml.3.html">kcgihtml(3)</a>.
114
			</div>
115
		</aside>
116
	</article>
117
	<article data-sblg-article="1" data-sblg-tags="version">
118
		<header>
119
			<h1>0.12.3</h1>
120
			<address>Kristaps Dzonsons</address>
121
			<time datetime="2021-01-20">2021-01-20</time>
122
		</header>
123
		<aside>
124
			<div>
125
				<b>Bug fix</b>: fix some bad pointer arithmetic on a regression test
126
				on Linux.  While here, fix how <code>make regress</code> would spam
127
				some systems with erroneous warning messages.
128
			</div>
129
		</aside>
130
	</article>
131
	<article data-sblg-article="1" data-sblg-tags="version">
132
		<header>
133
			<h1>0.12.2</h1>
134
			<address>Kristaps Dzonsons</address>
135
			<time datetime="2020-07-24">2020-07-24</time>
136
		</header>
137
		<aside>
138
			<div>
139
				<b>Bug fix</b>: some errors encountered writing connection
140
				file-descriptors to child processors in FastCGI were accidentally
141
				ignored.
142
				This came because the function returned success, failure, or hangup,
143
				while the caller was testing for failure/success.
144
				No such error has ever been reported in the wild&#8212;it would
145
				probably signify much larger issues that would soon be caught
146
				anyway&#8212;but the fix is still valid.
147
			</div>
148
			<div>
149
				Significant simplification of the back-end in removing several
150
				crufty interfaces.
151
				Back-end logging now uses the front-end logging functions for
152
				consistency and to avoid having separate loggers.
153
				The same applies to the <code>debugging</code> parameter passed into
154
				<a href="khttp_parse.3.html">khttp_parse(3)</a>.
155
			</div>
156
			<div>
157
				<b>Bug fix</b> for FreeBSD with Capsicum when logging to a file
158
				opened with <a href="kutil_openlog.3.html">kutil_openlog(3)</a>.
159
				Same goes with the Linux and Darwin sandboxes.
160
			</div>
161
		</aside>
162
	</article>
163
	<article data-sblg-article="1" data-sblg-tags="version">
164
		<header>
165
			<h1>0.12.1</h1>
166
			<address>Kristaps Dzonsons</address>
167
			<time datetime="2020-05-11">2020-05-11</time>
168
		</header>
169
		<aside>
170
			<div>
171
				Deprecate
172
				<code>kutil_date2epoch</code>,
173
				<code>kutil_date_check</code>,
174
				<code>kutil_datetime2epoch</code>, and
175
				<code>kutil_datetime_check</code>
176
				in favour of
177
				<a href="khttp_datetime2epoch.3.html">khttp_datetime2epoch(3)</a> and
178
				<a href="khttp_datetime2epoch.3.html">khttp_date2epoch(3)</a>.
179
				These variants use portable implementations of
180
				<a href="https://man.openbsd.org/gmtime">gmtime(3)</a> and
181
				<a href="https://man.openbsd.org/timegm">timegm(3)</a> 
182
				that are not
183
				encumbered by per-system constraints such as FreeBSD not accepting
184
				years prior to 1900 and of course the 32-bit problem.
185
			</div>
186
			<div>
187
				Add 
188
				<a href="khttp_epoch2datetime.3.html">khttp_epoch2datetime(3)</a>
189
				to symmetrise
190
				<a href="khttp_datetime2epoch.3.html">khttp_datetime2epoch(3)</a>.
191
			</div>
192
			<div>
193
				Further deprecate <code>kutil_epoch2str</code>, 
194
				<code>kutil_epoch2utcstr</code>, 
195
				<code>kutil_epoch2tmvals</code>, and
196
				<code>KUTIL_EPOCH2TM</code> as
197
				<a href="khttp_epoch2str.3.html">khttp_epoch2str</a>, 
198
				<a href="khttp_epoch2str.3.html">khttp_epoch2ustr</a>, 
199
				<a href="khttp_epoch2tms.3.html">khttp_epoch2tms</a>, and
200
				<a href="khttp_epoch2tms.3.html">KHTTP_EPOCH2TM</a>, respectively.
201
				The new forms, besides having consistent naming, specifically
202
				account for corner cases like negative dates, years with more than
203
				four digits, etc.
204
				These no longer use the system
205
				<a href="https://man.openbsd.org/strtime">strtime(3)</a>
206
				due to inconsistencies between implementations (e.g., Oracle Solaris
207
				not printing &gt;4 digit years) and the 32-bit problem.
208
			</div>
209
		</aside>
210
	</article>
211
	<article data-sblg-article="1" data-sblg-tags="version">
212
		<header>
213
			<h1>0.12.0</h1>
214
			<address>Kristaps Dzonsons</address>
215
			<time datetime="2020-04-10">2020-04-10</time>
216
		</header>
217
		<aside>
218
			<div>
219
				Add the <a href="khttp_urlpart.3.html">khttp_urlpart(3)</a> family
220
				to replace the now-deprecated <code>kutil_urlpart</code> functions.
221
				These are for the most part a re-name of the old functions that
222
				remove the unused <code>struct kreq</code> argument.
223
				There are some small behaviour changes from the original in corner
224
				case usage: they have an empty suffix (not just <code>NULL</code>)
225
				inhibit printing the dot-suffix, allow a <code>NULL</code> page, and
226
				have an empty or <code>NULL</code> page also inhibit the suffix.
227
				This way, these functions only produce valid URLs, and also allow
228
				for some previously-disallowed (but valid) forms such as
229
				<code>/?foo=bar</code>.
230
			</div>
231
			<div>
232
				The previous functions have been retained with the original
233
				behaviour <strong>with one exception</strong>: before, an empty
234
				suffix would still print the period separator.  Now, this is
235
				suppressed.
236
			</div>
237
			<div>
238
				The <code>khttp_vurlpart</code> and <code>khttp_vurlpartx</code>
239
				forms, which accept a variable-length type, are also now exposed for
240
				use.
241
			</div>
242
			<div>
243
				Add the <a href="khttp_urlabs.3.html">khttp_urlabs(3)</a> function,
244
				which is similar to the earlier <code>kutil_urlabs</code> but
245
				significantly more robust and accepts query string arguments.
246
				The earlier <code>kutil_urlabs</code> is retained, but deprecated.
247
			</div>
248
			<div>
249
				Add <a href="khttp_urlencode.3.html">khttp_urlencode(3)</a> and
250
				<a href="khttp_urldecode.3.html">khttp_urldecode(3)</a>,
251
				replacing the legacy <code>kutil_urlencode</code> and
252
				<code>kutil_urldecode</code>.  They're identical
253
				except in how <code>NULL</code> values are handled, in the first
254
				case returning them as empty strings instead of <code>NULL</code>,
255
				in the second regarding them as errors.
256
				For the encoder, this allows all URL formatting tools to pass
257
				<code>NULL</code> values as query string values without errors.
258
				The earlier functions have been retained with the original behaviour
259
				<strong>with one exception</strong>, in that a <code>NULL</code>
260
				destination argument for <code>kutil_urldecode</code> triggers a
261
				<code>KCGI_FORM</code> return.
262
			</div>
263
			<div>
264
				Have <a href="kxml_puts.3.html">kxml_puts(3)</a>
265
				and <a href="kxml_write.3.html">kxml_write(3)</a>
266
				handle <code>NULL</code> pointers as content.
267
			</div>
268
			<div>
269
				Verify and fix that all scope-opening functions in
270
				<a href="kcgixml.3.html">kcgixml(3)</a> and
271
				<a href="kcgihtml.3.html">kcgihtml(3)</a>
272
				properly close variable arguments contexts on error.
273
			</div>
274
			<div>
275
				Instead of aborting when the maximum number of scopes in
276
				<a href="kcgijson.3.html">kcgijson(3)</a>,
277
				<a href="kcgihtml.3.html">kcgihtml(3)</a>, or
278
				<a href="kcgixml.3.html">kcgixml(3)</a>
279
				has been reached, return <code>KCGI_ENOMEM</code>.
280
			</div>
281
			<div>
282
				Check that the element index passed to
283
				<a href="kxml_pushnull.3.html">kxml_pushnull(3)</a> is valid.
284
			</div>
285
			<div>
286
				<strong>Behaviour change</strong>: previously, several
287
				<a href="kcgixml.3.html">kcgixml(3)</a> functions would return 
288
				<code>KCGI_FORM</code>, such as when popping from an empty stack.
289
				To prevent other <code>KCGI_FORM</code> errors from being masked,
290
				use <code>KCGI_WRITER</code> to handle these situations.
291
			</div>
292
			<div>
293
				Split apart <a href="kcgixml.3.html">kcgixml(3)</a> into one manpage
294
				per function.
295
			</div>
296
		</aside>
297
	</article>
298
	<article data-sblg-article="1" data-sblg-tags="version">
299
		<header>
300
			<h1>0.11.0</h1>
301
			<address>Kristaps Dzonsons</address>
302
			<time datetime="2020-03-27">2020-03-27</time>
303
		</header>
304
		<aside>
305
			<div>
306
				Bumping minor number due to some API and behaviour changes.
307
			</div>
308
			<div>
309
				<strong>API change</strong>: previously,
310
				<a href="khtml_ncr.3.html">khtml_ncr(3)</a> accepted a 
311
				<code>uint16_t</code> for its entity value.
312
				However, these values can legitimately be 32 bits.
313
				It has been changed to <code>uint32_t</code>.
314
			</div>
315
			<div>
316
				<strong>API change</strong>: the <code>struct khtmlreq</code>
317
				pointer passed into
318
				<a href="khtml_elemat.3.html">khtml_elemat(3)</a> is now
319
				<code>const</code>.
320
			</div>
321
			<div>
322
				<strong>Behaviour change</strong>: previously,
323
				<a href="khtml_closeto.3.html">khtml_closeto(3)</a> would return
324
				<code>KCGI_FORM</code> if given a stack position greater than the
325
				current stack.
326
				This is inconsistent with other functions, so such values are now
327
				simply ignored.
328
				It also masks other problems that cause <code>KCGI_FORM</code> to
329
				return.
330
				Furthermore, if this function was invoked at the current depth, it
331
				would close all scopes instead of none.
332
				This has also been fixed.
333
			</div>
334
			<div>
335
				<strong>Behaviour change</strong>: previously, many
336
				<a href="kcgijson.3.html">kcgijson(3)</a> functions would return
337
				<code>KCGI_FORM</code> if used out-of-context, for example, trying
338
				to open a named object in an array context.
339
				To prevent other <code>KCGI_FORM</code> errors from being masked,
340
				introduce a new error code <code>KCGI_WRITER</code> to handle these
341
				situations.
342
			</div>
343
			<div>
344
				Passing a
345
				<code>NULL</code> pointer value to the string writing functions of
346
				<a href="khttp_puts.3.html">khttp_puts(3)</a>,
347
				<a href="khttp_write.3.html">khttp_write(3)</a>,
348
				<a href="kcgihtml.3.html">kcgihtml(3)</a> or
349
				<a href="kcgijson.3.html">kcgijson(3)</a> would cause undefined
350
				behaviour.
351
				Now these are noops.
352
			</div>
353
			<div>
354
				Add 
355
				<a href="khtml_printf.3.html">khtml_printf(3)</a>.
356
				Split apart
357
				<a href="kcgihtml.3.html">kcgihtml(3)</a> into one manpage per function.
358
				Split apart
359
				<a href="kcgijson.3.html">kcgijson(3)</a> into one manpage per function.
360
			</div>
361
		</aside>
362
	</article>
363
	<article data-sblg-article="1" data-sblg-tags="version">
364
		<header>
365
			<h1>0.10.18</h1>
366
			<address>Kristaps Dzonsons</address>
367
			<time datetime="2020-03-22">2020-03-22</time>
368
		</header>
369
		<aside>
370
			<div>
371
				Add 
372
				<a href="khttp_printf.3.html">khttp_printf(3)</a> and
373
				<a href="kcgi_buf_printf.3.html">kcgi_buf_printf(3)</a>.
374
				Split out manual pages for
375
				<a href="khttp_putc.3.html">khttp_putc(3)</a>,
376
				<a href="khttp_puts.3.html">khttp_puts(3)</a>,
377
				<a href="khttp_printf.3.html">khttp_printf(3)</a>, and
378
				<a href="khttp_write.3.html">khttp_write(3)</a>; and also
379
				<a href="kcgi_buf_putc.3.html">kcgi_buf_putc(3)</a>,
380
				<a href="kcgi_buf_puts.3.html">kcgi_buf_puts(3)</a>,
381
				<a href="kcgi_buf_printf.3.html">kcgi_buf_printf(3)</a>, and
382
				<a href="kcgi_buf_write.3.html">kcgi_buf_write(3)</a>.
383
				Add many more regression tests for the behaviour of these functions.
384
			</div>
385
		</aside>
386
	</article>
387
	<article data-sblg-article="1" data-sblg-tags="version">
388
		<header>
389
			<h1>0.10.16</h1>
390
			<address>Kristaps Dzonsons</address>
391
			<time datetime="2020-03-17">2020-03-17</time>
392
		</header>
393
		<aside>
394
			<div>
395
				System now works out-of-the-box on OpenBSD, FreeBSD, NetBSD, Linux, 
396
				SunOS, OmniOS (IllumOS), Darwin.
397
			</div>
398
		</aside>
399
	</article>
400
	<article data-sblg-article="1" data-sblg-tags="version">
401
		<header>
402
			<h1>0.10.15</h1>
403
			<address>Kristaps Dzonsons</address>
404
			<time datetime="2020-03-11">2020-03-11</time>
405
		</header>
406
		<aside>
407
			<div>
408
				Portability updates to the build system.
409
				Bring in the newest 
410
				<a href="https://github.com/kristapsdz/oconfigure">oconfigure</a>.
411
			</div>
412
		</aside>
413
	</article>
414
	<article data-sblg-article="1" data-sblg-tags="version">
415
		<header>
416
			<h1>0.10.14</h1>
417
			<address>Kristaps Dzonsons</address>
418
			<time datetime="2020-02-27">2020-02-27</time>
419
		</header>
420
		<aside>
421
			<div>
422
				Start using 
423
				<a href="https://man.openbsd.org/pkg-config">pkg-config</a> for all
424
				<span class="nm">kcgi</span> libraries.
425
				This makes it much easier to use the system without knowing
426
				installation details.
427
				All documentation has been upgraded to note the fact.
428
			</div>
429
		</aside>
430
	</article>
431
	<article data-sblg-article="1" data-sblg-tags="version">
432
		<header>
433
			<h1>0.10.13</h1>
434
			<address>Kristaps Dzonsons</address>
435
			<time datetime="2020-02-17">2020-02-17</time>
436
		</header>
437
		<aside>
438
			<div>
439
				Re-write the internal logging function so that it does not use a
440
				static buffer, lifting the previous 1024 byte limit.
441
				This means that log messages might exhaust memory, but that seems
442
				the lesser of two evils.
443
			</div>
444
			<div>
445
				Relax <a href="kvalid_string.3.html">kvalid_email(3)</a> so that it
446
				accepts three-byte e-mails (e.g., <code>a@b</code>) but tighten it
447
				to require not starting or ending with a <code>@</code>.
448
			</div>
449
			<div>
450
				Add a new user-visible wrapper function, <a
451
					href="kmalloc.3.html">kvasprintf(3)</a>.
452
			</div>
453
			<div>
454
				Protect against <code>NULL</code> format strings being passed to the
455
				logging functions.
456
			</div>
457
		</aside>
458
	</article>
459
	<article data-sblg-article="1" data-sblg-tags="version">
460
		<header>
461
			<h1>0.10.12</h1>
462
			<address>Kristaps Dzonsons</address>
463
			<time datetime="2020-01-12">2020-01-12</time>
464
		</header>
465
		<aside>
466
			<div>
467
				Fix regression framework.
468
				This was failing for FastCGI tests because the framework wasn't
469
				properly prefixing the HTTP version as it was for CGI tests.
470
				This now allows all tests to run under the new curl.
471
			</div>
472
			<div>
473
				Use the proper Capsicum header for FreeBSD.
474
			</div>
475
			<div>
476
				Bring in the latest <a
477
					href="https://github.com/kristapsdz/oconfigure">oconfigure</a>
478
				and also merge dependent changes for seccomp on Linux.
479
				Then enable seccomp protection for aarch64 on Linux.
480
			</div>
481
			<div>
482
				Bring in optimisations and corrections in URL decoding by Dapeng
483
				Gao, thanks!
484
			</div>
485
		</aside>
486
	</article>
487
	<article data-sblg-article="1" data-sblg-tags="version">
488
		<header>
489
			<h1>0.10.11</h1>
490
			<address>Kristaps Dzonsons</address>
491
			<time datetime="2019-07-05">2019-07-05</time>
492
		</header>
493
		<aside>
494
			<div>
495
				Maintenance release: 
496
				bring up to date with latest <a
497
					href="https://github.com/kristapsdz/oconfigure">oconfigure</a>,
498
				merge pending <a href="https://github.com/kristapsdz/kcgi">GitHub</a> pulls.
499
			</div>
500
		</aside>
501
	</article>
502
	<article data-sblg-article="1" data-sblg-tags="version">
503
		<header>
504
			<h1>0.10.10</h1>
505
			<address>Kristaps Dzonsons</address>
506
			<time datetime="2018-12-27">2018-12-27</time>
507
		</header>
508
		<aside>
509
			<div>
510
				A lot of work for functioning on FreeBSD (specifically, breakage 
511
				with the sandbox) and musl libc.
512
				Thanks to <code>href@random.sh</code> for access to a FreeBSD
513
				machine for testing and solving this issue!
514
			</div>
515
			<div>
516
				Add <a href="kutil_urlencode.3.html">kutil_urldecode(3)</a> and
517
				<a href="kutil_urlencode.3.html">kutil_urldecode_inplace(3)</a>,
518
				which are the reverse of the existing encode functions.
519
			</div>
520
			<div>
521
				Also, revert to using BSD Makefile instead of GNU.
522
				Linux downstream will need to adjust to use <code>bmake</code> for 
523
				the build sequence.
524
			</div>
525
		</aside>
526
	</article>
527
	<article data-sblg-article="1" data-sblg-tags="version">
528
		<header>
529
			<h1>0.10.8</h1>
530
			<address>Kristaps Dzonsons</address>
531
			<time datetime="2018-12-18">2018-12-18</time>
532
		</header>
533
		<aside>
534
			<div>
535
				Good-bye, systrace(4)&#8230;
536
			</div>
537
			<div>
538
				Many minor documentation fixes from the GitHub pulls and issues page.
539
				Thank you for everybody's submissions!
540
			</div>
541
			<div>
542
				Many thanks to Valentin Pistol for verifying that the regressions
543
				suite works properly on newer (Majove) builds of MacOS.
544
			</div>
545
			<div>
546
				Allow compilation on 
547
				<a href="https://www.musl-libc.org/">musl</a> 
548
				by bringing in latest 
549
				<a href="https://github.com/kristapsdz/oconfigure">oconfigure</a>
550
				and making some tweaks.
551
				This also makes building without zlib to complete without compiler
552
				warnings.
553
			</div>
554
			<div>
555
				Fix transmitting certain UTF-8 characters via JSON.
556
			</div>
557
		</aside>
558
	</article>
559
	<article data-sblg-article="1" data-sblg-tags="version">
560
		<header>
561
			<h1>0.10.7</h1>
562
			<address>Kristaps Dzonsons</address>
563
			<time datetime="2018-06-19">2018-06-19</time>
564
		</header>
565
		<aside>
566
			<div>
567
				Some excellent fixes from <a
568
					href="https://github.com/mk-f">mk-f@</a> in getting better
569
				support for <a href="https://kristaps.bsd.lv/kcaldav">kcaldav</a>: 
570
				fixing the <code>nc</code> value in digest authentication to be hex
571
				and adding support for <code>application/xml</code> to the list of
572
				supported MIME types.
573
				Thanks!
574
			</div>
575
			<div>
576
				Remove <strong>-lbsd</strong> requirement for Linux regression
577
				tests.
578
				Fix another issue where <a
579
					href="https://man.openbsd.org/fpclassify.3">fpclassify(3)</a>
580
				on Linux requires <strong>-lm</strong>.
581
			</div>
582
		</aside>
583
	</article>
584
	<article data-sblg-article="1" data-sblg-tags="version">
585
		<header>
586
			<h1>0.10.6</h1>
587
			<address>Kristaps Dzonsons</address>
588
			<time datetime="2018-04-19">2018-04-19</time>
589
		</header>
590
		<aside>
591
			<div>
592
				Quick fix from Ross Richardson regarding URL encoding with the high bit set.
593
				Thank you so much!
594
				Also push in some small fixes from the <a
595
					href="https://github.com/kristapsdz/kcgi">GitHub</a> list.
596
			</div>
597
		</aside>
598
	</article>
599
	<article data-sblg-article="1" data-sblg-tags="version">
600
		<header>
601
			<h1>0.10.5</h1>
602
			<address>Kristaps Dzonsons</address>
603
			<time datetime="2018-04-19">2018-04-19</time>
604
		</header>
605
		<aside>
606
			<div>
607
				Add <a href="kcgi_strerror.3.html">kcgi_strerror(3)</a> for a string
608
				representation of the error codes.  Split <a
609
					href="kutil_invalidate.3.html">kutil_invalidate(3)</a> into
610
				its own manpage.
611
				Fix up some corner cases in template handling: trailing delimiters,
612
				empty key sequences, and so on.
613
				Also allow for escaping delimeters, <code>\@@</code>, allowing for
614
				the existence of delimeters as opaque text.
615
			</div>
616
			<div>
617
				These fixes were implemented or suggested by Ingo Schwarze
618
				(<q>schwarze@</q>) in an audit generously funded by CAPEM Solutions,
619
				Inc.  
620
				Thank you so much!
621
			</div>
622
		</aside>
623
	</article>
624
	<article data-sblg-article="1" data-sblg-tags="version">
625
		<header>
626
			<h1>0.10.3</h1>
627
			<address>Kristaps Dzonsons</address>
628
			<time datetime="2018-04-10">2018-04-10</time>
629
		</header>
630
		<aside>
631
			<div>
632
				The <q>FastCGI release</q>: when running <span
633
					class="nm">kcgi</span>'s FastCGI mode on nginx, processes
634
				were being mysteriously killed under high load.
635
				This was due to the end-point closing the connection before all data
636
				was being read or written.
637
				To wit, I now establish a difference (in FastCGI) between the
638
				connection closing (which is a recoverable error) and the manager
639
				killing the connection or the control socket exiting, which are not
640
				recoverable.
641
				Since most of this development was on Linux/ARM with nginx, the
642
				sandbox for Linux has also been tooled up.
643
				A <strong>big</strong> thanks to Elouan Pignet, who was kind enough
644
				to diagnose the problem and provide access to his system for a fix,
645
				including several failed attempts.
646
				Thanks, Elouan!
647
			</div>
648
			<div>
649
				To this end (<strong>API change</strong>), <a
650
					href="khttp_fcgi_parse.3.html">khttp_fcgi_parse(3)</a> now
651
				returns the <code>KCGI_EXIT</code> when the system has exited.
652
				The <code>KCGI_HUP</code> is reserved for when the output channel
653
				has closed (after parsing) and the current connection is no longer
654
				valid.
655
				The documentation has been updated for relevant functions.
656
			</div>
657
			<div>
658
				While studying these code paths, make sure that a sequence of writes
659
				(using <a href="khttp_write.3.html">khttp_write(3)</a> or any of the
660
				writing front-ends) won't fail if <a
661
					href="khttp_body.3.html">khttp_body(3)</a> wasn't able to
662
				complete due to the connection closing.
663
				Specifically, if the connection closes during  <a
664
					href="khttp_body.3.html">khttp_body(3)</a> (returning
665
				<code>KCGI_HUP</code>), the system will still expect headers.
666
				Earlier, it would assert with subsequent <a
667
					href="khttp_write.3.html">khttp_write(3)</a> if the error
668
				were not caught and the 
669
				In the modified behaviour, it will return <code>KCGI_FORM</code> to
670
				indicate that the system is out of state.
671
			</div>
672
			<div>
673
				Make <a href="khttp_fcgi_parse.3.html">khttp_fcgi_parse(3)</a> only
674
				require that callers invoke <a
675
					href="khttp_free.3.html">khttp_free(3)</a> if exiting with success.
676
				This mirrors <a href="khttp_parse.3.html">khttp_parse(3)</a>.
677
			</div>
678
			<div>
679
				Merge a set of tutorial fixes from <a
680
					href="https://github.com/cyball">cyball</a>, thanks!
681
			</div>
682
			<div>
683
				Allow the <a href="kutil_log.3.html">kutil_log(3)</a> functions to
684
				accept a <code>NULL</code> request.
685
				This makes it possible to use these functions for consistent logging
686
				without a request.
687
			</div>
688
			<div>
689
				Lastly, run through all code snippets, apply <a
690
					href="https://man.openbsd.org/style.9">style(9)</a>, and
691
				make sure that the MIME type is properly checked.
692
				And add a new tutorial, <a href="tutorial6.html">Best practises for
693
					pledge(2) security</a>.
694
			</div>
695
		</aside>
696
	</article>
697
	<article data-sblg-article="1" data-sblg-tags="version">
698
		<header>
699
			<h1>0.10.2</h1>
700
			<address>Kristaps Dzonsons</address>
701
			<time datetime="2018-03-24">2018-03-24</time>
702
		</header>
703
		<aside>
704
			<div>
705
				Merge a set of patches from <a
706
					href="https://github.com/kristapsdz/kcgi/pull/26">pull/26</a>.
707
				These fix the digest authorisation in <q>auth-int</q> mode, most
708
				often used by CalDAV systems.
709
				Thanks to Charles Collicutt for the contribution!
710
			</div>
711
			<div>
712
				While raising <a href="https://kristaps.bsd.lv/kcaldav">kcaldav</a>
713
				from the dead, fix where the XML writer wasn't returning the correct
714
				error code and causing strange errors.
715
			</div>
716
			<div>
717
				Lastly, fix the Linux sandbox when running on ARM machines, enable
718
				building for C++ applications, and add a tutorial and sample file.
719
				Pull in most recent <a href="https://github.com/kristapsdz/oconfigure">oconfigure</a>.
720
			</div>
721
		</aside>
722
	</article>
723
	<article data-sblg-article="1" data-sblg-tags="version">
724
		<header>
725
			<h1>0.10.1</h1>
726
			<address>Kristaps Dzonsons</address>
727
			<time datetime="2018-03-06">2018-03-06</time>
728
		</header>
729
		<aside>
730
			<div>
731
				Many of the improvements and fixes in this release were implemented or
732
				suggested by Ingo Schwarze (<q>schwarze@</q>) in an audit generously
733
				funded by CAPEM Solutions, Inc.  
734
				Thank you so much!
735
			</div>
736
			<div>
737
				Proper versioning in the header file as documented in <a
738
					href="kcgi.3.html">kcgi(3)</a>.
739
			</div>
740
			<div>
741
				Fix <a href="kcgijson.3.html">kcgijson_string_write(3)</a> and
742
				friends to not emit a superfluous quote before each invocation.
743
			</div>
744
			<div>
745
				Add <a href="kcgi_buf_write.3.html">kcgi_buf_write(3)</a> and
746
				friends to make working with
747
				<a href="khttp_template.3.html">khttp_templatex(3)</a> easier.
748
				(I also use it for <a
749
					href="https://curl.haxx.se/libcurl">libcurl(3)</a> in-memory
750
				buffers.)
751
			</div>
752
			<div>
753
				<strong>API change</strong>: complete the change-over to writing
754
				functions returning values by modifying <a
755
					href="khttp_template.3.html">khttp_template(3)</a> and
756
				friends to return a proper error code.
757
				While here, significantly improve the manpage.
758
			</div>
759
		</aside>
760
	</article>
761
	<article data-sblg-article="1" data-sblg-tags="version">
762
		<header>
763
			<h1>0.10.0</h1>
764
			<address>Kristaps Dzonsons</address>
765
			<time datetime="2018-01-18">2018-01-18</time>
766
		</header>
767
		<aside>
768
			<div>
769
				A minor bump here due to API changes, along with a plethora of
770
				improvements: date handling, simplification of general code, and
771
				getting error codes exported in the write sequence.
772
				Many of the improvements and fixes in this release were implemented or
773
				suggested by Ingo Schwarze (<q>schwarze@</q>) in an audit generously
774
				funded by CAPEM Solutions, Inc.  
775
				Thank you so much!
776
			</div>
777
			<div>
778
				<strong>Memory leak fix</strong>: fix <a
779
					href="khttp_free.3.html">khttp_free(3)</a> to free a
780
				forgotten allocation.
781
				Probably only affects FastCGI processes at 16 bytes lost per request
782
				parsed.
783
			</div>
784
			<div>
785
				<strong>Feature</strong>: add the <a
786
					href="kcgi_writer_disable.3.html">kcgi_writer_disable(3)</a>
787
				function, which allows callers to
788
				determine which front-end writers (e.g.,
789
				<a href="kcgixml.3.html">kcgixml(3)</a>)
790
				are allowed to exist.
791
				This locks down the output formatting mechanism.
792
			</div>
793
			<div>
794
				<strong>API change</strong>: the <a
795
					href="kcgixml.3.html">kcgixml(3)</a> library now no longer
796
				prints the XML prologue with <code>kxml_open()</code>.
797
				This must be manually printed with <code>kxml_prologue()</code>.
798
			</div>
799
			<div>
800
				<strong>API change</strong>: the 
801
				<a href="kcgijson.3.html">kcgijson(3)</a>,
802
				<a href="kcgihtml.3.html">kcgihtml(3)</a>, and
803
				<a href="kcgixml.3.html">kcgixml(3)</a> now return a consistent
804
				error code for all operations.
805
				The <code>khtml_text</code> function has been removed (it was deprecated).
806
			</div>
807
			<div>
808
				<strong>API change</strong>: the 
809
				<a href="kutil_urlencode.3.html">kutil_urlencode(3)</a> family of
810
				functions now all return <code>NULL</code> on memory failure.
811
				Earlier, this was inconsistent.
812
			</div>
813
			<div>
814
				<strong>API change</strong>: the
815
				<a href="khttp_write.3.html">khttp_write(3)</a> family of
816
				functions now all return <code>enum kcgi_err</code> to indicate a
817
				failure condition.
818
			</div>
819
			<div>
820
				<strong>API change</strong>: the <a
821
					href="khttp_body.3.html">khttp_body(3)</a> function now
822
				returns <code>enum kcgi_err</code> to indicate a failure condition
823
				<strong>instead of</strong> whether compression was enabled.
824
			</div>
825
			<div>
826
				<strong>API change</strong>: the <a
827
					href="khttp_body.3.html">khttp_body_compress(3)</a> function
828
				now returns <code>enum kcgi_err</code> to indicate a failure
829
				condition <strong>instead of</strong> whether compression was
830
				enabled.
831
				Furthermore, the <code>comp</code> argument simply dictates whether
832
				compression should be enabled or not, preventing confusion.
833
			</div>
834
			<div>
835
				<strong>API change</strong>: the <a
836
					href="khttp_head.3.html">khttp_head(3)</a> function now
837
				returns <code>enum kcgi_err</code> to indicate a failure condition.
838
				Furthermore, this function now dynamically allocates header lengths,
839
				removing prior bounds on header length.
840
			</div>
841
			<div>
842
				While here, improve <a href="khttp_head.3.html">khttp_head(3)</a>,
843
				<a href="khttp_body.3.html">khttp_body(3)</a>,
844
				<a href="kvalid_string.3.html">kvalid_string(3)</a>, and
845
				<a href="kmalloc.3.html">kmalloc(3)</a> manpages.
846
			</div>
847
			<div>
848
				Lastly, the <a href="kvalid_string.3.html">kvalid_date(3)</a>
849
				function has been generalised for arbitrary dates, prompting the
850
				addition of <a href="kutil_epoch2str.3.html">kutil_date_valid(3)</a>
851
				and <a href="kutil_epoch2str.3.html">kutil_datetime_valid(3)</a>
852
				functions to validate broken-down dates.
853
				And bring up to date with latest <a
854
					href="https://github.com/kristapsdz/oconfigure">oconfigure</a>.
855
			</div>
856
		</aside>
857
	</article>
858
	<article data-sblg-article="1" data-sblg-tags="version">
859
		<header>
860
			<h1>0.9.10</h1>
861
			<address>Kristaps Dzonsons</address>
862
			<time datetime="2017-11-21">2017-11-21</time>
863
		</header>
864
		<aside>
865
			<div>
866
				Many internal small issues (allocation catches, better logging,
867
				simplifying logic) fixed as found by Ingo Schwarze
868
				(<q>schwarze@</q>) in an extensive audit generously funded by CAPEM
869
				Solutions, Inc.  None of these change application behaviour except
870
				that standalone query parts are let through.  For example,
871
				<code>localhost/foo?bar=baz&amp;xyzzy</code> now passes
872
				<code>xyzzy</code> as a key-pair with a zero-length pair.
873
			</div>
874
			<div>
875
				Note that parsing <code>text/plain</code> enctypes is now
876
				deprecated, as I'm yet to see this ever used.
877
			</div>
878
		</aside>
879
	</article>
880
	<article data-sblg-article="1" data-sblg-tags="version">
881
		<header>
882
			<h1>0.9.9</h1>
883
			<address>Kristaps Dzonsons</address>
884
			<time datetime="2017-10-30">2017-10-30</time>
885
		</header>
886
		<aside>
887
			<div>
888
				Switch to using <a
889
					href="https://github.com/kristapsdz/oconfigure">oconfigure</a>.
890
				Add the <a href="kvalid_string.3.html">kvalid_bit(3)</a> function
891
				for bit fields.
892
			</div>
893
		</aside>
894
	</article>
895
	<article data-sblg-article="1" data-sblg-tags="version">
896
		<header>
897
			<h1>0.9.8</h1>
898
			<address>Kristaps Dzonsons</address>
899
			<time datetime="2017-10-18">2017-10-18</time>
900
		</header>
901
		<aside>
902
			<div>
903
				<strong>API changes</strong>: use the appropriate
904
				<code>uint32_t</code> size for the HTTP digest authorisation nonce
905
				count.  This follows <a
906
					href="https://tools.ietf.org/html/rfc7616">RFC 7616</a>,
907
				sec. 3.4.  Also add the <a href="kutil_log.3.html">kutil_err(3)</a>
908
				family of functions, which report an error and exit.  Split that
909
				into <a href="kutil_openlog.3.html">kutil_openlog(3)</a> as well.
910
				Lastly, commit considerable improvements to the <a
911
					href="khttp_parse.3.html">khttp_parse(3)</a> and other
912
				manpages, as well as some extra warning messages due to RFC
913
				violations during HTTP parse.  Most of these were found and patched
914
				by Ingo Schwarze (<q>schwarze@</q>) in an extensive audit generously
915
				funded by CAPEM Solutions, Inc.  Thank you!
916
			</div>
917
		</aside>
918
	</article>
919
	<article data-sblg-article="1" data-sblg-tags="version">
920
		<header>
921
			<h1>0.9.7</h1>
922
			<address>Kristaps Dzonsons</address>
923
			<time datetime="2017-09-23">2017-09-23</time>
924
		</header>
925
		<aside>
926
			<div>
927
				Fix C headers in the documentation to be more minimal and
928
				standards-compliant.
929
			</div>
930
			<div>
931
				Add Ross Richardson's <a href="tutorial4.html">Using Pages</a>
932
				tutorial.  Ross developed the new <a
933
					href="https://undeadly.org">Undeadly Journal</a>!
934
			</div>
935
			<div>
936
				Bug fixes&#8230; Clarify some function elements in <a
937
					href="khttp_parse.3.html">khttp_parse(3)</a>.  Fixed
938
				undefined behaviour caused when <a
939
					href="khttp_template.3.html">khttp_templatex_buf(3)</a> is
940
				passed a fallback function and mis-reports the input key length.
941
				(If you use templating with a fallback function, you <strong>must
942
					update</strong>.) Fix all instances of zero-length
943
				allocations.  These are non-portable and might cause erroneous
944
				failure on some systems.  Fix an error where using digest
945
				authentication via <a
946
					href="khttpdigest_validate.3.html">khttpdigest_validate(3)</a>
947
				might crash with an unknown HTTP method.  Most of these were found
948
				by Ingo Schwarze (<q>schwarze@</q>) in an extensive audit generously
949
				funded by CAPEM Solutions, Inc.  Thank you!
950
			</div>
951
		</aside>
952
	</article>
953
	<article data-sblg-article="1" data-sblg-tags="version">
954
		<header>
955
			<h1>0.9.6</h1>
956
			<address>Kristaps Dzonsons</address>
957
			<time datetime="2017-08-31">2017-08-31</time>
958
		</header>
959
		<aside>
960
			<div>
961
				Add the <a href="khttp_template.3.html">khttp_template_fd(3)</a>
962
				functions for passing a file descriptor into the template utility
963
				instead of an open file or buffer.  (Also clean up that
964
				documentation.)
965
			</div>
966
		</aside>
967
	</article>
968
	<article data-sblg-article="1" data-sblg-tags="version">
969
		<header>
970
			<h1>0.9.5</h1>
971
			<address>Kristaps Dzonsons</address>
972
			<time datetime="2017-05-31">2017-05-31</time>
973
		</header>
974
		<aside>
975
			<div>
976
				Clarify documentation for <a href="kcgijson.3.html">kcgijson(3)</a>
977
				and add an <code>uninstall</code> rule to the GNUmakefile for those
978
				not using a package-managed version of the library.  No code
979
				changes.
980
			</div>
981
		</aside>
982
	</article>
983
	<article data-sblg-article="1" data-sblg-tags="version">
984
		<header>
985
			<h1>0.9.4</h1>
986
			<address>Kristaps Dzonsons</address>
987
			<time datetime="2017-03-12">2017-03-12</time>
988
		</header>
989
		<aside>
990
			<div>
991
				Add a feature inspired by Ross Richardson: a fallback function for
992
				templates.  As described for the <a
993
					href="khttp_template.3.html">khttp_template(3)</a> family of
994
				functions, a fallback function is invoked if none of the fixed keys
995
				are found.  This is handy because you can provide parsed template
996
				keys, e.g., <code>foo[bar]</code> and <code>foo[baz]</code>, which
997
				would be parsed for a type <code>foo</code> that's passed a dynamic
998
				value <code>bar</code> or <code>baz</code>.
999
			</div>
1000
			<div>
1001
				<strong>Nota bene</strong>: this required the <a
1002
					href="khttp_template.3.html">khttp_templatex(3)</a> and <a
1003
					href="khttp_template.3.html">khttp_templatex_buf(3)</a>
1004
				functions to have an argument change.
1005
			</div>
1006
		</aside>
1007
	</article>
1008
	<article data-sblg-article="1" data-sblg-tags="version">
1009
		<header>
1010
			<h1>0.9.3</h1>
1011
			<address>Kristaps Dzonsons</address>
1012
			<time datetime="2017-01-25">2017-01-25</time>
1013
		</header>
1014
		<aside>
1015
			<div>
1016
				Numerous spelling errors fixed (no functional change) and added <a
1017
					href="kutil_epoch2str.3.html">kutil_epoch2utcstr(3)</a> for
1018
				formatting ISO 8601 dates.  Also fixed <a
1019
					href="kutil_epoch2str.3.html">KUTIL_EPOCH2TM(3)</a> macro to
1020
				set correct fields.
1021
			</div>
1022
		</aside>
1023
	</article>
1024
	<article data-sblg-article="1" data-sblg-tags="version">
1025
		<header>
1026
			<h1>0.5.9</h1>
1027
			<address>Kristaps Dzonsons</address>
1028
			<time datetime="2015-06-17">2015-06-17</time>
1029
		</header>
1030
		<aside>
1031
			<div>
1032
				Add ability to retrieve HTTP headers from the request.  This adds
1033
				several fields to the structure filled in by <a
1034
					href="khttp_parse.3.html">khttp_parse(3)</a> that allow for
1035
				mapped (indexed by known header) and listed header fields.  The HTTP
1036
				headers are reconstituted from the CGI environmental variables
1037
				according to the RFC.  These fields existed in earlier releases, but
1038
				were not documented and, moreover, did not reconstitute the HTTP
1039
				header name from the CGI environment variable name.  A regression
1040
				test has been added to test this behaviour.  While adding this
1041
				documentation, clean up the type list in <a
1042
					href="khttp_parse.3.html">khttp_parse(3)</a>.
1043
			</div>
1044
			<div>
1045
				Add <a href="khttp_body.3.html">khttp_body_compress(3)</a>, which
1046
				allows for stipulating auto-compression (the default for <a
1047
					href="khttp_body.3.html">khttp_body(3)</a>), compression
1048
				without emitting the appropriate header (for applications providing
1049
				the <q>Content-Encoding</q> parameter themselves), and no
1050
				compression (for applications taking full control of output
1051
				themselves).  While there, make the test for requested compression
1052
				be sensitive to the <a
1053
					href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">RFC
1054
					2616</a> <q>qvalue</q>.  Both functions now return whether
1055
				compression has been enabled.  This functionality augments existing
1056
				behaviour: it does not change it.
1057
			</div>
1058
			<div>
1059
				Add HTTP error codes described by <a
1060
					href="https://tools.ietf.org/html/rfc6585">RFC 6585</a>.
1061
			</div>
1062
		</aside>
1063
	</article>
1064
	<article data-sblg-article="1" data-sblg-tags="version">
1065
		<header>
1066
			<h1>0.4.2</h1>
1067
			<address>Kristaps Dzonsons</address>
1068
			<time datetime="2014-11-30">2014-11-30</time>
1069
		</header>
1070
		<aside>
1071
			<div>
1072
				Implement the <a href="kcgijson.3.html">kcgijson(3)</a> library for
1073
				convenient JSON functions, remove function prototype names as per
1074
				OpenBSD's <a
1075
					href="http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man9/style.9?query=style">style(9)</a>,
1076
				polish documentation.
1077
			</div>
1078
		</aside>
1079
	</article>
1080
	<article data-sblg-article="1" data-sblg-tags="version">
1081
		<header>
1082
			<h1>0.4.3</h1>
1083
			<address>Kristaps Dzonsons</address>
1084
			<time datetime="2014-12-03">2014-12-03</time>
1085
		</header>
1086
		<aside>
1087
			<div>
1088
				Make sure that <a href="khttp_parse.3.html">khttp_parse(3)</a>
1089
				returns an error code indicating what actually went wrong.  This is
1090
				a minor API change because the function no longer returns 0, but an
1091
				enumeration (where 0, incidentally, means success).  Also audit the
1092
				parsing trailer to make sure that the parent doesn't exit in the
1093
				event of memory exhaustion.
1094
			</div>
1095
		</aside>
1096
	</article>
1097
	<article data-sblg-article="1" data-sblg-tags="version">
1098
		<header>
1099
			<h1>0.4.4</h1>
1100
			<address>Kristaps Dzonsons</address>
1101
			<time datetime="2014-12-15">2014-12-15</time>
1102
		</header>
1103
		<aside>
1104
			<div>
1105
				Add the Boolean and NULL types to <a
1106
					href="kcgijson.3.html">kcgijson(3)</a>.  Fix control code
1107
				serialisation in the same.
1108
			</div>
1109
		</aside>
1110
	</article>
1111
	<article data-sblg-article="1" data-sblg-tags="version">
1112
		<header>
1113
			<h1>0.5</h1>
1114
			<address>Kristaps Dzonsons</address>
1115
			<time datetime="2014-12-18">2014-12-18</time>
1116
		</header>
1117
		<aside>
1118
			<div>
1119
				Expand the functionality of the template system with <a
1120
					href="khttp_template.3.html">khttp_templatex(3)</a> and <a
1121
					href="khttp_template.3.html">khttp_templatex_buf(3)</a>,
1122
				which allow the writing function to be overriden.  This allows
1123
				templates to play nicely with other systems such as <a
1124
					href="kcgijson.3.html">kcgijson(3)</a> and general dynamic
1125
				buffer creation.  I use this for creating mails for sending with <a
1126
					href="http://curl.haxx.se/libcurl/">libcurl</a>.  Also
1127
				create an automated test harness <a
1128
					href="kcgi_regress.3.html">kcgi_regress(3)</a> that, for
1129
				internal automated regression testing, uses <a
1130
					href="http://curl.haxx.se/libcurl/">libcurl</a> to create
1131
				and parse HTTP messages over a local socket and a small server to
1132
				translate the requests into CGI variables for <span
1133
					class="nm">kcgi</span>.  The internal tests can be run with
1134
				<code>make regress</code>.
1135
			</div>
1136
		</aside>
1137
	</article>
1138
	<article data-sblg-article="1" data-sblg-tags="version">
1139
		<header>
1140
			<h1>0.5.1</h1>
1141
			<address>Kristaps Dzonsons</address>
1142
			<time datetime="2015-03-14">2015-03-14</time>
1143
		</header>
1144
		<aside>
1145
			<div>
1146
				Allow <a href="kcgi_regress.3.html">kcgi_regress(3)</a> to handle
1147
				query strings and forms for validation testing.  Pick out one
1148
				assertion failure in the parser by using the <a
1149
					href="http://lcamtuf.coredump.cx/afl/">American fuzzy
1150
					lop</a>.  Add an a test harness for AFL as well.  Recognise
1151
				CONNECT, DELETE, HEAD, TRACE, PUT, and OPTIONS methods.
1152
			</div>
1153
		</aside>
1154
	</article>
1155
	<article data-sblg-article="1" data-sblg-tags="version">
1156
		<header>
1157
			<h1>0.5.2</h1>
1158
			<address>Kristaps Dzonsons</address>
1159
			<time datetime="2015-04-05">2015-04-05</time>
1160
		</header>
1161
		<aside>
1162
			<div>
1163
				Allow for opaque HTTP message bodies: if our content type isn't
1164
				<code>application/x-www-form-urlencoded</code>,
1165
				<code>multipart/form-data</code>, or <code>text/plain</code> (during
1166
				a POST only), then accept the HTTP body as a single object and
1167
				validate it against the empty-key validator.  Add HTTP methods and
1168
				headers stipulated by <a
1169
					href="http://tools.ietf.org/html/rfc4918">HTTP Extensions
1170
					for Web Distributed Authoring and Versioning (WebDAV)</a>
1171
				and <a href="http://tools.ietf.org/html/rfc4791">Calendaring
1172
					Extensions to WebDAV (CalDAV)</a>.  Allow for the HTTP
1173
				request headers to be exported to the <code>struct kreq</code>
1174
				object as both a list and, for common HTTP headers, an indexed map.
1175
				Added <a href="kcgixml.3.html">kcgixml(3)</a> bits for some simple
1176
				XML support and added <code>khtml_putc()</code> and
1177
				<code>khtml_puts()</code> to <a
1178
					href="kcgihtml.3.html">kcgihtml(3)</a> for consistency.
1179
				Specify that a <code>NULL</code> template passed to the <a
1180
					href="khttp_template.3.html">khttp_template(3)</a> functions
1181
				simply causes the named file or buffer to be outputted without any
1182
				processing.  Lastly, recognise <a
1183
					href="http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/getentropy.2">getentropy(2)</a>
1184
				as a white-listed system call in the <a
1185
					href="http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man4/systrace.4">systrace(4)</a>
1186
				sandbox.
1187
			</div>
1188
		</aside>
1189
	</article>
1190
	<article data-sblg-article="1" data-sblg-tags="version">
1191
		<header>
1192
			<h1>0.5.3</h1>
1193
			<address>Kristaps Dzonsons</address>
1194
			<time datetime="2015-04-10">2015-04-10</time>
1195
		</header>
1196
		<aside>
1197
			<div>
1198
				Fully process the <code>Authentication</code> header, implementing
1199
				<a href="https://tools.ietf.org/html/rfc2617">RFC 2617</a>.  This
1200
				was originally developed in <a
1201
					href="http://kristaps.bsd.lv/kcaldav">kcaldav</a>, but makes
1202
				more sense to be run here inside of the untrusted child.  Values are
1203
				stored in the <code>struct khttpauth</code> field documented in <a
1204
					href="khttp_parse.3.html">khttp_parse(3)</a>.
1205
			</div>
1206
		</aside>
1207
	</article>
1208
	<article data-sblg-article="1" data-sblg-tags="version">
1209
		<header>
1210
			<h1>0.5.4</h1>
1211
			<address>Kristaps Dzonsons</address>
1212
			<time datetime="2015-04-12">2015-04-12</time>
1213
		</header>
1214
		<aside>
1215
			<div>
1216
				Single bug-fix: the nonce count parsed from an HTTP digest was not
1217
				being correctly recorded.
1218
			</div>
1219
		</aside>
1220
	</article>
1221
	<article data-sblg-article="1" data-sblg-tags="version">
1222
		<header>
1223
			<h1>0.5.5</h1>
1224
			<address>Kristaps Dzonsons</address>
1225
			<time datetime="2015-04-12">2015-04-12</time>
1226
		</header>
1227
		<aside>
1228
			<div>
1229
				Bug-fix when linking to <a href="kcgihtml.3.html">kcgihtml(3)</a>.
1230
				Added the access scheme (HTTP or HTTPS) to <code>struct kreq</code>.
1231
				Have validation for document body correctly set the
1232
				<code>ctypepos</code> prior to validation.  While there, properly
1233
				decode the content-type field (i.e., discarding parameters) when
1234
				looking up the type in the known types.
1235
			</div>
1236
		</aside>
1237
	</article>
1238
	<article data-sblg-article="1" data-sblg-tags="version">
1239
		<header>
1240
			<h1>0.5.6</h1>
1241
			<address>Kristaps Dzonsons</address>
1242
			<time datetime="2015-04-23">2015-04-23</time>
1243
		</header>
1244
		<aside>
1245
			<div>
1246
				Bug-fix for Capsicum sandbox, found by Baptiste Daroussin.  (Thanks!)
1247
				Also fix passing a zero-length buffer into the template buffer functions.
1248
			</div>
1249
		</aside>
1250
	</article>
1251
	<article data-sblg-article="1" data-sblg-tags="version">
1252
		<header>
1253
			<h1>0.5.7</h1>
1254
			<address>Kristaps Dzonsons</address>
1255
			<time datetime="2015-04-27">2015-04-27</time>
1256
		</header>
1257
		<aside>
1258
			<div>
1259
				Rename <code>khtml_close</code> to <code>khtml_closeelem</code> in <a href="kcgihtml.3.html">kcgihtml(3)</a>, then re-add the
1260
				close function and an open function to harmonise with <a href="kcgijson.3.html">kcgijson(3)</a> and <a
1261
					href="kcgixml.3.html">kcgixml(3)</a>.
1262
				In the process, allow the closing functions in all libraries to unwind any remaining context, and have the closing functions
1263
				return whether the request was out of bounds.
1264
				Prevent some bogus calls to <a href="kcgihtml.3.html">kcgihtml(3)</a> from aborting.
1265
				Bug-fix for detecting zlib on FreeBSD, found by Baptiste Daroussin.  (Thanks!)
1266
			</div>
1267
		</aside>
1268
	</article>
1269
	<article data-sblg-article="1" data-sblg-tags="version">
1270
		<header>
1271
			<h1>0.5.8</h1>
1272
			<address>Kristaps Dzonsons</address>
1273
			<time datetime="2015-05-11">2015-05-11</time>
1274
		</header>
1275
		<aside>
1276
			<div>
1277
				Update the included sample file and correct the documentation regarding its compilation.
1278
				Fix noted by Jan Schreiber &#8212; thanks!
1279
				While doing so, add some documentation bits to the manpages and considerable documentation to the webpage.
1280
				No functional changes.
1281
			</div>
1282
		</aside>
1283
	</article>
1284
	<article data-sblg-article="1" data-sblg-tags="version">
1285
		<header>
1286
			<h1>0.6</h1>
1287
			<address>Kristaps Dzonsons</address>
1288
			<time datetime="2015-07-07">2015-07-07</time>
1289
		</header>
1290
		<aside>
1291
			<div>
1292
				Import initial Linux <a href="http://man7.org/linux/man-pages/man2/seccomp.2.html">seccomp(2)</a> (via <a
1293
					href="http://man7.org/linux/man-pages/man2/prctl.2.html">prctl(2)</a>) sandbox!
1294
				This uses the implementation of <a href="http://www.openssh.com/">OpenSSH</a>, tweaked to work within the <span
1295
					class="nm">kcgi</span> framework.
1296
				For now, it only allows arm, i386, and x86_64: if you're using another architecture, please let me know your <code>uname -m</code>, 
1297
				as the sandbox (ridiculously) needs to know the system architecture.
1298
				(Better yet: also send me the relevant <code>AUDIT_ARCH_xxx</code> from <code>/usr/include/linux/audit.h</code>.)
1299
				While here, allow for compilation on <a href="http://www.musl-libc.org/">musl</a>.
1300
				I've also moved the tutorial into a separate file and fleshed it out a little.
1301
				I'll probably add more tutorials in time.
1302
			</div>
1303
		</aside>
1304
	</article>
1305
	<article data-sblg-article="1" data-sblg-tags="version">
1306
		<header>
1307
			<h1>0.6.1</h1>
1308
			<address>Kristaps Dzonsons</address>
1309
			<time datetime="2015-07-09">2015-07-09</time>
1310
		</header>
1311
		<aside>
1312
			<div>
1313
				One-line bug-fix to include new Linux seccomp patch into source archive.  Ouch.  Noted by James Turner&#8212;thanks!
1314
			</div>
1315
		</aside>
1316
	</article>
1317

1318
	<article data-sblg-article="1" data-sblg-tags="version">
1319
		<header>
1320
			<h1>0.6.3</h1>
1321
			<address>Kristaps Dzonsons</address>
1322
			<time datetime="2015-07-18">2015-07-18</time>
1323
		</header>
1324
		<aside>
1325
			<div>
1326
				More FastCGI: move control socket handling into its own process.
1327
				The control socket is a UNIX socket (or similar) bound by the FastCGI runner, which is either the web server or an
1328
				application like <a href="kfcgi.8.html">kfcgi(8)</a>, then passed as <code>STDIN_FILENO</code> to the FastCGI
1329
				application.
1330
				<span class="nm">kcgi</span> will then wait on this socket for incoming connections, which are acted upon with <a
1331
					href="khttp_fcgi_parse.3.html">khttp_fcgi_parse(3)</a>.
1332
				In this release, this logic has been moved into its own process instead of being managed by the web application itself
1333
				during calls to <a href="khttp_fcgi_parse.3.html">khttp_fcgi_parse(3)</a>.
1334
				While here, I cleaned up and simplified a lot of the sandbox and inter-process socket logic.
1335
				The control socket is not yet sandboxed: that will come with later releases.
1336
				Again, the FastCGI implementation is <strong>experimental</strong>!
1337
			</div>
1338
			<div>
1339
				Patches for deployment on FreeBSD contributed by Baptiste Daroussin&#8212;thanks!
1340
				In analysis, found that the <code>argfree</code> function to <a href="khttp_parse.3.html">khttp_parse(3)</a> wasn't
1341
				being invoked if the <code>arg</code> was itself NULL.
1342
				(This is clearly bad behaviour&#8212;not all functions need that argument!)
1343
				This has been fixed as well.
1344
			</div>
1345
		</aside>
1346
	</article>
1347

1348
	<article data-sblg-article="1" data-sblg-tags="version">
1349
		<header>
1350
			<h1>0.6.2</h1>
1351
			<address>Kristaps Dzonsons</address>
1352
			<time datetime="2015-07-15">2015-07-15</time>
1353
		</header>
1354
		<aside>
1355
			<div>
1356
				This release includes an initial implementation of <a href="http://www.fastcgi.com">FastCGI</a>.
1357
				While the existing functionality wasn't logically altered, it was shuffled around quite a lot and abstracted to
1358
				accomodate for the new FastCGI functions.
1359
				The implementation is documented in <a href="kfcgi.8.html">kfcgi(8)</a>, <a
1360
					href="khttp_fcgi_init.3.html">khttp_fcgi_init(3)</a>, and <a
1361
					href="khttp_fcgi_parse.3.html">khttp_fcgi_parse(3)</a>, and <a
1362
					href="khttp_fcgi_free.3.html">khttp_fcgi_free(3)</a>.
1363
				<strong>This functionality is experimental</strong>, and needs strong analysis before casual deployment.
1364
				It is also not quite feature-complete: HTTP compression is not yet functional for FastCGI applications.
1365
				The <a href="kfcgi.8.html">kfcgi(8)</a> launcher is also very bare-bones&#8212;this will be improved in subsequent releases.
1366
				Again: this functionality is <strong>experimental</strong> and under development!
1367
			</div>
1368
			<div>
1369
				Also fixed a bug where calling <a href="khttp_free.3.html">khttp_free(3)</a> after a prior <a
1370
					href="khttp_parse.3.html">khttp_parse(3)</a> failure would cause a NULL dereference.
1371
				Added the missing <code>txt</code> and <code>xml</code> suffixes to the suffix table.
1372
				Fix that the request port number was erroneously disallowed to be &gt;80.
1373
			</div>
1374
		</aside>
1375
	</article>
1376
	<article data-sblg-article="1" data-sblg-tags="version">
1377
		<header>
1378
			<h1>0.6.4</h1>
1379
			<address>Kristaps Dzonsons</address>
1380
			<time datetime="2015-08-01">2015-08-01</time>
1381
		</header>
1382
		<aside>
1383
			<div>
1384
				Add some proper security to <a href="kfcgi.8.html">kfcgi(8)</a>: place child FastCGI processes in a file-system jail,
1385
				drop privileges, and ensure proper ownership of the socket.
1386
				While here, begin sandbox mechanisms for the FastCGI control process.
1387
				This only works for Mac OSX for now, but will expand to others.
1388
				Again, until the next minor version bump, <strong>FastCGI support is experimental</strong>.
1389
			</div>
1390
			<div>
1391
				On that note, finalise the API for FastCGI calls.
1392
				This involved moving most function arguments previously in <a href="khttp_fcgi_parse.3.html">khttp_fcgi_parse(3)</a>
1393
				into <a href="khttp_fcgi_init.3.html">khttp_fcgi_init(3)</a>.
1394
				To wit, the <code>khttp_fcgi_parsex()</code> function has been removed: all of the logic has been moved to the
1395
				initialisation function, making the parse function much simpler.
1396
				Cement this by adding several new regression tests that exercise the FastCGI functionality.
1397
				These, of course, required that FastCGI functionality be added to the regression suite.
1398
				This is documented in <a href="kcgiregress.3.html">kcgiregress(3)</a> (the manpage was renamed from <code>kcgi_regress</code>).
1399
			</div>
1400
			<div>
1401
				In adding the regression suite, one critical FastCGI bug was found (and fixed) for forms &gt;1 kB.
1402
				Fix another critical bug when writing large contiguous blocks, which would be silently truncated.
1403
				(A regression test has been added for this.)
1404
				The same would trigger a failure on Linux due to the sandbox: this has also been fixed.
1405
				Internally, the behaviour of read and write sockets is consistently non-blocking.
1406
				There has been a report of large compressed output failing on FreeBSD, but this has not yet been verified.
1407
			</div>
1408
			<div>
1409
				Lastly, incorporate a patch from Baptiste Daroussin (thanks!) for a tighter Capsicum sandbox for the parser process.
1410
			</div>
1411
		</aside>
1412
	</article>
1413
	<article data-sblg-article="1" data-sblg-tags="version">
1414
		<header>
1415
			<h1>0.7.0</h1>
1416
			<address>Kristaps Dzonsons</address>
1417
			<time datetime="2015-08-07">2015-08-07</time>
1418
		</header>
1419
		<aside>
1420
			<div>
1421
				Implement the <a href="http://www.fastcgi.com/drupal/node/6?q=node/22">FastCGI</a> control process's sandbox for all
1422
				supported operating systems.
1423
				(The FastCGI control process is forked from each application process, and is responsible for accepting new FastCGI
1424
				connections and passing the descriptors to the application for output and worker process for parsing.)
1425
				This is the last <q>feature</q> for the FastCGI implementation: it now has the same protection as the CGI implementation
1426
				for all child processes.
1427
				Add sandbox for OpenBSD's <a href="http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/tame.2">tame(2)</a>,
1428
				although this technically isn't supported yet (in snapshots, anyway) and returns <code>ENOSYS</code>.
1429
				On OpenBSD machines with both sandboxes, this is tried first.
1430
				This effort derives from a patch submitted by Reyk Floeter&#8212;thanks!
1431
			</div>
1432
			<div>
1433
				The FastCGI interface is no longer an experimental feature, but baked into the system.
1434
			</div>
1435
			<div>
1436
				In addition to the above, some variables were added to the manpages (which were also cleaned up a bit) and the AFL
1437
				system was updated with the socket re-write.
1438
			</div>
1439
		</aside>
1440
	</article>
1441
	<article data-sblg-article="1" data-sblg-tags="version">
1442
		<header>
1443
			<h1>0.7.1</h1>
1444
			<address>Kristaps Dzonsons</address>
1445
			<time datetime="2015-08-11">2015-08-11</time>
1446
		</header>
1447
		<aside>
1448
			<div>
1449
				Fix: forgot to install <a href="kfcgi.8.html">kfcgi(8)</a>.
1450
				Add flag to <a href="kfcgi.8.html">kfcgi(8)</a> to specify the connection backlog.
1451
				Add <a href="khttp_fcgi_test.3.html">khttp_fcgi_test(3)</a> to see if an application should use the FastCGI or regular
1452
				CGI functions.
1453
				A regression noted by James Turner (thanks!): re-add the CGI sample, <span class="file">sample.c</span>, into the
1454
				distributed source.
1455
				There is also a FastCGI sample, <span class="file">sample-fcgi.c</span>.
1456
				There is also a non-<span class="nm">kcgi</span> sample, <span class="file">sample-cgi.c</span>, used in creating the
1457
				performance graphs.
1458
			</div>
1459
		</aside>
1460
	</article>
1461
	<article data-sblg-article="1" data-sblg-tags="version">
1462
		<header>
1463
			<h1>0.7.2</h1>
1464
			<address>Kristaps Dzonsons</address>
1465
			<time datetime="2015-09-04">2015-09-04</time>
1466
		</header>
1467
		<aside>
1468
			<div>
1469
				If a FastCGI connection closes, don't make
1470
				failing writes to that connection bring down the
1471
				application.
1472
				Also work around a very weird Mac OS X bug
1473
				wherein a poll will return a timeout even though
1474
				the poll request is blocking.
1475
			</div>
1476
		</aside>
1477
	</article>
1478
	<article data-sblg-article="1" data-sblg-tags="version">
1479
		<header>
1480
			<h1>0.7.3</h1>
1481
			<address>Kristaps Dzonsons</address>
1482
			<time datetime="2015-09-30">2015-09-30</time>
1483
		</header>
1484
		<aside>
1485
			<div>
1486
				Fix for proper FastCGI support on <a href="http://www.nginx.org">nginx</a>.
1487
				This work was prompted by Daniel Sinclair, who fixed a read type mismatch (when reading the padding length) that inspired
1488
				a further fix to serialise the response FastCGI header properly.
1489
				Lastly, a latent Apache2 FastCGI bug was fixed in incorrectly reporting the return code status.
1490
			</div>
1491
		</aside>
1492
	</article>
1493
	<article data-sblg-article="1" data-sblg-tags="version">
1494
		<header>
1495
			<h1>0.7.4</h1>
1496
			<address>Kristaps Dzonsons</address>
1497
			<time datetime="2015-11-12">2015-11-12</time>
1498
		</header>
1499
		<aside>
1500
			<div>
1501
				Replace support for tame(2) (which was never enabled in the operating system) with the renamed <a
1502
					href="http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/pledge.2">pledge(2)</a>.
1503
				From a patch by James Turner&#8212;thank you!
1504
			</div>
1505
		</aside>
1506
	</article>
1507
	<article data-sblg-article="1" data-sblg-tags="version">
1508
		<header>
1509
			<h1>0.7.5</h1>
1510
			<address>Kristaps Dzonsons</address>
1511
			<time datetime="2016-01-04">2016-01-04</time>
1512
		</header>
1513
		<aside>
1514
			<div>
1515
				Added ability to easily perform HTTP digest authentication, <a
1516
					href="khttpdigest_validate.3.html">khttpdigest_validate(3)</a>, which is heavily used in <a
1517
					href="http://kristaps.bsd.lv/kcaldav">kcaldav</a> and a few other systems.
1518
				This manages all of the aspects of the sequences, from the child process performing an MD5 hash on the full data stream
1519
				to the end check against a hash.
1520
				While there, also add <a href="khttpbasic_validate.3.html">khttpbasic_validate(3)</a> for completeness.
1521
			</div>
1522
			<div>
1523
				Add an experimental feature for debugging input and output streams.
1524
				One can set debugging fields with <a href="khttp_parse.3.html">khttp_parsex(3)</a> or <a
1525
					href="khttp_fcgi_init.3.html">khttp_fcgi_initx(3)</a> and have request reads or response writes logged to
1526
				standard output.
1527
				<strong>Note</strong>: this changes the system API, so make sure any systems calling the above functions are upgraded to
1528
				account for the extra argument!
1529
				Also merged a thorough documentation patch by Svyatoslav Mishyn&#8212;thanks!
1530
			</div>
1531
		</aside>
1532
	</article>
1533
	<article data-sblg-article="1" data-sblg-tags="version">
1534
		<header>
1535
			<h1>0.7.6</h1>
1536
			<address>Kristaps Dzonsons</address>
1537
			<time datetime="2016-01-25">2016-01-25</time>
1538
		</header>
1539
		<aside>
1540
			<div>
1541
				Push read-only repository to <a href="https://github.com/kristapsdz/kcgi.git">GitHub</a>.
1542
				<span class="nm">kcgi</span> has been accepted as a <a href="https://scan.coverity.com/projects/kcgi">Coverity</a>
1543
				project.
1544
				The initial scan revealed a pair of error-path resource links and some false positives.
1545
				(All of these are visible on the Coverity project site.)
1546
				It also found one legitimate bug in the newly-installed HTTP basic authentication code.
1547
				This, obviously, has been fixed.
1548
				Thanks, <a href="http://coverity.com">Coverity</a>!
1549
			</div>
1550
		</aside>
1551
	</article>
1552
	<article data-sblg-article="1" data-sblg-tags="version">
1553
		<header>
1554
			<h1>0.7.7</h1>
1555
			<address>Kristaps Dzonsons</address>
1556
			<time datetime="2016-02-10">2016-02-10</time>
1557
		</header>
1558
		<aside>
1559
			<div>
1560
				Allow for the developer to set a write buffer size when invoking <a href="khttp_parse.3.html">khttp_parsex(3)</a> or <a
1561
					href="khttp_fcgi_init.3.html">khttp_fcgi_initx(3)</a>.
1562
				The write buffer hooks into <a href="khttp_write.3.html">khttp_write(3)</a> and, if set to a non-zero size, will cause
1563
				writes to be buffered.
1564
				This changes existing behaviour where writes were never buffered.
1565
				Note that this function is invoked by all writing functions, both within <a href="kcgi.3.html">kcgi(3)</a> and its
1566
				libraries such as <a href="kcgijson.3.html">kcgijson(3)</a>.
1567
				The buffer is flushed when its size is exceeded or when <a href="khttp_free.3.html">khttp_free(3)</a> is invoked.
1568
				If not provided, the default is 8 KiB for CGI and 65 KiB for FastCGI.
1569
				Also renamed the <code>xmalloc</code>-style internal functions so as not to override weak symbols in any interfacing
1570
				applications.
1571
				This was noted by Okan Demirmen&#8212;thanks!
1572
			</div>
1573
		</aside>
1574
	</article>
1575
	<article data-sblg-article="1" data-sblg-tags="version">
1576
		<header>
1577
			<h1>0.7.8</h1>
1578
			<address>Kristaps Dzonsons</address>
1579
			<time datetime="2016-03-02">2016-03-02</time>
1580
		</header>
1581
		<aside>
1582
			<div>
1583
				Use <a
1584
					href="http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man3/strtonum.3">strtonum(3)</a> whenever possible,
1585
				inspired by a patch from Jan Schreiber&#8212;thanks!
1586
				Add <a href="khttpdigest_validate.3.html">khttpdigest_validatehash(3)</a>, which authenticates an HTTP digest session using a pre-computed hash.
1587
				(The existing function builds the hash from a password.)
1588
				This is required by <a href="http://kristaps.bsd.lv/kcaldav">kCalDAV</a>.
1589
			</div>
1590
		</aside>
1591
	</article>
1592
	<article data-sblg-article="1" data-sblg-tags="version">
1593
		<header>
1594
			<h1>0.8.1</h1>
1595
			<address>Kristaps Dzonsons</address>
1596
			<time datetime="2016-03-15">2016-03-15</time>
1597
		</header>
1598
		<aside>
1599
			<div>
1600
				Significantly update the FastCGI handling.
1601
				There were two foci to this effort:
1602
				first, to make the existing FastCGI
1603
				system more robust in terms of starting
1604
				and stopping; the second, to extend
1605
				FastCGI so that <a
1606
					href="kfcgi.8.html">kfcgi(8)</a>
1607
				can handle variable-sized pools of
1608
				workers instead of a fixed number.
1609
				The method of extending FastCGI is
1610
				described in <a
1611
					href="extending01.html">FastCGI
1612
					Extensions for Management
1613
					Control</a>, and is implemented
1614
				by the -<span class="flag">r</span> flag
1615
				in <a href="kfcgi.8.html">kfcgi(8)</a>.
1616
			</div>
1617
		</aside>
1618
	</article>
1619
	<article data-sblg-article="1" data-sblg-tags="version">
1620
		<header>
1621
			<h1>0.8.2</h1>
1622
			<address>Kristaps Dzonsons</address>
1623
			<time datetime="2016-04-06">2016-04-06</time>
1624
		</header>
1625
		<aside>
1626
			<div>
1627
				Fix the -<span class="flag">l</span> flag in <a href="kfcgi.8.html">kfcgi(8)</a> as dictated in <a
1628
					href="https://github.com/kristapsdz/kcgi/pull/1">pull/1</a> on the <a
1629
					href="https://github.com/kristapsdz/kcgi">GitHub</a>.
1630
				Thanks, <a href="https://github.com/cornett">cornett</a>!
1631
			</div>
1632
		</aside>
1633
	</article>
1634
	<article data-sblg-article="1" data-sblg-tags="version">
1635
		<header>
1636
			<h1>0.8.3</h1>
1637
			<address>Kristaps Dzonsons</address>
1638
			<time datetime="2016-04-19">2016-04-19</time>
1639
		</header>
1640
		<aside>
1641
			<div>
1642
				Work around an <a href="https://marc.info/?l=openbsd-tech&amp;m=144571751203238&amp;w=2">old but fatal FastCGI
1643
					problem</a> only found on OpenBSD's <a href="https://github.com/reyk/httpd">httpd</a>.
1644
				This assumes that HTTP headers are only on the first FastCGI packet, which is not part of the standard.
1645
				The workaround is to have HTTP headers buffer just like the HTTP body, which will cause multiple headers to lump
1646
				into (hopefully) one packet.
1647
				Headers are still flushed when the HTTP body begins, however, although I'm still unsure whether this is a good
1648
				idea.
1649
				(It pushes the status code to the web server faster, but incurs an extra trip on the wire.)
1650
				If you've disabled buffering in <a href="khttp_fcgi_init.3.html">khttp_fcgi_init(3)</a>, or you have so many
1651
				headers that the output buffer is flushed before the last header, <a
1652
					href="https://github.com/reyk/httpd">httpd</a> will intermix your body with headers.
1653
				Ew.
1654
				This problem was raised as <a href="https://github.com/kristapsdz/kcgi/issues/2">issues/2</a> by <a
1655
					href="https://github.com/cornett">@cornett</a>&#8212;thanks!
1656
				Also fix <a href="https://github.com/kristapsdz/kcgi/issues/3">issues/3</a>, raised by the same&#8212;thanks
1657
				again!
1658
			</div>
1659
		</aside>
1660
	</article>
1661
	<article data-sblg-article="1" data-sblg-tags="version">
1662
		<header>
1663
			<h1>0.8.4</h1>
1664
			<address>Kristaps Dzonsons</address>
1665
			<time datetime="2016-06-14">2016-06-14</time>
1666
		</header>
1667
		<aside>
1668
			<div>
1669
				Fix several documentation bugs that erroneously noted values can be NULL when they would instead by empty
1670
				strings.
1671
				Also fixed some broken links.
1672
			</div>
1673
		</aside>
1674
	</article>
1675
	<article data-sblg-article="1" data-sblg-tags="version">
1676
		<header>
1677
			<h1>0.8.5</h1>
1678
			<address>Kristaps Dzonsons</address>
1679
			<time datetime="2016-08-19">2016-08-19</time>
1680
		</header>
1681
		<aside>
1682
			<div>
1683
				Some documentation fixes and clarifications as suggested by Ross Richardson&#8212;thanks!
1684
				Also added a <a href="tutorial3.html">custom validation tutorial</a>.
1685
			</div>
1686
		</aside>
1687
	</article>
1688
	<article data-sblg-article="1" data-sblg-tags="version">
1689
		<header>
1690
			<h1>0.9.0</h1>
1691
			<address>Kristaps Dzonsons</address>
1692
			<time datetime="2016-10-10">2016-10-10</time>
1693
		</header>
1694
		<aside>
1695
			<div>
1696
				Regressions, regressions, regressions, regressions.
1697
				Fix <a href="kcgiregress.3.html">kcgiregress(3)</a> to work in a more general fashion, adding an example usage
1698
				along the way.
1699
				Regression tests are (sadly) not used often for web applications, so this tool should be a welcome one!
1700
				Also add two useful functions: <a href="kutil_epoch2str.3.html">kutil_epoch2str(3)</a> for converting from
1701
				integral (epoch) UNIX time into an HTTP date and <a href="kutil_date2epoch.3.html">kutil_date2epoch(3)</a> and <a
1702
					href="kutil_date2epoch.3.html">kutil_datetime2epoch(3)</a> for converting from dates to integral time.
1703
				Lastly, clarify that <a href="khttp_parse.3.html">khttp_parse(3)</a> requires a call to <a
1704
					href="khttp_free.3.html">khttp_free(3)</a> if and only if it returns success.
1705
			</div>
1706
		</aside>
1707
	</article>
1708
	<article data-sblg-article="1" data-sblg-tags="version">
1709
		<header>
1710
			<h1>0.9.1</h1>
1711
			<address>Kristaps Dzonsons</address>
1712
			<time datetime="2016-10-17">2016-10-17</time>
1713
		</header>
1714
		<aside>
1715
			<div>
1716
				Get rid of BSD make in favour of <a href="https://www.gnu.org/software/make/">GNU make</a>.
1717
				I generally don't like GNU software, so let me explain: portability and readability.
1718
				The original Makefile was almost 500 lines; the new one is 350.
1719
				While this software isn't exactly a moving target, it's still annoying to add the same lines over and over
1720
				again.
1721
				If you can think of a better way, please let me know.
1722
			</div>
1723
			<div>
1724
				Next, add some logging functions: <a href="kutil_log.3.html">kutil_log(3)</a> and friends.
1725
				Why?
1726
				I find myself re-rolling these same routines over and over again.
1727
				They're similar (enough) to the NCSA format, sanitise (and bound) output, and time-stamp without tripping <a
1728
					href="http://man.openbsd.org/pledge.2">pledge(2)</a>.
1729
			</div>
1730
			<div>
1731
				Lastly, add an index of all <a href="functions.html">functions</a>.
1732
			</div>
1733
		</aside>
1734
	</article>
1735
	<article data-sblg-article="1" data-sblg-tags="version">
1736
		<header>
1737
			<h1>0.9.2</h1>
1738
			<address>Kristaps Dzonsons</address>
1739
			<time datetime="2016-11-27">2016-11-27</time>
1740
		</header>
1741
		<aside>
1742
			<div>
1743
				Following a report by Ross Richardson (thanks!), fix cookie handling.
1744
				Before, cookie values (and keys) were being handled as URL-encoded strings.
1745
				Now they're correctly handled as opaque values; and moreover, they use a stricter check against <a
1746
					href="https://tools.ietf.org/html/rfc6265">RFC 6265</a>.
1747
				While there, update some spelling and typos (thanks Svyatoslav!).
1748
			</div>
1749
		</aside>
1750
	</article>
1751
</articles>
1752

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.