Index: src/lib/radius.c
===================================================================
RCS file: /source/radiusd/src/lib/radius.c,v
retrieving revision 1.211
diff -u -u -r1.211 radius.c
--- src/lib/radius.c	6 Dec 2007 09:01:47 -0000	1.211
+++ src/lib/radius.c	13 Dec 2007 12:24:07 -0000
@@ -841,11 +841,6 @@
 		break;
 
 	case FLAG_ENCRYPT_TUNNEL_PASSWORD:
-		if (!original) {
-			librad_log("ERROR: No request packet, cannot encrypt %s attribute in the vp.", vp->name);
-			return -1;
-		}
-
 		/*
 		 *	Check if 255 - offset - total_length is less
 		 *	than 18.  If so, we can't fit the data into
@@ -857,9 +852,27 @@
 		 */
 		if ((255 - offset - total_length) < 18) return 0;
 
-		make_tunnel_passwd(ptr + offset, &len,
-				   data, len, 255 - offset - total_length,
-				   secret, original->vector);
+        	switch (packet->code) {
+	        case PW_AUTHENTICATION_ACK:
+        	case PW_AUTHENTICATION_REJECT:
+        	case PW_ACCESS_CHALLENGE:
+			if (!original) {
+				librad_log("ERROR: No request packet, cannot encrypt %s attribute in the vp.", vp->name);
+				return -1;
+			}
+			make_tunnel_passwd(ptr + offset, &len,
+					   data, len, 255 - offset - total_length,
+					   secret, original->vector);
+                	break;
+	        case PW_ACCOUNTING_REQUEST:
+        	case PW_DISCONNECT_REQUEST:
+	        case PW_COA_REQUEST:
+        	default:
+			make_tunnel_passwd(ptr + offset, &len,
+					   data, len, 255 - offset - total_length,
+					   secret, packet->vector);
+	                break;
+        	}
 		break;
 
 		/*
