]> git.feebdaed.xyz Git - 0xmirror/libreswan.git/commitdiff
extract: move resolve+dns code to resolve_helper.[hc]
authorAndrew Cagney <cagney@gnu.org>
Tue, 2 Dec 2025 21:33:53 +0000 (16:33 -0500)
committerAndrew Cagney <cagney@gnu.org>
Wed, 3 Dec 2025 22:04:28 +0000 (17:04 -0500)
programs/pluto/Makefile
programs/pluto/helper.h
programs/pluto/resolve_helper.c [new file with mode: 0644]
programs/pluto/resolve_helper.h [new file with mode: 0644]
programs/pluto/whack_add.c

index 1d7f71be4f96159fb640ec3bdf7cbc20670501db..fb34310bb04a6cd1b7e98617a9fe0258244cb5ea 100644 (file)
@@ -260,7 +260,10 @@ OBJS += server.o
 OBJS += server_fork.o
 OBJS += server_pool.o
 OBJS += server_run.o
+
 OBJS += helper.o
+OBJS += resolve_helper.o
+
 OBJS += hash_table.o list_entry.o
 OBJS += timer.o
 OBJS += ikev2_host_pair.o
index 4bf6e39ebc404106e645c6ad240ea4b71a6348bf..4c4a96db220ae4bbc4a3b91748dd71714bace9f9 100644 (file)
  * down the main thread with cryptography, increasing throughput.
  */
 
-#ifndef HELPERS_H
-#define HELPERS_H
+#ifndef HELPER_H
+#define HELPER_H
+
+#include <stdint.h>    /* for uintmax_t; */
+
+#include "where.h"
 
 #include "verbose.h"
 
 struct help_request;
+struct refcnt;
 
 #define alloc_help_request(WHAT, DISCARD_CONTENT, OWNER)               \
        ({                                                              \
diff --git a/programs/pluto/resolve_helper.c b/programs/pluto/resolve_helper.c
new file mode 100644 (file)
index 0000000..31009de
--- /dev/null
@@ -0,0 +1,75 @@
+/* resolve helper, for libreswan
+ *
+ * Copyright (C) 2025 Andrew Cagney
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <https://www.gnu.org/licenses/gpl2.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ *
+ */
+
+#include "resolve_helper.h"
+
+#include "refcnt.h"
+#include "defaultroute.h"
+
+#include "extract.h"
+#include "helper.h"
+#include "connections.h"
+#include "log.h"
+
+static helper_fn resolve_helper;
+static helper_cb resolve_continue;
+
+static refcnt_discard_content_fn discard_resolve_help_request_content;
+
+struct help_request {
+       refcnt_t refcnt;
+       struct whack_message_refcnt *wmr;
+       struct extracted_host_addrs extracted_host_addrs;
+       struct resolved_host_addrs resolved_host_addrs;
+       resolve_helper_cb *callback;
+};
+
+void discard_resolve_help_request_content(void *pointer, const struct logger *owner, where_t where)
+{
+       struct help_request *request = pointer;
+       refcnt_delref(&request->wmr, owner, where);
+}
+
+void request_resolve_help(struct whack_message_refcnt *wmr,
+                         const struct extracted_host_addrs *extracted_host_addrs,
+                         resolve_helper_cb *callback,
+                         struct logger *logger)
+{
+       struct help_request *request = alloc_help_request("resolve helper",
+                                                         discard_resolve_help_request_content,
+                                                         logger);
+       request->wmr = refcnt_addref(wmr, logger, HERE);
+       request->extracted_host_addrs = (*extracted_host_addrs);
+       request->callback = callback;
+       request_help(request, resolve_helper, logger);
+}
+
+helper_cb *resolve_helper(struct help_request *request,
+                         struct verbose verbose,
+                         enum helper_id helper_id UNUSED)
+{
+       request->resolved_host_addrs = resolve_extracted_host_addrs(&request->extracted_host_addrs, verbose);
+       return resolve_continue;
+}
+
+void resolve_continue(struct help_request *request,
+                     struct verbose verbose)
+{
+       request->callback(request->wmr,
+                         &request->extracted_host_addrs,
+                         &request->resolved_host_addrs,
+                         verbose);
+}
diff --git a/programs/pluto/resolve_helper.h b/programs/pluto/resolve_helper.h
new file mode 100644 (file)
index 0000000..80f80ad
--- /dev/null
@@ -0,0 +1,37 @@
+/* resolve helper, for libreswan
+ *
+ * Copyright (C) 2025 Andrew Cagney
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <https://www.gnu.org/licenses/gpl2.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ *
+ */
+
+#ifndef RESOLVE_HELPER_H
+#define RESOLVE_HELPER_H
+
+#include "verbose.h"
+
+struct whack_message_refcnt;
+struct extracted_host_addrs;
+struct resolved_host_addrs;
+struct logger;
+
+typedef void (resolve_helper_cb)(struct whack_message_refcnt *wmr,
+                                const struct extracted_host_addrs *extracted_host_addrs,
+                                const struct resolved_host_addrs *resolved_host_addrs,
+                                struct verbose verbose);
+
+void request_resolve_help(struct whack_message_refcnt *wmr,
+                         const struct extracted_host_addrs *extracted_host_addrs,
+                         resolve_helper_cb *callback,
+                         struct logger *logger);
+
+#endif
index b62ffba344f6900d62a7606f35e5501bdd9d9b3b..885d6207ecc8ff6890d843fbaedb4ebe4f4bcf72 100644 (file)
 #include "connections.h"
 #include "whack_delete.h"
 #include "extract.h"
-#include "helper.h"
+#include "resolve_helper.h"
 
-static helper_fn add_connections_resolve_helper;
-static helper_cb add_connections_resolve_continue;
-
-static refcnt_discard_content_fn discard_whack_add_request_content;
-
-struct help_request {
-       refcnt_t refcnt;
-       struct whack_message_refcnt *wmr;
-       struct extracted_host_addrs extracted_host_addrs;
-       struct resolved_host_addrs resolved_host_addrs;
-};
-
-void discard_whack_add_request_content(void *pointer, const struct logger *owner, where_t where)
-{
-       struct help_request *request = pointer;
-       refcnt_delref(&request->wmr, owner, where);
-}
+static resolve_helper_cb add_connections_resolve_continue;
 
 PRINTF_LIKE(2)
 static void llog_add_connection_failed(struct verbose verbose,
@@ -298,30 +282,12 @@ static void permutate_connection_subnets(const struct whack_message *wm,
 
 }
 
-static void submit_add_connections(struct whack_message_refcnt *wmr,
-                                  const struct extracted_host_addrs *extracted_host_addrs,
-                                  struct logger *logger)
-{
-       struct help_request *request = alloc_help_request("ipsec add: resolve",
-                                                         discard_whack_add_request_content,
-                                                         logger);
-       request->wmr = refcnt_addref(wmr, logger, HERE);
-       request->extracted_host_addrs = (*extracted_host_addrs);
-       request_help(request, add_connections_resolve_helper, logger);
-}
-
-helper_cb *add_connections_resolve_helper(struct help_request *request,
-                                         struct verbose verbose,
-                                         enum helper_id helper_id UNUSED)
-{
-       request->resolved_host_addrs = resolve_extracted_host_addrs(&request->extracted_host_addrs, verbose);
-       return add_connections_resolve_continue;
-}
-
-void add_connections_resolve_continue(struct help_request *request,
+void add_connections_resolve_continue(struct whack_message_refcnt *wmr,
+                                     const struct extracted_host_addrs *extracted_host_addrs,
+                                     const struct resolved_host_addrs *resolved_host_addrs,
                                      struct verbose verbose)
 {
-       const struct whack_message *wm = &request->wmr->wm;
+       const struct whack_message *wm = &wmr->wm;
 
        /*
         * Reject {left,right}subnets=... combined with
@@ -357,8 +323,8 @@ void add_connections_resolve_continue(struct help_request *request,
        /* basic case, nothing special to synthize! */
        if (!have_subnets) {
                diag_t d = add_connection(wm,
-                                         &request->extracted_host_addrs,
-                                         &request->resolved_host_addrs,
+                                         extracted_host_addrs,
+                                         resolved_host_addrs,
                                          verbose.logger);
                if (d != NULL) {
                        llog_add_connection_failed(verbose, "%s", str_diag(d));
@@ -381,8 +347,8 @@ void add_connections_resolve_continue(struct help_request *request,
        }
 
        permutate_connection_subnets(wm,
-                                    &request->extracted_host_addrs,
-                                    &request->resolved_host_addrs,
+                                    extracted_host_addrs,
+                                    resolved_host_addrs,
                                     &left, &right, verbose);
        pfreeany(left.subnets.list);
        pfreeany(right.subnets.list);
@@ -451,7 +417,9 @@ void whack_add(struct whack_message_refcnt *wmr, struct show *s)
                        return;
                }
 
-               submit_add_connections(wmr, &extracted_host_addrs, conn_logger);
+               request_resolve_help(wmr, &extracted_host_addrs,
+                                    add_connections_resolve_continue,
+                                    conn_logger);
        }
        free_logger(&conn_logger, HERE);
 }