diff options
author | Bernhard Schmidt <berni@debian.org> | 2020-08-15 21:29:54 +0200 |
---|---|---|
committer | Bernhard Schmidt <berni@debian.org> | 2020-08-15 21:29:54 +0200 |
commit | 7c229d538824cb679351220ad8911f7b2daa7c23 (patch) | |
tree | 5c4d64b60da9018c7db3a9335a9787d326beade3 /include | |
parent | d3986a312f5fbcfd0e78e6b147eef419fb4e5f54 (diff) | |
parent | 1079962e4c06f88a54e50d997c1b7e84303d30b4 (diff) |
Update upstream source from tag 'upstream/2.5_beta1'
Update to upstream version '2.5~beta1'
with Debian dir d53f9a482ac24eb491a294b26c24bb1d87afad24
Diffstat (limited to 'include')
-rw-r--r-- | include/Makefile.in | 657 | ||||
-rw-r--r-- | include/openvpn-msg.h | 18 | ||||
-rw-r--r-- | include/openvpn-plugin.h | 879 | ||||
-rw-r--r-- | include/openvpn-plugin.h.in | 62 |
4 files changed, 51 insertions, 1565 deletions
diff --git a/include/Makefile.in b/include/Makefile.in deleted file mode 100644 index 67fbbc8..0000000 --- a/include/Makefile.in +++ /dev/null @@ -1,657 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# OpenVPN -- An application to securely tunnel IP networks -# over a single UDP port, with support for SSL/TLS-based -# session authentication and key exchange, -# packet encryption, packet authentication, and -# packet compression. -# -# Copyright (C) 2002-2018 OpenVPN Inc <sales@openvpn.net> -# Copyright (C) 2006-2012 Alon Bar-Lev <alon.barlev@gmail.com> -# - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = include -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_emptyarray.m4 \ - $(top_srcdir)/m4/ax_socklen_t.m4 \ - $(top_srcdir)/m4/ax_varargs.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/version.m4 \ - $(top_srcdir)/compat.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ - $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h openvpn-plugin.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(includedir)" -HEADERS = $(include_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)openvpn-plugin.h.in -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/openvpn-plugin.h.in -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CMAKE = @CMAKE@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DL_LIBS = @DL_LIBS@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT = @GIT@ -GREP = @GREP@ -IFCONFIG = @IFCONFIG@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IPROUTE = @IPROUTE@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPAM_CFLAGS = @LIBPAM_CFLAGS@ -LIBPAM_LIBS = @LIBPAM_LIBS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -LZ4_CFLAGS = @LZ4_CFLAGS@ -LZ4_LIBS = @LZ4_LIBS@ -LZO_CFLAGS = @LZO_CFLAGS@ -LZO_LIBS = @LZO_LIBS@ -MAKEINFO = @MAKEINFO@ -MAN2HTML = @MAN2HTML@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MBEDTLS_CFLAGS = @MBEDTLS_CFLAGS@ -MBEDTLS_LIBS = @MBEDTLS_LIBS@ -MKDIR_P = @MKDIR_P@ -NETSTAT = @NETSTAT@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ -OPENSSL_LIBS = @OPENSSL_LIBS@ -OPENVPN_VERSION_MAJOR = @OPENVPN_VERSION_MAJOR@ -OPENVPN_VERSION_MINOR = @OPENVPN_VERSION_MINOR@ -OPENVPN_VERSION_PATCH = @OPENVPN_VERSION_PATCH@ -OPTIONAL_CRYPTO_CFLAGS = @OPTIONAL_CRYPTO_CFLAGS@ -OPTIONAL_CRYPTO_LIBS = @OPTIONAL_CRYPTO_LIBS@ -OPTIONAL_DL_LIBS = @OPTIONAL_DL_LIBS@ -OPTIONAL_INOTIFY_CFLAGS = @OPTIONAL_INOTIFY_CFLAGS@ -OPTIONAL_INOTIFY_LIBS = @OPTIONAL_INOTIFY_LIBS@ -OPTIONAL_LZ4_CFLAGS = @OPTIONAL_LZ4_CFLAGS@ -OPTIONAL_LZ4_LIBS = @OPTIONAL_LZ4_LIBS@ -OPTIONAL_LZO_CFLAGS = @OPTIONAL_LZO_CFLAGS@ -OPTIONAL_LZO_LIBS = @OPTIONAL_LZO_LIBS@ -OPTIONAL_PKCS11_HELPER_CFLAGS = @OPTIONAL_PKCS11_HELPER_CFLAGS@ -OPTIONAL_PKCS11_HELPER_LIBS = @OPTIONAL_PKCS11_HELPER_LIBS@ -OPTIONAL_SELINUX_LIBS = @OPTIONAL_SELINUX_LIBS@ -OPTIONAL_SYSTEMD_LIBS = @OPTIONAL_SYSTEMD_LIBS@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -P11KIT_CFLAGS = @P11KIT_CFLAGS@ -P11KIT_LIBS = @P11KIT_LIBS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKCS11_HELPER_CFLAGS = @PKCS11_HELPER_CFLAGS@ -PKCS11_HELPER_LIBS = @PKCS11_HELPER_LIBS@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -PLUGINDIR = @PLUGINDIR@ -PLUGIN_AUTH_PAM_CFLAGS = @PLUGIN_AUTH_PAM_CFLAGS@ -PLUGIN_AUTH_PAM_LIBS = @PLUGIN_AUTH_PAM_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -ROUTE = @ROUTE@ -SED = @SED@ -SELINUX_LIBS = @SELINUX_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SOCKETS_LIBS = @SOCKETS_LIBS@ -STRIP = @STRIP@ -SYSTEMD_ASK_PASSWORD = @SYSTEMD_ASK_PASSWORD@ -SYSTEMD_UNIT_DIR = @SYSTEMD_UNIT_DIR@ -TAP_CFLAGS = @TAP_CFLAGS@ -TAP_WIN_COMPONENT_ID = @TAP_WIN_COMPONENT_ID@ -TAP_WIN_MIN_MAJOR = @TAP_WIN_MIN_MAJOR@ -TAP_WIN_MIN_MINOR = @TAP_WIN_MIN_MINOR@ -TEST_CFLAGS = @TEST_CFLAGS@ -TEST_LDFLAGS = @TEST_LDFLAGS@ -TMPFILES_DIR = @TMPFILES_DIR@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -libsystemd_CFLAGS = @libsystemd_CFLAGS@ -libsystemd_LIBS = @libsystemd_LIBS@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -plugindir = @plugindir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sampledir = @sampledir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -systemdunitdir = @systemdunitdir@ -target_alias = @target_alias@ -tmpfilesdir = @tmpfilesdir@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -MAINTAINERCLEANFILES = \ - $(srcdir)/Makefile.in \ - $(srcdir)/openvpn-plugin.h.in - -include_HEADERS = \ - openvpn-plugin.h \ - openvpn-msg.h - -all: openvpn-plugin.h - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -openvpn-plugin.h: stamp-h2 - @test -f $@ || rm -f stamp-h2 - @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h2 - -stamp-h2: $(srcdir)/openvpn-plugin.h.in $(top_builddir)/config.status - @rm -f stamp-h2 - cd $(top_builddir) && $(SHELL) ./config.status include/openvpn-plugin.h - -distclean-hdr: - -rm -f openvpn-plugin.h stamp-h2 - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ - done - -uninstall-includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(HEADERS) openvpn-plugin.h -installdirs: - for dir in "$(DESTDIR)$(includedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-includeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-includeHEADERS - -.MAKE: all install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool cscopelist-am ctags ctags-am distclean \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-includeHEADERS install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-includeHEADERS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/include/openvpn-msg.h b/include/openvpn-msg.h index 66177a2..a4789e3 100644 --- a/include/openvpn-msg.h +++ b/include/openvpn-msg.h @@ -39,6 +39,8 @@ typedef enum { msg_del_block_dns, msg_register_dns, msg_enable_dhcp, + msg_register_ring_buffers, + msg_set_mtu } message_type_t; typedef struct { @@ -117,4 +119,20 @@ typedef struct { interface_t iface; } enable_dhcp_message_t; +typedef struct { + message_header_t header; + HANDLE device; + HANDLE send_ring_handle; + HANDLE receive_ring_handle; + HANDLE send_tail_moved; + HANDLE receive_tail_moved; +} register_ring_buffers_message_t; + +typedef struct { + message_header_t header; + interface_t iface; + short family; + int mtu; +} set_mtu_message_t; + #endif /* ifndef OPENVPN_MSG_H_ */ diff --git a/include/openvpn-plugin.h b/include/openvpn-plugin.h deleted file mode 100644 index 03399f9..0000000 --- a/include/openvpn-plugin.h +++ /dev/null @@ -1,879 +0,0 @@ -/* include/openvpn-plugin.h. Generated from openvpn-plugin.h.in by configure. */ -/* - * OpenVPN -- An application to securely tunnel IP networks - * over a single TCP/UDP port, with support for SSL/TLS-based - * session authentication and key exchange, - * packet encryption, packet authentication, and - * packet compression. - * - * Copyright (C) 2002-2018 OpenVPN Inc <sales@openvpn.net> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef OPENVPN_PLUGIN_H_ -#define OPENVPN_PLUGIN_H_ - -#define OPENVPN_PLUGIN_VERSION 3 - -#ifdef ENABLE_CRYPTO -#ifdef ENABLE_CRYPTO_MBEDTLS -#include <mbedtls/x509_crt.h> -#ifndef __OPENVPN_X509_CERT_T_DECLARED -#define __OPENVPN_X509_CERT_T_DECLARED -typedef mbedtls_x509_crt openvpn_x509_cert_t; -#endif -#else /* ifdef ENABLE_CRYPTO_MBEDTLS */ -#include <openssl/x509.h> -#ifndef __OPENVPN_X509_CERT_T_DECLARED -#define __OPENVPN_X509_CERT_T_DECLARED -typedef X509 openvpn_x509_cert_t; -#endif -#endif -#endif - -#include <stdarg.h> -#include <stddef.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/* Provide some basic version information to plug-ins at OpenVPN compile time - * This is will not be the complete version - */ -#define OPENVPN_VERSION_MAJOR 2 -#define OPENVPN_VERSION_MINOR 4 -#define OPENVPN_VERSION_PATCH ".9" - -/* - * Plug-in types. These types correspond to the set of script callbacks - * supported by OpenVPN. - * - * This is the general call sequence to expect when running in server mode: - * - * Initial Server Startup: - * - * FUNC: openvpn_plugin_open_v1 - * FUNC: openvpn_plugin_client_constructor_v1 (this is the top-level "generic" - * client template) - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_UP - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_ROUTE_UP - * - * New Client Connection: - * - * FUNC: openvpn_plugin_client_constructor_v1 - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_ENABLE_PF - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_TLS_VERIFY (called once for every cert - * in the server chain) - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_TLS_FINAL - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_IPCHANGE - * - * [If OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY returned OPENVPN_PLUGIN_FUNC_DEFERRED, - * we don't proceed until authentication is verified via auth_control_file] - * - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_CLIENT_CONNECT_V2 - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_LEARN_ADDRESS - * - * [Client session ensues] - * - * For each "TLS soft reset", according to reneg-sec option (or similar): - * - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_ENABLE_PF - * - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_TLS_VERIFY (called once for every cert - * in the server chain) - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_TLS_FINAL - * - * [If OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY returned OPENVPN_PLUGIN_FUNC_DEFERRED, - * we expect that authentication is verified via auth_control_file within - * the number of seconds defined by the "hand-window" option. Data channel traffic - * will continue to flow uninterrupted during this period.] - * - * [Client session continues] - * - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_CLIENT_DISCONNECT - * FUNC: openvpn_plugin_client_destructor_v1 - * - * [ some time may pass ] - * - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_LEARN_ADDRESS (this coincides with a - * lazy free of initial - * learned addr object) - * Server Shutdown: - * - * FUNC: openvpn_plugin_func_v1 OPENVPN_PLUGIN_DOWN - * FUNC: openvpn_plugin_client_destructor_v1 (top-level "generic" client) - * FUNC: openvpn_plugin_close_v1 - */ -#define OPENVPN_PLUGIN_UP 0 -#define OPENVPN_PLUGIN_DOWN 1 -#define OPENVPN_PLUGIN_ROUTE_UP 2 -#define OPENVPN_PLUGIN_IPCHANGE 3 -#define OPENVPN_PLUGIN_TLS_VERIFY 4 -#define OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY 5 -#define OPENVPN_PLUGIN_CLIENT_CONNECT 6 -#define OPENVPN_PLUGIN_CLIENT_DISCONNECT 7 -#define OPENVPN_PLUGIN_LEARN_ADDRESS 8 -#define OPENVPN_PLUGIN_CLIENT_CONNECT_V2 9 -#define OPENVPN_PLUGIN_TLS_FINAL 10 -#define OPENVPN_PLUGIN_ENABLE_PF 11 -#define OPENVPN_PLUGIN_ROUTE_PREDOWN 12 -#define OPENVPN_PLUGIN_N 13 - -/* - * Build a mask out of a set of plug-in types. - */ -#define OPENVPN_PLUGIN_MASK(x) (1<<(x)) - -/* - * A pointer to a plugin-defined object which contains - * the object state. - */ -typedef void *openvpn_plugin_handle_t; - -/* - * Return value for openvpn_plugin_func_v1 function - */ -#define OPENVPN_PLUGIN_FUNC_SUCCESS 0 -#define OPENVPN_PLUGIN_FUNC_ERROR 1 -#define OPENVPN_PLUGIN_FUNC_DEFERRED 2 - -/* - * For Windows (needs to be modified for MSVC) - */ -#if defined(_WIN32) && !defined(OPENVPN_PLUGIN_H) -#define OPENVPN_EXPORT __declspec(dllexport) -#else -#define OPENVPN_EXPORT -#endif - -/* - * If OPENVPN_PLUGIN_H is defined, we know that we are being - * included in an OpenVPN compile, rather than a plugin compile. - */ -#ifdef OPENVPN_PLUGIN_H - -/* - * We are compiling OpenVPN. - */ -#define OPENVPN_PLUGIN_DEF typedef -#define OPENVPN_PLUGIN_FUNC(name) (*name) - -#else /* ifdef OPENVPN_PLUGIN_H */ - -/* - * We are compiling plugin. - */ -#define OPENVPN_PLUGIN_DEF OPENVPN_EXPORT -#define OPENVPN_PLUGIN_FUNC(name) name - -#endif - -/* - * Used by openvpn_plugin_func to return structured - * data. The plugin should allocate all structure - * instances, name strings, and value strings with - * malloc, since OpenVPN will assume that it - * can free the list by calling free() over the same. - */ -struct openvpn_plugin_string_list -{ - struct openvpn_plugin_string_list *next; - char *name; - char *value; -}; - - -/* openvpn_plugin_{open,func}_v3() related structs */ - -/** - * Defines version of the v3 plugin argument structs - * - * Whenever one or more of these structs are modified, this constant - * must be updated. A changelog should be appended in this comment - * as well, to make it easier to see what information is available - * in the different versions. - * - * Version Comment - * 1 Initial plugin v3 structures providing the same API as - * the v2 plugin interface, X509 certificate information + - * a logging API for plug-ins. - * - * 2 Added ssl_api member in struct openvpn_plugin_args_open_in - * which identifies the SSL implementation OpenVPN is compiled - * against. - * - * 3 Added ovpn_version, ovpn_version_major, ovpn_version_minor - * and ovpn_version_patch to provide the runtime version of - * OpenVPN to plug-ins. - * - * 4 Exported secure_memzero() as plugin_secure_memzero() - * - * 5 Exported openvpn_base64_encode() as plugin_base64_encode() - * Exported openvpn_base64_decode() as plugin_base64_decode() - */ -#define OPENVPN_PLUGINv3_STRUCTVER 5 - -/** - * Definitions needed for the plug-in callback functions. - */ -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; - - -#ifdef __GNUC__ -#if __USE_MINGW_ANSI_STDIO -#define _ovpn_chk_fmt(a, b) __attribute__ ((format(gnu_printf, (a), (b)))) -#else -#define _ovpn_chk_fmt(a, b) __attribute__ ((format(__printf__, (a), (b)))) -#endif -#else /* ifdef __GNUC__ */ -#define _ovpn_chk_fmt(a, b) -#endif - -typedef void (*plugin_log_t)(openvpn_plugin_log_flags_t flags, - const char *plugin_name, - const char *format, ...) _ovpn_chk_fmt (3, 4); - -typedef void (*plugin_vlog_t)(openvpn_plugin_log_flags_t flags, - const char *plugin_name, - const char *format, - va_list arglist) _ovpn_chk_fmt (3, 0); -/* #undef _ovpn_chk_fmt */ - -/** - * Export of secure_memzero() to be used inside plug-ins - * - * @param data Pointer to data to zeroise - * @param len Length of data, in bytes - * - */ -typedef void (*plugin_secure_memzero_t)(void *data, size_t len); - -/** - * Export of openvpn_base64_encode() to be used inside plug-ins - * - * @param data Pointer to data to BASE64 encode - * @param size Length of data, in bytes - * @param *str Pointer to the return buffer. This needed memory is - * allocated by openvpn_base64_encode() and needs to be free()d - * after use. - * - * @return int Returns the length of the buffer created, or -1 on error. - * - */ -typedef int (*plugin_base64_encode_t)(const void *data, int size, char **str); - -/** - * Export of openvpn_base64_decode() to be used inside plug-ins - * - * @param str Pointer to the BASE64 encoded data - * @param data Pointer to the buffer where save the decoded data - * @param size Size of the destination buffer - * - * @return int Returns the length of the decoded data, or -1 on error or - * if the destination buffer is too small. - * - */ -typedef int (*plugin_base64_decode_t)(const char *str, void *data, int size); - - -/** - * Used by the openvpn_plugin_open_v3() function to pass callback - * function pointers to the plug-in. - * - * plugin_log - * plugin_vlog : Use these functions to add information to the OpenVPN log file. - * Messages will only be displayed if the plugin_name parameter - * is set. PLOG_DEBUG messages will only be displayed with plug-in - * debug log verbosity (at the time of writing that's verb >= 7). - * - * plugin_secure_memzero - * : Use this function to securely wipe sensitive information from - * memory. This function is declared in a way that the compiler - * will not remove these function calls during the compiler - * optimization phase. - */ -struct openvpn_plugin_callbacks -{ - plugin_log_t plugin_log; - plugin_vlog_t plugin_vlog; - plugin_secure_memzero_t plugin_secure_memzero; - plugin_base64_encode_t plugin_base64_encode; - plugin_base64_decode_t plugin_base64_decode; -}; - -/** - * Used by the openvpn_plugin_open_v3() function to indicate to the - * plug-in what kind of SSL implementation OpenVPN uses. This is - * to avoid SEGV issues when OpenVPN is complied against mbed TLS - * and the plug-in against OpenSSL. - */ -typedef enum { - SSLAPI_NONE, - SSLAPI_OPENSSL, - SSLAPI_MBEDTLS -} ovpnSSLAPI; - -/** - * Arguments used to transport variables to the plug-in. - * The struct openvpn_plugin_args_open_in is only used - * by the openvpn_plugin_open_v3() function. - * - * STRUCT MEMBERS - * - * type_mask : Set by OpenVPN to the logical OR of all script - * types which this version of OpenVPN supports. - * - * argv : a NULL-terminated array of options provided to the OpenVPN - * "plug-in" directive. argv[0] is the dynamic library pathname. - * - * envp : a NULL-terminated array of OpenVPN-set environmental - * variables in "name=value" format. Note that for security reasons, - * these variables are not actually written to the "official" - * environmental variable store of the process. - * - * callbacks : a pointer to the plug-in callback function struct. - * - */ -struct openvpn_plugin_args_open_in -{ - const int type_mask; - const char **const argv; - const char **const envp; - struct openvpn_plugin_callbacks *callbacks; - const ovpnSSLAPI ssl_api; - const char *ovpn_version; - const unsigned int ovpn_version_major; - const unsigned int ovpn_version_minor; - const char *const ovpn_version_patch; -}; - - -/** - * Arguments used to transport variables from the plug-in back - * to the OpenVPN process. The struct openvpn_plugin_args_open_return - * is only used by the openvpn_plugin_open_v3() function. - * - * STRUCT MEMBERS - * - * type_mask : The plug-in should set this value to the logical OR of all script - * types which the plug-in wants to intercept. For example, if the - * script wants to intercept the client-connect and client-disconnect - * script types: - * - * type_mask = OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_CLIENT_CONNECT) - * | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_CLIENT_DISCONNECT) - * - * handle : Pointer to a global plug-in context, created by the plug-in. This pointer - * is passed on to the other plug-in calls. - * - * return_list : used to return data back to OpenVPN. - * - */ -struct openvpn_plugin_args_open_return -{ - int type_mask; - openvpn_plugin_handle_t handle; - struct openvpn_plugin_string_list **return_list; -}; - -/** - * Arguments used to transport variables to and from the - * plug-in. The struct openvpn_plugin_args_func is only used - * by the openvpn_plugin_func_v3() function. - * - * STRUCT MEMBERS: - * - * type : one of the PLUGIN_x types. - * - * argv : a NULL-terminated array of "command line" options which - * would normally be passed to the script. argv[0] is the dynamic - * library pathname. - * - * envp : a NULL-terminated array of OpenVPN-set environmental - * variables in "name=value" format. Note that for security reasons, - * these variables are not actually written to the "official" - * environmental variable store of the process. - * - * handle : Pointer to a global plug-in context, created by the plug-in's openvpn_plugin_open_v3(). - * - * per_client_context : the per-client context pointer which was returned by - * openvpn_plugin_client_constructor_v1, if defined. - * - * current_cert_depth : Certificate depth of the certificate being passed over (only if compiled with ENABLE_CRYPTO defined) - * - * *current_cert : X509 Certificate object received from the client (only if compiled with ENABLE_CRYPTO defined) - * - */ -struct openvpn_plugin_args_func_in -{ - const int type; - const char **const argv; - const char **const envp; - openvpn_plugin_handle_t handle; - void *per_client_context; -#ifdef ENABLE_CRYPTO - int current_cert_depth; - openvpn_x509_cert_t *current_cert; -#else - int __current_cert_depth_disabled; /* Unused, for compatibility purposes only */ - void *__current_cert_disabled; /* Unused, for compatibility purposes only */ -#endif -}; - - -/** - * Arguments used to transport variables to and from the - * plug-in. The struct openvpn_plugin_args_func is only used - * by the openvpn_plugin_func_v3() function. - * - * STRUCT MEMBERS: - * - * return_list : used to return data back to OpenVPN for further processing/usage by - * the OpenVPN executable. - * - */ -struct openvpn_plugin_args_func_return -{ - struct openvpn_plugin_string_list **return_list; -}; - -/* - * Multiple plugin modules can be cascaded, and modules can be - * used in tandem with scripts. The order of operation is that - * the module func() functions are called in the order that - * the modules were specified in the config file. If a script - * was specified as well, it will be called last. If the - * return code of the module/script controls an authentication - * function (such as tls-verify or auth-user-pass-verify), then - * every module and script must return success (0) in order for - * the connection to be authenticated. - * - * Notes: - * - * Plugins which use a privilege-separation model (by forking in - * their initialization function before the main OpenVPN process - * downgrades root privileges and/or executes a chroot) must - * daemonize after a fork if the "daemon" environmental variable is - * set. In addition, if the "daemon_log_redirect" variable is set, - * the plugin should preserve stdout/stderr across the daemon() - * syscall. See the daemonize() function in plugin/auth-pam/auth-pam.c - * for an example. - */ - -/* - * Prototypes for functions which OpenVPN plug-ins must define. - */ - -/* - * FUNCTION: openvpn_plugin_open_v2 - * - * REQUIRED: YES - * - * Called on initial plug-in load. OpenVPN will preserve plug-in state - * across SIGUSR1 restarts but not across SIGHUP restarts. A SIGHUP reset - * will cause the plugin to be closed and reopened. - * - * ARGUMENTS - * - * *type_mask : Set by OpenVPN to the logical OR of all script - * types which this version of OpenVPN supports. The plug-in - * should set this value to the logical OR of all script types - * which the plug-in wants to intercept. For example, if the - * script wants to intercept the client-connect and - * client-disconnect script types: - * - * *type_mask = OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_CLIENT_CONNECT) - * | OPENVPN_PLUGIN_MASK(OPENVPN_PLUGIN_CLIENT_DISCONNECT) - * - * argv : a NULL-terminated array of options provided to the OpenVPN - * "plug-in" directive. argv[0] is the dynamic library pathname. - * - * envp : a NULL-terminated array of OpenVPN-set environmental - * variables in "name=value" format. Note that for security reasons, - * these variables are not actually written to the "official" - * environmental variable store of the process. - * - * return_list : used to return data back to OpenVPN. - * - * RETURN VALUE - * - * An openvpn_plugin_handle_t value on success, NULL on failure - */ -OPENVPN_PLUGIN_DEF openvpn_plugin_handle_t OPENVPN_PLUGIN_FUNC(openvpn_plugin_open_v2) - (unsigned int *type_mask, - const char *argv[], - const char *envp[], - struct openvpn_plugin_string_list **return_list); - -/* - * FUNCTION: openvpn_plugin_func_v2 - * - * Called to perform the work of a given script type. - * - * REQUIRED: YES - * - * ARGUMENTS - * - * handle : the openvpn_plugin_handle_t value which was returned by - * openvpn_plugin_open. - * - * type : one of the PLUGIN_x types - * - * argv : a NULL-terminated array of "command line" options which - * would normally be passed to the script. argv[0] is the dynamic - * library pathname. - * - * envp : a NULL-terminated array of OpenVPN-set environmental - * variables in "name=value" format. Note that for security reasons, - * these variables are not actually written to the "official" - * environmental variable store of the process. - * - * per_client_context : the per-client context pointer which was returned by - * openvpn_plugin_client_constructor_v1, if defined. - * - * return_list : used to return data back to OpenVPN. - * - * RETURN VALUE - * - * OPENVPN_PLUGIN_FUNC_SUCCESS on success, OPENVPN_PLUGIN_FUNC_ERROR on failure - * - * In addition, OPENVPN_PLUGIN_FUNC_DEFERRED may be returned by - * OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY. This enables asynchronous - * authentication where the plugin (or one of its agents) may indicate - * authentication success/failure some number of seconds after the return - * of the OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY handler by writing a single - * char to the file named by auth_control_file in the environmental variable - * list (envp). - * - * first char of auth_control_file: - * '0' -- indicates auth failure - * '1' -- indicates auth success - * - * OpenVPN will delete the auth_control_file after it goes out of scope. - * - * If an OPENVPN_PLUGIN_ENABLE_PF handler is defined and returns success - * for a particular client instance, packet filtering will be enabled for that - * instance. OpenVPN will then attempt to read the packet filter configuration - * from the temporary file named by the environmental variable pf_file. This - * file may be generated asynchronously and may be dynamically updated during the - * client session, however the client will be blocked from sending or receiving - * VPN tunnel packets until the packet filter file has been generated. OpenVPN - * will periodically test the packet filter file over the life of the client - * instance and reload when modified. OpenVPN will delete the packet filter file - * when the client instance goes out of scope. - * - * Packet filter file grammar: - * - * [CLIENTS DROP|ACCEPT] - * {+|-}common_name1 - * {+|-}common_name2 - * . . . - * [SUBNETS DROP|ACCEPT] - * {+|-}subnet1 - * {+|-}subnet2 - * . . . - * [END] - * - * Subnet: IP-ADDRESS | IP-ADDRESS/NUM_NETWORK_BITS - * - * CLIENTS refers to the set of clients (by their common-name) which - * this instance is allowed ('+') to connect to, or is excluded ('-') - * from connecting to. Note that in the case of client-to-client - * connections, such communication must be allowed by the packet filter - * configuration files of both clients. - * - * SUBNETS refers to IP addresses or IP address subnets which this - * instance may connect to ('+') or is excluded ('-') from connecting - * to. - * - * DROP or ACCEPT defines default policy when there is no explicit match - * for a common-name or subnet. The [END] tag must exist. A special - * purpose tag called [KILL] will immediately kill the client instance. - * A given client or subnet rule applies to both incoming and outgoing - * packets. - * - * See plugin/defer/simple.c for an example on using asynchronous - * authentication and client-specific packet filtering. - */ -OPENVPN_PLUGIN_DEF int OPENVPN_PLUGIN_FUNC(openvpn_plugin_func_v2) - (openvpn_plugin_handle_t handle, - const int type, - const char *argv[], - const char *envp[], - void *per_client_context, - struct openvpn_plugin_string_list **return_list); - - -/* - * FUNCTION: openvpn_plugin_open_v3 - * - * REQUIRED: YES - * - * Called on initial plug-in load. OpenVPN will preserve plug-in state - * across SIGUSR1 restarts but not across SIGHUP restarts. A SIGHUP reset - * will cause the plugin to be closed and reopened. - * - * ARGUMENTS - * - * version : fixed value, defines the API version of the OpenVPN plug-in API. The plug-in - * should validate that this value is matching the OPENVPN_PLUGINv3_STRUCTVER - * value. - * - * arguments : Structure with all arguments available to the plug-in. - * - * retptr : used to return data back to OpenVPN. - * - * RETURN VALUE - * - * OPENVPN_PLUGIN_FUNC_SUCCESS on success, OPENVPN_PLUGIN_FUNC_ERROR on failure - */ -OPENVPN_PLUGIN_DEF int OPENVPN_PLUGIN_FUNC(openvpn_plugin_open_v3) - (const int version, - struct openvpn_plugin_args_open_in const *arguments, - struct openvpn_plugin_args_open_return *retptr); - -/* - * FUNCTION: openvpn_plugin_func_v3 - * - * Called to perform the work of a given script type. - * - * REQUIRED: YES - * - * ARGUMENTS - * - * version : fixed value, defines the API version of the OpenVPN plug-in API. The plug-in - * should validate that this value is matching the OPENVPN_PLUGIN_VERSION value. - * - * handle : the openvpn_plugin_handle_t value which was returned by - * openvpn_plugin_open. - * - * return_list : used to return data back to OpenVPN. - * - * RETURN VALUE - * - * OPENVPN_PLUGIN_FUNC_SUCCESS on success, OPENVPN_PLUGIN_FUNC_ERROR on failure - * - * In addition, OPENVPN_PLUGIN_FUNC_DEFERRED may be returned by - * OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY. This enables asynchronous - * authentication where the plugin (or one of its agents) may indicate - * authentication success/failure some number of seconds after the return - * of the OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY handler by writing a single - * char to the file named by auth_control_file in the environmental variable - * list (envp). - * - * first char of auth_control_file: - * '0' -- indicates auth failure - * '1' -- indicates auth success - * - * OpenVPN will delete the auth_control_file after it goes out of scope. - * - * If an OPENVPN_PLUGIN_ENABLE_PF handler is defined and returns success - * for a particular client instance, packet filtering will be enabled for that - * instance. OpenVPN will then attempt to read the packet filter configuration - * from the temporary file named by the environmental variable pf_file. This - * file may be generated asynchronously and may be dynamically updated during the - * client session, however the client will be blocked from sending or receiving - * VPN tunnel packets until the packet filter file has been generated. OpenVPN - * will periodically test the packet filter file over the life of the client - * instance and reload when modified. OpenVPN will delete the packet filter file - * when the client instance goes out of scope. - * - * Packet filter file grammar: - * - * [CLIENTS DROP|ACCEPT] - * {+|-}common_name1 - * {+|-}common_name2 - * . . . - * [SUBNETS DROP|ACCEPT] - * {+|-}subnet1 - * {+|-}subnet2 - * . . . - * [END] - * - * Subnet: IP-ADDRESS | IP-ADDRESS/NUM_NETWORK_BITS - * - * CLIENTS refers to the set of clients (by their common-name) which - * this instance is allowed ('+') to connect to, or is excluded ('-') - * from connecting to. Note that in the case of client-to-client - * connections, such communication must be allowed by the packet filter - * configuration files of both clients. - * - * SUBNETS refers to IP addresses or IP address subnets which this - * instance may connect to ('+') or is excluded ('-') from connecting - * to. - * - * DROP or ACCEPT defines default policy when there is no explicit match - * for a common-name or subnet. The [END] tag must exist. A special - * purpose tag called [KILL] will immediately kill the client instance. - * A given client or subnet rule applies to both incoming and outgoing - * packets. - * - * See plugin/defer/simple.c for an example on using asynchronous - * authentication and client-specific packet filtering. - */ -OPENVPN_PLUGIN_DEF int OPENVPN_PLUGIN_FUNC(openvpn_plugin_func_v3) - (const int version, - struct openvpn_plugin_args_func_in const *arguments, - struct openvpn_plugin_args_func_return *retptr); - -/* - * FUNCTION: openvpn_plugin_close_v1 - * - * REQUIRED: YES - * - * ARGUMENTS - * - * handle : the openvpn_plugin_handle_t value which was returned by - * openvpn_plugin_open. - * - * Called immediately prior to plug-in unload. - */ -OPENVPN_PLUGIN_DEF void OPENVPN_PLUGIN_FUNC(openvpn_plugin_close_v1) - (openvpn_plugin_handle_t handle); - -/* - * FUNCTION: openvpn_plugin_abort_v1 - * - * REQUIRED: NO - * - * ARGUMENTS - * - * handle : the openvpn_plugin_handle_t value which was returned by - * openvpn_plugin_open. - * - * Called when OpenVPN is in the process of aborting due to a fatal error. - * Will only be called on an open context returned by a prior successful - * openvpn_plugin_open callback. - */ -OPENVPN_PLUGIN_DEF void OPENVPN_PLUGIN_FUNC(openvpn_plugin_abort_v1) - (openvpn_plugin_handle_t handle); - -/* - * FUNCTION: openvpn_plugin_client_constructor_v1 - * - * Called to allocate a per-client memory region, which - * is then passed to the openvpn_plugin_func_v2 function. - * This function is called every time the OpenVPN server - * constructs a client instance object, which normally - * occurs when a session-initiating packet is received - * by a new client, even before the client has authenticated. - * - * This function should allocate the private memory needed - * by the plugin to track individual OpenVPN clients, and - * return a void * to this memory region. - * - * REQUIRED: NO - * - * ARGUMENTS - * - * handle : the openvpn_plugin_handle_t value which was returned by - * openvpn_plugin_open. - * - * RETURN VALUE - * - * void * pointer to plugin's private per-client memory region, or NULL - * if no memory region is required. - */ -OPENVPN_PLUGIN_DEF void *OPENVPN_PLUGIN_FUNC(openvpn_plugin_client_constructor_v1) - (openvpn_plugin_handle_t handle); - -/* - * FUNCTION: openvpn_plugin_client_destructor_v1 - * - * This function is called on client instance object destruction. - * - * REQUIRED: NO - * - * ARGUMENTS - * - * handle : the openvpn_plugin_handle_t value which was returned by - * openvpn_plugin_open. - * - * per_client_context : the per-client context pointer which was returned by - * openvpn_plugin_client_constructor_v1, if defined. - */ -OPENVPN_PLUGIN_DEF void OPENVPN_PLUGIN_FUNC(openvpn_plugin_client_destructor_v1) - (openvpn_plugin_handle_t handle, void *per_client_context); - -/* - * FUNCTION: openvpn_plugin_select_initialization_point_v1 - * - * Several different points exist in OpenVPN's initialization sequence where - * the openvpn_plugin_open function can be called. While the default is - * OPENVPN_PLUGIN_INIT_PRE_DAEMON, this function can be used to select a - * different initialization point. For example, if your plugin needs to - * return configuration parameters to OpenVPN, use - * OPENVPN_PLUGIN_INIT_PRE_CONFIG_PARSE. - * - * REQUIRED: NO - * - * RETURN VALUE: - * - * An OPENVPN_PLUGIN_INIT_x value. - */ -#define OPENVPN_PLUGIN_INIT_PRE_CONFIG_PARSE 1 -#define OPENVPN_PLUGIN_INIT_PRE_DAEMON 2 /* default */ -#define OPENVPN_PLUGIN_INIT_POST_DAEMON 3 -#define OPENVPN_PLUGIN_INIT_POST_UID_CHANGE 4 - -OPENVPN_PLUGIN_DEF int OPENVPN_PLUGIN_FUNC(openvpn_plugin_select_initialization_point_v1) - (void); - -/* - * FUNCTION: openvpn_plugin_min_version_required_v1 - * - * This function is called by OpenVPN to query the minimum - * plugin interface version number required by the plugin. - * - * REQUIRED: NO - * - * RETURN VALUE - * - * The minimum OpenVPN plugin interface version number necessary to support - * this plugin. - */ -OPENVPN_PLUGIN_DEF int OPENVPN_PLUGIN_FUNC(openvpn_plugin_min_version_required_v1) - (void); - -/* - * Deprecated functions which are still supported for backward compatibility. - */ - -OPENVPN_PLUGIN_DEF openvpn_plugin_handle_t OPENVPN_PLUGIN_FUNC(openvpn_plugin_open_v1) - (unsigned int *type_mask, - const char *argv[], - const char *envp[]); - -OPENVPN_PLUGIN_DEF int OPENVPN_PLUGIN_FUNC(openvpn_plugin_func_v1) - (openvpn_plugin_handle_t handle, const int type, const char *argv[], const char *envp[]); - -#ifdef __cplusplus -} -#endif - -#endif /* OPENVPN_PLUGIN_H_ */ diff --git a/include/openvpn-plugin.h.in b/include/openvpn-plugin.h.in index a604f1c..64b2088 100644 --- a/include/openvpn-plugin.h.in +++ b/include/openvpn-plugin.h.in @@ -26,7 +26,6 @@ #define OPENVPN_PLUGIN_VERSION 3 -#ifdef ENABLE_CRYPTO #ifdef ENABLE_CRYPTO_MBEDTLS #include <mbedtls/x509_crt.h> #ifndef __OPENVPN_X509_CERT_T_DECLARED @@ -40,7 +39,6 @@ typedef mbedtls_x509_crt openvpn_x509_cert_t; typedef X509 openvpn_x509_cert_t; #endif #endif -#endif #include <stdarg.h> #include <stddef.h> @@ -118,20 +116,22 @@ extern "C" { * FUNC: openvpn_plugin_client_destructor_v1 (top-level "generic" client) * FUNC: openvpn_plugin_close_v1 */ -#define OPENVPN_PLUGIN_UP 0 -#define OPENVPN_PLUGIN_DOWN 1 -#define OPENVPN_PLUGIN_ROUTE_UP 2 -#define OPENVPN_PLUGIN_IPCHANGE 3 -#define OPENVPN_PLUGIN_TLS_VERIFY 4 -#define OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY 5 -#define OPENVPN_PLUGIN_CLIENT_CONNECT 6 -#define OPENVPN_PLUGIN_CLIENT_DISCONNECT 7 -#define OPENVPN_PLUGIN_LEARN_ADDRESS 8 -#define OPENVPN_PLUGIN_CLIENT_CONNECT_V2 9 -#define OPENVPN_PLUGIN_TLS_FINAL 10 -#define OPENVPN_PLUGIN_ENABLE_PF 11 -#define OPENVPN_PLUGIN_ROUTE_PREDOWN 12 -#define OPENVPN_PLUGIN_N 13 +#define OPENVPN_PLUGIN_UP 0 +#define OPENVPN_PLUGIN_DOWN 1 +#define OPENVPN_PLUGIN_ROUTE_UP 2 +#define OPENVPN_PLUGIN_IPCHANGE 3 +#define OPENVPN_PLUGIN_TLS_VERIFY 4 +#define OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY 5 +#define OPENVPN_PLUGIN_CLIENT_CONNECT 6 +#define OPENVPN_PLUGIN_CLIENT_DISCONNECT 7 +#define OPENVPN_PLUGIN_LEARN_ADDRESS 8 +#define OPENVPN_PLUGIN_CLIENT_CONNECT_V2 9 +#define OPENVPN_PLUGIN_TLS_FINAL 10 +#define OPENVPN_PLUGIN_ENABLE_PF 11 +#define OPENVPN_PLUGIN_ROUTE_PREDOWN 12 +#define OPENVPN_PLUGIN_CLIENT_CONNECT_DEFER 13 +#define OPENVPN_PLUGIN_CLIENT_CONNECT_DEFER_V2 14 +#define OPENVPN_PLUGIN_N 15 /* * Build a mask out of a set of plug-in types. @@ -423,9 +423,9 @@ struct openvpn_plugin_args_open_return * per_client_context : the per-client context pointer which was returned by * openvpn_plugin_client_constructor_v1, if defined. * - * current_cert_depth : Certificate depth of the certificate being passed over (only if compiled with ENABLE_CRYPTO defined) + * current_cert_depth : Certificate depth of the certificate being passed over * - * *current_cert : X509 Certificate object received from the client (only if compiled with ENABLE_CRYPTO defined) + * *current_cert : X509 Certificate object received from the client * */ struct openvpn_plugin_args_func_in @@ -435,13 +435,8 @@ struct openvpn_plugin_args_func_in const char **const envp; openvpn_plugin_handle_t handle; void *per_client_context; -#ifdef ENABLE_CRYPTO int current_cert_depth; openvpn_x509_cert_t *current_cert; -#else - int __current_cert_depth_disabled; /* Unused, for compatibility purposes only */ - void *__current_cert_disabled; /* Unused, for compatibility purposes only */ -#endif }; @@ -562,12 +557,21 @@ OPENVPN_PLUGIN_DEF openvpn_plugin_handle_t OPENVPN_PLUGIN_FUNC(openvpn_plugin_op * OPENVPN_PLUGIN_FUNC_SUCCESS on success, OPENVPN_PLUGIN_FUNC_ERROR on failure * * In addition, OPENVPN_PLUGIN_FUNC_DEFERRED may be returned by - * OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY. This enables asynchronous - * authentication where the plugin (or one of its agents) may indicate - * authentication success/failure some number of seconds after the return - * of the OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY handler by writing a single - * char to the file named by auth_control_file in the environmental variable - * list (envp). + * OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY, OPENVPN_PLUGIN_CLIENT_CONNECT and + * OPENVPN_PLUGIN_CLIENT_CONNECT_V2. This enables asynchronous + * authentication or client connect where the plugin (or one of its agents) + * may indicate authentication success/failure or client configuration some + * number of seconds after the return of the function handler. + * For OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY and OPENVPN_PLUGIN_CLIENT_CONNECT + * this is done by writing a single char to the file named by + * auth_control_file/client_connect_deferred_file + * in the environmental variable list (envp). + * + * In addition the OPENVPN_PLUGIN_CLIENT_CONNECT_DEFER and + * OPENVPN_PLUGIN_CLIENT_CONNECT_DEFER_V2 are called when OpenVPN tries to + * get the deferred result. For a V2 call implementing this function is + * required as information is not passed by files. For the normal version + * the call is optional. * * first char of auth_control_file: * '0' -- indicates auth failure |