diff -Nru milter-regex-1.8.orig/Makefile.linux milter-regex-1.8/Makefile.linux
--- milter-regex-1.8.orig/Makefile.linux	2007-01-11 16:49:52.000000000 +0100
+++ milter-regex-1.8/Makefile.linux	2010-09-24 22:33:19.000000000 +0200
@@ -6,13 +6,12 @@
 # see milter-regex.init for an init script for RedHat/Fedora
 # (contributed by admin@2ka.mipt.ru)
 
-CFLAGS=		-g
-LDFLAGS=	-lmilter -lpthread
+LIBS=	-lmilter -lpthread
 
 all: milter-regex milter-regex.cat8
 
-milter-regex: milter-regex.o eval.o strlcpy.o y.tab.o
-	gcc -o milter-regex milter-regex.o eval.o strlcpy.o y.tab.o $(LDFLAGS)
+milter-regex: milter-regex.o eval.o strlcpy.o strlcat.o y.tab.o
+	gcc $(LDFLAGS) -o milter-regex milter-regex.o eval.o strlcpy.o strlcat.o y.tab.o $(LIBS)
 
 milter-regex.o: milter-regex.c eval.h
 	gcc $(CFLAGS) -c milter-regex.c
@@ -22,7 +21,10 @@
 
 strlcpy.o: strlcpy.c
 	gcc $(CFLAGS) -c strlcpy.c
-	
+
+strlcat.o: strlcat.c
+	gcc $(CFLAGS) -c strlcat.c
+
 y.tab.o: y.tab.c
 	gcc $(CFLAGS) -c y.tab.c
 
diff -Nru milter-regex-1.8.orig/parse.y milter-regex-1.8/parse.y
--- milter-regex-1.8.orig/parse.y	2007-01-11 16:49:52.000000000 +0100
+++ milter-regex-1.8/parse.y	2010-09-24 22:33:19.000000000 +0200
@@ -71,6 +71,7 @@
 	} v;
 	int lineno;
 } YYSTYPE;
+#define YYSTYPE_IS_DECLARED 1
 
 %}
 
@@ -481,9 +482,9 @@
 		*r = rs;
 		return (0);
 	}
-#ifdef __linux__
-	(void)&yyrcsid; /* warning about yyrcsid declared but unused */
-#endif
+//#ifdef __linux__
+//	(void)&yyrcsid; /* warning about yyrcsid declared but unused */
+//#endif
 }
 
 static int
diff -Nru milter-regex-1.8.orig/strlcat.c milter-regex-1.8/strlcat.c
--- milter-regex-1.8.orig/strlcat.c	1970-01-01 01:00:00.000000000 +0100
+++ milter-regex-1.8/strlcat.c	2010-09-24 22:34:31.000000000 +0200
@@ -0,0 +1,69 @@
+/*	$OpenBSD: strlcat.c,v 1.2 1999/06/17 16:28:58 millert Exp $	*/
+
+/*-
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+ * 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. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``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 AUTHOR 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 <sys/types.h>
+#include <string.h>
+
+/*
+ * Appends src to string dst of size siz (unlike strncat, siz is the
+ * full size of dst, not space left).  At most siz-1 characters
+ * will be copied.  Always NUL terminates (unless siz <= strlen(dst)).
+ * Returns strlen(src) + MIN(siz, strlen(initial dst)).
+ * If retval >= siz, truncation occurred.
+ */
+size_t
+strlcat(dst, src, siz)
+	char *dst;
+	const char *src;
+	size_t siz;
+{
+	char *d = dst;
+	const char *s = src;
+	size_t n = siz;
+	size_t dlen;
+
+	/* Find the end of dst and adjust bytes left but don't go past end */
+	while (n-- != 0 && *d != '\0')
+		d++;
+	dlen = d - dst;
+	n = siz - dlen;
+
+	if (n == 0)
+		return(dlen + strlen(s));
+	while (*s != '\0') {
+		if (n != 1) {
+			*d++ = *s;
+			n--;
+		}
+		s++;
+	}
+	*d = '\0';
+
+	return(dlen + (s - src));	/* count does not include NUL */
+}
