Uh... Apache comes preinstalled with OpenBSD. That is what I am using.
So, I'm not sure what you are talking about.
Apache is running as user www. www is in the group www. That is
working fine. The problem is that CGI Scripts, NOT APACHE, are running
as the USER that STARTED Apache. They *SHOULD* be running as the user
that Apache is running as (www).
Make sense?
-----Original Message-----
From: owner-tech@openbsd.org [mailto:owner-tech@openbsd.org] On Behalf
Of Cris Harrison
Sent: Saturday, March 15, 2003 1:53 PM
To: Travis Gillitzer; tech@openbsd.org
Subject: Re: CGI Scripts running as user that started apache
At 12:15 PM 3/15/2003 -0600, Travis Gillitzer wrote:
>I may be overlooking something simple here, but I can't seem to figure
- where did you get the Apache source? www.apache.org good any place
else BAD
- Is Apache configured right?? /usr/local/apache/conf/httpd.conf
I have attached my conf
- Are you using BSD dist of Apache .. Its NOT STANDARD!!!!!
4.Check you Document Root Path statment:ServerRoot /usr/local/apache
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/usr/local/apache/htdocs"
#
# UserDir: The name of the directory which is appended onto a user's
home
# directory if a ~user request is received.
#
UserDir public_html
5 Check for usr & goups = NOBODY
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# . On SCO (ODT 3) use "User nouser" and "Group nogroup".
# . On HPUX you may not be able to use shared memory as nobody, and the
# suggested workaround is to create a user www and use that user.
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group #-1 on these systems!
#
User nobody
Group nobody
Oh yes this is running on the following equipment with very similar conf
files:
they all have support for perl Not ModPerl
they are ALL Installed the same that is if the OS came with perl or
apache it
was REMOVED and re-installed in /usr/local/whatever
contrary to some apache should be installed /usr/local/apache
with conf under apache
with logs in var. VAR should never have any of the conf files...
- SUN SS20 SOLARIS 8 www Server/ NS1
- SUN S5 SOLARIS 7 mail/pop/NS2
- SUN ULTRA2 SOLARIS 8 Mysql Server + PHP + DBI/DBD
- SUN ULTRA1 SOLARIS 8 Billing Server
- AMD K7 OpenBSD Support Web Server
- SUN S5 OpenBSD Firewall
- SUN S20 SOLARIS 8 Distibuted JAVA Stack Server (currently there
are 4
boxs in the Stack)
Ok I hope that helps
Cris Harrison
www.phoenixcomm.net (owner, Sr. Network Eng.)
BTW you can view my apache conf file @ www.phoenixcomm.net/temp/apache
>I am installing Twiki (twiki.org). One of the steps is to run a CGI
the
>user that started Apache.
and
>warn user
<b>\@INC</b>,
>and re-install Perl if necessary.</p>\n";
mailnotify
> );
>
># Optional modules on all platforms
module)
> );
>
>
>open(STDERR,'>&STDOUT'); # redirect errors to browser
>$| = 1; # no buffering - FIXME: mod_perl issue?
>
>
># Check for modules required by this script
>&checkBasicModules( @basicMods );
>
># Load CGI modules (run-time, after checking they are accessible)
>require CGI;
>require CGI::Carp;
>import CGI::Carp qw( fatalsToBrowser );
>
>my $query = new CGI;
>
>
>print "Content-type: text/html\n\n";
>print <<EOM;
>
>
>
>Test the environment for TWiki
>
>
>
>
>
>Please read the
><http://TWiki.org/cgi-bin/view/TWiki/TWikiInstallationNotes>TWikiI
>nstallationNotes for more information on TWiki installation.
>
>
>Environment variables:
>
>
>
>
>
>EOM my $key; for $key ( sort keys %ENV ) { print "
>$key$ENV{$key}
>\n"; } print <
>
>
>CGI Setup:
>
>
>
>
>
>EOM # Make %ENV safer for CGI (should reflect TWiki.pm) my
$originalPath =
>$ENV{'PATH'} || ''; if( $safeEnvPath ) { $ENV{'PATH'} = $safeEnvPath; }
>delete @ENV{ qw( IFS CDPATH ENV BASH_ENV ) }; # Get Perl version -
output
>looks neater with new variable my $perlvernum = $]; my $perlver; if
"." .
>ord(substr($perlver,2)); } else { $perlver = $perlvernum } # Set
#
>- this code enables the latest testenv to be used with Dec 2001 and #
>earlier releases. if ( !defined $detailedOS ) { require Config;
>$detailedOS = $Config::Config{'osname'}; # print "$detailedOS
>"; } # Detect Perl flavour on Windows, and Cygwin Perl/RCS package
'cygwin') {
>$perltype = 'Cygwin';# Cygwin Perl only my ($pkg, $pkgName); # Get
Cygwin
>perl's package version number $pkgName = 'perl'; $pkg = `/bin/cygcheck
-c
>$pkgName | /bin/grep $pkgName 2>/dev/null`; if ($?) { $pkg = " [Can't
>identify package - cygcheck or grep not installed]"; $perlver .= $pkg }
>else { $pkg = (split ' ', $pkg)[1];# Package version $perlver = $pkg; }
#
>Get Cygwin RCS's package version number $pkgName = 'rcs'; $pkg =
>$pkg = " [Can't identify package - cygcheck or grep not installed]";
>$perlver .= $pkg } else { $pkg = (split ' ', $pkg)[1];# Package version
>$cygwinRcsVerNum = $pkg; } } elsif ($detailedOS =~ /win/i &&
$detailedOS
>!~ /darwin/i ) { # Windows Perl - try ActivePerl-only function: returns
>number if # successful, otherwise treated as a literal (bareword). my
) {
>$perltype = 'ActiveState'; $perlver .= ", build " .
Win32::BuildNumber();
>} else { # Could be SiePerl or some other Win32 port of Perl $perltype
=
>'SiePerl/Other Win32 Perl'; } } else { $perltype = 'generic'; } #
Detect
>executable name suffix, e.g. .exe on Windows or '' on Unix my
loaded
>into Apache my $LOAD_MOD_PERL = ( exists $ENV{'SERVER_SOFTWARE'} && (
>Detect whether we are actually running under mod_perl # - test for
>MOD_PERL alone, which is enough. my $USE_MOD_PERL = ( exists
>$ENV{'MOD_PERL'} ) && "Used" || "Not used"; # OS print "
>Operating system:" . ucfirst(lc($OS)); print " ($detailedOS)" if (
>$detailedOS ne '' ); print "
>\n"; # Perl version and type print "
>Perl version:$perlver"; print " ($perltype)" if $perltype ne 'generic';
>print "
>\n"; if ( $perlvernum < $perlverRequired ) { print "
>Warning: "; print "This version of Perl is too old for use with TWiki -
>upgrade to at least Perl $perlverRequiredString\n"; print "and
preferably
>to Perl $perlverRecommended.\n"; print "
>\n"; } # Perl @INC (lib path) print "
>\@INC library path:" . ( join "
>\n", @INC ) . "
>\n"; print "
>Note:\n"; print "This is the Perl library path, used to load TWiki
>modules, "; print "third-party modules used by some plugins, and Perl
>built-in modules."; print "
>\n"; # Add to list of required modules if non-Unix, or MacOS X
(detected
>by # Perl as 'Darwin') if ( $detailedOS =~ /darwin/i or $OS ne 'UNIX' )
{
>push @requiredMods, @requiredModsNonUnix; } # Turn off fatalsToBrowser
warnings...
># Check that the TWiki.pm module can be found print "
>TWiki module in \@INC path:"; $mod = 'TWiki'; eval "use $mod"; print "
>\n"; my $twikiFound = 0; if ($@) { print "Warning: "; print "'$mod.pm'
not
>found - check path to twiki/lib"; print " and edit twiki/bin/setlib.cfg
if
>necessary" if $setlibAvail; print ".\n"; print "
>\n"; } else { $twikiFound = 1; my $mod_version = eval
>'$TWiki::wikiversion'; $mod_version ||= 'unknown'; print "OK, $mod.pm
>found (TWiki version: $mod_version)"; print "
>\n"; } print "
>\n"; # Do locale settings if TWiki.pm was found my $showLocales = 0; if
>($twikiFound) { TWiki::setupLocale(); $showLocales = 1; } # Check that
version
>number. print "
>Required Perl modules:"; foreach $mod (@requiredMods) { eval "use
$mod";
>print "
>\n"; if ($@) { print "Warning: "; print "'$mod' not installed - check
>TWiki documentation to see if this is required.\n"; print "
>\n"; } else { my $mod_version; $mod_version = ${"${mod}::VERSION"};
print
>"$mod ($mod_version)"; print "
>\n"; } print "
>\n"; } # Check that each of the optional Perl modules can be loaded,
and #
>print its version number. print "
>Optional Perl modules:"; foreach $mod (@optionalMods) { eval "use
$mod";
>print "
>\n"; if ($@) { print "Note: "; print "Optional module '$mod' not
installed
>- check TWiki documentation to see if your configuration needs this
>module.\n"; print "
>\n"; } else { my $mod_version = $ {"$ {mod}::VERSION"}; print "$mod
>($mod_version)"; print "
>\n"; } print "
>\n"; } # All module checks done, OK to enable fatalsToBrowser import
>CGI::Carp qw( fatalsToBrowser ); print "
>PATH_INFO:$thePathInfo
>\n"; print "
>Note:\n"; print "For a URL such as $theUrl/foo/bar, \n"; print "the
>correct PATH_INFO is /foo/bar, without any prefixed path \n"; print
>"components. Test this now \n"; print "- particularly if you are using
>Apache or IIS, or are using a web hosting provider.\n"; print "The page
>resulting from the test link should have a PATH_INFO of /foo/bar.\n";
print "
>\n"; print "
>mod_perl:$USE_MOD_PERL for this script (mod_perl $LOAD_MOD_PERL)
>\n"; # Get userid (ActiveState or other Perl), should work on all Perl
>$grp = ""; if( $OS eq 'UNIX' or ($OS eq 'WINDOWS' and $perltype eq
>'Cygwin' ) ) { foreach( split( " ", $( ) ) {# Unix/Cygwin Perl my
$onegrp
>= getgrgid( $_ ); $grp .= " " . lc($onegrp); } } else {# ActiveState or
>other Win32 Perl # Try to use Cygwin's 'id' command - may be on the
path,
>since Cygwin # is probably installed to supply ls, egrep, etc - if it
>isn't, give up. # Run command without stderr output, to avoid CGI
giving
>error. # Get names of primary and other groups. $grp = lc(qx(sh -c '(
id
>-un ; id -gn) 2>/dev/null' 2>nul )); if ($?) { $grp = "[Can't identify
>groups - no Cygwin 'id' or 'sh' command on path]"; } } print "
>User:$usr
>\n"; print "
>Note: "; print "Your CGI scripts are executing as this user."; print "
>\n"; if( $usr ne "nobody" ) { print "
>Warning: "; print "Since your CGI script is not running as user nobody,
";
>print "you need to change the locks in the *,v RCS files of the TWiki
";
>print "distribution from nobody to $usr.\n"; print "Otherwise, changes
to
>topics will not be logged by RCS.\n"; print "
>\n"; } print "
>Group(s):"; print "$grp"; print "\n"; print "
>
>
>Test of
>
>
>
>TWiki.cfg
>
>Configuration:
>
>
>
>
>
>\n"; # TWiki.cfg read earlier print "\n"; print "
>\$wikiHomeUrl:$wikiHomeUrl
>\n"; my $junk1 = $wikiHomeUrl; # Avoid warning print "
>Note: "; print "This is the link of the TWiki icon in the upper left
>corner."; print "
>\n"; print "
>\$defaultUrlHost:$defaultUrlHost
>\n"; print "
>Note: "; print "This must be the protocol and host part (with optional
>port number) of "; print "the TWiki URL."; print "
>\n"; my $val = $ENV{"HTTP_HOST"} || ''; if( $defaultUrlHost !~ /$val/ )
{
>print "
>Warning: "; print "This does not match HTTP_HOST"; print "
>\n"; } print "
>\$scriptUrlPath:$scriptUrlPath
>\n"; print "
>Note: "; print "This must be the URI of the TWiki cgi-bin directory.";
print "
>\n"; $val = $ENV{"REQUEST_URI"} || ''; if( $val !~ /^$scriptUrlPath/ )
{
>print "
>Warning: "; print "This does not match REQUEST_URI"; print "
>\n"; } print "
>\$pubUrlPath:$pubUrlPath
>\n"; print "
>Note: "; print "This must be the URI of the public directory."; print
>"This is not set correctly if the "; print "$pubUrlPath/wikiHome.gif
image
>below is broken:
>"; print "1e1819cf.jpg"; print "
>\n"; print "
>\$pubDir:$pubDir
>\n"; print "
>Note: "; print "This is the public directory, as seen from the file
>system. "; print "It must correspond to \$pubUrlPath."; print "
>\n"; if( ! ( -e "$pubDir/wikiHome.gif" ) ) { print "
>Error: "; print "Directory does not exist or file wikiHome.gif does not
>exist in this directory."; print "
>\n"; } elsif( ! testFileIsWritable( "$pubDir/testenv.test" ) ) { #
>directory is not writable print "
>Error: "; print "This directory is not writable by $usr user."; print "
>\n"; } print "
>\$templateDir:$templateDir
>\n"; print "
>Note: "; print "This is the TWiki template directory, as seen from the
>file system. "; print "
>\n"; if( ! ( -e "$templateDir/view.tmpl" ) ) { print "
>Error: "; print "Directory does not exist or file view.tmpl does not
exist
>in this directory."; print "
>\n"; } elsif( testFileIsWritable( "$templateDir/testenv.test" ) ) { #
>directory is writable print "
>Warning: "; print "Security issue: This directory should not be
writable
>by the $usr user."; print "
>\n"; } print "
>\$dataDir:$dataDir
>\n"; print "
>Note: "; print "This is the data directory where TWiki stores all
>topics."; print "
>\n"; if( ! ( -e "$dataDir" ) ) { print "
>Error: "; print "Directory does not exist."; print "
>\n"; } elsif( ! testFileIsWritable( "$dataDir/testenv.test" ) ) { #
>directory is not writable print "
>Error: "; print "This directory must be writable by the $usr user.";
print "
>\n"; } # Check 'sendmail' $val = $mailProgram; $val =~
s/([^\s]*).*/$1/g;
># Don't warn on Windows, as Net::SMTP is normally used if( $OS ne
>'WINDOWS' && ! ( -e $val ) ) { print "
>Warning: "; print "Mail program $val not found. Check the path."; print
"
>\n"; } print "
>\$mailProgram:$mailProgram
>\n"; print "
>Note: "; if( $OS ne 'WINDOWS' ) { print "This is the mail program TWiki
>uses to send mail."; } else { print "This is not typically used on
Windows
>- the Perl Net::SMTP module is used instead."; } print "
>\n"; # Check RCS directory print "
>\$rcsDir:$rcsDir
>\n"; print "
>Note: "; print "This is the directory where RCS is located."; print "
>\n"; # Check RCS if( ! ( -e "$rcsDir/ci$exeSuffix" ) ) { # RCS not
>installed print "
>Warning: "; print "RCS program $rcsDir/ci$exeSuffix not found. Check
>\$rcsDir setting in TWiki.cfg. "; print "TWiki will not work (unless
you
>are "; print "using TWiki's built-in RCS implementation, RcsLite).";
print "
>\n"; } else { # Check RCS version my $rcsVerNum = `$rcsDir/ci$exeSuffix
>-V`;# May fail due to diff or DLL not on PATH $rcsVerNum =
(split(/\s+/,
>$rcsVerNum))[2] || "";# Recover from unset variable print "
>RCS Version:$rcsVerNum"; print " (Cygwin package
rcs-$cygwinRcsVerNum)"
>if defined($cygwinRcsVerNum); print "
>\n"; print "
>Note: "; print "This is the version of RCS which will be used."; print
"
>\n"; if( $rcsVerNum && $rcsVerNum < $rcsverRequired ) { # RCS too old
print "
>Warning: "; print "RCS program is too old, upgrade to version
>$rcsverRequired or higher."; print "
>\n"; } } # Check 'ls' print "
>\$lsCmd:$lsCmd
>\n"; print "
>Note: "; print "This is the file list program TWiki uses to list
topics.";
>print "
>\n"; $val = $lsCmd . $exeSuffix; $val =~ s/([^\s]*).*/$1/go; if( ! ( -e
>$val ) ) { print "
>Warning: "; print "List program $val not found. Check the path."; print
"
>\n"; } # Check 'grep' print "
>\$egrepCmd:$egrepCmd
>\n"; print "
>Note: "; print "This is a program TWiki uses for search."; print "
>\n"; $val = $egrepCmd . $exeSuffix; $val =~ s/([^\s]*).*/$1/go; if( ! (
-e
>$val ) ) { print "
>Warning: "; print "Search program $val not found. Check the path.";
print "
>\n"; } # Check 'fgrep' print "
>\$fgrepCmd:$fgrepCmd
>\n"; print "
>Note: "; print "This is a program TWiki uses for search."; print "
>\n"; $val = $fgrepCmd . $exeSuffix; $val =~ s/([^\s]*).*/$1/go; if( ! (
-e
>$val ) ) { print "
>Warning: "; print "Search program $val not found. Check the path.";
print "
>\n"; } print "
>\$safeEnvPath:$safeEnvPath
>\n"; print "
>Note: "; print "This is used to initialise the PATH variable, and is
used
>to run the\n"; print "'diff' program used by RCS, as well as to run
shell
>programs such as\n"; if( $OS eq 'WINDOWS' ) { print "cmd.exe or
Cygwin's
>'bash'.\n"; print "
>
>\n"; if( $perltype eq 'Cygwin' ) { print "Since you are using Cygwin
Perl,
>'bash' will be used without any special setup.\n"; } elsif( $perltype
eq
>'ActiveState' ) { print "To use 'bash' with ActiveState Perl, see the
>Cygwin is installed.\n"; } print "
>\n"; } else { print "Bourne shell or 'bash'."; } if( $safeEnvPath eq ''
)
>{ print "
>Warning: \n"; print "Security issue: \$safeEnvPath set to empty string.
>Check TWiki.cfg.\n"; print "
>\n"; } print "
>\n"; # Generate a separate table about specific environment variables
>print "\n"; print "
>
>
>Path and Shell Environment
>
>
>
>
>
>\n"; print "\n"; # PATH check on all platforms print "
>Original PATH:$originalPath
>\n"; print "
>Note: "; print "This is the PATH value passed in from the web server to
>this script - it is reset by TWiki scripts to the PATH below, and is
>provided here for comparison purposes only.\n"; print "
>\n"; my $currentPath = $ENV{'PATH'} || ''; # As re-set earlier in this
>routine print "
>Current PATH:$currentPath
>\n"; print "
>Note: "; print "This is the actual PATH setting that will be used by
Perl
>to run programs.\n"; print "It is normally identical to \$safeEnvPath,
>unless that variable is empty.\n"; print "
>\n"; # Check that diff is found in PATH and is GNU diff - used by
various
>RCS # commands, including ci. Since Windows makes it hard to capture
Unix/Linux
>and Cygwin. if( $OS eq 'UNIX' or ($OS eq 'WINDOWS' and $perltype eq
>'Cygwin' ) ) { print "
>diff:"; my $diffOut = `diff 2>&1` || ""; my $notFound = ( $? == -1 );
if(
>$notFound ) { print "Warning: "; print "'diff' program was not found on
>the current PATH.\n"; print "
>"; } else { # diff found, check that it's GNU - using '-v' should cause
>error if not GNU, # since there are no arguments (tested with Solaris
>diff). $diffOut = `diff -v 2>&1` || ""; if( $diffOut !~ /\bGNU\b/ ) {
>print "Warning: "; print "'diff' program was found on the PATH but is
not
>GNU diff - this may cause problems.\n"; print "
>"; } else { print "GNU diff was found on the PATH - this is the
>recommended diff tool."; print "
>"; } } # Final table row applies to all cases print "
>Note:\n"; print "The 'diff' command is used by RCS to compare
files.\n";
>print "
>"; } # PERL5SHELL check for non-Cygwin Perl on Windows only if( $OS eq
my
>$perl5shell = $ENV{'PERL5SHELL'} || ''; print "
>\n"; print "
>PERL5SHELL:$perl5shell
>\n"; print "
>Note: "; print "This environment variable is used by ActiveState and
other
>Win32 Perls to run \n"; print "commands from TWiki scripts - it
determines
>which shell\n"; print "program is used to run commands that use
'pipes'.
>Examples of shell programs are \n"; print "cmd.exe, command.com (aka
'DOS
>Prompt'), and Cygwin's 'bash'\n"; print "(recommended if Cygwin is
>installed).\n"; print "
>
>\n"; print "To use 'bash' with ActiveState or other Win32 Perls, you
>like c:/YOURCYGWINDIR/bin/bash.exe -c.\n"; print "This should be set in
>the System Environment, and ideally set \n"; print "directly in the web
>server (e.g. using the Apache SetEnv \n"; print "command, followed by
an
>Apache restart). Once this is done, you should re-run testenv\n"; print
>"to check that PERL5SHELL is set properly.\n"; if ($perltype eq
{
>print "
>\n"; print "
>
>Warning: "; print "ActiveState Perl must be upgraded to build
>$ActivePerlRecommendedBuild if you are going to use PERL5SHELL, which
was
>broken in earlier builds."; } print "
>\n"; print "
>\n"; } # Generate a separate table for locale setup if ( $showLocales )
{#
>Only if TWiki.pm found print "\n"; print "
>
>
>Internationalisation and Locale Setup
>
>
>
>
>
>\n"; print "\n"; # $useLocale print "
>\$useLocale:$useLocale
>\n"; print "
>Note: "; print "This TWiki.cfg setting controls whether locales are
used
>by Perl and 'grep'.\n"; print "
>\n"; if( $OS eq 'WINDOWS' ) { # Warn re known broken locale setup print
"
>Warning: "; print "Using Perl on Windows, which may have missing or
>incorrect locales (in Cygwin or ActiveState Perl, respectively)\n";
print
>"- use of \$useLocale = 0 is recommended unless you know your version
of
>Perl has working locale support.\n"; print "
>\n"; } # $siteLocale print "
>\$siteLocale:$siteLocale
>\n"; print "
>Note: "; print "This TWiki.cfg parameter sets the site-wide locale -
>for\n"; print "example, de_AT.ISO-8859-1 where 'de' is the language
code,
>'AT' the country code and 'ISO-8859-1' is the character set. Use the
>locale -a command on your system to determine available locales.\n";
print "
>\n"; # Try to see if required locale was correctly set earlier my
>$currentLocale = setlocale( if ( $currentLocale ne $siteLocale ) {
print "
>Warning: "; print "Unable to set locale to $siteLocale, actual locale
is
>$currentLocale\n"; print "- please test your locale settings.\n"; print
"
>\n"; } # Locales are off, or using pre-5.6 Perl, so have to explicitly
higher
>has [:lower:] etc if ( not $useLocale or $perlvernum <
$perlVerPreferred )
>{ # If using Perl 5.005_03 or lower, generate upper and lower case
#
>Get strings with the non-ASCII alphabetic characters only, upper and
lower
>case $forUpperNat = join '', grep { lc($_) ne $_ and m/[^A-Z]/ } map {
>chr($_) } 1..255; $forLowerNat = join '', grep { uc($_) ne $_ and
>m/[^a-z]/ } map { chr($_) } 1..255; } # $upperNational print "
>\$upperNational:$upperNational
>\n"; print "
>Note: "; print "This TWiki.cfg parameter is used when \$useLocale is 0,
to
>work around missing or non-working locales.\n"; print "It is also used
print
>"If required, this parameter should be set to the upper case accented
"
>
>The following upper case accented characters have been found in this
>locale and should be considered for use in this parameter: $forUpperNat
>\n"; } print "
>\n"; # $lowerNational print "
>\$lowerNational:$lowerNational
>\n"; print "
>Note: "; print "This TWiki.cfg parameter is used whenever
\$upperNational
>is used.\n"; print "This parameter should be set to the lower case
{
>print "
>
>The following lower case accented characters have been found in this
>locale and should be considered for use in this parameter: $forLowerNat
>\n"; } print "
>\n"; } } print "\n"; print <
>EOM
>exit;
>
>}
>
># =========================
>sub testFileIsWritable
>{
> my( $name ) = @_;
> my $txt1 = "test 1 2 3";
[demime 0.98d removed an attachment of type image/jpeg which had a name
of 1e1819cf.jpg"; x-mac-type="4A504547"; x-mac-creator="4A565752]
Received on Sat Mar 15 15:32:13 2003