From df05b71d9bcbf44865954a07cca4704207706b0a Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Sat, 24 Apr 2010 15:43:59 +0100 Subject: [PATCH] Use hcrypto for kernel md5 Use the hcrypto code for kernel md5 too. Change-Id: I84663a5e29ef8ce4cb0f20be0604198c13b72c43 Reviewed-on: http://gerrit.openafs.org/2578 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- src/afs/afs_cell.c | 7 +- src/afs/afs_md5.c | 284 ------------------------------ src/afs/afs_md5.h | 76 -------- src/afs/afs_util.c | 12 +- src/crypto/kernel/config.h | 4 + src/crypto/kernel/roken.h | 0 src/libafs/Makefile.common.in | 10 +- src/libafs/MakefileProto.LINUX.in | 3 + src/libuafs/Makefile.common.in | 6 - 9 files changed, 25 insertions(+), 377 deletions(-) delete mode 100644 src/afs/afs_md5.c delete mode 100644 src/afs/afs_md5.h create mode 100644 src/crypto/kernel/config.h create mode 100644 src/crypto/kernel/roken.h diff --git a/src/afs/afs_cell.c b/src/afs/afs_cell.c index c6f8c2f51..03ed2c3ed 100644 --- a/src/afs/afs_cell.c +++ b/src/afs/afs_cell.c @@ -19,7 +19,7 @@ #include "afsincludes.h" /* Afs-based standard headers */ #include "afs/afs_stats.h" /* afs statistics */ #include "afs/afs_osi.h" -#include "afs/afs_md5.h" +#include "hcrypto/md5.h" /* Local variables. */ afs_rwlock_t afs_xcell; /* Export for cmdebug peeking at locks */ @@ -924,6 +924,7 @@ afs_NewCell(char *acellName, afs_int32 * acellHosts, int aflags, { struct cell *tc, *tcl = 0; afs_int32 i, newc = 0, code = 0; + struct md5 m; AFS_STATCNT(afs_NewCell); @@ -939,7 +940,9 @@ afs_NewCell(char *acellName, afs_int32 * acellHosts, int aflags, tc->cellName = afs_strdup(acellName); tc->fsport = AFS_FSPORT; tc->vlport = AFS_VLPORT; - AFS_MD5_String(tc->cellHandle, tc->cellName, strlen(tc->cellName)); + MD5_Init(&m); + MD5_Update(&m, tc->cellName, strlen(tc->cellName)); + MD5_Final(tc->cellHandle, &m); AFS_RWLOCK_INIT(&tc->lock, "cell lock"); newc = 1; aflags |= CNoSUID; diff --git a/src/afs/afs_md5.c b/src/afs/afs_md5.c deleted file mode 100644 index 6bbf92058..000000000 --- a/src/afs/afs_md5.c +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright (c) 1995 - 2001 Kungliga Tekniska Högskolan - * (Royal Institute of Technology, Stockholm, Sweden). - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include "afs/param.h" -#include "afs/sysincludes.h" -#include "afsincludes.h" - - - -#include "afs_md5.h" - -#define A m->counter[0] -#define B m->counter[1] -#define C m->counter[2] -#define D m->counter[3] -#define X data - -void -AFS_MD5_Init(struct afs_md5 *m) -{ - m->sz[0] = 0; - m->sz[1] = 0; - D = 0x10325476; - C = 0x98badcfe; - B = 0xefcdab89; - A = 0x67452301; -} - -#define F(x,y,z) CRAYFIX((x & y) | (~x & z)) -#define G(x,y,z) CRAYFIX((x & z) | (y & ~z)) -#define H(x,y,z) (x ^ y ^ z) -#define I(x,y,z) CRAYFIX(y ^ (x | ~z)) - -#define DOIT(a,b,c,d,k,s,i,OP) \ -a = b + cshift(a + OP(b,c,d) + X[k] + (i), s) - -#define DO1(a,b,c,d,k,s,i) DOIT(a,b,c,d,k,s,i,F) -#define DO2(a,b,c,d,k,s,i) DOIT(a,b,c,d,k,s,i,G) -#define DO3(a,b,c,d,k,s,i) DOIT(a,b,c,d,k,s,i,H) -#define DO4(a,b,c,d,k,s,i) DOIT(a,b,c,d,k,s,i,I) - -static inline void -calc(struct afs_md5 *m, afs_uint32 * data) -{ - afs_uint32 AA, BB, CC, DD; - - AA = A; - BB = B; - CC = C; - DD = D; - - /* Round 1 */ - - DO1(A, B, C, D, 0, 7, 0xd76aa478); - DO1(D, A, B, C, 1, 12, 0xe8c7b756); - DO1(C, D, A, B, 2, 17, 0x242070db); - DO1(B, C, D, A, 3, 22, 0xc1bdceee); - - DO1(A, B, C, D, 4, 7, 0xf57c0faf); - DO1(D, A, B, C, 5, 12, 0x4787c62a); - DO1(C, D, A, B, 6, 17, 0xa8304613); - DO1(B, C, D, A, 7, 22, 0xfd469501); - - DO1(A, B, C, D, 8, 7, 0x698098d8); - DO1(D, A, B, C, 9, 12, 0x8b44f7af); - DO1(C, D, A, B, 10, 17, 0xffff5bb1); - DO1(B, C, D, A, 11, 22, 0x895cd7be); - - DO1(A, B, C, D, 12, 7, 0x6b901122); - DO1(D, A, B, C, 13, 12, 0xfd987193); - DO1(C, D, A, B, 14, 17, 0xa679438e); - DO1(B, C, D, A, 15, 22, 0x49b40821); - - /* Round 2 */ - - DO2(A, B, C, D, 1, 5, 0xf61e2562); - DO2(D, A, B, C, 6, 9, 0xc040b340); - DO2(C, D, A, B, 11, 14, 0x265e5a51); - DO2(B, C, D, A, 0, 20, 0xe9b6c7aa); - - DO2(A, B, C, D, 5, 5, 0xd62f105d); - DO2(D, A, B, C, 10, 9, 0x2441453); - DO2(C, D, A, B, 15, 14, 0xd8a1e681); - DO2(B, C, D, A, 4, 20, 0xe7d3fbc8); - - DO2(A, B, C, D, 9, 5, 0x21e1cde6); - DO2(D, A, B, C, 14, 9, 0xc33707d6); - DO2(C, D, A, B, 3, 14, 0xf4d50d87); - DO2(B, C, D, A, 8, 20, 0x455a14ed); - - DO2(A, B, C, D, 13, 5, 0xa9e3e905); - DO2(D, A, B, C, 2, 9, 0xfcefa3f8); - DO2(C, D, A, B, 7, 14, 0x676f02d9); - DO2(B, C, D, A, 12, 20, 0x8d2a4c8a); - - /* Round 3 */ - - DO3(A, B, C, D, 5, 4, 0xfffa3942); - DO3(D, A, B, C, 8, 11, 0x8771f681); - DO3(C, D, A, B, 11, 16, 0x6d9d6122); - DO3(B, C, D, A, 14, 23, 0xfde5380c); - - DO3(A, B, C, D, 1, 4, 0xa4beea44); - DO3(D, A, B, C, 4, 11, 0x4bdecfa9); - DO3(C, D, A, B, 7, 16, 0xf6bb4b60); - DO3(B, C, D, A, 10, 23, 0xbebfbc70); - - DO3(A, B, C, D, 13, 4, 0x289b7ec6); - DO3(D, A, B, C, 0, 11, 0xeaa127fa); - DO3(C, D, A, B, 3, 16, 0xd4ef3085); - DO3(B, C, D, A, 6, 23, 0x4881d05); - - DO3(A, B, C, D, 9, 4, 0xd9d4d039); - DO3(D, A, B, C, 12, 11, 0xe6db99e5); - DO3(C, D, A, B, 15, 16, 0x1fa27cf8); - DO3(B, C, D, A, 2, 23, 0xc4ac5665); - - /* Round 4 */ - - DO4(A, B, C, D, 0, 6, 0xf4292244); - DO4(D, A, B, C, 7, 10, 0x432aff97); - DO4(C, D, A, B, 14, 15, 0xab9423a7); - DO4(B, C, D, A, 5, 21, 0xfc93a039); - - DO4(A, B, C, D, 12, 6, 0x655b59c3); - DO4(D, A, B, C, 3, 10, 0x8f0ccc92); - DO4(C, D, A, B, 10, 15, 0xffeff47d); - DO4(B, C, D, A, 1, 21, 0x85845dd1); - - DO4(A, B, C, D, 8, 6, 0x6fa87e4f); - DO4(D, A, B, C, 15, 10, 0xfe2ce6e0); - DO4(C, D, A, B, 6, 15, 0xa3014314); - DO4(B, C, D, A, 13, 21, 0x4e0811a1); - - DO4(A, B, C, D, 4, 6, 0xf7537e82); - DO4(D, A, B, C, 11, 10, 0xbd3af235); - DO4(C, D, A, B, 2, 15, 0x2ad7d2bb); - DO4(B, C, D, A, 9, 21, 0xeb86d391); - - A += AA; - B += BB; - C += CC; - D += DD; -} - -/* - * From `Performance analysis of MD5' by Joseph D. Touch - */ - -#if defined(WORDS_BIGENDIAN) -static inline afs_uint32 -swap_afs_uint32(afs_uint32 t) -{ - afs_uint32 temp1, temp2; - - temp1 = cshift(t, 16); - temp2 = temp1 >> 8; - temp1 &= 0x00ff00ff; - temp2 &= 0x00ff00ff; - temp1 <<= 8; - return temp1 | temp2; -} -#endif - -struct x32 { - unsigned int a:32; - unsigned int b:32; -}; - -void -AFS_MD5_Update(struct afs_md5 *m, const void *v, size_t len) -{ - const unsigned char *p = v; - size_t old_sz = m->sz[0]; - size_t offset; - - m->sz[0] += len * 8; - if (m->sz[0] < old_sz) - ++m->sz[1]; - offset = (old_sz / 8) % 64; - while (len > 0) { - size_t l = min(len, 64 - offset); - memcpy(m->save + offset, p, l); - offset += l; - p += l; - len -= l; - if (offset == 64) { -#if defined(WORDS_BIGENDIAN) - int i; - afs_uint32 cur[16]; - struct x32 *ui = (struct x32 *)m->save; - for (i = 0; i < 8; i++) { - cur[2 * i + 0] = swap_afs_uint32(ui[i].a); - cur[2 * i + 1] = swap_afs_uint32(ui[i].b); - } - calc(m, cur); -#else - calc(m, (afs_uint32 *) m->save); -#endif - offset = 0; - } - } -} - -void -AFS_MD5_Final(void *res, struct afs_md5 *m) -{ - static unsigned char zeros[72]; - unsigned offset = (m->sz[0] / 8) % 64; - unsigned int dstart = (120 - offset - 1) % 64 + 1; - - *zeros = 0x80; - memset(zeros + 1, 0, sizeof(zeros) - 1); - zeros[dstart + 0] = (m->sz[0] >> 0) & 0xff; - zeros[dstart + 1] = (m->sz[0] >> 8) & 0xff; - zeros[dstart + 2] = (m->sz[0] >> 16) & 0xff; - zeros[dstart + 3] = (m->sz[0] >> 24) & 0xff; - zeros[dstart + 4] = (m->sz[1] >> 0) & 0xff; - zeros[dstart + 5] = (m->sz[1] >> 8) & 0xff; - zeros[dstart + 6] = (m->sz[1] >> 16) & 0xff; - zeros[dstart + 7] = (m->sz[1] >> 24) & 0xff; - AFS_MD5_Update(m, zeros, dstart + 8); - { - int i; - unsigned char *r = (unsigned char *)res; - - for (i = 0; i < 4; ++i) { - r[4 * i] = m->counter[i] & 0xFF; - r[4 * i + 1] = (m->counter[i] >> 8) & 0xFF; - r[4 * i + 2] = (m->counter[i] >> 16) & 0xFF; - r[4 * i + 3] = (m->counter[i] >> 24) & 0xFF; - } - } -#if 0 - { - int i; - afs_uint32 *r = (afs_uint32 *) res; - - for (i = 0; i < 4; ++i) - r[i] = swap_afs_uint32(m->counter[i]); - } -#endif -} - -void -AFS_MD5_String(void *res, const void *v, size_t len) -{ - struct afs_md5 m; - - AFS_MD5_Init(&m); - AFS_MD5_Update(&m, v, len); - AFS_MD5_Final(res, &m); -} diff --git a/src/afs/afs_md5.h b/src/afs/afs_md5.h deleted file mode 100644 index 935e18fb5..000000000 --- a/src/afs/afs_md5.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 1995 - 2001 Kungliga Tekniska Högskolan - * (Royal Institute of Technology, Stockholm, Sweden). - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* $Id$ */ - - -struct afs_md5 { - unsigned int sz[2]; - afs_uint32 counter[4]; - unsigned char save[64]; -}; - -void AFS_MD5_Init(struct afs_md5 *m); -void AFS_MD5_Update(struct afs_md5 *m, const void *p, size_t len); -void AFS_MD5_Final(void *res, struct afs_md5 *m); /* afs_uint32 res[4] */ -void AFS_MD5_String(void *res, const void *v, size_t len); - -/* stuff in common between md4, md5, and sha1 */ - -#ifndef min -#define min(a,b) (((a)>(b))?(b):(a)) -#endif - -/* Vector Crays doesn't have a good 32-bit type, or more precisely, - int32_t as defined by isn't 32 bits, and we don't - want to depend in being able to redefine this type. To cope with - this we have to clamp the result in some places to [0,2^32); no - need to do this on other machines. Did I say this was a mess? - */ - -#ifdef _CRAY -#define CRAYFIX(X) ((X) & 0xffffffff) -#else -#define CRAYFIX(X) (X) -#endif - -#if !defined(inline) && !defined(__GNUC__) -#define inline -#endif - -static inline afs_uint32 -cshift(afs_uint32 x, unsigned int n) -{ - x = CRAYFIX(x); - return CRAYFIX((x << n) | (x >> (32 - n))); -} diff --git a/src/afs/afs_util.c b/src/afs/afs_util.c index 09646bd1d..37484d9ea 100644 --- a/src/afs/afs_util.c +++ b/src/afs/afs_util.c @@ -37,7 +37,7 @@ #include "afs/afs_stats.h" /* afs statistics */ #ifdef AFS_LINUX20_ENV -#include "afs/afs_md5.h" /* For MD5 inodes - Linux only */ +#include "hcrypto/md5.h" #endif #if defined(AFS_SUN56_ENV) @@ -374,13 +374,13 @@ afs_calc_inum(afs_int32 volume, afs_int32 vnode) { afs_int32 ino, vno = vnode; char digest[16]; - struct afs_md5 ct; + struct md5 ct; if (afs_new_inum) { - AFS_MD5_Init(&ct); - AFS_MD5_Update(&ct, &volume, 4); - AFS_MD5_Update(&ct, &vnode, 4); - AFS_MD5_Final(digest, &ct); + MD5_Init(&ct); + MD5_Update(&ct, &volume, 4); + MD5_Update(&ct, &vnode, 4); + MD5_Final(digest, &ct); memcpy(&ino, digest, sizeof(afs_int32)); ino ^= (ino ^ vno) & 1; } else { diff --git a/src/crypto/kernel/config.h b/src/crypto/kernel/config.h new file mode 100644 index 000000000..9d60b4805 --- /dev/null +++ b/src/crypto/kernel/config.h @@ -0,0 +1,4 @@ +#include +#include "afs/param.h" +#include "afs/sysincludes.h" +#include "afsincludes.h" diff --git a/src/crypto/kernel/roken.h b/src/crypto/kernel/roken.h new file mode 100644 index 000000000..e69de29bb diff --git a/src/libafs/Makefile.common.in b/src/libafs/Makefile.common.in index 8bd1193ee..ca31511af 100644 --- a/src/libafs/Makefile.common.in +++ b/src/libafs/Makefile.common.in @@ -23,6 +23,7 @@ TOP_SRC_VNOPS = ${TOP_SRCDIR}/afs/VNOPS TOP_SRC_RXKAD = ${TOP_SRCDIR}/rxkad COMMON_INCLUDE = -I. -I.. -I../nfs \ + -I$(TOP_SRCDIR)/crypto/kernel \ -I${TOP_SRCDIR} \ -I${TOP_SRCDIR}/afs \ -I${TOP_SRCDIR}/afs/${MKAFS_OSTYPE} \ @@ -30,6 +31,7 @@ COMMON_INCLUDE = -I. -I.. -I../nfs \ -I${TOP_SRCDIR}/rx/${MKAFS_OSTYPE} \ -I${TOP_SRCDIR}/rxkad \ -I${TOP_SRCDIR}/util \ + -I${TOP_SRCDIR}/external/heimdal \ -I${TOP_OBJDIR}/src \ -I${TOP_OBJDIR}/src/afs \ -I${TOP_OBJDIR}/src/afs/${MKAFS_OSTYPE} \ @@ -93,7 +95,6 @@ AFSAOBJS = \ afs_init.o \ afs_lock.o \ afs_mariner.o \ - afs_md5.o \ afs_memcache.o \ afs_fetchstore.o \ afs_osi.o \ @@ -170,6 +171,7 @@ AFSAOBJS = \ xdr_afsuuid.o \ xdr.o \ Ktoken.xdr.o \ + md5.o \ afs_uuid.o $(AFS_OS_OBJS) # These next two allow nfs and nonfs builds to occur in the same directory. @@ -274,8 +276,6 @@ afs_init.o: $(TOP_SRC_AFS)/afs_init.c $(CRULE_OPT) afs_mariner.o: $(TOP_SRC_AFS)/afs_mariner.c $(CRULE_OPT) -afs_md5.o: $(TOP_SRC_AFS)/afs_md5.c - $(CRULE_OPT) afs_osidnlc.o: $(TOP_SRC_AFS)/afs_osidnlc.c $(CRULE_OPT) afs_osi.o: $(TOP_SRC_AFS)/afs_osi.c @@ -486,6 +486,10 @@ afs_pag_user.o: $(TOP_SRC_AFS)/afs_user.c rx_pag_knet.o: $(TOP_SRC_RX)/${MKAFS_OSTYPE}/rx_knet.c $(CRULE_NOOPT) +# Crypto +md5.o: $(TOP_SRCDIR)/external/heimdal/hcrypto/md5.c + $(CRULE_OPT) + # Files which are specific to particular architectures/targets # but have common build rules. Place here instead of duplicating # in the per-platform Makefiles. diff --git a/src/libafs/MakefileProto.LINUX.in b/src/libafs/MakefileProto.LINUX.in index 63b2f3522..655c0ce80 100644 --- a/src/libafs/MakefileProto.LINUX.in +++ b/src/libafs/MakefileProto.LINUX.in @@ -79,6 +79,9 @@ COMMON_DEFINES=-D__KERNEL__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} LINUX_KERNEL_PATH=@LINUX_KERNEL_PATH@ LINUX_KERNEL_BUILD=@LINUX_KERNEL_BUILD@ +CFLAGS_md5.o = -I$(TOP_SRCDIR)/crypto/kernel \ + -I$(TOP_SRCDIR)/external/heimdal/hcrypto + # System specific build commands and flags # All the platform-specific and kernel-related things are provided by diff --git a/src/libuafs/Makefile.common.in b/src/libuafs/Makefile.common.in index e91128c84..70a1300a2 100644 --- a/src/libuafs/Makefile.common.in +++ b/src/libuafs/Makefile.common.in @@ -108,7 +108,6 @@ UAFSOBJ = \ $(UOBJ)/afs_lock.o \ $(UOBJ)/afs_mariner.o \ $(UOBJ)/afs_memcache.o \ - $(UOBJ)/afs_md5.o \ $(UOBJ)/afs_fetchstore.o \ $(UOBJ)/afs_osidnlc.o \ $(UOBJ)/afs_osi_pag.o \ @@ -250,7 +249,6 @@ AFSWEBOBJ = \ $(WEBOBJ)/afs_lock.o \ $(WEBOBJ)/afs_mariner.o \ $(WEBOBJ)/afs_memcache.o \ - $(WEBOBJ)/afs_md5.o \ $(WEBOBJ)/afs_fetchstore.o \ $(WEBOBJ)/afs_osidnlc.o \ $(WEBOBJ)/afs_osi_pag.o \ @@ -392,7 +390,6 @@ AFSWEBOBJKRB = \ $(WEBOBJ)/afs_lock.o \ $(WEBOBJ)/afs_mariner.o \ $(WEBOBJ)/afs_memcache.o \ - $(WEBOBJ)/afs_md5.o \ $(WEBOBJ)/afs_fetchstore.o \ $(WEBOBJ)/afs_osidnlc.o \ $(WEBOBJ)/afs_osi_pag.o \ @@ -529,7 +526,6 @@ JUAFSOBJ = \ $(JUAFS)/afs_lock.o \ $(JUAFS)/afs_mariner.o \ $(JUAFS)/afs_memcache.o \ - $(JUAFS)/afs_md5.o \ $(JUAFS)/afs_fetchstore.o \ $(JUAFS)/afs_osidnlc.o \ $(JUAFS)/afs_osi_pag.o \ @@ -752,8 +748,6 @@ $(UOBJ)/afs_lock.o: $(TOP_SRC_AFS)/afs_lock.c $(CRULE1) $(UOBJ)/afs_memcache.o: $(TOP_SRC_AFS)/afs_memcache.c $(CRULE1) -$(UOBJ)/afs_md5.o: $(TOP_SRC_AFS)/afs_md5.c - $(CRULE1) $(UOBJ)/afs_fetchstore.o: $(TOP_SRC_AFS)/afs_fetchstore.c $(CRULE1) $(UOBJ)/afs_stat.o: $(TOP_SRC_AFS)/afs_stat.c -- 2.39.5