Hi,

Here is a patch for openvpn-2.0 to export more environmental variables for scripts. The environmental variables added are listed below:

pid:
the process id of current openvpn process. it is setted prior to execution of --up script. this variable can be used to kill or send signal to current process in a script. and the most useful feature of this variable to me is to mimic a syslog message in my script such as 'logger -t openvpn[pid] "my script started"'. so I can just grep 'openvpn[pid]' in /var/log/message to see all the logs related to a special openvpn process.

*tls_subject_hash_{n} and tls_issuer_hash_{n}:
*The subject hash and issuer hash of the certificate from the remote peer, where *n* is the verification level. Only set for TLS connections. Set prior to execution of *--tls-verify* script. I think using the subject hash as a certificate identifier is much easier than *X509_NAME_oneline*, especially while used with --capath patch from Thomas NOEL.

tls_verify_depth:
the current verification level. Only set for TLS connections. Set prior to execution of *--tls-verify* script.

just a minor change to openvpn source code to fit my purpose, but may be useful to other peoples.

Zhuang Yuyao

--- openvpn-2.0/init.c.orig     2005-04-10 21:43:56.000000000 -0600
+++ openvpn-2.0/init.c  2005-06-08 21:56:22.000000000 -0600
@@ -1771,6 +1771,9 @@
       /* save process ID in a file */
       write_pid (&c->c2.pid_state);

+      /* export process id as environmental variable */
+      setenv_int(c->c2.es, "pid", openvpn_getpid());
+ 
       /* should we change scheduling priority? */
       set_nice (c->options.nice);
     }
--- openvpn-2.0/ssl.c.orig      2005-06-08 20:08:20.000000000 -0600
+++ openvpn-2.0/ssl.c   2005-06-08 21:04:23.000000000 -0600
@@ -408,6 +408,7 @@
 {
   char subject[256];
   char envname[64];
+  char hash[9];
   char common_name[TLS_CN_LEN];
   SSL *ssl;
   struct tls_session *session;
@@ -476,6 +477,29 @@
     setenv_int (opt->es, envname, serial);
   }

+  /* export subject hash as environmental variable */
+  {
+    const unsigned long subject_hash = 
X509_subject_name_hash(ctx->current_cert);
+    openvpn_snprintf (envname, sizeof(envname), "tls_subject_hash_%d", 
ctx->error_depth);
+    openvpn_snprintf (hash, sizeof(hash), "%08lx", subject_hash);
+    hash[sizeof(hash) - 1] = '\0';
+    setenv_str (opt->es, envname, hash);
+  }
+
+  /* export issuer hash as environmental variable */
+  {
+    const unsigned long issuer_hash = X509_issuer_name_hash(ctx->current_cert);
+    openvpn_snprintf (envname, sizeof(envname), "tls_issuer_hash_%d", 
ctx->error_depth);
+    openvpn_snprintf (hash, sizeof(hash), "%08lx", issuer_hash);
+    hash[sizeof(hash) - 1] = '\0';
+    setenv_str (opt->es, envname, hash);
+  }
+
+  /* export error depth as environmental variable */
+  {
+    setenv_int (opt->es, "tls_verify_depth", ctx->error_depth);
+  }
+
   /* export current untrusted IP */
   setenv_untrusted (session);

Reply via email to