Re: [Openvpn-devel] [PATCH 2/2 fixed] add plugin_log() API to write to openvpn log
On Wed, Aug 1, 2012 at 3:48 PM, Heiko Hund wrote: > On Wednesday 01 August 2012 15:27:01 Alon Bar-Lev wrote: >> How will it work on Windows? > > Good question. Can't it work on Windows? According to objdump openvpn.exe > exports all the symbols statically on Windows. Is that a limitation of the PE > format? > > If not, the alternative would be to pass the function pointer in one (all?) of > the v3 plug-in structs. Must use the callback struct. Alon
Re: [Openvpn-devel] [PATCH 2/2 fixed] add plugin_log() API to write to openvpn log
On Wednesday 01 August 2012 15:27:01 Alon Bar-Lev wrote: > How will it work on Windows? Good question. Can't it work on Windows? According to objdump openvpn.exe exports all the symbols statically on Windows. Is that a limitation of the PE format? If not, the alternative would be to pass the function pointer in one (all?) of the v3 plug-in structs. Heiko -- Heiko Hund | Sr. Software Engineer | Tel +49-721-25516-237 | Fax -200 SOPHOS NSG | Amalienbadstr. 41 Bau 52 | 76227 Karlsruhe | Germany
Re: [Openvpn-devel] [PATCH 2/2 fixed] add plugin_log() API to write to openvpn log
How will it work on Windows? Plugins should not require to be linked against anything. On Wed, Aug 1, 2012 at 2:57 PM, Heiko Hund wrote: > Some plugins want to add messages to the openvpn log file. The > plugin_log() API provides a way for them to do so. > > Signed-off-by: Heiko Hund > --- > include/openvpn-plugin.h | 23 + > src/openvpn/plugin.c | 51 > ++ > 2 files changed, 74 insertions(+) > > diff --git a/include/openvpn-plugin.h b/include/openvpn-plugin.h > index 1c80eec..aaa0a7f 100644 > --- a/include/openvpn-plugin.h > +++ b/include/openvpn-plugin.h > @@ -47,6 +47,29 @@ typedef X509 openvpn_x509_cert_t; > extern "C" { > #endif > > +/** > + * plugin_log() - plug-in log function. > + * > + * Use this function to add information to the OpenVPN log file. > + * Messages will only be displayed if the plugin_name parameter is set. > + * Debug messages will only be displayed with plug-in debug log verbosity. > + * > + */ > +typedef enum > +{ > + PLOG_ERR = (1 << 0), /* Error condition message */ > + PLOG_WARN = (1 << 1), /* General warning message */ > + PLOG_NOTE = (1 << 2), /* Informational message */ > + PLOG_DEBUG = (1 << 3), /* Debug message, displayed if verb >= 7 */ > + > + PLOG_ERRNO = (1 << 8), /* Add error description to message */ > + PLOG_NOMUTE= (1 << 9), /* Mute setting does not apply for message */ > + > +} openvpn_plugin_log_flags_t; > + > +void plugin_log (openvpn_plugin_log_flags_t flags, const char *plugin_name, > const char *format, ...); > + > + > /* > * Plug-in types. These types correspond to the set of script callbacks > * supported by OpenVPN. > diff --git a/src/openvpn/plugin.c b/src/openvpn/plugin.c > index 7ce2f5e..0d33b55 100644 > --- a/src/openvpn/plugin.c > +++ b/src/openvpn/plugin.c > @@ -286,6 +286,57 @@ plugin_init_item (struct plugin *p, const struct > plugin_option *o) >gc_free (&gc); > } > > + > +void > +plugin_log (openvpn_plugin_log_flags_t flags, const char *name, const char > *format, ...) > +{ > + unsigned int msg_flags; > + > + if (!format) > +return; > + > + if (!name || name[0] == '\0') > +{ > + msg (D_PLUGIN_DEBUG, "PLUGIN: suppressed log message from plugin with > unknown name"); > + return; > +} > + > + if (flags & PLOG_ERR) > +msg_flags = M_INFO | M_NONFATAL; > + else if (flags & PLOG_WARN) > +msg_flags = M_INFO | M_WARN; > + else if (flags & PLOG_NOTE) > +msg_flags = M_INFO; > + else if (flags & PLOG_DEBUG) > +msg_flags = D_PLUGIN_DEBUG; > + > + if (flags & PLOG_ERRNO) > +msg_flags |= M_ERRNO; > + if (flags & PLOG_NOMUTE) > +msg_flags |= M_NOMUTE; > + > + if (MSG_TEST (msg_flags)) > +{ > + struct gc_arena gc; > + va_list arglist; > + char* msg_fmt; > + > + /* Never add instance prefix; not thread safe */ > + msg_flags |= M_NOIPREFIX; > + > + gc_init (&gc); > + msg_fmt = gc_malloc (ERR_BUF_SIZE, false, &gc); > + openvpn_snprintf (msg_fmt, ERR_BUF_SIZE, "PLUGIN %s: %s", name, > format); > + > + va_start (arglist, format); > + x_msg_va (msg_flags, msg_fmt, arglist); > + va_end (arglist); > + > + gc_free (&gc); > +} > +} > + > + > static void > plugin_open_item (struct plugin *p, > const struct plugin_option *o, > -- > 1.7.9.5 > > > -- > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > ___ > Openvpn-devel mailing list > Openvpn-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/openvpn-devel
[Openvpn-devel] [PATCH 2/2 fixed] add plugin_log() API to write to openvpn log
Some plugins want to add messages to the openvpn log file. The plugin_log() API provides a way for them to do so. Signed-off-by: Heiko Hund --- include/openvpn-plugin.h | 23 + src/openvpn/plugin.c | 51 ++ 2 files changed, 74 insertions(+) diff --git a/include/openvpn-plugin.h b/include/openvpn-plugin.h index 1c80eec..aaa0a7f 100644 --- a/include/openvpn-plugin.h +++ b/include/openvpn-plugin.h @@ -47,6 +47,29 @@ typedef X509 openvpn_x509_cert_t; extern "C" { #endif +/** + * plugin_log() - plug-in log function. + * + * Use this function to add information to the OpenVPN log file. + * Messages will only be displayed if the plugin_name parameter is set. + * Debug messages will only be displayed with plug-in debug log verbosity. + * + */ +typedef enum +{ + PLOG_ERR = (1 << 0), /* Error condition message */ + PLOG_WARN = (1 << 1), /* General warning message */ + PLOG_NOTE = (1 << 2), /* Informational message */ + PLOG_DEBUG = (1 << 3), /* Debug message, displayed if verb >= 7 */ + + PLOG_ERRNO = (1 << 8), /* Add error description to message */ + PLOG_NOMUTE= (1 << 9), /* Mute setting does not apply for message */ + +} openvpn_plugin_log_flags_t; + +void plugin_log (openvpn_plugin_log_flags_t flags, const char *plugin_name, const char *format, ...); + + /* * Plug-in types. These types correspond to the set of script callbacks * supported by OpenVPN. diff --git a/src/openvpn/plugin.c b/src/openvpn/plugin.c index 7ce2f5e..0d33b55 100644 --- a/src/openvpn/plugin.c +++ b/src/openvpn/plugin.c @@ -286,6 +286,57 @@ plugin_init_item (struct plugin *p, const struct plugin_option *o) gc_free (&gc); } + +void +plugin_log (openvpn_plugin_log_flags_t flags, const char *name, const char *format, ...) +{ + unsigned int msg_flags; + + if (!format) +return; + + if (!name || name[0] == '\0') +{ + msg (D_PLUGIN_DEBUG, "PLUGIN: suppressed log message from plugin with unknown name"); + return; +} + + if (flags & PLOG_ERR) +msg_flags = M_INFO | M_NONFATAL; + else if (flags & PLOG_WARN) +msg_flags = M_INFO | M_WARN; + else if (flags & PLOG_NOTE) +msg_flags = M_INFO; + else if (flags & PLOG_DEBUG) +msg_flags = D_PLUGIN_DEBUG; + + if (flags & PLOG_ERRNO) +msg_flags |= M_ERRNO; + if (flags & PLOG_NOMUTE) +msg_flags |= M_NOMUTE; + + if (MSG_TEST (msg_flags)) +{ + struct gc_arena gc; + va_list arglist; + char* msg_fmt; + + /* Never add instance prefix; not thread safe */ + msg_flags |= M_NOIPREFIX; + + gc_init (&gc); + msg_fmt = gc_malloc (ERR_BUF_SIZE, false, &gc); + openvpn_snprintf (msg_fmt, ERR_BUF_SIZE, "PLUGIN %s: %s", name, format); + + va_start (arglist, format); + x_msg_va (msg_flags, msg_fmt, arglist); + va_end (arglist); + + gc_free (&gc); +} +} + + static void plugin_open_item (struct plugin *p, const struct plugin_option *o, -- 1.7.9.5