77 struct openvpn_plugin_args_open_in
const *args,
78 struct openvpn_plugin_args_open_return *ret)
83 if (v3structver != OPENVPN_PLUGINv3_STRUCTVER)
85 printf(
"log_v3: ** ERROR ** Incompatible plug-in interface between this plug-in and OpenVPN\n");
86 return OPENVPN_PLUGIN_FUNC_ERROR;
89 if (args->ssl_api != SSLAPI_OPENSSL)
91 printf(
"This plug-in can only be used against OpenVPN with OpenSSL\n");
92 return OPENVPN_PLUGIN_FUNC_ERROR;
96 printf(
"log_v3: OpenVPN %s (Major: %i, Minor: %i, Patch: %s)\n",
97 args->ovpn_version, args->ovpn_version_major,
98 args->ovpn_version_minor, args->ovpn_version_patch);
102 OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_UP)
103 |OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_DOWN)
104 |OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_ROUTE_UP)
105 |OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_IPCHANGE)
106 |OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_TLS_VERIFY)
107 |OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY)
108 |OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_CLIENT_CONNECT_V2)
109 |OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_CLIENT_DISCONNECT)
110 |OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_LEARN_ADDRESS)
111 |OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_TLS_FINAL);
118 printf(
"PLUGIN: allocating memory for context failed\n");
119 return OPENVPN_PLUGIN_FUNC_ERROR;
127 ret->handle = (
void *)
context;
129 return OPENVPN_PLUGIN_FUNC_SUCCESS;
133show(
const int type,
const char *
argv[],
const char *envp[])
138 case OPENVPN_PLUGIN_UP:
139 printf(
"OPENVPN_PLUGIN_UP\n");
142 case OPENVPN_PLUGIN_DOWN:
143 printf(
"OPENVPN_PLUGIN_DOWN\n");
146 case OPENVPN_PLUGIN_ROUTE_UP:
147 printf(
"OPENVPN_PLUGIN_ROUTE_UP\n");
150 case OPENVPN_PLUGIN_IPCHANGE:
151 printf(
"OPENVPN_PLUGIN_IPCHANGE\n");
154 case OPENVPN_PLUGIN_TLS_VERIFY:
155 printf(
"OPENVPN_PLUGIN_TLS_VERIFY\n");
158 case OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY:
159 printf(
"OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY\n");
162 case OPENVPN_PLUGIN_CLIENT_CONNECT_V2:
163 printf(
"OPENVPN_PLUGIN_CLIENT_CONNECT_V2\n");
166 case OPENVPN_PLUGIN_CLIENT_DISCONNECT:
167 printf(
"OPENVPN_PLUGIN_CLIENT_DISCONNECT\n");
170 case OPENVPN_PLUGIN_LEARN_ADDRESS:
171 printf(
"OPENVPN_PLUGIN_LEARN_ADDRESS\n");
174 case OPENVPN_PLUGIN_TLS_FINAL:
175 printf(
"OPENVPN_PLUGIN_TLS_FINAL\n");
179 printf(
"OPENVPN_PLUGIN_?\n");
184 for (i = 0;
argv[i] != NULL; ++i)
186 printf(
"%d '%s'\n", (
int)i,
argv[i]);
190 for (i = 0; envp[i] != NULL; ++i)
192 printf(
"%d '%s'\n", (
int)i, envp[i]);
203 X509_NAME *x509_name;
204 X509_NAME_ENTRY *ent;
206 unsigned char *buf = NULL;
208 x509_name = X509_get_subject_name(x509crt);
209 n = X509_NAME_entry_count(x509_name);
210 for (i = 0; i < n; ++i)
212 ent = X509_NAME_get_entry(x509_name, i);
217 fn = X509_NAME_ENTRY_get_object(ent);
222 val = X509_NAME_ENTRY_get_data(ent);
227 fn_nid = OBJ_obj2nid(fn);
228 if (fn_nid == NID_undef)
232 objbuf = OBJ_nid2sn(fn_nid);
237 if (ASN1_STRING_to_UTF8(&buf, val) < 0)
242 printf(
"X509 %s: %s\n", objbuf, (
char *)buf);
251 struct openvpn_plugin_args_func_in
const *args,
252 struct openvpn_plugin_args_func_return *retptr)
256 printf(
"\nopenvpn_plugin_func_v3() :::::>> ");
257 show(args->type, args->argv, args->envp);
260 if ((args->type == OPENVPN_PLUGIN_TLS_VERIFY) && args->current_cert)
262 printf(
"---- X509 Subject information ----\n");
263 printf(
"Certificate depth: %i\n", args->current_cert_depth);
265 printf(
"----------------------------------\n");
269 if (args->type == OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY)
278 return OPENVPN_PLUGIN_FUNC_SUCCESS;
282 return OPENVPN_PLUGIN_FUNC_ERROR;
287 return OPENVPN_PLUGIN_FUNC_SUCCESS;
Contains all state information for one tunnel.