Post by Emil Schuster[...]
Post by Michael BäuerleEin konformer Parser ist auch wegen der Kommentare etwas kompliziert.
Cancel-Lock: (RFC 8315) sha1:qe8DBXvNQFF3SEw0/Os7vnF4HpU=
( sha1:Argh!== \) sha1:jyKHUsUSqw+dWbAoGGmmN+ZcG0g= )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Die komplette zweite Zeile ist hier ein Kommentar und muss ignoriert
werden, auch der markierte Teil.
Das würde bei mir zum nächsten Fehler führen... Danke für die ausführlichen
Erläuterungen.
Ich habe jetzt mal versucht so einen Parser zu schreiben:
<http://micha.freeshell.org/tmp/canlock-hp-0.0.0pre3.tar.bz2>
Eigentlich sind es zwei Parser. Einer für den ganzen Header gemäß
RFC 5322: canlock-mhp. Der möchte einen kompletten Artikel oder
wenigstens einen Header mit Separator (Leerzeile) am Ende als Input
(CRLF-Zeilenumbrüche). Beispiel:
------------------------------------------------------------------------
$ <article.txt canlock-mhp -f "Cancel-Lock"
Cancel-Lock: sha256:+anNYPRC7ftMjoOopWl7keEPwYEpMiIBsJhF5Upjf5s= sha1:Ah05x380QpwuqBAXy3KsznKvz2Y=
------------------------------------------------------------------------
Heraus kommt das Headerfeld, das mit der Option "-f" angegeben wurde
(entfaltet und ohne Zeilenumbruch am Ende).
Das kann man dann direkt an den zweiten Parser verfüttern: canlock-hfp.
Der ist für die in RFC 8315 definierten Headerfelder. Beispiel:
------------------------------------------------------------------------
$ <article.txt canlock-mhp -f "Cancel-Lock" | canlock-hfp -n
Cancel-Lock:
sha256:+anNYPRC7ftMjoOopWl7keEPwYEpMiIBsJhF5Upjf5s=
sha1:Ah05x380QpwuqBAXy3KsznKvz2Y=
------------------------------------------------------------------------
Oder eben das zitierte Beispiel:
------------------------------------------------------------------------
$ printf "%s" 'Cancel-Lock: (RFC 8315) sha1:qe8DBXvNQFF3SEw0/Os7vnF4HpU= ( sha1:Argh!== \) sha1:jyKHUsUSqw+dWbAoGGmmN+ZcG0g= )' | canlock-hfp -n
Cancel-Lock:
sha1:qe8DBXvNQFF3SEw0/Os7vnF4HpU=
------------------------------------------------------------------------
Anderer syntaktisch korrekter Unfug:
------------------------------------------------------------------------
$ printf "%s" 'CaNCel-lOCk: (#/&%$&\(%)sha1:aaaaBBBBXX== md5:(\sha1:\\\\)sha3-256/512:XXXX(\Argh\)sha0:YYYY=)' | canlock-hfp -n
Cancel-Lock:
sha1:aaaaBBBBXX==
md5:
sha3-256/512:XXXX
------------------------------------------------------------------------
Wenn man stderr wegwirft, bekommt man eine Liste mit SP Separatoren.
Man pages werden beim Build erzeugt.