.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Mail::SRS::Daemon 3pm" .TH Mail::SRS::Daemon 3pm "2022-11-27" "perl v5.36.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Mail::SRS::Daemon \- modular daemon for Mail::SRS .SH "SYNOPSIS" .IX Header "SYNOPSIS" my \f(CW$daemon\fR = new Mail::SRS::Daemon( SecretFile => \f(CW$secretfile\fR, Separator => \f(CW$separator\fR, ); \&\f(CW$daemon\fR\->\fBrun()\fR; .SH "DESCRIPTION" .IX Header "DESCRIPTION" The \s-1SRS\s0 daemon listens on a socket for \s-1SRS\s0 address transformation requests. It transforms the addresses and returns the new addresses on the socket. .PP It may be invoked from exim using ${readsocket ...}, and probably from other MTAs as well. See http://www.anarres.org/projects/srs/ for examples. .SH "METHODS" .IX Header "METHODS" .ie n .SS "$daemon = new Mail::SRS::Daemon(...)" .el .SS "\f(CW$daemon\fP = new Mail::SRS::Daemon(...)" .IX Subsection "$daemon = new Mail::SRS::Daemon(...)" Construct a new Mail::SRS object and return it. All parameters which are valid for Mail::SRS are also valid for Mail::SRS::Daemon and will be passed to the constructor of Mail::SRS verbatim. The exception to this rule is the Secret parameter, which will be promoted to a list and will have all secrets from SecretFile included. New parameters are documented here. See Mail::SRS for the rest. .ie n .IP "SecretFile => $string" 4 .el .IP "SecretFile => \f(CW$string\fR" 4 .IX Item "SecretFile => $string" A file to read for secrets. Secrets are specified once per line. The first specified secret is used for encoding. Secrets are written one per line. Blank lines and lines starting with a # are ignored. If Secret is not given, then the secret file must be nonempty. .Sp Secret will specify a primary secret and override SecretFile if both are specified. However, secrets read from SecretFile still be used for decoding if both are specified. .ie n .IP "Socket => $socket" 4 .el .IP "Socket => \f(CW$socket\fR" 4 .IX Item "Socket => $socket" An instance of IO::Socket, presumed to be a listening socket. This may be provided in order to use a preexisting socket, rather than have Mail::SRS::Daemon construct a new socket. .ie n .SS "$daemon\->\fBrun()\fP" .el .SS "\f(CW$daemon\fP\->\fBrun()\fP" .IX Subsection "$daemon->run()" Run the daemon. This method will never return. Errors and exceptions are caught, and error messages are returned down the socket. .SH "EXPORTS" .IX Header "EXPORTS" Given :all, this module exports the following variables. .ie n .IP "$SRSSOCKET" 4 .el .IP "\f(CW$SRSSOCKET\fR" 4 .IX Item "$SRSSOCKET" The filename of the default socket created by Mail::SRS::Daemon. .SH "PROTOCOL" .IX Header "PROTOCOL" The daemon waits for a single line of text from the client, and will respond with a single line. The lines are all of the form \*(L"\s-1COMMAND\s0 args...\*(R". Currently, two commands are supported: forward and reverse. .PP A forward request looks like: .PP .Vb 1 \& FORWARD sender@source.com alias@forwarder.com .Ve .PP A reverse request looks like: .PP .Vb 1 \& REVERSE srs0+HHH=TT=domain=local\-part@forwarder.com .Ve .PP In either case, the daemon will respond with either a translated address, or a line starting \*(L"\s-1ERROR \*(R",\s0 followed by a message. .SH "TODO" .IX Header "TODO" Add more daemon-related options, such as path to socket, or inet socket address. .SH "SEE ALSO" .IX Header "SEE ALSO" Mail::SRS, srsd, http://www.anarres.org/projects/srs/ .SH "AUTHOR" .IX Header "AUTHOR" .Vb 4 \& Shevek \& CPAN ID: SHEVEK \& cpan@anarres.org \& http://www.anarres.org/projects/ .Ve .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 2004 Shevek. All rights reserved. .PP This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.