#!/bin/sh # # post.news # # meant to be invoked as a sendmail-compatible mailer from zmailer. Arguments # are the newsgroups to which the article should be posted. A complete # message, including To:, From: and From_ line expected on stdin. # # To use this script as a transport agent, add the following to scheduler.cntl: # usenet/* 1m 10 0 0 root daemon sm -c $channel news # The definition of the news transport agent in sm.cf should contain # news m /usr/lib/zmail/post.news post.news $u # (adjust this to reflect the actual location of the installed copy of this # script, of course) # # Jean-Francois Lamy (lamy@ai.toronto.edu), 88-02-13 # based on code by Rayan Zachariassen. # Notes: # - The news program invoked by this script should trust From: lines # (otherwise workstation name hiding, full-name id generation and # all other smarts done by router.cf will be lost) # - router.cf checks local parts with embedded dots for membership in the # active newsgroups file and routes them through this transport agent. One # word newsgroup names are not tested in that fashion, because of the risk # of obscure clashes with user-ids. Explicit aliases of the form # gradnews: gradnews@localnews # should be used for those (such names are not a good idea to start with). # If such aliases are used, add a line in hosts.transports that reads # localnews usenet! # This tells the router that mail to fake host localnews is to be sent to the # local host (there is nothing after the !) on channel usenet. # this version forwards the article via mail to a server that will trust # the return address. server="feednews@news-server.csri.toronto.edu" case x$DISTRIBUTE in x) org="`cat /local/share/news/organi?ation`" [ "$org" ] || org = "Department of Computer Science, University of Toronto" orgflag=1 ;; *) orgflag=0 ;; esac from=/tmp/from$$ for i in $@ do groups="${groups+$groups,}$i" done awk "BEGIN { subject = 0; body = 0; skipping = 0 ; newsgroups = 0; distribution = 0; organization = $orgflag; print \"To: $server\" } body == 1 { print; next } /^$|^[ ][ \\t]*$/ { if (!body) { np = split(path,parts,\"!\"); if (!organization && np == 1) print \"Organization: $org\"; if (!newsgroups) print \"Newsgroups: $groups\"; if (!subject) print \"Subject: (none)\"; } print; body = 1; next } /^To:|^X-To:|^Cc:|^Apparently-To:/ { skipping=1 ; next } /^Newsgroups:/ { newsgroups = 1; skipping = 0; printf(\"%s\",\$0); if (\"$groups\" != \"\") printf(\",%s\\n\",\"$groups\"); else printf(\"\\n\"); next } /^Distribution:/ { distribution = 1; skipping = 0; print; next } /^Subject:/ { subject = 1; skipping = 0; print; next } /^From |^Return-Path:/ { print \$2 > from ; path = \$2 ; skipping = 1; next } /^[ ]/ { if (skipping) next } /^[A-Za-z-]*:[ \\t]*$/ { if (!body) next } { print } " from="$from" - >/tmp/bug$$ if [ -s $from ]; then /usr/lib/sendmail -f"`cat $from`"