Hello,

I recently had a need to use a wildcard certificate for a client setup and ran into issues using it. I've attached a patch with some modifcations I made to the 7.0.4 lib/tls.c source. I'm not really a C programmer so it'd be great if someone else could run with it and make a patch that could be added to Bacula.

--
Jim
--- bacula-7.0.4-orig/src/lib/tls.c     2014-06-03 03:28:41.000000000 -0500
+++ bacula-7.0.4/src/lib/tls.c  2014-07-19 17:00:26.706433784 -0500
@@ -351,7 +351,20 @@ bool tls_postconnect_verify_host(JCR *jc
             for (j = 0; j < sk_CONF_VALUE_num(val); j++) {
                nval = sk_CONF_VALUE_value(val, j);
                if (strcmp(nval->name, "DNS") == 0) {
-                  if (strcasecmp(nval->value, host) == 0) {
+                  if (strncasecmp(nval->value,"*.",2) == 0) {
+                     Dmsg0(250, "Wildcard Certificate\n");
+                     char cmp1[strlen(nval->value)];
+                     char cmp2[strlen(host)];
+                     const char *cmp_start;
+                     cmp_start = strstr(nval->value,".");
+                     
strncpy(cmp1,cmp_start,strlen(nval->value)-strspn(nval->value,"."));
+                     cmp_start = strstr(host,".");
+                     strncpy(cmp2,cmp_start,strlen(host)-strspn(host,"."));
+                     if (strcasecmp(cmp1,cmp2) == 0) {
+                        auth_success = true;
+                        goto success;
+                     }
+                  } else if (strcasecmp(nval->value, host) == 0) {
                      auth_success = true;
                      goto success;
                   }
@@ -374,7 +387,21 @@ bool tls_postconnect_verify_host(JCR *jc
             }
             neCN = X509_NAME_get_entry(subject, cnLastPos);
             asn1CN = X509_NAME_ENTRY_get_data(neCN);
-            if (strcasecmp((const char*)asn1CN->data, host) == 0) {
+            if (strncasecmp((const char*)asn1CN->data,"*.",2) == 0) {
+            /* wildcard certificate */
+               Dmsg0(250, "Wildcard Certificate\n");
+               char cmp1[strlen((const char*)asn1CN->data)];
+               char cmp2[strlen(host)];
+               const char *cmp_start;
+               cmp_start = strstr((const char*)asn1CN->data,".");
+               strncpy(cmp1,cmp_start,strlen((const 
char*)asn1CN->data)-strspn((const char*)asn1CN->data,"."));
+               cmp_start = strstr(host,".");
+               strncpy(cmp2,cmp_start,strlen(host)-strspn(host,"."));
+               if (strcasecmp(cmp1,cmp2) == 0) {
+                  auth_success = true;
+                  goto success;
+               }
+            } else if (strcasecmp((const char*)asn1CN->data, host) == 0) {
                auth_success = true;
                break;
             }
------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Bacula-devel mailing list
Bacula-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-devel

Reply via email to