From lumpy@the.whole.net  Tue Oct 17 22:15:43 2000
Return-Path: <lumpy@the.whole.net>
Received: from the.whole.net (the.whole.net [206.26.15.65])
	by hub.freebsd.org (Postfix) with ESMTP id 841DF37B4E5
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 17 Oct 2000 22:15:41 -0700 (PDT)
Received: (from lumpy@localhost)
	by the.whole.net (8.11.0/8.11.0) id e9I5Eul58435;
	Wed, 18 Oct 2000 01:14:56 -0400 (EDT)
Message-Id: <200010180514.e9I5Eul58435@the.whole.net>
Date: Wed, 18 Oct 2000 01:14:56 -0400 (EDT)
From: The Lumpy One <lumpy@the.whole.net>
Reply-To: lumpy@the.whole.net
To: FreeBSD-gnats-submit@freebsd.org
Subject: mtree hangs on fifos
X-Send-Pr-Version: 3.2

>Number:         22071
>Category:       bin
>Synopsis:       mtree hangs on fifos
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Oct 17 22:20:01 PDT 2000
>Closed-Date:    Thu Aug 2 16:29:29 PDT 2001
>Last-Modified:  Thu Aug 02 16:30:23 PDT 2001
>Originator:     The Lumpy One
>Release:        FreeBSD 4.1-RELEASE i386
>Organization:
is.no.bs
>Environment:

	n/a

>Description:

	mtree appears to attempt to get the crc of a fifo when it encounters
	one of the same name that used to be a file with a checksum in the
	mtree map file.

>How-To-Repeat:

	1. create an mtree with checksums of a directory of some test files
	2. remove one of the test files and mkfifo in its place
	3. run mtree to check the directory against the map created in #1

>Fix:

	

>Release-Note:
>Audit-Trail:

From: Volker Stolz <stolz@pool.informatik.rwth-aachen.de>
To: freebsd-gnats-submit@FreeBSD.org, lumpy@the.whole.net
Cc:  
Subject: Re: bin/22071: mtree hangs on fifos
Date: Thu, 23 Nov 2000 10:45:32 +0100

 This is a cryptographically signed message in MIME format.
 
 --------------ms4F3B45C502F866359A77853F
 Content-Type: multipart/mixed;
  boundary="------------175F523C7E2F02978CE245AD"
 
 This is a multi-part message in MIME format.
 --------------175F523C7E2F02978CE245AD
 Content-Type: text/plain; charset=iso-8859-1
 Content-Transfer-Encoding: 8bit
 
 This should take care of calculating checksums only for files
 and links.
 
 Patch attached.
 -- 
 "I came out of it dead broke, without a house, without anything,
 except a girlfriend and a knowledge of Unix." "Well, thats
 something. Normally those two are mutually exclusive."
   N. Stephenson, "Cryptonomicon"
 --------------175F523C7E2F02978CE245AD
 Content-Type: text/plain; charset=iso-8859-1;
  name="mtree.diff"
 Content-Transfer-Encoding: 8bit
 Content-Disposition: inline;
  filename="mtree.diff"
 
 diff -cr5 mtree/compare.c mtreevs/compare.c
 *** mtree/compare.c	Sun Nov 19 14:00:40 2000
 --- mtreevs/compare.c	Thu Nov 23 10:29:43 2000
 ***************
 *** 194,205 ****
   		(void)printf("%.24s)\n",
   		    ctime(&p->fts_statp->st_mtimespec.tv_sec));
   		tab = "\t";
   	}
   	if (s->flags & F_CKSUM) {
 ! 		if ((fd = open(p->fts_accpath, O_RDONLY, 0)) < 0) {
 ! 			LABEL;
   			(void)printf("%scksum: %s: %s\n",
   			    tab, p->fts_accpath, strerror(errno));
   			tab = "\t";
   		} else if (crc(fd, &val, &len)) {
   			(void)close(fd);
 --- 194,210 ----
   		(void)printf("%.24s)\n",
   		    ctime(&p->fts_statp->st_mtimespec.tv_sec));
   		tab = "\t";
   	}
   	if (s->flags & F_CKSUM) {
 ! 	  if (canDoCRCs(p->fts_accpath) < 1) {
 ! 	    LABEL;
 ! 	    (void)printf("%scksum: %s: wrong filetype for cksum\n",
 ! 			 tab, p->fts_accpath);
 ! 	    tab = "\t";
 ! 	  } else if ((fd = open(p->fts_accpath, O_RDONLY, 0)) < 0) {
 ! 	                LABEL;
   			(void)printf("%scksum: %s: %s\n",
   			    tab, p->fts_accpath, strerror(errno));
   			tab = "\t";
   		} else if (crc(fd, &val, &len)) {
   			(void)close(fd);
 ***************
 *** 241,254 ****
 --- 246,266 ----
   				(void)printf(", modified)\n");
   		else
   			(void)printf(")\n");
   		tab = "\t";
   	}
 + 
   #ifdef MD5
   	if (s->flags & F_MD5) {
   		char *new_digest, buf[33];
   
 + 	  if (canDoCRCs(p->fts_accpath) < 1) {
 + 	    LABEL;
 + 	    (void)printf("%sMD5File: %s: wrong filetype\n",
 + 			 tab, p->fts_accpath);
 + 	    tab = "\t";
 + 	  } else {
   		new_digest = MD5File(p->fts_accpath, buf);
   		if (!new_digest) {
   			LABEL;
   			printf("%sMD5File: %s: %s\n", tab, p->fts_accpath,
   			       strerror(errno));
 ***************
 *** 257,272 ****
 --- 269,291 ----
   			LABEL;
   			printf("%sMD5 (%s, %s)\n", tab, s->md5digest,
   			       new_digest);
   			tab = "\t";
   		}
 + 	  }
   	}
   #endif /* MD5 */
   #ifdef SHA1
   	if (s->flags & F_SHA1) {
   		char *new_digest, buf[41];
   
 + 	  if (canDoCRCs(p->fts_accpath) < 1) {
 + 	    LABEL;
 + 	    (void)printf("%sSHA1_File: %s: wrong filetype\n",
 + 			 tab, p->fts_accpath);
 + 	    tab = "\t";
 + 	  } else {
   		new_digest = SHA1_File(p->fts_accpath, buf);
   		if (!new_digest) {
   			LABEL;
   			printf("%sSHA1_File: %s: %s\n", tab, p->fts_accpath,
   			       strerror(errno));
 ***************
 *** 275,290 ****
 --- 294,316 ----
   			LABEL;
   			printf("%sSHA-1 (%s, %s)\n", tab, s->sha1digest,
   			       new_digest);
   			tab = "\t";
   		}
 + 	  }
   	}
   #endif /* SHA1 */
   #ifdef RMD160
   	if (s->flags & F_RMD160) {
   		char *new_digest, buf[41];
   
 + 	  if (canDoCRCs(p->fts_accpath) < 1) {
 + 	    LABEL;
 + 	    (void)printf("%sRIPEMD160_File: %s: wrong filetype\n",
 + 			 tab, p->fts_accpath);
 + 	    tab = "\t";
 + 	  } else {
   		new_digest = RIPEMD160_File(p->fts_accpath, buf);
   		if (!new_digest) {
   			LABEL;
   			printf("%sRIPEMD160_File: %s: %s\n", tab,
   			       p->fts_accpath, strerror(errno));
 ***************
 *** 293,311 ****
 --- 319,367 ----
   			LABEL;
   			printf("%sRIPEMD160 (%s, %s)\n", tab, s->rmd160digest,
   			       new_digest);
   			tab = "\t";
   		}
 + 	  }
   	}
   #endif /* RMD160 */
   
   	if (s->flags & F_SLINK &&
   	    strcmp(cp = rlink(p->fts_accpath), s->slink)) {
   		LABEL;
   		(void)printf("%slink ref (%s, %s)\n", tab, cp, s->slink);
   	}
   	return (label);
 + }
 + 
 + /* Test file for suitable type for checksumming.
 +    We dont want to chksum FIFOs or special devices, wont we?
 +    
 +    -1: error calling stat()
 +    1: file is S_IFREG,S_IFLNK
 +    0: otherwise
 + */
 + int canDoCRCs(file)
 +      char *file;
 + {
 +   struct stat statbuff;
 + 
 +   if (stat(file,&statbuff) < 0) {
 +     /*printf("%scanDoCRCs: Cant stat(): %s!\n",
 +       file,strerror(errno)); */
 +     return -1;
 +   } else {
 +     switch (statbuff.st_mode & S_IFMT) {
 +     case S_IFREG:
 +       return 1;
 +     case S_IFLNK:
 +       return 1;
 +     default:
 +       return 0;
 +     }
 +     /* NOT REACHED */
 +   }
   }
   
   char *
   inotype(type)
   	u_int type;
 
 --------------175F523C7E2F02978CE245AD--
 
 --------------ms4F3B45C502F866359A77853F
 Content-Type: application/x-pkcs7-signature; name="smime.p7s"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="smime.p7s"
 Content-Description: S/MIME Cryptographic Signature
 
 MIIFrgYJKoZIhvcNAQcCoIIFnzCCBZsCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCC
 A1owggNWMIICv6ADAgECAg8AzXYAAAABaOfwqEl44j8wDQYJKoZIhvcNAQEEBQAwgbwxCzAJ
 BgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQK
 EzFUQyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIw
 IAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0
 aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw0wMDAxMDcxNDU1MDRaFw0wMTAxMDYxNDU1MDRa
 MGoxCzAJBgNVBAYTAkRFMQ8wDQYDVQQHEwZBYWNoZW4xFTATBgNVBAMTDFZvbGtlciBTdG9s
 ejEzMDEGCSqGSIb3DQEJARYkc3RvbHpAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRl
 MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5O96CMrDMsc/MNQG5VvsPMHobWwX+1fa0
 9iWQ/QINMqu0Nib1eM6TwnFs+0B8c2riZBEUuHc6G9dZES0Xj8i/gZjf3s3BmWLSl82NOPZ9
 eIrSUrHYlY7Caur9v1LWjGrGw4OuYriWQt3hZrn06BwV12hrOUr3tqTLzijPcpaU/wIDAQAB
 o4GqMIGnMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2d1aWRl
 bGluZXMwEQYJYIZIAYb4QgEBBAQDAgWgMF0GCWCGSAGG+EIBAwRQFk5odHRwczovL3d3dy50
 cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2kvQ0Q3NjAwMDAwMDAxNjhFN0Yw
 QTg0OTc4RTIzRj8wDQYJKoZIhvcNAQEEBQADgYEAjITNTdLSvDoM6k8261ABJPEuXVUTt5Qp
 NcuVve0hTogZp6DtD1SjBNXlLb/DPEepFaReIp53dK3agpnWXLLAKpNpZWax48EjuqN3C2VZ
 m0NXYeon77f5dZ2GWtLfxEysnyXZucczzW4qv5B6ogXD/FCKHmjlmPctVGPWiG2jnasxggIc
 MIICGAIBATCB0DCBvDELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcT
 B0hhbWJ1cmcxOjA4BgNVBAoTMVRDIFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRh
 IE5ldHdvcmtzIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDEgQ0ExKTAn
 BgkqhkiG9w0BCQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlAg8AzXYAAAABaOfwqEl4
 4j8wCQYFKw4DAhoFAKCBojAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJ
 BTEPFw0wMDExMjMwOTQ1MzJaMCMGCSqGSIb3DQEJBDEWBBSwdnxrp1Ryf5m9FXHJICDRiBrN
 cTBDBgkqhkiG9w0BCQ8xNjA0MAoGCCqGSIb3DQMHMA4GCCqGSIb3DQMCAgIAgDAHBgUrDgMC
 BzANBggqhkiG9w0DAgIBQDANBgkqhkiG9w0BAQEFAASBgBM3qsDcTsb0n3Aeko+mF9uSjuQT
 PTukFd9mTrG1N00HHRQ6udKESVKxl3I8q1n4owi2PIVl0Tuae3Q6cU/uKV78McqOPkXUcX0w
 +2J3jIhOpZACOPjpRqtYoi3yvQWHZE2U72kN7iaKn4VufyA4aZUGZTRv5XGze4shDzmbOA7M
 
 --------------ms4F3B45C502F866359A77853F--
 
 

From: Volker Stolz <stolz@I2.Informatik.RWTH-Aachen.DE>
To: freebsd-gnats-submit@freebsd.org
Cc:  
Subject: Re: bin/22071: mtree hangs on fifos
Date: Thu, 14 Jun 2001 12:31:40 +0200

 Patch has been provided. Apply. Verify.
 
 This PR can be closed
 -- 
 Abstrakte Syntaxtrume.
 Volker Stolz * stolz@i2.informatik.rwth-aachen.de * PGP + S/MIME
State-Changed-From-To: open->closed 
State-Changed-By: jon 
State-Changed-When: Thu Aug 2 16:29:29 PDT 2001 
State-Changed-Why:  
problem has since been fixed (in 4.3-RELEASE) 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=22071 
>Unformatted:
