1
0
mirror of https://github.com/SoftEtherVPN/SoftEtherVPN.git synced 2025-12-05 17:51:32 +03:00

20 Commits

Author SHA1 Message Date
4df2ac480a Merge 9a7e55b3e0 into 4fe5352931 2024-06-15 15:32:56 +00:00
9a7e55b3e0 Update workflows 2024-06-16 00:31:25 +09:00
4fe5352931 Merge pull request #2007 from metalefty/freebsd-ci
CI: Update to FreeBSD 14.0-RELEASE
2024-06-09 17:23:48 +02:00
ebe52afa9a CI: Update to FreeBSD 14.0-RELEASE
since FreeBSD 13.2 image is no longer available on the CI platform.
2024-06-09 21:33:46 +09:00
bfaff4fdb0 Merge pull request #1994 from hiura2023/master
Fix Virtual DHCP Server: Correct IP reassignment
2024-05-27 13:13:40 +02:00
08213b7f0e CHANGE ERROR HANDLER FOR SSL ERROR: Change of indent 2024-05-26 23:50:05 +09:00
98852b77d9 CHANGE ERROR HANDLER FOR SSL ERROR: 2024-05-26 23:36:21 +09:00
645a078f8e Merge pull request #2003 from djony/master
Minor russian traslation update
2024-05-22 18:40:57 +02:00
af2196468a Update strtable_ru.stb 2024-05-22 17:40:11 +03:00
42647480b0 Update strtable_ru.stb 2024-05-22 17:02:03 +03:00
60496ac7fb Merge branch 'SoftEtherVPN:master' into master 2024-05-22 16:26:44 +03:00
315ffffeec Merge pull request #2001 from chipitsine/ci_drop_macos_11
CI: drop macos-11
2024-05-20 23:37:52 +02:00
141060101d CI: drop macos-11
more details: https://github.blog/changelog/2024-05-20-actions-upcoming-changes-to-github-hosted-macos-runners/
2024-05-20 21:50:07 +02:00
5a88b34ddb Fix Virtual DHCP Server: Correct IP reassignment 2024-05-08 10:55:00 +09:00
7006539732 Merge pull request #1992 from chipitsine/macos_14
CI: add macos-14
2024-05-04 22:16:00 +02:00
8ad34b2012 Merge pull request #1991 from chipitsine/master
bump version for upcoming 5185 release
2024-05-04 22:04:21 +02:00
186d48fba2 CI: add macos-14 2024-05-04 21:25:39 +02:00
37231ac006 bump version for upcoming 5185 release 2024-05-04 21:23:00 +02:00
5e63124bb5 Update strtable_ru.stb 2023-08-27 22:20:11 +03:00
716ae59f1f Update strtable_ru.stb 2023-08-27 22:11:51 +03:00
15 changed files with 169 additions and 120 deletions

View File

@ -11,7 +11,7 @@ FreeBSD_task:
SSL: SSL:
matrix: matrix:
freebsd_instance: freebsd_instance:
image_family: freebsd-13-2 image_family: freebsd-14-0
prepare_script: prepare_script:
- pkg install -y pkgconf cmake git libsodium $SSL - pkg install -y pkgconf cmake git libsodium $SSL
- git submodule update --init --recursive - git submodule update --init --recursive

View File

@ -8,15 +8,16 @@ on:
jobs: jobs:
build: build:
name: build name: Build
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v1 - name: Checkout
uses: actions/checkout@v4
with: with:
submodules: true submodules: true
- name: archive - name: Archive
id: archive id: archive
run: | run: |
VERSION=${{ github.event.release.tag_name }} VERSION=${{ github.event.release.tag_name }}
@ -28,12 +29,8 @@ jobs:
tar cJf $TARBALL $PKGNAME tar cJf $TARBALL $PKGNAME
echo "tarball=$TARBALL" >> $GITHUB_OUTPUT echo "tarball=$TARBALL" >> $GITHUB_OUTPUT
- name: upload tarball - name: Upload tarball
uses: actions/upload-release-asset@v1 uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with: with:
upload_url: ${{ github.event.release.upload_url }} files: ./${{ steps.archive.outputs.tarball }}
asset_path: ./${{ steps.archive.outputs.tarball }} name: ${{ steps.archive.outputs.tarball }}
asset_name: ${{ steps.archive.outputs.tarball }}
asset_content_type: application/gzip

View File

@ -1,4 +1,3 @@
name: Coverity name: Coverity
on: on:
@ -10,28 +9,36 @@ permissions:
jobs: jobs:
scan: scan:
name: Scan
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: ${{ github.repository_owner == 'SoftEtherVPN' }} if: github.repository_owner == 'SoftEtherVPN'
steps: steps:
- uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v4
with: with:
submodules: true submodules: true
- name: Install apt dependencies - name: Install apt dependencies
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get install -y cmake gcc g++ libncurses5-dev libreadline-dev libssl-dev make zlib1g-dev libsodium-dev sudo apt-get install -y cmake gcc g++ libncurses5-dev libreadline-dev libssl-dev make zlib1g-dev libsodium-dev
- name: Download Coverity build tool - name: Download Coverity build tool
run: | run: |
wget -c -N https://scan.coverity.com/download/linux64 --post-data "token=${{ secrets.COVERITY_SCAN_TOKEN }}&project=SoftEtherVPN%2FSoftEtherVPN" -O coverity_tool.tar.gz wget -c -N https://scan.coverity.com/download/linux64 --post-data "token=${{ secrets.COVERITY_SCAN_TOKEN }}&project=SoftEtherVPN%2FSoftEtherVPN" -O coverity_tool.tar.gz
mkdir coverity_tool mkdir coverity_tool
tar xzf coverity_tool.tar.gz --strip 1 -C coverity_tool tar xzf coverity_tool.tar.gz --strip 1 -C coverity_tool
- name: Configure - name: Configure
run: | run: |
./configure ./configure
- name: Build with Coverity build tool - name: Build with Coverity build tool
run: | run: |
export PATH=`pwd`/coverity_tool/bin:$PATH export PATH=`pwd`/coverity_tool/bin:$PATH
cov-build --dir cov-int make -C build cov-build --dir cov-int make -C build
- name: Submit build result to Coverity Scan - name: Submit build result to Coverity Scan
run: | run: |
tar czvf cov.tar.gz cov-int tar czvf cov.tar.gz cov-int

View File

@ -19,15 +19,18 @@ jobs:
container: container:
image: fedora:rawhide image: fedora:rawhide
steps: steps:
- uses: actions/checkout@v1
with:
submodules: true
- name: Install dependencies - name: Install dependencies
run: | run: |
dnf -y install git cmake ncurses-devel openssl-devel libsodium-devel readline-devel zlib-devel gcc-c++ clang dnf -y install git cmake ncurses-devel openssl-devel libsodium-devel readline-devel zlib-devel gcc-c++ clang
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
- name: Compile with ${{ matrix.cc }} - name: Compile with ${{ matrix.cc }}
run: | run: |
export CC=${{ matrix.cc }} export CC=${{ matrix.cc }}
./configure ./configure
make -C build make -C build

View File

@ -1,3 +1,4 @@
name: Linux
on: [push, pull_request] on: [push, pull_request]
permissions: permissions:
@ -5,14 +6,16 @@ permissions:
jobs: jobs:
build_and_test: build_and_test:
name: Build
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
submodules: true submodules: true
- name: Install dependencies - name: Install dependencies
run: sudo apt update && sudo apt-get -y install cmake gcc g++ ninja-build libncurses5-dev libreadline-dev libsodium-dev libssl-dev make zlib1g-dev liblz4-dev libnl-genl-3-dev run: sudo apt-get update && sudo apt-get -y install cmake gcc g++ ninja-build libncurses5-dev libreadline-dev libsodium-dev libssl-dev make zlib1g-dev liblz4-dev libnl-genl-3-dev
- name: Build - name: Build
run: | run: |

View File

@ -1,3 +1,4 @@
name: macOS
on: [push, pull_request, workflow_dispatch] on: [push, pull_request, workflow_dispatch]
permissions: permissions:
@ -7,22 +8,25 @@ jobs:
build_and_test: build_and_test:
strategy: strategy:
matrix: matrix:
os: [macos-13, macos-12, macos-11] os: [macos-14, macos-13, macos-12]
name: ${{ matrix.os }} name: ${{ matrix.os }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
with: with:
submodules: true submodules: true
- name: Install dependencies - name: Install dependencies
run: | run: |
brew install libsodium brew install libsodium
- name: Compile - name: Compile
run: | run: |
./configure ./configure
make -C build make -C build
- name: Test - name: Test
run: | run: |
otool -L build/vpnserver otool -L build/vpnserver
.ci/memory-leak-test.sh .ci/memory-leak-test.sh

View File

@ -1,4 +1,4 @@
name: alpine/musl name: Alpine/musl
on: [push, pull_request] on: [push, pull_request]
@ -7,17 +7,22 @@ permissions:
jobs: jobs:
musl: musl:
name: gcc name: gcc
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
image: alpine:latest image: alpine:latest
steps: steps:
- uses: actions/checkout@v1
with:
submodules: true
- name: Install dependencies - name: Install dependencies
run: apk add binutils --no-cache build-base readline-dev openssl-dev ncurses-dev git cmake zlib-dev libsodium-dev gnu-libiconv run: apk add binutils --no-cache build-base readline-dev openssl-dev ncurses-dev git cmake zlib-dev libsodium-dev gnu-libiconv
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
- name: Configure - name: Configure
run: ./configure run: ./configure
- name: make - name: make
run: make -C build run: make -C build

View File

@ -1,3 +1,4 @@
name: STB Check
on: [push, pull_request] on: [push, pull_request]
permissions: permissions:
@ -5,11 +6,15 @@ permissions:
jobs: jobs:
check: check:
name: Check
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v1
- name: Checkout
uses: actions/checkout@v4
with: with:
submodules: true submodules: true
- name: Check - name: Check
run: | run: |
cd developer_tools/stbchecker cd developer_tools/stbchecker

View File

@ -1,3 +1,4 @@
name: Windows
on: [push, pull_request] on: [push, pull_request]
permissions: permissions:
@ -14,19 +15,24 @@ jobs:
runs-on: windows-latest runs-on: windows-latest
name: ${{ matrix.platform.ARCHITECTURE }} name: ${{ matrix.platform.ARCHITECTURE }}
steps: steps:
- uses: actions/checkout@v4
- name: Checkout
uses: actions/checkout@v4
with: with:
submodules: true submodules: true
- name: Cache vcpkg - name: Cache vcpkg
uses: actions/cache@v4 uses: actions/cache@v4
with: with:
path: 'build/vcpkg_installed/' path: 'build/vcpkg_installed/'
key: vcpkg-${{ matrix.platform.VCPKG_TRIPLET }} key: vcpkg-${{ matrix.platform.VCPKG_TRIPLET }}
- name: Set version variables - name: Set version variables
run: | run: |
$v = python version.py $v = python version.py
echo "VERSION=$v" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append echo "VERSION=$v" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
shell: pwsh shell: pwsh
- name: Build - name: Build
env: env:
ARCHITECTURE: ${{ matrix.platform.ARCHITECTURE }} ARCHITECTURE: ${{ matrix.platform.ARCHITECTURE }}
@ -44,11 +50,14 @@ jobs:
vpnsetup /SFXMODE:vpnclient /SFXOUT:"installers\softether-vpnclient-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe" vpnsetup /SFXMODE:vpnclient /SFXOUT:"installers\softether-vpnclient-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
vpnsetup /SFXMODE:vpnserver_vpnbridge /SFXOUT:"installers\softether-vpnserver_vpnbridge-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe" vpnsetup /SFXMODE:vpnserver_vpnbridge /SFXOUT:"installers\softether-vpnserver_vpnbridge-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
shell: cmd shell: cmd
- name: Test - name: Test
shell: powershell shell: powershell
run: | run: |
. .ci/appveyor-vpntest.ps1 . .ci/appveyor-vpntest.ps1
- uses: actions/upload-artifact@v4
- name: Upload built binaries
uses: actions/upload-artifact@v4
with: with:
if-no-files-found: error if-no-files-found: error
name: Binaries-${{ matrix.platform.ARCHITECTURE }} name: Binaries-${{ matrix.platform.ARCHITECTURE }}
@ -56,7 +65,9 @@ jobs:
build/*.exe build/*.exe
build/*.pdb build/*.pdb
build/*.se2 build/*.se2
- uses: actions/upload-artifact@v4
- name: Upload installers
uses: actions/upload-artifact@v4
with: with:
if-no-files-found: error if-no-files-found: error
name: Installers-${{ matrix.platform.ARCHITECTURE }} name: Installers-${{ matrix.platform.ARCHITECTURE }}

View File

@ -14,16 +14,19 @@ permissions:
jobs: jobs:
release: release:
name: Release
runs-on: windows-latest runs-on: windows-latest
outputs: outputs:
upload_url: "${{ steps.create_release.outputs.upload_url }}" upload_url: "${{ steps.create_release.outputs.upload_url }}"
steps: steps:
- name: "Checkout repository" - name: "Checkout repository"
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: "Create GitHub release" - name: "Create GitHub release"
id: create_release id: create_release
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v2
build-windows: build-windows:
name: ${{ matrix.platform.ARCHITECTURE }} name: ${{ matrix.platform.ARCHITECTURE }}
runs-on: windows-latest runs-on: windows-latest
@ -35,15 +38,18 @@ jobs:
{ ARCHITECTURE: x64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe", VCPKG_TRIPLET: "x64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"} { ARCHITECTURE: x64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe", VCPKG_TRIPLET: "x64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"}
] ]
steps: steps:
- name: "Checkout repository" - name: "Checkout repository"
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
submodules: true submodules: true
- name: Cache vcpkg - name: Cache vcpkg
uses: actions/cache@v4 uses: actions/cache@v4
with: with:
path: 'build/vcpkg_installed/' path: 'build/vcpkg_installed/'
key: vcpkg-release-${{ matrix.platform.VCPKG_TRIPLET }} key: vcpkg-release-${{ matrix.platform.VCPKG_TRIPLET }}
- name: Set version variables - name: Set version variables
run: | run: |
$b=(Get-Content CMakeSettings.json | Out-String | ConvertFrom-Json).environments.BuildNumber $b=(Get-Content CMakeSettings.json | Out-String | ConvertFrom-Json).environments.BuildNumber
@ -51,6 +57,7 @@ jobs:
$v = python version.py $v = python version.py
echo "VERSION=$v" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append echo "VERSION=$v" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
shell: pwsh shell: pwsh
- name: Build - name: Build
env: env:
ARCHITECTURE: ${{ matrix.platform.ARCHITECTURE }} ARCHITECTURE: ${{ matrix.platform.ARCHITECTURE }}
@ -68,27 +75,19 @@ jobs:
vpnsetup /SFXMODE:vpnserver_vpnbridge /SFXOUT:"installers\softether-vpnserver_vpnbridge-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe" vpnsetup /SFXMODE:vpnserver_vpnbridge /SFXOUT:"installers\softether-vpnserver_vpnbridge-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
shell: cmd shell: cmd
- name: dir - name: Show directory items
run: | run: |
Get-ChildItem -Recurse build/installers Get-ChildItem -Recurse build/installers
shell: pwsh shell: pwsh
- name: "Upload softether-vpnclient" - name: "Upload softether-vpnclient"
uses: actions/upload-release-asset@v1 uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: "${{ github.token }}"
with: with:
upload_url: "${{ needs.release.outputs.upload_url }}" files: "build/installers/softether-vpnclient-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"
asset_path: "build/installers/softether-vpnclient-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe" name: "softether-vpnclient-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"
asset_name: "softether-vpnclient-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"
asset_content_type: "application/octet-stream"
- name: "Upload softether-vpnserver_vpnbridge"
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: "${{ github.token }}"
with:
upload_url: "${{ needs.release.outputs.upload_url }}"
asset_path: "build/installers/softether-vpnserver_vpnbridge-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"
asset_name: "softether-vpnserver_vpnbridge-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"
asset_content_type: "application/octet-stream"
- name: "Upload softether-vpnserver_vpnbridge"
uses: softprops/action-gh-release@v2
with:
files: "build/installers/softether-vpnserver_vpnbridge-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"
name: "softether-vpnserver_vpnbridge-${{ env.VERSION }}.${{ env.BUILD_NUMBER }}.${{ matrix.platform.ARCHITECTURE }}.exe"

View File

@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10)
set(BUILD_NUMBER CACHE STRING "The number of the current build.") set(BUILD_NUMBER CACHE STRING "The number of the current build.")
if ("${BUILD_NUMBER}" STREQUAL "") if ("${BUILD_NUMBER}" STREQUAL "")
set(BUILD_NUMBER "5184") set(BUILD_NUMBER "5185")
endif() endif()
if (BUILD_NUMBER LESS 5180) if (BUILD_NUMBER LESS 5180)

View File

@ -1,5 +1,5 @@
{ {
"environments": [ { "BuildNumber": "5184" } ], "environments": [ { "BuildNumber": "5185" } ],
"configurations": [ "configurations": [
{ {
"name": "x64-native", "name": "x64-native",

View File

@ -9349,62 +9349,35 @@ UINT ServeDhcpDiscoverEx(VH *v, UCHAR *mac, UINT request_ip, bool is_static_ip)
// check whether it is a request from the same MAC address // check whether it is a request from the same MAC address
if (Cmp(mac, d->MacAddress, 6) == 0) if (Cmp(mac, d->MacAddress, 6) == 0)
{ {
// Examine whether the specified IP address is within the range of assignment // Examine whether the specified IP address is within the range of static assignment
if (Endian32(v->DhcpIpStart) > Endian32(request_ip) || if (Endian32(v->DhcpIpStart) > Endian32(request_ip) ||
Endian32(request_ip) > Endian32(v->DhcpIpEnd)) Endian32(request_ip) > Endian32(v->DhcpIpEnd))
{ {
// Accept if within the range // Accept if within the range of static assignment
ret = request_ip; ret = request_ip;
} }
} }
else { else {
// Duplicated IPV4 address found. The DHCP server replies to DHCPREQUEST with DHCP NAK. // Duplicated IPV4 address found. The specified IP address is not available for use
char ipstr[MAX_HOST_NAME_LEN + 1] = { 0 }; char ipstr[MAX_HOST_NAME_LEN + 1] = { 0 };
char macstr[128] = { 0 }; char macstr[128] = { 0 };
IPToStr32(ipstr, sizeof(ipstr), request_ip); IPToStr32(ipstr, sizeof(ipstr), request_ip);
BinToStr(macstr, sizeof(macstr), d->MacAddress, 6); MacToStr(macstr, sizeof(macstr), d->MacAddress);
Debug("Virtual DHC Server: Duplicated IP address detected. Static IP: %s, Used by MAC:%s\n", ipstr, macstr); Debug("Virtual DHC Server: Duplicated IP address detected. Static IP: %s, with the MAC: %s\n", ipstr, macstr);
return ret;
} }
} }
else else
{ {
// Examine whether the specified IP address is within the range of assignment // Examine whether the specified IP address is within the range of static assignment
if (Endian32(v->DhcpIpStart) > Endian32(request_ip) || if (Endian32(v->DhcpIpStart) > Endian32(request_ip) ||
Endian32(request_ip) > Endian32(v->DhcpIpEnd)) Endian32(request_ip) > Endian32(v->DhcpIpEnd))
{ {
// Accept if within the range // Accept if within the range of static assignment
ret = request_ip; ret = request_ip;
} }
else else
{ {
// Propose an IP in the range since it's a Discover although It is out of range // The specified IP address is not available for use
}
}
if (ret == 0)
{
// If there is any entry with the same MAC address
// that are already registered, use it with priority
DHCP_LEASE *d = SearchDhcpLeaseByMac(v, mac);
if (d != NULL)
{
// Examine whether the found IP address is in the allocation region
if (Endian32(v->DhcpIpStart) > Endian32(d->IpAddress) ||
Endian32(d->IpAddress) > Endian32(v->DhcpIpEnd))
{
// Use the IP address if it's found within the range
ret = d->IpAddress;
}
}
}
if (ret == 0)
{
// For static IP, the requested IP address must NOT be within the range of the DHCP pool
if (Endian32(v->DhcpIpStart) > Endian32(request_ip) ||
Endian32(request_ip) > Endian32(v->DhcpIpEnd))
{
ret = request_ip;
} }
} }
@ -9595,6 +9568,11 @@ void VirtualDhcpServer(VH *v, PKT *p)
{ {
ip = ServeDhcpRequestEx(v, p->MacAddressSrc, opt->RequestedIp, ip_static); ip = ServeDhcpRequestEx(v, p->MacAddressSrc, opt->RequestedIp, ip_static);
} }
// If the IP address in user's note is changed, then reply to DHCP_REQUEST with DHCP_NAK
if (p->L3.IPv4Header->SrcIP && ip != p->L3.IPv4Header->SrcIP)
{
ip = 0;
}
} }
if (ip != 0 || opt->Opcode == DHCP_INFORM) if (ip != 0 || opt->Opcode == DHCP_INFORM)
@ -9607,6 +9585,14 @@ void VirtualDhcpServer(VH *v, PKT *p)
char client_mac[MAX_SIZE]; char client_mac[MAX_SIZE];
char client_ip[MAX_SIZE]; char client_ip[MAX_SIZE];
// If there is any entry with the same MAC address, then remove it
d = SearchDhcpLeaseByMac(v, p->MacAddressSrc);
if (d != NULL)
{
FreeDhcpLease(d);
Delete(v->DhcpLeaseList, d);
}
// Remove old records with the same IP address // Remove old records with the same IP address
d = SearchDhcpLeaseByIp(v, ip); d = SearchDhcpLeaseByIp(v, ip);
if (d != NULL) if (d != NULL)
@ -9765,7 +9751,7 @@ void VirtualDhcpServer(VH *v, PKT *p)
} }
else else
{ {
// Reply of DHCP_REQUEST must be either DHCP_ACK or DHCP_NAK. // Reply of DHCP_REQUEST must be either DHCP_ACK or DHCP_NAK
if (opt->Opcode == DHCP_REQUEST) if (opt->Opcode == DHCP_REQUEST)
{ {
// There is no IP address that can be provided // There is no IP address that can be provided

View File

@ -12288,6 +12288,11 @@ UINT SecureRecv(SOCK *sock, void *data, UINT size)
ret = SSL_peek(ssl, &c, sizeof(c)); ret = SSL_peek(ssl, &c, sizeof(c));
} }
Unlock(sock->ssl_lock); Unlock(sock->ssl_lock);
#if OPENSSL_VERSION_NUMBER < 0x30000000L
// 2021/09/10: After OpenSSL 3.x.x, both 0 and negative values might mean retryable.
// See: https://github.com/openssl/openssl/blob/435981cbadad2c58c35bacd30ca5d8b4c9bea72f/doc/man3/SSL_read.pod
// > Old documentation indicated a difference between 0 and -1, and that -1 was retryable.
// > You should instead call SSL_get_error() to find out if it's retryable.
if (ret == 0) if (ret == 0)
{ {
// The communication have been disconnected // The communication have been disconnected
@ -12295,7 +12300,8 @@ UINT SecureRecv(SOCK *sock, void *data, UINT size)
Debug("%s %u SecureRecv() Disconnect\n", __FILE__, __LINE__); Debug("%s %u SecureRecv() Disconnect\n", __FILE__, __LINE__);
return 0; return 0;
} }
if (ret < 0) #endif
if (ret <= 0)
{ {
// An error has occurred // An error has occurred
e = SSL_get_error(ssl, ret); e = SSL_get_error(ssl, ret);
@ -12303,14 +12309,16 @@ UINT SecureRecv(SOCK *sock, void *data, UINT size)
{ {
if (e == SSL_ERROR_SSL if (e == SSL_ERROR_SSL
#if OPENSSL_VERSION_NUMBER < 0x10100000L #if OPENSSL_VERSION_NUMBER < 0x10100000L
&& &&
sock->ssl->s3->send_alert[0] == SSL3_AL_FATAL && sock->ssl->s3->send_alert[0] == SSL3_AL_FATAL &&
sock->ssl->s3->send_alert[0] != sock->Ssl_Init_Async_SendAlert[0] && sock->ssl->s3->send_alert[0] != sock->Ssl_Init_Async_SendAlert[0] &&
sock->ssl->s3->send_alert[1] != sock->Ssl_Init_Async_SendAlert[1] sock->ssl->s3->send_alert[1] != sock->Ssl_Init_Async_SendAlert[1]
#endif #endif
) )
{ {
Debug("%s %u SSL Fatal Error on ASYNC socket !!!\n", __FILE__, __LINE__); UINT ssl_err_no = ERR_get_error();
Debug("%s %u SSL_ERROR_SSL on ASYNC socket !!! ssl_err_no = %u: '%s'\n", __FILE__, __LINE__, ssl_err_no, ERR_error_string(ssl_err_no, NULL));
Disconnect(sock); Disconnect(sock);
return 0; return 0;
} }
@ -12337,14 +12345,14 @@ UINT SecureRecv(SOCK *sock, void *data, UINT size)
} }
#endif // OS_UNIX #endif // OS_UNIX
// Run the time-out thread for SOLARIS // Run the time-out thread for SOLARIS
#ifdef UNIX_SOLARIS #ifdef UNIX_SOLARIS
ttparam = NewSocketTimeout(sock); ttparam = NewSocketTimeout(sock);
#endif // UNIX_SOLARIS #endif // UNIX_SOLARIS
ret = SSL_read(ssl, data, size); ret = SSL_read(ssl, data, size);
// Stop the timeout thread // Stop the timeout thread
#ifdef UNIX_SOLARIS #ifdef UNIX_SOLARIS
FreeSocketTimeout(ttparam); FreeSocketTimeout(ttparam);
#endif // UNIX_SOLARIS #endif // UNIX_SOLARIS
@ -12357,7 +12365,11 @@ UINT SecureRecv(SOCK *sock, void *data, UINT size)
} }
#endif // OS_UNIX #endif // OS_UNIX
if (ret < 0) #if OPENSSL_VERSION_NUMBER < 0x30000000L
if (ret < 0) // OpenSSL version < 3.0.0
#else
if (ret <= 0) // OpenSSL version >= 3.0.0
#endif
{ {
e = SSL_get_error(ssl, ret); e = SSL_get_error(ssl, ret);
} }
@ -12380,6 +12392,12 @@ UINT SecureRecv(SOCK *sock, void *data, UINT size)
return (UINT)ret; return (UINT)ret;
} }
#if OPENSSL_VERSION_NUMBER < 0x30000000L
// 2021/09/10: After OpenSSL 3.x.x, both 0 and negative values might mean retryable.
// See: https://github.com/openssl/openssl/blob/435981cbadad2c58c35bacd30ca5d8b4c9bea72f/doc/man3/SSL_read.pod
// > Old documentation indicated a difference between 0 and -1, and that -1 was retryable.
// > You should instead call SSL_get_error() to find out if it's retryable.
if (ret == 0) if (ret == 0)
{ {
// Disconnect the communication // Disconnect the communication
@ -12387,20 +12405,24 @@ UINT SecureRecv(SOCK *sock, void *data, UINT size)
//Debug("%s %u SecureRecv() Disconnect\n", __FILE__, __LINE__); //Debug("%s %u SecureRecv() Disconnect\n", __FILE__, __LINE__);
return 0; return 0;
} }
#endif
if (sock->AsyncMode) if (sock->AsyncMode)
{ {
if (e == SSL_ERROR_WANT_READ || e == SSL_ERROR_WANT_WRITE || e == SSL_ERROR_SSL) if (e == SSL_ERROR_WANT_READ || e == SSL_ERROR_WANT_WRITE || e == SSL_ERROR_SSL)
{ {
if (e == SSL_ERROR_SSL if (e == SSL_ERROR_SSL
#if OPENSSL_VERSION_NUMBER < 0x10100000L #if OPENSSL_VERSION_NUMBER < 0x10100000L
&& &&
sock->ssl->s3->send_alert[0] == SSL3_AL_FATAL && sock->ssl->s3->send_alert[0] == SSL3_AL_FATAL &&
sock->ssl->s3->send_alert[0] != sock->Ssl_Init_Async_SendAlert[0] && sock->ssl->s3->send_alert[0] != sock->Ssl_Init_Async_SendAlert[0] &&
sock->ssl->s3->send_alert[1] != sock->Ssl_Init_Async_SendAlert[1] sock->ssl->s3->send_alert[1] != sock->Ssl_Init_Async_SendAlert[1]
#endif #endif
) )
{ {
Debug("%s %u SSL Fatal Error on ASYNC socket !!!\n", __FILE__, __LINE__); UINT ssl_err_no = ERR_get_error();
Debug("%s %u SSL_ERROR_SSL on ASYNC socket !!! ssl_err_no = %u: '%s'\n", __FILE__, __LINE__, ssl_err_no, ERR_error_string(ssl_err_no, NULL));
Disconnect(sock); Disconnect(sock);
return 0; return 0;
} }
@ -12438,7 +12460,11 @@ UINT SecureSend(SOCK *sock, void *data, UINT size)
} }
ret = SSL_write(ssl, data, size); ret = SSL_write(ssl, data, size);
if (ret < 0) #if OPENSSL_VERSION_NUMBER < 0x30000000L
if (ret < 0) // OpenSSL version < 3.0.0
#else
if (ret <= 0) // OpenSSL version >= 3.0.0
#endif
{ {
e = SSL_get_error(ssl, ret); e = SSL_get_error(ssl, ret);
} }
@ -12460,6 +12486,8 @@ UINT SecureSend(SOCK *sock, void *data, UINT size)
sock->WriteBlocked = false; sock->WriteBlocked = false;
return (UINT)ret; return (UINT)ret;
} }
#if OPENSSL_VERSION_NUMBER < 0x30000000L
if (ret == 0) if (ret == 0)
{ {
// Disconnect // Disconnect
@ -12467,6 +12495,7 @@ UINT SecureSend(SOCK *sock, void *data, UINT size)
Disconnect(sock); Disconnect(sock);
return 0; return 0;
} }
#endif
if (sock->AsyncMode) if (sock->AsyncMode)
{ {

View File

@ -115,7 +115,7 @@ ERR_48 Не удалось подключиться к контроллер
ERR_49 Контроллеру кластера не удалось установить новую сессию в кластере. ERR_49 Контроллеру кластера не удалось установить новую сессию в кластере.
ERR_50 Не удается управлять Virtual Hub-ом сервера-члена кластера. ERR_50 Не удается управлять Virtual Hub-ом сервера-члена кластера.
ERR_51 Удаленное подключение запрещено, т.к. использован пустой пароль пользователя. Пустой пароль может быть разрешен только для соединений с локального хоста VPN-сервера (127.0.0.1). ERR_51 Удаленное подключение запрещено, т.к. использован пустой пароль пользователя. Пустой пароль может быть разрешен только для соединений с локального хоста VPN-сервера (127.0.0.1).
ERR_52 Не достаточно прав. ERR_52 Недостаточно прав.
ERR_53 Указанный порт прослушивания не найден. ERR_53 Указанный порт прослушивания не найден.
ERR_54 Указанный порт прослушивания уже существует. ERR_54 Указанный порт прослушивания уже существует.
ERR_55 Этот сервер не член кластера. ERR_55 Этот сервер не член кластера.
@ -2421,8 +2421,8 @@ STATIC17 Другие конфигурации:
R_NO_ROUTING Не вносить изменения в таблицу маршрутизации R_NO_ROUTING Не вносить изменения в таблицу маршрутизации
STATIC18 Если у вас нет опыта работы с сетью и безопасностью, то оставьте настройки в этом окне по умолчанию. STATIC18 Если у вас нет опыта работы с сетью и безопасностью, то оставьте настройки в этом окне по умолчанию.
STATIC19 Функции VoIP/QoS обрабатывают пакеты (например VoIP) с высоким приоритетом для более быстрой передачи. STATIC19 Функции VoIP/QoS обрабатывают пакеты (например VoIP) с высоким приоритетом для более быстрой передачи.
STATIC20 Source IP Address: STATIC20 IP адрес источника:
STATIC21 Source Port Number: STATIC21 Номер порта:
R_DISABLE_QOS Отключить функции VoIP / QoS R_DISABLE_QOS Отключить функции VoIP / QoS
IDOK &OK IDOK &OK
IDCANCEL Отмена IDCANCEL Отмена
@ -2524,7 +2524,7 @@ STATIC2 Имя Virtual &Hub:
STATIC3 &Пользователь: STATIC3 &Пользователь:
STATIC4 &Старый пароль: STATIC4 &Старый пароль:
STATIC5 &Новый пароль: STATIC5 &Новый пароль:
STATIC6 &Подтвердить новый пароль: STATIC6 &Подтвердить пароль:
IDOK &OK IDOK &OK
IDCANCEL Отмена IDCANCEL Отмена
S_STATIC Примечание: Вы не сможете изменить пароль пользователя, если выбран тип авторизации "RADIUS или авторизация в домене". S_STATIC Примечание: Вы не сможете изменить пароль пользователя, если выбран тип авторизации "RADIUS или авторизация в домене".
@ -2533,7 +2533,7 @@ S_STATIC Примечание: Вы не сможете изменить па
PREFIX D_SM_MAIN PREFIX D_SM_MAIN
CAPTION SoftEther VPN-сервер менеджер Developer Edition CAPTION SoftEther VPN-сервер менеджер Developer Edition
STATIC1 Настройки подключения для VPN-сервера: STATIC1 Настройки подключения для VPN-сервера:
STATIC2 Настройки подключения для VPN-сервера или VPN-моста. Чтобы подключиться к серверу дважды щелкните по его названию.\r\n Чтобы добавить новое подключение, нажмите "Новое подключение". STATIC2 Настройки подключения для VPN-сервера или VPN-моста. Чтобы подключиться к серверу дважды щелкните по его названию.\r\nЧтобы добавить новое подключение, нажмите "Новое подключение".
B_NEW_SETTING &Создать B_NEW_SETTING &Создать
B_EDIT_SETTING &Изменить B_EDIT_SETTING &Изменить
B_DELETE &Удалить B_DELETE &Удалить
@ -2558,9 +2558,9 @@ STATIC8 Прокси-сервер:
STATIC9 Вы можете подключиться к VPN-серверу через прокси-сервер. STATIC9 Вы можете подключиться к VPN-серверу через прокси-сервер.
STATIC10 Тип прокси: STATIC10 Тип прокси:
R_DIRECT_TCP &Прямое TCP/IP соединение (без прокси) R_DIRECT_TCP &Прямое TCP/IP соединение (без прокси)
R_HTTPS Подключиться через HTTP прокси-сервер R_HTTPS Через HTTP прокси-сервер
R_SOCKS Подключиться через SOCKS прокси-сервер R_SOCKS Через SOCKS прокси-сервер
R_SOCKS5 Подключиться через SOCKS5 прокси-сервер R_SOCKS5 Через SOCKS5 прокси-сервер
B_PROXY_CONFIG Настройки прокси-сервера B_PROXY_CONFIG Настройки прокси-сервера
STATIC11 Выберите режим администрирования и введите пароль STATIC11 Выберите режим администрирования и введите пароль
STATIC12 Вы можете подключиться к VPN-серверу, используя либо режим администратора сервера, либо режим Virtual Hub администратора. \r\n\r\nРежим администратора сервера позволяет вам управлять VPN-сервером и всеми Virtual Hub. \r\n\r\nРежим Virtual Hub администратора позволяет вам управлять только одним Virtual Hub, на который у вас есть права. STATIC12 Вы можете подключиться к VPN-серверу, используя либо режим администратора сервера, либо режим Virtual Hub администратора. \r\n\r\nРежим администратора сервера позволяет вам управлять VPN-сервером и всеми Virtual Hub. \r\n\r\nРежим Virtual Hub администратора позволяет вам управлять только одним Virtual Hub, на который у вас есть права.
@ -4111,7 +4111,7 @@ S_LATEST_STR Версия %S%s
PREFIX D_UPDATE_CONFIG PREFIX D_UPDATE_CONFIG
CAPTION Настройка уведомлений об обновлении CAPTION Настройка уведомлений об обновлении
S_INFO Периодически проверяет новые версии %s и показывает уведомление, когда будет выпущена новая версия.\r\n\r\nДля проверки обновлений будут использоваться HTTPS пакеты между этим компьютером и сервером обновлений SoftEther, расположенным в городе Цукуба, префектура Ибараки, Япония. Никакая личная информация отправляться не будет. S_INFO Периодически проверяет новые версии %s и показывает уведомление, когда будет выпущена новая версия.\r\n\r\nДля проверки обновлений будут использоваться HTTPS пакеты между этим компьютером и сервером обновлений SoftEther, расположенным в городе Цукуба, префектура Ибараки, Япония. Никакая личная информация отправляться не будет.
S_TITLE %s настройки уведомлений об обновлении S_TITLE %s настройки уведомлений об обновлении
S_ENABLE &Включить проверку обновлений S_ENABLE &Включить проверку обновлений
S_DISABLE &Отключить проверку обновлений S_DISABLE &Отключить проверку обновлений