-
Notifications
You must be signed in to change notification settings - Fork 39
/
versions.xml
1782 lines (1780 loc) · 68 KB
/
versions.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8" ?>
<!-- vim: set tw=100: -->
<articles>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.13.4</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2024-09-15">2024-09-15</time>
</header>
<aside>
<div>
Adding CORS request and response headers:
<code>Access-Control-Allow-Credentials</code>,
<code>Access-Control-Allow-Headers</code>,
<code>Access-Control-Allow-Methods</code>,
<code>Access-Control-Allow-Origin</code>,
<code>Access-Control-Expose-Headers</code>,
<code>Access-Control-Max-Age</code>,
<code>Origin</code>,
<code>Access-Control-Request-Headers</code>,
and
<code>Access-Control-Request-Method</code>.
While here, also add a brief tutorial on handling CORS
pre-flight requests.
</div>
<div>
Fix a big in handling <code>POST</code> forms
with parameters passed in with the
<code>application/x-www-form-urlencoded</code>
content type. These are now correctly
processed.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.13.3</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2023-12-02">2023-12-02</time>
</header>
<aside>
<div>
Fix shared library on Mac OS X.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.13.2</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2023-11-25">2023-11-25</time>
</header>
<aside>
<div>
Un-break seccomp for i386.
</div>
<div>
Start installing shared libraries alongside the static archives.
Also restrict symbol visibility to the contents of the public header
files.
</div>
<div>
Decouple writer libraries (<a href="kcgihtml.3.html">kcgihtml(3)</a>
and such) from reaching into private functions of
<a href="libkcgi.3.html">libkcgi(3)</a>. This meant moving some
writer functions (e.g.,
<a href="kcgi_writer_write.3.html">kcgi_writer_write(3)</a> into the
public header file.
This also allows for creating external writer routines.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.13.1</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2023-11-19">2023-11-19</time>
</header>
<aside>
<div>
Re-enable seccomp by default after introducing
<a href="https://github.com/kristapsdz/kcgi/actions">GitHub actions</a>
to test on
alternate architectures (armv7, aarch64, etc.).
</div>
<div>
Add
<a href="khttp_fcgi_getfd.3.html">khttp_fcgi_getfd(3)</a>, which
allows for asynchronous applications (those with a descriptor
polling loop) to incorporate <span class="nm">kcgi</span>.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.13.0</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2021-09-23">2021-09-23</time>
</header>
<aside>
<div>
<strong>Disable Linux's seccomp by default.</strong>
I'm just not able to maintain this facility in a reliable way. For
future work, it looks like <a href="https://landlock.io">landlock</a>
might be a better solution. Maintainers can enable seccomp by
editing the Makefile to re-add support. (This will also add
debugging.) I'll continue to add patches for those running with
seccomp, but don't have the bandwidth to test them.
</div>
<div>
Allow
<a href="khttpbasic_validate.3.html">khttpbasic_validate(3)</a>
to validate both <q>bearer</q> and <q>basic</q> requests.
This follows from conventional usage of bearer tokens.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.12.5</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2021-05-08">2021-05-08</time>
</header>
<aside>
<div>
Add support for <q>bearer</q> authorisation tokens. These are
described in
<a href="https://tools.ietf.org/html/rfc6750">RFC 6750</a>.
Fix <a href="khttp_fcgi_test.3.html">khttp_fcgi_test(3)</a> to work
properly when in variable-pool mode.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.12.4</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2021-03-02">2021-03-02</time>
</header>
<aside>
<div>
Add some attributes and elements for
<a href="https://www.w3.org/TR/html52/">HTML5.2</a>, which is the
standard supported by <a href="kcgihtml.3.html">kcgihtml(3)</a>.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.12.3</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2021-01-20">2021-01-20</time>
</header>
<aside>
<div>
<b>Bug fix</b>: fix some bad pointer arithmetic on a regression test
on Linux. While here, fix how <code>make regress</code> would spam
some systems with erroneous warning messages.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.12.2</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2020-07-24">2020-07-24</time>
</header>
<aside>
<div>
<b>Bug fix</b>: some errors encountered writing connection
file-descriptors to child processors in FastCGI were accidentally
ignored.
This came because the function returned success, failure, or hangup,
while the caller was testing for failure/success.
No such error has ever been reported in the wild—it would
probably signify much larger issues that would soon be caught
anyway—but the fix is still valid.
</div>
<div>
Significant simplification of the back-end in removing several
crufty interfaces.
Back-end logging now uses the front-end logging functions for
consistency and to avoid having separate loggers.
The same applies to the <code>debugging</code> parameter passed into
<a href="khttp_parse.3.html">khttp_parse(3)</a>.
</div>
<div>
<b>Bug fix</b> for FreeBSD with Capsicum when logging to a file
opened with <a href="kutil_openlog.3.html">kutil_openlog(3)</a>.
Same goes with the Linux and Darwin sandboxes.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.12.1</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2020-05-11">2020-05-11</time>
</header>
<aside>
<div>
Deprecate
<code>kutil_date2epoch</code>,
<code>kutil_date_check</code>,
<code>kutil_datetime2epoch</code>, and
<code>kutil_datetime_check</code>
in favour of
<a href="khttp_datetime2epoch.3.html">khttp_datetime2epoch(3)</a> and
<a href="khttp_datetime2epoch.3.html">khttp_date2epoch(3)</a>.
These variants use portable implementations of
<a href="https://man.openbsd.org/gmtime">gmtime(3)</a> and
<a href="https://man.openbsd.org/timegm">timegm(3)</a>
that are not
encumbered by per-system constraints such as FreeBSD not accepting
years prior to 1900 and of course the 32-bit problem.
</div>
<div>
Add
<a href="khttp_epoch2datetime.3.html">khttp_epoch2datetime(3)</a>
to symmetrise
<a href="khttp_datetime2epoch.3.html">khttp_datetime2epoch(3)</a>.
</div>
<div>
Further deprecate <code>kutil_epoch2str</code>,
<code>kutil_epoch2utcstr</code>,
<code>kutil_epoch2tmvals</code>, and
<code>KUTIL_EPOCH2TM</code> as
<a href="khttp_epoch2str.3.html">khttp_epoch2str</a>,
<a href="khttp_epoch2str.3.html">khttp_epoch2ustr</a>,
<a href="khttp_epoch2tms.3.html">khttp_epoch2tms</a>, and
<a href="khttp_epoch2tms.3.html">KHTTP_EPOCH2TM</a>, respectively.
The new forms, besides having consistent naming, specifically
account for corner cases like negative dates, years with more than
four digits, etc.
These no longer use the system
<a href="https://man.openbsd.org/strtime">strtime(3)</a>
due to inconsistencies between implementations (e.g., Oracle Solaris
not printing >4 digit years) and the 32-bit problem.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.12.0</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2020-04-10">2020-04-10</time>
</header>
<aside>
<div>
Add the <a href="khttp_urlpart.3.html">khttp_urlpart(3)</a> family
to replace the now-deprecated <code>kutil_urlpart</code> functions.
These are for the most part a re-name of the old functions that
remove the unused <code>struct kreq</code> argument.
There are some small behaviour changes from the original in corner
case usage: they have an empty suffix (not just <code>NULL</code>)
inhibit printing the dot-suffix, allow a <code>NULL</code> page, and
have an empty or <code>NULL</code> page also inhibit the suffix.
This way, these functions only produce valid URLs, and also allow
for some previously-disallowed (but valid) forms such as
<code>/?foo=bar</code>.
</div>
<div>
The previous functions have been retained with the original
behaviour <strong>with one exception</strong>: before, an empty
suffix would still print the period separator. Now, this is
suppressed.
</div>
<div>
The <code>khttp_vurlpart</code> and <code>khttp_vurlpartx</code>
forms, which accept a variable-length type, are also now exposed for
use.
</div>
<div>
Add the <a href="khttp_urlabs.3.html">khttp_urlabs(3)</a> function,
which is similar to the earlier <code>kutil_urlabs</code> but
significantly more robust and accepts query string arguments.
The earlier <code>kutil_urlabs</code> is retained, but deprecated.
</div>
<div>
Add <a href="khttp_urlencode.3.html">khttp_urlencode(3)</a> and
<a href="khttp_urldecode.3.html">khttp_urldecode(3)</a>,
replacing the legacy <code>kutil_urlencode</code> and
<code>kutil_urldecode</code>. They're identical
except in how <code>NULL</code> values are handled, in the first
case returning them as empty strings instead of <code>NULL</code>,
in the second regarding them as errors.
For the encoder, this allows all URL formatting tools to pass
<code>NULL</code> values as query string values without errors.
The earlier functions have been retained with the original behaviour
<strong>with one exception</strong>, in that a <code>NULL</code>
destination argument for <code>kutil_urldecode</code> triggers a
<code>KCGI_FORM</code> return.
</div>
<div>
Have <a href="kxml_puts.3.html">kxml_puts(3)</a>
and <a href="kxml_write.3.html">kxml_write(3)</a>
handle <code>NULL</code> pointers as content.
</div>
<div>
Verify and fix that all scope-opening functions in
<a href="kcgixml.3.html">kcgixml(3)</a> and
<a href="kcgihtml.3.html">kcgihtml(3)</a>
properly close variable arguments contexts on error.
</div>
<div>
Instead of aborting when the maximum number of scopes in
<a href="kcgijson.3.html">kcgijson(3)</a>,
<a href="kcgihtml.3.html">kcgihtml(3)</a>, or
<a href="kcgixml.3.html">kcgixml(3)</a>
has been reached, return <code>KCGI_ENOMEM</code>.
</div>
<div>
Check that the element index passed to
<a href="kxml_pushnull.3.html">kxml_pushnull(3)</a> is valid.
</div>
<div>
<strong>Behaviour change</strong>: previously, several
<a href="kcgixml.3.html">kcgixml(3)</a> functions would return
<code>KCGI_FORM</code>, such as when popping from an empty stack.
To prevent other <code>KCGI_FORM</code> errors from being masked,
use <code>KCGI_WRITER</code> to handle these situations.
</div>
<div>
Split apart <a href="kcgixml.3.html">kcgixml(3)</a> into one manpage
per function.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.11.0</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2020-03-27">2020-03-27</time>
</header>
<aside>
<div>
Bumping minor number due to some API and behaviour changes.
</div>
<div>
<strong>API change</strong>: previously,
<a href="khtml_ncr.3.html">khtml_ncr(3)</a> accepted a
<code>uint16_t</code> for its entity value.
However, these values can legitimately be 32 bits.
It has been changed to <code>uint32_t</code>.
</div>
<div>
<strong>API change</strong>: the <code>struct khtmlreq</code>
pointer passed into
<a href="khtml_elemat.3.html">khtml_elemat(3)</a> is now
<code>const</code>.
</div>
<div>
<strong>Behaviour change</strong>: previously,
<a href="khtml_closeto.3.html">khtml_closeto(3)</a> would return
<code>KCGI_FORM</code> if given a stack position greater than the
current stack.
This is inconsistent with other functions, so such values are now
simply ignored.
It also masks other problems that cause <code>KCGI_FORM</code> to
return.
Furthermore, if this function was invoked at the current depth, it
would close all scopes instead of none.
This has also been fixed.
</div>
<div>
<strong>Behaviour change</strong>: previously, many
<a href="kcgijson.3.html">kcgijson(3)</a> functions would return
<code>KCGI_FORM</code> if used out-of-context, for example, trying
to open a named object in an array context.
To prevent other <code>KCGI_FORM</code> errors from being masked,
introduce a new error code <code>KCGI_WRITER</code> to handle these
situations.
</div>
<div>
Passing a
<code>NULL</code> pointer value to the string writing functions of
<a href="khttp_puts.3.html">khttp_puts(3)</a>,
<a href="khttp_write.3.html">khttp_write(3)</a>,
<a href="kcgihtml.3.html">kcgihtml(3)</a> or
<a href="kcgijson.3.html">kcgijson(3)</a> would cause undefined
behaviour.
Now these are noops.
</div>
<div>
Add
<a href="khtml_printf.3.html">khtml_printf(3)</a>.
Split apart
<a href="kcgihtml.3.html">kcgihtml(3)</a> into one manpage per function.
Split apart
<a href="kcgijson.3.html">kcgijson(3)</a> into one manpage per function.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.18</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2020-03-22">2020-03-22</time>
</header>
<aside>
<div>
Add
<a href="khttp_printf.3.html">khttp_printf(3)</a> and
<a href="kcgi_buf_printf.3.html">kcgi_buf_printf(3)</a>.
Split out manual pages for
<a href="khttp_putc.3.html">khttp_putc(3)</a>,
<a href="khttp_puts.3.html">khttp_puts(3)</a>,
<a href="khttp_printf.3.html">khttp_printf(3)</a>, and
<a href="khttp_write.3.html">khttp_write(3)</a>; and also
<a href="kcgi_buf_putc.3.html">kcgi_buf_putc(3)</a>,
<a href="kcgi_buf_puts.3.html">kcgi_buf_puts(3)</a>,
<a href="kcgi_buf_printf.3.html">kcgi_buf_printf(3)</a>, and
<a href="kcgi_buf_write.3.html">kcgi_buf_write(3)</a>.
Add many more regression tests for the behaviour of these functions.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.16</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2020-03-17">2020-03-17</time>
</header>
<aside>
<div>
System now works out-of-the-box on OpenBSD, FreeBSD, NetBSD, Linux,
SunOS, OmniOS (IllumOS), Darwin.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.15</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2020-03-11">2020-03-11</time>
</header>
<aside>
<div>
Portability updates to the build system.
Bring in the newest
<a href="https://github.com/kristapsdz/oconfigure">oconfigure</a>.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.14</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2020-02-27">2020-02-27</time>
</header>
<aside>
<div>
Start using
<a href="https://man.openbsd.org/pkg-config">pkg-config</a> for all
<span class="nm">kcgi</span> libraries.
This makes it much easier to use the system without knowing
installation details.
All documentation has been upgraded to note the fact.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.13</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2020-02-17">2020-02-17</time>
</header>
<aside>
<div>
Re-write the internal logging function so that it does not use a
static buffer, lifting the previous 1024 byte limit.
This means that log messages might exhaust memory, but that seems
the lesser of two evils.
</div>
<div>
Relax <a href="kvalid_string.3.html">kvalid_email(3)</a> so that it
accepts three-byte e-mails (e.g., <code>a@b</code>) but tighten it
to require not starting or ending with a <code>@</code>.
</div>
<div>
Add a new user-visible wrapper function, <a
href="kmalloc.3.html">kvasprintf(3)</a>.
</div>
<div>
Protect against <code>NULL</code> format strings being passed to the
logging functions.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.12</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2020-01-12">2020-01-12</time>
</header>
<aside>
<div>
Fix regression framework.
This was failing for FastCGI tests because the framework wasn't
properly prefixing the HTTP version as it was for CGI tests.
This now allows all tests to run under the new curl.
</div>
<div>
Use the proper Capsicum header for FreeBSD.
</div>
<div>
Bring in the latest <a
href="https://github.com/kristapsdz/oconfigure">oconfigure</a>
and also merge dependent changes for seccomp on Linux.
Then enable seccomp protection for aarch64 on Linux.
</div>
<div>
Bring in optimisations and corrections in URL decoding by Dapeng
Gao, thanks!
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.11</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2019-07-05">2019-07-05</time>
</header>
<aside>
<div>
Maintenance release:
bring up to date with latest <a
href="https://github.com/kristapsdz/oconfigure">oconfigure</a>,
merge pending <a href="https://github.com/kristapsdz/kcgi">GitHub</a> pulls.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.10</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2018-12-27">2018-12-27</time>
</header>
<aside>
<div>
A lot of work for functioning on FreeBSD (specifically, breakage
with the sandbox) and musl libc.
Thanks to <code>[email protected]</code> for access to a FreeBSD
machine for testing and solving this issue!
</div>
<div>
Add <a href="kutil_urlencode.3.html">kutil_urldecode(3)</a> and
<a href="kutil_urlencode.3.html">kutil_urldecode_inplace(3)</a>,
which are the reverse of the existing encode functions.
</div>
<div>
Also, revert to using BSD Makefile instead of GNU.
Linux downstream will need to adjust to use <code>bmake</code> for
the build sequence.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.8</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2018-12-18">2018-12-18</time>
</header>
<aside>
<div>
Good-bye, systrace(4)…
</div>
<div>
Many minor documentation fixes from the GitHub pulls and issues page.
Thank you for everybody's submissions!
</div>
<div>
Many thanks to Valentin Pistol for verifying that the regressions
suite works properly on newer (Majove) builds of MacOS.
</div>
<div>
Allow compilation on
<a href="https://www.musl-libc.org/">musl</a>
by bringing in latest
<a href="https://github.com/kristapsdz/oconfigure">oconfigure</a>
and making some tweaks.
This also makes building without zlib to complete without compiler
warnings.
</div>
<div>
Fix transmitting certain UTF-8 characters via JSON.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.7</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2018-06-19">2018-06-19</time>
</header>
<aside>
<div>
Some excellent fixes from <a
href="https://github.com/mk-f">mk-f@</a> in getting better
support for <a href="https://kristaps.bsd.lv/kcaldav">kcaldav</a>:
fixing the <code>nc</code> value in digest authentication to be hex
and adding support for <code>application/xml</code> to the list of
supported MIME types.
Thanks!
</div>
<div>
Remove <strong>-lbsd</strong> requirement for Linux regression
tests.
Fix another issue where <a
href="https://man.openbsd.org/fpclassify.3">fpclassify(3)</a>
on Linux requires <strong>-lm</strong>.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.6</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2018-04-19">2018-04-19</time>
</header>
<aside>
<div>
Quick fix from Ross Richardson regarding URL encoding with the high bit set.
Thank you so much!
Also push in some small fixes from the <a
href="https://github.com/kristapsdz/kcgi">GitHub</a> list.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.5</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2018-04-19">2018-04-19</time>
</header>
<aside>
<div>
Add <a href="kcgi_strerror.3.html">kcgi_strerror(3)</a> for a string
representation of the error codes. Split <a
href="kutil_invalidate.3.html">kutil_invalidate(3)</a> into
its own manpage.
Fix up some corner cases in template handling: trailing delimiters,
empty key sequences, and so on.
Also allow for escaping delimeters, <code>\@@</code>, allowing for
the existence of delimeters as opaque text.
</div>
<div>
These fixes were implemented or suggested by Ingo Schwarze
(<q>schwarze@</q>) in an audit generously funded by CAPEM Solutions,
Inc.
Thank you so much!
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.3</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2018-04-10">2018-04-10</time>
</header>
<aside>
<div>
The <q>FastCGI release</q>: when running <span
class="nm">kcgi</span>'s FastCGI mode on nginx, processes
were being mysteriously killed under high load.
This was due to the end-point closing the connection before all data
was being read or written.
To wit, I now establish a difference (in FastCGI) between the
connection closing (which is a recoverable error) and the manager
killing the connection or the control socket exiting, which are not
recoverable.
Since most of this development was on Linux/ARM with nginx, the
sandbox for Linux has also been tooled up.
A <strong>big</strong> thanks to Elouan Pignet, who was kind enough
to diagnose the problem and provide access to his system for a fix,
including several failed attempts.
Thanks, Elouan!
</div>
<div>
To this end (<strong>API change</strong>), <a
href="khttp_fcgi_parse.3.html">khttp_fcgi_parse(3)</a> now
returns the <code>KCGI_EXIT</code> when the system has exited.
The <code>KCGI_HUP</code> is reserved for when the output channel
has closed (after parsing) and the current connection is no longer
valid.
The documentation has been updated for relevant functions.
</div>
<div>
While studying these code paths, make sure that a sequence of writes
(using <a href="khttp_write.3.html">khttp_write(3)</a> or any of the
writing front-ends) won't fail if <a
href="khttp_body.3.html">khttp_body(3)</a> wasn't able to
complete due to the connection closing.
Specifically, if the connection closes during <a
href="khttp_body.3.html">khttp_body(3)</a> (returning
<code>KCGI_HUP</code>), the system will still expect headers.
Earlier, it would assert with subsequent <a
href="khttp_write.3.html">khttp_write(3)</a> if the error
were not caught and the
In the modified behaviour, it will return <code>KCGI_FORM</code> to
indicate that the system is out of state.
</div>
<div>
Make <a href="khttp_fcgi_parse.3.html">khttp_fcgi_parse(3)</a> only
require that callers invoke <a
href="khttp_free.3.html">khttp_free(3)</a> if exiting with success.
This mirrors <a href="khttp_parse.3.html">khttp_parse(3)</a>.
</div>
<div>
Merge a set of tutorial fixes from <a
href="https://github.com/cyball">cyball</a>, thanks!
</div>
<div>
Allow the <a href="kutil_log.3.html">kutil_log(3)</a> functions to
accept a <code>NULL</code> request.
This makes it possible to use these functions for consistent logging
without a request.
</div>
<div>
Lastly, run through all code snippets, apply <a
href="https://man.openbsd.org/style.9">style(9)</a>, and
make sure that the MIME type is properly checked.
And add a new tutorial, <a href="tutorial6.html">Best practises for
pledge(2) security</a>.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.2</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2018-03-24">2018-03-24</time>
</header>
<aside>
<div>
Merge a set of patches from <a
href="https://github.com/kristapsdz/kcgi/pull/26">pull/26</a>.
These fix the digest authorisation in <q>auth-int</q> mode, most
often used by CalDAV systems.
Thanks to Charles Collicutt for the contribution!
</div>
<div>
While raising <a href="https://kristaps.bsd.lv/kcaldav">kcaldav</a>
from the dead, fix where the XML writer wasn't returning the correct
error code and causing strange errors.
</div>
<div>
Lastly, fix the Linux sandbox when running on ARM machines, enable
building for C++ applications, and add a tutorial and sample file.
Pull in most recent <a href="https://github.com/kristapsdz/oconfigure">oconfigure</a>.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.1</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2018-03-06">2018-03-06</time>
</header>
<aside>
<div>
Many of the improvements and fixes in this release were implemented or
suggested by Ingo Schwarze (<q>schwarze@</q>) in an audit generously
funded by CAPEM Solutions, Inc.
Thank you so much!
</div>
<div>
Proper versioning in the header file as documented in <a
href="kcgi.3.html">kcgi(3)</a>.
</div>
<div>
Fix <a href="kcgijson.3.html">kcgijson_string_write(3)</a> and
friends to not emit a superfluous quote before each invocation.
</div>
<div>
Add <a href="kcgi_buf_write.3.html">kcgi_buf_write(3)</a> and
friends to make working with
<a href="khttp_template.3.html">khttp_templatex(3)</a> easier.
(I also use it for <a
href="https://curl.haxx.se/libcurl">libcurl(3)</a> in-memory
buffers.)
</div>
<div>
<strong>API change</strong>: complete the change-over to writing
functions returning values by modifying <a
href="khttp_template.3.html">khttp_template(3)</a> and
friends to return a proper error code.
While here, significantly improve the manpage.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.10.0</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2018-01-18">2018-01-18</time>
</header>
<aside>
<div>
A minor bump here due to API changes, along with a plethora of
improvements: date handling, simplification of general code, and
getting error codes exported in the write sequence.
Many of the improvements and fixes in this release were implemented or
suggested by Ingo Schwarze (<q>schwarze@</q>) in an audit generously
funded by CAPEM Solutions, Inc.
Thank you so much!
</div>
<div>
<strong>Memory leak fix</strong>: fix <a
href="khttp_free.3.html">khttp_free(3)</a> to free a
forgotten allocation.
Probably only affects FastCGI processes at 16 bytes lost per request
parsed.
</div>
<div>
<strong>Feature</strong>: add the <a
href="kcgi_writer_disable.3.html">kcgi_writer_disable(3)</a>
function, which allows callers to
determine which front-end writers (e.g.,
<a href="kcgixml.3.html">kcgixml(3)</a>)
are allowed to exist.
This locks down the output formatting mechanism.
</div>
<div>
<strong>API change</strong>: the <a
href="kcgixml.3.html">kcgixml(3)</a> library now no longer
prints the XML prologue with <code>kxml_open()</code>.
This must be manually printed with <code>kxml_prologue()</code>.
</div>
<div>
<strong>API change</strong>: the
<a href="kcgijson.3.html">kcgijson(3)</a>,
<a href="kcgihtml.3.html">kcgihtml(3)</a>, and
<a href="kcgixml.3.html">kcgixml(3)</a> now return a consistent
error code for all operations.
The <code>khtml_text</code> function has been removed (it was deprecated).
</div>
<div>
<strong>API change</strong>: the
<a href="kutil_urlencode.3.html">kutil_urlencode(3)</a> family of
functions now all return <code>NULL</code> on memory failure.
Earlier, this was inconsistent.
</div>
<div>
<strong>API change</strong>: the
<a href="khttp_write.3.html">khttp_write(3)</a> family of
functions now all return <code>enum kcgi_err</code> to indicate a
failure condition.
</div>
<div>
<strong>API change</strong>: the <a
href="khttp_body.3.html">khttp_body(3)</a> function now
returns <code>enum kcgi_err</code> to indicate a failure condition
<strong>instead of</strong> whether compression was enabled.
</div>
<div>
<strong>API change</strong>: the <a
href="khttp_body.3.html">khttp_body_compress(3)</a> function
now returns <code>enum kcgi_err</code> to indicate a failure
condition <strong>instead of</strong> whether compression was
enabled.
Furthermore, the <code>comp</code> argument simply dictates whether
compression should be enabled or not, preventing confusion.
</div>
<div>
<strong>API change</strong>: the <a
href="khttp_head.3.html">khttp_head(3)</a> function now
returns <code>enum kcgi_err</code> to indicate a failure condition.
Furthermore, this function now dynamically allocates header lengths,
removing prior bounds on header length.
</div>
<div>
While here, improve <a href="khttp_head.3.html">khttp_head(3)</a>,
<a href="khttp_body.3.html">khttp_body(3)</a>,
<a href="kvalid_string.3.html">kvalid_string(3)</a>, and
<a href="kmalloc.3.html">kmalloc(3)</a> manpages.
</div>
<div>
Lastly, the <a href="kvalid_string.3.html">kvalid_date(3)</a>
function has been generalised for arbitrary dates, prompting the
addition of <a href="kutil_epoch2str.3.html">kutil_date_valid(3)</a>
and <a href="kutil_epoch2str.3.html">kutil_datetime_valid(3)</a>
functions to validate broken-down dates.
And bring up to date with latest <a
href="https://github.com/kristapsdz/oconfigure">oconfigure</a>.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.9.10</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2017-11-21">2017-11-21</time>
</header>
<aside>
<div>
Many internal small issues (allocation catches, better logging,
simplifying logic) fixed as found by Ingo Schwarze
(<q>schwarze@</q>) in an extensive audit generously funded by CAPEM
Solutions, Inc. None of these change application behaviour except
that standalone query parts are let through. For example,
<code>localhost/foo?bar=baz&xyzzy</code> now passes
<code>xyzzy</code> as a key-pair with a zero-length pair.
</div>
<div>
Note that parsing <code>text/plain</code> enctypes is now
deprecated, as I'm yet to see this ever used.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.9.9</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2017-10-30">2017-10-30</time>
</header>
<aside>
<div>
Switch to using <a
href="https://github.com/kristapsdz/oconfigure">oconfigure</a>.
Add the <a href="kvalid_string.3.html">kvalid_bit(3)</a> function
for bit fields.
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.9.8</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2017-10-18">2017-10-18</time>
</header>
<aside>
<div>
<strong>API changes</strong>: use the appropriate
<code>uint32_t</code> size for the HTTP digest authorisation nonce
count. This follows <a
href="https://tools.ietf.org/html/rfc7616">RFC 7616</a>,
sec. 3.4. Also add the <a href="kutil_log.3.html">kutil_err(3)</a>
family of functions, which report an error and exit. Split that
into <a href="kutil_openlog.3.html">kutil_openlog(3)</a> as well.
Lastly, commit considerable improvements to the <a
href="khttp_parse.3.html">khttp_parse(3)</a> and other
manpages, as well as some extra warning messages due to RFC
violations during HTTP parse. Most of these were found and patched
by Ingo Schwarze (<q>schwarze@</q>) in an extensive audit generously
funded by CAPEM Solutions, Inc. Thank you!
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.9.7</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2017-09-23">2017-09-23</time>
</header>
<aside>
<div>
Fix C headers in the documentation to be more minimal and
standards-compliant.
</div>
<div>
Add Ross Richardson's <a href="tutorial4.html">Using Pages</a>
tutorial. Ross developed the new <a
href="https://undeadly.org">Undeadly Journal</a>!
</div>
<div>
Bug fixes… Clarify some function elements in <a
href="khttp_parse.3.html">khttp_parse(3)</a>. Fixed
undefined behaviour caused when <a
href="khttp_template.3.html">khttp_templatex_buf(3)</a> is
passed a fallback function and mis-reports the input key length.
(If you use templating with a fallback function, you <strong>must
update</strong>.) Fix all instances of zero-length
allocations. These are non-portable and might cause erroneous
failure on some systems. Fix an error where using digest
authentication via <a
href="khttpdigest_validate.3.html">khttpdigest_validate(3)</a>
might crash with an unknown HTTP method. Most of these were found
by Ingo Schwarze (<q>schwarze@</q>) in an extensive audit generously
funded by CAPEM Solutions, Inc. Thank you!
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>
<h1>0.9.6</h1>
<address>Kristaps Dzonsons</address>
<time datetime="2017-08-31">2017-08-31</time>
</header>
<aside>
<div>
Add the <a href="khttp_template.3.html">khttp_template_fd(3)</a>
functions for passing a file descriptor into the template utility
instead of an open file or buffer. (Also clean up that
documentation.)
</div>
</aside>
</article>
<article data-sblg-article="1" data-sblg-tags="version">
<header>