[OpenVPN home] [Date Prev] [Date Index] [Date Next]
[OpenVPN mailing lists] [Thread Prev] [Thread Index] [Thread Next]
Google
 
Web openvpn.net

[Openvpn-devel] Patch: Admin interface shows server IP when connected


  • Subject: [Openvpn-devel] Patch: Admin interface shows server IP when connected
  • From: Rolf Fokkens <r.fokkens@xxxxxxxxx>
  • Date: Sun, 02 Oct 2005 23:14:01 +0200

Hi,

I created an OpenVPN admin interface, which I want to show the actual connected server of a client. The normal "state" command in the admin interface does not provide the information. The attached patch adds an extra argument to the "state" result which shows the server's IP. Like this:
[root@VPN00059 ~]# echo state | nc 0.0.0.0 5000
>INFO:OpenVPN Management Interface Version 1 -- type 'help' for more info
1128286300,CONNECTED,SUCCESS,,145.66.1.1
END
[root@VPN00059 ~]#
James Yonan once told me that this actualy changes the admin API, so it may break some admin interfaces. For those however who can use it I attached the patch.

Rolf
diff -ruN openvpn-2.0.1.orig/forward.c openvpn-2.0.1/forward.c
--- openvpn-2.0.1.orig/forward.c	2005-08-04 05:22:16.000000000 +0200
+++ openvpn-2.0.1/forward.c	2005-08-20 00:37:29.000000000 +0200
@@ -194,6 +194,7 @@
 		  management_set_state (management,
 					OPENVPN_STATE_GET_CONFIG,
 					NULL,
+					0,
 					0);
 		}
 #endif
diff -ruN openvpn-2.0.1.orig/init.c openvpn-2.0.1/init.c
--- openvpn-2.0.1.orig/init.c	2005-08-04 20:44:23.000000000 +0200
+++ openvpn-2.0.1/init.c	2005-08-20 00:49:39.000000000 +0200
@@ -594,15 +594,18 @@
   if (management)
     {
       in_addr_t tun_local = 0;
+      in_addr_t tun_remote = 0; /* FKS */
       const char *detail = "SUCCESS";
       if (c->c1.tuntap)
 	tun_local = c->c1.tuntap->local;
+      tun_remote = htonl (c->c1.link_socket_addr.actual.sin_addr.s_addr);
       if (flags & ISC_ERRORS)
 	detail = "ERROR";
       management_set_state (management,
 			    OPENVPN_STATE_CONNECTED,
 			    detail,
-			    tun_local);
+			    tun_local,
+			    tun_remote);
       if (tun_local)
 	management_post_tunnel_open (management, tun_local);
     }
@@ -2190,6 +2193,7 @@
 	      management_set_state (management,
 				    OPENVPN_STATE_CONNECTING,
 				    NULL,
+				    (in_addr_t)0,
 				    (in_addr_t)0);
 	    }
 
diff -ruN openvpn-2.0.1.orig/manage.c openvpn-2.0.1/manage.c
--- openvpn-2.0.1.orig/manage.c	2005-08-04 21:30:42.000000000 +0200
+++ openvpn-2.0.1/manage.c	2005-08-20 00:44:31.000000000 +0200
@@ -440,7 +440,8 @@
 	       "state",
 	       man->persist.state,
 	       &man->connection.state_realtime,
-	       LOG_PRINT_INT_DATE|LOG_PRINT_STATE|LOG_PRINT_LOCAL_IP);
+	       LOG_PRINT_INT_DATE|LOG_PRINT_STATE|
+	       LOG_PRINT_LOCAL_IP|LOG_PRINT_REMOTE_IP);
 }
 
 static void
@@ -1329,7 +1330,8 @@
 management_set_state (struct management *man,
 		      const int state,
 		      const char *detail,
-		      const in_addr_t tun_local_ip)
+		      const in_addr_t tun_local_ip,
+		      const in_addr_t tun_remote_ip)
 {
   if (man->persist.state && (!man->settings.server || state < OPENVPN_STATE_CLIENT_BASE))
     {
@@ -1343,6 +1345,7 @@
       e.u.state = state;
       e.string = detail;
       e.local_ip = tun_local_ip;
+      e.remote_ip = tun_remote_ip;
       
       log_history_add (man->persist.state, &e);
 
@@ -1351,6 +1354,7 @@
 			       |   LOG_PRINT_INT_DATE
                                |   LOG_PRINT_STATE
 			       |   LOG_PRINT_LOCAL_IP
+			       |   LOG_PRINT_REMOTE_IP
                                |   LOG_PRINT_CRLF, &gc);
 
       if (out)
@@ -2032,6 +2036,8 @@
     buf_printf (&out, "%s", e->string);
   if (flags & LOG_PRINT_LOCAL_IP)
     buf_printf (&out, ",%s", print_in_addr_t (e->local_ip, IA_EMPTY_IF_UNDEF, gc));
+  if (flags & LOG_PRINT_REMOTE_IP)
+    buf_printf (&out, ",%s", print_in_addr_t (e->remote_ip, IA_EMPTY_IF_UNDEF, gc));
   if (flags & LOG_PRINT_CRLF)
     buf_printf (&out, "\r\n");
   return BSTR (&out);
diff -ruN openvpn-2.0.1.orig/manage.h openvpn-2.0.1/manage.h
--- openvpn-2.0.1.orig/manage.h	2005-06-12 08:33:20.000000000 +0200
+++ openvpn-2.0.1/manage.h	2005-08-20 00:37:29.000000000 +0200
@@ -96,6 +96,7 @@
   time_t timestamp;
   const char *string;
   in_addr_t local_ip;
+  in_addr_t remote_ip;
   union log_entry_union u;
 };
 
@@ -111,6 +112,8 @@
 #define LOG_PRINT_CRLF         (1<<7)
 #define LOG_FATAL_NOTIFY       (1<<8)
 
+#define LOG_PRINT_REMOTE_IP    (1<<9)
+
 const char *log_entry_print (const struct log_entry *e, unsigned int flags, struct gc_arena *gc);
 
 struct log_history
@@ -321,7 +324,8 @@
 void management_set_state (struct management *man,
 			   const int state,
 			   const char *detail,
-			   const in_addr_t tun_local_ip);
+			   const in_addr_t tun_local_ip,
+			   const in_addr_t tun_remote_ip);
 
 /*
  * The management object keeps track of OpenVPN --echo
Binary files openvpn-2.0.1.orig/openvpn and openvpn-2.0.1/openvpn differ
diff -ruN openvpn-2.0.1.orig/route.c openvpn-2.0.1/route.c
--- openvpn-2.0.1.orig/route.c	2005-04-11 05:43:56.000000000 +0200
+++ openvpn-2.0.1/route.c	2005-08-20 00:37:29.000000000 +0200
@@ -527,6 +527,7 @@
 	  management_set_state (management,
 				OPENVPN_STATE_ADD_ROUTES,
 				NULL,
+				0,
 				0);
 	}
 #endif
diff -ruN openvpn-2.0.1.orig/sig.c openvpn-2.0.1/sig.c
--- openvpn-2.0.1.orig/sig.c	2005-04-11 05:43:55.000000000 +0200
+++ openvpn-2.0.1/sig.c	2005-08-20 00:37:29.000000000 +0200
@@ -167,6 +167,7 @@
 	management_set_state (management,
 			      state,
 			      si->signal_text ? si->signal_text : signal_name (si->signal_received, true),
+			      (in_addr_t)0,
 			      (in_addr_t)0);
     }
 #endif
diff -ruN openvpn-2.0.1.orig/ssl.c openvpn-2.0.1/ssl.c
--- openvpn-2.0.1.orig/ssl.c	2005-08-04 20:50:08.000000000 +0200
+++ openvpn-2.0.1/ssl.c	2005-08-20 00:37:29.000000000 +0200
@@ -2841,6 +2841,7 @@
 		      management_set_state (management,
 					    OPENVPN_STATE_WAIT,
 					    NULL,
+					    0,
 					    0);
 		    }
 #endif
@@ -3512,6 +3513,7 @@
 		      management_set_state (management,
 					    OPENVPN_STATE_AUTH,
 					    NULL,
+					    0,
 					    0);
 		    }
 #endif
diff -ruN openvpn-2.0.1.orig/stamp-h1 openvpn-2.0.1/stamp-h1
--- openvpn-2.0.1.orig/stamp-h1	1970-01-01 01:00:00.000000000 +0100
+++ openvpn-2.0.1/stamp-h1	2005-08-17 21:39:46.000000000 +0200
@@ -0,0 +1 @@
+timestamp for config.h
diff -ruN openvpn-2.0.1.orig/tun.c openvpn-2.0.1/tun.c
--- openvpn-2.0.1.orig/tun.c	2005-08-04 06:46:17.000000000 +0200
+++ openvpn-2.0.1/tun.c	2005-08-20 00:37:29.000000000 +0200
@@ -536,7 +536,8 @@
       management_set_state (management,
 			    OPENVPN_STATE_ASSIGN_IP,
 			    NULL,
-			    tt->local);
+			    tt->local,
+			    0);
     }
 #endif
 

Warning: require_once(../../../archive_common.php) [function.require-once]: failed to open stream: No such file or directory in /home/openvpn/domains/openvpn.net/public_html/archive/openvpn-users/2005-10/msg00004.html on line 372

Fatal error: require_once() [function.require]: Failed opening required '../../../archive_common.php' (include_path='/usr/local/lib/php') in /home/openvpn/domains/openvpn.net/public_html/archive/openvpn-users/2005-10/msg00004.html on line 372