diff -Naur pptpd-1.2.1_original/configure pptpd-1.2.1/configure
--- pptpd-1.2.1_original/configure	Wed Jun 23 09:39:15 2004
+++ pptpd-1.2.1/configure	Thu Feb 17 09:05:40 2005
@@ -5764,4 +5764,4 @@
   else
     cat >>confdefs.h <<\_ACEOF
-#define PPP_BINARY "/usr/sbin/pppd"
+#define PPP_BINARY "/usr/sbin/pptp-pppd"
 _ACEOF

diff -Naur pptpd-1.2.1_original/defaults.h pptpd-1.2.1/defaults.h
--- pptpd-1.2.1_original/defaults.h	Wed Apr 28 13:36:07 2004
+++ pptpd-1.2.1/defaults.h	Thu Feb 17 09:01:25 2005
@@ -30,7 +30,7 @@
 /* Default configuration values, mostly configurable */
 
 #if !defined(PPPD_IP_ALLOC)
-#define MAX_CONNECTIONS			100
+#define MAX_CONNECTIONS			1000
 #define DEFAULT_LOCAL_IP_LIST		"192.168.0.1-100"
 #define DEFAULT_REMOTE_IP_LIST		"192.168.1.1-100"
 #endif
diff -Naur pptpd-1.2.1_original/pptpd.c pptpd-1.2.1/pptpd.c
--- pptpd-1.2.1_original/pptpd.c	Mon May 17 08:32:00 2004
+++ pptpd-1.2.1/pptpd.c	Thu Feb 17 09:01:25 2005
@@ -539,6 +539,33 @@
 }
 
 /* Check if it's a valid IP range */
+static int isPAIpRange(char *str)
+{
+	int dashes = 0;
+	int dots = 0;
+
+#if DEBUG_IP_PARSER
+	syslog(LOG_DEBUG, "MGR: Checking if %s is a valid PacketAlarm IP range", str);
+#endif
+	do {
+		if (*str == '-')
+			dashes++;
+		else if (*str == '.')
+			dots++;
+		else if (!strchr("0123456789", *str)) {
+#if DEBUG_IP_PARSER
+			syslog(LOG_DEBUG, "MGR: Not an PacketAlarm IP range: character %c is not valid", *str);
+#endif
+			return 0;
+		}
+	} while (*++str);
+#if DEBUG_IP_PARSER
+	syslog(LOG_DEBUG, "MGR: Dashes = %d (wanted: 1), Dots = %d (wanted: 6)", dashes, dots);
+#endif
+	return (dashes == 1 && dots == 6);
+}
+
+/* Check if it's a valid IP range */
 static int isIpRange(char *str)
 {
 	int dashes = 0;
@@ -584,6 +611,18 @@
 	char ipc[8];
 	char ipd[8];
 
+	char pa_1_ipa[4];	/* xxx (largest we can get) */
+	char pa_1_ipb[4];
+	char pa_1_ipc[4];
+	char pa_1_ipd[4];
+	char pa_2_ipa[4];
+	char pa_2_ipb[4];
+	char pa_2_ipc[4];
+	char pa_2_ipd[4];
+	char pa_ip_pre[16];
+	char pa_ip_post[16];
+	int segment = 0;
+
 	char ip_pre[13];	/* xxx.xxx.xxx. (largest we can get) */
 	char ip_post[13];
 
@@ -592,7 +631,7 @@
 
 	int bail = FALSE;	/* so we know when to stop formatting the ip line */
 
-	int lower, upper, n;
+	int lower, upper, counter, n, o, p;
 
 	num = 0;
 
@@ -612,7 +651,7 @@
 		syslog(LOG_DEBUG, "MGR: Parsing segment: %s", tmpstr2);
 #endif
 
-		if (!isIpRange(tmpstr2)) {
+		if (!isIpRange(tmpstr2) && !isPAIpRange(tmpstr2)) {
 			/* We got a normal IP
 			 * Check if the IP address is valid, use it if so
 			 */
@@ -632,6 +671,167 @@
 			else
 				strlcpy(remoteIP[num], tmpstr7, 16);
 			num++;
+		} else if (isPAIpRange(tmpstr2)){
+			/* Got a range;
+			 * eg. 192.168.0.234-192.168.12.38
+			 */
+
+			/* lose the "."'s */
+			while ((tmpstr3 = strchr(tmpstr2, '.')) != NULL) {
+				pos = tmpstr3 - tmpstr2;
+				tmpstr2[pos] = ' ';
+			}
+			/* lose the "-"' */
+			while ((tmpstr3 = strchr(tmpstr2, '-')) != NULL) {
+				pos = tmpstr3 - tmpstr2;
+				tmpstr2[pos] = ' ';
+			}
+			/* Got a range;
+			 * eg. 192 168 0 234 192 168 12 38
+			 */
+			sscanf(tmpstr2, "%3s %3s %3s %3s %3s %3s %3s %3s", pa_1_ipa, pa_1_ipb, pa_1_ipc, pa_1_ipd, pa_2_ipa, pa_2_ipb, pa_2_ipc, pa_2_ipd);
+#if DEBUG_IP_PARSER
+			syslog(LOG_DEBUG, "MGR: should be a PacketAlarm IP Range");
+#endif
+			if(strcmp(pa_1_ipa,pa_2_ipa) == 0) {
+				segment = 1;
+				sprintf(pa_ip_pre, "%.3s.", pa_1_ipa);
+				if(strcmp(pa_1_ipb,pa_2_ipb) == 0) {
+					segment = 2;
+					sprintf(pa_ip_pre, "%s%.3s.",pa_ip_pre, pa_1_ipb);
+					if(strcmp(pa_1_ipc,pa_2_ipc) == 0) {
+						segment = 3;
+						sprintf(pa_ip_pre, "%s%.3s.",pa_ip_pre, pa_1_ipc);
+						if(strcmp(pa_1_ipd,pa_2_ipd) == 0) {
+							segment = 4;
+							sprintf(pa_ip_pre, "%s%.3s",pa_ip_pre, pa_1_ipd);
+						}
+					}
+				}
+			}
+			counter = 0;
+			if(segment == 4) {
+				sprintf(pa_ip_post, "%16s",pa_ip_pre);
+				/* Check if the ip address is valid */
+				if ((tmpstr7 = validip(pa_ip_post)) == NULL) {
+					syslog(LOG_ERR, "MGR: Bad IP address (%s) in config file!", pa_ip_post);
+					exit(1);
+				}
+				if (num == MAX_CONNECTIONS) {
+					syslog(LOG_WARNING, "MGR: Max connections reached, extra IP addresses ignored");
+					return;
+				}
+#if DEBUG_IP_PARSER
+				syslog(LOG_DEBUG, "MGR: Setting IP %d = %s", num, pa_ip_post);
+#endif
+				if (type == LOCAL)
+					strlcpy(localIP[num], pa_ip_pre, 16);
+				else
+					strlcpy(remoteIP[num], pa_ip_pre, 16);
+				num++;
+			} else if(segment == 3) {
+				while((num <= MAX_CONNECTIONS) && ((atoi(pa_1_ipd) + counter) < atoi(pa_2_ipd))) {
+					counter ++;
+					sprintf(pa_ip_post, "%.12s%d",pa_ip_pre, atoi(pa_1_ipd)+ counter);
+					if ((tmpstr7 = validip(pa_ip_post)) == NULL) {
+						syslog(LOG_ERR, "MGR: Bad IP address (%s) in config file!", pa_ip_post);
+						exit(1);
+					}
+					if (num == MAX_CONNECTIONS) {
+						syslog(LOG_WARNING, "MGR: Max connections reached, extra IP addresses ignored");
+						return;
+					}
+#if DEBUG_IP_PARSER
+					syslog(LOG_DEBUG, "MGR: Setting IP %d = %s", num, pa_ip_post);
+#endif
+					if (type == LOCAL)
+						strlcpy(localIP[num], pa_ip_post, 16);
+					else
+						strlcpy(remoteIP[num], pa_ip_post, 16);
+					num++;
+				}
+			} else if(segment == 2) {
+				while(((atoi(pa_1_ipc) + counter) <= atoi(pa_2_ipc)) && (num <= MAX_CONNECTIONS)) {
+					for (n = 2; n < 255; n++)
+					{
+						sprintf(pa_ip_post, "%.9s%d.%d",pa_ip_pre, atoi(pa_1_ipc)+ counter, n);
+						if ((tmpstr7 = validip(pa_ip_post)) == NULL) {
+							syslog(LOG_ERR, "MGR: Bad IP address (%s) in config file!", pa_ip_post);
+							exit(1);
+						}
+						if (num == MAX_CONNECTIONS) {
+							syslog(LOG_WARNING, "MGR: Max connections reached, extra IP addresses ignored");
+							return;
+						}
+#if DEBUG_IP_PARSER
+						syslog(LOG_DEBUG, "MGR: Setting IP %d = %s", num, pa_ip_post);
+#endif
+						if (type == LOCAL)
+							strlcpy(localIP[num], pa_ip_post, 16);
+						else
+							strlcpy(remoteIP[num], pa_ip_post, 16);
+						num++;
+					}
+					counter ++;
+				}
+			} else if(segment == 1) {
+				while(((atoi(pa_1_ipb) + counter) <= atoi(pa_2_ipb)) && (num <= MAX_CONNECTIONS)) {
+					for (n = 1; n <= 255; n++)
+					{
+						for (o = 2; o < 255; o++)
+						{
+							sprintf(pa_ip_post, "%.6s%d.%d.%d",pa_ip_pre, atoi(pa_1_ipb)+ counter, n, o);
+							if ((tmpstr7 = validip(pa_ip_post)) == NULL) {
+								syslog(LOG_ERR, "MGR: Bad IP address (%s) in config file!", pa_ip_post);
+								exit(1);
+							}
+							if (num == MAX_CONNECTIONS) {
+								syslog(LOG_WARNING, "MGR: Max connections reached, extra IP addresses ignored");
+								return;
+							}
+#if DEBUG_IP_PARSER
+							syslog(LOG_DEBUG, "MGR: Setting IP %d = %s", num, pa_ip_post);
+#endif
+							if (type == LOCAL)
+								strlcpy(localIP[num], pa_ip_post, 16);
+							else
+								strlcpy(remoteIP[num], pa_ip_post, 16);
+							num++;
+						}
+					}
+					counter ++;
+				}
+			} else if(segment == 0) {
+				while(((atoi(pa_1_ipa) + counter) <= atoi(pa_2_ipa)) && (num <= MAX_CONNECTIONS)) {
+					for (n = 1; n <= 255; n++)
+					{
+						for (o = 1; o <= 255; o++)
+						{
+							for (p = 2; p < 255; p++)
+							{
+								sprintf(pa_ip_post, "%d.%d.%d.%d",atoi(pa_1_ipa)+ counter, n, o, p);
+								if ((tmpstr7 = validip(pa_ip_post)) == NULL) {
+									syslog(LOG_ERR, "MGR: Bad IP address (%s) in config file!", pa_ip_post);
+									exit(1);
+								}
+								if (num == MAX_CONNECTIONS) {
+									syslog(LOG_WARNING, "MGR: Max connections reached, extra IP addresses ignored");
+									return;
+								}
+#if DEBUG_IP_PARSER
+								syslog(LOG_DEBUG, "MGR: Setting IP %d = %s", num, pa_ip_post);
+#endif
+								if (type == LOCAL)
+									strlcpy(localIP[num], pa_ip_post, 16);
+								else
+									strlcpy(remoteIP[num], pa_ip_post, 16);
+								num++;
+							}
+						}
+					}
+					counter ++;
+				}
+			}
 		} else {
 			/* Got a range;
 			 * eg. 192.168.0.234-238

