rc10 still has this problem. Here's updated patch that works for me on new version.
-- --HoverHell (ICQ#174520, XMPP/GTalk here, GPG 30E202CB).
diff -dpr openvpn-2.1~rc10-orig/options.c openvpn-2.1~rc10/options.c *** openvpn-2.1~rc10-orig/options.c 2008-09-14 12:20:27.242403337 +0500 --- openvpn-2.1~rc10/options.c 2008-09-14 12:22:41.416404095 +0500 *************** add_option (struct options *options, *** 3436,3446 **** else if (streq (p[0], "lladdr") && p[1]) { VERIFY_PERMISSION (OPT_P_UP); ! if (ip_addr_dotted_quad_safe (p[1])) /* FQDN -- IP address only */ options->lladdr = p[1]; else { ! msg (msglevel, "lladdr parm '%s' must be an IP address", p[1]); goto err; } } --- 3436,3446 ---- else if (streq (p[0], "lladdr") && p[1]) { VERIFY_PERMISSION (OPT_P_UP); ! if (mac_addr_safe (p[1])) /* MAC address only */ options->lladdr = p[1]; else { ! msg (msglevel, "lladdr parm '%s' must be an MAC address", p[1]); goto err; } } diff -dpr openvpn-2.1~rc10-orig/socket.c openvpn-2.1~rc10/socket.c *** openvpn-2.1~rc10-orig/socket.c 2008-09-14 12:20:27.477402960 +0500 --- openvpn-2.1~rc10/socket.c 2008-09-14 12:25:55.614403897 +0500 *************** ip_addr_dotted_quad_safe (const char *do *** 294,299 **** --- 294,340 ---- } } + bool + mac_addr_safe (const char *mac_addr) + { + /* verify non-NULL */ + if (!mac_addr) + return false; + + /* verify length is within limits */ + if (strlen (mac_addr) > 17) + return false; + + /* verify that all chars are either alphanumeric or ':' and that no + alphanumeric substring is greater than 2 chars */ + { + int nnum = 0; + const char *p = mac_addr; + int c; + + while ((c = *p++)) + { + if ( (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ) + { + ++nnum; + if (nnum > 2) + return false; + } + else if (c == ':') + { + nnum = 0; + } + else + return false; + } + } + + /* error-checking is left to script invoked in lladdr.c */ + return true; + + } + + static bool dns_addr_safe (const char *addr) { diff -dpr openvpn-2.1~rc10-orig/socket.h openvpn-2.1~rc10/socket.h *** openvpn-2.1~rc10-orig/socket.h 2008-09-14 12:20:26.997403357 +0500 --- openvpn-2.1~rc10/socket.h 2008-09-14 12:25:53.908409244 +0500 *************** int openvpn_inet_aton (const char *dotte *** 399,404 **** --- 399,405 ---- /* integrity validation on pulled options */ bool ip_addr_dotted_quad_safe (const char *dotted_quad); + bool mac_addr_safe (const char *mac_addr); bool ip_or_dns_addr_safe (const char *addr, const bool allow_fqdn); socket_descriptor_t create_socket_tcp (void);