Compare commits

..

No commits in common. "master" and "maint" have entirely different histories.

4 changed files with 17 additions and 58 deletions

View file

@ -1,13 +1,3 @@
yapfaq 0.10 (unreleased)
* Add: Charset definition.
Fixes #29.
* Mark yapfaq.pl executable.
* Change mail address.
Version 0.9.1 Version 0.9.1
* Fix: Test mode: Add X-Supersedes only if Supersedes would be set. * Fix: Test mode: Add X-Supersedes only if Supersedes would be set.

View file

@ -1,13 +0,0 @@
# yapfaq
**yapfaq** can post FAQs from text files to Usenet at configurable intervals and automatically adds the necessary headers.
## Description
With **yapfaq**, FAQs or other texts can be posted regularly (every x days, weeks, months or years) to one or more newsgroups. Posting frequency as well as the necessary headers - including the format of the `Message-ID:` headers that will be generated - can be defined in a configuration file. `Expires:` and `Supersedes:` will be set automatically by the script.
The text can either be posted via NNTP or piped to another programme (like `inews` or `tinews.pl`).
## More information
Please see the [distribution page](https://th-h.de/net/software/yapfaq/) (in German).

View file

@ -34,10 +34,6 @@ NGs = 'de.test'
# This setting is optional. Default: <%n-%y-%m-%d@YOURHOST> # This setting is optional. Default: <%n-%y-%m-%d@YOURHOST>
# MID-Format = '<%n-%y-%m-%d@domain.invalid>' # MID-Format = '<%n-%y-%m-%d@domain.invalid>'
# Character Encoding
# This setting is optional. Default: UTF-8
# Charset = ISO-8859-15
# Supersede last posting? # Supersede last posting?
# This setting is optional. Default: unset # This setting is optional. Default: unset
Supersede = yes Supersede = yes

48
yapfaq.pl Executable file → Normal file
View file

@ -1,18 +1,18 @@
#! /usr/bin/perl -W #! /usr/bin/perl -W
# #
# yapfaq Version 0.10 by Thomas Hochstein # yapfaq Version 0.91 by Thomas Hochstein
# (Original author: Marc Brockschmidt) # (Original author: Marc Brockschmidt)
# #
# This script posts any project described in its config-file. Most people # This script posts any project described in its config-file. Most people
# will use it in combination with cron(8). # will use it in combination with cron(8).
# #
# Copyright (C) 2003 Marc Brockschmidt <marc@marcbrockschmidt.de> # Copyright (C) 2003 Marc Brockschmidt <marc@marcbrockschmidt.de>
# Copyright (c) 2010-2017 Thomas Hochstein <thh@thh.name> # Copyright (c) 2010 Thomas Hochstein <thh@inter.net>
# #
# It can be redistributed and/or modified under the same terms under # It can be redistributed and/or modified under the same terms under
# which Perl itself is published. # which Perl itself is published.
our $VERSION = "0.10"; our $VERSION = "0.91";
# Please do not change this setting! # Please do not change this setting!
# You may override the default .rc file (.yapfaqrc) by using "-c .rc file" # You may override the default .rc file (.yapfaqrc) by using "-c .rc file"
@ -45,7 +45,7 @@ my %Options;
getopts('Vhvpdt:f:c:s:', \%Options); getopts('Vhvpdt:f:c:s:', \%Options);
# -V: print version / copyright information # -V: print version / copyright information
if ($Options{'V'}) { if ($Options{'V'}) {
print "$0 v $VERSION\nCopyright (c) 2003 Marc Brockschmidt <marc\@marcbrockschmidt.de>\nCopyright (c) 2010-2017 Thomas Hochstein <thh\@thh.name>\n"; print "$0 v $VERSION\nCopyright (c) 2003 Marc Brockschmidt <marc\@marcbrockschmidt.de>\nCopyright (c) 2010 Thomas Hochstein <thh\@inter.net>\n";
print "This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.\n"; print "This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.\n";
exit(0); exit(0);
} }
@ -82,7 +82,7 @@ foreach (@Config) {
my ($ActName,$File,$PFreq,$Expire) =($$_{'name'},$$_{'file'},$$_{'posting-frequency'},$$_{'expires'}); my ($ActName,$File,$PFreq,$Expire) =($$_{'name'},$$_{'file'},$$_{'posting-frequency'},$$_{'expires'});
my ($From,$Subject,$NG,$Fup2)=($$_{'from'},$$_{'subject'},$$_{'ngs'},$$_{'fup2'}); my ($From,$Subject,$NG,$Fup2)=($$_{'from'},$$_{'subject'},$$_{'ngs'},$$_{'fup2'});
my ($MIDF,$ReplyTo,$Charset,$ExtHea)=($$_{'mid-format'},$$_{'reply-to'},$$_{'charset'},$$_{'extraheader'}); my ($MIDF,$ReplyTo,$ExtHea)=($$_{'mid-format'},$$_{'reply-to'},$$_{'extraheader'});
my ($Supersede) =($$_{'supersede'}); my ($Supersede) =($$_{'supersede'});
# -f: loop if not FAQ to post # -f: loop if not FAQ to post
@ -111,7 +111,7 @@ foreach (@Config) {
if($Options{'d'}) { if($Options{'d'}) {
print "$ActName: Would be posted now (but running in simulation mode [$0 -d]).\n" if $Options{'v'}; print "$ActName: Would be posted now (but running in simulation mode [$0 -d]).\n" if $Options{'v'};
} else { } else {
postfaq(\$ActName,\$File,\$From,\$Subject,\$NG,\$Fup2,\$MIDF,\$Charset,\$ExtHea,\$Config{'Sender'},\$TDY,\$TDM,\$TDD,\$ReplyTo,\$SupersedeMID,\$Expire); postfaq(\$ActName,\$File,\$From,\$Subject,\$NG,\$Fup2,\$MIDF,\$ExtHea,\$Config{'Sender'},\$TDY,\$TDM,\$TDD,\$ReplyTo,\$SupersedeMID,\$Expire);
} }
} elsif($Options{'v'}) { } elsif($Options{'v'}) {
print "$ActName: Nothing to do.\n"; print "$ActName: Nothing to do.\n";
@ -238,7 +238,7 @@ sub updatestatus {
# It reads the data-file $File and then posts the article. # It reads the data-file $File and then posts the article.
sub postfaq { sub postfaq {
my ($ActName,$File,$From,$Subject,$NG,$Fup2,$MIDF,$Charset,$ExtraHeaders,$Sender,$TDY,$TDM,$TDD,$ReplyTo,$Supersedes,$Expire) = @_; my ($ActName,$File,$From,$Subject,$NG,$Fup2,$MIDF,$ExtraHeaders,$Sender,$TDY,$TDM,$TDD,$ReplyTo,$Supersedes,$Expire) = @_;
my (@Header,@Body,$MID,$InRealBody,$LastModified); my (@Header,@Body,$MID,$InRealBody,$LastModified);
print "$$ActName: Preparing to post.\n" if($Options{'v'}); print "$$ActName: Preparing to post.\n" if($Options{'v'});
@ -295,10 +295,6 @@ sub postfaq {
$$Subject =~ s/[<\[{\(]?\%LM[>\]}\)]?//; $$Subject =~ s/[<\[{\(]?\%LM[>\]}\)]?//;
} }
# Set Charset
$$Charset = 'UTF-8' if !$$Charset;
my $ContentType = sprintf('text/plain; charset=%s',$$Charset);
# Test mode? # Test mode?
if($Options{'t'} and $Options{'t'} !~ /console/i) { if($Options{'t'} and $Options{'t'} !~ /console/i) {
$$NG = $Options{'t'}; $$NG = $Options{'t'};
@ -321,7 +317,7 @@ sub postfaq {
push @Header, "Sender: $$Sender\n" if $$Sender; push @Header, "Sender: $$Sender\n" if $$Sender;
push @Header, "Mime-Version: 1.0\n"; push @Header, "Mime-Version: 1.0\n";
push @Header, "Reply-To: $$ReplyTo\n" if $$ReplyTo; push @Header, "Reply-To: $$ReplyTo\n" if $$ReplyTo;
push @Header, "Content-Type: $ContentType\n"; push @Header, "Content-Type: text/plain; charset=ISO-8859-15\n";
push @Header, "Content-Transfer-Encoding: 8bit\n"; push @Header, "Content-Transfer-Encoding: 8bit\n";
push @Header, "User-Agent: yapfaq/$VERSION\n"; push @Header, "User-Agent: yapfaq/$VERSION\n";
if ($$ExtraHeaders) { if ($$ExtraHeaders) {
@ -525,14 +521,6 @@ host B<yapfaq> is running on. Obviously that will only work if you
have defined a reasonable hostname that the hostfqdn() function of have defined a reasonable hostname that the hostfqdn() function of
Net::Domain can return. Net::Domain can return.
=item B<Charset> = I<encoding> (optional)
The character encoding of your FAQ. This setting is optional, but
should match the encoding of your FAQ B<File>. Default is set to
I<UTF-8>.
This setting is copied verbatim to the I<Content-Type> header.
=item B<Supersede> = I<yes> (optional) =item B<Supersede> = I<yes> (optional)
Add Supersedes header to the message containing the Message-ID header Add Supersedes header to the message containing the Message-ID header
@ -584,10 +572,6 @@ This setting is optional.
# Message-ID ("%n" is $Name) # Message-ID ("%n" is $Name)
# MID-Format = '<%n-%d.%m.%y@domain.invalid>' # MID-Format = '<%n-%d.%m.%y@domain.invalid>'
# Character Encoding
# This setting is optional. Default: UTF-8
# Charset = ISO-8859-15
# Supersede last posting? # Supersede last posting?
Supersede = yes Supersede = yes
@ -847,20 +831,22 @@ the last post of that FAQ.
=head1 BUGS =head1 BUGS
Please report any bugs or feature requests to the author or use the Please report any bugs or feature request to the author or use the
bug tracker at L<https://code.virtcomm.de/thh/yapfaq/issues>! bug tracker at L<http://bugs.th-h.de/>!
=head1 SEE ALSO =head1 SEE ALSO
L<https://th-h.de/net/software/yapfaq/> will have the current L<http://th-h.de/download/scripts.php> will have the current
version of this program. version of this program.
This program is maintained using the Git version control system at This program is maintained using the Git version control system. You
L<https://code.virtcomm.de/thh/yapfaq/>. may clone L<git://code.th-h.de/usenet/yapfaq.git> to check out the
current development tree or browse it on the web via
L<http://code.th-h.de/?p=usenet/yapfaq.git>.
=head1 AUTHOR =head1 AUTHOR
Thomas Hochstein <thh@thh.name> Thomas Hochstein <thh@inter.net>
Original author (up to version 0.5b, dating from 2003): Original author (up to version 0.5b, dating from 2003):
Marc Brockschmidt <marc@marcbrockschmidt.de> Marc Brockschmidt <marc@marcbrockschmidt.de>
@ -869,7 +855,7 @@ Marc Brockschmidt <marc@marcbrockschmidt.de>
Copyright (c) 2003 Marc Brockschmidt <marc@marcbrockschmidt.de> Copyright (c) 2003 Marc Brockschmidt <marc@marcbrockschmidt.de>
Copyright (c) 2010-2017 Thomas Hochstein <thh@thh.name> Copyright (c) 2010 Thomas Hochstein <thh@inter.net>
This program is free software; you may redistribute it and/or modify it This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself. under the same terms as Perl itself.