? mail/courier-mta/work
Index: mail/courier-mta/Makefile
===================================================================
RCS file: /cvsroot/pkgsrc/mail/courier-mta/Makefile,v
retrieving revision 1.25
diff -u -r1.25 Makefile
--- mail/courier-mta/Makefile	21 Feb 2008 15:50:29 -0000	1.25
+++ mail/courier-mta/Makefile	18 May 2008 19:00:30 -0000
@@ -34,6 +34,9 @@
 CONFIGURE_ENV+=		CERTTOOL=${COURIER_CERTTOOL:Q}
 CONFIGURE_ENV+=		OPENSSL=${COURIER_OPENSSL:Q}
 CONFIGURE_ENV+=		PROCMAIL=${PREFIX:Q}/bin/procmail
+.if ${OPSYS} == "DragonFly"
+CONFIGURE_ENV+=		REHASH=${FILESDIR:Q}/c_rehash
+.endif
 
 CONFIGURE_ARGS+=	--datadir=${DATADIR:Q}
 CONFIGURE_ARGS+=	--with-mailuid=${PKG_UID.${COURIER_USER}}
Index: mail/courier-mta/distinfo
===================================================================
RCS file: /cvsroot/pkgsrc/mail/courier-mta/distinfo,v
retrieving revision 1.11
diff -u -r1.11 distinfo
--- mail/courier-mta/distinfo	19 Feb 2008 18:45:23 -0000	1.11
+++ mail/courier-mta/distinfo	18 May 2008 19:00:30 -0000
@@ -17,3 +17,4 @@
 SHA1 (patch-an) = 1c78baf7fc393b013c47745b914571aff94f1497
 SHA1 (patch-ax) = ed01509d1868b92e80ec98e320ac285345584e31
 SHA1 (patch-ay) = 499f46a7116da4f7adfa6e7c2d7e4e4856174a9f
+SHA1 (patch-az) = 7524a9c693830893b9de328ba567a5c1fd61f7cd
Index: mail/courier-mta/files/c_rehash
===================================================================
RCS file: mail/courier-mta/files/c_rehash
diff -N mail/courier-mta/files/c_rehash
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ mail/courier-mta/files/c_rehash	18 May 2008 19:00:30 -0000
@@ -0,0 +1,160 @@
+#!/usr/bin/env perl
+
+
+# Perl c_rehash script, scan all files in a directory
+# and add symbolic links to their hash values.
+
+my $openssl;
+
+my $dir = "/etc/ssl";
+
+if(defined $ENV{OPENSSL}) {
+	$openssl = $ENV{OPENSSL};
+} else {
+	$openssl = "openssl";
+	$ENV{OPENSSL} = $openssl;
+}
+
+$ENV{PATH} .= ":$dir/bin";
+
+if(! -x $openssl) {
+	my $found = 0;
+	foreach (split /:/, $ENV{PATH}) {
+		if(-x "$_/$openssl") {
+			$found = 1;
+			last;
+		}	
+	}
+	if($found == 0) {
+		print STDERR "c_rehash: rehashing skipped ('openssl' program not available)\n";
+		exit 0;
+	}
+}
+
+if(@ARGV) {
+	@dirlist = @ARGV;
+} elsif($ENV{SSL_CERT_DIR}) {
+	@dirlist = split /:/, $ENV{SSL_CERT_DIR};
+} else {
+	$dirlist[0] = "$dir/certs";
+}
+
+
+foreach (@dirlist) {
+	if(-d $_ and -w $_) {
+		hash_dir($_);
+	}
+}
+
+sub hash_dir {
+	my %hashlist;
+	print "Doing $_[0]\n";
+	chdir $_[0];
+	opendir(DIR, ".");
+	my @flist = readdir(DIR);
+	# Delete any existing symbolic links
+	foreach (grep {/^[\da-f]+\.r{0,1}\d+$/} @flist) {
+		if(-l $_) {
+			unlink $_;
+		}
+	}
+	closedir DIR;
+	FILE: foreach $fname (grep {/\.pem$/} @flist) {
+		# Check to see if certificates and/or CRLs present.
+		my ($cert, $crl) = check_file($fname);
+		if(!$cert && !$crl) {
+			print STDERR "WARNING: $fname does not contain a certificate or CRL: skipping\n";
+			next;
+		}
+		link_hash_cert($fname) if($cert);
+		link_hash_crl($fname) if($crl);
+	}
+}
+
+sub check_file {
+	my ($is_cert, $is_crl) = (0,0);
+	my $fname = $_[0];
+	open IN, $fname;
+	while(<IN>) {
+		if(/^-----BEGIN (.*)-----/) {
+			my $hdr = $1;
+			if($hdr =~ /^(X509 |TRUSTED |)CERTIFICATE$/) {
+				$is_cert = 1;
+				last if($is_crl);
+			} elsif($hdr eq "X509 CRL") {
+				$is_crl = 1;
+				last if($is_cert);
+			}
+		}
+	}
+	close IN;
+	return ($is_cert, $is_crl);
+}
+
+
+# Link a certificate to its subject name hash value, each hash is of
+# the form <hash>.<n> where n is an integer. If the hash value already exists
+# then we need to up the value of n, unless its a duplicate in which
+# case we skip the link. We check for duplicates by comparing the
+# certificate fingerprints
+
+sub link_hash_cert {
+		my $fname = $_[0];
+		$fname =~ s/'/'\\''/g;
+		my ($hash, $fprint) = `"$openssl" x509 -hash -fingerprint -noout -in '$fname'`;
+		chomp $hash;
+		chomp $fprint;
+		$fprint =~ s/^.*=//;
+		$fprint =~ tr/://d;
+		my $suffix = 0;
+		# Search for an unused hash filename
+		while(exists $hashlist{"$hash.$suffix"}) {
+			# Hash matches: if fingerprint matches its a duplicate cert
+			if($hashlist{"$hash.$suffix"} eq $fprint) {
+				print STDERR "WARNING: Skipping duplicate certificate $fname\n";
+				return;
+			}
+			$suffix++;
+		}
+		$hash .= ".$suffix";
+		print "$fname => $hash\n";
+		$symlink_exists=eval {symlink("",""); 1};
+		if ($symlink_exists) {
+			symlink $fname, $hash;
+		} else {
+			system ("cp", $fname, $hash);
+		}
+		$hashlist{$hash} = $fprint;
+}
+
+# Same as above except for a CRL. CRL links are of the form <hash>.r<n>
+
+sub link_hash_crl {
+		my $fname = $_[0];
+		$fname =~ s/'/'\\''/g;
+		my ($hash, $fprint) = `"$openssl" crl -hash -fingerprint -noout -in '$fname'`;
+		chomp $hash;
+		chomp $fprint;
+		$fprint =~ s/^.*=//;
+		$fprint =~ tr/://d;
+		my $suffix = 0;
+		# Search for an unused hash filename
+		while(exists $hashlist{"$hash.r$suffix"}) {
+			# Hash matches: if fingerprint matches its a duplicate cert
+			if($hashlist{"$hash.r$suffix"} eq $fprint) {
+				print STDERR "WARNING: Skipping duplicate CRL $fname\n";
+				return;
+			}
+			$suffix++;
+		}
+		$hash .= ".r$suffix";
+		print "$fname => $hash\n";
+		$symlink_exists=eval {symlink("",""); 1};
+		if ($symlink_exists) {
+			symlink $fname, $hash;
+		} else {
+			system ("cp", $fname, $hash);
+		}
+		$hashlist{$hash} = $fprint;
+}
+
Index: mail/courier-mta/patches/patch-az
===================================================================
RCS file: mail/courier-mta/patches/patch-az
diff -N mail/courier-mta/patches/patch-az
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ mail/courier-mta/patches/patch-az	18 May 2008 19:00:30 -0000
@@ -0,0 +1,11 @@
+--- rootcerts/configure.old	2008-05-18 14:43:15 -0400
++++ rootcerts/configure	2008-05-18 14:43:24 -0400
+@@ -2313,8 +2313,6 @@
+ 
+ . ../tcpd/couriertls.config
+ 
+-REHASH=""
+-
+ if test "$ssllib" = "openssl"
+ then
+ 	# Extract the first word of "openssl", so it can be a program name with args.
