canlock-hp

Parsers for RFC 5536 message headers and RFC 8315 Cancel-Lock and Cancel-Key header fields.







News




General

The canlock-hp package contains standalone header parsers that can be used to implement RFC 8315 Netnews Cancel-Locks on the receiving (server) side.
They are intended as preprocessors for canlock, the command line frontend of libcanlock, but are independent programs.

canlock-mhp (Message Header Parser) is intended to process RFC 5536 Netnews articles and can be used to extract and unfold a single header field.

canlock-hfp (Header Field Parser) is intended to process RFC 8315 header fields ("Cancel-Lock" and "Cancel-Key").

See README for details.




Example

Check incoming Cancel or Supersede

This script "check.sh" for POSIX operating systems expects the pathname of the article with the Keys ("Cancel-Key" header field) as the first option.
The second option must be the pathname of the article with the Locks ("Cancel-Lock" header field).
Both articles must be in canonical format (with CRLF line breaks).

#! /bin/sh

set -e

# Check options
if test $# -ne 2
then
   printf "%s\n%s\n" "Usage example: check.sh supersede.txt target.txt" \
          "(Both articles must be in canonical format)"
   exit 1
fi

# Check for utilities to be installed
canlock-mhp -v >/dev/null
canlock-hfp -v >/dev/null
canlock -v >/dev/null

# Extract Keys and Locks using canlock-hp
C_KEYS=$(<$1 canlock-mhp -f "Cancel-Key" | canlock-hfp 2>/dev/null)
printf "Keys : %s\n" "$C_KEYS" 1>&2
C_LOCKS=$(<$2 canlock-mhp -f "Cancel-Lock" | canlock-hfp 2>/dev/null)
printf "Locks: %s\n" "$C_LOCKS" 1>&2

# Check Keys against Locks using (lib)canlock
RES=1
for k in $C_KEYS
do
   # Do not check with zero length Keys (treat as mismatch)
   if test $(printf "%s" "$k" | tail -c 1 ) = ":"
   then
      RES=1
      printf "\n%s\n" "Zero length Key \"$k\"" 1>&2
      printf "%s\n" "=> Not checked" 1>&2
      continue
   fi

   for l in $C_LOCKS
   do
      printf "\n%s\n" "Check Key \"$k\" against Lock \"$l\"" 1>&2
      set +e
      canlock -c "$k","$l" >/dev/null 2>&1
      RES=$?
      set -e
      if test $RES -eq 0
      then
         printf "%s\n" "=> Good" 1>&2
         break
      else
         printf "%s\n" "=> Mismatch" 1>&2
      fi
   done
   # On success abort outer loop too
   if test $RES -eq 0
   then
      break
   fi
done

# Check for error
if test $RES -ne 0
then
   exit 1
fi

# EOF



Dependencies




Documentation




Binary packages




Browser        Last update: 2019-01-31        michael.baeuerle@gmx.net