Sync from SUSE:SLFO:Main openvpn revision f996ae19e997230c9cd097f15109ce41

This commit is contained in:
Adrian Schröter 2024-05-03 17:33:52 +02:00
commit 0a466739b7
14 changed files with 2700 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

37
client-netconfig.down Normal file
View File

@ -0,0 +1,37 @@
#!/bin/bash
# Copyright (c) 2010 Andreas Schneider <anschneider@exsuse.de>
# Marius Tomaschewski <mt@suse.de>
# Licensed under the GPL version 2
# PURPOSE: This script automatically removes the /etc/resolv.conf
# and another settings applied before via netconfig.
# INSTALL NOTES:
# Place this file in /etc/openvpn/client.down
# Then, add the following to your /etc/openvpn/<clientconfig>.conf:
# client
# pull dhcp-options
# up /etc/openvpn/client.up
# down /etc/openvpn/client.down
# Finally, "chmod +x /etc/openvpn/client.{up,down}"
# disable pathname expansion
shopt -o -s noglob
# --up/--down patametes are:
#
# tun_dev tun_mtu link_mtu ifconfig_local_ip
# ifconfig_remote_ip [ init | restart ]
#
# tap_dev tap_mtu link_mtu ifconfig_local_ip
# ifconfig_netmask [ init | restart ]
dev=$1
# skip, when there is no interface parameter or netconfig
if test -a /sbin/netconfig -a "x${dev}" != x ; then
/sbin/netconfig remove -s openvpn -i "${dev}"
fi
# all done...
exit 0

77
client-netconfig.up Normal file
View File

@ -0,0 +1,77 @@
#!/bin/bash
# Copyright (c) 2010 Andreas Schneider <anschneider@exsuse.de>
# Marius Tomaschewski <mt@suse.de>
# Licensed under the GPL version 2
# PURPOSE: This script sets the proper /etc/resolv.conf and another
# settings as pulled down from an OpenVPN server using a
# netconfig modify call.
# INSTALL NOTES:
# Place this file in /etc/openvpn/client.up
# Then, add the following to your /etc/openvpn/<clientconfig>.conf:
# client
# pull dhcp-options
# up /etc/openvpn/client.up
# down /etc/openvpn/client.down
# Finally, "chmod +x /etc/openvpn/client.{up,down}"
# disable pathname expansion
shopt -o -s noglob
# --up/--down patametes are:
#
# tun_dev tun_mtu link_mtu ifconfig_local_ip
# ifconfig_remote_ip [ init | restart ]
#
# tap_dev tap_mtu link_mtu ifconfig_local_ip
# ifconfig_netmask [ init | restart ]
dev=$1
# skip, when there is no interface parameter or netconfig
if test -x /sbin/netconfig -a "x${dev}" != x ; then
# init variables
dns_domain=()
dns_server=()
ntp_server=()
wins_server=()
nbdd_server=()
nb_typeid=""
nb_scopeid=""
nb_disable=""
# collect settings data
for fopt in ${!foreign_option_*} ; do
test "x${!fopt}" != x || continue
data=(${!fopt})
test "x${data[0]}" = "xdhcp-option" && \
case "${data[1]}" in
DOMAIN) dns_domain+=("${data[2]}") ;;
DNS) dns_server+=("${data[2]}") ;;
NTP) ntp_server+=("${data[2]}") ;;
WINS) wins_server+=("${data[2]}") ;;
NBDD) nbdd_server+=("${data[2]}") ;;
NBT) nb_typeid="${data[2]}" ;;
NBS) nb_scopeid="${data[2]}" ;;
DISABLE-NBT) nb_disable="yes" ;;
esac
done
# call netconfig modify
{
echo "DNSSEARCH='${dns_domain[*]}'"
echo "DNSSERVERS='${dns_server[*]}'"
echo "NTPSERVERS='${ntp_server[*]}'"
# currently unused / no netconfig module for:
echo "NETBIOSNAMESERVER='${wins_server[*]}'"
echo "NETBIOSDDSERVER='${nbdd_server[*]}'"
echo "NETBIOSNODETYPE='$nb_typeid'"
echo "NETBIOSSCOPE='$nb_scopeid'"
# nb_disable ?
} | /sbin/netconfig modify -s openvpn -i "$dev"
fi
# all done...
exit 0

View File

@ -0,0 +1,17 @@
Index: doc/openvpn.8
===================================================================
--- doc/openvpn.8.orig
+++ doc/openvpn.8
@@ -6690,9 +6690,9 @@ For more information and examples on how
modules, see the README file in the \fBplugin\fP folder of the OpenVPN
source distribution.
.sp
-If you are using an RPM install of OpenVPN, see
-\fB/usr/share/openvpn/plugin\fP\&. The documentation is in \fBdoc\fP and
-the actual plugin modules are in \fBlib\fP\&.
+If you are using an RPM install of OpenVPN, the actual plugin modules
+are in \fB@PLUGIN_LIBDIR@\fP\& and the documentation is in
+\fB@PLUGIN_DOCDIR@/README.<plugin-name>\fP\&.
.sp
Multiple plugin modules can be cascaded, and modules can be used in
tandem with scripts. The modules will be called by OpenVPN in the order

BIN
openvpn-2.6.8.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.

16
openvpn-2.6.8.tar.gz.asc Normal file
View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEvlj1OdBZuAYxwSlKQdIJZcLoLccFAmVXQWEACgkQQdIJZcLo
LccHgw/8CluyqqSi46O+YIRBjJ29N7w9LV9Jt/nwwgNsOUbN4FkRRJpoGSMGdbo3
2eOkDVnXisphl9aMiYmO4NDFSVgvFswC/UjZ0EKpyjAezYtN8Q7gj5XXOi7ENvWw
tKQtnjUS/wV6N/ujCVYWo8EpZnh15vIkxo7BTjDjHRWiNjXioa89/AxqzN0vO0h6
yeNJ65RPVp5RFow2DiyzsRdtIh/dP+TfupAUqcpFc2cvRZ2bXMcj5OV+khjsdYh7
y5/xqCHbb41EJwy8d2iK4SXlggVfRDtuyqfJ3hCuPdHOe6NBZRgCZ5FcTqUJckkN
ngYRViC33BHtcRKQQcoxSmhg1tjA1n2Yrt+xsrwCkw/M8OY+AS0ys4uiKYxCDN5I
DcGTc9lE2xHHFur4ZUmOVQofRq8yRAQgik5nxMfur+tNpLGEW44eBjTYR3fzUjhO
oNDxZv8oy0jZEelqvUTK2tRMdzxDlyOV8g7A8nXYcbJpAoaEaZsQ2C2Dbn1SgtZ/
cmWMIXghFTnsTl70pbUZ8saHWAGb3d+AzwhET7BYQ7TBqNQMNzVaJ0O8aFEGPQzK
4CyMzSD2x4Tnsl56BsvdVsihDBFhnfICrpXzO/QzTsbPb5xkooEuUhVWacMgJ74I
Z2jDNGM67aDTOpHtgxluKZh1njes0SSGbLPDJIG6RG7TPcX3nE4=
=kOZ8
-----END PGP SIGNATURE-----

1
openvpn-tmpfile.conf Normal file
View File

@ -0,0 +1 @@
D /run/openvpn 0750 root root -

28
openvpn.README.SUSE Normal file
View File

@ -0,0 +1,28 @@
Notes about the OpenVPN package
In a fresh installation, you will find an empty directory /etc/openvpn.
The directory is meant to contain *.conf files.
With openSUSE post-12.3 either all enabled instances are handled by
calling
'systemctl <start|stop|status> openvpn.target'
or each one tunnel/config separately using openvpn service template:
'systemctl <start|stop|status|enable|disbale> openvpn@<name>.service'
while <name> is the name of the configuration file /etc/openvpn/<name>.conf.
The OPENVPN_AUTOSTART sysconfig variable, which were specifying the
list of enabled configs is migrated to systemctl enable on update.
Alternatively, you can also use the rcopenvpn compatiblity wrapper:
rcopenvpn <start|stop|status>
or per config/tunnel:
rcopenvpn <start|stop|status|enable|disable> <name>

1726
openvpn.changes Normal file

File diff suppressed because it is too large Load Diff

496
openvpn.keyring Normal file
View File

@ -0,0 +1,496 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: F554 A368 7412 CFFE BDEF E0A3 12F5 F7B4 2F2B 01E7
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
=YkB4
-----END PGP PUBLIC KEY BLOCK-----

16
openvpn.service Normal file
View File

@ -0,0 +1,16 @@
[Unit]
Description=OpenVPN tunneling daemon instance using /etc/openvpn/%i.conf
After=network.target
PartOf=openvpn.target
[Service]
Type=notify
PrivateTmp=true
PIDFile=/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --daemon openvpn@%i --writepid /run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf
# boo#1142830: "reload" does not work if openvpn drops root privileges after startup.
ExecReload=/usr/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target openvpn.target

223
openvpn.spec Normal file
View File

@ -0,0 +1,223 @@
#
# spec file for package openvpn
#
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%if ! %{defined _rundir}
%define _rundir %{_localstatedir}/run
%endif
Name: openvpn
Version: 2.6.8
Release: 0
Summary: Full-featured SSL VPN solution using a TUN/TAP Interface
License: GPL-2.0-only WITH openvpn-openssl-exception
Group: Productivity/Networking/Security
URL: https://openvpn.net/
Source: https://swupdate.openvpn.org/community/releases/openvpn-%{version}.tar.gz
Source1: https://swupdate.openvpn.org/community/releases/openvpn-%{version}.tar.gz.asc
Source3: %{name}.README.SUSE
Source4: client-netconfig.up
Source5: client-netconfig.down
Source7: %{name}.keyring
Source8: %{name}.service
Source9: %{name}.target
Source10: %{name}-tmpfile.conf
Source11: rc%{name}
Patch1: %{name}-2.3-plugin-man.dif
BuildRequires: iproute2
BuildRequires: libcap-ng-devel
BuildRequires: liblz4-devel
BuildRequires: libselinux-devel
BuildRequires: lz4
BuildRequires: lzo-devel
BuildRequires: openssl-devel
BuildRequires: p11-kit-devel
BuildRequires: pam-devel
BuildRequires: pkcs11-helper-devel >= 1.11
BuildRequires: pkgconfig
BuildRequires: xz
BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(systemd)
Requires: iproute2
Requires: pkcs11-helper >= 1.11
%systemd_ordering
%description
OpenVPN is an SSL VPN solution which can accommodate a wide
range of configurations, including remote access, site-to-site VPNs,
WiFi security, and remote access solutions with load
balancing, failover, and fine-grained access-controls.
OpenVPN implements OSI layer 2 or 3 secure network extension using the
SSL/TLS protocol, supports flexible client
authentication methods based on certificates, smart cards, and/or
2-factor authentication, and allows user or group-specific access
control policies using firewall rules applied to the VPN virtual
interface.
OpenVPN is not a web application proxy and does not operate through a
web browser.
%package down-root-plugin
Summary: OpenVPN down-root plugin
Group: Productivity/Networking/Security
Requires: %{name} = %{version}
%description down-root-plugin
The OpenVPN down-root plugin allows an OpenVPN configuration to call a
down script with root privileges, even when privileges have been
dropped using --user/--group/--chroot.
This module uses a split privilege execution model which will fork()
before OpenVPN drops root privileges, at the point where the --up
script is usually called. The plugin will then remain in a wait state
until it receives a message from OpenVPN via pipe to execute the down
script. Thus, the down script will be run in the same execution
environment as the up script.
%package auth-pam-plugin
Summary: OpenVPN auth-pam plugin
Group: Productivity/Networking/Security
Requires: %{name} = %{version}
%description auth-pam-plugin
The OpenVPN auth-pam plugin implements username/password authentication
via PAM, and essentially allows any authentication method supported by
PAM (such as LDAP, RADIUS, or Linux Shadow passwords) to be used with
OpenVPN.
While PAM supports username/password authentication, this can be
combined with X509 certificates to provide two indepedent levels of
authentication.
This plugin uses a split privilege execution model which will function
even if you drop openvpn daemon privileges using the user, group, or
chroot directives.
%package devel
Summary: OpenVPN plugin header
Group: Development/Libraries/C and C++
Requires: %{name} = %{version}
%description devel
This package provides the header file to build external plugins.
%prep
%setup -q
%patch1
sed -e "s|\" __DATE__|$(date '+%%b %%e %%Y' -r version.m4)\"|g" \
-i src/openvpn/options.c
sed -e "s|@PLUGIN_LIBDIR@|%{_libdir}/openvpn/plugins|g" \
-e "s|@PLUGIN_DOCDIR@|%{_defaultdocdir}/%{name}|g" \
-i doc/openvpn.8
sed -e "s|%{_localstatedir}/run|%{_rundir}|g" < %{SOURCE8} > %{name}.service
# %%doc items shouldn't be executable.
find contrib sample -type f -exec chmod a-x \{\} +
%build
export CFLAGS="%{optflags} $(getconf LFS_CFLAGS) -W -Wall -fno-strict-aliasing"
export LDFLAGS
%if 0%{?suse_version} >= 1550
# usrmerge
export IPROUTE="%{_sbindir}/ip"
%endif
%configure \
--enable-iproute2 \
--enable-x509-alt-username \
--enable-pkcs11 \
--enable-systemd \
--enable-plugins \
--enable-plugin-down-root \
--enable-plugin-auth-pam \
CFLAGS="$CFLAGS $(getconf LFS_CFLAGS) -fPIE $PLUGIN_DEFS" \
LDFLAGS="$LDFLAGS -pie -lpam -rdynamic -Wl,-rpath,%{_libdir}/%{name}/plugins"
%make_build
%install
%make_install
find %{buildroot} -type f -name "*.la" -print -exec rm -f {} +
mkdir -p %{buildroot}/%{_sysconfdir}/openvpn
mkdir -p %{buildroot}/%{_rundir}/openvpn
mkdir -p %{buildroot}/%{_datadir}/openvpn
rm %{buildroot}%{_libdir}/systemd/system/openvpn-client@.service
rm %{buildroot}%{_libdir}/systemd/system/openvpn-server@.service
#use one proveded by suse
rm %{buildroot}%{_libdir}/tmpfiles.d/openvpn.conf
install -D -m 644 %{name}.service %{buildroot}/%{_unitdir}/%{name}@.service
install -D -m 644 %{SOURCE9} %{buildroot}/%{_unitdir}/%{name}.target
install -D -m 755 %{SOURCE11} %{buildroot}%{_sbindir}/rc%{name}
# tmpfiles.d
mkdir -p %{buildroot}%{_tmpfilesdir}
install -m 0644 %{SOURCE10} %{buildroot}%{_tmpfilesdir}/%{name}.conf
cp -p %{SOURCE3} README.SUSE
install -m 755 %{SOURCE4} sample/sample-scripts/client-netconfig.up
install -m 755 %{SOURCE5} sample/sample-scripts/client-netconfig.down
# we install docs via spec into _defaultdocdir/name/management-notes.txt
rm -rf %{buildroot}%{_datadir}/doc/{OpenVPN,%{name}}
find sample -name .gitignore -exec rm -f {} +
%pre
%service_add_pre %{name}.target
%post
%tmpfiles_create %{_tmpfilesdir}/%{name}.conf
%service_add_post %{name}.target
%preun
%service_del_preun %{name}.target
%postun
%service_del_postun %{name}.target
%files
%license COPYING
%doc AUTHORS COPYRIGHT.GPL ChangeLog PORTS README
%doc src/plugins/{auth-pam/README.auth-pam,down-root/README.down-root}
%doc README.*
%doc contrib
%doc sample/sample-config-files
%doc sample/sample-keys
%doc sample/sample-scripts
%doc doc/management-notes.txt
%{_mandir}/man5/openvpn-examples.5%{?ext_man}
%{_mandir}/man8/openvpn.8%{?ext_man}
%config(noreplace) %{_sysconfdir}/openvpn/
%dir %{_tmpfilesdir}
%{_unitdir}/%{name}@.service
%{_unitdir}/%{name}.target
%{_tmpfilesdir}/%{name}.conf
%dir %attr(0750,root,root) %ghost %{_rundir}/openvpn/
%{_sbindir}/rcopenvpn
%{_sbindir}/openvpn
%files down-root-plugin
%dir %{_libdir}/%{name}
%dir %{_libdir}/%{name}/plugins
%{_libdir}/%{name}/plugins/%{name}-plugin-down-root.so
%files auth-pam-plugin
%dir %{_libdir}/%{name}
%dir %{_libdir}/%{name}/plugins
%{_libdir}/%{name}/plugins/%{name}-plugin-auth-pam.so
%files devel
%{_includedir}/%{name}-plugin.h
%{_includedir}/%{name}-msg.h
%changelog

3
openvpn.target Normal file
View File

@ -0,0 +1,3 @@
[Unit]
Description=OpenVPN target allowing to start/stop all openvpn@.service instances at once

34
rcopenvpn Normal file
View File

@ -0,0 +1,34 @@
#! /bin/bash
action=$1 ; shift
config=$1 ; shift
retcode=0
if test -n "$config" ; then
systemctl "${action}" "openvpn@${config}.service" || retcode=$?
else
case $action in
status)
n=0
l=`systemctl show -p ConsistsOf openvpn.target 2>/dev/null`
for s in ${l#ConsistsOf=} ; do
case $s in
openvpn@*.service)
systemctl status "$s" || retcode=$?
((++n))
;;
esac
done
if test $n -eq 0 ; then
echo 'unused' >&2
exit 3
fi
;;
*)
systemctl "${action}" "openvpn.target"
;;
esac
fi
exit $retcode