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