cross-approval
a scheme for arranging for netnews articles,cross-posted to more than one moderated newsgroup,
to be approved by all relevant moderators independently
if the Newsgroups header names a moderated newsgroup
besides news.stuff [1],
without a corresponding X-Auth header [2],
the moderator
(
( uses PGPMoose to add an X-Auth header
for news.stuff with a PGP sig [3]
or adds a non-PGP X-Auth header for news.stuff in the format
specified for compatibility with PGPMoose [3]
),
decides which newsgroup ought to be considered next [4],
gets the address for that newsgroup's moderator [5],
mails the post to that moderator
)
else the moderator
does whatever they normally do to approve & post an article,
X-Auth: PGPMoose V1.1 PGP comp.os.linux.announce
iQCVAgUBOYx/51rUI/eHXJZ5AQH91QP/R1pN71k9zAMwaGZ6173up1x4oNJ7xwOD
K9V6pdesr162LwqL8o9sDt2oQSm0ggFfOY44JHPB5pc5ixlYbe5DbCYVwgzjv1Rk
RNPG0WcNStjhrQBeM+GL0TvpHynqAuDi+zUllEOB+Fn+FhJHMkifBstXnOgvFMdh
AhY53SPX6eE=
=R0+1
X-Auth: None JohnDoe@some-place.com news.stuff
/* abend if we've already approved this post */
do i = 1 to Mail.X_AUTH.0
parse var Mail.X_AUTH.j X_AUTH_FirstLine ( NewLine ) .
if lower( word( X_AUTH_FirstLine, words( X_AUTH_FirstLine ) ) ),
= lower( ThisNewsgroup ) then do
call abend 'we''ve already approved this one - it needs a manual fix'
end
end
/* find out if any other group is moderated and not yet approved for */
NewsgroupsPostedTo = translate( Mail.HEADER.NEWSGROUPS, ' ', ',' )
NeedMoreApprovals = 0
do i = 1 to words( NewsgroupsPostedTo )
NewsgroupPostedTo = word( NewsgroupsPostedTo, i )
if NewsgroupPostedTo \= ThisNewsgroup,
& NewsgroupStatus.NewsgroupPostedTo = 'moderated' then do
NeedMoreApprovals = 1
/* find out if it's been approved for */
do j = 1 to Mail.X_AUTH.0
parse var Mail.X_AUTH.j X_AUTH_FirstLine ( NewLine ) .
if lower( word( X_AUTH_FirstLine, words( X_AUTH_FirstLine ) ) ),
= lower( NewsgroupPostedTo ) then do
say NewsgroupPostedTo 'is approved for'
NeedMoreApprovals = 0
leave j
end
end
if NeedMoreApprovals then do
NewsgroupNeedingApproval = NewsgroupPostedTo
say NewsgroupNeedingApproval 'isn''t approved for'
leave i
end
end
end
/* do X-Auth header or our own approval header */
if NeedMoreApprovals then do
call lineout PostOutFile, 'X-Auth: None' ModeratorAddress ThisNewsgroup
end
else do
call lineout PostOutFile, 'Approved:' ModeratorAddress '('ModeratorProperName
call lineout PostOutFile, ' by charter at' ThisNewsgroupCharterURL')'
end
/* preserve existing X-Auth headers */
do i = 1 to Mail.X_AUTH.0
call charout PostOutFile, 'X-Auth:' Mail.X_AUTH.i || NewLine
end
/* then follows the writing out of the rest of the headers & body from
the original post */
...
/* post or send on to next moderator */
if NeedMoreApprovals then do
/* construct next moderator's address, changing '.' to '-' */
NextModeratorViaIsc = translate( NewsgroupNeedingApproval, '-', '.' ),
|| '@moderators.isc.org'
call mailArticle NextModeratorViaIsc, PostOutFile
end
else do
call postArticle PostOutFile
end