diff -Naur openvpn-2.0.9/init.c openvpn/init.c
--- openvpn-2.0.9/init.c	2012-04-12 11:21:34.383811000 -0700
+++ openvpn/init.c	2012-04-12 11:22:35.606607000 -0700
@@ -696,8 +696,20 @@
           j++;
           //msg(M_INFO, ">>>> store ip address <%s:%d>\n", opl->array[i].hostname, opl->array[i].port);
         } else {
-          char srv_name[MAXHOSTNAMELEN];
-          openvpn_snprintf(srv_name, MAXHOSTNAMELEN, "_vpn.%s.%s", c->options.proto?"_tcp":"_udp", opl->array[i]);
+          char *p, srv_name[MAXHOSTNAMELEN], buffer[MAXHOSTNAMELEN]="";
+          if (strlen(opl->array[i].hostname) < MAXHOSTNAMELEN ) {
+            strcpy(buffer, opl->array[i].hostname);
+          } else {
+            strncpy(buffer, opl->array[i].hostname, MAXHOSTNAMELEN);
+            buffer[MAXHOSTNAMELEN-1]='\0';
+          }
+          for (p=buffer; *p!='\0' && *p!='.'; p++);
+          if (*p == '.') {
+            *p++='\0';
+            openvpn_snprintf(srv_name, MAXHOSTNAMELEN, "_%s.%s.%s", buffer, c->options.proto?"_tcp":"_udp", p);
+          } else {
+            openvpn_snprintf(srv_name, MAXHOSTNAMELEN, "_vpn.%s.%s", c->options.proto?"_tcp":"_udp", opl->array[i].hostname);
+          }
           // do SRV lookup
           msg(M_INFO, "Do SRV lookup on <%s>\n", srv_name);
           if (0==__dns_start_srv_lookup(srv_name, &g_query_result)) {
