diff -ru radius/src/radiusd.c radius.new/src/radiusd.c
--- radius/src/radiusd.c	Thu Jun 24 09:40:42 1999
+++ radius.new/src/radiusd.c	Tue Mar  5 22:31:18 2002
@@ -2385,18 +2385,30 @@
 AUTH_REQ	*authreq;
 u_char		*secret;
 {
-	u_char	buffer[128];
-	int	secretlen;
+	u_char	*buffer;
+	size_t	secretlen;
+	size_t	len;
 
-	/* Use the secret to setup the decryption digest */
-	memset(buffer, 0, sizeof(buffer));
 	secretlen = strlen((char *)secret);
-	memcpy((char *)buffer, (char *)secret,secretlen);
+	len = secretlen + AUTH_VECTOR_LEN;
+
+	memset(digest, 0, sizeof(digest));
+
+	buffer = (u_char *)malloc(len+1);
+	if(buffer == NULL) 
+		return;
+
+	/* Use the secret to setup the decryption digest */
+	memset(buffer, 0, len+1);
+	memcpy((char *)buffer, (char *)secret, secretlen);
 	memcpy(buffer + secretlen, authreq->vector, AUTH_VECTOR_LEN);
-	md5_calc(digest, buffer, secretlen + AUTH_VECTOR_LEN);
-	memset(buffer, 0, secretlen+AUTH_VECTOR_LEN);
+	md5_calc(digest, buffer, len);
+	memset(buffer, 0, len);
+
+	free(buffer);
 	return;
 }
+
 
 /*************************************************************************
  *
