Adding upstream version 4.98.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
This commit is contained in:
parent
b600454cc3
commit
802ab461a9
421 changed files with 269728 additions and 0 deletions
2
.ctags
Normal file
2
.ctags
Normal file
|
@ -0,0 +1,2 @@
|
|||
--recurse
|
||||
--exclude=build-*
|
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
ACKNOWLEDGMENTS encoding=utf-8
|
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
Local
|
||||
build-*
|
||||
tags
|
||||
cscope.*
|
9
ABOUT
Normal file
9
ABOUT
Normal file
|
@ -0,0 +1,9 @@
|
|||
Exim repository: src
|
||||
--------------------
|
||||
|
||||
This directory contains everything that is included in an Exim distribution
|
||||
tarball, with the exception of the doc directory and an empty Local directory.
|
||||
You can build Exim from the contents of this directory by adding a Local
|
||||
directory that contains appropriate configuration files.
|
||||
|
||||
End
|
476
ACKNOWLEDGMENTS
Normal file
476
ACKNOWLEDGMENTS
Normal file
|
@ -0,0 +1,476 @@
|
|||
EXIM ACKNOWLEDGEMENTS
|
||||
|
||||
This file is divided into two parts. The first is the original list maintained
|
||||
by Exim's author, Philip Hazel, before he retired. That has two sub-lists of
|
||||
contributors. The second main part is an attempt to bring this up-to-date,
|
||||
using information from ChangeLog and git.
|
||||
|
||||
Names may well occur more than once.
|
||||
|
||||
There was a five year gap. It is unlikely that this file is complete.
|
||||
If you contributed and are not listed, then *please* let us know. Even if you
|
||||
don't much care, we want to acknowledge your help. A contribution isn't just
|
||||
code, it includes reporting real bugs, helping with tracking problems down,
|
||||
documentation fixes and more.
|
||||
|
||||
(Note that we have patches from folks in various countries and Latin1 is not
|
||||
sufficient to handle all of their names acceptably.
|
||||
This file should be in UTF-8).
|
||||
|
||||
-Phil Pennock, pp The Exim Maintainers.
|
||||
|
||||
============================8< cut here >8==============================
|
||||
|
||||
I have not been very good at keeping a proper record of all the people who have
|
||||
sent in patches and other contributions to Exim. I am going to try to do better
|
||||
in the future by keeping a record in this file. First, I'll put a list of all
|
||||
those I can recover from the past; then I'll create a new list to which I'll
|
||||
add new contributors in future. Some regular contributors may appear in both.
|
||||
|
||||
I'm going to record people who send in actual patches or who help in detailed
|
||||
ways. I'm not going to list people who just make a suggestion or report a
|
||||
bug. I hope that is a reasonable approach.
|
||||
|
||||
If you should be on one of these lists and are not, please accept my apologies,
|
||||
and let me know! Any omissions are solely due to my incompetence. In
|
||||
particular, the "past" list has certainly lost the names of people who sent in
|
||||
relatively small patches.
|
||||
|
||||
Philip Hazel
|
||||
|
||||
Lists created: 20 November 2002
|
||||
Last updated (by PH): 22 August 2007
|
||||
|
||||
THE OLD LIST
|
||||
|
||||
Alan Barratt First code for relay checking
|
||||
Malcolm Beattie Interface to embedded Perl
|
||||
Philip Blundell First support for IPv6
|
||||
Piete Brooks Running the first live version
|
||||
Implementing multiple-system compilation
|
||||
Matthew Byng-Maddick First code for dsearch lookup
|
||||
Steve Campbell Extensions to eximstats
|
||||
Steve is now the maintainer of eximstats
|
||||
Brian Candler LDAP support enhancement
|
||||
Petr Cech PostgreSQL interface
|
||||
Steve Clarke Best way to find the load average in Linux
|
||||
Energis Ltd Resources for the exim.org site
|
||||
Yann Golanski Numerical hash function
|
||||
Jason Gunthorpe IPv6 support (Linux)
|
||||
Michael Haardt LDAP support enhancement
|
||||
Steve Haslam First code for TLS
|
||||
Kjetil Torgrim Homme Suggested patch for macro extensions
|
||||
John Horne Proof-reading documentation (repeatedly)
|
||||
Pierre Humblet Cygwin support
|
||||
Paul Kelly MySQL interface
|
||||
First code for Oracle interface
|
||||
Ian Kirk Radius support
|
||||
Stuart Levy Replacement for broken inet_ntoa() on IRIX
|
||||
Stuart Lynne First code for LDAP
|
||||
Nigel Metheringham Setting up the website and mailing list
|
||||
Managing the website and mailing list
|
||||
Interface to Berkeley DB
|
||||
Support for cdb
|
||||
Support for maildir
|
||||
Barry Pederson LDAP support enhancement
|
||||
Marc Prud'hommeaux SPA client authentication
|
||||
Alexander Sabourenkov pwcheck daemon support
|
||||
Peter Savitch LDAP support enhancement
|
||||
Robert Wal whoson lookup
|
||||
Joachim Wieland Researching strace and stolen subprocesses in Linux
|
||||
|
||||
|
||||
THE NEW LIST
|
||||
|
||||
Alexander Alekseev Use of function attribute checks in gcc
|
||||
Justo Alonso Suggested patch for maildir++ maildirsize file support
|
||||
Anton Altaparmakov Patches to get cyrus_sasl fully working
|
||||
Simon Arlott Patch for $dnslist_matched.
|
||||
Claus Assmann Example code for OpenSSL CRL support
|
||||
Warren Baker Experimental Redis lookup.
|
||||
Robert Bannocks Patch for LDAP reference problem on Solaris
|
||||
Ian Bell Analysis of a bug and an infelicity in clock tick code
|
||||
Patch for ${quote_local_part
|
||||
Peter Benie A number mistakes found by analysing the code
|
||||
Johannes Berg Suggested patch for authentication client $auth<n> support
|
||||
Suggested patch for acl_not_smtp_start
|
||||
Matt Bernstein LMTP over socket
|
||||
Suggested patch for dnslists '&' feature
|
||||
Mike Bethune Help with debugging an elusive ALRM signal bug
|
||||
Ard Biesheuvel Lookup code for accessing an Interbase database
|
||||
Richard Birkett Fix for empty -f address crash
|
||||
Dean Brooks Fix for ratelimit per_rcpt in acl_not_smtp.
|
||||
Nick Burrett Patch for CONFIGURE_FILE_USE_EUID in exicyclog
|
||||
Matthew Byng-Maddick Patch for qualify_domain in redirect router
|
||||
Patch for ignore_target_hosts in ipliteral router
|
||||
The cyrus_sasl authenticator
|
||||
Steve Campbell eximstats extensions and continued maintenance
|
||||
Brian Candler Use h_errno for gethostbyname()
|
||||
Suggested patch for .ifdef etc
|
||||
Several minor fixes and suggestions
|
||||
Pete Carah Patch for change to radiusclient API
|
||||
Oliver Cook Suggested patch for exigrep & rejected messages
|
||||
Patch to add sender/host info to local_scan() rejects
|
||||
Suggested patch to add queue time to "Completed"
|
||||
Ted Cooper Suggested patch for NOTQUIT ACL
|
||||
Jennifer Corley Designing the new Exim logo
|
||||
John Dalbec Patch for quota_warn_threshold bug
|
||||
Vivek Dasmohapatra Suggested patch for CRL support
|
||||
Dennis Davis Suggested server_condition for all authenticators
|
||||
Andrew Doran Patch for NetBSD configuration files
|
||||
Patch for ifreq alignment and size problems
|
||||
Michael Deutschmann Suggested patch for treating bind() failure like connect()
|
||||
Patch for $sender_data and $recipient_data
|
||||
Suggested patch for null address match lookup bug
|
||||
Suggested patch for verify = not_blind
|
||||
Patch for alternate TXT lookup in DNS lists
|
||||
Oliver Eikemeier Patch to skip Received: if expansion is empty
|
||||
Patch for "eqi"
|
||||
Nico Erfurth Fix for bug in ${readfile}
|
||||
Patch for router_home_directory
|
||||
Patch for ACL crash (try to test sender after ETRN)
|
||||
Suggested patch for lookup search bug
|
||||
Suggested patch for advertise_condition
|
||||
Patch for missing HELO in checkaccess
|
||||
Patch for raw headers
|
||||
Patch for lsearch lookups tidying
|
||||
Patch for .include_if_exists
|
||||
Patch for partial- not recognized in host list
|
||||
Lots more patches for bug fixes, enhancements, and
|
||||
code refactorings - too many to record details!
|
||||
Jochen Erwied Fix for BDB 4.1 API
|
||||
Stefan Esser Fix for DNS RR parsing bug
|
||||
Peter Evans Suggested using modification time of "new" for time
|
||||
of "mailbox last read" for maildir
|
||||
Andrew Findlay Patch to close writing end of ${readsocket
|
||||
Michael Fischer
|
||||
v. Mollard Suggested patch for exigrep -t option
|
||||
Kevin Fleming Callout cache code
|
||||
Patch for authenticated_sender
|
||||
Tony Finch Expansion extensions
|
||||
Timezone addition to log timestamps
|
||||
A number of useful code criticisms
|
||||
Timezone patch for exiwhat
|
||||
Patch for more daemon exiwhat information
|
||||
Patch for -dd
|
||||
Patch for mxh lookup type in dnsdb
|
||||
Patch for defer_foo in dndsb
|
||||
Patch for ${dlfunc
|
||||
Patch for $message_linecount
|
||||
... and many more
|
||||
Graeme Fowler Suggested patch for /noupdate with ratelimit
|
||||
Ian Freislich Patch for spamd timeout problem
|
||||
Giuliano Gavazzi Patches for OSX compilation
|
||||
Dominic Germain Patch for exiqgrep MacOS X bug
|
||||
Oliver Gorwits $load_average patch
|
||||
Patch for additional syslog facilities
|
||||
James Grinter Suggested patches for header manipulation functions
|
||||
and recipient remove for local_scan() use
|
||||
Lukasz Grochal Patch for saslauthd buglet
|
||||
Pavel Gulchouck Diagnosis of return_path_on_delivery crash
|
||||
Michael Haardt Tidies to make the code stricter
|
||||
Refactoring to allow for other filter types
|
||||
Suggested patch for appendfile "folder" extension
|
||||
Module to support Sieve (RFC 3028) filters and
|
||||
continued maintenance of same
|
||||
Patch for faster sort algorithm in queue.c
|
||||
Patch for LDAP timeout handling
|
||||
... and several more
|
||||
Thomas Hager Patch for saslauthd crash bug
|
||||
Richard Hall Fix for file descriptor leak in redirection
|
||||
Fix for exiqsumm output corner case
|
||||
Jori Hamalainen Patch to add features to exiqsumm
|
||||
Patch to speed up exigrep
|
||||
Steve Haslam Lots of stuff, including
|
||||
HMAC computations
|
||||
Better error messages for BDB
|
||||
Sheldon Hearn Suggested patch for smtp_accept_max_nonmail_hosts
|
||||
Fix for compile error with OpenSSL 0.9.8e
|
||||
Bryan Henderson Patch to use RM_COMMAND everywhere during building
|
||||
Jakob Hirsch Patch for % operator
|
||||
Patch for arbitrarily named ACL variables
|
||||
Magnus Holmgren Patch for filter_prepend_home
|
||||
Patch for "h" flag in Domain Keys
|
||||
Patch for $sending_ip_address/$sending_port
|
||||
Patch for ${rfc2047d:
|
||||
... and several more
|
||||
Lots of other maintenance support
|
||||
Kjetil Torgrim Homme Patch for require_files problem on NFS file systems
|
||||
Tom Hughes Suggested patch for $n bug in pipe command from filter
|
||||
Pierre Humblet Continued Cygwin support
|
||||
Peter Ilieve Suggested patch for lookup search bug
|
||||
John Jetmore Writing and maintaining the 'exipick' utility
|
||||
Much helpful testing of the test suite & elsewhere
|
||||
Patch for -Mset
|
||||
Patch for TLS testing with -bh/-bhc/-bs
|
||||
Patch for exigrep -v functionality
|
||||
Bob Johannessen Patch for Sieve envelope tests bug
|
||||
Patch for negative uid/gid bug
|
||||
Brad Jorsch Patch for bitwise logical operators
|
||||
Patch for using "message" on acceptance
|
||||
Patch to add == and =& to dnslists
|
||||
Christian Kellner Patch for LDAP dereferencing
|
||||
Alex Kiernan Patches for libradius
|
||||
Diagnosis of milliwait clock-backwards bug
|
||||
Patch for BDB 4.3 API change
|
||||
Tom Kistner SPA server code
|
||||
Writing and maintaining the content scanning
|
||||
extension (exiscan)
|
||||
Jürgen Kreileder Fix for cyrus_sasl advertisement problem
|
||||
Friso Kuipers Patch for GDBM problem
|
||||
Matthias Lederhofer Diagnosing and patching obscure and subtle socket bug
|
||||
Chris Liddiard Fix for bug in exiqsumm
|
||||
Chris Lightfoot Patch for -restore-times in exim_lock
|
||||
Edgar Lovecraft Patch for ${str2b64:
|
||||
Torsten Luettgert Suggested patch for proper integer overflow detection
|
||||
Todd Lyons Patch to add DMARC support using OpenDMARC libs/tools
|
||||
David Madole Patch for SPA forced expansion failure bug
|
||||
Lars Mainka Patch for OpenSSL crl collections
|
||||
Andrey Malyshev Patch for $address_data after redirection bug
|
||||
Lionel Elie Mamane Patch for IPv4/IPv6 listen() problem on USAGI Linux
|
||||
Patch for recognizing IPv6 "scoped addresses"
|
||||
Patch for callout caching bug
|
||||
Everton da Silva Marques Suggested patch for SRV handling
|
||||
Suggested patch for SRV/MX lookup retry option
|
||||
Nikos Mavrogiannopoulos GnuTLS proof of concept code
|
||||
Update to RSA and D-H parameter caching code
|
||||
Komar Maxim Patch for check_rfc2047_length
|
||||
Andy Mell Fix for rejectlog regeneration bug
|
||||
Marc Merlin Many suggestions and patches for callouts and
|
||||
SMTP error message features
|
||||
Andreas Metzler Patch for message_id_header_domain
|
||||
Suggested patch for multi-config files in scripts bug
|
||||
GnuTLS non-existent parameter file bug fix
|
||||
Alex Miller Suggested readline() patch
|
||||
Patch for LDAP_RES_SEARCH_REFERENCE handling
|
||||
Support for the DrWeb content scanner
|
||||
Arkadiusz Miskiewicz Patch to add timeout to reads in malware.c
|
||||
Martin Mrazik Patches for problems in the test suite
|
||||
Andreas Mueller Patch for logging uncompleted SMTP transactions
|
||||
Pete Naylor Patch for LDAP TCP connect timeout setting
|
||||
Alexander Newmann Diagnosing and patching obscure and subtle socket bug
|
||||
Matthew Newton Patch for exicyclog log location problem
|
||||
Marcin Owsiany Diagnosis of a tricky timeout failure bug
|
||||
Andrey Panin Dovecot authenticator
|
||||
Eric Parusel Patch for tls_remember_esmtp
|
||||
Gaige Paulsen Amended Darwin config files
|
||||
Richard Premdas Patch for PAM buglet
|
||||
Jason Pyeron Suggested patch for ignoring Sendmail's -O option
|
||||
Axel Rau Patch for Transport Post Delivery sql logging
|
||||
Mark Rigby-Jones Patch for race condition during MBX locking
|
||||
Robert Roselius Patch for OpenSSL workaround for bad clients
|
||||
Larry Rosenman OpenUNIX config files
|
||||
Alexander Sabourenkov Patch to add saslauthd daemon support
|
||||
Patch for MySQL non-data queries
|
||||
David Saez Suggested patch for $sender_hostname lookup if needed
|
||||
Support for the clamd virus scanner
|
||||
Suggested patch for increased number of ACL variables
|
||||
Jonathan Sambrook Suggested patch for expanding uid and gid lists
|
||||
Peter Savitch Diagnosis of FPE bug when statvfs() fails on spool
|
||||
Harald Schueler Patch for dn_expand() failure on truncated data
|
||||
Heiko Schlichting Diagnosis of intermittent daemon crash bug
|
||||
Heiko Schlitterman Proposed patch for +pid
|
||||
Stephan Schulz Patch for $host_data caching error
|
||||
Lai Zit Seng Patch for radiusclient 0.4.9 interface bugs
|
||||
Tony Sheen Log files with datestamped names and auto rollover
|
||||
Martin Sluka Patch for exigrep to include non-message lines
|
||||
Adam Stephens Suggested patch for IGNOREQUOTA in LMTP
|
||||
Russell Stuart Diagnosis of obscure batch multiple delivery bug
|
||||
Tamas Tevesz Patch for crypt16() support
|
||||
Johan Thelmen Support for the F-Secure virus scanner
|
||||
William Thompson Suggested patch for acl_smtp_helo
|
||||
Suggested patch for nested ACL "drop" bug
|
||||
Suggested patch for continuation lines in file ACLs
|
||||
Patch for != support in DNS lists
|
||||
Adam Thornton Patch for SMTP port expansion
|
||||
Daniel Tiefnig Much helpful testing of the test suite
|
||||
Rein Tollevik Patch to fix search cache missing tidyup
|
||||
Stefan Traby Threaded Perl support
|
||||
Samuli Tuomola OS files for QNX 6.2.0
|
||||
Dave Turner Suggested patch for sender rewriting brokenness
|
||||
Steve Usher Unbuffered I/O patch for Dovecot authentication
|
||||
Carlos Villegas Suggested patch for "headers" in filter files
|
||||
Matthias Waffenschmidt Patch for build-time Perl bug in configure script
|
||||
Queue run abandon log message tidy up
|
||||
Norihisa Washitake Suggested patch for RFC 2047 header decoding
|
||||
Chris Webb Patch for support of an SPF lookup method.
|
||||
Florian Weimer Patch for minor format string issue
|
||||
Noticing the unwanted (and time-wasting) GnuTLS
|
||||
RSA_EXPORT code, and supplying a patch to remove it
|
||||
Joachim Wieland Patches for PostgreSQL socket support and other
|
||||
PostgreSQL functionality
|
||||
Patch for hosts_avoid_esmtp
|
||||
Stephen Wilcox Patch for ignore_enotdir problem
|
||||
Alain Williams Suggested patch for exicyclog options
|
||||
PATCH for LDAP referrals option
|
||||
David Woodhouse SQLite support proof of concept code
|
||||
control=freeze/no_tell basic code
|
||||
Erik ? patch to use select() instead of poll() on OS X
|
||||
****
|
||||
|
||||
============================8< cut here >8==============================
|
||||
|
||||
The Exim Maintainers Lists
|
||||
==========================
|
||||
|
||||
We'll start with the Exim Maintainers, who are the people with commit
|
||||
access to the master git repository and a couple more folk; then we'll list
|
||||
known contributors since the lists above. Then we list the folks who work
|
||||
to make Exim available on various operating systems as porters/packagers.
|
||||
|
||||
For the Maintainers, we may list primary focus area. All maintainers
|
||||
will have contributed to work outside those areas. The maintainers'
|
||||
contributions are initialled in ChangeLog. Changes from before maintainership
|
||||
should be listed as a contributor.
|
||||
|
||||
For other contributors, we will attempt to track all contributions. Note that
|
||||
the entries per-person were added initially by scanning back through the
|
||||
ChangeLog and git, so are not in chronological order.
|
||||
|
||||
[ With names from all over the world, we need one sort order. I've arbitrarily
|
||||
decreed it to be "normal British address-book sort order, but based on family
|
||||
name rather than whichever comes last and using whatever seems sanest for
|
||||
sort order of characters which do not collate onto an English character",
|
||||
which should handle the majority of cases. If it is not adequate for some
|
||||
situation, we'll resolve it then.
|
||||
We leave out titles and honourifics, just names and handles. ]
|
||||
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
Steve Campbell eximstats maintainer.
|
||||
Mike Cardwell Exim webmaster.
|
||||
Tony Finch Unbreaks lots of things. Ratelimit code.
|
||||
Graeme Fowler
|
||||
Michael Haardt Maintains Sieve support, works on DKIM.
|
||||
Jeremy Harris
|
||||
Philip Hazel Retired.
|
||||
Originating architect and author of the Exim project.
|
||||
John Jetmore
|
||||
Tom Kistner DKIM. Content scanning. SPA.
|
||||
Todd Lyons
|
||||
Nigel Metheringham Transitioning out of Default Victim status.
|
||||
Phil Pennock Mostly idle; some security bits still.
|
||||
David Woodhouse Dynamic modules. Security.
|
||||
|
||||
|
||||
Contributors
|
||||
------------
|
||||
Andrew Aitchison Spotted cmdline AV scanner regression with -bmalware
|
||||
exim_msgdate
|
||||
Simon Arlott Code for outbound SSL-on-connect
|
||||
Patch implementing %M datestamping in log filenames
|
||||
Patch restoring SIGPIPE handler for child_open_uid
|
||||
Patch fixing NUL term/init of DKIM strings
|
||||
Patch fixing dnsdb TXT record handling for DKIM
|
||||
Patch speeding up DomainKeys signing
|
||||
Warren Baker Found crash with MIME ACLs in non-SMTP local injection
|
||||
Dmitry Banschikov Path to check for LDAP TLS initialisation errors
|
||||
René Berber Pointed out mistake in build instructions for QNX
|
||||
Johannes Berg Maintained dynamically loadable module code out-of-tree
|
||||
Patch expanding spamd_address if contains $
|
||||
Jasen Betts Spotted lack of docs re bool{} on empty string
|
||||
and typo fixes
|
||||
Wolfgang Breyha DCC integration; expandable spamd_address
|
||||
Patch handling IPv6 addresses for SPF
|
||||
Patch fixing DKIM verification when signature header
|
||||
not prepended
|
||||
Unbroke Cyrus SASL auth after incorrect SSF addition
|
||||
Logging of 8bitmime reception
|
||||
David Brownlee Patch improving local interface IP address detection
|
||||
Eugene Bujak Security patch fixing buffer overflow in string_format
|
||||
Adam Ciarcinski Patch for TLS-enabled LDAP (alternative to ldaps)
|
||||
Dennis Davis Patches fixing compilation in older compilers
|
||||
Reported dynlookup framework build issues on Solaris
|
||||
Serge Demonchaux Maintained dynamically loadable module code out-of-tree
|
||||
Patch fixing sign/unsigned and UTF mismatches
|
||||
Uwe Doering Patch fixing DKIM multiple signature generation
|
||||
Maxim Dounin Patch portability of accept() len
|
||||
Frank Elsner Fixed build reliability by exporting LC_ALL=C
|
||||
Paul Fisher Diagnosed smtp_cmd_buffer_size affecting GSSAPI SASL
|
||||
initial response, raised buffer size
|
||||
Patch adjusting connection_max_messages wait-DB usage
|
||||
Oliver Fleischmann Patches fixing compilation in older compilers
|
||||
Julian Gilbey Helped improve userforward local_part_suffix docs
|
||||
Richard Godbee Patch fixing usage fprintf
|
||||
Steve Haslam Maintained dynamically loadable module code out-of-tree
|
||||
Oliver Heesakkers Debugged dynamic lookup build issues for LOOKUP_foo.
|
||||
Dmitry Isaikin Spotted short writes to local files
|
||||
Patch for format string regression
|
||||
Alun Jones Patch for NULL dereference in localhost_number
|
||||
Brad Jorsch Patches fixing Resent-*: header handling
|
||||
John Hall Updated PCRE to 7.4 (when in-tree)
|
||||
Jeremy Harris Patch to log authentication information in reject log
|
||||
Reported a ${extract error message typo
|
||||
Jakob Hirsch Patch implementing freeze_signal on pipe transports
|
||||
Suggested X-Envelope-Sender: for content-scanning
|
||||
Patch fixing Base64 decode bugs
|
||||
John Horne Patch adding $av_failed
|
||||
Patch escaping log text after lookup expansion defer
|
||||
Documentation fixes
|
||||
Pointed out ClamAV ExtendedDetectionInfo compat issue
|
||||
Regid Ichira Documentation fixes
|
||||
Andreas M. Kirchwitz Let /dev/null have normal permissions (4.73 fallout)
|
||||
J. Nick Koston Patch adding force_command pipe transport option
|
||||
Roberto Lima Patch letting exicyclog rotate paniclog
|
||||
Todd Lyons Patch handling TAB in MAIL arguments
|
||||
Christof Meerwald Provided insight & suggested patch for GnuTLS update
|
||||
Andreas Metzler Patch upgrading PolarSSL (DKIM)
|
||||
Reported delivery logging problems (4.73 fallout)
|
||||
Patch to build without WITH_CONTENT_SCAN
|
||||
Patches fixing docs for max_rcpts, relay hosts/domains
|
||||
Documentation fixes
|
||||
Kirill Miazine Multiple patches improving Dovecot authenticator
|
||||
Robert Millan Wrote SPF Best Guess support
|
||||
Marcin Mirosław Running static analysis tools for us, catching issues
|
||||
Dirk Mueller Patch extending use of our printf() compiler checking
|
||||
Andrey Oktyabrski Patch fixing wide character breakage in rfc2047 coding
|
||||
Patch keeping SQL errors from being returned over SMTP
|
||||
Phil Pennock Patch adding gnutls_compat_mode
|
||||
Patches adding bool{} and later bool_lax{}
|
||||
Patch for TLS library version reporting build/runtime
|
||||
Patch letting EXPN work under TLS
|
||||
More patches built up & applied when became maintainer
|
||||
Mark Daniel Reidel Patch adding f-protd malware scanner support
|
||||
Steven A Reisman Pointed out ${eval:x % 0} SIGFPE
|
||||
Todd Rinaldo Patch fixing transport filter timeout
|
||||
Dan Rosenberg Security notification & patch for hardlink attack on
|
||||
sticky mail directory
|
||||
Security notification of race condition in MBX locking
|
||||
Jay Rouman Kept our copyright claim in the 21st century, not 11th
|
||||
Drew attention to SSL docs and epoch issue on 32bit
|
||||
Heiko Schlittermann Patch making maildir_use_size_file expand
|
||||
Patch fixing maildir quota file races
|
||||
Patch fixing make parallelisation
|
||||
Updates to eximstats, exiwhat
|
||||
Janne Snabb TLS extensive debugging & failure root cause analysis
|
||||
Added SPF record type support to dnsdb lookup
|
||||
Jan Srzednicki Patch improving Dovecot authenticator
|
||||
Reported crash in Dovecot authenticator
|
||||
Samuel Thibault Patch fixing IPv6 interface address detection on Hurd
|
||||
Martin Tscholak Reported issue with TLS anonymous ciphersuites
|
||||
Stephen Usher Patch fixing use of Oracle's LDAP libraries on Solaris
|
||||
Jasper Wallace Patch for LibreSSL compatibility
|
||||
Holger Weiß Patch leting ${run} return more data than OS pipe
|
||||
buffer size
|
||||
Moritz Wilhelmy Pointed out PCRE_PRERELEASE glitch
|
||||
Alain Williams Patch supporting MySQL stored procedures
|
||||
Mark Zealey Patch updating $message_linecount for maildir_tag
|
||||
Patch improving spamd server selection
|
||||
Patch to allow multiple TCP clamd servers
|
||||
|
||||
|
||||
Packagers
|
||||
---------
|
||||
Mark Baker Debian, through Exim 3
|
||||
Hilko Bengen Debian, Exim 4, current(*) maintenance
|
||||
Tim Cutts Debian, initial packaging
|
||||
Marc Haber Debian, Exim 4, current(*) maintenance
|
||||
Steve Haslam Debian, Exim 4
|
||||
Andreas Metzler Debian, current(*) maintenance
|
||||
Christian Perrier Debian, current(*) maintenance
|
||||
|
||||
(*) Current as of our last information as of release: Exim 4.82
|
||||
|
||||
|
||||
# vim: set fileencoding=utf-8 expandtab :
|
10
CHANGES
Normal file
10
CHANGES
Normal file
|
@ -0,0 +1,10 @@
|
|||
Change Information for Exim
|
||||
---------------------------
|
||||
|
||||
Complete lists of all changes to the code, including bug fixes, are listed in
|
||||
doc/ChangeLog, and documentation for changes that have not yet made it
|
||||
into the manual is available in doc/NewStuff. The ftp site has a directory
|
||||
called ChangeLogs which contains individual ChangeLog and NewStuff files for
|
||||
each separate release.
|
||||
|
||||
****
|
56
CONTRIBUTING
Normal file
56
CONTRIBUTING
Normal file
|
@ -0,0 +1,56 @@
|
|||
CONTRIBUTING TO EXIM
|
||||
====================
|
||||
|
||||
Exim is an open-source project licensed under the GNU General Public License.
|
||||
At time of writing, all the developers work on Exim on a volunteer basis.
|
||||
We welcome patches and contributions. There is no copyright assignment
|
||||
policy; if you offer a patch, it is assumed to be under the GPL, of whichever
|
||||
version the main developers see fit to use.
|
||||
|
||||
Mistakes or inadequacies in the documentation are treated as bugs. The main
|
||||
documentation is called "The Exim Specification" for a reason. So if you
|
||||
can't code there are still places where your help will be very appreciated.
|
||||
|
||||
General discussion, requests for help, and initial "is this a bug?" questions
|
||||
go to <exim-users@exim.org>. Many suspected bugs turn out to not be bugs, so
|
||||
asking first is appreciated.
|
||||
|
||||
Our main website is at http://www.exim.org/ and contains links to our wiki,
|
||||
where many frequent setups are walked through. You will also find our
|
||||
bug-tracking system linked there.
|
||||
|
||||
Development takes place in part on exim-users, when bugs or missing features
|
||||
are spotted based on feedback from people actually using the product. In
|
||||
large part, discussion takes place on <exim-dev@exim.org>. While you can use
|
||||
the bug-tracking system, everyone working on Exim, a mail transfer agent, is
|
||||
comfortable dealing with just email too, so you can use whichever you're most
|
||||
comfortable with.
|
||||
|
||||
If you have an idea for a new feature, please do raise it on exim-users first.
|
||||
|
||||
Our code is maintained in a Git repository. The master repository, together
|
||||
with some others, can be found on http://git.exim.org/ and we welcome patches,
|
||||
whether of documentation or of code. If you have a request for a new feature
|
||||
and can accompany it with working code, then it stands a much greater chance
|
||||
of being incorporated in a timely manner.
|
||||
|
||||
If you're planning on working on a major new feature or redesign, please do
|
||||
talk to us first.
|
||||
|
||||
We do not have a formal code-review process, but posted patches are subject to
|
||||
being reworked before being pulled in, or requests for modification made;
|
||||
we're a small enough pool of developers that we rely on the good judgement and
|
||||
discretion of the committer rather than formal process.
|
||||
|
||||
We prefer new features to be accompanied by documentation patches, but if no
|
||||
new documentation is provided, we can write it and, in the process, perhaps
|
||||
uncover issues to work over with you. Note that the PDF form of the
|
||||
documentation is faster to build than the TXT form.
|
||||
|
||||
We do have a test harness and appreciate it if new features can be accompanied
|
||||
by new tests; if this is awkward for you, please do include sufficient
|
||||
description to allow someone else to write the test.
|
||||
|
||||
|
||||
-The Exim Maintainers
|
||||
July 7th, 2010
|
340
LICENCE
Normal file
340
LICENCE
Normal file
|
@ -0,0 +1,340 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
29
LICENSE.opendmarc
Normal file
29
LICENSE.opendmarc
Normal file
|
@ -0,0 +1,29 @@
|
|||
Copyright (c) 2009, 2010, 2012, The Trusted Domain Project.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of The Trusted Domain Project nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
Portions of this project are also covered by the Sendmail Open Source
|
||||
License, available in this distribution in the file "LICENSE.Sendmail".
|
||||
See the copyright notice(s) in each file to determine whether or not it is
|
||||
covered by both licenses.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE OPENDKIM PROJECT ''AS IS'' AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE OPENDKIM PROJECT BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
118
Makefile
Normal file
118
Makefile
Normal file
|
@ -0,0 +1,118 @@
|
|||
# Top-level makefile for Exim; handles creating a build directory with
|
||||
# appropriate links, and then creating and running the main makefile in that
|
||||
# directory.
|
||||
|
||||
# Copyright (c) The Exim Maintainers 2022 - 2023
|
||||
# Copyright (c) University of Cambridge, 1995 - 2018
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# See the file NOTICE for conditions of use and distribution.
|
||||
|
||||
# IRIX make uses the shell that is in the SHELL variable, which often defaults
|
||||
# to csh, so put this in to make it use the Bourne shell. In systems where
|
||||
# /bin/sh is not a Bourne-compatible shell, this line will have to be edited,
|
||||
# or "make" must be called with a different SHELL= setting.
|
||||
|
||||
SHELL=/bin/sh
|
||||
RM_COMMAND=/bin/rm
|
||||
|
||||
# The buildname defaults to "<os-type>-<arch-type>". It can be
|
||||
# overridden by the "build" parameter when invoking make (e.g. make
|
||||
# build=xxx) This does not provide an override for the OS type and
|
||||
# architecture type used during the build process; they still have to be
|
||||
# used for the OS-specific files. To override them, you can set the
|
||||
# shell variables OSTYPE and ARCHTYPE when running make.
|
||||
#
|
||||
# EXIM_BUILD_SUFFIX gets appended to the buildname. (This enables
|
||||
# parallel builds on a file system shared among different Linux distros
|
||||
# (same os-type, same arch-type). The ../test/runtest script honours the
|
||||
# EXIM_BUILD_SUFFIX when searching the Exim binary.)
|
||||
|
||||
buildname=$${build:-`$(SHELL) scripts/os-type`-`$(SHELL) scripts/arch-type`}$${EXIM_BUILD_SUFFIX:+.$$EXIM_BUILD_SUFFIX}
|
||||
|
||||
# The default target checks for the existence of Local/Makefile, that the main
|
||||
# makefile is built and up-to-date, and then it runs it.
|
||||
# If Local/Makefile-<buildname> exists, it is read too.
|
||||
|
||||
all: Local/Makefile configure
|
||||
@cd build-$(buildname); $(MAKE) SHELL=$(SHELL) $(MFLAGS)
|
||||
|
||||
# This pair for the convenience of of the Debian maintainers
|
||||
exim utils: Local/Makefile configure
|
||||
@cd build-$(buildname); $(MAKE) SHELL=$(SHELL) $(MFLAGS) $@
|
||||
|
||||
# For testsuite builds
|
||||
exim_openssl exim_gnutls: Local/Makefile configure
|
||||
@cd build-$(buildname); $(MAKE) SHELL=$(SHELL) $(MFLAGS) $@
|
||||
|
||||
Local/Makefile:
|
||||
@echo ""
|
||||
@echo "*** Please create Local/Makefile by copying src/EDITME and making"
|
||||
@echo "*** appropriate changes for your site."
|
||||
@echo ""
|
||||
@test ! -d Local && mkdir Local
|
||||
@false
|
||||
|
||||
# This is separated off so that "make build-directory" can be obeyed on
|
||||
# its own if necessary.
|
||||
|
||||
build-directory:
|
||||
@builddir=build-$(buildname); \
|
||||
case "$$builddir" in *UnKnown*) exit 1;; esac; \
|
||||
$(SHELL) -c "test -d $$builddir -a -r $$builddir/version.c || \
|
||||
(mkdir $$builddir; cd $$builddir; $(SHELL) ../scripts/MakeLinks)";
|
||||
|
||||
checks:
|
||||
$(SHELL) scripts/source_checks
|
||||
|
||||
# The "configure" target ensures that the build directory exists, then arranges
|
||||
# to build the main makefile from inside the build directory, by calling the
|
||||
# Configure-Makefile script. This does its own dependency checking because of
|
||||
# the optional files.
|
||||
|
||||
configure: checks build-directory
|
||||
@cd build-$(buildname); \
|
||||
build=$(build) $(SHELL) ../scripts/Configure-Makefile
|
||||
|
||||
# The "makefile" target forces a rebuild of the makefile (as opposed to
|
||||
# "configure", which doesn't force it).
|
||||
|
||||
makefile: build-directory
|
||||
@cd build-$(buildname); $(RM_COMMAND) -f Makefile; \
|
||||
build=$(build) $(SHELL) ../scripts/Configure-Makefile
|
||||
|
||||
# The installation commands are kept in a separate script, which expects
|
||||
# to be run from inside the build directory.
|
||||
|
||||
install: all
|
||||
@cd build-$(buildname); \
|
||||
build=$(build) $(SHELL) ../scripts/exim_install $(INSTALL_ARG)
|
||||
|
||||
# Tidy-up targets
|
||||
|
||||
clean:; @echo ""; echo '*** "make clean" just removes all .o and .a files'
|
||||
@echo '*** Use "make makefile" to force a rebuild of the makefile'
|
||||
@echo ""
|
||||
cd build-$(buildname); \
|
||||
$(RM_COMMAND) -f *.o lookups/*.o lookups/*.a auths/*.o auths/*.a \
|
||||
routers/*.o routers/*.a transports/*.o transports/*.a \
|
||||
pdkim/*.o pdkim/*.a
|
||||
|
||||
clean_exim:; cd build-$(buildname); \
|
||||
$(RM_COMMAND) -f *.o lookups/*.o lookups/*.a auths/*.o auths/*.a \
|
||||
routers/*.o routers/*.a transports/*.o transports/*.a lookups/*.so
|
||||
|
||||
distclean:; $(RM_COMMAND) -rf build-* cscope*
|
||||
|
||||
cscope.files: FRC
|
||||
echo "-q" > $@
|
||||
echo "-p3" >> $@
|
||||
-bd=build-$(buildname); [ -d $$bd ] && echo -e "$$bd/config.h\n$$bd/Makefile" >> $@
|
||||
find src Local OS exim_monitor -name "*.[cshyl]" -print \
|
||||
-o -name "os.[ch]*" -print \
|
||||
-o -name "*akefile*" -print \
|
||||
-o -name config.h.defaults -print \
|
||||
-o -name EDITME -print >> $@
|
||||
|
||||
FRC:
|
||||
|
||||
# End of top-level makefile
|
153
NOTICE
Normal file
153
NOTICE
Normal file
|
@ -0,0 +1,153 @@
|
|||
THE EXIM MAIL TRANSFER AGENT
|
||||
----------------------------
|
||||
|
||||
Copyright (c) 2004 University of Cambridge
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
In addition, for the avoidance of any doubt, permission is granted to
|
||||
link this program with OpenSSL or any other library package and to
|
||||
(re)distribute the binaries produced as the result of such linking.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
|
||||
UNSOLICITED EMAIL
|
||||
-----------------
|
||||
|
||||
The use, supply or promotion of Exim for the purpose of sending bulk,
|
||||
unsolicited electronic mail is incompatible with the basic aims of the program,
|
||||
which revolve around the free provision of a service that enhances the quality
|
||||
of personal communications. The author of Exim regards indiscriminate
|
||||
mass-mailing as an antisocial, irresponsible abuse of the Internet.
|
||||
|
||||
|
||||
INCORPORATED CODE
|
||||
-----------------
|
||||
|
||||
A number of pieces of external code are included in the Exim distribution.
|
||||
|
||||
. Support for the cdb (Constant DataBase) lookup method is provided by code
|
||||
contributed by Nigel Metheringham of Planet Online Ltd. which contains
|
||||
the following statements:
|
||||
_________________________________________________________________________
|
||||
|
||||
Copyright (c) 1998 Nigel Metheringham, Planet Online Ltd
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
This code implements Dan Bernstein's Constant DataBase (cdb) spec.
|
||||
Information, the spec and sample code for cdb can be obtained from
|
||||
http://www.pobox.com/~djb/cdb.html. This implementation borrows some code
|
||||
from Dan Bernstein's implementation (which has no license restrictions
|
||||
applied to it).
|
||||
_________________________________________________________________________
|
||||
|
||||
The implementation is completely contained within the code of Exim. It
|
||||
does not link against an external cdb library.
|
||||
|
||||
. Client support for Microsoft's "Secure Password Authentication" is pro-
|
||||
vided by code contributed by Marc Prud'hommeaux. Server support was
|
||||
contributed by Tom Kistner. This includes code taken from the Samba
|
||||
project, which is released under the Gnu GPL.
|
||||
|
||||
|
||||
. Support for calling the Cyrus "pwcheck" and "saslauthd" daemons is
|
||||
provided by code taken from the Cyrus-SASL library and adapted by
|
||||
Alexander S. Sabourenkov. The permission notice appears below, in
|
||||
accordance with the conditions expressed therein.
|
||||
|
||||
_________________________________________________________________________
|
||||
|
||||
Copyright (c) 2001 Carnegie Mellon University. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
3. The name 'Carnegie Mellon University' must not be used to endorse or
|
||||
promote products derived from this software without prior written
|
||||
permission. For permission or any other legal details, please
|
||||
contact
|
||||
|
||||
Office of Technology Transfer
|
||||
Carnegie Mellon University
|
||||
5000 Forbes Avenue
|
||||
Pittsburgh, PA 15213-3890
|
||||
(412) 268-4387, fax: (412) 268-7395
|
||||
tech-transfer@andrew.cmu.edu
|
||||
|
||||
4. Redistributions of any form whatsoever must retain the following
|
||||
acknowledgment:
|
||||
This product includes software developed by Computing Services at
|
||||
Carnegie Mellon University (http://www.cmu.edu/computing/).
|
||||
|
||||
CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
|
||||
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE FOR ANY
|
||||
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
||||
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
|
||||
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
_________________________________________________________________________
|
||||
|
||||
|
||||
. The Exim Monitor program, which is an X-Window application, includes
|
||||
modified versions of the Athena StripChart and TextPop widgets. This code
|
||||
is copyright by DEC and MIT, and their permission notice appears below,
|
||||
in accordance with the conditions expressed therein.
|
||||
|
||||
_________________________________________________________________________
|
||||
|
||||
Copyright 1987, 1988 by Digital Equipment Corporation, Maynard,
|
||||
Massachusetts, and the Massachusetts Institute of Technology, Cambridge,
|
||||
Massachusetts.
|
||||
|
||||
All Rights Reserved
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose and without fee is hereby granted, provided
|
||||
that the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting documen-
|
||||
tation, and that the names of Digital or MIT not be used in advertising
|
||||
or publicity pertaining to distribution of the software without specific,
|
||||
written prior permission.
|
||||
|
||||
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
SOFTWARE.
|
||||
_________________________________________________________________________
|
||||
|
||||
|
||||
. Some of the code to support the use of maildirsize files for maildir
|
||||
deliveries is taken from the Courier Imapd source code. This code is
|
||||
released under the GPL.
|
||||
_________________________________________________________________________
|
||||
|
||||
--
|
||||
Philip Hazel University of Cambridge Computing Service,
|
1059
OS/Makefile-Base
Normal file
1059
OS/Makefile-Base
Normal file
File diff suppressed because it is too large
Load diff
330
OS/Makefile-Default
Normal file
330
OS/Makefile-Default
Normal file
|
@ -0,0 +1,330 @@
|
|||
##################################################
|
||||
# The Exim mail transport agent #
|
||||
##################################################
|
||||
|
||||
# Copyright (c) The Exim Maintainers 2022
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# Generic default make file containing settings that relate to the OS or
|
||||
# to selectable features within the OS. The configuration options for Exim
|
||||
# itself live in Local/Makefile, which is constructed by editing src/EDITME.
|
||||
|
||||
# These settings are basic defaults which may be overridden, either by the
|
||||
# generic OS-specific files, or by site-specific files. Do not edit this file.
|
||||
# Instead, edit or create suitable OS-specific and/or site specific files.
|
||||
# See the manual for details.
|
||||
|
||||
|
||||
# MAKE_SHELL contains the name of the shell to be used for executing commands
|
||||
# from the make files. Normally /bin/sh should be used.
|
||||
|
||||
MAKE_SHELL=/bin/sh
|
||||
|
||||
|
||||
# BASENAME_COMMAND contains the path to the "basename" command, which varies
|
||||
# from OS to OS. This is used when building the Exim monitor script only. (See
|
||||
# also HOSTNAME_COMMAND.) If BASENAME_COMMAND is set to "look_for_it" then the
|
||||
# script checks for /usr/bin/basename and /bin/basename, and if neither is
|
||||
# found, it uses /usr/ucb/basename. This copes with Solaris 2 and Linux, both
|
||||
# of which come in different versions.
|
||||
|
||||
BASENAME_COMMAND=/usr/bin/basename
|
||||
|
||||
|
||||
# If you set STRIP_COMMAND to the path of the "strip" command, it will be run
|
||||
# on every binary that is built. It is left unset by default, which leaves
|
||||
# the binaries unstripped.
|
||||
|
||||
# STRIP_COMMAND=/usr/bin/strip
|
||||
|
||||
|
||||
# Some of the following commands live in different places in different OS. We
|
||||
# include them all here for generality.
|
||||
|
||||
CHOWN_COMMAND=/usr/bin/chown
|
||||
CHGRP_COMMAND=/usr/bin/chgrp
|
||||
CHMOD_COMMAND=/usr/bin/chmod
|
||||
MV_COMMAND=/bin/mv
|
||||
RM_COMMAND=/bin/rm
|
||||
TOUCH_COMMAND=/usr/bin/touch
|
||||
|
||||
|
||||
# Some operating systems have different ways of building libraries of
|
||||
# functions. This macro defines the command to do this, defaulting to
|
||||
# the "ar" command with options "cq".
|
||||
|
||||
AR=ar cq
|
||||
|
||||
|
||||
# Not all operating systems have the iconv() function. Those that do have
|
||||
#
|
||||
# HAVE_ICONV=yes
|
||||
#
|
||||
# in their OS-specific Makefiles. On those that don't it is possible to
|
||||
# install an independent implementation of iconv(). If you've done this,
|
||||
# add "HAVE_ICONV=yes" to your Local/Makefile.
|
||||
|
||||
|
||||
# Perl is not necessary for running Exim itself, except when EXIM_PERL
|
||||
# is set to cause Perl embedding. However, some Perl utilities are provided
|
||||
# for processing the logs. Perl 5 is assumed.
|
||||
|
||||
PERL_COMMAND=/usr/bin/perl
|
||||
|
||||
|
||||
# CC contains the name of the C compiler to be used.
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
# CFLAGS contains flags to be passed to the compiler. Nothing is defaulted
|
||||
# here; instead each OS-dependent Makefile contains a default setting.
|
||||
|
||||
# CFLAGS=-O
|
||||
|
||||
|
||||
# LFLAGS contains flags to be passed to the link editor. Nothing is defaulted
|
||||
# here; instead each OS-dependent Makefile contains a default setting if one
|
||||
# is needed.
|
||||
|
||||
# LFLAGS=
|
||||
|
||||
|
||||
# PCRE_LIBS contains the library to be linked for PCRE
|
||||
|
||||
PCRE_LIBS=-lpcre2-8
|
||||
|
||||
|
||||
# LIBS and EXTRALIBS contain library settings that are used on linking
|
||||
# commands to build binaries. The OS-dependent Makefile may contain a default
|
||||
# setting for LIBS, leaving EXTRALIBS available for adding further libraries
|
||||
# that are required for optional extras.
|
||||
|
||||
# LIBS=
|
||||
# EXTRALIBS=
|
||||
|
||||
|
||||
# LIBS_EXIM and EXTRALIBS_EXIM contain library settings that are used
|
||||
# only when linking the Exim binary. They are not used for other binaries.
|
||||
# One possible use is for the TCP wrappers library.
|
||||
|
||||
# LIBS_EXIM=
|
||||
# EXTRALIBS_EXIM=
|
||||
|
||||
|
||||
# LIBS_EXIMON and EXTRALIBS_EXIMON contain library settings that are
|
||||
# used only when linking the Exim monitor binary. They are not used for
|
||||
# other binaries.
|
||||
|
||||
# LIBS_EXIMON=
|
||||
# EXTRALIBS_EXIMON=
|
||||
|
||||
|
||||
# The error name for quota exceeded varies among operating systems, and
|
||||
# even, unfortunately, in different versions of the same operating system.
|
||||
# EDQUOT was not in Sys V, but is in SPEC 1170, apparently. It was used
|
||||
# in SunOS4, but got taken out for SunOS5, where ENOSPC was given if a quota
|
||||
# was exceeded. However, it got put back into SunOS5 with a patch to 5.4 in
|
||||
# order to comply with SPEC 1170. Thus even different patch levels of the same
|
||||
# system (SunOS5) may use different numbers.
|
||||
#
|
||||
# If you don't have quotas or are not interested in handling quota errors
|
||||
# specially, just set this variable to 0. If it is not set, it defaults to
|
||||
# EDQUOT if that is defined for the OS; otherwise it defaults to ENOSPC.
|
||||
|
||||
# ERRNO_QUOTA=EDQUOT
|
||||
|
||||
|
||||
# The exiwhat utility script finds all the processes running Exim, and sends
|
||||
# them a SIGUSR1 signal to get them to write their status to a file. There are
|
||||
# two ways in which this can be done:
|
||||
#
|
||||
# (1) If the OS has a command to find processes and signal them, that can be
|
||||
# used. Linux has "killall"; Solaris has "pkill". (Note: "killall" on Solaris
|
||||
# does something very different - and disastrous.) The following are set in the
|
||||
# OS-specific Makefiles for those OS where this can be done:
|
||||
|
||||
# EXIWHAT_MULTIKILL_CMD=
|
||||
# EXIWHAT_MULTIKILL_ARG=
|
||||
|
||||
# (2) For other operating systems, exiwhat calls the ps command and egreps the
|
||||
# output in order to find all the processes running Exim. The arguments for the
|
||||
# various commands needed to do this vary from OS to OS. These defaults work on
|
||||
# Solaris 2, HPUX, and IRIX. The OS-specific Makefiles have different versions
|
||||
# for other systems, and you can override with your own requirements in your
|
||||
# private Makefiles in the Local directory. The most commonly found
|
||||
# alternatives are -ax instead of -e for the ps argument, and / instead of a
|
||||
# blank before the name exim for the egrep argument on systems whose ps output
|
||||
# shows the full path name. The quotes for the egrep argument are specified
|
||||
# here so that leading white space can be used. This value should always be
|
||||
# given in single quotes.
|
||||
|
||||
EXIWHAT_PS_CMD=/bin/ps
|
||||
EXIWHAT_PS_ARG=-e
|
||||
EXIWHAT_EGREP_ARG=' exim( |$$|-)'
|
||||
|
||||
# For both kinds of exiwhat usage, the next setting specifies the signal that
|
||||
# is sent.
|
||||
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
|
||||
# IPv6 is gradually spreading more and more widely. Most operating systems seem
|
||||
# to support it nowadays. If you set this option, IPv6 support will be included
|
||||
# in the Exim binary. As well as the basic enabling option, there are
|
||||
# parameters for include and library directories that may be needed for IPv6 on
|
||||
# some systems, where the support is not yet in the standard library.
|
||||
|
||||
# HAVE_IPV6=YES
|
||||
# IPV6_INCLUDE=-I /usr/ipv6/include
|
||||
# IPV6_LIBS=-L/usr/ipv6/libs -linet6
|
||||
|
||||
# Exim uses the function getaddrinfo() for converting IPv6 addresses in text
|
||||
# form to binary. Apparently some operating systems do not support this, or not
|
||||
# correctly, and require the use of the function inet_pton() instead. The
|
||||
# following setting enables this. Note, however, the inet_pton() has reduced
|
||||
# functionality compared with getaddrinfo(). In particular, it does not
|
||||
# recognize the percent convention for identifying scopes (interfaces) that is
|
||||
# used by some operating systems.
|
||||
|
||||
# IPV6_USE_INET_PTON=yes
|
||||
|
||||
# HOSTNAME_COMMAND contains the path to the "hostname" command, which varies
|
||||
# from OS to OS. This is used when building the Exim monitor script only. (See
|
||||
# also BASENAME_COMMAND.) If HOSTNAME_COMMAND is set to "look_for_it" then the
|
||||
# script checks for /usr/bin/hostname and /bin/hostname, and if neither is
|
||||
# found, it uses /usr/ucb/basename. This copes with Solaris 2, which comes in
|
||||
# different versions.
|
||||
|
||||
HOSTNAME_COMMAND=/bin/hostname
|
||||
|
||||
|
||||
# INCLUDE contains arbitrary include parameters that you may need to use
|
||||
# when building exim. It is added to every compile command.
|
||||
|
||||
# INCLUDE=-I /some/special/include-directory
|
||||
|
||||
|
||||
# Some OS require a separate library to be quoted when linking programs that
|
||||
# call name resolver functions. This can be set in LIBRESOLV, which is left
|
||||
# unset here, but is set is some of the OS-specific Makefiles.
|
||||
|
||||
# LIBRESOLV=
|
||||
|
||||
|
||||
# Additional libraries and include directories may be required for some
|
||||
# lookup styles, e.g. LDAP or SQL. LOOKUP_LIBS is included only on the
|
||||
# command for linking Exim itself, not on any auxiliary programs. You
|
||||
# don't need to set LOOKUP_INCLUDE if the relevant directories are already
|
||||
# specified in INCLUDE.
|
||||
|
||||
# LOOKUP_INCLUDE=-I /usr/local/ldap/include -I /usr/local/sql/include
|
||||
# LOOKUP_LIBS=-L/usr/local/lib -lldap -llber
|
||||
|
||||
|
||||
# RANLIB should be set to something that does nothing on systems that do not
|
||||
# have the ranlib command or do not need to run it on library files.
|
||||
|
||||
RANLIB=ranlib
|
||||
|
||||
|
||||
# EXIM_CHMOD is available to specify a command that is automatically applied
|
||||
# to the Exim binary immediately it is compiled. (I find this useful when
|
||||
# building test versions.)
|
||||
|
||||
EXIM_CHMOD=@true
|
||||
|
||||
|
||||
# If you want to use local_scan() at all, the support code must be included
|
||||
# by uncommenting this line.
|
||||
|
||||
# HAVE_LOCAL_SCAN=yes
|
||||
|
||||
# LOCAL_SCAN_SOURCE defines the file in which the function local_scan() is
|
||||
# defined. This provides the administrator with a hook for including C code
|
||||
# for scanning incoming mails. The path that is defined must be relative to
|
||||
# the Exim distribution directory. For example
|
||||
|
||||
# LOCAL_SCAN_SOURCE=Local/local_scan.c
|
||||
|
||||
# A very simple example points to a template function that doesn't actually do
|
||||
# any scanning, but just accepts the message. A compilable file must be
|
||||
# included in the build even if HAVE_LOCAL_SCAN is not defined.
|
||||
|
||||
LOCAL_SCAN_SOURCE=src/local_scan.c
|
||||
|
||||
# If you want to specify options for your local_scan() that can be set from
|
||||
# the main Exim configuration file, you need to uncomment the following line,
|
||||
# and then provide a table of options in your local_scan() source, as described
|
||||
# in the reference manual.
|
||||
|
||||
# LOCAL_SCAN_HAS_OPTIONS=yes
|
||||
|
||||
|
||||
#############################################################################
|
||||
# The following are all concerned with configuring the way Exim handles its
|
||||
# database (hints) and other dbm files.
|
||||
|
||||
# Some systems require a separate library to be supplied when linking programs
|
||||
# that make use of DBM library calls. This can be set in DBMLIB, which is unset
|
||||
# by default, but is set in some of the OS-specific Makefiles. Setting it in
|
||||
# your Local/Makefile will override any other setting.
|
||||
|
||||
# DBMLIB=
|
||||
|
||||
|
||||
# When Exim is attempting to lock one of its database (hints) files, it
|
||||
# applies a timeout which can be altered here.
|
||||
|
||||
# EXIMDB_LOCK_TIMEOUT=60
|
||||
|
||||
|
||||
# By default, Exim uses traditional ndbm function calls to handle its indexed
|
||||
# hints databases. On systems that have Berkeley db installed, this still
|
||||
# works via the compatibility interface. However, by defining USE_DB you can
|
||||
# make it use native db function calls.
|
||||
|
||||
# USE_DB=YES
|
||||
|
||||
# Similarly, if you are using gdbm, Exim will by default use the ndbm
|
||||
# compatibility interface. However, by defining USE_GDBM you can make it
|
||||
# use the native gdbm function calls.
|
||||
|
||||
# USE_GDBM=YES
|
||||
|
||||
|
||||
#############################################################################
|
||||
# The following definitions are relevant only when compiling the Exim monitor
|
||||
# program, which requires an X11 display. See the variable EXIM_MONITOR in
|
||||
# src/EDITME for how to suppress this compilation.
|
||||
|
||||
# X11 contains the location of the X11 libraries and include files.
|
||||
|
||||
X11=/usr/X11R6
|
||||
|
||||
# XINCLUDE contains options for header inclusion when compiling functions
|
||||
# that call X11 functions.
|
||||
|
||||
XINCLUDE=-I$(X11)/include
|
||||
|
||||
# XLFLAGS contains flags to be passed to the linker when linking the monitor.
|
||||
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
|
||||
# X11_LD_LIB contains the name of the X11 library that is to be added to
|
||||
# LD_LIBRARY_PATH when running the monitor program.
|
||||
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
# A modified version of the Athena TextPop module is supplied with Exim. The
|
||||
# modification is to remove the "replace" part of the "search and replace"
|
||||
# operation because it isn't wanted. TextPop is only one of a number of
|
||||
# modules that make up the Text widget. Some antique link editors cannot handle
|
||||
# the case of a replacement module for one of a set of modules. To allow
|
||||
# the monitor to be linked in such cases, set the value of EXIMON_TEXTPOP
|
||||
# to be empty. The search operations will then contain a useless "replace"
|
||||
# option, which is untidy, but does no harm.
|
||||
|
||||
EXIMON_TEXTPOP=em_TextPop.o
|
||||
|
||||
# End
|
56
OS/Makefile-FreeBSD
Normal file
56
OS/Makefile-FreeBSD
Normal file
|
@ -0,0 +1,56 @@
|
|||
# Exim: OS-specific make file for FreeBSD
|
||||
#
|
||||
# Copyright (c) The Exim Maintainers 2020 - 2023
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CHOWN_COMMAND=/usr/sbin/chown
|
||||
#STRIP_COMMAND=/usr/bin/strip
|
||||
CHMOD_COMMAND=/bin/chmod
|
||||
|
||||
|
||||
# FreeBSD Ports no longer insert compatibility symlinks into /usr/bin for
|
||||
# scripting languages which traditionally have had them.
|
||||
PERL_COMMAND=/usr/local/bin/perl
|
||||
|
||||
HAVE_SA_LEN=YES
|
||||
|
||||
# crypt() is in a separate library
|
||||
LIBS=-lcrypt -lm -lutil -lexecinfo
|
||||
|
||||
# Dynamically loaded modules need to be built with -fPIC
|
||||
CFLAGS_DYNAMIC=-shared -rdynamic -fPIC
|
||||
|
||||
# FreeBSD always ships with Berkeley DB
|
||||
USE_DB=yes
|
||||
|
||||
# This code for building outside ports suggested by Richard Clayton
|
||||
.ifdef X11BASE
|
||||
X11=${X11BASE}
|
||||
.elifdef LOCALBASE
|
||||
X11=$(LOCALBASE)
|
||||
.else
|
||||
X11=/usr/local
|
||||
.endif
|
||||
|
||||
# nb: FreeBSD is entirely elf; objformat was removed prior to FreeBSD 7
|
||||
# http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/objformat/Attic/objformat.c
|
||||
# deleted Jan 2007.
|
||||
#
|
||||
# So if this fails, you're on an ancient unsupported FreeBSD release *and*
|
||||
# running GUI software, which seems both unusual and unwise.
|
||||
#
|
||||
# http://www.freebsd.org/doc/handbook/binary-formats.html suggests that the
|
||||
# switch to default to ELF came with FreeBSD 3. elf(5) claims ELF support
|
||||
# introduced in FreeBSD 2.2.6.
|
||||
#
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib -Wl,-rpath,${X11}/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
EXIWHAT_PS_ARG=-ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_MULTIKILL_CMD='killall -m'
|
||||
EXIWHAT_MULTIKILL_ARG='^exim($$|-[0-9.]+-[0-9]+$$)'
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# End
|
32
OS/Makefile-GNU
Normal file
32
OS/Makefile-GNU
Normal file
|
@ -0,0 +1,32 @@
|
|||
# Exim: OS-specific make file for GNU and variants.
|
||||
#
|
||||
# Copyright (c) The Exim Maintainers 2020
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
HAVE_ICONV=yes
|
||||
|
||||
BASENAME_COMMAND=look_for_it
|
||||
CHOWN_COMMAND=look_for_it
|
||||
CHGRP_COMMAND=look_for_it
|
||||
CHMOD_COMMAND=look_for_it
|
||||
|
||||
CFLAGS ?= -O -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
|
||||
|
||||
DBMLIB = -ldb
|
||||
USE_DB = yes
|
||||
|
||||
LIBS = -lnsl -lcrypt -lm
|
||||
LIBRESOLV = -lresolv
|
||||
|
||||
X11=/usr/X11R6
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
EXIWHAT_PS_ARG=ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_MULTIKILL_CMD=killall
|
||||
EXIWHAT_MULTIKILL_ARG=exim
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# End
|
39
OS/Makefile-Linux
Normal file
39
OS/Makefile-Linux
Normal file
|
@ -0,0 +1,39 @@
|
|||
# Exim: OS-specific make file for Linux. This is for modern Linuxes,
|
||||
# which use libc6.
|
||||
# Copyright (c) The Exim Maintainers 2020
|
||||
#
|
||||
# For Linux, we assume GNU Make; at time of writing, the only extension
|
||||
# used is ?= which is actually portable to other maintained Make variants,
|
||||
# just is not POSIX.
|
||||
|
||||
HAVE_ICONV=yes
|
||||
|
||||
BASENAME_COMMAND=look_for_it
|
||||
CHOWN_COMMAND=look_for_it
|
||||
CHGRP_COMMAND=look_for_it
|
||||
CHMOD_COMMAND=look_for_it
|
||||
|
||||
# The system cc may be gcc or clang; do not force gcc
|
||||
CC=cc
|
||||
# Preserve CFLAGS and CFLAGS_DYNAMIC from the caller/environment
|
||||
CFLAGS ?= -O -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
|
||||
CFLAGS_DYNAMIC ?= -shared -rdynamic
|
||||
|
||||
DBMLIB = -ldb
|
||||
USE_DB = yes
|
||||
|
||||
LIBS = -lcrypt -lm
|
||||
LIBRESOLV = -lresolv
|
||||
|
||||
X11=/usr/X11R6
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
EXIWHAT_PS_ARG=ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_MULTIKILL_CMD=killall
|
||||
EXIWHAT_MULTIKILL_ARG=exim
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# End
|
32
OS/Makefile-OpenBSD
Normal file
32
OS/Makefile-OpenBSD
Normal file
|
@ -0,0 +1,32 @@
|
|||
# Exim: OS-specific make file for OpenBSD
|
||||
# Copyright (c) The Exim Maintainers 2022 - 2023
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CHOWN_COMMAND=/usr/sbin/chown
|
||||
CHGRP_COMMAND=/usr/sbin/chgrp
|
||||
CHMOD_COMMAND=/bin/chmod
|
||||
|
||||
CC=cc
|
||||
CFLAGS=-O2 -Wall -Wno-parentheses -Wno-self-assign -Wno-logical-op-parentheses
|
||||
|
||||
LIBS=-lm
|
||||
|
||||
HAVE_SA_LEN=YES
|
||||
|
||||
X11=/usr/X11R6
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
|
||||
EXIWHAT_MULTIKILL_CMD=pkill
|
||||
EXIWHAT_MULTIKILL_ARG='exim( |$$|-)'
|
||||
EXIWHAT_PS_ARG=-ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
HAVE_IPV6=YES
|
||||
CFLAGS += -DNO_EXECINFO
|
||||
|
||||
# OpenBSD ships with a too-old Berkeley DB. NDBM is the default if we don't specify one.
|
||||
#USE_DB=yes
|
||||
|
||||
# End
|
26
OS/Makefile-SunOS5
Normal file
26
OS/Makefile-SunOS5
Normal file
|
@ -0,0 +1,26 @@
|
|||
# Exim: OS-specific make file for SunOS5
|
||||
# Copyright (c) The Exim Maintainers 2020 - 2023
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
HAVE_ICONV=yes
|
||||
|
||||
BASENAME_COMMAND=look_for_it
|
||||
HOSTNAME_COMMAND=look_for_it
|
||||
|
||||
RANLIB=@true
|
||||
LIBS=-lsocket -lnsl -lkstat -lm
|
||||
LIBRESOLV=-lresolv
|
||||
|
||||
EXIWHAT_MULTIKILL_CMD=pkill
|
||||
EXIWHAT_MULTIKILL_ARG='exim( |$$|-)'
|
||||
|
||||
X11=/usr/openwin
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib -R$(X11)/lib
|
||||
X11LIB=$(X11)/lib
|
||||
|
||||
OS_C_INCLUDES=setenv.c
|
||||
CFLAGS += -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D__EXTENSIONS__
|
||||
CFLAGS += -DNO_EXECINFO
|
||||
|
||||
# End
|
44
OS/eximon.conf-Default
Normal file
44
OS/eximon.conf-Default
Normal file
|
@ -0,0 +1,44 @@
|
|||
# Exim: Default settings for the eximon script which fires up the Exim monitor.
|
||||
# These can be overridden by OS-specific scripts and local installation
|
||||
# scripts, and also at run time by shell variables.
|
||||
|
||||
# Copyright (c) The Exim Maintainers 2022
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# The name of the eximon binary, usually the same as the eximon script,
|
||||
# with .bin stuck on the end.
|
||||
|
||||
EXIMON_BINARY="${EXIMON_BINARY-$0.bin}"
|
||||
|
||||
# The remaining parameters are values likely to be changed to suit the
|
||||
# user's taste. They are documented in the EDITME file.
|
||||
|
||||
WINDOW_TITLE=${EXIMON_WINDOW_TITLE-'"${hostname} eximon"'}
|
||||
|
||||
ACTION_OUTPUT=${EXIMON_ACTION_OUTPUT-no}
|
||||
ACTION_QUEUE_UPDATE=${EXIMON_ACTION_QUEUE_UPDATE-yes}
|
||||
BODY_MAX=${EXIMON_BODY_MAX-20000}
|
||||
LOG_DEPTH=${EXIMON_LOG_DEPTH-300}
|
||||
LOG_WIDTH=${EXIMON_LOG_WIDTH-${EXIMON_WIDTH-950}}
|
||||
LOG_BUFFER=${EXIMON_LOG_BUFFER-20K}
|
||||
LOG_FONT=${EXIMON_LOG_FONT--misc-fixed-medium-r-normal-*-14-140-*-*-*-*-iso8859-1}
|
||||
LOG_STRIPCHARTS='/ <= /in/
|
||||
/ => /out/
|
||||
/ => .+ R=local/local/
|
||||
/ => .+ T=[^ ]*smtp/smtp/'
|
||||
MENU_EVENT=${EXIMON_MENU_EVENT-'Shift<Btn1Down>'}
|
||||
MIN_HEIGHT=${EXIMON_MIN_HEIGHT-162}
|
||||
MIN_WIDTH=${EXIMON_MIN_WIDTH-103}
|
||||
QUEUE_DEPTH=${EXIMON_QUEUE_DEPTH-200}
|
||||
QUEUE_WIDTH=${EXIMON_QUEUE_WIDTH-${EXIMON_WIDTH-950}}
|
||||
QUEUE_FONT=${EXIMON_QUEUE_FONT-${LOG_FONT}}
|
||||
QUEUE_MAX_ADDRESSES=${EXIMON_QUEUE_MAX_ADDRESSES-10}
|
||||
QUEUE_INTERVAL=${EXIMON_QUEUE_INTERVAL-300}
|
||||
QUEUE_STRIPCHART_NAME=${EXIMON_QUEUE_STRIPCHART_NAME-queue}
|
||||
SIZE_STRIPCHART=${EXIMON_SIZE_STRIPCHART}
|
||||
SIZE_STRIPCHART_NAME=${EXIMON_SIZE_STRIPCHART_NAME}
|
||||
START_SMALL=${EXIMON_START_SMALL-no}
|
||||
STRIPCHART_INTERVAL=${EXIMON_STRIPCHART_INTERVAL-60}
|
||||
TEXT_DEPTH=${EXIMON_TEXT_DEPTH-200}
|
||||
|
||||
# End
|
215
OS/os.Configuring
Normal file
215
OS/os.Configuring
Normal file
|
@ -0,0 +1,215 @@
|
|||
Configuring Exim for different Operating Systems
|
||||
------------------------------------------------
|
||||
|
||||
These notes describe the way in which Exim is configured at the C program level
|
||||
for different operating systems. The normal configuration options that apply
|
||||
independently of the operating system are specified by creating files in the
|
||||
Local directory, as described in chapter 4 of the manual.
|
||||
|
||||
These notes cover the os.* files in the OS directory, and contain information
|
||||
for people who want to port the program to some new OS, or to modify the
|
||||
configuration for an existing port. If you are just wanting to compile Exim on
|
||||
a system that it already knows about, you do not need to read further unless
|
||||
there are problems.
|
||||
|
||||
The os.c-<ostype> files
|
||||
-----------------------
|
||||
|
||||
There may be an os.c-<ostype> file for each operating system, but for many of
|
||||
them it is not necessary. No error occurs is there isn't one. There is a
|
||||
generic file called os.c which contains code that is common to two or more OS
|
||||
for setting a restarting or a non-restarting signal, for computing the load
|
||||
average, and for finding all the network interface addresses. A few OS have
|
||||
their own individual code for one or more of these. When they do, the code is
|
||||
put into an os.c-<ostype> file, which also defines a macro such as
|
||||
OS_RESTARTING_SIGNAL (for example) to cut out the common code in the generic
|
||||
os.c.
|
||||
|
||||
The os.h-<ostype> files
|
||||
-----------------------
|
||||
|
||||
For each OS that Exim knows about, there is an os.h-<ostype> file, where
|
||||
<ostype> is the OS name. The relevant file is included as a C header file for
|
||||
all Exim compilation by pointing a symbolic link called os.h at it from the
|
||||
build directory. The settings are as follows:
|
||||
|
||||
The select() function
|
||||
---------------------
|
||||
|
||||
There is a difference in the data type for the second argument to the select()
|
||||
function in some OS. The macro SELECT_ARG2_TYPE can be used to define the type.
|
||||
If it is not defined in os.h, then it is defaulted to fs_set in exim.h.
|
||||
|
||||
The dn_expand() function
|
||||
------------------------
|
||||
|
||||
There is a difference in the data type for the fourth argument to the
|
||||
dn_expand() function in some OS. The macro DN_EXPAND_ARG4_TYPE can be used to
|
||||
define the type. If it is not defined in os.h, then it is defaulted to char *
|
||||
in exim.h.
|
||||
|
||||
The h_errno variable
|
||||
--------------------
|
||||
|
||||
If NEED_H_ERRNO is defined, then a definition of the form
|
||||
|
||||
extern int h_errno
|
||||
|
||||
is included in the compiled code of Exim.
|
||||
|
||||
The strerror() function
|
||||
-----------------------
|
||||
|
||||
Most systems provide the ANSI standard strerror() function; older systems may
|
||||
instead have an errlist[] variable in which to look up error texts. Defining
|
||||
STRERROR_FROM_ERRLIST causes Exim to build its own strerror() function that
|
||||
mimics the ANSI function by lookup up the error code in errlist.
|
||||
|
||||
Truncating files
|
||||
----------------
|
||||
|
||||
The fcntl() option for truncating the length of a file is called F_FREESP in
|
||||
most systems; in some, however, it is called O_TRUNC. Some os.h files define
|
||||
F_FREESP to be O_TRUNC for this reason.
|
||||
|
||||
Finding local interfaces
|
||||
------------------------
|
||||
|
||||
The SIOCGIFCONF ioctl for finding local interfaces behaves differently on BSD
|
||||
systems. It returns a vector of ifreq blocks containing sockaddr structures
|
||||
that can be longer than their sizeof definition, making the returned ifreq
|
||||
blocks longer than their sizeof definitions. BSD sockaddrs structures contain
|
||||
an sa_len field giving the actual size. To cope with difference, there is a
|
||||
macro called HAVE_SA_LEN. If it is defined, code that works on BSD systems is
|
||||
used. Otherwise, the objects returned by SIOCGIFCONF are assumed to be of
|
||||
length sizeof(struct ifreq).
|
||||
|
||||
On some operating systems, the SIOCGIFCONF ioctl returns the IP addresses
|
||||
with the list of interfaces, and there is no need to call SIOCGIFADDR for each
|
||||
individual address. Mostly, making the second call does no harm, but on Linux
|
||||
when there are IP aliases, it causes things to go wrong. This also happens on
|
||||
BSDI and GNU Hurd. Therefore, there is now a macro to cut it out, called
|
||||
SIOCGIFCONF_GIVES_ADDR.
|
||||
|
||||
Note that, if IPv6 support is configured, Exim cannot find the IPv6 addresses
|
||||
on local interfaces by itself. You need to set the local_interfaces option in
|
||||
this situation.
|
||||
|
||||
Computing load averages
|
||||
-----------------------
|
||||
|
||||
There are several different ways that load averages are computed. One-off code
|
||||
is put in the os.c-<ostype>, but several OS use similar methods, and these
|
||||
are coded in the generic os.c, using a number of parameters to make variations
|
||||
between OS.
|
||||
|
||||
Sometimes the load average is not available to unprivileged callers. If
|
||||
LOAD_AVG_NEEDS_ROOT is set, Exim ensures that it is root before trying to
|
||||
obtain a load average value.
|
||||
|
||||
(1) If HAVE_BSD_GETLOADAVG is defined, Exim uses a simple call to the
|
||||
getloadavg() function.
|
||||
|
||||
(2) If HAVE_KSTAT is defined, Exim uses the kstat package as found in Solaris 2
|
||||
(but nowhere else as yet). It uses some supplementary definitions:
|
||||
|
||||
LOAD_AVG_KSTAT the kstat to use
|
||||
LOAD_AVG_KSTAT_MODULE the module to access
|
||||
LOAD_AVG_KSTAT_SYMBOL the symbol containing the value we want
|
||||
LOAD_AVG_KSTAT_FIELD the field identity
|
||||
|
||||
(3) If HAVE_DEV_KMEM is defined, Exim reads load average values from the
|
||||
/dev/kmem device. It uses some supplementary definitions:
|
||||
|
||||
LOAD_AVG_TYPE the data type
|
||||
LOAD_AVG_SYMBOL the symbol to look up
|
||||
KERNEL_PATH the name of the kernel
|
||||
FSCALE a scaling factor
|
||||
|
||||
Sometimes FSCALE is defined in system headers so need not be defined in the
|
||||
os.h-<ostype> file.
|
||||
|
||||
Glibc systems and IP options
|
||||
----------------------------
|
||||
|
||||
The code for inspecting IP options is the same in all OS except for systems
|
||||
using glibc (e.g. Linux), which uses a different structure to return data from
|
||||
getsockopt(). To handle this, there is a macro called
|
||||
|
||||
GLIBC_IP_OPTIONS
|
||||
|
||||
which should be set for Linux (in os.h-Linux) and any other operating system
|
||||
that uses glibc.
|
||||
|
||||
Options for statvfs()
|
||||
---------------------
|
||||
|
||||
The following settings apply to the compilation of the Exim monitor as well as
|
||||
to the main Exim binary.
|
||||
|
||||
#undefine HAVE_STATFS
|
||||
|
||||
Exim has options for checking the amount of space in the spool partition
|
||||
before accepting a message, and the monitor has the ability to display a
|
||||
stripchart of the percentage fullness of a particular disc partition, usually
|
||||
/var/spool/mail. The standard way of finding out the data is to call the
|
||||
statvfs() function, but some operating systems use statfs() and some may not
|
||||
have the ability at all. The Exim code uses STATVFS() for this function and
|
||||
this gets defined appropriately. HAVE_STATFS is defined before including the
|
||||
os.h file; undefining it suppresses the code for checking a partition in the
|
||||
main binary, and for monitoring disc partition in the monitor.
|
||||
|
||||
When HAVE_STATFS is defined, the distinction between statvfs() and statfs() is
|
||||
made by checking HAVE_SYS_STATVFS_H. If it is defined, then sys/statvfs.h is
|
||||
included. Otherwise, STATVFS() is defined as a macro for statfs(), and some
|
||||
further includes are done, according to the following definitions:
|
||||
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
#define HAVE_VFS_H
|
||||
|
||||
Each of those definitions causes the inclusion of the corresponding system
|
||||
header file in the Exim monitor compilation. For example, the first one causes
|
||||
|
||||
#include <sys/mount.h>
|
||||
|
||||
to be obeyed. Different systems may require different combinations of these
|
||||
headers.
|
||||
|
||||
The sys/resource.h header
|
||||
-------------------------
|
||||
|
||||
One OS does not have the sys/resource.h header. If NO_SYS_RESOURCE_H is defined
|
||||
in an os.h-<ostype> file, then the #include for this header is skipped in
|
||||
exim.h.
|
||||
|
||||
Support for login_cap functions
|
||||
-------------------------------
|
||||
|
||||
Some of the BSD systems support functions for controlling the resources that
|
||||
user processes can use (e.g. login_getpwclass). If HAVE_SETCLASSRESOURCES is
|
||||
defined, Exim supports this feature for running pipe deliveries, using the
|
||||
setclassresources() function.
|
||||
|
||||
The crypt_h header
|
||||
------------------
|
||||
|
||||
Some OS require crypt.h to be included to get a prototype for the crypt()
|
||||
function. This is needed only when compiling with AUTH support. If CRYPT_H is
|
||||
defined, then this header is included.
|
||||
|
||||
mmap() support
|
||||
--------------
|
||||
|
||||
The CDB support includes the option of handling file operations by using
|
||||
mmap()/munmap(). This gives a reasonable performance increase which will
|
||||
probably scale over multiple processes (since the files are mapped read-only
|
||||
shared). The vast majority of modern operating systems will support mmap
|
||||
(certainly in the simplified way that it is being used here). For example any
|
||||
BSD 4.x derived or POSIX compliant system will support it, as will pretty much
|
||||
any system using dynamically shared link libraries.
|
||||
|
||||
If the OS is believed to support mmap() then the symbol HAVE_MMAP is defined.
|
||||
Not all systems that support mmap will have had their config files updated to
|
||||
reflect this. Currently Linux, Sun, BSD and SGI/mips systems have been updated.
|
||||
|
||||
*** End ***
|
50
OS/os.c-FreeBSD
Normal file
50
OS/os.c-FreeBSD
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) Jeremy Harris 1995 - 2020 */
|
||||
/* Copyright (c) The Exim Maintainers 2021 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* FreeBSD-specific code. This is concatenated onto the generic
|
||||
src/os.c file. */
|
||||
|
||||
|
||||
/*************
|
||||
Sendfile shim
|
||||
*************/
|
||||
|
||||
ssize_t
|
||||
os_sendfile(int out, int in, off_t * offp, size_t cnt)
|
||||
{
|
||||
off_t loff = offp ? *offp : 0;
|
||||
off_t written;
|
||||
|
||||
if (sendfile(in, out, loff, cnt, NULL, &written, 0) < 0) return (ssize_t)-1;
|
||||
if (offp) *offp = loff + written;
|
||||
return (ssize_t)written;
|
||||
}
|
||||
|
||||
/*************************************************
|
||||
TCP Fast Open: check that the ioctl is accepted
|
||||
*************************************************/
|
||||
|
||||
#ifndef COMPILE_UTILITY
|
||||
void
|
||||
tfo_probe(void)
|
||||
{
|
||||
# ifdef TCP_FASTOPEN
|
||||
int sock;
|
||||
|
||||
if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) >= 0
|
||||
&& setsockopt(sock, IPPROTO_TCP, TCP_FASTOPEN, &on, sizeof(on) >= 0)
|
||||
)
|
||||
f.tcp_fastopen_ok = TRUE;
|
||||
close(sock);
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* End of os.c-Linux */
|
57
OS/os.c-GNU
Normal file
57
OS/os.c-GNU
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) The Exim Maintainers 2020 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* GNU-specific code. This is concatenated onto the generic src/os.c file.
|
||||
GNU/Hurd has approximately the same way to determine the load average as NeXT,
|
||||
so a variant of this could also be in the generic os.c file. See the GNU EMacs
|
||||
getloadavg.c file, from which this snippet was derived. getloadavg.c from Emacs
|
||||
is copyrighted by the FSF under the terms of the GPLv2 or any later version.
|
||||
Changes are hereby placed under the same license, as requested by the GPL. */
|
||||
|
||||
#ifndef OS_LOAD_AVERAGE
|
||||
#define OS_LOAD_AVERAGE
|
||||
|
||||
#include <mach.h>
|
||||
|
||||
static processor_set_t default_set;
|
||||
static int getloadavg_initialized;
|
||||
|
||||
int
|
||||
os_getloadavg (void)
|
||||
{
|
||||
host_t host;
|
||||
struct processor_set_basic_info info;
|
||||
unsigned info_count;
|
||||
|
||||
if (!getloadavg_initialized)
|
||||
{
|
||||
if (processor_set_default (mach_host_self(), &default_set) == KERN_SUCCESS)
|
||||
getloadavg_initialized = 1;
|
||||
}
|
||||
|
||||
if (getloadavg_initialized)
|
||||
{
|
||||
info_count = PROCESSOR_SET_BASIC_INFO_COUNT;
|
||||
if (processor_set_info(default_set, PROCESSOR_SET_BASIC_INFO, &host,
|
||||
(processor_set_info_t)&info, &info_count) != KERN_SUCCESS)
|
||||
getloadavg_initialized = 0;
|
||||
else
|
||||
{
|
||||
#if LOAD_SCALE == 1000
|
||||
return info.load_average;
|
||||
#else
|
||||
return (int) (((double) info.load_average * 1000) / LOAD_SCALE));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
#endif /* OS_LOAD_AVERAGE */
|
||||
|
||||
/* End of os.c-GNU */
|
166
OS/os.c-Linux
Normal file
166
OS/os.c-Linux
Normal file
|
@ -0,0 +1,166 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) University of Cambridge 1997 - 2018 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* Linux-specific code. This is concatenated onto the generic
|
||||
src/os.c file. */
|
||||
|
||||
|
||||
/*************************************************
|
||||
* Load average computation *
|
||||
*************************************************/
|
||||
|
||||
/*Linux has an apparently unique way of getting the load average, so we provide
|
||||
a unique function here, and define OS_LOAD_AVERAGE to stop src/os.c trying to
|
||||
provide the function. However, when compiling os.c for utilities, we may not
|
||||
want this at all, so check that it isn't set first. */
|
||||
|
||||
#if !defined(OS_LOAD_AVERAGE) && defined(__linux__)
|
||||
#define OS_LOAD_AVERAGE
|
||||
|
||||
/* Linux has 2 ways of returning load average:
|
||||
|
||||
(1) Do a read on /proc/loadavg
|
||||
(2) Use the sysinfo library function and syscall
|
||||
|
||||
The latter is simpler but in Linux 2.0 - 2.2 (and probably later releases) is
|
||||
exceptionally slow - 10-50ms per call is not unusual and about 100x slow the
|
||||
first method. This cripples high performance mail servers by increasing CPU
|
||||
utilisation by 3-5x.
|
||||
|
||||
In Exim's very early days, it used the 1st method. Later, it switched to the
|
||||
2nd method. Now it tries the 1st method and falls back to the 2nd if /proc is
|
||||
unavailable. */
|
||||
|
||||
#include <sys/sysinfo.h>
|
||||
|
||||
static int
|
||||
linux_slow_getloadavg(void)
|
||||
{
|
||||
struct sysinfo s;
|
||||
double avg;
|
||||
if (sysinfo(&s) < 0) return -1;
|
||||
avg = (double) (s.loads[0]) / (1<<SI_LOAD_SHIFT);
|
||||
return (int)(avg * 1000.0);
|
||||
}
|
||||
|
||||
int
|
||||
os_getloadavg(void)
|
||||
{
|
||||
char buffer[40];
|
||||
double avg;
|
||||
int count;
|
||||
int fd = open ("/proc/loadavg", O_RDONLY);
|
||||
if (fd == -1) return linux_slow_getloadavg();
|
||||
count = read (fd, buffer, sizeof(buffer));
|
||||
(void)close (fd);
|
||||
if (count <= 0) return linux_slow_getloadavg();
|
||||
count = sscanf (buffer, "%lf", &avg);
|
||||
if (count < 1) return linux_slow_getloadavg();
|
||||
return (int)(avg * 1000.0);
|
||||
}
|
||||
#endif /* OS_LOAD_AVERAGE */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*************************************************
|
||||
* Finding interface addresses *
|
||||
*************************************************/
|
||||
|
||||
/* This function is not required for utilities; we cut it out if
|
||||
FIND_RUNNING_INTERFACES is already defined. */
|
||||
|
||||
#ifndef FIND_RUNNING_INTERFACES
|
||||
|
||||
/* This code, contributed by Jason Gunthorpe, appears to be the current
|
||||
way of finding IPv6 interfaces in Linux. It first calls the common function in
|
||||
order to find IPv4 interfaces, then grobbles around to find the others. Jason
|
||||
said, "This is so horrible, don't look. Slightly ripped from net-tools
|
||||
ifconfig." It gets called by virtue of os_find_running_interfaces being defined
|
||||
as a macro for os_find_running_interfaces_linux in the os.h-Linux file. */
|
||||
|
||||
ip_address_item *
|
||||
os_find_running_interfaces_linux(void)
|
||||
{
|
||||
ip_address_item *yield = NULL;
|
||||
|
||||
#if HAVE_IPV6
|
||||
ip_address_item *last = NULL;
|
||||
ip_address_item *next;
|
||||
char addr6p[8][5];
|
||||
unsigned int plen, scope, dad_status, if_idx;
|
||||
char devname[20+1];
|
||||
FILE *f;
|
||||
#endif
|
||||
|
||||
yield = os_common_find_running_interfaces();
|
||||
|
||||
#if HAVE_IPV6
|
||||
|
||||
/* Open the /proc file; give up if we can't. */
|
||||
|
||||
if ((f = fopen("/proc/net/if_inet6", "r")) == NULL) return yield;
|
||||
|
||||
/* Pick out the data from within the file, and add it on to the chain */
|
||||
|
||||
last = yield;
|
||||
if (last != NULL) while (last->next != NULL) last = last->next;
|
||||
|
||||
while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n",
|
||||
addr6p[0], addr6p[1], addr6p[2], addr6p[3],
|
||||
addr6p[4], addr6p[5], addr6p[6], addr6p[7],
|
||||
&if_idx, &plen, &scope, &dad_status, devname) != EOF)
|
||||
{
|
||||
struct sockaddr_in6 addr;
|
||||
|
||||
/* This data has to survive for ever, so use malloc. */
|
||||
|
||||
next = store_malloc(sizeof(ip_address_item));
|
||||
next->next = NULL;
|
||||
next->port = 0;
|
||||
sprintf(CS next->address, "%s:%s:%s:%s:%s:%s:%s:%s",
|
||||
addr6p[0], addr6p[1], addr6p[2], addr6p[3],
|
||||
addr6p[4], addr6p[5], addr6p[6], addr6p[7]);
|
||||
|
||||
/* Normalize the representation */
|
||||
|
||||
inet_pton(AF_INET6, CS next->address, &addr.sin6_addr);
|
||||
inet_ntop(AF_INET6, &addr.sin6_addr, CS next->address, sizeof(next->address));
|
||||
|
||||
if (yield == NULL) yield = last = next; else
|
||||
{
|
||||
last->next = next;
|
||||
last = next;
|
||||
}
|
||||
|
||||
DEBUG(D_interface)
|
||||
debug_printf("Actual local interface address is %s (%s)\n", last->address,
|
||||
devname);
|
||||
}
|
||||
fclose(f);
|
||||
#endif /* HAVE_IPV6 */
|
||||
|
||||
return yield;
|
||||
}
|
||||
|
||||
#endif /* FIND_RUNNING_INTERFACES */
|
||||
|
||||
|
||||
/*************
|
||||
* Sendfile *
|
||||
*************/
|
||||
#include <sys/sendfile.h>
|
||||
|
||||
ssize_t
|
||||
os_sendfile(int out, int in, off_t * off, size_t cnt)
|
||||
{
|
||||
return sendfile(out, in, off, cnt);
|
||||
}
|
||||
|
||||
/* End of os.c-Linux */
|
17
OS/os.c-SunOS5
Normal file
17
OS/os.c-SunOS5
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) University of Cambridge 2016 */
|
||||
/* Copyright (c) Jeremy Harris 2016 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* Solaris-specific code. This is concatenated onto the generic
|
||||
src/os.c file. */
|
||||
|
||||
#if defined(MISSING_UNSETENV_3) && !defined(COMPILE_UTILITY)
|
||||
# include "setenv.c"
|
||||
#endif
|
||||
|
||||
/* End of os.c-SunOS5 */
|
84
OS/os.h-FreeBSD
Normal file
84
OS/os.h-FreeBSD
Normal file
|
@ -0,0 +1,84 @@
|
|||
/* Exim: OS-specific C header file for FreeBSD */
|
||||
/* Copyright (c) The Exim Maintainers 2020 - 2024 */
|
||||
/* Copyright (c) University of Cambridge 1995 - 2018 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
|
||||
#define HAVE_BSD_GETLOADAVG
|
||||
#define HAVE_SETCLASSRESOURCES
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
#define HAVE_GETIFADDRS
|
||||
#define SIOCGIFCONF_GIVES_ADDR
|
||||
#define HAVE_SRANDOMDEV
|
||||
#define HAVE_ARC4RANDOM
|
||||
#define EXIM_HAVE_OPENAT
|
||||
#define EXIM_HAVE_FUTIMENS
|
||||
|
||||
/* Applications should not call arc4random_stir() explicitly after
|
||||
* FreeBSD r227520 (approximately 1000002).
|
||||
* Set NOT_HAVE_ARC4RANDOM_STIR if the version released is past
|
||||
* that point. */
|
||||
#if __FreeBSD_version >= 1000002
|
||||
# define NOT_HAVE_ARC4RANDOM_STIR
|
||||
#endif
|
||||
|
||||
typedef struct flock flock_t;
|
||||
|
||||
/* iconv arg2 type: libiconv in Ports uses "const char* * inbuf" and was
|
||||
* traditionally the only approach available. The iconv functionality
|
||||
* in libc is "char ** restrict src".
|
||||
*
|
||||
* <https://www.freebsd.org/doc/en/books/porters-handbook/using-iconv.html>
|
||||
* says that libc has iconv since 2013, in 10-CURRENT. FreeBSD man-pages
|
||||
* shows it included in 10.0-RELEASE. Writing this in 2017, 10.3 is the
|
||||
* oldest supported release, so we should assume non-libiconv by default.
|
||||
* (Actually, people still using old releases past EOL; we shouldn't support
|
||||
* them but I don't want to deal with howls of complaints because we dare
|
||||
* to not support the unsupported, so guard this on FreeBSD 10+)
|
||||
*
|
||||
* Thus we no longer override iconv.
|
||||
*
|
||||
* However, if libiconv is installed, and anything adds /usr/local/include
|
||||
* to include-path (likely) then we'll get that. So define a variable
|
||||
* which makes the libiconv try to not interfere with OS iconv.
|
||||
*/
|
||||
#if __FreeBSD__ >= 10
|
||||
# define LIBICONV_PLUG
|
||||
#endif
|
||||
/* for more specific version constraints, look at __FreeBSD_version
|
||||
* from <sys/param.h> */
|
||||
|
||||
/* When using DKIM, setting OS_SENDFILE can increase
|
||||
performance on outgoing mail a bit. */
|
||||
|
||||
#define OS_SENDFILE
|
||||
extern ssize_t os_sendfile(int, int, off_t *, size_t);
|
||||
|
||||
#ifdef PID_T_FMT
|
||||
# undef PID_T_FMT
|
||||
#endif
|
||||
#define PID_T_FMT "%d"
|
||||
|
||||
|
||||
/*******************/
|
||||
|
||||
#define EXIM_TFO_PROBE
|
||||
#define EXIM_TFO_FREEBSD
|
||||
|
||||
|
||||
/* for TCP state-variable values, for TFO logging */
|
||||
#include <netinet/tcp_fsm.h>
|
||||
#define TCP_SYN_RECV TCPS_SYN_RECEIVED
|
||||
|
||||
/*******************/
|
||||
|
||||
#define EXIM_HAVE_KEVENT
|
||||
#define EXIM_HAVE_STRCHRNUL
|
||||
|
||||
|
||||
/* End */
|
35
OS/os.h-GNU
Normal file
35
OS/os.h-GNU
Normal file
|
@ -0,0 +1,35 @@
|
|||
/* Exim: OS-specific C header file for GNU/Hurd */
|
||||
/* Copyright (c) The Exim Maintainers 2020 - 2021 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include <features.h>
|
||||
|
||||
#define CRYPT_H
|
||||
#define GLIBC_IP_OPTIONS
|
||||
#define HAVE_BSD_GETLOADAVG
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_VFS_H
|
||||
#define NO_IP_VAR_H
|
||||
#define SIG_IGN_WORKS
|
||||
#define SIOCGIFCONF_GIVES_ADDR
|
||||
|
||||
#define F_FREESP O_TRUNC
|
||||
typedef struct flock flock_t;
|
||||
|
||||
#define os_strsignal strsignal
|
||||
#define OS_STRSIGNAL
|
||||
|
||||
/* Hurd-specific bits below */
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* setgroups(0, NULL) succeeds, and drops the gid group
|
||||
as well as any supplementary groups*/
|
||||
#define OS_SETGROUPS_ZERO_DROPS_ALL
|
||||
|
||||
#if _POSIX_C_SOURCE >= 200809L || _ATFILE_SOURCE
|
||||
# define EXIM_HAVE_OPENAT
|
||||
#endif
|
||||
|
||||
/* End */
|
107
OS/os.h-Linux
Normal file
107
OS/os.h-Linux
Normal file
|
@ -0,0 +1,107 @@
|
|||
/* Exim: OS-specific C header file for Linux */
|
||||
/* Copyright (c) The Exim Maintainers 2021 - 2024 */
|
||||
/* Copyright (c) University of Cambridge 1995 - 2020 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
|
||||
/* Some old systems we've received bug-reports for have a <limits.h> which
|
||||
does not pull in <features.h>. Best to just pull it in now and have done
|
||||
with the issue. */
|
||||
|
||||
#include <features.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
#define CRYPT_H
|
||||
#define GLIBC_IP_OPTIONS
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_BSD_GETLOADAVG
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define HAVE_GETIFADDRS
|
||||
#define NO_IP_VAR_H
|
||||
#define SIG_IGN_WORKS
|
||||
|
||||
/* When using DKIM, setting OS_SENDFILE can increase
|
||||
performance on outgoing mail a bit. Note: With older glibc versions
|
||||
this setting will conflict with the _FILE_OFFSET_BITS=64 setting
|
||||
defined as part of the Linux CFLAGS. As of 2017 those are declared
|
||||
to be too old to build by default. */
|
||||
|
||||
#define OS_SENDFILE
|
||||
extern ssize_t os_sendfile(int, int, off_t *, size_t);
|
||||
|
||||
#define F_FREESP O_TRUNC
|
||||
typedef struct flock flock_t;
|
||||
|
||||
#define os_strsignal strsignal
|
||||
#define OS_STRSIGNAL
|
||||
|
||||
#if defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__NetBSD_kernel__)
|
||||
# define SIOCGIFCONF_GIVES_ADDR
|
||||
# define HAVE_SYS_MOUNT_H
|
||||
#endif
|
||||
|
||||
#if defined(__linux__)
|
||||
|
||||
/* Some versions of Linux need explicit sync-ing of directories as well as
|
||||
files. This setting requests that. If the directory is on NFS, it may not
|
||||
be possible to sync it - in that case, Exim now should ignore the error. But
|
||||
if you have problems in that area, try undefining this. But be aware that you
|
||||
may be in a situation where files are not being properly "committed to stable
|
||||
storage" as quickly as Exim thinks they are. */
|
||||
|
||||
#define NEED_SYNC_DIRECTORY
|
||||
|
||||
#define os_find_running_interfaces os_find_running_interfaces_linux
|
||||
|
||||
/* Need a prototype for the Linux-specific function. The structure hasn't
|
||||
been defined yet, so we need to pre-declare it. */
|
||||
|
||||
struct ip_address_item;
|
||||
extern struct ip_address_item *os_find_running_interfaces_linux(void);
|
||||
|
||||
#endif /* __linux__ */
|
||||
|
||||
/* Some folks running "unusual" setups with very old libc environments have
|
||||
found that _GNU_SOURCE=1 before <features.h> is not sufficient to define some
|
||||
constants needed for 64-bit arithmetic. If you encounter build errors based
|
||||
on LLONG_MIN being undefined and various other escape hatches have not helped,
|
||||
then change the 0 to 1 in the next block. */
|
||||
|
||||
#if 0
|
||||
# define LLONG_MIN LONG_LONG_MIN
|
||||
# define LLONG_MAX LONG_LONG_MAX
|
||||
#endif
|
||||
|
||||
#if _POSIX_C_SOURCE >= 200809L || _ATFILE_SOURCE
|
||||
# define EXIM_HAVE_OPENAT
|
||||
# define EXIM_HAVE_FUTIMENS
|
||||
#endif
|
||||
|
||||
/* TCP Fast Open support */
|
||||
|
||||
#include <netinet/tcp.h> /* for TCP_FASTOPEN */
|
||||
#include <sys/socket.h> /* for MSG_FASTOPEN */
|
||||
#if defined(TCP_FASTOPEN) && !defined(MSG_FASTOPEN)
|
||||
# define MSG_FASTOPEN 0x20000000
|
||||
#endif
|
||||
#define EXIM_HAVE_TCPI_UNACKED
|
||||
#ifndef TCPI_OPT_SYN_DATA
|
||||
# define TCPI_OPT_SYN_DATA 32
|
||||
#endif
|
||||
|
||||
/* "Abstract" Unix-socket names */
|
||||
#define EXIM_HAVE_ABSTRACT_UNIX_SOCKETS
|
||||
|
||||
/* inotify(7) etc syscalls */
|
||||
#define EXIM_HAVE_INOTIFY
|
||||
|
||||
/* Needed for uClibc */
|
||||
#ifndef NS_MAXMSG
|
||||
# define NS_MAXMSG 65535
|
||||
#endif
|
||||
|
||||
#define EXIM_HAVE_STRCHRNUL
|
||||
|
||||
/* End */
|
66
OS/os.h-OpenBSD
Normal file
66
OS/os.h-OpenBSD
Normal file
|
@ -0,0 +1,66 @@
|
|||
/* Exim: OS-specific C header file for OpenBSD */
|
||||
/* Copyright (c) University of Cambridge 1995 - 2018 */
|
||||
/* Copyright (c) The Exim Maintainers 2021 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
|
||||
#define HAVE_BSD_GETLOADAVG
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
#define HAVE_GETIFADDRS
|
||||
#define EXIM_HAVE_OPENAT
|
||||
#define EXIM_HAVE_FUTIMENS
|
||||
#define HAVE_ARC4RANDOM
|
||||
/* In May 2014, OpenBSD 5.5 was released which cleaned up the arc4random_* API
|
||||
which removed the arc4random_stir() function. Set NOT_HAVE_ARC4RANDOM_STIR
|
||||
if the version released is past that point. */
|
||||
#include <sys/param.h>
|
||||
#if OpenBSD >= 201405
|
||||
# define NOT_HAVE_ARC4RANDOM_STIR
|
||||
#endif
|
||||
|
||||
typedef struct flock flock_t;
|
||||
|
||||
#define os_strsignal strsignal
|
||||
#define OS_STRSIGNAL
|
||||
|
||||
typedef struct __res_state *res_state;
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
#ifndef EPROTO
|
||||
# define EPROTO 71
|
||||
#endif
|
||||
|
||||
/* We need to force this; the automatic in buildconfig.c gets %ld */
|
||||
#ifdef OFF_T_FMT
|
||||
# undef OFF_T_FMT
|
||||
# undef LONGLONG_T
|
||||
#endif
|
||||
#define OFF_T_FMT "%lld"
|
||||
#define LONGLONG_T long long int
|
||||
|
||||
#ifdef PID_T_FMT
|
||||
# undef PID_T_FMT
|
||||
#endif
|
||||
#define PID_T_FMT "%d"
|
||||
|
||||
#ifdef INO_T_FMT
|
||||
# undef INO_T_FMT
|
||||
#endif
|
||||
#define INO_T_FMT "%llu"
|
||||
|
||||
#ifdef TIME_T_FMT
|
||||
# undef TIME_T_FMT
|
||||
#endif
|
||||
#define TIME_T_FMT "%lld"
|
||||
|
||||
/* seems arpa/nameser.h does not define this.
|
||||
Space-constrained devices could use much smaller; a few k. */
|
||||
#define NS_MAXMSG 65535
|
||||
|
||||
#define EXIM_HAVE_KEVENT
|
||||
|
||||
/* End */
|
59
OS/os.h-SunOS5
Normal file
59
OS/os.h-SunOS5
Normal file
|
@ -0,0 +1,59 @@
|
|||
/* Exim: OS-specific C header file for SunOS5 aka Solaris */
|
||||
/* Copyright (c) The Exim Maintainers 2021 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define CRYPT_H
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define F_FAVAIL f_favail
|
||||
#define SIOCGIFCONF_GIVES_ADDR
|
||||
|
||||
#define HAVE_GETIPNODEBYNAME 1
|
||||
#define HAVE_GETIPNODEBYADDR 1
|
||||
#define EXIM_HAVE_OPENAT
|
||||
#define EXIM_HAVE_FUTIMENS
|
||||
|
||||
#define HAVE_KSTAT
|
||||
#define LOAD_AVG_KSTAT "system_misc"
|
||||
#define LOAD_AVG_KSTAT_MODULE "unix"
|
||||
#define LOAD_AVG_SYMBOL "avenrun_1min"
|
||||
#define LOAD_AVG_FIELD value.ui32
|
||||
|
||||
#define os_strsignal strsignal
|
||||
#define OS_STRSIGNAL
|
||||
|
||||
/* This is needed for some early Solaris releases, but causes trouble
|
||||
in the current ones, so it is out by default. */
|
||||
|
||||
/* #define EXIM_SOCKLEN_T size_t */
|
||||
|
||||
/* This is different from Linux and all other PAM implementations,
|
||||
it seems. */
|
||||
|
||||
#define PAM_CONVERSE_ARG2_TYPE struct pam_message
|
||||
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
#if _POSIX_C_SOURCE < 200112L
|
||||
# define MISSING_UNSETENV_3
|
||||
#endif
|
||||
|
||||
#if _POSIX_C_SOURCE < 200809L
|
||||
# define MISSING_POSIX_MEMALIGN
|
||||
#endif
|
||||
|
||||
|
||||
/* SunOS5 doesn't accept getcwd(NULL, 0) to auto-allocate
|
||||
a buffer */
|
||||
|
||||
#define OS_GETCWD
|
||||
|
||||
|
||||
#ifndef MIN
|
||||
# define MIN(a,b) (((a)<(b))?(a):(b))
|
||||
# define MAX(a,b) (((a)>(b))?(a):(b))
|
||||
#endif
|
||||
|
||||
/* End */
|
29
OS/unsupported/Makefile-AIX
Normal file
29
OS/unsupported/Makefile-AIX
Normal file
|
@ -0,0 +1,29 @@
|
|||
# Exim: OS-specific make file for AIX
|
||||
# Written by Nick Waterman (nick@cimio.co.uk)
|
||||
# Modified by PH following a message from Mike Meredith
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# Note that the output of uname -m is probably not what Philip expected,
|
||||
# so you might end up with more build-AIX-random_number directories than
|
||||
# you expected if you have too many AIX boxes, but it seems to work... I
|
||||
# blame IBM.
|
||||
|
||||
# Note that nowadays you have to pay extra for a cc compiler with AIX!
|
||||
|
||||
CC=gcc
|
||||
|
||||
# This needs to be in here rather than os.h-AIX because of regexp stuff.
|
||||
# basically strchr is a #define, which means "extern char *strchr()"
|
||||
# ruins things. __STR31__ seems to get around this by magic. The AIX
|
||||
# include files are quite a confusing maze.
|
||||
# Mike M says this is not necessary any more; possibly this is related to
|
||||
# using gcc. Commented out by PH.
|
||||
#CFLAGS = -D__STR31__
|
||||
|
||||
CFLAGS = -mcpu=power4 -maix64 -O3
|
||||
|
||||
# Needed for vfork() and vfork() only?
|
||||
|
||||
LIBS = -lbsd -lm
|
||||
|
||||
# End
|
22
OS/unsupported/Makefile-BSDI
Normal file
22
OS/unsupported/Makefile-BSDI
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Exim: OS-specific make file for BSDI aka BSD/OS. Its antique link editor
|
||||
# cannot handle the TextPop overriding.
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CFLAGS=-O
|
||||
CHOWN_COMMAND=/usr/sbin/chown
|
||||
|
||||
HAVE_SA_LEN=YES
|
||||
|
||||
X11=/usr/X11
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
LIBS_EXIMON=-lSM -lICE -lipc -lm
|
||||
EXIMON_TEXTPOP=
|
||||
|
||||
EXIWHAT_PS_ARG=-ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# End
|
114
OS/unsupported/Makefile-CYGWIN
Normal file
114
OS/unsupported/Makefile-CYGWIN
Normal file
|
@ -0,0 +1,114 @@
|
|||
# OS-specific file for Cygwin.
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# This file provided by Pierre A. Humblet <Pierre.Humblet@ieee.org>
|
||||
|
||||
HAVE_IPV6 = yes
|
||||
HAVE_ICONV = yes
|
||||
# Use c99 to have %z
|
||||
CFLAGS= -g -Wall -std=c99 -U __STRICT_ANSI__
|
||||
LIBS= -lcrypt -lresolv
|
||||
LIBS_EXIM= -liconv
|
||||
EXIWHAT_PS_ARG=-as
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
EXIWHAT_EGREP_ARG='/(EXIM|exim)[0-9. -]*$$'
|
||||
|
||||
DBMLIB=-lgdbm
|
||||
USE_GDBM=YES
|
||||
|
||||
# Some OS add a suffix to executables
|
||||
EXE = .exe
|
||||
|
||||
# To add a resource file with an icon
|
||||
LIBS_EXIM +=../Local/exim_res.o
|
||||
|
||||
# To produce a linker map
|
||||
#LIBS_EXIM+=-Wl,-Map,Exim.Map
|
||||
|
||||
|
||||
##################################################
|
||||
# The following is normally set in local/Makefile.
|
||||
# Makefile.cygwin provides defaults with which the
|
||||
# precompiled version is built
|
||||
##################################################
|
||||
|
||||
BIN_DIRECTORY=/usr/bin
|
||||
CONFIGURE_FILE=/etc/exim.conf
|
||||
EXIM_USER=18 # This changes if user exim exists
|
||||
EXIM_GROUP=544 # Administrators
|
||||
SPOOL_DIRECTORY=/var/spool/exim
|
||||
LOG_FILE_PATH=/var/log/exim/exim_%s.log
|
||||
TIMEZONE_DEFAULT = ""
|
||||
|
||||
AUTH_CRAM_MD5=yes
|
||||
AUTH_PLAINTEXT=yes
|
||||
AUTH_SPA=yes
|
||||
|
||||
#DISABLE_TLS=yes
|
||||
TLS_LIBS=-lssl -lcrypto
|
||||
|
||||
ROUTER_ACCEPT=yes
|
||||
ROUTER_DNSLOOKUP=yes
|
||||
ROUTER_IPLITERAL=yes
|
||||
ROUTER_MANUALROUTE=yes
|
||||
ROUTER_QUERYPROGRAM=yes
|
||||
ROUTER_REDIRECT=yes
|
||||
|
||||
TRANSPORT_APPENDFILE=yes
|
||||
TRANSPORT_AUTOREPLY=yes
|
||||
TRANSPORT_PIPE=yes
|
||||
TRANSPORT_SMTP=yes
|
||||
|
||||
SUPPORT_MAILDIR=yes
|
||||
SUPPORT_MAILSTORE=yes
|
||||
SUPPORT_MBX=yes
|
||||
|
||||
LOOKUP_DBM=yes
|
||||
LOOKUP_LSEARCH=yes
|
||||
|
||||
# LOOKUP_CDB=yes
|
||||
LOOKUP_DNSDB=yes
|
||||
LOOKUP_DSEARCH=yes
|
||||
LOOKUP_LDAP=yes
|
||||
# LOOKUP_MYSQL=yes
|
||||
# LOOKUP_NIS=yes
|
||||
# LOOKUP_NISPLUS=yes
|
||||
# LOOKUP_ORACLE=yes
|
||||
LOOKUP_PASSWD=yes
|
||||
# LOOKUP_PGSQL=yes
|
||||
# LOOKUP_WHOSON=yes
|
||||
|
||||
LDAP_LIB_TYPE=OPENLDAP2
|
||||
LOOKUP_LIBS=-lldap -llber
|
||||
|
||||
WITH_CONTENT_SCAN=yes
|
||||
|
||||
# It is important to define these variables but the values are always overridden
|
||||
CONFIGURE_OWNER=18
|
||||
CONFIGURE_GROUP=544
|
||||
|
||||
EXICYCLOG_MAX=10
|
||||
|
||||
COMPRESS_COMMAND=/usr/bin/gzip
|
||||
COMPRESS_SUFFIX=gz
|
||||
ZCAT_COMMAND=/usr/bin/zcat
|
||||
|
||||
# EXIM_PERL=perl.o
|
||||
|
||||
# Comment the two lines below if you do not have PAM, e.g. from
|
||||
# ftp://ftp.uni-erlangen.de/pub/pc/gnuwin32/cygwin/porters/Humblet_Pierre_A
|
||||
SUPPORT_PAM=yes
|
||||
CFLAGS += -DINCLUDE_PAM -I ../pam -I ../../pam
|
||||
|
||||
# All modes are in octal and must start with 0
|
||||
EXIMDB_DIRECTORY_MODE = 01777
|
||||
EXIMDB_MODE = 0666
|
||||
EXIMDB_LOCKFILE_MODE = 0666
|
||||
INPUT_DIRECTORY_MODE = 01777
|
||||
LOG_DIRECTORY_MODE = 01777
|
||||
LOG_MODE = 0666
|
||||
MSGLOG_DIRECTORY_MODE = 01777
|
||||
SPOOL_DIRECTORY_MODE = 01777
|
||||
SPOOL_MODE = 0600
|
||||
|
||||
# End
|
33
OS/unsupported/Makefile-DGUX
Normal file
33
OS/unsupported/Makefile-DGUX
Normal file
|
@ -0,0 +1,33 @@
|
|||
# Exim: OS-specific make file for DGUX
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#
|
||||
# Written by Ken Bailey (K.Bailey@rbgkew.org.uk) Feb 1998
|
||||
# on dgux R4.11MU04 generic AViiON mc88100
|
||||
# with no X
|
||||
|
||||
# Minor tidies to remove settings that are actually the default,
|
||||
# in line with the style of other system files - PH.
|
||||
|
||||
BASENAME_COMMAND=/bin/basename
|
||||
CHOWN_COMMAND=/bin/chown
|
||||
CHGRP_COMMAND=/bin/chgrp
|
||||
CHMOD_COMMAND=/bin/chmod
|
||||
|
||||
# PERL
|
||||
# Perl is not necessary for running Exim itself, but some Perl utilities
|
||||
# are provided for processing the logs. Perl 5 is assumed.
|
||||
# DG ship perl version 4.036 in /bin/perl so need to use locally installed perl
|
||||
|
||||
PERL_COMMAND=/usr/local/bin/perl
|
||||
|
||||
# dg's version of gcc likes O2
|
||||
|
||||
CFLAGS=-O2
|
||||
|
||||
RANLIB=@true
|
||||
LIBS=-lsocket -lnsl -lm
|
||||
LIBRESOLV=-lresolv
|
||||
DBMLIB=-ldbm
|
||||
|
||||
# End
|
||||
|
34
OS/unsupported/Makefile-Darwin
Normal file
34
OS/unsupported/Makefile-Darwin
Normal file
|
@ -0,0 +1,34 @@
|
|||
# Exim: OS-specific make file for Darwin (Mac OS X).
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CC=cc
|
||||
|
||||
BASENAME_COMMAND=look_for_it
|
||||
CHOWN_COMMAND=/usr/sbin/chown
|
||||
CHMOD_COMMAND=/bin/chmod
|
||||
|
||||
HAVE_SA_LEN=YES
|
||||
|
||||
# Removed -DBIND_8_COMPAT for 4.61
|
||||
# CFLAGS=-O -no-cpp-precomp -DBIND_8_COMPAT
|
||||
#
|
||||
# 2020/05/12 disable TLS resume support; it results in
|
||||
# "1 select() failure: No such file or directory"
|
||||
# being logged by the daeomn (sending the testsuite red...)
|
||||
|
||||
CFLAGS=-O -no-cpp-precomp -DDISABLE_TLS_RESUME
|
||||
LIBRESOLV=-lresolv
|
||||
|
||||
USE_DB = yes
|
||||
DBMLIB =
|
||||
|
||||
X11=/usr/X11R6
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
EXIWHAT_PS_ARG=ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# End
|
33
OS/unsupported/Makefile-DragonFly
Normal file
33
OS/unsupported/Makefile-DragonFly
Normal file
|
@ -0,0 +1,33 @@
|
|||
# Exim: OS-specific make file for DragonFly
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#
|
||||
# There's no setting of CFLAGS here, to allow the system default
|
||||
# for "make" to be the default.
|
||||
|
||||
CHOWN_COMMAND=/usr/sbin/chown
|
||||
CHMOD_COMMAND=/bin/chmod
|
||||
|
||||
HAVE_SA_LEN=YES
|
||||
|
||||
# crypt() is in a separate library
|
||||
LIBS=-lcrypt -lm
|
||||
|
||||
# DragonFly always ships with Berkeley DB
|
||||
USE_DB=yes
|
||||
|
||||
# X11 may be under /usr/pkg/xorg/ for example.
|
||||
# X11=/usr/X11R6
|
||||
X11=$(X11BASE)
|
||||
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
XLFLAGS+=-Wl,-rpath,${X11BASE}/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
EXIWHAT_PS_ARG=-ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_MULTIKILL_CMD='killall -m'
|
||||
EXIWHAT_MULTIKILL_ARG='^exim($$|-[0-9.]+-[0-9]+$$)'
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# End
|
30
OS/unsupported/Makefile-GNUkFreeBSD
Normal file
30
OS/unsupported/Makefile-GNUkFreeBSD
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Exim: OS-specific make file for GNU and variants.
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
HAVE_ICONV=yes
|
||||
|
||||
BASENAME_COMMAND=look_for_it
|
||||
CHOWN_COMMAND=look_for_it
|
||||
CHGRP_COMMAND=look_for_it
|
||||
CHMOD_COMMAND=look_for_it
|
||||
|
||||
CFLAGS ?= -O -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
|
||||
|
||||
DBMLIB = -ldb
|
||||
USE_DB = yes
|
||||
|
||||
LIBS = -lnsl -lcrypt -lm
|
||||
LIBRESOLV = -lresolv
|
||||
|
||||
X11=/usr/X11R6
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
EXIWHAT_PS_ARG=ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_MULTIKILL_CMD=killall
|
||||
EXIWHAT_MULTIKILL_ARG=exim4
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# End
|
30
OS/unsupported/Makefile-GNUkNetBSD
Normal file
30
OS/unsupported/Makefile-GNUkNetBSD
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Exim: OS-specific make file for GNU and variants.
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
HAVE_ICONV=yes
|
||||
|
||||
BASENAME_COMMAND=look_for_it
|
||||
CHOWN_COMMAND=look_for_it
|
||||
CHGRP_COMMAND=look_for_it
|
||||
CHMOD_COMMAND=look_for_it
|
||||
|
||||
CFLAGS ?= -O -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
|
||||
|
||||
DBMLIB = -ldb
|
||||
USE_DB = yes
|
||||
|
||||
LIBS = -lnsl -lcrypt -lm
|
||||
LIBRESOLV = -lresolv
|
||||
|
||||
X11=/usr/X11R6
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
EXIWHAT_PS_ARG=ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_MULTIKILL_CMD=killall
|
||||
EXIWHAT_MULTIKILL_ARG=exim4
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# End
|
9
OS/unsupported/Makefile-HI-OSF
Normal file
9
OS/unsupported/Makefile-HI-OSF
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Exim: OS-specific make file for HI-OSF/1-MJ and HI-UX/MPP
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CC=cc
|
||||
CFLAGS=-O
|
||||
RANLIB=@true
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
|
||||
# End
|
13
OS/unsupported/Makefile-HI-UX
Normal file
13
OS/unsupported/Makefile-HI-UX
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Exim: OS-specific make file for HI-UX
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CC=cc -Aa -D_HIUX_SOURCE
|
||||
HAVE_SETRESUID=YES
|
||||
HAVE_SETEUID=NO
|
||||
XINCLUDE=-I/usr/include/X11R5
|
||||
XLFLAGS=-L/usr/lib/X11R5
|
||||
DBMLIB = -lndbm
|
||||
NEED_H_ERRNO=1
|
||||
RANLIB=@true
|
||||
|
||||
# End
|
28
OS/unsupported/Makefile-HP-UX
Normal file
28
OS/unsupported/Makefile-HP-UX
Normal file
|
@ -0,0 +1,28 @@
|
|||
# Exim: OS-specific make file for HP-UX later than 9
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# HP ANSI C compiler
|
||||
#CC=cc
|
||||
#CFLAGS=+O2 +Onolimit -z -D_XOPEN_SOURCE_EXTENDED
|
||||
# Users of the A.06.00 compiler might need to use +O1 rather than +O2 as
|
||||
# there have been some problems reported with this compiler with +O2 set.
|
||||
|
||||
# gcc
|
||||
CFLAGS=-O -D_XOPEN_SOURCE_EXTENDED
|
||||
LDFLAGS=-Wl,-z
|
||||
LIBS=-lm
|
||||
|
||||
BASENAME_COMMAND=/bin/basename
|
||||
HAVE_ICONV=yes
|
||||
HAVE_SETRESUID=YES
|
||||
HAVE_SETEUID=NO
|
||||
XINCLUDE=-I/usr/include/X11R6 -I/usr/contrib/X11R6/include
|
||||
XLFLAGS=-L/usr/lib/X11R6 -L/usr/contrib/X11R6/lib
|
||||
X11_LD_LIB=/usr/contrib/X11R6/lib
|
||||
EXIMON_TEXTPOP=
|
||||
DBMLIB=-lndbm
|
||||
RANLIB=@true
|
||||
|
||||
OS_C_INCLUDES=setenv.c
|
||||
|
||||
# End
|
16
OS/unsupported/Makefile-HP-UX-9
Normal file
16
OS/unsupported/Makefile-HP-UX-9
Normal file
|
@ -0,0 +1,16 @@
|
|||
# Exim: OS-specific make file for HP-UX 9
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CFLAGS=-O
|
||||
BASENAME_COMMAND=/bin/basename
|
||||
HAVE_ICONV=yes
|
||||
HAVE_SETRESUID=YES
|
||||
HAVE_SETEUID=NO
|
||||
XINCLUDE=-I/usr/include/X11R5
|
||||
XLFLAGS=-L/usr/lib/X11R5 -L/usr/contrib/X11R5/lib
|
||||
X11_LD_LIB=/usr/contrib/X11R5/lib
|
||||
EXIMON_TEXTPOP=
|
||||
DBMLIB=-lndbm
|
||||
RANLIB=@true
|
||||
|
||||
# End
|
13
OS/unsupported/Makefile-IRIX
Normal file
13
OS/unsupported/Makefile-IRIX
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Exim: OS-specific make file for IRIX
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
HAVE_ICONV=yes
|
||||
BASENAME_COMMAND=/sbin/basename
|
||||
HOSTNAME_COMMAND=/usr/bsd/hostname
|
||||
CFLAGS=-OPT:Olimit=1500
|
||||
LIBS=-lmld -lm
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
vfork=fork
|
||||
RANLIB=@true
|
||||
|
||||
# End
|
14
OS/unsupported/Makefile-IRIX6
Normal file
14
OS/unsupported/Makefile-IRIX6
Normal file
|
@ -0,0 +1,14 @@
|
|||
# Exim: OS-specific make file for IRIX6 on 64-bit systems
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
HAVE_ICONV=yes
|
||||
HOSTNAME_COMMAND=/usr/bsd/hostname
|
||||
CFLAGS=-O2 -n32 -OPT:Olimit=4000
|
||||
LFLAGS=-n32
|
||||
LIBS=-lelf -lm
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
XLFLAGS=
|
||||
vfork=fork
|
||||
RANLIB=@true
|
||||
|
||||
# End
|
18
OS/unsupported/Makefile-IRIX632
Normal file
18
OS/unsupported/Makefile-IRIX632
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Exim: OS-specific make file for IRIX 6 on 32-bit systems.
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# There seems to be some variation. The commented settings show
|
||||
# some alternatives.
|
||||
|
||||
HAVE_ICONV=yes
|
||||
HOSTNAME_COMMAND=/usr/bsd/hostname
|
||||
#CFLAGS=-OPT:Olimit=1500 -32 -mips2
|
||||
CFLAGS=-32
|
||||
LFLAGS=-32
|
||||
#LIBS=-lmld
|
||||
LIBS=-lelf -lm
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
vfork=fork
|
||||
RANLIB=@true
|
||||
|
||||
# End
|
17
OS/unsupported/Makefile-IRIX65
Normal file
17
OS/unsupported/Makefile-IRIX65
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Exim: OS-specific make file for IRIX 6.5
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
HAVE_ICONV=yes
|
||||
HOSTNAME_COMMAND=/usr/bsd/hostname
|
||||
CC=cc
|
||||
CFLAGS=-O2 -OPT:Olimit=0
|
||||
# CFLAGS=-O2 # override with this (in your Local/Makefile) if using gcc
|
||||
LFLAGS=-Wl,-LD_MSG:off=85
|
||||
LFLAGS=
|
||||
# nlist has moved from libmld to libelf
|
||||
LIBS=-lelf -lm
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
vfork=fork
|
||||
RANLIB=@true
|
||||
|
||||
# End
|
28
OS/unsupported/Makefile-NetBSD
Normal file
28
OS/unsupported/Makefile-NetBSD
Normal file
|
@ -0,0 +1,28 @@
|
|||
# Exim: OS-specific make file for NetBSD (ELF object format)
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CHOWN_COMMAND=/usr/sbin/chown
|
||||
CHMOD_COMMAND=/bin/chmod
|
||||
|
||||
CFLAGS ?= -O2
|
||||
|
||||
HAVE_SA_LEN=YES
|
||||
HAVE_IPV6=YES
|
||||
LIBS=-lcrypt -lm
|
||||
|
||||
X11=/usr/X11R6
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
EXIWHAT_PS_ARG=-ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# NetBSD always ships with Berkeley DB
|
||||
USE_DB=yes
|
||||
|
||||
# NetBSD ELF linker needs a -R flag.
|
||||
XLFLAGS+=-Wl,-R$(X11)/lib/
|
||||
|
||||
# End
|
25
OS/unsupported/Makefile-NetBSD-a.out
Normal file
25
OS/unsupported/Makefile-NetBSD-a.out
Normal file
|
@ -0,0 +1,25 @@
|
|||
# Exim: OS-specific make file for NetBSD (a.out/COFF object format)
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CHOWN_COMMAND=/usr/sbin/chown
|
||||
CHMOD_COMMAND=/bin/chmod
|
||||
|
||||
CFLAGS ?= -O2
|
||||
|
||||
HAVE_SA_LEN=YES
|
||||
HAVE_IPV6=YES
|
||||
LIBS=-lcrypt -lm
|
||||
|
||||
X11=/usr/X11R6
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
EXIWHAT_PS_ARG=-ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# NetBSD always ships with Berkeley DB
|
||||
USE_DB=yes
|
||||
|
||||
# End
|
11
OS/unsupported/Makefile-OSF1
Normal file
11
OS/unsupported/Makefile-OSF1
Normal file
|
@ -0,0 +1,11 @@
|
|||
# Exim: OS-specific make file for OSF1
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CFLAGS=-O
|
||||
LIBS=-liconv -lm
|
||||
HAVE_CRYPT16=yes
|
||||
HAVE_ICONV=yes
|
||||
HOSTNAME_COMMAND=/usr/bin/hostname
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
|
||||
# End
|
18
OS/unsupported/Makefile-OpenUNIX
Normal file
18
OS/unsupported/Makefile-OpenUNIX
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Exim: OS-specific make file for OpenUNIX
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CC=/usr/bin/cc
|
||||
CFLAGS=-O -I/usr/local/include
|
||||
LFLAGS=-L/usr/local/lib
|
||||
|
||||
LIBS=-lsocket -lnsl -lelf -lgen -lresolv -lm
|
||||
EXTRALIBS_EXIMON=-lICE -lSM
|
||||
|
||||
RANLIB=@true
|
||||
ERRNO_QUOTA=0
|
||||
|
||||
X11=/usr/lib/X11
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
XLFLAGS=-L/usr/lib -L$(X11)/lib
|
||||
|
||||
# End
|
31
OS/unsupported/Makefile-QNX
Normal file
31
OS/unsupported/Makefile-QNX
Normal file
|
@ -0,0 +1,31 @@
|
|||
# Exim: OS-specific makefile for QNX
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
BASENAME_COMMAND=/bin/basename
|
||||
MAKE_SHELL=/usr/bin/bash
|
||||
|
||||
CHOWN_COMMAND=/bin/chown
|
||||
CHGRP_COMMAND=/bin/chgrp
|
||||
CHMOD_COMMAND=/bin/chmod
|
||||
HOSTNAME_COMMAND=/bin/hostname
|
||||
MV_COMMAND=/bin/mv
|
||||
PERL_COMMAND=/usr/bin/perl
|
||||
RM_COMMAND=/bin/rm
|
||||
|
||||
AR=ar -rc
|
||||
|
||||
CC=cc
|
||||
CFLAGS=-Otax
|
||||
LIBIDENTCFLAGS=
|
||||
|
||||
RANLIB=@true
|
||||
DBMLIB=-ldb
|
||||
USE_DB=yes
|
||||
LIBS=-lsocket -lm
|
||||
|
||||
X11=/usr/X11R6
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
# End
|
29
OS/unsupported/Makefile-SCO
Normal file
29
OS/unsupported/Makefile-SCO
Normal file
|
@ -0,0 +1,29 @@
|
|||
# Exim: OS-specific make file for SCO
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# It was reported that some versions of gcc (e.g. 2.8.1) require this to be
|
||||
# CFLAGS=-melf
|
||||
|
||||
CFLAGS=-b elf
|
||||
|
||||
RANLIB=@true
|
||||
DBMLIB=-lndbm
|
||||
ERRNO_QUOTA=0
|
||||
LIBS=-lsocket -lm
|
||||
HAVE_ICONV=yes
|
||||
|
||||
X11=/usr/lib/X11
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
XLFLAGS=-L/usr/lib -L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
# Changes from Frank Bernhardt (30/09/04)
|
||||
|
||||
BASENAME_COMMAND=/bin/basename
|
||||
CHOWN_COMMAND=/bin/chown
|
||||
CHGRP_COMMAND=/bin/chgrp
|
||||
CHMOD_COMMAND=/bin/chmod
|
||||
HOSTNAME_COMMAND=/usr/bin/hostname
|
||||
TOUCH_COMMAND=/bin/touch
|
||||
|
||||
# End
|
35
OS/unsupported/Makefile-SCO_SV
Normal file
35
OS/unsupported/Makefile-SCO_SV
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Exim: OS-specific make file for SCO_SV release 5 (tested on 5.0.5 & 5.0.5)
|
||||
# (see the UNIX_SV files for SCO 4.2)
|
||||
# Supplied by: Tony Earnshaw <tonye@ilion.nl>
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# Note that 'gcc -melf -m486' applies to gcc 2.7.2 and higher;
|
||||
# 2.7.1 and SCO's SDK need '-belf'.
|
||||
|
||||
# Removed -lwrap (PH 27/7/00) because not all systems have it
|
||||
|
||||
CFLAGS=-melf -O3 -m486
|
||||
LFLAGS=-L/lib -L/usr/lib -L/usr/local/lib
|
||||
LIBS=-ltinfo -lsocket -lm
|
||||
|
||||
HAVE_ICONV=yes
|
||||
|
||||
RANLIB=@true
|
||||
DBMLIB=-lndbm
|
||||
ERRNO_QUOTA=0
|
||||
|
||||
X11=/usr/lib/X11
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
XLFLAGS=-L/usr/lib -L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
# Changes from Frank Bernhardt (30/9/04)
|
||||
|
||||
BASENAME_COMMAND=/bin/basename
|
||||
CHOWN_COMMAND=/bin/chown
|
||||
CHGRP_COMMAND=/bin/chgrp
|
||||
CHMOD_COMMAND=/bin/chmod
|
||||
HOSTNAME_COMMAND=/usr/bin/hostname
|
||||
TOUCH_COMMAND=/bin/touch
|
||||
|
||||
# End
|
17
OS/unsupported/Makefile-SunOS4
Normal file
17
OS/unsupported/Makefile-SunOS4
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Exim: OS-specific make file for SunOS4
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
CFLAGS=-O
|
||||
|
||||
CHOWN_COMMAND=/usr/etc/chown
|
||||
HOSTNAME_COMMAND=/usr/bin/hostname
|
||||
EXIT_FAILURE=1
|
||||
EXIT_SUCCESS=0
|
||||
LIBRESOLV=-lresolv
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
|
||||
EXIWHAT_PS_ARG=-ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_KILL_SIGNAL=-30
|
||||
|
||||
# End
|
19
OS/unsupported/Makefile-SunOS5-hal
Normal file
19
OS/unsupported/Makefile-SunOS5-hal
Normal file
|
@ -0,0 +1,19 @@
|
|||
# Exim: OS-specific make file for SunOS5 on a HAL
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# Note: The HAL runs a standard SunOS5 except that it has a 64 bit C
|
||||
# compiler called hcc. To make things work pass the -KV7 flag to force
|
||||
# 32bit compilation - this is necessary to interwork with some libraries.
|
||||
|
||||
CC=hcc
|
||||
CFLAGS=-O -KV7
|
||||
LIBIDENTCFLAGS="-KV7 -O -DHAVE_ANSIHEADERS"
|
||||
LIBIDENTNAME=sunos5
|
||||
RANLIB=@true
|
||||
LIBS=-lsocket -lnsl -lkstat -lm
|
||||
LIBRESOLV=-lresolv
|
||||
X11=/usr/X11R6
|
||||
XINCLUDE=-I$(X11)/include
|
||||
XLFLAGS=-L$(X11)/lib -R$(X11)/lib
|
||||
|
||||
# End
|
19
OS/unsupported/Makefile-ULTRIX
Normal file
19
OS/unsupported/Makefile-ULTRIX
Normal file
|
@ -0,0 +1,19 @@
|
|||
# Exim: OS-specific make file for Ultrix
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
MAKE_SHELL=/usr/bin/sh5
|
||||
|
||||
CFLAGS=-O
|
||||
|
||||
# This can either be /usr/include/X11 or /usr/include/mit depending on
|
||||
# the particular version of ULTRIX.
|
||||
|
||||
XINCLUDE=-I/usr/include/X11 -I/usr/include/mit
|
||||
|
||||
DBMLIB=-lgdbm
|
||||
|
||||
EXIWHAT_PS_ARG=-ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_KILL_SIGNAL=-USR1
|
||||
|
||||
# End
|
25
OS/unsupported/Makefile-UNIX_SV
Normal file
25
OS/unsupported/Makefile-UNIX_SV
Normal file
|
@ -0,0 +1,25 @@
|
|||
# Exim: OS-specific make file for SCO SVR4.2MP (and maybe Unixware)
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#
|
||||
# *** Note that for SCO 5 the configuration file is called SCO_SV,
|
||||
# *** and that Unixware7 has its own configuration. This is an old
|
||||
# *** file that is retained for compatibility.
|
||||
#
|
||||
# Note that SCO does not include dbm/ndbm with their standard compiler
|
||||
# (it is available with /usr/ucb/cc, but that has bugs of its own). You
|
||||
# should install gcc and gdbm, then execute 'make install-compat' in the
|
||||
# gdbm source directory.
|
||||
|
||||
CC=gcc -I/usr/local/include
|
||||
CFLAGS=-O
|
||||
|
||||
RANLIB=@true
|
||||
DBMLIB=-lgdbm -L/usr/local/lib
|
||||
ERRNO_QUOTA=0
|
||||
LIBS=-lsocket -lelf -lgen -lnsl -lresolv -lm
|
||||
|
||||
X11=/usr/lib/X11
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
XLFLAGS=-L/usr/lib -L$(X11)/lib
|
||||
|
||||
# End
|
34
OS/unsupported/Makefile-USG
Normal file
34
OS/unsupported/Makefile-USG
Normal file
|
@ -0,0 +1,34 @@
|
|||
# Exim: OS-specific make file for Unixware 2.x
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#
|
||||
# Note that Unixware does not include db/dbm/ndbm with their standard compiler
|
||||
# (it is available with /usr/ucb/cc, but that has bugs of its own). You
|
||||
# should install gcc and Berkeley DB (or another dbm library if you really
|
||||
# insist). If you use a different dbm library you will need to override
|
||||
# DBMLIB below.
|
||||
#
|
||||
# DB 1.85 and 2.x can be found at http://www.sleepycat.com/.
|
||||
# They have different characteristics. See the discussion of dbm libraries
|
||||
# in doc/dbm.discuss.txt in the Exim distribution.
|
||||
#
|
||||
# DB needs to be compiled with gcc and you need a 'cc' in your path
|
||||
# before the Unixware CC to compile it.
|
||||
#
|
||||
# Don't bother even starting to install exim on Unixware unless
|
||||
# you have installed gcc and use it for everything.
|
||||
|
||||
CC=gcc -I/usr/local/include
|
||||
CFLAGS=-O
|
||||
|
||||
RANLIB=@true
|
||||
DBMLIB=-ldb -L/usr/local/lib
|
||||
USE_DB=YES
|
||||
ERRNO_QUOTA=0
|
||||
LIBS=-lsocket -lelf -lgen -lnsl -lresolv -lm
|
||||
|
||||
X11=/usr/lib/X11
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
XLFLAGS=-L/usr/lib -L$(X11)/lib
|
||||
X11_LD_LIB=$(X11)/lib
|
||||
|
||||
# End
|
33
OS/unsupported/Makefile-Unixware7
Normal file
33
OS/unsupported/Makefile-Unixware7
Normal file
|
@ -0,0 +1,33 @@
|
|||
# Exim: OS-specific make file for Unixware7
|
||||
# Based on information from James FitzGibbon <james@ehlo.com>
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# If you want to use libbind, you need to
|
||||
# add -I/usr/local/bind/include to CFLAGS
|
||||
# add -L/usr/local/bind/lib to LFLAGS
|
||||
# remove -lresolv from LIBS
|
||||
# add LOOKUP_LIBS=-lbind
|
||||
# The new settings should go in your Local/Makefile rather than here; then
|
||||
# they will be usable for subsequent Exim releases.
|
||||
|
||||
CC=/usr/bin/cc
|
||||
CFLAGS=-O -I/usr/local/include
|
||||
LFLAGS=-L/usr/local/lib
|
||||
|
||||
HAVE_ICONV=yes
|
||||
|
||||
LIBS=-lsocket -lnsl -lelf -lgen -lresolv -lm
|
||||
|
||||
# Removed on the advice of Larry Rosenman
|
||||
# EXTRALIBS=-lwrap
|
||||
|
||||
EXTRALIBS_EXIMON=-lICE -lSM
|
||||
|
||||
RANLIB=@true
|
||||
ERRNO_QUOTA=0
|
||||
|
||||
X11=/usr/lib/X11
|
||||
XINCLUDE=-I/usr/include/X11
|
||||
XLFLAGS=-L/usr/lib -L$(X11)/lib
|
||||
|
||||
# End
|
17
OS/unsupported/Makefile-mips
Normal file
17
OS/unsupported/Makefile-mips
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Exim: OS-specific make file for RiscOS4bsd
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
HOSTNAME_COMMAND=/usr/ucb/hostname
|
||||
EXIT_FAILURE=1
|
||||
EXIT_SUCCESS=0
|
||||
LIBRESOLV=-lresolv
|
||||
LIBS=-liberty -lm
|
||||
XINCLUDE=-I/usr/X11R6/include
|
||||
|
||||
CFLAGS=-O
|
||||
|
||||
EXIWHAT_PS_ARG=-ax
|
||||
EXIWHAT_EGREP_ARG='/exim( |$$)'
|
||||
EXIWHAT_KILL_SIGNAL=-30
|
||||
|
||||
# End
|
14
OS/unsupported/README
Normal file
14
OS/unsupported/README
Normal file
|
@ -0,0 +1,14 @@
|
|||
Files in this directory are historical. They may have worked once but the
|
||||
project has no assurance that they still do.
|
||||
|
||||
If you need to use one for a build for your platform, copy it up one directory
|
||||
level first. We'll reinstate it given a current version and evidence of testing.
|
||||
For the latter please look into the project regression testsuite, and please
|
||||
consider operating a buildfarm animal in the long term (it runs the testsuite).
|
||||
|
||||
The buildfarm status page is:
|
||||
https://buildfarm.exim.org/cgi-bin/show_status.pl
|
||||
There's a "register" link there with a link to how-to instructions. Please do
|
||||
monitor the status of your animal on an ongoing basis. The exim-users or
|
||||
exim-dev mailinglist are good places to ask for help and to discuss any regressions
|
||||
seen in test runs. There is also the #exim IRC channel on Freenode.
|
20
OS/unsupported/os.c-BSDI
Normal file
20
OS/unsupported/os.c-BSDI
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) 2016 Heiko Schlittermann <hs@schlittermann.de> */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* BSDI-specific code. This is concatenated onto the generic
|
||||
src/os.c file. */
|
||||
|
||||
#ifndef OS_UNSETENV
|
||||
#define OS_UNSETENV
|
||||
|
||||
int
|
||||
os_unsetenv(const uschar * name)
|
||||
{
|
||||
unsetenv(CS name);
|
||||
return 0;
|
||||
}
|
36
OS/unsupported/os.c-HI-OSF
Normal file
36
OS/unsupported/os.c-HI-OSF
Normal file
|
@ -0,0 +1,36 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) University of Cambridge 2001 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* HI-OSF-specific code. This is concatenated onto the generic
|
||||
src/os.c file. OSF has an apparently unique way of getting the
|
||||
load average, so we provide a unique function here, and define
|
||||
OS_LOAD_AVERAGE to stop src/os.c trying to provide the function. */
|
||||
|
||||
#ifndef OS_LOAD_AVERAGE
|
||||
#define OS_LOAD_AVERAGE
|
||||
|
||||
#include <sys/table.h>
|
||||
|
||||
int
|
||||
os_getloadavg(void)
|
||||
{
|
||||
double avg;
|
||||
struct tbl_loadavg load_avg;
|
||||
|
||||
table (TBL_LOADAVG, 0, &load_avg, 1, sizeof (load_avg));
|
||||
|
||||
avg = (load_avg.tl_lscale == 0)?
|
||||
load_avg.tl_avenrun.d[0] :
|
||||
(load_avg.tl_avenrun.l[0] / (double)load_avg.tl_lscale);
|
||||
|
||||
return (int)(avg * 1000.0);
|
||||
}
|
||||
|
||||
#endif /* OS_LOAD_AVERAGE */
|
||||
|
||||
/* End of os.c-HI-OSF */
|
17
OS/unsupported/os.c-HP-UX
Normal file
17
OS/unsupported/os.c-HP-UX
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) University of Cambridge 2016 */
|
||||
/* Copyright (c) Jeremy Harris 2016 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* HP-UX-specific code. This is concatenated onto the generic
|
||||
src/os.c file. */
|
||||
|
||||
#ifndef COMPILE_UTILITY
|
||||
# include "setenv.c"
|
||||
#endif
|
||||
|
||||
/* End of os.c-SunHP-UX */
|
120
OS/unsupported/os.c-IRIX
Normal file
120
OS/unsupported/os.c-IRIX
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) The Exim Maintainers 2022 */
|
||||
/* Copyright (c) University of Cambridge 2001 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* Irix-specific code. This is concatenated onto the generic src/os.c file.
|
||||
Irix has a unique way of finding all the network interfaces, so we provide a
|
||||
unique function here, and define FIND_RUNNING_INTERFACES to stop src/os.c
|
||||
trying to provide the function. The macro may be set initially anyway, when
|
||||
compiling os. for utilities that don't want this function. */
|
||||
|
||||
#ifndef FIND_RUNNING_INTERFACES
|
||||
#define FIND_RUNNING_INTERFACES
|
||||
|
||||
/* This is the special form of the function using sysctl() which is the only
|
||||
form that returns all the aliases on IRIX systems. This code has its origins
|
||||
in a sample program that came from within SGI. */
|
||||
|
||||
#include <sys/sysctl.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <net/if_types.h>
|
||||
#include <net/soioctl.h>
|
||||
#include <net/route.h>
|
||||
|
||||
#define ROUNDUP(a) ((a) > 0 ? (1 + (((a) - 1) | (sizeof(__uint64_t) -1))) \
|
||||
: sizeof(__uint64_t))
|
||||
#ifdef _HAVE_SA_LEN
|
||||
#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
|
||||
#else
|
||||
#define ADVANCE(x, n) (x += ROUNDUP(_FAKE_SA_LEN_DST(n)))
|
||||
#endif
|
||||
|
||||
|
||||
ip_address_item *
|
||||
os_find_running_interfaces(void)
|
||||
{
|
||||
ip_address_item *yield = NULL;
|
||||
ip_address_item *last = NULL;
|
||||
ip_address_item *next;
|
||||
|
||||
size_t needed;
|
||||
int mib[6];
|
||||
char *buf, *nextaddr, *lim;
|
||||
register struct if_msghdr *ifm;
|
||||
|
||||
mib[0] = CTL_NET;
|
||||
mib[1] = PF_ROUTE;
|
||||
mib[2] = 0;
|
||||
mib[3] = 0;
|
||||
mib[4] = NET_RT_IFLIST;
|
||||
mib[5] = 0;
|
||||
|
||||
/* Get an estimate of the amount of store needed, then get the store and
|
||||
get the data into it. Any error causes a panic death. */
|
||||
|
||||
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
|
||||
log_write(0, LOG_PANIC_DIE, "iflist-sysctl-estimate failed: %s",
|
||||
strerror(errno));
|
||||
|
||||
buf = store_get(needed, GET_UNTAINTED);
|
||||
|
||||
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
|
||||
log_write(0, LOG_PANIC_DIE, "sysctl of ifnet list failed: %s",
|
||||
strerror(errno));
|
||||
|
||||
/* Now fish out the data for each interface */
|
||||
|
||||
lim = buf + needed;
|
||||
for (nextaddr = buf; nextaddr < lim; nextaddr += ifm->ifm_msglen)
|
||||
{
|
||||
ifm = (struct if_msghdr *)nextaddr;
|
||||
|
||||
if (ifm->ifm_type != RTM_IFINFO)
|
||||
{
|
||||
struct ifa_msghdr *ifam = (struct ifa_msghdr *)ifm;
|
||||
struct sockaddr_in *mask = NULL, *addr = NULL;
|
||||
|
||||
if ((ifam->ifam_addrs & RTA_NETMASK) != 0)
|
||||
mask = (struct sockaddr_in *)(ifam + 1);
|
||||
|
||||
if ((ifam->ifam_addrs & RTA_IFA) != 0)
|
||||
{
|
||||
char *cp = CS mask;
|
||||
struct sockaddr *sa = (struct sockaddr *)mask;
|
||||
ADVANCE(cp, sa);
|
||||
addr = (struct sockaddr_in *)cp;
|
||||
}
|
||||
|
||||
/* Create a data block for the address, fill in the data, and put it on
|
||||
the chain. This data has to survive for ever, so use malloc. */
|
||||
|
||||
if (addr != NULL)
|
||||
{
|
||||
next = store_malloc(sizeof(ip_address_item));
|
||||
next->next = NULL;
|
||||
next->port = 0;
|
||||
(void)host_ntoa(-1, addr, next->address, NULL);
|
||||
|
||||
if (yield == NULL) yield = last = next; else
|
||||
{
|
||||
last->next = next;
|
||||
last = next;
|
||||
}
|
||||
|
||||
DEBUG(D_interface) debug_printf("Actual local interface address is %s\n",
|
||||
last->address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return yield;
|
||||
}
|
||||
|
||||
#endif /* FIND_RUNNING_INTERFACES */
|
||||
|
||||
/* End of os.c-IRIX */
|
120
OS/unsupported/os.c-IRIX6
Normal file
120
OS/unsupported/os.c-IRIX6
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) The Exim Maintainers 2022 */
|
||||
/* Copyright (c) University of Cambridge 2001 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* Irix-specific code. This is concatenated onto the generic src/os.c file.
|
||||
Irix has a unique way of finding all the network interfaces, so we provide a
|
||||
unique function here, and define FIND_RUNNING_INTERFACES to stop src/os.c
|
||||
trying to provide the function. The macro may be set initially anyway, when
|
||||
compiling os. for utilities that don't want this function. */
|
||||
|
||||
#ifndef FIND_RUNNING_INTERFACES
|
||||
#define FIND_RUNNING_INTERFACES
|
||||
|
||||
/* This is the special form of the function using sysctl() which is the only
|
||||
form that returns all the aliases on IRIX systems. This code has its origins
|
||||
in a sample program that came from within SGI. */
|
||||
|
||||
#include <sys/sysctl.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <net/if_types.h>
|
||||
#include <net/soioctl.h>
|
||||
#include <net/route.h>
|
||||
|
||||
#define ROUNDUP(a) ((a) > 0 ? (1 + (((a) - 1) | (sizeof(__uint64_t) -1))) \
|
||||
: sizeof(__uint64_t))
|
||||
#ifdef _HAVE_SA_LEN
|
||||
#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
|
||||
#else
|
||||
#define ADVANCE(x, n) (x += ROUNDUP(_FAKE_SA_LEN_DST(n)))
|
||||
#endif
|
||||
|
||||
|
||||
ip_address_item *
|
||||
os_find_running_interfaces(void)
|
||||
{
|
||||
ip_address_item *yield = NULL;
|
||||
ip_address_item *last = NULL;
|
||||
ip_address_item *next;
|
||||
|
||||
size_t needed;
|
||||
int mib[6];
|
||||
char *buf, *nextaddr, *lim;
|
||||
register struct if_msghdr *ifm;
|
||||
|
||||
mib[0] = CTL_NET;
|
||||
mib[1] = PF_ROUTE;
|
||||
mib[2] = 0;
|
||||
mib[3] = 0;
|
||||
mib[4] = NET_RT_IFLIST;
|
||||
mib[5] = 0;
|
||||
|
||||
/* Get an estimate of the amount of store needed, then get the store and
|
||||
get the data into it. Any error causes a panic death. */
|
||||
|
||||
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
|
||||
log_write(0, LOG_PANIC_DIE, "iflist-sysctl-estimate failed: %s",
|
||||
strerror(errno));
|
||||
|
||||
buf = store_get(needed, GET_UNTAINTED);
|
||||
|
||||
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
|
||||
log_write(0, LOG_PANIC_DIE, "sysctl of ifnet list failed: %s",
|
||||
strerror(errno));
|
||||
|
||||
/* Now fish out the data for each interface */
|
||||
|
||||
lim = buf + needed;
|
||||
for (nextaddr = buf; nextaddr < lim; nextaddr += ifm->ifm_msglen)
|
||||
{
|
||||
ifm = (struct if_msghdr *)nextaddr;
|
||||
|
||||
if (ifm->ifm_type != RTM_IFINFO)
|
||||
{
|
||||
struct ifa_msghdr *ifam = (struct ifa_msghdr *)ifm;
|
||||
struct sockaddr_in *mask = NULL, *addr = NULL;
|
||||
|
||||
if ((ifam->ifam_addrs & RTA_NETMASK) != 0)
|
||||
mask = (struct sockaddr_in *)(ifam + 1);
|
||||
|
||||
if ((ifam->ifam_addrs & RTA_IFA) != 0)
|
||||
{
|
||||
char *cp = CS mask;
|
||||
struct sockaddr *sa = (struct sockaddr *)mask;
|
||||
ADVANCE(cp, sa);
|
||||
addr = (struct sockaddr_in *)cp;
|
||||
}
|
||||
|
||||
/* Create a data block for the address, fill in the data, and put it on
|
||||
the chain. This data has to survive for ever, so use malloc. */
|
||||
|
||||
if (addr != NULL)
|
||||
{
|
||||
next = store_malloc(sizeof(ip_address_item));
|
||||
next->next = NULL;
|
||||
next->port = 0;
|
||||
(void)host_ntoa(-1, addr, next->address, NULL);
|
||||
|
||||
if (yield == NULL) yield = last = next; else
|
||||
{
|
||||
last->next = next;
|
||||
last = next;
|
||||
}
|
||||
|
||||
DEBUG(D_interface) debug_printf("Actual local interface address is %s\n",
|
||||
last->address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return yield;
|
||||
}
|
||||
|
||||
#endif /* FIND_RUNNING_INTERFACES */
|
||||
|
||||
/* End of os.c-IRIX */
|
120
OS/unsupported/os.c-IRIX632
Normal file
120
OS/unsupported/os.c-IRIX632
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) The Exim Maintainers 2022 */
|
||||
/* Copyright (c) University of Cambridge 2001 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* Irix-specific code. This is concatenated onto the generic src/os.c file.
|
||||
Irix has a unique way of finding all the network interfaces, so we provide a
|
||||
unique function here, and define FIND_RUNNING_INTERFACES to stop src/os.c
|
||||
trying to provide the function. The macro may be set initially anyway, when
|
||||
compiling os. for utilities that don't want this function. */
|
||||
|
||||
#ifndef FIND_RUNNING_INTERFACES
|
||||
#define FIND_RUNNING_INTERFACES
|
||||
|
||||
/* This is the special form of the function using sysctl() which is the only
|
||||
form that returns all the aliases on IRIX systems. This code has its origins
|
||||
in a sample program that came from within SGI. */
|
||||
|
||||
#include <sys/sysctl.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <net/if_types.h>
|
||||
#include <net/soioctl.h>
|
||||
#include <net/route.h>
|
||||
|
||||
#define ROUNDUP(a) ((a) > 0 ? (1 + (((a) - 1) | (sizeof(__uint64_t) -1))) \
|
||||
: sizeof(__uint64_t))
|
||||
#ifdef _HAVE_SA_LEN
|
||||
#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
|
||||
#else
|
||||
#define ADVANCE(x, n) (x += ROUNDUP(_FAKE_SA_LEN_DST(n)))
|
||||
#endif
|
||||
|
||||
|
||||
ip_address_item *
|
||||
os_find_running_interfaces(void)
|
||||
{
|
||||
ip_address_item *yield = NULL;
|
||||
ip_address_item *last = NULL;
|
||||
ip_address_item *next;
|
||||
|
||||
size_t needed;
|
||||
int mib[6];
|
||||
char *buf, *nextaddr, *lim;
|
||||
register struct if_msghdr *ifm;
|
||||
|
||||
mib[0] = CTL_NET;
|
||||
mib[1] = PF_ROUTE;
|
||||
mib[2] = 0;
|
||||
mib[3] = 0;
|
||||
mib[4] = NET_RT_IFLIST;
|
||||
mib[5] = 0;
|
||||
|
||||
/* Get an estimate of the amount of store needed, then get the store and
|
||||
get the data into it. Any error causes a panic death. */
|
||||
|
||||
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
|
||||
log_write(0, LOG_PANIC_DIE, "iflist-sysctl-estimate failed: %s",
|
||||
strerror(errno));
|
||||
|
||||
buf = store_get(needed, GET_UNTAINTED);
|
||||
|
||||
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
|
||||
log_write(0, LOG_PANIC_DIE, "sysctl of ifnet list failed: %s",
|
||||
strerror(errno));
|
||||
|
||||
/* Now fish out the data for each interface */
|
||||
|
||||
lim = buf + needed;
|
||||
for (nextaddr = buf; nextaddr < lim; nextaddr += ifm->ifm_msglen)
|
||||
{
|
||||
ifm = (struct if_msghdr *)nextaddr;
|
||||
|
||||
if (ifm->ifm_type != RTM_IFINFO)
|
||||
{
|
||||
struct ifa_msghdr *ifam = (struct ifa_msghdr *)ifm;
|
||||
struct sockaddr_in *mask = NULL, *addr = NULL;
|
||||
|
||||
if ((ifam->ifam_addrs & RTA_NETMASK) != 0)
|
||||
mask = (struct sockaddr_in *)(ifam + 1);
|
||||
|
||||
if ((ifam->ifam_addrs & RTA_IFA) != 0)
|
||||
{
|
||||
char *cp = CS mask;
|
||||
struct sockaddr *sa = (struct sockaddr *)mask;
|
||||
ADVANCE(cp, sa);
|
||||
addr = (struct sockaddr_in *)cp;
|
||||
}
|
||||
|
||||
/* Create a data block for the address, fill in the data, and put it on
|
||||
the chain. This data has to survive for ever, so use malloc. */
|
||||
|
||||
if (addr != NULL)
|
||||
{
|
||||
next = store_malloc(sizeof(ip_address_item));
|
||||
next->next = NULL;
|
||||
next->port = 0;
|
||||
(void)host_ntoa(-1, addr, next->address, NULL);
|
||||
|
||||
if (yield == NULL) yield = last = next; else
|
||||
{
|
||||
last->next = next;
|
||||
last = next;
|
||||
}
|
||||
|
||||
DEBUG(D_interface) debug_printf("Actual local interface address is %s\n",
|
||||
last->address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return yield;
|
||||
}
|
||||
|
||||
#endif /* FIND_RUNNING_INTERFACES */
|
||||
|
||||
/* End of os.c-IRIX */
|
120
OS/unsupported/os.c-IRIX65
Normal file
120
OS/unsupported/os.c-IRIX65
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) The Exim Maintainers 2022 */
|
||||
/* Copyright (c) University of Cambridge 2001 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* Irix-specific code. This is concatenated onto the generic src/os.c file.
|
||||
Irix has a unique way of finding all the network interfaces, so we provide a
|
||||
unique function here, and define FIND_RUNNING_INTERFACES to stop src/os.c
|
||||
trying to provide the function. The macro may be set initially anyway, when
|
||||
compiling os. for utilities that don't want this function. */
|
||||
|
||||
#ifndef FIND_RUNNING_INTERFACES
|
||||
#define FIND_RUNNING_INTERFACES
|
||||
|
||||
/* This is the special form of the function using sysctl() which is the only
|
||||
form that returns all the aliases on IRIX systems. This code has its origins
|
||||
in a sample program that came from within SGI. */
|
||||
|
||||
#include <sys/sysctl.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <net/if_types.h>
|
||||
#include <net/soioctl.h>
|
||||
#include <net/route.h>
|
||||
|
||||
#define ROUNDUP(a) ((a) > 0 ? (1 + (((a) - 1) | (sizeof(__uint64_t) -1))) \
|
||||
: sizeof(__uint64_t))
|
||||
#ifdef _HAVE_SA_LEN
|
||||
#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
|
||||
#else
|
||||
#define ADVANCE(x, n) (x += ROUNDUP(_FAKE_SA_LEN_DST(n)))
|
||||
#endif
|
||||
|
||||
|
||||
ip_address_item *
|
||||
os_find_running_interfaces(void)
|
||||
{
|
||||
ip_address_item *yield = NULL;
|
||||
ip_address_item *last = NULL;
|
||||
ip_address_item *next;
|
||||
|
||||
size_t needed;
|
||||
int mib[6];
|
||||
char *buf, *nextaddr, *lim;
|
||||
register struct if_msghdr *ifm;
|
||||
|
||||
mib[0] = CTL_NET;
|
||||
mib[1] = PF_ROUTE;
|
||||
mib[2] = 0;
|
||||
mib[3] = 0;
|
||||
mib[4] = NET_RT_IFLIST;
|
||||
mib[5] = 0;
|
||||
|
||||
/* Get an estimate of the amount of store needed, then get the store and
|
||||
get the data into it. Any error causes a panic death. */
|
||||
|
||||
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
|
||||
log_write(0, LOG_PANIC_DIE, "iflist-sysctl-estimate failed: %s",
|
||||
strerror(errno));
|
||||
|
||||
buf = store_get(needed, GET_UNTAINTED);
|
||||
|
||||
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
|
||||
log_write(0, LOG_PANIC_DIE, "sysctl of ifnet list failed: %s",
|
||||
strerror(errno));
|
||||
|
||||
/* Now fish out the data for each interface */
|
||||
|
||||
lim = buf + needed;
|
||||
for (nextaddr = buf; nextaddr < lim; nextaddr += ifm->ifm_msglen)
|
||||
{
|
||||
ifm = (struct if_msghdr *)nextaddr;
|
||||
|
||||
if (ifm->ifm_type != RTM_IFINFO)
|
||||
{
|
||||
struct ifa_msghdr *ifam = (struct ifa_msghdr *)ifm;
|
||||
struct sockaddr_in *mask = NULL, *addr = NULL;
|
||||
|
||||
if ((ifam->ifam_addrs & RTA_NETMASK) != 0)
|
||||
mask = (struct sockaddr_in *)(ifam + 1);
|
||||
|
||||
if ((ifam->ifam_addrs & RTA_IFA) != 0)
|
||||
{
|
||||
char *cp = CS mask;
|
||||
struct sockaddr *sa = (struct sockaddr *)mask;
|
||||
ADVANCE(cp, sa);
|
||||
addr = (struct sockaddr_in *)cp;
|
||||
}
|
||||
|
||||
/* Create a data block for the address, fill in the data, and put it on
|
||||
the chain. This data has to survive for ever, so use malloc. */
|
||||
|
||||
if (addr != NULL)
|
||||
{
|
||||
next = store_malloc(sizeof(ip_address_item));
|
||||
next->next = NULL;
|
||||
next->port = 0;
|
||||
(void)host_ntoa(-1, addr, next->address, NULL);
|
||||
|
||||
if (yield == NULL) yield = last = next; else
|
||||
{
|
||||
last->next = next;
|
||||
last = next;
|
||||
}
|
||||
|
||||
DEBUG(D_interface) debug_printf("Actual local interface address is %s\n",
|
||||
last->address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return yield;
|
||||
}
|
||||
|
||||
#endif /* FIND_RUNNING_INTERFACES */
|
||||
|
||||
/* End of os.c-IRIX */
|
37
OS/unsupported/os.c-OSF1
Normal file
37
OS/unsupported/os.c-OSF1
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
|
||||
/* Copyright (c) University of Cambridge 2001 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* See the file NOTICE for conditions of use and distribution. */
|
||||
|
||||
/* OSF1-specific code. This is concatenated onto the generic src/os.c file.
|
||||
OSF1 has an apparently unique way of getting the load average, so we provide a
|
||||
unique function here, and define OS_LOAD_AVERAGE to stop src/os.c trying to
|
||||
provide the function. The macro may be set initially anyway, when compiling os.
|
||||
for utilities that don't want this function. */
|
||||
|
||||
#ifndef OS_LOAD_AVERAGE
|
||||
#define OS_LOAD_AVERAGE
|
||||
|
||||
#include <sys/table.h>
|
||||
|
||||
int
|
||||
os_getloadavg(void)
|
||||
{
|
||||
double avg;
|
||||
struct tbl_loadavg load_avg;
|
||||
|
||||
table (TBL_LOADAVG, 0, &load_avg, 1, sizeof (load_avg));
|
||||
|
||||
avg = (load_avg.tl_lscale == 0)?
|
||||
load_avg.tl_avenrun.d[0] :
|
||||
(load_avg.tl_avenrun.l[0] / (double)load_avg.tl_lscale);
|
||||
|
||||
return (int)(avg * 1000.0);
|
||||
}
|
||||
|
||||
#endif /* OS_LOAD_AVERAGE */
|
||||
|
||||
/* End of os.c-OSF1 */
|
532
OS/unsupported/os.c-cygwin
Normal file
532
OS/unsupported/os.c-cygwin
Normal file
|
@ -0,0 +1,532 @@
|
|||
/*************************************************
|
||||
* Exim - an Internet mail transport agent *
|
||||
*************************************************/
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/* Cygwin-specific code. December 2002. Updated Jan 2015.
|
||||
This is prefixed to the src/os.c file.
|
||||
|
||||
This code was supplied by Pierre A. Humblet <Pierre.Humblet@ieee.org>
|
||||
*/
|
||||
|
||||
/* We need a special mkdir that
|
||||
allows names starting with // */
|
||||
#undef mkdir
|
||||
int cygwin_mkdir( const char *path, mode_t mode )
|
||||
{
|
||||
const char * p = path;
|
||||
if (*p == '/') while(*(p+1) == '/') p++;
|
||||
return mkdir(p, mode);
|
||||
}
|
||||
|
||||
#ifndef COMPILE_UTILITY /* Utilities don't need special code */
|
||||
|
||||
#ifdef INCLUDE_PAM
|
||||
#include "../pam/pam.c"
|
||||
#endif
|
||||
#include <alloca.h>
|
||||
|
||||
unsigned int cygwin_WinVersion;
|
||||
|
||||
/* Conflict between Windows definitions and others */
|
||||
#ifdef NOERROR
|
||||
#undef NOERROR
|
||||
#endif
|
||||
#ifdef DELETE
|
||||
#undef DELETE
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
#include <ntstatus.h>
|
||||
#include <lmcons.h>
|
||||
|
||||
#define EqualLuid(Luid1, Luid2) \
|
||||
((Luid1.LowPart == Luid2.LowPart) && (Luid1.HighPart == Luid2.HighPart))
|
||||
#include <sys/cygwin.h>
|
||||
|
||||
/* Special static variables */
|
||||
static BOOL cygwin_debug = FALSE;
|
||||
static int fakesetugid = 1; /* when not privileged, setugid = noop */
|
||||
|
||||
#undef setuid
|
||||
int cygwin_setuid(uid_t uid )
|
||||
{
|
||||
int res = 0;
|
||||
if (fakesetugid == 0) {
|
||||
res = setuid(uid);
|
||||
if (cygwin_debug)
|
||||
fprintf(stderr, "setuid %u %u %d pid: %d\n",
|
||||
uid, getuid(),res, getpid());
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
#undef setgid
|
||||
int cygwin_setgid(gid_t gid )
|
||||
{
|
||||
int res = 0;
|
||||
if (fakesetugid == 0) {
|
||||
res = setgid(gid);
|
||||
if (cygwin_debug)
|
||||
fprintf(stderr, "setgid %u %u %d pid: %d\n",
|
||||
gid, getgid(), res, getpid());
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/* Background processes run at lower priority */
|
||||
static void cygwin_setpriority()
|
||||
{
|
||||
if (!SetPriorityClass(GetCurrentProcess(), BELOW_NORMAL_PRIORITY_CLASS))
|
||||
SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* GetVersion()
|
||||
MSB: 1 for 95/98/ME; Next 7: build number, except for 95/98/ME
|
||||
Next byte: 0
|
||||
Next byte: minor version of OS
|
||||
Low byte: major version of OS (3 or 4 for for NT, 5 for 2000 and XP) */
|
||||
//#define VERSION_IS_58M(x) (x & 0x80000000) /* 95, 98, Me */
|
||||
//#define VERSION_IS_NT(x) ((x & 0XFF) < 5) /* NT 4 or 3.51 */
|
||||
|
||||
/*
|
||||
Routine to find if process or thread is privileged
|
||||
*/
|
||||
|
||||
enum {
|
||||
CREATE_BIT = 1,
|
||||
};
|
||||
|
||||
static DWORD get_privileges ()
|
||||
{
|
||||
char buffer[1024];
|
||||
DWORD i, length;
|
||||
HANDLE hToken = NULL;
|
||||
PTOKEN_PRIVILEGES privs;
|
||||
LUID cluid, rluid;
|
||||
DWORD ret = 0;
|
||||
|
||||
privs = (PTOKEN_PRIVILEGES) buffer;
|
||||
|
||||
if (OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &hToken)
|
||||
&& LookupPrivilegeValue (NULL, SE_CREATE_TOKEN_NAME, &cluid)
|
||||
&& LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &rluid)
|
||||
&& (GetTokenInformation( hToken, TokenPrivileges,
|
||||
privs, sizeof (buffer), &length)
|
||||
|| (GetLastError () == ERROR_INSUFFICIENT_BUFFER
|
||||
&& (privs = (PTOKEN_PRIVILEGES) alloca (length))
|
||||
&& GetTokenInformation(hToken, TokenPrivileges,
|
||||
privs, length, &length)))) {
|
||||
for (i = 0; i < privs->PrivilegeCount; i++) {
|
||||
if (EqualLuid(privs->Privileges[i].Luid, cluid))
|
||||
ret |= CREATE_BIT;
|
||||
if (ret == (CREATE_BIT))
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "has_create_token_privilege %u\n", GetLastError());
|
||||
|
||||
if (hToken)
|
||||
CloseHandle(hToken);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
We use cygwin_premain to fake a few things
|
||||
and to provide some debug info
|
||||
*/
|
||||
void cygwin_premain2(int argc, char ** argv, struct per_process * ptr)
|
||||
{
|
||||
int i, res, is_daemon = 0, is_spoolwritable, is_privileged, is_eximuser;
|
||||
uid_t myuid, systemuid;
|
||||
gid_t mygid, adminsgid;
|
||||
struct passwd * pwp = NULL;
|
||||
struct stat buf;
|
||||
char *cygenv;
|
||||
SID(1, SystemSid, SECURITY_LOCAL_SYSTEM_RID);
|
||||
SID(2, AdminsSid, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS);
|
||||
DWORD priv_flags;
|
||||
|
||||
myuid = getuid();
|
||||
mygid = getgid();
|
||||
cygwin_WinVersion = GetVersion();
|
||||
if ((cygenv = getenv("CYGWIN")) == NULL) cygenv = "";
|
||||
/* Produce some debugging on stderr,
|
||||
cannot yet use exim's debug functions.
|
||||
Exim does not use -c and ignores -n.
|
||||
Set lower priority for daemons */
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (argv[i][0] == '-') {
|
||||
if (argv[i][1] == 'c') {
|
||||
ssize_t size;
|
||||
wchar_t *win32_path;
|
||||
argv[i][1] = 'n'; /* Replace -c by -n */
|
||||
cygwin_debug = TRUE;
|
||||
fprintf(stderr, "CYGWIN = \"%s\".\n", cygenv);
|
||||
if (((size = cygwin_conv_path(CCP_POSIX_TO_WIN_W,"/", win32_path, 0)) > 0)
|
||||
&& ((win32_path = store_malloc(size)) != NULL)
|
||||
&& (cygwin_conv_path(CCP_POSIX_TO_WIN_W,"/", win32_path, size) == 0)) {
|
||||
fprintf(stderr, " Root / mapped to %ls.\n", win32_path);
|
||||
store_free(win32_path);
|
||||
}
|
||||
}
|
||||
else if (argv[i][1] == 'b' && argv[i][2] == 'd') {
|
||||
is_daemon = 1;
|
||||
cygwin_setpriority();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Nt/2000/XP
|
||||
We initially set the exim uid & gid to those of the "exim user",
|
||||
or to the root uid (SYSTEM) and exim gid (ADMINS),
|
||||
If privileged, we setuid to those.
|
||||
We always set the configure uid to the system uid.
|
||||
We always set the root uid to the real uid
|
||||
to allow exim imposed restrictions (bypassable by recompiling)
|
||||
and to avoid exec that cause loss of privilege
|
||||
If not privileged and unable to chown,
|
||||
we set the exim uid to our uid.
|
||||
If unprivileged and /var/spool/exim is writable and not running as listening daemon,
|
||||
we fake all subsequent setuid. */
|
||||
|
||||
/* Get the system and admins uid from their sids */
|
||||
if ((systemuid = cygwin_internal(CW_GET_UID_FROM_SID, & SystemSid)) == -1) {
|
||||
fprintf(stderr, "Cannot map System sid. Aborting\n");
|
||||
exit(1);
|
||||
}
|
||||
if ((adminsgid = cygwin_internal(CW_GET_GID_FROM_SID, & AdminsSid)) == -1) {
|
||||
fprintf(stderr, "Cannot map Admins sid. Aborting\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
priv_flags = get_privileges ();
|
||||
is_privileged = !!(priv_flags & CREATE_BIT);
|
||||
|
||||
/* Call getpwnam for account exim after getting the local exim name */
|
||||
char exim_username[DNLEN + UNLEN + 2];
|
||||
if (cygwin_internal(CW_CYGNAME_FROM_WINNAME, "exim", exim_username, sizeof exim_username) != 0)
|
||||
pwp = getpwnam (exim_username);
|
||||
|
||||
/* If cannot setuid to exim or and is not the daemon (which is assumed to be
|
||||
able to chown or to be the exim user) set the exim ugid to our ugid to avoid
|
||||
chown failures after creating files and to be able to setuid to exim in
|
||||
exim.c ( "privilege not needed" ). */
|
||||
if ((is_privileged == 0) && (!is_daemon)) {
|
||||
exim_uid = myuid;
|
||||
exim_gid = mygid;
|
||||
}
|
||||
else if (pwp != NULL) {
|
||||
exim_uid = pwp->pw_uid; /* Set it according to passwd */
|
||||
exim_gid = pwp->pw_gid;
|
||||
is_eximuser = 1;
|
||||
}
|
||||
else {
|
||||
exim_uid = systemuid;
|
||||
exim_gid = adminsgid;
|
||||
is_eximuser = 0;
|
||||
}
|
||||
|
||||
res = stat("/var/spool/exim", &buf);
|
||||
/* Check if writable (and can be stat) */
|
||||
is_spoolwritable = ((res == 0) && ((buf.st_mode & S_IWOTH) != 0));
|
||||
|
||||
fakesetugid = (is_privileged == 0) && (is_daemon == 0) && (is_spoolwritable == 1);
|
||||
|
||||
if (is_privileged) { /* Can setuid */
|
||||
if (cygwin_setgid(exim_gid) /* Setuid to exim */
|
||||
|| cygwin_setuid(exim_uid)) {
|
||||
fprintf(stderr, "Unable to setuid/gid to exim. priv_flags: %x\n", priv_flags);
|
||||
exit(0); /* Problem... Perhaps not in 544 */
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the configuration file uid and gid to the system uid and admins gid. */
|
||||
config_uid = systemuid;
|
||||
config_gid = adminsgid;
|
||||
|
||||
/* Pretend we are root to avoid useless exec
|
||||
and avoid exim set limitations.
|
||||
We are limited by file access rights */
|
||||
root_uid = getuid ();
|
||||
|
||||
if (cygwin_debug) {
|
||||
fprintf(stderr, "Starting uid %u, gid %u, priv_flags %x, is_privileged %d, is_daemon %d, is_spoolwritable %d.\n",
|
||||
myuid, mygid, priv_flags, is_privileged, is_daemon, is_spoolwritable);
|
||||
fprintf(stderr, "root_uid %u, exim_uid %u, exim_gid %u, config_uid %u, config_gid %u, is_eximuser %d.\n",
|
||||
root_uid, exim_uid, exim_gid, config_uid, config_gid, is_eximuser);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#ifndef OS_LOAD_AVERAGE /* Can be set on command line */
|
||||
#define OS_LOAD_AVERAGE /* src/os.c need not provide it */
|
||||
|
||||
/*****************************************************************
|
||||
Functions for average load measurements
|
||||
|
||||
Uses NtQuerySystemInformation.
|
||||
This requires definitions that are not part of
|
||||
standard include files.
|
||||
|
||||
This is discouraged starting with WinXP.
|
||||
|
||||
*************************************************************/
|
||||
/* Structure to compute the load average efficiently */
|
||||
typedef struct {
|
||||
DWORD Lock;
|
||||
unsigned long long Time100ns; /* Last measurement time */
|
||||
unsigned long long IdleCount; /* Latest cumulative idle time */
|
||||
unsigned long long LastCounter; /* Last measurement counter */
|
||||
unsigned long long PerfFreq; /* Perf counter frequency */
|
||||
int LastLoad; /* Last reported load, or -1 */
|
||||
} cygwin_perf_t;
|
||||
|
||||
static struct {
|
||||
HANDLE handle;
|
||||
pid_t pid;
|
||||
cygwin_perf_t *perf;
|
||||
} cygwin_load = {NULL, 0, NULL};
|
||||
|
||||
#include <ntdef.h>
|
||||
|
||||
typedef enum _SYSTEM_INFORMATION_CLASS
|
||||
{
|
||||
SystemBasicInformation = 0,
|
||||
SystemPerformanceInformation = 2,
|
||||
SystemTimeOfDayInformation = 3,
|
||||
SystemProcessesAndThreadsInformation = 5,
|
||||
SystemProcessorTimes = 8,
|
||||
SystemPagefileInformation = 18,
|
||||
/* There are a lot more of these... */
|
||||
} SYSTEM_INFORMATION_CLASS;
|
||||
|
||||
typedef struct _SYSTEM_BASIC_INFORMATION
|
||||
{
|
||||
ULONG Unknown;
|
||||
ULONG MaximumIncrement;
|
||||
ULONG PhysicalPageSize;
|
||||
ULONG NumberOfPhysicalPages;
|
||||
ULONG LowestPhysicalPage;
|
||||
ULONG HighestPhysicalPage;
|
||||
ULONG AllocationGranularity;
|
||||
ULONG LowestUserAddress;
|
||||
ULONG HighestUserAddress;
|
||||
ULONG ActiveProcessors;
|
||||
UCHAR NumberProcessors;
|
||||
} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
|
||||
|
||||
typedef struct __attribute__ ((aligned (8))) _SYSTEM_PROCESSOR_TIMES
|
||||
{
|
||||
LARGE_INTEGER IdleTime;
|
||||
LARGE_INTEGER KernelTime;
|
||||
LARGE_INTEGER UserTime;
|
||||
LARGE_INTEGER DpcTime;
|
||||
LARGE_INTEGER InterruptTime;
|
||||
ULONG InterruptCount;
|
||||
} SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES;
|
||||
|
||||
typedef NTSTATUS NTAPI (*NtQuerySystemInformation_t) (SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG);
|
||||
typedef ULONG NTAPI (*RtlNtStatusToDosError_t) (NTSTATUS);
|
||||
|
||||
static NtQuerySystemInformation_t NtQuerySystemInformation;
|
||||
static RtlNtStatusToDosError_t RtlNtStatusToDosError;
|
||||
|
||||
/*****************************************************************
|
||||
*
|
||||
LoadNtdll()
|
||||
Load special functions from the NTDLL
|
||||
Return TRUE if success.
|
||||
|
||||
*****************************************************************/
|
||||
|
||||
static BOOL LoadNtdll()
|
||||
{
|
||||
HINSTANCE hinstLib;
|
||||
|
||||
if ((hinstLib = LoadLibrary("NTDLL.DLL"))
|
||||
&& (NtQuerySystemInformation =
|
||||
(NtQuerySystemInformation_t) GetProcAddress(hinstLib,
|
||||
"NtQuerySystemInformation"))
|
||||
&& (RtlNtStatusToDosError =
|
||||
(RtlNtStatusToDosError_t) GetProcAddress(hinstLib,
|
||||
"RtlNtStatusToDosError")))
|
||||
return TRUE;
|
||||
|
||||
DEBUG(D_load)
|
||||
debug_printf("perf: load: %u (Windows)\n", GetLastError());
|
||||
return FALSE;
|
||||
}
|
||||
/*****************************************************************
|
||||
*
|
||||
ReadStat()
|
||||
Measures current Time100ns and IdleCount
|
||||
Return TRUE if success.
|
||||
|
||||
*****************************************************************/
|
||||
|
||||
static BOOL ReadStat(unsigned long long int *Time100nsPtr,
|
||||
unsigned long long int *IdleCountPtr)
|
||||
{
|
||||
NTSTATUS ret;
|
||||
SYSTEM_BASIC_INFORMATION sbi;
|
||||
PSYSTEM_PROCESSOR_TIMES spt;
|
||||
|
||||
*Time100nsPtr = *IdleCountPtr = 0;
|
||||
|
||||
if ((ret = NtQuerySystemInformation(SystemBasicInformation,
|
||||
(PVOID) &sbi, sizeof sbi, NULL))
|
||||
!= STATUS_SUCCESS) {
|
||||
DEBUG(D_load)
|
||||
debug_printf("Perf: NtQuerySystemInformation: %u (Windows)\n",
|
||||
RtlNtStatusToDosError(ret));
|
||||
}
|
||||
else if (!(spt = (PSYSTEM_PROCESSOR_TIMES) alloca(sizeof(spt[0]) * sbi.NumberProcessors))) {
|
||||
DEBUG(D_load)
|
||||
debug_printf("Perf: alloca: errno %d (%s)\n", errno, strerror(errno));
|
||||
}
|
||||
else if ((ret = NtQuerySystemInformation(SystemProcessorTimes, (PVOID) spt,
|
||||
sizeof spt[0] * sbi.NumberProcessors, NULL))
|
||||
!= STATUS_SUCCESS) {
|
||||
DEBUG(D_load)
|
||||
debug_printf("Perf: NtQuerySystemInformation: %u (Windows)\n",
|
||||
RtlNtStatusToDosError(ret));
|
||||
}
|
||||
else {
|
||||
int i;
|
||||
for (i = 0; i < sbi.NumberProcessors; i++) {
|
||||
*Time100nsPtr += spt[i].KernelTime.QuadPart;;
|
||||
*Time100nsPtr += spt[i].UserTime.QuadPart;
|
||||
*IdleCountPtr += spt[i].IdleTime.QuadPart;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
*
|
||||
InitLoadAvg()
|
||||
Initialize the cygwin_load.perf structure.
|
||||
and set cygwin_load.perf->Flag to TRUE if successful.
|
||||
This is called the first time os_getloadavg is called
|
||||
*****************************************************************/
|
||||
static void InitLoadAvg(cygwin_perf_t *this)
|
||||
{
|
||||
BOOL success = TRUE;
|
||||
|
||||
/* Get perf frequency and counter */
|
||||
QueryPerformanceFrequency((LARGE_INTEGER *)& this->PerfFreq);
|
||||
QueryPerformanceCounter((LARGE_INTEGER *)& this->LastCounter);
|
||||
|
||||
/* Get initial values for Time100ns and IdleCount */
|
||||
success = success
|
||||
&& ReadStat( & this->Time100ns,
|
||||
& this->IdleCount);
|
||||
/* If success, set the Load to 0, else to -1 */
|
||||
if (success) this->LastLoad = 0;
|
||||
else {
|
||||
log_write(0, LOG_MAIN, "Cannot obtain Load Average");
|
||||
this->LastLoad = -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************
|
||||
*
|
||||
os_getloadavg()
|
||||
|
||||
Return -1 if not available;
|
||||
Return the previous value if less than AVERAGING sec old.
|
||||
else return the processor load on a [0 - 1000] scale.
|
||||
|
||||
The first time we are called we initialize the counts
|
||||
and return 0 or -1.
|
||||
The initial load cannot be measured as we use the processor 100%
|
||||
*****************************************************************/
|
||||
static SECURITY_ATTRIBUTES sa = {sizeof (SECURITY_ATTRIBUTES), NULL, TRUE};
|
||||
#define AVERAGING 10
|
||||
|
||||
int os_getloadavg()
|
||||
{
|
||||
unsigned long long Time100ns, IdleCount, CurrCounter;
|
||||
int value;
|
||||
pid_t newpid;
|
||||
|
||||
/* New process.
|
||||
Reload the dlls and the file mapping */
|
||||
if ((newpid = getpid()) != cygwin_load.pid) {
|
||||
BOOL new;
|
||||
cygwin_load.pid = newpid;
|
||||
|
||||
if (!LoadNtdll()) {
|
||||
log_write(0, LOG_MAIN, "Cannot obtain Load Average");
|
||||
cygwin_load.perf = NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((new = !cygwin_load.handle)) {
|
||||
cygwin_load.handle = CreateFileMapping (INVALID_HANDLE_VALUE, &sa, PAGE_READWRITE,
|
||||
0, sizeof(cygwin_perf_t), NULL);
|
||||
DEBUG(D_load)
|
||||
debug_printf("Perf: CreateFileMapping: handle %p\n", (void *) cygwin_load.handle);
|
||||
}
|
||||
cygwin_load.perf = (cygwin_perf_t *) MapViewOfFile (cygwin_load.handle,
|
||||
FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
|
||||
DEBUG(D_load)
|
||||
debug_printf("Perf: MapViewOfFile: addr %p\n", (void *) cygwin_load.perf);
|
||||
if (new && cygwin_load.perf)
|
||||
InitLoadAvg(cygwin_load.perf);
|
||||
}
|
||||
|
||||
/* Check if initialized OK */
|
||||
if (!cygwin_load.perf || cygwin_load.perf->LastLoad < 0)
|
||||
return -1;
|
||||
|
||||
/* If we cannot get the lock, we return 0.
|
||||
This is to prevent any lock-up possibility.
|
||||
Finding a lock busy is unlikely, and giving up only
|
||||
results in an immediate delivery .*/
|
||||
|
||||
if (InterlockedCompareExchange(&cygwin_load.perf->Lock, 1, 0)) {
|
||||
DEBUG(D_load)
|
||||
debug_printf("Perf: Lock busy\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Get the current time (PerfCounter) */
|
||||
QueryPerformanceCounter((LARGE_INTEGER *)& CurrCounter);
|
||||
/* Calls closer than AVERAGING sec apart use the previous value */
|
||||
if (CurrCounter - cygwin_load.perf->LastCounter >
|
||||
AVERAGING * cygwin_load.perf->PerfFreq) {
|
||||
/* Get Time100ns and IdleCount */
|
||||
if (ReadStat( & Time100ns, & IdleCount)) { /* Success */
|
||||
/* Return processor load on 1000 scale */
|
||||
value = 1000 - ((1000 * (IdleCount - cygwin_load.perf->IdleCount)) /
|
||||
(Time100ns - cygwin_load.perf->Time100ns));
|
||||
cygwin_load.perf->Time100ns = Time100ns;
|
||||
cygwin_load.perf->IdleCount = IdleCount;
|
||||
cygwin_load.perf->LastCounter = CurrCounter;
|
||||
cygwin_load.perf->LastLoad = value;
|
||||
DEBUG(D_load)
|
||||
debug_printf("Perf: New load average %d\n", value);
|
||||
}
|
||||
else { /* Something bad happened.
|
||||
Refuse to measure the load anymore
|
||||
but don't bother releasing the buffer */
|
||||
log_write(0, LOG_MAIN, "Cannot obtain Load Average");
|
||||
cygwin_load.perf->LastLoad = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
DEBUG(D_load)
|
||||
debug_printf("Perf: Old load average %d\n", cygwin_load.perf->LastLoad);
|
||||
cygwin_load.perf->Lock = 0;
|
||||
return cygwin_load.perf->LastLoad;
|
||||
}
|
||||
#endif /* OS_LOAD_AVERAGE */
|
||||
#endif /* COMPILE_UTILITY */
|
29
OS/unsupported/os.h-AIX
Normal file
29
OS/unsupported/os.h-AIX
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* Exim: OS-specific C header file for AIX */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/* Written by Nick Waterman <nick@cimio.co.uk> */
|
||||
/* Modified by Philip Hazel with data from
|
||||
Niels Provos <provos@wserver.physnet.uni-hamburg.de>
|
||||
Juozas Simkevicius <juozas@omnitel.net> for load averages
|
||||
*/
|
||||
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/unix"
|
||||
#define LOAD_AVG_TYPE int
|
||||
#define FSCALE 65536.0
|
||||
|
||||
#define HAVE_SYS_VFS_H
|
||||
#define HAVE_SYS_STATFS_H
|
||||
|
||||
/* Now tell AIX to emulate BSD as badly as it can. */
|
||||
|
||||
#define _BSD 44
|
||||
|
||||
typedef struct flock flock_t;
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
|
||||
/* End */
|
16
OS/unsupported/os.h-BSDI
Normal file
16
OS/unsupported/os.h-BSDI
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* Exim: OS-specific C header file for BSDI */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define HAVE_BSD_GETLOADAVG
|
||||
#define HAVE_SETCLASSRESOURCES
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
#define SIOCGIFCONF_GIVES_ADDR
|
||||
#define OS_UNSETENV
|
||||
|
||||
typedef struct flock flock_t;
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
29
OS/unsupported/os.h-DGUX
Normal file
29
OS/unsupported/os.h-DGUX
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* Exim: OS-specific C header file for DGUX */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/* Written by Ken Bailey (K.Bailey@rbgkew.org.uk) Feb 1998 */
|
||||
/* on dgux R4.11MU04 generic AViiON mc88100 */
|
||||
/* Modified Dec 1998 by PH after message from Ken. */
|
||||
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define F_FAVAIL f_favail
|
||||
|
||||
#define NO_SYSEXITS /* DGUX doesn't ship sysexits.h */
|
||||
#define NO_IP_VAR_H /* DGUX has no netinet/ip_var.h */
|
||||
|
||||
#define os_strsignal dg_strsignal
|
||||
#define OS_STRSIGNAL
|
||||
|
||||
#define HAVE_MMAP
|
||||
|
||||
/* The definition of ipoptions in netinet/in.h (masquerading as ip_opts) used
|
||||
in smtp_in.c is for Intel DG _IX86_ABI only. You may be able to get this to
|
||||
work on Intel DG but it's certainly easier to skip it on M88k. This means we
|
||||
forego the detection of some source-routing based IP attacks. */
|
||||
|
||||
#define NO_IP_OPTIONS
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
65
OS/unsupported/os.h-Darwin
Normal file
65
OS/unsupported/os.h-Darwin
Normal file
|
@ -0,0 +1,65 @@
|
|||
/* Exim: OS-specific C header file for Darwin (Mac OS X) */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/* #define CRYPT_H */ /* Apparently this isn't needed */
|
||||
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
#define PAM_H_IN_PAM
|
||||
#define SIOCGIFCONF_GIVES_ADDR
|
||||
#define EXIM_HAVE_OPENAT
|
||||
|
||||
|
||||
#define F_FREESP O_TRUNC
|
||||
typedef struct flock flock_t;
|
||||
|
||||
#define BASE_62 36 /* HFS+ aliases lower and upper cases in filenames.
|
||||
Consider reducing MAX_LOCALHOST_NUMBER */
|
||||
|
||||
#ifndef _BSD_SOCKLEN_T_
|
||||
# define _BSD_SOCKLEN_T_ int32_t /* socklen_t (duh) */
|
||||
#endif
|
||||
|
||||
/* Settings for handling IP options. There's no netinet/ip_var.h. The IP
|
||||
option handling is in the style of the later GLIBCs but the GLIBC macros
|
||||
aren't set, so we invent a new one. */
|
||||
|
||||
#define NO_IP_VAR_H
|
||||
#define DARWIN_IP_OPTIONS
|
||||
|
||||
/* Need this for the DNS lookup code. Remember to remove if we get round to
|
||||
updating Exim to use the newer interface. */
|
||||
|
||||
#define BIND_8_COMPAT
|
||||
|
||||
/* It's not .so for dynamic libraries on Darwin. */
|
||||
#define DYNLIB_FN_EXT "dylib"
|
||||
|
||||
/* We currently need some assistance getting OFF_T_FMT correct on MacOS */
|
||||
#ifdef OFF_T_FMT
|
||||
# undef OFF_T_FMT
|
||||
#endif
|
||||
#define OFF_T_FMT "%lld"
|
||||
#define LONGLONG_T long int
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* seems arpa/nameser.h does not define this */
|
||||
#define NS_MAXMSG 65535
|
||||
|
||||
/* There may be very many supplementary groups for the user. See notes
|
||||
in "man 2 getgroups". */
|
||||
#define _DARWIN_UNLIMITED_GETGROUPS
|
||||
#define EXIM_GROUPLIST_SIZE 64
|
||||
|
||||
/* TCP Fast Open: Darwin uses a connectx() call
|
||||
rather than a modified sendto() */
|
||||
#define EXIM_TFO_CONNECTX
|
||||
|
||||
/* MacOS, at least on the buildfarm animal, does not seem to push out
|
||||
the SMTP response to QUIT with our usual handling which is trying to get
|
||||
the client to FIN first so that the server does not get the TIME_WAIT */
|
||||
#define SERVERSIDE_CLOSE_NOWAIT
|
||||
|
||||
/* End */
|
14
OS/unsupported/os.h-DragonFly
Normal file
14
OS/unsupported/os.h-DragonFly
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* Exim: OS-specific C header file for DragonFly */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define HAVE_BSD_GETLOADAVG
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
#define SIOCGIFCONF_GIVES_ADDR
|
||||
|
||||
typedef struct flock flock_t;
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
26
OS/unsupported/os.h-GNUkFreeBSD
Normal file
26
OS/unsupported/os.h-GNUkFreeBSD
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* Exim: OS-specific C header file for GNU/kFreeBSD */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define CRYPT_H
|
||||
#define GLIBC_IP_OPTIONS
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_BSD_GETLOADAVG
|
||||
#define HAVE_SYS_VFS_H
|
||||
#define NO_IP_VAR_H
|
||||
#define SIG_IGN_WORKS
|
||||
|
||||
#define F_FREESP O_TRUNC
|
||||
typedef struct flock flock_t;
|
||||
|
||||
#define os_strsignal strsignal
|
||||
#define OS_STRSIGNAL
|
||||
|
||||
/* kFreeBSD-specific bits below */
|
||||
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
#define SIOCGIFCONF_GIVES_ADDR
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
26
OS/unsupported/os.h-GNUkNetBSD
Normal file
26
OS/unsupported/os.h-GNUkNetBSD
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* Exim: OS-specific C header file for GNU/kNetBSD */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define CRYPT_H
|
||||
#define GLIBC_IP_OPTIONS
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_BSD_GETLOADAVG
|
||||
#define HAVE_SYS_VFS_H
|
||||
#define NO_IP_VAR_H
|
||||
#define SIG_IGN_WORKS
|
||||
|
||||
#define F_FREESP O_TRUNC
|
||||
typedef struct flock flock_t;
|
||||
|
||||
#define os_strsignal strsignal
|
||||
#define OS_STRSIGNAL
|
||||
|
||||
/* kNetBSD-specific bits below */
|
||||
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
#define SIOCGIFCONF_GIVES_ADDR
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
13
OS/unsupported/os.h-HI-OSF
Normal file
13
OS/unsupported/os.h-HI-OSF
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* Exim: OS-specific C header file for HI-OSF/1-MJ and HI-UX/MPP */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
|
||||
typedef struct flock flock_t;
|
||||
#define F_FREESP O_TRUNC
|
||||
#define DN_EXPAND_ARG4_TYPE u_char *
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
22
OS/unsupported/os.h-HI-UX
Normal file
22
OS/unsupported/os.h-HI-UX
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* Exim: OS-specific C header file for HI-UX */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE double
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/HI-UX"
|
||||
#define FSCALE 1.0
|
||||
|
||||
#define HAVE_SYS_VFS_H
|
||||
|
||||
#define SELECT_ARG2_TYPE int
|
||||
#define F_FREESP O_TRUNC
|
||||
#define NEED_H_ERRNO 1
|
||||
|
||||
typedef struct flock flock_t;
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
35
OS/unsupported/os.h-HP-UX
Normal file
35
OS/unsupported/os.h-HP-UX
Normal file
|
@ -0,0 +1,35 @@
|
|||
/* Exim: OS-specific C header file for HP-UX versions greater than 9 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define EXIM_SOCKLEN_T size_t
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE double
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/stand/vmunix"
|
||||
#define FSCALE 1.0
|
||||
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
|
||||
#define F_FREESP O_TRUNC
|
||||
#define NEED_H_ERRNO 1
|
||||
|
||||
typedef struct flock flock_t;
|
||||
|
||||
typedef struct __res_state *res_state;
|
||||
|
||||
#define LLONG_MIN LONG_LONG_MIN
|
||||
#define LLONG_MAX LONG_LONG_MAX
|
||||
|
||||
#define strtoll(a,b,c) strtoimax(a,b,c)
|
||||
|
||||
/* Determined by sockaddr_un */
|
||||
|
||||
struct sockaddr_storage
|
||||
{
|
||||
short ss_family;
|
||||
char __ss_padding[92];
|
||||
};
|
||||
|
||||
/* End */
|
24
OS/unsupported/os.h-HP-UX-9
Normal file
24
OS/unsupported/os.h-HP-UX-9
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* Exim: OS-specific C header file for HP-UX version 9 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE double
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/hp-ux"
|
||||
#define FSCALE 1.0
|
||||
|
||||
#define HAVE_SYS_VFS_H
|
||||
|
||||
#define SELECT_ARG2_TYPE int
|
||||
#define F_FREESP O_TRUNC
|
||||
#define NEED_H_ERRNO 1
|
||||
|
||||
#define killpg(pgid,sig) kill(-(pgid),sig)
|
||||
|
||||
typedef struct flock flock_t;
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
18
OS/unsupported/os.h-IRIX
Normal file
18
OS/unsupported/os.h-IRIX
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* Exim: OS-specific C header file for IRIX */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define DN_EXPAND_ARG4_TYPE u_char *
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE long
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/unix"
|
||||
#define FSCALE 1000.0
|
||||
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define F_FAVAIL f_favail
|
||||
#define vfork fork
|
||||
|
||||
/* End */
|
17
OS/unsupported/os.h-IRIX6
Normal file
17
OS/unsupported/os.h-IRIX6
Normal file
|
@ -0,0 +1,17 @@
|
|||
/* Exim: OS-specific C header file for IRIX */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define CRYPT_H
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE long
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/unix"
|
||||
#define FSCALE 1000.0
|
||||
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define F_FAVAIL f_favail
|
||||
#define vfork fork
|
||||
|
||||
/* End */
|
19
OS/unsupported/os.h-IRIX632
Normal file
19
OS/unsupported/os.h-IRIX632
Normal file
|
@ -0,0 +1,19 @@
|
|||
/* Exim: OS-specific C header file for IRIX */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define CRYPT_H
|
||||
#define DN_EXPAND_ARG4_TYPE u_char *
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE long
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/unix"
|
||||
#define FSCALE 1000.0
|
||||
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define F_FAVAIL f_favail
|
||||
#define vfork fork
|
||||
|
||||
/* End */
|
17
OS/unsupported/os.h-IRIX65
Normal file
17
OS/unsupported/os.h-IRIX65
Normal file
|
@ -0,0 +1,17 @@
|
|||
/* Exim: OS-specific C header file for IRIX 6.5 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define CRYPT_H
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE long
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/unix"
|
||||
#define FSCALE 1000.0
|
||||
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define F_FAVAIL f_favail
|
||||
#define vfork fork
|
||||
|
||||
/* End */
|
32
OS/unsupported/os.h-NetBSD
Normal file
32
OS/unsupported/os.h-NetBSD
Normal file
|
@ -0,0 +1,32 @@
|
|||
/* Exim: OS-specific C header file for NetBSD */
|
||||
/* Copyright (c) The Exim Maintainers 2021 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define HAVE_BSD_GETLOADAVG
|
||||
#define HAVE_GETIFADDRS
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
#define SIOCGIFCONF_GIVES_ADDR
|
||||
#define HAVE_ARC4RANDOM
|
||||
|
||||
typedef struct flock flock_t;
|
||||
|
||||
#define os_strsignal strsignal
|
||||
#define OS_STRSIGNAL
|
||||
|
||||
#define os_get_dns_resolver_res __res_get_state
|
||||
#define os_put_dns_resolver_res(RP) __res_put_state(RP)
|
||||
#define OS_GET_DNS_RESOLVER_RES
|
||||
|
||||
#include <sys/param.h>
|
||||
|
||||
#if __NetBSD_Version__ >= 299000900
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#endif
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
#define EXIM_HAVE_KEVENT
|
||||
|
||||
/* End */
|
6
OS/unsupported/os.h-NetBSD-a.out
Normal file
6
OS/unsupported/os.h-NetBSD-a.out
Normal file
|
@ -0,0 +1,6 @@
|
|||
/* Exim: OS-specific C header file for NetBSD (a.out binary format) */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include "../OS/os.h-NetBSD" /* Same as for ELF format */
|
||||
|
||||
/* End */
|
17
OS/unsupported/os.h-OSF1
Normal file
17
OS/unsupported/os.h-OSF1
Normal file
|
@ -0,0 +1,17 @@
|
|||
/* Exim: OS-specific C header file for OSF1 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define HAVE_SYS_MOUNT_H
|
||||
#define HAVE_GETIPNODEBYNAME 1
|
||||
|
||||
typedef struct flock flock_t;
|
||||
#define F_FREESP O_TRUNC
|
||||
|
||||
/* This was here for some time, but it seems that now (June 2005) things have
|
||||
changed. */
|
||||
/* #define EXIM_SOCKLEN_T size_t */
|
||||
|
||||
/* Still not "socklen_t", which is the most common setting */
|
||||
#define EXIM_SOCKLEN_T int
|
||||
|
||||
/* End */
|
20
OS/unsupported/os.h-OpenUNIX
Normal file
20
OS/unsupported/os.h-OpenUNIX
Normal file
|
@ -0,0 +1,20 @@
|
|||
/* Exim: OS-specific C header file for OpenUNIX */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define NO_SYSEXITS
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE short
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/stand/unix"
|
||||
#define FSCALE 256
|
||||
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define _SVID3
|
||||
#define NEED_H_ERRNO
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
25
OS/unsupported/os.h-QNX
Normal file
25
OS/unsupported/os.h-QNX
Normal file
|
@ -0,0 +1,25 @@
|
|||
/* Exim: OS-specific C header file for QNX */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/* Modified for QNX 6.2.0 with diffs from Samuli Tuomola. */
|
||||
|
||||
#include <sys/select.h>
|
||||
|
||||
/* This include is wrapped in an ifdef so as to be skipped for QNXRTP, which
|
||||
doesn't have/need this header file. From Karsten P. Hoffmann. */
|
||||
|
||||
#ifdef __QNX__
|
||||
#include <unix.h>
|
||||
#endif
|
||||
|
||||
#undef HAVE_STATFS
|
||||
#undef HAVE_VFS_H
|
||||
#undef HAVE_SYS_MOUNT_H
|
||||
|
||||
#define NO_SYSEXITS
|
||||
|
||||
extern int h_errno;
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
22
OS/unsupported/os.h-SCO
Normal file
22
OS/unsupported/os.h-SCO
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* Exim: OS-specific C header file for SCO */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define DN_EXPAND_ARG4_TYPE u_char *
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE short
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/unix"
|
||||
#define FSCALE 256
|
||||
#define EXIM_SOCKLEN_T int
|
||||
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define F_FAVAIL f_favail
|
||||
#define _SVID3
|
||||
#define NEED_H_ERRNO
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
20
OS/unsupported/os.h-SCO_SV
Normal file
20
OS/unsupported/os.h-SCO_SV
Normal file
|
@ -0,0 +1,20 @@
|
|||
/* Exim: OS-specific C header file for SCO_SV */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE short
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/unix"
|
||||
#define FSCALE 256
|
||||
#define EXIM_SOCKLEN_T int
|
||||
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define F_FAVAIL f_favail
|
||||
#define _SVID3
|
||||
#define NEED_H_ERRNO
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
40
OS/unsupported/os.h-SunOS4
Normal file
40
OS/unsupported/os.h-SunOS4
Normal file
|
@ -0,0 +1,40 @@
|
|||
/* Exim: OS-specific C header file for SunOS4 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE long
|
||||
#define LOAD_AVG_SYMBOL "_avenrun"
|
||||
#define KERNEL_PATH "/vmunix"
|
||||
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_VFS_H
|
||||
|
||||
#define F_FREESP O_TRUNC
|
||||
#define EXIT_FAILURE 1
|
||||
#define EXIT_SUCCESS 0
|
||||
typedef struct flock flock_t;
|
||||
|
||||
#define STRERROR_FROM_ERRLIST
|
||||
#define memmove(a, b, c) bcopy(b, a, c)
|
||||
#define strtoul(str, ptr, base) ((unsigned int)strtol((str),(ptr),(base)))
|
||||
|
||||
extern char *strerror(int);
|
||||
extern int sys_nerr;
|
||||
extern char *sys_errlist[];
|
||||
|
||||
/* In ANSI C strtod() is defined in stdlib.h, but in SunOS4 it is defined in
|
||||
floatingpoint.h which is called from math.h, which Exim doesn't include. */
|
||||
|
||||
extern double strtod(const char *, char **);
|
||||
|
||||
/* SunOS4 seems to define getc, ungetc, feof and ferror as macros only, not
|
||||
as functions. We need to have them as assignable functions. Setting this
|
||||
flag causes this to get done in exim.h. */
|
||||
|
||||
#define FUDGE_GETC_AND_FRIENDS
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
15
OS/unsupported/os.h-SunOS5-hal
Normal file
15
OS/unsupported/os.h-SunOS5-hal
Normal file
|
@ -0,0 +1,15 @@
|
|||
/* Exim: OS-specific C header file for SunOS5 on HAL */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define HAVE_MMAP
|
||||
|
||||
#define HAVE_KSTAT
|
||||
#define LOAD_AVG_KSTAT "system_misc"
|
||||
#define LOAD_AVG_KSTAT_MODULE "unix"
|
||||
#define LOAD_AVG_SYMBOL "avenrun_1min"
|
||||
#define LOAD_AVG_FIELD value.ul
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
19
OS/unsupported/os.h-ULTRIX
Normal file
19
OS/unsupported/os.h-ULTRIX
Normal file
|
@ -0,0 +1,19 @@
|
|||
/* Exim: OS-specific C header file for Ultrix */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/* Well, it *does* have statfs(), but its structure is called something
|
||||
different, all the members have different names, and the function returns
|
||||
1 on success rather than 0. As this is for a minority function, and I think
|
||||
a minority operating system, easiest just to say "no" until someone asks. */
|
||||
|
||||
#undef HAVE_STATFS
|
||||
|
||||
#define F_FREESP O_TRUNC
|
||||
#define NEED_H_ERRNO
|
||||
#define NO_OPENLOG
|
||||
typedef struct flock flock_t;
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
26
OS/unsupported/os.h-UNIX_SV
Normal file
26
OS/unsupported/os.h-UNIX_SV
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* Exim: OS-specific C header file for SCO SVR4.2 (and maybe Unixware) */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/**
|
||||
*** Note that for SCO 5 the configuration file is called SCO_SV,
|
||||
*** and that Unixware7 has its own configuration. This is an old
|
||||
*** file that is retained for compatibility.
|
||||
**/
|
||||
|
||||
#define NO_SYSEXITS
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE short
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/stand/unix"
|
||||
#define FSCALE 256
|
||||
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define _SVID3
|
||||
#define NEED_H_ERRNO
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
20
OS/unsupported/os.h-USG
Normal file
20
OS/unsupported/os.h-USG
Normal file
|
@ -0,0 +1,20 @@
|
|||
/* Exim: OS-specific C header file for Unixware 2.x */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define NO_SYSEXITS
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE short
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/stand/unix"
|
||||
#define FSCALE 256
|
||||
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define _SVID3
|
||||
#define NEED_H_ERRNO
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
19
OS/unsupported/os.h-Unixware7
Normal file
19
OS/unsupported/os.h-Unixware7
Normal file
|
@ -0,0 +1,19 @@
|
|||
/* Exim: OS-specific C header file for Unixware 7 */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define NO_SYSEXITS
|
||||
|
||||
#define EXIM_SOCKLEN_T size_t
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE short
|
||||
#define LOAD_AVG_SYMBOL "avenrun"
|
||||
#define KERNEL_PATH "/stand/unix"
|
||||
#define FSCALE 256
|
||||
|
||||
#define HAVE_SYS_STATVFS_H
|
||||
#define _SVID3
|
||||
#define NEED_H_ERRNO
|
||||
|
||||
/* End */
|
42
OS/unsupported/os.h-cygwin
Normal file
42
OS/unsupported/os.h-cygwin
Normal file
|
@ -0,0 +1,42 @@
|
|||
/* Exim: OS-specific C header file for Cygwin */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/* This code was supplied by Pierre A. Humblet <Pierre.Humblet@ieee.org>
|
||||
December 2002. Updated Jan 2015. */
|
||||
|
||||
/* Redefine the set*id calls to run when faking root */
|
||||
#include <unistd.h> /* Do not redefine in unitsd.h */
|
||||
int cygwin_setuid(uid_t uid );
|
||||
int cygwin_setgid(gid_t gid );
|
||||
#define setuid cygwin_setuid
|
||||
#define setgid cygwin_setgid
|
||||
|
||||
#define os_strsignal strsignal
|
||||
#define OS_STRSIGNAL
|
||||
#define BASE_62 36 /* Windows aliases lower and upper cases in filenames.
|
||||
Consider reducing MAX_LOCALHOST_NUMBER */
|
||||
#define CRYPT_H
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_VFS_H
|
||||
#define NO_IP_VAR_H
|
||||
#define NO_IP_OPTIONS
|
||||
/* Defining LOAD_AVG_NEEDS_ROOT causes an initial
|
||||
call to os_getloadavg. In our case this is beneficial
|
||||
because it initializes the counts */
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
|
||||
typedef struct flock flock_t;
|
||||
|
||||
/* Macro to define variable length SID structures */
|
||||
#define SID(n, name, sid...) \
|
||||
struct { \
|
||||
BYTE Revision; \
|
||||
BYTE SubAuthorityCount; \
|
||||
SID_IDENTIFIER_AUTHORITY IdentifierAuthority; \
|
||||
DWORD SubAuthority[n]; \
|
||||
} name = { SID_REVISION, n, {SECURITY_NT_AUTHORITY}, {sid}}
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
28
OS/unsupported/os.h-mips
Normal file
28
OS/unsupported/os.h-mips
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* Exim: OS-specific C header file for RiscOS4bsd */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#define LOAD_AVG_NEEDS_ROOT
|
||||
#define HAVE_DEV_KMEM
|
||||
#define LOAD_AVG_TYPE long
|
||||
#define LOAD_AVG_SYMBOL "_avenrun"
|
||||
#define KERNEL_PATH "/unix"
|
||||
|
||||
#define HAVE_MMAP
|
||||
#define HAVE_SYS_VFS_H
|
||||
|
||||
#define F_FREESP O_TRUNC
|
||||
#define EXIT_FAILURE 1
|
||||
#define EXIT_SUCCESS 0
|
||||
typedef struct flock flock_t;
|
||||
|
||||
#define STRERROR_FROM_ERRLIST
|
||||
#define memmove(a, b, c) bcopy(b, a, c)
|
||||
|
||||
extern char *strerror(int);
|
||||
extern int sys_nerr;
|
||||
extern char *sys_errlist[];
|
||||
|
||||
/* default is non-const */
|
||||
#define ICONV_ARG2_TYPE const char **
|
||||
|
||||
/* End */
|
351
README
Normal file
351
README
Normal file
|
@ -0,0 +1,351 @@
|
|||
THE EXIM MAIL TRANSFER AGENT VERSION 4
|
||||
--------------------------------------
|
||||
|
||||
Copyright (c) 1995 - 2018 University of Cambridge.
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
See the file NOTICE for conditions of use and distribution.
|
||||
|
||||
There is a book about Exim by Philip Hazel called "The Exim SMTP Mail Server",
|
||||
published by UIT Cambridge in May 2003. This is the official guide for Exim 4.
|
||||
The current edition covers release 4.10 and a few later extensions.
|
||||
|
||||
The O'Reilly book about Exim ("Exim The Mail Transfer Agent" by Philip Hazel)
|
||||
covers Exim 3, which is now deprecated. Exim 4 has a large number of changes
|
||||
from Exim 3, though the basic structure and philosophy remains the same. The
|
||||
older book may be helpful for the background, but a lot of the detail has
|
||||
changed, so it is likely to be confusing to newcomers.
|
||||
|
||||
There is a website at https://www.exim.org; this contains details of the
|
||||
mailing list exim-users@exim.org.
|
||||
|
||||
A copy of the Exim FAQ should be available from the same source that you used
|
||||
to obtain the Exim distribution. Additional formats for the documentation
|
||||
(PostScript, PDF, Texinfo, and HTML) should also be available there.
|
||||
|
||||
|
||||
EXIM DISTRIBUTION
|
||||
-----------------
|
||||
|
||||
Unpacking the tar file should produce a single directory called exim-<version>,
|
||||
containing the following files and directories:
|
||||
|
||||
ACKNOWLEDGMENTS some acknowledgments
|
||||
CHANGES a conventional file name; it indirects to some files in doc/
|
||||
LICENCE the GNU General Public Licence
|
||||
Local/ an empty directory for local configuration files
|
||||
Makefile top level Makefile
|
||||
NOTICE notice about conditions of use
|
||||
OS/ directory containing OS-specific files
|
||||
README this file
|
||||
README.UPDATING special notes about updating from previous versions
|
||||
doc/ directory of documentation files
|
||||
exim_monitor/ directory of source files for the Exim monitor
|
||||
scripts/ directory of scripts used in the build process
|
||||
src/ directory of source files
|
||||
util/ directory of independent utilities
|
||||
|
||||
Please see the documentation files for full instructions on how to build,
|
||||
install, and run Exim. For straightforward installations on operating systems
|
||||
to which Exim has already been ported, the building process is as follows:
|
||||
|
||||
. Ensure that the top-level Exim directory (e.g. exim-4.80) is the current
|
||||
directory (containing the files and directories listed above).
|
||||
|
||||
. Edit the file called src/EDITME and put the result in a new file called
|
||||
Local/Makefile. There are comments in src/EDITME telling you what the various
|
||||
parameters are. You must at least provide values for BIN_DIRECTORY,
|
||||
CONFIGURE_FILE, EXIM_USER and EXIM_GROUP (if EXIM_USER is numeric), and it is
|
||||
recommended that SPOOL_DIRECTORY also be defined here if it is a fixed path.
|
||||
|
||||
. There are a number of additional parameters whose defaults can also be
|
||||
overridden by additions to Local/Makefile. The basic defaults are in
|
||||
OS/Makefile-Default, but these settings are overridden for some operating
|
||||
systems by values on OS/Makefile-<osname>. The most commonly-required change
|
||||
is probably the setting of CC, which defines the command to run the C
|
||||
compiler, and which defaults to gcc. To change it to cc, add the following
|
||||
line to Local/Makefile:
|
||||
|
||||
CC=cc
|
||||
|
||||
If you are running the Berkeley DB package as your dbm library, then it is
|
||||
worth putting USE_DB=yes in Local/Makefile, to get Exim to use the native
|
||||
interface. This is the default for some operating systems. See
|
||||
doc/dbm.discuss.txt for discussion on dbm libraries.
|
||||
|
||||
. If you want to compile the Exim monitor, edit the file called
|
||||
exim_monitor/EDITME and put the result in a file called Local/eximon.conf.
|
||||
If you are not going to compile the Exim monitor, you should have commented
|
||||
out the line starting EXIM_MONITOR= when creating Local/Makefile. There are
|
||||
comments in exim_monitor/EDITME about the values set therein, but in this
|
||||
case everything can be defaulted if you wish.
|
||||
|
||||
. If your system is not POSIX compliant by default, then you might experience
|
||||
fewer problems if you help point the build tools to the POSIX variants. For
|
||||
instance, on Solaris:
|
||||
|
||||
PATH=/usr/xpg4/bin:$PATH make SHELL=/usr/xpg4/bin/sh
|
||||
|
||||
. Type "make". This will determine what your machine's architecture and
|
||||
operating system are, and create a build directory from those names (e.g.
|
||||
"build-SunOS5-sparc"). Symbolic links are created from the build directory
|
||||
to the source directory. A configured make file called <build-dir>/makefile
|
||||
is then created, and "make" then goes on to use this to build various
|
||||
binaries and scripts inside the build directory.
|
||||
|
||||
. Type "make install", while running as root, to install the binaries,
|
||||
scripts, and a default configuration file. To see what this command is
|
||||
going to do before risking it, run "../scripts/exim_install -n" (not as
|
||||
root) from within the build directory.
|
||||
|
||||
. When you are ready to try running Exim, see the section entitled "Testing"
|
||||
in the chapter called "Building and Installing Exim" in doc/spec.txt, or in
|
||||
one of the other forms of the documentation.
|
||||
|
||||
. Running the install script does NOT replace /usr/sbin/sendmail or
|
||||
/usr/lib/sendmail with a link to Exim. That step you must perform by hand
|
||||
when you are satisfied that Exim is running correctly.
|
||||
|
||||
. Note that the default configuration refers to an alias file called
|
||||
/etc/aliases. It used to be the case that every Unix had that file, because
|
||||
it was the Sendmail default. These days, there are systems that don't have
|
||||
/etc/aliases, so you might need to set it up. Your aliases should at least
|
||||
include an alias for "postmaster".
|
||||
|
||||
. Consider notifying users of the change of MTA. Exim has different
|
||||
capabilities, and there are various operational differences, such as stricter
|
||||
adherence to the RFCs than some MTAs, and differences in the text of
|
||||
messages produced by various command-line options.
|
||||
|
||||
. The default configuration file will use your host's fully qualified name (as
|
||||
obtained from the uname() function) as the only local mail domain and as the
|
||||
domain which is used to qualify unqualified local mail addresses. See the
|
||||
comments in the default configuration file if you want to change these.
|
||||
|
||||
The operating systems currently supported are: AIX, BSD/OS (aka BSDI), Darwin
|
||||
(Mac OS X), DGUX, FreeBSD, GNU/Hurd, GNU/Linux, HI-OSF (Hitachi), HP-UX, IRIX,
|
||||
MIPS RISCOS, NetBSD, OpenBSD, QNX, SCO, SCO SVR4.2 (aka UNIX-SV), Solaris (aka
|
||||
SunOS5), SunOS4, Tru64-Unix (formerly Digital Unix, formerly DEC-OSF1), Ultrix,
|
||||
and Unixware. However, code is not available for determining system load
|
||||
averages on Ultrix. There are also configuration files for compiling Exim in
|
||||
the Cygwin environment that can be installed on systems running Windows.
|
||||
However, the documentation supplied with the distribution does not contain any
|
||||
information about running Exim in the Cygwin environment.
|
||||
|
||||
|
||||
******* Modifying the building process ******
|
||||
|
||||
Instructions for overriding the build-time options for Exim are given in the
|
||||
manual. You should never have to modify any of the supplied files; it should be
|
||||
possible to override everything that is necessary by creating suitable files in
|
||||
the Local directory. This means that you won't need to redo your modifications
|
||||
for the next release of Exim. If you find you can't avoid changing some other
|
||||
file, let me know and I'll see if I can find a way of making that unnecessary.
|
||||
|
||||
Briefly, the building process concatenates a number of files in order to
|
||||
construct its working makefile. If <ostype> and <archtype> are the operating
|
||||
system and architecture types respectively, the files used are:
|
||||
|
||||
OS/Makefile-Default
|
||||
OS/Makefile-<ostype>
|
||||
Local/Makefile
|
||||
Local/Makefile-<ostype>
|
||||
Local/Makefile-<archtype>
|
||||
Local/Makefile-<ostype>-<archtype>
|
||||
Local/Makefile-<buildname>
|
||||
OS/Makefile-Base
|
||||
|
||||
Of the Local/* files, only Local/Makefile is required to exist; the rest are
|
||||
optional. Because of the way "make" works, values set in later files override
|
||||
values set in earlier ones. Thus you can set up general options that are
|
||||
overridden for specify operating systems and/or architectures if you wish.
|
||||
|
||||
|
||||
******* IMPORTANT FOR GNU/LINUX USERS *******
|
||||
|
||||
Exim 4 won't work with some versions of Linux if you put its spool directory on
|
||||
an NFS partition. You get an error about "directory sync failed". This is
|
||||
because of a bug in Linux NFS. A fix has been promised in due course. It is in
|
||||
any case much better to put Exim's spool directory on local disc.
|
||||
|
||||
If you get an error complaining about the lack of functions such as dbm_open()
|
||||
when building Exim, the problem is that it hasn't been able to find a DBM
|
||||
library. See the file doc/dbm.discuss.txt for a discussion about the various
|
||||
DBM libraries.
|
||||
|
||||
Different versions of Linux come with different DBM libraries, stored in
|
||||
different places. As well as setting USE_DB=yes in Local/Makefile if Berkeley
|
||||
DB is in use, it may also be necessary to set a value in DBMLIB to specify the
|
||||
inclusion of the DBM library, for example: DBMLIB=-ldb or DBMLIB=-lgdbm.
|
||||
|
||||
If you are using RedHat 7.0, which has DB3 as its DBM library, you need to
|
||||
install the db-devel package before building Exim. This will have a name like
|
||||
db3-devel-3.1.14-16.i386.rpm (but check which release of DB3 you have).
|
||||
|
||||
The building scripts now distinguish between versions of Linux with the older
|
||||
libc5 and the more recent ones that use libc6. In the latter case, USE_DB and
|
||||
-ldb are the default settings, because DB is standard with libc6.
|
||||
|
||||
It appears that with glibc-2.1.x (a minor libc upgrade), they have standardised
|
||||
on Berkeley DB2 (instead of DB1 in glibc-2.0.x). If you want to get DB1 back,
|
||||
you need to set
|
||||
|
||||
INCLUDE=-I/usr/include/db1
|
||||
DBMLIB=-ldb1
|
||||
|
||||
in your Local/Makefile. If you omit DBMLIB=-ldb1 Exim will link successfully
|
||||
using the DB1 compatibility interface to DB2, but it will expect the file
|
||||
format to be that of DB2, and so will not be able to read existing DB1 files.
|
||||
|
||||
|
||||
******* IMPORTANT FOR FREEBSD USERS *******
|
||||
|
||||
On FreeBSD there is a file called /etc/mail/mailer.conf which selects what to
|
||||
run for various MTA calls. Instead of changing /usr/sbin/sendmail, you should
|
||||
edit this file instead, to read something like this:
|
||||
|
||||
sendmail /usr/exim/bin/exim
|
||||
send-mail /usr/exim/bin/exim
|
||||
mailq /usr/exim/bin/exim -bp
|
||||
newaliases /usr/bin/true
|
||||
|
||||
You will most probably need to add the line:
|
||||
|
||||
daily_status_include_submit_mailq="NO" # No separate 'submit' queue
|
||||
|
||||
to /etc/periodic.conf. This stops FreeBSD running the command "mailq -Ac"
|
||||
(which Exim doesn't understand) to list a separate submit queue (which Exim
|
||||
doesn't have).
|
||||
|
||||
If you are using FreeBSD prior to 3.0-RELEASE, and you are not using the ports
|
||||
mechanism to install Exim, then you should install the perl5 package
|
||||
(/usr/local/bin/perl) and use that instead of perl in the base system, which is
|
||||
perl4 up until 3.0-RELEASE. If you are using the ports mechanism, this is
|
||||
handled for you.
|
||||
|
||||
If you are upgrading from version 2.11 of Exim or earlier, and you are using
|
||||
DBM files, and you did not previously have USE_DB=yes in your Local/Makefile,
|
||||
then you will either have to put USE_DB=no in your Local/Makefile or (better)
|
||||
rebuild your DBM data files. The default for FreeBSD has been changed to
|
||||
USE_DB=yes, since FreeBSD comes with Berkeley DB. However, using the native DB
|
||||
interface means that the data files no longer have the ".db" extension.
|
||||
|
||||
|
||||
|
||||
******* IMPORTANT FOR Tru64 (aka Digital Unix aka DEC-OSF1) USERS *******
|
||||
|
||||
The default compiler may not recognize ANSI C by default. You may have to set
|
||||
|
||||
CC=cc
|
||||
CFLAGS=-std1
|
||||
|
||||
in Local/Makefile in order to compile Exim. A user reported another small
|
||||
problem with this operating system: In the file /usr/include/net/if.h a
|
||||
semicolon was missing at the end of line 143.
|
||||
|
||||
|
||||
|
||||
******* IMPORTANT FOR SCO USERS *******
|
||||
|
||||
The building scripts assume the existence of the "ar" command, which is part of
|
||||
the Development System. However, it is also possible to use the "gar" command
|
||||
that is part of the GNU utilities that are distributed with the 5.0.7 release.
|
||||
If you have "gar" and not "ar" you should include
|
||||
|
||||
AR=gar
|
||||
|
||||
in your Local/Makefile.
|
||||
|
||||
|
||||
|
||||
******* IMPORTANT FOR Unixware 2.x USERS *******
|
||||
|
||||
Unixware does not include db/dbm/ndbm with its standard compiler (it is
|
||||
available with /usr/ucb/cc, but that has bugs of its own). You should install
|
||||
gcc and Berkeley DB (or another dbm library if you really insist). If you use a
|
||||
different dbm library you will need to override the default setting of DBMLIB.
|
||||
|
||||
DB 1.85 and 2.x can be found at http://www.sleepycat.com/. They have different
|
||||
characteristics. See the discussion of dbm libraries in doc/dbm.discuss.txt. DB
|
||||
needs to be compiled with gcc and you need a 'cc' in your path before the
|
||||
Unixware CC to compile it.
|
||||
|
||||
Don't bother even starting to install exim on Unixware unless you have
|
||||
installed gcc and use it for everything.
|
||||
|
||||
|
||||
******* IMPORTANT FOR SOLARIS 2.3 (SUNOS 5.3) USERS *******
|
||||
|
||||
The file /usr/include/sysexits.h does not exist on Solaris 2.3 (and presumably
|
||||
earlier versions), though it is present in 2.4 and later versions. To compile
|
||||
Exim on Solaris 2.3 it is necessary to include the line
|
||||
|
||||
CFLAGS=-O -DNO_SYSEXITS -DEX_TEMPFAIL=75
|
||||
|
||||
in your Local/Makefile.
|
||||
|
||||
|
||||
******* IMPORTANT FOR IRIX USERS *******
|
||||
|
||||
There are problems with some versions of gcc on IRIX, as a result of which all
|
||||
DNS lookups yield either 0.0.0.0 or 255.255.255.255. Releases of gcc after
|
||||
2.7.2.3 (which works ok) are affected. Specifically, 2.8.* is affected, as are
|
||||
the 2.95 series. From release 3.21 of Exim, a workaround for this problem
|
||||
should automatically be enabled when Exim is compiled on IRIX using gcc.
|
||||
|
||||
As from version 2.03 there is IRIX-specific code in Exim to obtain a list of
|
||||
all the IP addresses on local interfaces, including alias addresses, because
|
||||
the standard code gives only non-alias addresses in IRIX. The code came from
|
||||
SGI, with the comment:
|
||||
|
||||
"On 6.2 you need the libc patch to get the sysctl() stub and the networking
|
||||
kernel patch to get the support."
|
||||
|
||||
It seems that this code doesn't work on at least some earlier versions of IRIX
|
||||
(e.g. IRIX 5.3). If you can't compile under IRIX and the problem appears to
|
||||
relate to sysctl(), try commenting or #ifdef-ing out all the code in the
|
||||
file OS/os.c-IRIX.
|
||||
|
||||
|
||||
******* IMPORTANT FOR HP-UX USERS *******
|
||||
|
||||
There are two different sets of configuration files for HP-UX. Those ending in
|
||||
HP-UX-9 are used for HP-UX version 9, and have been tested on HP-UX version
|
||||
9.05. Those ending in HP-UX are for later releases, and have been tested on
|
||||
HP-UX version 11.00. If you are using a version of HP-UX between 9.05 and
|
||||
11.00, you may need to edit the file OS/os.h-HP-UX if you encounter problems
|
||||
building Exim.
|
||||
|
||||
If you want to use the Sieve facility in Exim, the alias iso-8859-1 should be
|
||||
added to the alias definition for iso81 in /usr/lib/nls/iconv/config.iconv. You
|
||||
also need to add a new alias definition: "alias utf8 utf-8".
|
||||
|
||||
|
||||
******* IMPORTANT FOR QNX USERS *******
|
||||
|
||||
1. Exim makes some assumptions about the shell in the makefiles. The "normal"
|
||||
QNX shell (ksh) will not work. You need to install "bash", which can be
|
||||
obtained from the QNX freeware on QUICS. Install it to /usr/local/bin/bash
|
||||
Then you need to change the SHELL definition at the top of the main Makefile
|
||||
to SHELL=/usr/local/bin/bash. The file OS/Makefile-QNX sets the variable
|
||||
MAKE_SHELL to /usr/local/bin/bash. If you install bash in a different place,
|
||||
you will need to set MAKE_SHELL in your Local/Makefile in order to override
|
||||
this.
|
||||
|
||||
2. For some strange reason make will fail at building "exim_dbmbuild" when
|
||||
called the first time. However simply calling make a second time will solve
|
||||
the problem. Alternatively, run "make makefile" and then "make".
|
||||
|
||||
|
||||
******* IMPORTANT FOR ULTRIX USERS *******
|
||||
|
||||
You need to set SHELL explicitly in the make call when building on ULTRIX,
|
||||
that is, type "make SHELL=sh5".
|
||||
|
||||
|
||||
******* IMPORTANT FOR GNU/HURD USERS *******
|
||||
|
||||
GNU/Hurd doesn't (at the time of writing, June 1999) have the ioctls for
|
||||
finding out the IP addresses of the local interfaces. You therefore have to set
|
||||
local_interfaces yourself. Otherwise it will treat only 127.0.0.1 as local.
|
||||
|
||||
Philip Hazel
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue