From: Selva Nair <selva.n...@gmail.com>

--management-client has an obscure and undocumented feature
to take a file argument where the peer's address and port are
recorded. This has become dead code over time.

- reactivate the dead code
- make it work with v6 addresses as well
- do not exit on error in writing the record

Signed-off-by: Selva Nair <selva.n...@gmail.com>
---

Alternatively we could remove this "feature" and related code.

 src/openvpn/manage.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/src/openvpn/manage.c b/src/openvpn/manage.c
index 21c7ccdd..548d3b9a 100644
--- a/src/openvpn/manage.c
+++ b/src/openvpn/manage.c
@@ -1621,23 +1621,19 @@ man_record_peer_info(struct management *man)
     if (man->settings.write_peer_info_file)
     {
         bool success = false;
-#ifdef HAVE_GETSOCKNAME
         if (socket_defined(man->connection.sd_cli))
         {
-            struct sockaddr_in addr;
+            struct sockaddr_storage addr;
             socklen_t addrlen = sizeof(addr);
             int status;
 
-            CLEAR(addr);
             status = getsockname(man->connection.sd_cli, (struct sockaddr 
*)&addr, &addrlen);
-            if (!status && addrlen == sizeof(addr))
+            if (!status)
             {
-                const in_addr_t a = ntohl(addr.sin_addr.s_addr);
-                const int p = ntohs(addr.sin_port);
                 FILE *fp = platform_fopen(man->settings.write_peer_info_file, 
"w");
                 if (fp)
                 {
-                    fprintf(fp, "%s\n%d\n", print_in_addr_t(a, 0, &gc), p);
+                    fprintf(fp, "%s\n", print_sockaddr((struct sockaddr 
*)&addr, &gc));
                     if (!fclose(fp))
                     {
                         success = true;
@@ -1645,12 +1641,10 @@ man_record_peer_info(struct management *man)
                 }
             }
         }
-#endif /* ifdef HAVE_GETSOCKNAME */
         if (!success)
         {
             msg(D_MANAGEMENT, "MANAGEMENT: failed to write peer info to file 
%s",
                 man->settings.write_peer_info_file);
-            throw_signal_soft(SIGTERM, "management-connect-failed");
         }
     }
     gc_free(&gc);
-- 
2.30.2



_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to