76 struct openvpn_plugin_args_open_return *ret)
81 if (v3structver != OPENVPN_PLUGINv3_STRUCTVER)
83 printf(
"log_v3: ** ERROR ** Incompatible plug-in interface between this plug-in and OpenVPN\n");
84 return OPENVPN_PLUGIN_FUNC_ERROR;
87 if (args->ssl_api != SSLAPI_OPENSSL)
89 printf(
"This plug-in can only be used against OpenVPN with OpenSSL\n");
90 return OPENVPN_PLUGIN_FUNC_ERROR;
94 printf(
"log_v3: OpenVPN %s (Major: %i, Minor: %i, Patch: %s)\n", args->ovpn_version,
95 args->ovpn_version_major, args->ovpn_version_minor, args->ovpn_version_patch);
98 ret->type_mask = OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_UP)
99 | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_DOWN)
100 | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_ROUTE_UP)
101 | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_IPCHANGE)
102 | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_TLS_VERIFY)
103 | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY)
104 | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_CLIENT_CONNECT_V2)
105 | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_CLIENT_DISCONNECT)
106 | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_LEARN_ADDRESS)
107 | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_TLS_FINAL);
114 printf(
"PLUGIN: allocating memory for context failed\n");
115 return OPENVPN_PLUGIN_FUNC_ERROR;
125 return OPENVPN_PLUGIN_FUNC_SUCCESS;
129show(
const int type,
const char *
argv[],
const char *envp[])
134 case OPENVPN_PLUGIN_UP:
135 printf(
"OPENVPN_PLUGIN_UP\n");
138 case OPENVPN_PLUGIN_DOWN:
139 printf(
"OPENVPN_PLUGIN_DOWN\n");
142 case OPENVPN_PLUGIN_ROUTE_UP:
143 printf(
"OPENVPN_PLUGIN_ROUTE_UP\n");
146 case OPENVPN_PLUGIN_IPCHANGE:
147 printf(
"OPENVPN_PLUGIN_IPCHANGE\n");
150 case OPENVPN_PLUGIN_TLS_VERIFY:
151 printf(
"OPENVPN_PLUGIN_TLS_VERIFY\n");
154 case OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY:
155 printf(
"OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY\n");
158 case OPENVPN_PLUGIN_CLIENT_CONNECT_V2:
159 printf(
"OPENVPN_PLUGIN_CLIENT_CONNECT_V2\n");
162 case OPENVPN_PLUGIN_CLIENT_DISCONNECT:
163 printf(
"OPENVPN_PLUGIN_CLIENT_DISCONNECT\n");
166 case OPENVPN_PLUGIN_LEARN_ADDRESS:
167 printf(
"OPENVPN_PLUGIN_LEARN_ADDRESS\n");
170 case OPENVPN_PLUGIN_TLS_FINAL:
171 printf(
"OPENVPN_PLUGIN_TLS_FINAL\n");
175 printf(
"OPENVPN_PLUGIN_?\n");
180 for (
i = 0;
argv[
i] != NULL; ++
i)
182 printf(
"%d '%s'\n", (
int)
i,
argv[
i]);
186 for (
i = 0; envp[
i] != NULL; ++
i)
188 printf(
"%d '%s'\n", (
int)
i, envp[
i]);
199 X509_NAME *x509_name;
200 X509_NAME_ENTRY *ent;
202 unsigned char *buf = NULL;
204 x509_name = X509_get_subject_name(x509crt);
205 n = X509_NAME_entry_count(x509_name);
206 for (
i = 0;
i < n; ++
i)
208 ent = X509_NAME_get_entry(x509_name,
i);
213 fn = X509_NAME_ENTRY_get_object(ent);
218 val = X509_NAME_ENTRY_get_data(ent);
223 fn_nid = OBJ_obj2nid(fn);
224 if (fn_nid == NID_undef)
228 objbuf = OBJ_nid2sn(fn_nid);
233 if (ASN1_STRING_to_UTF8(&buf, val) < 0)
238 printf(
"X509 %s: %s\n", objbuf, (
char *)buf);
246 struct openvpn_plugin_args_func_return *retptr)
250 printf(
"\nopenvpn_plugin_func_v3() :::::>> ");
251 show(args->type, args->argv, args->envp);
254 if ((args->type == OPENVPN_PLUGIN_TLS_VERIFY) && args->current_cert)
256 printf(
"---- X509 Subject information ----\n");
257 printf(
"Certificate depth: %i\n", args->current_cert_depth);
259 printf(
"----------------------------------\n");
263 if (args->type == OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY)
272 return OPENVPN_PLUGIN_FUNC_SUCCESS;
276 return OPENVPN_PLUGIN_FUNC_ERROR;
281 return OPENVPN_PLUGIN_FUNC_SUCCESS;
Contains all state information for one tunnel.