From owner-freebsd-bugs Thu Nov 23 1:50:15 2000 Delivered-To: freebsd-bugs@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id A7FF737B479 for ; Thu, 23 Nov 2000 01:50:02 -0800 (PST) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id BAA55226; Thu, 23 Nov 2000 01:50:02 -0800 (PST) (envelope-from gnats@FreeBSD.org) Date: Thu, 23 Nov 2000 01:50:02 -0800 (PST) Message-Id: <200011230950.BAA55226@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org Cc: From: Volker Stolz Subject: Re: bin/22071: mtree hangs on fifos Reply-To: Volker Stolz Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org The following reply was made to PR bin/22071; it has been noted by GNATS. From: Volker Stolz 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, thatīs 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 donīt want to chksum FIFOs or special devices, wonīt 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: Canīt 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-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message