This is the mail archive of the cygwin@sources.redhat.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Sendmail 8.11.1 partial port



Well, i got some time last weekend and started up porting sendmail 8.11.1


First i use SleepyCat Berkely DB in rpm format i find somewhere, may be 
sourceforce ?

I'm actually able to "send mail" (this mail is sent using sendmail+mutt over
cygwin 1.1.6), but sendmail returns 71 after sending mail, i'm not too much sure why.

I got problems with Berkely DB, probably beacuse it is 3.1.17 and sendmail 
8.11.1 works with 3.0 (AFAIK), anyway it isn't now the big problem..
I have commented out #O AliasFile=/etc/mail/aliases on .cf file,
 I will look at this problems, but as i said there are other things first.

The big problem now is Permission/(set)[GU]ID/(get)[GU]ID && file locking issues


There are all syslog messages over a mail transaccion:


---
: eBBGGfG00319: from=pruiz@oops.ip6seguridad.com, size=40, class=0, nrcpts=1, msgid=<200012111616.eBBGGfG00319@oops.ip6seguridad.com>, proto=SMTP, daemon=MTA, relay=localhost [127.0.0.1].

: eBBGGfG00319: SYSERR(root): cannot rename(./tfeBBGGfG00319, ./qfeBBGGfG00319), uid=500: Permission denied.

: eBBGGfG00319: to=pci@myrealbox.com, ctladdr=pruiz@oops.ip6seguridad.com (1004/548), delay=00:00:11, xdelay=00:00:02, mailer=esmtp, pri=120040, relay=smtp.myrealbox.com. [192.108.102.201], dsn=2.0.0, stat=Sent (OK).
---

The problem fits on deliver.c but now i got no time to look at this. I have been reading about people trying to port sendmail, and this is my initial work, i wish it can be usefull.


Actualy it runs as TrustedUser=Administrator:Administrators, and it's started
from inetd using srvany.exe

I've tried firedaemon (works with ssh and some other things) but i make some
crap with EventViewer output and i can't see syslog output from sendmail
i must use regedit to correct this.. so i don't recomend using firedaemon.

May when other problems are fixed, it can be modified to run as a service 
itshelf like inetd does.

W/o too much to say.. 

--
Pablo Ruiz Garcia (Pci)
Consultor de Seguridad
IP6 Seguridad. (pruiz@ip6seguridad.com)
Tiger Team (Hax0r Group ;) )



diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/cf/cf/generic-cygwin.cf sendmail-8.11.1-cygwin/cf/cf/generic-cygwin.cf
--- sendmail-8.11.1/cf/cf/generic-cygwin.cf	Thu Jan  1 01:00:00 1970
+++ sendmail-8.11.1-cygwin/cf/cf/generic-cygwin.cf	Thu Dec  7 07:28:25 2000
@@ -0,0 +1,1251 @@
+#
+# Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.
+#	All rights reserved.
+# Copyright (c) 1983, 1995 Eric P. Allman.  All rights reserved.
+# Copyright (c) 1988, 1993
+#	The Regents of the University of California.  All rights reserved.
+#
+# By using this file, you agree to the terms and conditions set
+# forth in the LICENSE file which can be found at the top level of
+# the sendmail distribution.
+#
+#
+
+######################################################################
+######################################################################
+#####
+#####		SENDMAIL CONFIGURATION FILE
+#####
+#####
+######################################################################
+######################################################################
+
+#####  $Id: cfhead.m4,v 8.76.4.13 2000/08/24 17:09:50 gshapiro Exp $  #####
+#####  $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $  #####
+#####  $Id: generic-cygwin.mc,v 1.0 2000/11/04 11:00:05 pruiz Exp $  #####
+
+#####  $Id: cygwin.m4,v 1.0 2000/11/04 11:00:00 pruiz Exp $  #####
+
+
+
+# 
+# 
+#####  $Id: local_procmail.m4,v 8.21 1999/11/18 05:06:23 ca Exp $  #####
+
+
+#####  $Id: generic.m4,v 8.15 1999/04/04 00:51:09 ca Exp $  #####
+
+#####  $Id: redirect.m4,v 8.15 1999/08/06 01:47:36 gshapiro Exp $  #####
+
+#####  $Id: use_cw_file.m4,v 8.9 1999/02/07 07:26:13 gshapiro Exp $  #####
+
+
+#####  $Id: use_cw_file.m4,v 8.9 1999/02/07 07:26:13 gshapiro Exp $  #####
+
+
+
+
+
+#####  $Id: proto.m4,v 8.446.2.5.2.29 2000/09/15 04:45:14 gshapiro Exp $  #####
+
+
+# level 9 config file format
+V9/Berkeley
+
+# override file safeties - setting this option compromises system security,
+# addressing the actual file configuration problem is preferred
+# need to set this before any file actions are encountered in the cf file
+#O DontBlameSendmail=safe
+
+# default LDAP map specification
+# need to set this now before any LDAP maps are defined
+#O LDAPDefaultSpec=-h localhost
+
+##################
+#   local info   #
+##################
+
+Cwlocalhost
+# file containing names of hosts for which we receive email
+Fw/etc/mail/local-host-names
+
+# my official domain name
+# ... define this only if sendmail cannot automatically determine your domain
+#Dj$w.Foo.COM
+
+CP.
+
+# "Smart" relay host (may be null)
+DS
+
+
+# operators that cannot be in local usernames (i.e., network indicators)
+CO @ % !
+
+# a class with just dot (for identifying canonical names)
+C..
+
+# a class with just a left bracket (for identifying domain literals)
+C[[
+
+
+# Resolve map (to check if a host exists in check_mail)
+Kresolve host -a<OK> -T<TEMP>
+
+
+
+# Hosts for which relaying is permitted ($=R)
+FR-o /etc/mail/relay-domains
+
+# arithmetic map
+Karith arith
+
+# who I send unqualified names to (null means deliver locally)
+DR
+
+# who gets all local email traffic ($R has precedence for unqualified names)
+DH
+
+# dequoting map
+Kdequote dequote
+
+# class E: names that should be exposed as from this host, even if we masquerade
+# class L: names that should be delivered locally, even if we have a relay
+# class M: domains that should be converted to $M
+# class N: domains that should not be converted to $M
+#CL root
+CEroot
+
+# who I masquerade as (null for no masquerading) (see also $=M)
+DM
+
+# my name for error messages
+DnMAILER-DAEMON
+
+
+CPREDIRECT
+
+# Configuration version number
+DZ8.11.1
+
+
+###############
+#   Options   #
+###############
+
+# strip message body to 7 bits on input?
+O SevenBitInput=False
+
+# 8-bit data handling
+O EightBitMode=pass8
+
+# wait for alias file rebuild (default units: minutes)
+O AliasWait=10
+
+# location of alias file
+O AliasFile=/etc/mail/aliases
+
+# minimum number of free blocks on filesystem
+O MinFreeBlocks=100
+
+# maximum message size
+#O MaxMessageSize=1000000
+
+# substitution for space (blank) characters
+O BlankSub=.
+
+# avoid connecting to "expensive" mailers on initial submission?
+O HoldExpensive=False
+
+# checkpoint queue runs after every N successful deliveries
+#O CheckpointInterval=10
+
+# default delivery mode
+O DeliveryMode=background
+
+# automatically rebuild the alias database?
+# NOTE: There is a potential for a denial of service attack if this is set.
+#       This option is deprecated and will be removed from a future version.
+#O AutoRebuildAliases=False
+
+# error message header/file
+#O ErrorHeader=/etc/mail/error-header
+
+# error mode
+#O ErrorMode=print
+
+# save Unix-style "From_" lines at top of header?
+#O SaveFromLine=False
+
+# temporary file mode
+O TempFileMode=0600
+
+# match recipients against GECOS field?
+#O MatchGECOS=False
+
+# maximum hop count
+#O MaxHopCount=17
+
+# location of help file
+O HelpFile=/etc/mail/helpfile
+
+# ignore dots as terminators in incoming messages?
+#O IgnoreDots=False
+
+# name resolver options
+#O ResolverOptions=+AAONLY
+
+# deliver MIME-encapsulated error messages?
+O SendMimeErrors=True
+
+# Forward file search path
+O ForwardPath=$z/.forward.$w+$h:$z/.forward+$h:$z/.forward.$w:$z/.forward
+
+# open connection cache size
+O ConnectionCacheSize=2
+
+# open connection cache timeout
+O ConnectionCacheTimeout=5m
+
+# persistent host status directory
+#O HostStatusDirectory=.hoststat
+
+# single thread deliveries (requires HostStatusDirectory)?
+#O SingleThreadDelivery=False
+
+# use Errors-To: header?
+O UseErrorsTo=False
+
+# log level
+O LogLevel=9
+
+# send to me too, even in an alias expansion?
+#O MeToo=True
+
+# verify RHS in newaliases?
+O CheckAliases=False
+
+# default messages to old style headers if no special punctuation?
+O OldStyleHeaders=True
+
+# SMTP daemon options
+O DaemonPortOptions=Name=MTA
+O DaemonPortOptions=Port=587, Name=MSA, M=E
+
+# SMTP client options
+#O ClientPortOptions=Address=0.0.0.0
+
+# privacy flags
+O PrivacyOptions=authwarnings
+
+# who (if anyone) should get extra copies of error messages
+#O PostmasterCopy=Postmaster
+
+# slope of queue-only function
+#O QueueFactor=600000
+
+# queue directory
+O QueueDirectory=/var/spool/mqueue
+
+# timeouts (many of these)
+#O Timeout.initial=5m
+#O Timeout.connect=5m
+#O Timeout.iconnect=5m
+#O Timeout.helo=5m
+#O Timeout.mail=10m
+#O Timeout.rcpt=1h
+#O Timeout.datainit=5m
+#O Timeout.datablock=1h
+#O Timeout.datafinal=1h
+#O Timeout.rset=5m
+#O Timeout.quit=2m
+#O Timeout.misc=2m
+#O Timeout.command=1h
+#O Timeout.ident=5s
+#O Timeout.fileopen=60s
+#O Timeout.control=2m
+O Timeout.queuereturn=5d
+#O Timeout.queuereturn.normal=5d
+#O Timeout.queuereturn.urgent=2d
+#O Timeout.queuereturn.non-urgent=7d
+O Timeout.queuewarn=4h
+#O Timeout.queuewarn.normal=4h
+#O Timeout.queuewarn.urgent=1h
+#O Timeout.queuewarn.non-urgent=12h
+#O Timeout.hoststatus=30m
+#O Timeout.resolver.retrans=5s
+#O Timeout.resolver.retrans.first=5s
+#O Timeout.resolver.retrans.normal=5s
+#O Timeout.resolver.retry=4
+#O Timeout.resolver.retry.first=4
+#O Timeout.resolver.retry.normal=4
+
+# should we not prune routes in route-addr syntax addresses?
+#O DontPruneRoutes=False
+
+# queue up everything before forking?
+O SuperSafe=True
+
+# status file
+O StatusFile=/etc/mail/statistics
+
+# time zone handling:
+#  if undefined, use system default
+#  if defined but null, use TZ envariable passed in
+#  if defined and non-null, use that info
+#O TimeZoneSpec=
+
+# default UID (can be username or userid:groupid)
+#O DefaultUser=mailnull
+
+# list of locations of user database file (null means no lookup)
+#O UserDatabaseSpec=/etc/mail/userdb
+
+# fallback MX host
+#O FallbackMXhost=fall.back.host.net
+
+# if we are the best MX host for a site, try it directly instead of config err
+#O TryNullMXList=False
+
+# load average at which we just queue messages
+#O QueueLA=8
+
+# load average at which we refuse connections
+#O RefuseLA=12
+
+# maximum number of children we allow at one time
+#O MaxDaemonChildren=12
+
+# maximum number of new connections per second
+#O ConnectionRateThrottle=3
+
+# work recipient factor
+#O RecipientFactor=30000
+
+# deliver each queued job in a separate process?
+#O ForkEachJob=False
+
+# work class factor
+#O ClassFactor=1800
+
+# work time factor
+#O RetryFactor=90000
+
+# shall we sort the queue by hostname first?
+#O QueueSortOrder=priority
+
+# minimum time in queue before retry
+#O MinQueueAge=30m
+
+# default character set
+#O DefaultCharSet=iso-8859-1
+
+# service switch file (ignored on Solaris, Ultrix, OSF/1, others)
+#O ServiceSwitchFile=/etc/mail/service.switch
+
+# hosts file (normally /etc/hosts)
+#O HostsFile=/etc/hosts
+
+# dialup line delay on connection failure
+#O DialDelay=10s
+
+# action to take if there are no recipients in the message
+#O NoRecipientAction=add-to-undisclosed
+
+# chrooted environment for writing to files
+#O SafeFileEnvironment=/arch
+
+# are colons OK in addresses?
+#O ColonOkInAddr=True
+
+# how many jobs can you process in the queue?
+#O MaxQueueRunSize=10000
+
+# shall I avoid expanding CNAMEs (violates protocols)?
+#O DontExpandCnames=False
+
+# SMTP initial login message (old $e macro)
+O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
+
+# UNIX initial From header format (old $l macro)
+O UnixFromLine=From $g $d
+
+# From: lines that have embedded newlines are unwrapped onto one line
+#O SingleLineFromHeader=False
+
+# Allow HELO SMTP command that does not include a host name
+#O AllowBogusHELO=False
+
+# Characters to be quoted in a full name phrase (@,;:\()[] are automatic)
+#O MustQuoteChars=.
+
+# delimiter (operator) characters (old $o macro)
+O OperatorChars=.:%@!^/[]+
+
+# shall I avoid calling initgroups(3) because of high NIS costs?
+#O DontInitGroups=False
+
+# are group-writable :include: and .forward files (un)trustworthy?
+#O UnsafeGroupWrites=True
+
+# where do errors that occur when sending errors get sent?
+#O DoubleBounceAddress=postmaster
+
+# where to save bounces if all else fails
+#O DeadLetterDrop=/var/tmp/dead.letter
+
+# what user id do we assume for the majority of the processing?
+#O RunAsUser=sendmail
+
+# maximum number of recipients per SMTP envelope
+#O MaxRecipientsPerMessage=100
+
+# shall we get local names from our installed interfaces?
+#O DontProbeInterfaces=False
+
+# Return-Receipt-To: header implies DSN request
+#O RrtImpliesDsn=False
+
+# override connection address (for testing)
+#O ConnectOnlyTo=0.0.0.0
+
+# Trusted user for file ownership and starting the daemon
+O TrustedUser=administrator
+
+# Control socket for daemon management
+#O ControlSocketName=/var/spool/mqueue/.control
+
+# Maximum MIME header length to protect MUAs
+#O MaxMimeHeaderLength=0/0
+
+# Maximum length of the sum of all headers
+O MaxHeadersLength=32768
+
+# Maximum depth of alias recursion
+#O MaxAliasRecursion=10
+
+# location of pid file
+#O PidFile=/var/run/sendmail.pid
+
+# Prefix string for the process title shown on 'ps' listings
+#O ProcessTitlePrefix=prefix
+
+# Data file (df) memory-buffer file maximum size
+#O DataFileBufferSize=4096
+
+# Transcript file (xf) memory-buffer file maximum size
+#O XscriptFileBufferSize=4096
+
+# list of authentication mechanisms
+#O AuthMechanisms=GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5
+
+# default authentication information for outgoing connections
+#O DefaultAuthInfo=/etc/mail/default-auth-info
+
+# SMTP AUTH flags
+#O AuthOptions
+
+
+
+# CA directory
+#O CACERTPath
+# CA file
+#O CACERTFile
+# Server Cert
+#O ServerCertFile
+# Server private key
+#O ServerKeyFile
+# Client Cert
+#O ClientCertFile
+# Client private key
+#O ClientKeyFile
+# DHParameters (only required if DSA/DH is used)
+#O DHParameters
+# Random data source (required for systems without /dev/urandom under OpenSSL)
+#O RandFile
+
+
+
+###########################
+#   Message precedences   #
+###########################
+
+Pfirst-class=0
+Pspecial-delivery=100
+Plist=-30
+Pbulk=-60
+Pjunk=-100
+
+#####################
+#   Trusted users   #
+#####################
+
+# this is equivalent to setting class "t"
+#Ft/etc/mail/trusted-users
+Troot
+Tdaemon
+Tuucp
+Tadministrator
+
+#########################
+#   Format of headers   #
+#########################
+
+H?P?Return-Path: <$g>
+HReceived: $?sfrom $s $.$?_($?s$|from $.$_)
+	$.$?{auth_type}(authenticated$?{auth_ssf} (${auth_ssf} bits)$.)
+	$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}
+	(using ${tls_version} with cipher ${cipher} (${cipher_bits} bits) verified ${verify})$.$?u
+	for $u; $|;
+	$.$b
+H?D?Resent-Date: $a
+H?D?Date: $a
+H?F?Resent-From: $?x$x <$g>$|$g$.
+H?F?From: $?x$x <$g>$|$g$.
+H?x?Full-Name: $x
+# HPosted-Date: $a
+# H?l?Received-Date: $b
+H?M?Resent-Message-Id: <$t.$i@$j>
+H?M?Message-Id: <$t.$i@$j>
+
+#
+######################################################################
+######################################################################
+#####
+#####			REWRITING RULES
+#####
+######################################################################
+######################################################################
+
+############################################
+###  Ruleset 3 -- Name Canonicalization  ###
+############################################
+Scanonify=3
+
+# handle null input (translate to <@> special case)
+R$@			$@ <@>
+
+# strip group: syntax (not inside angle brackets!) and trailing semicolon
+R$*			$: $1 <@>			mark addresses
+R$* < $* > $* <@>	$: $1 < $2 > $3			unmark <addr>
+R@ $* <@>		$: @ $1				unmark @host:...
+R$* :: $* <@>		$: $1 :: $2			unmark node::addr
+R:include: $* <@>	$: :include: $1			unmark :include:...
+R$* [ IPv6 $- ] <@>	$: $1 [ IPv6 $2 ]		unmark IPv6 addr
+R$* : $* [ $* ]		$: $1 : $2 [ $3 ] <@>		remark if leading colon
+R$* : $* <@>		$: $2				strip colon if marked
+R$* <@>			$: $1				unmark
+R$* ;			   $1				strip trailing semi
+R$* < $* ; >		   $1 < $2 >			bogus bracketed semi
+
+# null input now results from list:; syntax
+R$@			$@ :; <@>
+
+# strip angle brackets -- note RFC733 heuristic to get innermost item
+R$*			$: < $1 >			housekeeping <>
+R$+ < $* >		   < $2 >			strip excess on left
+R< $* > $+		   < $1 >			strip excess on right
+R<>			$@ < @ >			MAIL FROM:<> case
+R< $+ >			$: $1				remove housekeeping <>
+
+# strip route address <@a,@b,@c:user@d> -> <user@d>
+R@ $+ , $+		$2
+R@ $+ : $+		$2
+
+# find focus for list syntax
+R $+ : $* ; @ $+	$@ $>Canonify2 $1 : $2 ; < @ $3 >	list syntax
+R $+ : $* ;		$@ $1 : $2;			list syntax
+
+# find focus for @ syntax addresses
+R$+ @ $+		$: $1 < @ $2 >			focus on domain
+R$+ < $+ @ $+ >		$1 $2 < @ $3 >			move gaze right
+R$+ < @ $+ >		$@ $>Canonify2 $1 < @ $2 >	already canonical
+
+# do some sanity checking
+R$* < @ $* : $* > $*	$1 < @ $2 $3 > $4		nix colons in addrs
+
+# convert old-style addresses to a domain-based address
+R$- ! $+		$@ $>Canonify2 $2 < @ $1 .UUCP >	resolve uucp names
+R$+ . $- ! $+		$@ $>Canonify2 $3 < @ $1 . $2 >		domain uucps
+R$+ ! $+		$@ $>Canonify2 $2 < @ $1 .UUCP >	uucp subdomains
+
+# if we have % signs, take the rightmost one
+R$* % $*		$1 @ $2				First make them all @s.
+R$* @ $* @ $*		$1 % $2 @ $3			Undo all but the last.
+R$* @ $*		$@ $>Canonify2 $1 < @ $2 >	Insert < > and finish
+
+# else we must be a local name
+R$*			$@ $>Canonify2 $1
+
+
+################################################
+###  Ruleset 96 -- bottom half of ruleset 3  ###
+################################################
+
+SCanonify2=96
+
+# handle special cases for local names
+R$* < @ localhost > $*		$: $1 < @ $j . > $2		no domain at all
+R$* < @ localhost . $m > $*	$: $1 < @ $j . > $2		local domain
+R$* < @ localhost . UUCP > $*	$: $1 < @ $j . > $2		.UUCP domain
+
+# check for IPv6 domain literal (save quoted form)
+R$* < @ [ IPv6 $- ] > $*	$: $2 $| $1 < @@ [ $(dequote $2 $) ] > $3	mark IPv6 addr
+R$- $| $* < @@ $=w > $*		$: $2 < @ $j . > $4		self-literal
+R$- $| $* < @@ [ $+ ] > $*	$@ $2 < @ [ IPv6 $1 ] > $4	canon IP addr
+
+# check for IPv4 domain literal
+R$* < @ [ $+ ] > $*		$: $1 < @@ [ $2 ] > $3		mark [a.b.c.d]
+R$* < @@ $=w > $*		$: $1 < @ $j . > $3		self-literal
+R$* < @@ $+ > $*		$@ $1 < @ $2 > $3		canon IP addr
+
+
+
+
+
+# if really UUCP, handle it immediately
+
+# try UUCP traffic as a local address
+R$* < @ $+ . UUCP > $*		$: $1 < @ $[ $2 $] . UUCP . > $3
+R$* < @ $+ . . UUCP . > $*	$@ $1 < @ $2 . > $3
+
+# hostnames ending in class P are always canonical
+R$* < @ $* $=P > $*		$: $1 < @ $2 $3 . > $4
+R$* < @ $* $~P > $*		$: $&{daemon_flags} $| $1 < @ $2 $3 > $4
+R$* CC $* $| $*			$: $3
+# pass to name server to make hostname canonical
+R$* $| $* < @ $* > $*		$: $2 < @ $[ $3 $] > $4
+R$* $| $*			$: $2
+
+# local host aliases and pseudo-domains are always canonical
+R$* < @ $=w > $*		$: $1 < @ $2 . > $3
+R$* < @ $=M > $*		$: $1 < @ $2 . > $3
+R$* < @ $* . . > $*		$1 < @ $2 . > $3
+
+
+##################################################
+###  Ruleset 4 -- Final Output Post-rewriting  ###
+##################################################
+Sfinal=4
+
+R$* <@>			$@				handle <> and list:;
+
+# strip trailing dot off possibly canonical name
+R$* < @ $+ . > $*	$1 < @ $2 > $3
+
+# eliminate internal code
+R$* < @ *LOCAL* > $*	$1 < @ $j > $2
+
+# externalize local domain info
+R$* < $+ > $*		$1 $2 $3			defocus
+R@ $+ : @ $+ : $+	@ $1 , @ $2 : $3		<route-addr> canonical
+R@ $*			$@ @ $1				... and exit
+
+# UUCP must always be presented in old form
+R$+ @ $- . UUCP		$2!$1				u@h.UUCP => h!u
+
+# delete duplicate local names
+R$+ % $=w @ $=w		$1 @ $2				u%host@host => u@host
+
+
+
+##############################################################
+###   Ruleset 97 -- recanonicalize and call ruleset zero   ###
+###		   (used for recursive calls)		   ###
+##############################################################
+
+SRecurse=97
+R$*			$: $>canonify $1
+R$*			$@ $>parse $1
+
+
+######################################
+###   Ruleset 0 -- Parse Address   ###
+######################################
+
+Sparse=0
+
+R$*			$: $>Parse0 $1		initial parsing
+R<@>			$#local $: <@>		special case error msgs
+R$*			$: $>ParseLocal $1	handle local hacks
+R$*			$: $>Parse1 $1		final parsing
+
+#
+#  Parse0 -- do initial syntax checking and eliminate local addresses.
+#	This should either return with the (possibly modified) input
+#	or return with a #error mailer.  It should not return with a
+#	#mailer other than the #error mailer.
+#
+
+SParse0
+R<@>			$@ <@>			special case error msgs
+R$* : $* ; <@>		$#error $@ 5.1.3 $: "501 List:; syntax illegal for recipient addresses"
+R@ <@ $* >		< @ $1 >		catch "@@host" bogosity
+R<@ $+>			$#error $@ 5.1.3 $: "501 User address required"
+R$*			$: <> $1
+R<> $* < @ [ $+ ] > $*	$1 < @ [ $2 ] > $3
+R<> $* <$* : $* > $*	$#error $@ 5.1.3 $: "501 Colon illegal in host name part"
+R<> $*			$1
+R$* < @ . $* > $*	$#error $@ 5.1.2 $: "501 Invalid host name"
+R$* < @ $* .. $* > $*	$#error $@ 5.1.2 $: "501 Invalid host name"
+R$* , $~O $*		$#error $@ 5.1.2 $: "501 Invalid route address"
+
+# now delete the local info -- note $=O to find characters that cause forwarding
+R$* < @ > $*		$@ $>Parse0 $>canonify $1	user@ => user
+R< @ $=w . > : $*	$@ $>Parse0 $>canonify $2	@here:... -> ...
+R$- < @ $=w . >		$: $(dequote $1 $) < @ $2 . >	dequote "foo"@here
+R< @ $+ >		$#error $@ 5.1.3 $: "501 User address required"
+R$* $=O $* < @ $=w . >	$@ $>Parse0 $>canonify $1 $2 $3	...@here -> ...
+R$- 			$: $(dequote $1 $) < @ *LOCAL* >	dequote "foo"
+R< @ *LOCAL* >		$#error $@ 5.1.3 $: "501 User address required"
+R$* $=O $* < @ *LOCAL* >
+			$@ $>Parse0 $>canonify $1 $2 $3	...@*LOCAL* -> ...
+R$* < @ *LOCAL* >	$: $1
+
+#
+#  Parse1 -- the bottom half of ruleset 0.
+#
+
+SParse1
+
+# handle numeric address spec
+R$* < @ [ $+ ] > $*	$: $>ParseLocal $1 < @ [ $2 ] > $3	numeric internet spec
+R$* < @ [ $+ ] > $*	$1 < @ [ $2 ] : $S > $3		Add smart host to path
+R$* < @ [ IPv6 $- ] : > $*
+		$#esmtp $@ [ $(dequote $2 $) ] $: $1 < @ [IPv6 $2 ] > $3	no smarthost: send
+R$* < @ [ $+ ] : > $*	$#esmtp $@ [$2] $: $1 < @ [$2] > $3	no smarthost: send
+R$* < @ [ $+ ] : $- : $*> $*	$#$3 $@ $4 $: $1 < @ [$2] > $5	smarthost with mailer
+R$* < @ [ $+ ] : $+ > $*	$#esmtp $@ $3 $: $1 < @ [$2] > $4	smarthost without mailer
+
+
+# short circuit local delivery so forwarded email works
+
+
+R$=L < @ $=w . >	$#local $: @ $1			special local names
+R$+ < @ $=w . >		$#local $: $1			regular local name
+
+
+# resolve remotely connected UUCP links (if any)
+
+# resolve fake top level domains by forwarding to other hosts
+
+
+
+# pass names that still have a host to a smarthost (if defined)
+R$* < @ $* > $*		$: $>MailerToTriple < $S > $1 < @ $2 > $3	glue on smarthost name
+
+# deal with other remote names
+R$* < @$* > $*		$#esmtp $@ $2 $: $1 < @ $2 > $3	user@host.domain
+
+# handle locally delivered names
+R$=L			$#local $: @ $1		special local names
+R$+			$#local $: $1			regular local names
+
+###########################################################################
+###   Ruleset 5 -- special rewriting after aliases have been expanded   ###
+###########################################################################
+
+SLocal_localaddr
+Slocaladdr=5
+R$+			$: $1 $| $>"Local_localaddr" $1
+R$+ $| $#$*		$#$2
+R$+ $| $*		$: $1
+
+
+
+
+# deal with plussed users so aliases work nicely
+R$+ + *			$#local $@ $&h $: $1
+R$+ + $*		$#local $@ + $2 $: $1 + *
+
+# prepend an empty "forward host" on the front
+R$+			$: <> $1
+
+
+# see if we have a relay or a hub
+R< > $+			$: < $H > $1			try hub
+R< > $+			$: < $R > $1			try relay
+
+R< > $+			$: < > < $1 <> $&h >		nope, restore +detail
+R< > < $+ <> + $* >	$: < > < $1 + $2 >		check whether +detail
+R< > < $+ <> $* >	$: < > < $1 >			else discard
+R< > < $+ + $* > $*	   < > < $1 > + $2 $3		find the user part
+R< > < $+ > + $*	$#local $@ $2 $: @ $1		strip the extra +
+R< > < $+ >		$@ $1				no +detail
+R$+			$: $1 <> $&h			add +detail back in
+R$+ <> + $*		$: $1 + $2			check whether +detail
+R$+ <> $*		$: $1				else discard
+R< local : $* > $*	$: $>MailerToTriple < local : $1 > $2	no host extension
+R< error : $* > $*	$: $>MailerToTriple < error : $1 > $2	no host extension
+R< $- : $+ > $+		$: $>MailerToTriple < $1 : $2 > $3 < @ $2 >
+R< $+ > $+		$@ $>MailerToTriple < $1 > $2 < @ $1 >
+
+
+###################################################################
+###  Ruleset 95 -- canonify mailer:[user@]host syntax to triple	###
+###################################################################
+
+SMailerToTriple=95
+R< > $*				$@ $1			strip off null relay
+R< error : $-.$-.$- : $+ > $* 	$#error $@ $1.$2.$3 $: $4
+R< error : $- $+ > $*		$#error $@ $(dequote $1 $) $: $2
+R< local : $* > $*		$>CanonLocal < $1 > $2
+R< $- : $+ @ $+ > $*<$*>$*	$# $1 $@ $3 $: $2<@$3>	use literal user
+R< $- : $+ > $*			$# $1 $@ $2 $: $3	try qualified mailer
+R< $=w > $*			$@ $2			delete local host
+R< [ IPv6 $+ ] > $*		$#relay $@ $(dequote $1 $) $: $2	use unqualified mailer
+R< $+ > $*			$#relay $@ $1 $: $2	use unqualified mailer
+
+###################################################################
+###  Ruleset CanonLocal -- canonify local: syntax		###
+###################################################################
+
+SCanonLocal
+# strip local host from routed addresses
+R< $* > < @ $+ > : $+		$@ $>Recurse $3
+R< $* > $+ $=O $+ < @ $+ >	$@ $>Recurse $2 $3 $4
+
+# strip trailing dot from any host name that may appear
+R< $* > $* < @ $* . >		$: < $1 > $2 < @ $3 >
+
+# handle local: syntax -- use old user, either with or without host
+R< > $* < @ $* > $*		$#local $@ $1@$2 $: $1
+R< > $+				$#local $@ $1    $: $1
+
+# handle local:user@host syntax -- ignore host part
+R< $+ @ $+ > $* < @ $* >	$: < $1 > $3 < @ $4 >
+
+# handle local:user syntax
+R< $+ > $* <@ $* > $*		$#local $@ $2@$3 $: $1
+R< $+ > $* 			$#local $@ $2    $: $1
+
+###################################################################
+###  Ruleset 93 -- convert header names to masqueraded form	###
+###################################################################
+
+SMasqHdr=93
+
+
+# do not masquerade anything in class N
+R$* < @ $* $=N . >	$@ $1 < @ $2 $3 . >
+
+# special case the users that should be exposed
+R$=E < @ *LOCAL* >	$@ $1 < @ $j . >		leave exposed
+R$=E < @ $=M . >	$@ $1 < @ $2 . >
+R$=E < @ $=w . >	$@ $1 < @ $2 . >
+
+# handle domain-specific masquerading
+R$* < @ $=M . > $*	$: $1 < @ $2 . @ $M > $3	convert masqueraded doms
+R$* < @ $=w . > $*	$: $1 < @ $2 . @ $M > $3
+R$* < @ *LOCAL* > $*	$: $1 < @ $j . @ $M > $2
+R$* < @ $+ @ > $*	$: $1 < @ $2 > $3		$M is null
+R$* < @ $+ @ $+ > $*	$: $1 < @ $3 . > $4		$M is not null
+
+###################################################################
+###  Ruleset 94 -- convert envelope names to masqueraded form	###
+###################################################################
+
+SMasqEnv=94
+R$* < @ *LOCAL* > $*	$: $1 < @ $j . > $2
+
+###################################################################
+###  Ruleset 98 -- local part of ruleset zero (can be null)	###
+###################################################################
+
+SParseLocal=98
+
+# addresses sent to foo@host.REDIRECT will give a 551 error code
+R$* < @ $+ .REDIRECT. >		$: $1 < @ $2 . REDIRECT . > < ${opMode} >
+R$* < @ $+ .REDIRECT. > <i>	$: $1 < @ $2 . REDIRECT. >
+R$* < @ $+ .REDIRECT. > < $- >	$#error $@ 5.1.1 $: "551 User has moved; please try " <$1@$2>
+
+
+
+
+
+######################################################################
+###  CanonAddr --	Convert an address into a standard form for
+###			relay checking.  Route address syntax is
+###			crudely converted into a %-hack address.
+###
+###	Parameters:
+###		$1 -- full recipient address
+###
+###	Returns:
+###		parsed address, not in source route form
+######################################################################
+
+SCanonAddr
+R$*			$: $>Parse0 $>canonify $1	make domain canonical
+
+
+######################################################################
+###  ParseRecipient --	Strip off hosts in $=R as well as possibly
+###			$* $=m or the access database.
+###			Check user portion for host separators.
+###
+###	Parameters:
+###		$1 -- full recipient address
+###
+###	Returns:
+###		parsed, non-local-relaying address
+######################################################################
+
+SParseRecipient
+R$*				$: <?> $>CanonAddr $1
+R<?> $* < @ $* . >		<?> $1 < @ $2 >			strip trailing dots
+R<?> $- < @ $* >		$: <?> $(dequote $1 $) < @ $2 >	dequote local part
+
+# if no $=O character, no host in the user portion, we are done
+R<?> $* $=O $* < @ $* >		$: <NO> $1 $2 $3 < @ $4>
+R<?> $*				$@ $1
+
+
+
+R<NO> $* < @ $* $=R >		$: <RELAY> $1 < @ $2 $3 >
+
+
+R<RELAY> $* < @ $* >		$@ $>ParseRecipient $1
+R<$-> $*			$@ $2
+
+
+######################################################################
+###  check_relay -- check hostname/address on SMTP startup
+######################################################################
+
+SLocal_check_relay
+Scheck_relay
+R$*			$: $1 $| $>"Local_check_relay" $1
+R$* $| $* $| $#$*	$#$3
+R$* $| $* $| $*		$@ $>"Basic_check_relay" $1 $| $2
+
+SBasic_check_relay
+# check for deferred delivery mode
+R$*			$: < ${deliveryMode} > $1
+R< d > $*		$@ deferred
+R< $* > $*		$: $2
+
+
+
+
+######################################################################
+###  check_mail -- check SMTP `MAIL FROM:' command argument
+######################################################################
+
+SLocal_check_mail
+Scheck_mail
+R$*			$: $1 $| $>"Local_check_mail" $1
+R$* $| $#$*		$#$2
+R$* $| $*		$@ $>"Basic_check_mail" $1
+
+SBasic_check_mail
+# check for deferred delivery mode
+R$*			$: < ${deliveryMode} > $1
+R< d > $*		$@ deferred
+R< $* > $*		$: $2
+
+# authenticated?
+R$*			$: $1 $| $>"tls_client" $&{verify} $| MAIL
+R$* $| $#$+		$#$2
+R$* $| $*		$: $1
+
+R<>			$@ <OK>			we MUST accept <> (RFC 1123)
+R$+			$: <?> $1
+R<?><$+>		$: <@> <$1>
+R<?>$+			$: <@> <$1>
+R$*			$: $&{daemon_flags} $| $1
+R$* f $* $| <@> < $* @ $- >	$: < ? $&{client_name} > < $3 @ $4 >
+R$* u $* $| <@> < $* >	$: <?> < $3 >
+R$* $| $*		$: $2
+# handle case of @localhost on address
+R<@> < $* @ localhost >	$: < ? $&{client_name} > < $1 @ localhost >
+R<@> < $* @ [127.0.0.1] >
+			$: < ? $&{client_name} > < $1 @ [127.0.0.1] >
+R<@> < $* @ localhost.$m >
+			$: < ? $&{client_name} > < $1 @ localhost.$m >
+R<@> < $* @ localhost.UUCP >
+			$: < ? $&{client_name} > < $1 @ localhost.UUCP >
+R<@> $*			$: $1			no localhost as domain
+R<? $=w> $*		$: $2			local client: ok
+R<? $+> <$+>		$#error $@ 5.5.4 $: "501 Real domain name required for sender address"
+R<?> $*			$: $1
+R$*			$: <?> $>CanonAddr $1		canonify sender address and mark it
+R<?> $* < @ $+ . >	<?> $1 < @ $2 >			strip trailing dots
+# handle non-DNS hostnames (*.bitnet, *.decnet, *.uucp, etc)
+R<?> $* < @ $* $=P >	$: <OK> $1 < @ $2 $3 >
+R<?> $* < @ $+ >	$: <? $(resolve $2 $: $2 <PERM> $) > $1 < @ $2 >
+R<? $* <$->> $* < @ $+ >
+			$: <$2> $3 < @ $4 >
+
+
+# handle case of no @domain on address
+R<?> $*			$: $&{daemon_flags} $| <?> $1
+R$* u $* $| <?> $*	$: <OK> $3
+R$* $| $*		$: $2
+R<?> $*			$: < ? $&{client_name} > $1
+R<?> $*			$@ <OK>				...local unqualed ok
+R<? $+> $*		$#error $@ 5.5.4 $: "501 Domain name required for sender address " $&f
+							...remote is not
+# check results
+R<?> $*			$: @ $1		mark address: nothing known about it
+R<OK> $*		$@ <OK>
+R<TEMP> $*		$#error $@ 4.1.8 $: "451 Domain of sender address " $&f " does not resolve"
+R<PERM> $*		$#error $@ 5.1.8 $: "501 Domain of sender address " $&f " does not exist"
+
+######################################################################
+###  check_rcpt -- check SMTP `RCPT TO:' command argument
+######################################################################
+
+SLocal_check_rcpt
+Scheck_rcpt
+R$*			$: $1 $| $>"Local_check_rcpt" $1
+R$* $| $#$*		$#$2
+R$* $| $*		$@ $>"Basic_check_rcpt" $1
+
+SBasic_check_rcpt
+# check for deferred delivery mode
+R$*			$: < ${deliveryMode} > $1
+R< d > $*		$@ deferred
+R< $* > $*		$: $2
+
+
+R$*			$: $>ParseRecipient $1		strip relayable hosts
+
+
+
+
+
+# authenticated?
+R$*		$: $1 $| $>RelayAuth $1 $| $&{verify}	client authenticated?
+R$* $| $# $+		$# $2				error/ok?
+R$* $| $*		$: $1				no
+
+# authenticated by a trusted mechanism?
+R$*			$: $1 $| $&{auth_type}
+R$* $|			$: $1
+R$* $| $={TrustAuthMech}	$# RELAYAUTH
+R$* $| $*		$: $1
+# anything terminating locally is ok
+R$+ < @ $=w >		$@ RELAYTO
+R$+ < @ $* $=R >	$@ RELAYTO
+
+
+
+# check for local user (i.e. unqualified address)
+R$*			$: <?> $1
+R<?> $* < @ $+ >	$: <REMOTE> $1 < @ $2 >
+# local user is ok
+R<?> $+			$@ RELAYTOLOCAL
+R<$+> $*		$: $2
+
+# anything originating locally is ok
+# check IP address
+R$*			$: $&{client_addr}
+R$@			$@ RELAYFROM		originated locally
+R0			$@ RELAYFROM		originated locally
+R$=R $*			$@ RELAYFROM		relayable IP address
+R$*			$: [ $1 ]		put brackets around it...
+R$=w			$@ RELAYFROM		... and see if it is local
+
+
+# check client name: first: did it resolve?
+R$*			$: < $&{client_resolve} >
+R<TEMP>			$#error $@ 4.7.1 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
+R<FORGED>		$#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_name}
+R<FAIL>			$#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name}
+R$*			$: <?> $&{client_name}
+# pass to name server to make hostname canonical
+R<?> $* $~P 		$:<?>  $[ $1 $2 $]
+R$* .			$1			strip trailing dots
+R<?>			$@ RELAYFROM
+R<?> $=w		$@ RELAYFROM
+R<?> $* $=R			$@ RELAYFROM
+
+# anything else is bogus
+R$*			$#error $@ 5.7.1 $: "550 Relaying denied"
+
+
+# is user trusted to authenticate as someone else?
+Strust_auth
+R$*			$: $&{auth_type} $| $1
+# required by RFC 2554 section 4.
+R$@ $| $*		$#error $@ 5.7.1 $: "550 not authenticated"
+R$* $| $&{auth_authen}		$@ identical
+R$* $| <$&{auth_authen}>	$@ identical
+R$* $| $*		$: $1 $| $>"Local_trust_auth" $1
+R$* $| $#$*		$#$2
+R$*			$#error $@ 5.7.1 $: "550 " $&{auth_authen} " not allowed to act as " $&{auth_author}
+
+SLocal_trust_auth
+
+
+# is connection with client "good" enough? (done in server)
+# input: ${verify} $| (MAIL|STARTTLS)
+Stls_client
+R$* $| $*	$@ $>"tls_connection" $1
+
+# is connection with server "good" enough? (done in client)
+# input: ${verify}
+Stls_server
+R$*		$@ $>"tls_connection" $1
+
+Stls_connection
+RSOFTWARE	$#error $@ 4.7.0 $: "403 TLS handshake."
+
+SRelayAuth
+# authenticated?
+R$* $| OK		$: $1
+R$* $| $*		$@ NO		not authenticated
+
+
+#
+######################################################################
+######################################################################
+#####
+#####			MAILER DEFINITIONS
+#####
+######################################################################
+######################################################################
+
+
+##################################################
+###   Local and Program Mailer specification   ###
+##################################################
+
+#####  $Id: local.m4,v 8.50.16.2 2000/09/17 17:04:22 gshapiro Exp $  #####
+
+#
+#  Envelope sender rewriting
+#
+SEnvFromL=10
+R<@>			$n			errors to mailer-daemon
+R@ <@ $*>		$n			temporarily bypass Sun bogosity
+R$+			$: $>AddDomain $1	add local domain if needed
+R$*			$: $>MasqEnv $1		do masquerading
+
+#
+#  Envelope recipient rewriting
+#
+SEnvToL=20
+R$+ < @ $* >		$: $1			strip host part
+
+#
+#  Header sender rewriting
+#
+SHdrFromL=30
+R<@>			$n			errors to mailer-daemon
+R@ <@ $*>		$n			temporarily bypass Sun bogosity
+R$+			$: $>AddDomain $1	add local domain if needed
+R$*			$: $>MasqHdr $1		do masquerading
+
+#
+#  Header recipient rewriting
+#
+SHdrToL=40
+R$+			$: $>AddDomain $1	add local domain if needed
+R$* < @ *LOCAL* > $*	$: $1 < @ $j . > $2
+
+#
+#  Common code to add local domain name (only if always-add-domain)
+#
+SAddDomain=50
+
+Mlocal,		P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
+		T=DNS/RFC822/X-Unix,
+		A=procmail -Y -a $h -d $u
+Mprog,		P=/bin/sh, F=lsDFMoqeu9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, D=$z:/,
+		T=X-Unix/X-Unix/X-Unix,
+		A=sh -c $u
+
+#####################################
+###   SMTP Mailer specification   ###
+#####################################
+
+#####  $Id: smtp.m4,v 8.56.2.1.2.3 2000/09/25 13:53:27 ca Exp $  #####
+
+#
+#  common sender and masquerading recipient rewriting
+#
+SMasqSMTP=61
+R$* < @ $* > $*		$@ $1 < @ $2 > $3		already fully qualified
+R$+			$@ $1 < @ *LOCAL* >		add local qualification
+
+#
+#  convert pseudo-domain addresses to real domain addresses
+#
+SPseudoToReal=51
+
+# pass <route-addr>s through
+R< @ $+ > $*		$@ < @ $1 > $2			resolve <route-addr>
+
+# output fake domains as user%fake@relay
+
+# do UUCP heuristics; note that these are shared with UUCP mailers
+R$+ < @ $+ .UUCP. >	$: < $2 ! > $1			convert to UUCP form
+R$+ < @ $* > $*		$@ $1 < @ $2 > $3		not UUCP form
+
+# leave these in .UUCP form to avoid further tampering
+R< $&h ! > $- ! $+	$@ $2 < @ $1 .UUCP. >
+R< $&h ! > $-.$+ ! $+	$@ $3 < @ $1.$2 >
+R< $&h ! > $+		$@ $1 < @ $&h .UUCP. >
+R< $+ ! > $+		$: $1 ! $2 < @ $Y >		use UUCP_RELAY
+R$+ < @ $+ : $+ >	$@ $1 < @ $3 >			strip mailer: part
+R$+ < @ >		$: $1 < @ *LOCAL* >		if no UUCP_RELAY
+
+
+#
+#  envelope sender rewriting
+#
+SEnvFromSMTP=11
+R$+			$: $>PseudoToReal $1		sender/recipient common
+R$* :; <@>		$@				list:; special case
+R$*			$: $>MasqSMTP $1		qualify unqual'ed names
+R$+			$: $>MasqEnv $1			do masquerading
+
+
+#
+#  envelope recipient rewriting --
+#  also header recipient if not masquerading recipients
+#
+SEnvToSMTP=21
+R$+			$: $>PseudoToReal $1		sender/recipient common
+R$+			$: $>MasqSMTP $1		qualify unqual'ed names
+R$* < @ *LOCAL* > $*	$: $1 < @ $j . > $2
+
+#
+#  header sender and masquerading header recipient rewriting
+#
+SHdrFromSMTP=31
+R$+			$: $>PseudoToReal $1		sender/recipient common
+R:; <@>			$@				list:; special case
+
+# do special header rewriting
+R$* <@> $*		$@ $1 <@> $2			pass null host through
+R< @ $* > $*		$@ < @ $1 > $2			pass route-addr through
+R$*			$: $>MasqSMTP $1		qualify unqual'ed names
+R$+			$: $>MasqHdr $1			do masquerading
+
+
+#
+#  relay mailer header masquerading recipient rewriting
+#
+SMasqRelay=71
+R$+			$: $>MasqSMTP $1
+R$+			$: $>MasqHdr $1
+
+Msmtp,		P=[IPC], F=mDFMuX, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
+		T=DNS/RFC822/SMTP,
+		A=TCP $h
+Mesmtp,		P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
+		T=DNS/RFC822/SMTP,
+		A=TCP $h
+Msmtp8,		P=[IPC], F=mDFMuX8, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
+		T=DNS/RFC822/SMTP,
+		A=TCP $h
+Mdsmtp,		P=[IPC], F=mDFMuXa%, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
+		T=DNS/RFC822/SMTP,
+		A=TCP $h
+Mrelay,		P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2040,
+		T=DNS/RFC822/SMTP,
+		A=TCP $h
+
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/cf/cf/generic-cygwin.mc sendmail-8.11.1-cygwin/cf/cf/generic-cygwin.mc
--- sendmail-8.11.1/cf/cf/generic-cygwin.mc	Thu Jan  1 01:00:00 1970
+++ sendmail-8.11.1-cygwin/cf/cf/generic-cygwin.mc	Mon Dec  4 18:03:51 2000
@@ -0,0 +1,8 @@
+divert(0)dnl
+VERSIONID(`$Id: generic-cygwin.mc,v 1.0 2000/11/04 11:00:05 pruiz Exp $')
+OSTYPE(cygwin)dnl
+DOMAIN(generic)dnl
+MAILER(local)dnl
+MAILER(smtp)dnl
+FEATURE(use_cw_file)
+
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/cf/ostype/cygwin.m4 sendmail-8.11.1-cygwin/cf/ostype/cygwin.m4
--- sendmail-8.11.1/cf/ostype/cygwin.m4	Thu Jan  1 01:00:00 1970
+++ sendmail-8.11.1-cygwin/cf/ostype/cygwin.m4	Thu Dec  7 07:03:59 2000
@@ -0,0 +1,22 @@
+divert(-1)
+#
+# Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.
+#	All rights reserved.
+# Copyright (c) 1983 Eric P. Allman.  All rights reserved.
+# Copyright (c) 1988, 1993
+#	The Regents of the University of California.  All rights reserved.
+#
+# By using this file, you agree to the terms and conditions set
+# forth in the LICENSE file which can be found at the top level of
+# the sendmail distribution.
+#
+#
+
+divert(0)
+VERSIONID(`$Id: cygwin.m4,v 1.0 2000/11/04 11:00:00 pruiz Exp $')
+define(`confEBINDIR', `/usr/libexec')
+define(`confTRUSTED_USERS', `administrator')
+define(`confTRUSTED_USER', `administrator')
+# ifdef(`PROCMAIL_MAILER_PATH',,
+# 	define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail'))
+# FEATURE(local_procmail)
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/devtools/OS/CYGWIN32 sendmail-8.11.1-cygwin/devtools/OS/CYGWIN32
--- sendmail-8.11.1/devtools/OS/CYGWIN32	Thu Jan  1 01:00:00 1970
+++ sendmail-8.11.1-cygwin/devtools/OS/CYGWIN32	Thu Dec  7 16:29:33 2000
@@ -0,0 +1,40 @@
+#	@(#)CygWin32	8.4	(Berkeley)	3/22/98
+
+define(`confHFDIR', `/usr/lib')
+define(`confCC', `gcc')
+define(`confDEPEND_TYPE', `CC-M')
+define(`confLIBS', `-ladvapi32')
+define(`confMANROOT', `/usr/man/man')
+define(`confENVDEF', `-DNETUNIX=0')
+define(`confMBINDIR', `/usr/sbin')
+define(`confUBINDIR', `/usr/bin')
+define(`confSBINDIR', `/usr/sbin')
+define(`confEBINDIR', `/usr/libexec')
+define(`confMANOWN', `Administrator')
+define(`confMANGRP', `Administrators')
+define(`confSBINOWN', `Administrator')
+define(`confSBINGRP', `Administrators')
+define(`confUBINOWN', `Administrator')
+define(`confUBINGRP', `Administrators')
+APPENDDEF(`confLIBSEARCH', `crypt')
+
+ifelse(confBLDVARIANT, `DEBUG',
+dnl Debug build
+`
+        define(`confOPTIMIZE',`-g3 -ggdb3')
+',
+dnl Optimized build
+confBLDVARIANT, `OPTIMIZED',
+`
+        define(`confOPTIMIZE',`-O2')
+',
+dnl Purify build
+confBLDVARIANT, `PURIFY',
+`
+        define(`confOPTIMIZE',`-g')
+',
+dnl default
+`
+        define(`confOPTIMIZE',`-O')
+')
+
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/devtools/bin/Build sendmail-8.11.1-cygwin/devtools/bin/Build
--- sendmail-8.11.1/devtools/bin/Build	Fri Jul 14 07:30:15 2000
+++ sendmail-8.11.1-cygwin/devtools/bin/Build	Mon Dec  4 15:39:32 2000
@@ -296,9 +296,9 @@
 	rel=`/usr/apollo/bin/bldt | grep Domain | awk '{ print $4 }' | sed -e 's/,//g'`
 elif [ `uname` = "CYGWIN_NT-4.0" -o `uname` = "CYGWIN_NT-5.0" ]
 then
-	# Windows NT 4.0 or Windows 2000
+	# Windows NT 4.0 or Windows 2000 -- False CYGWIN != W_NT
 	arch=`uname -m | sed -e 's/ //g' -e 's/\//-/g'`
-	os=`uname -s | sed -e 's/CYG//g' -e 's/ //g' -e 's/_//g' -e 's/-/./g'`
+	os=`uname -s | sed -e 's/ //g' -e 's/-/./g'`
 	rel=`uname -r | sed -e 's/(/_/g' -e 's/)//g' -e 's/ //g' -e 's/\//-/g'` 
 fi
 
@@ -385,6 +385,7 @@
 		;;
   IRIX*)	rel=`echo $rel | sed -e 's/-.*$//'`;;
   NeXT)		mkdir="mkdirs";;
+  CYGWIN*)	os=CYGWIN32;;
 esac
 
 # get "base part" of operating system release
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/libsmutil/safefile.c sendmail-8.11.1-cygwin/libsmutil/safefile.c
--- sendmail-8.11.1/libsmutil/safefile.c	Thu Sep  7 04:57:37 2000
+++ sendmail-8.11.1-cygwin/libsmutil/safefile.c	Wed Dec  6 04:18:47 2000
@@ -193,7 +193,7 @@
 		errno = 0;
 		if (!bitset(SFF_CREAT, flags) || file_errno != ENOENT)
 			return ret;
-
+#ifndef __CYGWIN32__
 		/* check to see if legal to create the file */
 		p = strrchr(dir, '/');
 		if (p == NULL)
@@ -239,6 +239,7 @@
 			if ((stbuf.st_mode & md) != md)
 				errno = EACCES;
 		}
+#endif
 		ret = errno;
 		if (tTd(44, 4))
 			dprintf("\t[final dir %s uid %d mode %lo] %s\n",
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/mail.local/mail.local.c sendmail-8.11.1-cygwin/mail.local/mail.local.c
--- sendmail-8.11.1/mail.local/mail.local.c	Fri Sep 22 18:30:09 2000
+++ sendmail-8.11.1-cygwin/mail.local/mail.local.c	Wed Dec  6 03:30:44 2000
@@ -121,6 +121,12 @@
 #  define USE_VSYSLOG	0
 # endif /* DGUX */
 
+# ifdef __CYGWIN32__
+#  define USE_SETEUID	1
+#  define USE_VSYSLOG   0
+#  define _PATH_MAILDIR "/usr/spool/mail"
+# endif
+
 # if defined(_CRAY)
 #  if !defined(MAXPATHLEN)
 #   define MAXPATHLEN PATHSIZE
@@ -207,7 +213,7 @@
 
 # if !HASSNPRINTF
 extern int	snprintf __P((char *, size_t, const char *, ...));
-#  ifndef _CRAY
+#  if !defined (_CRAY) && !defined (__CYGWIN32__)
 extern int	vsnprintf __P((char *, size_t, const char *, ...));
 #  endif /* ! _CRAY */
 # endif /* !HASSNPRINTF */
@@ -920,6 +926,9 @@
 #endif /* CONTENTLENGTH */
 	char biffmsg[100], buf[8*1024];
 	extern char *quad_to_string();
+#ifdef __CYGWIN32__
+                struct flock cntrl;
+#endif
 
 
 	/*
@@ -1121,7 +1130,12 @@
 
 
 	/* Wait until we can get a lock on the file. */
-	if (flock(mbfd, LOCK_EX) < 0)
+#ifndef __CYGWIN32__
+	if (flock(mbfd, LOCK_EX) < 0) 
+#else
+	cntrl.l_type=F_WRLCK; // exclusive lock
+	if (fcntl(mbfd,F_SETLK,&cntrl < 0))
+#endif
 	{
 		mailerr("450 4.2.0", "%s: %s", path, errstring(errno));
 		goto err1;
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/sendmail/conf.c sendmail-8.11.1-cygwin/sendmail/conf.c
--- sendmail-8.11.1/sendmail/conf.c	Sat Sep 23 18:54:01 2000
+++ sendmail-8.11.1-cygwin/sendmail/conf.c	Mon Dec  4 17:34:02 2000
@@ -33,7 +33,9 @@
 static void	setupmaps __P((void));
 static void	setupmailers __P((void));
 static int	get_num_procs_online __P((void));
-
+#ifdef __CYGWIN32__
+extern __declspec(dllimport) int h_errno;
+#endif
 
 /*
 **  CONF.C -- Sendmail Configuration Tables.
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/sendmail/conf.h sendmail-8.11.1-cygwin/sendmail/conf.h
--- sendmail-8.11.1/sendmail/conf.h	Wed Aug  9 18:14:39 2000
+++ sendmail-8.11.1-cygwin/sendmail/conf.h	Thu Dec  7 06:29:37 2000
@@ -917,6 +917,31 @@
 # define _FILE_H_INCLUDED
 #endif /* defined(__QNX__) */
 
+/* Cygwin32 */
+#ifdef  __CYGWIN32__
+# define LA_TYPE        LA_ZERO
+# define HASSETREUID    0       /* has setreuid(2) call */
+# define HASUNAME       1       /* use System V uname(2) system call */
+# define HASSETSID      1       /* has Posix setsid(2) call */
+# define HASINITGROUPS  0       /* has initgroups(3) call */
+# define IP_SRCROUTE    0       /* does not have <netinet/ip_var.h> */
+# define HASGETUSERSHELL 0      /* does not have getusershell(3) */
+# define HASUNSETENV    1
+# ifndef IDENTPROTO
+#  define IDENTPROTO    0       /* TCP/IP implementation is broken */
+# endif
+# define SPT_TYPE       SPT_NONE        /* don't use setproctitle */
+# define SFS_TYPE       SFS_2ARGS       /* two argument statfs() call */
+# define setgroups(a,b) -1
+# define minor(x)       (x&0xff)
+# define major(x)       ((x>>8)&0xff)
+# define HASSTRERROR    1
+# define ERRLIST_PREDEFINED     1
+# define UID_MAX	1000
+# define HASFCHOWN     1       /* has fchown(2) */
+#endif
+
+
 
 /*
 **  FreeBSD / NetBSD / OpenBSD (all architectures, all versions)
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/sendmail/daemon.c sendmail-8.11.1-cygwin/sendmail/daemon.c
--- sendmail-8.11.1/sendmail/daemon.c	Fri Sep 22 18:30:09 2000
+++ sendmail-8.11.1-cygwin/sendmail/daemon.c	Mon Dec  4 17:34:34 2000
@@ -88,6 +88,10 @@
 static int	opendaemonsocket __P((struct daemon *, bool));
 static u_short	setupdaemon __P((SOCKADDR *));
 
+#ifdef __CYGWIN32__
+extern __declspec(dllimport) int h_errno;
+#endif
+
 /*
 **  DAEMON.C -- routines to use when running as a daemon.
 **
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/sendmail/deliver.c sendmail-8.11.1-cygwin/sendmail/deliver.c
--- sendmail-8.11.1/sendmail/deliver.c	Fri Sep 22 18:30:09 2000
+++ sendmail-8.11.1-cygwin/sendmail/deliver.c	Thu Dec  7 16:55:20 2000
@@ -40,6 +40,10 @@
 # endif /* STARTTLS */
 #endif /* SMTP */
 
+#ifdef __CYGWIN32__
+extern __declspec(dllimport) int h_errno;
+#endif
+
 /*
 **  SENDALL -- actually send all the messages.
 **
@@ -2001,6 +2005,7 @@
 			}
 			if (new_gid != NO_GID)
 			{
+#ifndef __CYGWIN32__
 				if (RunAsUid != 0 &&
 				    bitnset(M_SPECIFIC_UID, m->m_flags) &&
 				    new_gid != getgid() &&
@@ -2010,6 +2015,16 @@
 					syserr("openmailer: insufficient privileges to change gid");
 					exit(EX_TEMPFAIL);
 				}
+#else
+				if(RunAsUid < UID_MAX &&
+				   bitnset(M_SPECIFIC_UID, m->m_flags) &&
+				   new_gid != getgid() &&
+				   new_gid != getegid())
+				{
+					syserr("openmailer: insufficent privileges to change gid, RunAsUid = %d, new_gid = %d, getgid() = %d, getegid() = %d", RunAsUid, new_gid, getgid(), getegid());
+					exit(EX_TEMPFAIL);
+				}
+#endif
 
 				if (setgid(new_gid) < 0 && suidwarn)
 				{
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/sendmail/domain.c sendmail-8.11.1-cygwin/sendmail/domain.c
--- sendmail-8.11.1/sendmail/domain.c	Wed Jun 14 01:44:55 2000
+++ sendmail-8.11.1-cygwin/sendmail/domain.c	Mon Dec  4 17:35:48 2000
@@ -82,6 +82,10 @@
 static char	*gethostalias __P((char *));
 static int	mxrand __P((char *));
 
+#ifdef __CYGWIN32__
+extern __declspec(dllimport) int h_errno;
+#endif
+
 /*
 **  GETMXRR -- get MX resource records for a domain
 **
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/sendmail/main.c sendmail-8.11.1-cygwin/sendmail/main.c
--- sendmail-8.11.1/sendmail/main.c	Wed Sep 27 06:07:25 2000
+++ sendmail-8.11.1-cygwin/sendmail/main.c	Wed Dec  6 04:49:09 2000
@@ -27,8 +27,13 @@
 #define	_DEFINE
 
 #include <sendmail.h>
-
-
+/*
+#ifdef __CYGWIN32__
+#include <windows.h>
+#include <exceptions.h>
+#include <sys/cygwin.h>
+#endif
+*/
 #if NETINET || NETINET6
 # include <arpa/inet.h>
 #endif /* NETINET || NETINET6 */
diff -x obj.CYGWIN32.1.1.6_0.30-3-2.i686 -Nru sendmail-8.11.1/sendmail/map.c sendmail-8.11.1-cygwin/sendmail/map.c
--- sendmail-8.11.1/sendmail/map.c	Wed Sep 27 06:11:29 2000
+++ sendmail-8.11.1-cygwin/sendmail/map.c	Mon Dec  4 17:36:08 2000
@@ -74,6 +74,11 @@
 #endif /* NETINFO */
 static bool	text_getcanonname __P((char *, int, int *));
 
+#ifdef __CYGWIN32__
+extern __declspec(dllimport) int h_errno;
+#endif
+
+
 /*
 **  MAP.C -- implementations for various map classes.
 **

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]