]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
Properly add ".SIG-ALG.REG.INT." to OMAPI key algorithms.
authorDamien Neil <source@isc.org>
Sat, 9 Dec 2000 00:10:55 +0000 (00:10 +0000)
committerDamien Neil <source@isc.org>
Sat, 9 Dec 2000 00:10:55 +0000 (00:10 +0000)
dhcpctl/remote.c
omapip/connection.c

index 6d14807adf22d7ca7c4cb6a4d90c8aeb0362f84b..a7c325215be4159dc394693c8abb02540dc444cf 100644 (file)
@@ -74,12 +74,26 @@ dhcpctl_status dhcpctl_new_authenticator (dhcpctl_handle *h,
        }
        strcpy (key -> name, name);
 
-       key -> algorithm = dmalloc (strlen (algorithm) + 1, MDL);
-       if (!key -> algorithm) {
-               omapi_auth_key_dereference (&key, MDL);
-               return ISC_R_NOMEMORY;
+       /* If the algorithm name isn't an FQDN, tack on the
+          .SIG-ALG.REG.NET. domain. */
+       if (strchr (algorithm, '.') == 0) {
+               static char add[] = ".SIG-ALG.REG.INT.";
+               key -> algorithm = dmalloc (strlen (algorithm) +
+                                           sizeof (add), MDL);
+               if (!key -> algorithm) {
+                       omapi_auth_key_dereference (&key, MDL);
+                       return ISC_R_NOMEMORY;
+               }
+               strcpy (key -> algorithm, algorithm);
+               strcat (key -> algorithm, add);
+       } else {
+               key -> algorithm = dmalloc (strlen (algorithm) + 1, MDL);
+               if (!key -> algorithm) {
+                       omapi_auth_key_dereference (&key, MDL);
+                       return ISC_R_NOMEMORY;
+               }
+               strcpy (key -> algorithm, algorithm);
        }
-       strcpy (key -> algorithm, algorithm);
 
        status = omapi_data_string_new (&key -> key, secret_len, MDL);
        if (status != ISC_R_SUCCESS) {
index 154d0e68fa46dcecfa1eda02bb8206a5f8514273..493926591e7ebc473e22b943a7667f92e8b7d9bb 100644 (file)
@@ -43,6 +43,7 @@
 
 #include <omapip/omapip_p.h>
 #include <arpa/inet.h>
+#include <arpa/nameser.h>
 
 OMAPI_OBJECT_ALLOC (omapi_connection,
                    omapi_connection_object_t, omapi_type_connection)
@@ -373,6 +374,7 @@ isc_result_t omapi_connection_connect (omapi_object_t *h)
                                }
                                return status;
                        }
+printf("EINPROGRESS\n");
                        c -> state = omapi_connection_connecting;
                        return ISC_R_INCOMPLETE;
                }
@@ -456,7 +458,11 @@ static isc_result_t make_dst_key (DST_KEY **dst_key, omapi_object_t *a) {
                        (a, (omapi_object_t *)0, "key", &key);
 
        if (status == ISC_R_SUCCESS) {
-               if (omapi_td_strcmp (algorithm -> value, "hmac-md5") == 0) {
+               if ((algorithm -> value -> type == omapi_datatype_data ||
+                    algorithm -> value -> type == omapi_datatype_string) &&
+                   strncasecmp (algorithm -> value -> u.buffer.value,
+                                NS_TSIG_ALG_HMAC_MD5 ".",
+                                algorithm -> value -> u.buffer.len) == 0) {
                        algorithm_id = KEY_HMAC_MD5;
                } else {
                        status = ISC_R_INVALIDARG;