[CP] [4_2_x]fix white_list match error
This commit is contained in:
parent
910036962d
commit
3f8c7213fb
59
deps/oblib/src/lib/net/ob_addr.cpp
vendored
59
deps/oblib/src/lib/net/ob_addr.cpp
vendored
@ -71,8 +71,13 @@ int ObAddr::convert_ipv4_addr(const char *ip)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
in_addr in;
|
||||
|
||||
if (!OB_ISNULL(ip)) {
|
||||
if (OB_ISNULL(ip)) {
|
||||
// null ptr
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
} else if('\0' == *ip) {
|
||||
// empty ip
|
||||
ip_.v4_ = 0;
|
||||
} else {
|
||||
MEMSET(&in, 0, sizeof (in));
|
||||
int rt = inet_pton(AF_INET, ip, &in);
|
||||
if (rt != 1) { // wrong ip or error
|
||||
@ -359,12 +364,16 @@ int ObAddr::to_yson(char *buf, const int64_t buf_len, int64_t &pos) const
|
||||
bool ObAddr::set_ip_addr(const char *ip, const int32_t port)
|
||||
{
|
||||
bool ret = false;
|
||||
// simply distinguish v4 & v6 with colon
|
||||
const char *colonp = strchr(ip, ':');
|
||||
if (nullptr != colonp) {
|
||||
ret = set_ipv6_addr(ip, port);
|
||||
if (OB_ISNULL(ip)) {
|
||||
// null ptr
|
||||
} else {
|
||||
ret = set_ipv4_addr(ip, port);
|
||||
// simply distinguish v4 & v6 with colon
|
||||
const char *colonp = strchr(ip, ':');
|
||||
if (nullptr != colonp) {
|
||||
ret = set_ipv6_addr(ip, port);
|
||||
} else {
|
||||
ret = set_ipv4_addr(ip, port);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -376,8 +385,8 @@ bool ObAddr::set_ipv6_addr(const char *ip, const int32_t port)
|
||||
ret = false;
|
||||
} else {
|
||||
version_ = IPV6;
|
||||
convert_ipv6_addr(ip);
|
||||
port_ = port;
|
||||
ret = (OB_SUCCESS == convert_ipv6_addr(ip));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -389,8 +398,8 @@ bool ObAddr::set_ipv4_addr(const char *ip, const int32_t port)
|
||||
ret = false;
|
||||
} else {
|
||||
version_ = IPV4;
|
||||
convert_ipv4_addr(ip);
|
||||
port_ = port;
|
||||
ret = (OB_SUCCESS == convert_ipv4_addr(ip));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -429,24 +438,28 @@ void ObAddr::set_ipv4_server_id(const int64_t ipv4_server_id)
|
||||
port_ = static_cast<int32_t>(0x00000000ffffffff & ipv4_server_id);
|
||||
}
|
||||
|
||||
ObAddr &ObAddr::as_mask(const int64_t mask_bits)
|
||||
bool ObAddr::as_mask(int64_t mask_bits, int32_t version)
|
||||
{
|
||||
int64_t mask = mask_bits > 128 ? 128 : mask_bits;
|
||||
int bytes = 0;
|
||||
|
||||
reset();
|
||||
if (version_ == IPV4) {
|
||||
ip_.v4_ = static_cast<uint32_t>(((static_cast<uint64_t>(1) << mask) - 1) << (32 - mask));
|
||||
} else {
|
||||
while (bytes < IPV6_LEN && mask >= 8) {
|
||||
int ret = false;
|
||||
const int64_t MAX_IPV4_MASK_BITS = 32;
|
||||
const int64_t MAX_IPV6_MASK_BITS = 128;
|
||||
version_ = static_cast<VER>(version);
|
||||
if (OB_UNLIKELY(mask_bits < 0)) {
|
||||
} else if (version_ == IPV4 && mask_bits <= MAX_IPV4_MASK_BITS) {
|
||||
ip_.v4_ = static_cast<uint32_t>(((static_cast<uint64_t>(1) << mask_bits) - 1) << (32 - mask_bits));
|
||||
ret = true;
|
||||
} else if (version_ == IPV6 && mask_bits <= MAX_IPV6_MASK_BITS) {
|
||||
int bytes = 0;
|
||||
while (bytes < IPV6_LEN && mask_bits >= 8) {
|
||||
ip_.v6_[bytes++] = 0xff;
|
||||
mask -= 8;
|
||||
mask_bits -= 8;
|
||||
}
|
||||
if (bytes < IPV6_LEN && mask > 0) {
|
||||
ip_.v6_[bytes] = static_cast<uint8_t>(((static_cast<uint8_t>(1) << mask) - 1) << (8 - mask));
|
||||
if (bytes < IPV6_LEN && mask_bits > 0) {
|
||||
ip_.v6_[bytes] = static_cast<uint8_t>(((static_cast<uint8_t>(1) << mask_bits) - 1) << (8 - mask_bits));
|
||||
}
|
||||
ret = true;
|
||||
}
|
||||
return (*this);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ObAddr &ObAddr::as_subnet(const ObAddr &mask)
|
||||
@ -523,7 +536,7 @@ uint64_t ObAddr::get_ipv6_low() const
|
||||
void ObAddr::set_max()
|
||||
{
|
||||
port_ = UINT32_MAX;
|
||||
memset(&ip_, 1, sizeof (ip_));
|
||||
memset(&ip_, 0xff, sizeof (ip_));
|
||||
}
|
||||
|
||||
void ObAddr::set_port(int32_t port)
|
||||
|
2
deps/oblib/src/lib/net/ob_addr.h
vendored
2
deps/oblib/src/lib/net/ob_addr.h
vendored
@ -100,7 +100,7 @@ public:
|
||||
|
||||
int parse_from_cstring(const char *ip_str);
|
||||
int parse_from_string(const ObString &str);
|
||||
ObAddr &as_mask(const int64_t mask_bits);
|
||||
bool as_mask(int64_t mask_bits, int32_t version = IPV4);
|
||||
ObAddr &as_subnet(const ObAddr &mask);
|
||||
|
||||
int64_t hash() const;
|
||||
|
122
deps/oblib/src/lib/net/ob_net_util.cpp
vendored
122
deps/oblib/src/lib/net/ob_net_util.cpp
vendored
@ -11,14 +11,16 @@
|
||||
*/
|
||||
|
||||
#define USING_LOG_PREFIX LIB
|
||||
#include "lib/oblog/ob_log.h"
|
||||
#include "lib/utility/ob_print_utils.h"
|
||||
#include "lib/net/ob_net_util.h"
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "lib/charset/ob_charset.h"
|
||||
#include "lib/oblog/ob_log.h"
|
||||
#include "lib/utility/ob_print_utils.h"
|
||||
#include "lib/net/ob_net_util.h"
|
||||
|
||||
using namespace oceanbase::common;
|
||||
|
||||
namespace oceanbase {
|
||||
@ -219,5 +221,119 @@ int ObNetUtil::get_ifname_by_addr(const char *local_ip, char *if_name, uint64_t
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObNetUtil::get_int_value(const ObString &str, int64_t &value)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (OB_UNLIKELY(str.empty())) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("str is empty", K(str), K(ret));
|
||||
} else {
|
||||
static const int32_t MAX_INT64_STORE_LEN = 31;
|
||||
char int_buf[MAX_INT64_STORE_LEN + 1];
|
||||
int64_t len = std::min(str.length(), MAX_INT64_STORE_LEN);
|
||||
MEMCPY(int_buf, str.ptr(), len);
|
||||
int_buf[len] = '\0';
|
||||
char *end_ptr = NULL;
|
||||
value = strtoll(int_buf, &end_ptr, 10);
|
||||
if (('\0' != *int_buf) && ('\0' == *end_ptr)) {
|
||||
// succ, do nothing
|
||||
} else {
|
||||
ret = OB_INVALID_DATA;
|
||||
LOG_WARN("invalid int value", K(value), K(str), K(ret));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool ObNetUtil::calc_ip(const ObString &host_ip, ObAddr &addr)
|
||||
{
|
||||
return addr.set_ip_addr(host_ip, FAKE_PORT);
|
||||
}
|
||||
|
||||
bool ObNetUtil::calc_ip_mask(const ObString &host_name, ObAddr &host, ObAddr &mask)
|
||||
{
|
||||
bool ret_bool = false;
|
||||
int64_t ip_mask_int64 = 0;
|
||||
ObString host_ip_mask = host_name;
|
||||
ObString ip = host_ip_mask.split_on('/');
|
||||
if (OB_UNLIKELY(host_ip_mask.empty())) {
|
||||
} else if (calc_ip(ip, host)) {
|
||||
if (host_ip_mask.find('.') || host_ip_mask.find(':')) {
|
||||
ret_bool = mask.set_ip_addr(host_ip_mask, FAKE_PORT);
|
||||
} else {
|
||||
if (OB_SUCCESS != (get_int_value(host_ip_mask, ip_mask_int64))) {
|
||||
// break
|
||||
} else if (mask.as_mask(ip_mask_int64, host.get_version())) {
|
||||
ret_bool = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret_bool;
|
||||
}
|
||||
|
||||
bool ObNetUtil::is_ip_match(const ObString &client_ip, ObString host_name)
|
||||
{
|
||||
bool ret_bool = false;
|
||||
ObAddr client;
|
||||
ObAddr host;
|
||||
if (OB_UNLIKELY(host_name.empty()) || OB_UNLIKELY(client_ip.empty())) {
|
||||
// not match
|
||||
} else if (host_name.find('/')) {
|
||||
ObAddr mask;
|
||||
if (calc_ip(client_ip, client) && calc_ip_mask(host_name, host, mask) &&
|
||||
client.get_version() == host.get_version()) {
|
||||
ret_bool = (client.as_subnet(mask) == host.as_subnet(mask));
|
||||
}
|
||||
} else {
|
||||
if (calc_ip(host_name, host) && calc_ip(client_ip, client)) {
|
||||
ret_bool = (client == host);
|
||||
}
|
||||
}
|
||||
return ret_bool;
|
||||
}
|
||||
|
||||
bool ObNetUtil::is_wild_match(const ObString &client_ip, const ObString &host_name)
|
||||
{
|
||||
return ObCharset::wildcmp(CS_TYPE_UTF8MB4_BIN, client_ip, host_name, 0, '_', '%');
|
||||
}
|
||||
|
||||
bool ObNetUtil::is_match(const ObString &client_ip, const ObString &host_name)
|
||||
{
|
||||
return ObNetUtil::is_wild_match(client_ip, host_name) || ObNetUtil::is_ip_match(client_ip, host_name);
|
||||
}
|
||||
|
||||
bool ObNetUtil::is_in_white_list(const ObString &client_ip, ObString &orig_ip_white_list)
|
||||
{
|
||||
bool ret_bool = false;
|
||||
ObAddr client;
|
||||
if (orig_ip_white_list.empty() || client_ip.empty()) {
|
||||
LOG_WARN_RET(OB_SUCCESS, "ip_white_list or client_ip is emtpy, denied any client", K(client_ip), K(orig_ip_white_list));
|
||||
} else if (calc_ip(client_ip, client)) {
|
||||
const char COMMA = ',';
|
||||
ObString ip_white_list = orig_ip_white_list;
|
||||
while (NULL != ip_white_list.find(COMMA) && !ret_bool) {
|
||||
ObString invited_ip = ip_white_list.split_on(COMMA).trim();
|
||||
if (!invited_ip.empty()) {
|
||||
if (ObNetUtil::is_match(client_ip, invited_ip)) {
|
||||
ret_bool = true;
|
||||
}
|
||||
LOG_TRACE("match result", K(ret_bool), K(client_ip), K(invited_ip));
|
||||
}
|
||||
}
|
||||
if (!ret_bool) {
|
||||
ip_white_list = ip_white_list.trim();
|
||||
if (ip_white_list.empty()) {
|
||||
LOG_WARN_RET(OB_SUCCESS, "ip_white_list is emtpy, denied any client", K(client_ip), K(orig_ip_white_list));
|
||||
} else if (!ObNetUtil::is_match(client_ip, ip_white_list)) {
|
||||
LOG_WARN_RET(OB_SUCCESS, "client ip is not in ip_white_list", K(client_ip), K(orig_ip_white_list));
|
||||
} else {
|
||||
ret_bool = true;
|
||||
LOG_TRACE("match result", K(ret_bool), K(client_ip), K(ip_white_list));
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret_bool;
|
||||
}
|
||||
|
||||
} // namespace obsys
|
||||
} // namespace oceanbase
|
||||
|
13
deps/oblib/src/lib/net/ob_net_util.h
vendored
13
deps/oblib/src/lib/net/ob_net_util.h
vendored
@ -30,6 +30,9 @@
|
||||
#include <linux/unistd.h>
|
||||
#include <string>
|
||||
|
||||
#include "lib/string/ob_string.h"
|
||||
#include "lib/net/ob_addr.h"
|
||||
|
||||
namespace oceanbase
|
||||
{
|
||||
namespace obsys
|
||||
@ -37,6 +40,13 @@ namespace obsys
|
||||
|
||||
class ObNetUtil
|
||||
{
|
||||
private:
|
||||
static const uint32_t FAKE_PORT = 0;
|
||||
static int get_int_value(const common::ObString &str, int64_t &value);
|
||||
static bool calc_ip(const common::ObString &host_ip, common::ObAddr &addr);
|
||||
static bool calc_ip_mask(const common::ObString &host_name, common::ObAddr &host, common::ObAddr &mask);
|
||||
static bool is_ip_match(const common::ObString &client_ip, common::ObString host_name);
|
||||
static bool is_wild_match(const common::ObString &client_ip, const common::ObString &host_name);
|
||||
public:
|
||||
static int get_local_addr_ipv6(const char *dev_name, char *ipv6, int len, bool *is_linklocal = nullptr);
|
||||
static uint32_t get_local_addr_ipv4(const char *dev_name);
|
||||
@ -45,6 +55,9 @@ public:
|
||||
// get ipv4 by hostname, no need free the returned value
|
||||
static char *get_addr_by_hostname(const char *hostname);
|
||||
static int get_ifname_by_addr(const char *local_ip, char *if_name, uint64_t if_name_len);
|
||||
|
||||
static bool is_match(const common::ObString &client_ip, const common::ObString &host_name);
|
||||
static bool is_in_white_list(const common::ObString &client_ip, common::ObString &orig_ip_white_list);
|
||||
};
|
||||
} // namespace obsys
|
||||
} // namespace oceanbase
|
||||
|
1
deps/oblib/unittest/lib/CMakeLists.txt
vendored
1
deps/oblib/unittest/lib/CMakeLists.txt
vendored
@ -70,6 +70,7 @@ oblib_addtest(lock/test_qsync_lock.cpp)
|
||||
oblib_addtest(metrics/test_ema_v2.cpp)
|
||||
oblib_addtest(metrics/test_ob_accumulator.cpp)
|
||||
oblib_addtest(net/test_ob_addr.cpp)
|
||||
oblib_addtest(net/test_ob_net_util.cpp)
|
||||
#oblib_addtest(number/test_number_v2.cpp)
|
||||
#oblib_addtest(oblog/test_base_log_buffer.cpp)
|
||||
oblib_addtest(oblog/test_base_log_writer.cpp)
|
||||
|
2
deps/oblib/unittest/lib/net/test_ob_addr.cpp
vendored
2
deps/oblib/unittest/lib/net/test_ob_addr.cpp
vendored
@ -34,7 +34,7 @@ TEST(OB_ADDR, TEST1)
|
||||
EXPECT_EQ(addr.get_ipv4(), 1U << 24);
|
||||
EXPECT_EQ(addr.get_port(), 1234);
|
||||
|
||||
EXPECT_EQ(addr.parse_from_cstring("1.0.0.1234:1234"), OB_SUCCESS);
|
||||
EXPECT_EQ(addr.parse_from_cstring("1.0.0.1234:1234"), OB_INVALID_ARGUMENT);
|
||||
EXPECT_FALSE(addr.is_valid());
|
||||
|
||||
ObAddr addr2;
|
||||
|
318
deps/oblib/unittest/lib/net/test_ob_net_util.cpp
vendored
Normal file
318
deps/oblib/unittest/lib/net/test_ob_net_util.cpp
vendored
Normal file
@ -0,0 +1,318 @@
|
||||
/**
|
||||
* Copyright (c) 2021 OceanBase
|
||||
* OceanBase CE is licensed under Mulan PubL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PubL v2.
|
||||
* You may obtain a copy of Mulan PubL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPubL-2.0
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PubL v2 for more details.
|
||||
*/
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#define private public
|
||||
#include "lib/net/ob_net_util.h"
|
||||
|
||||
namespace oceanbase
|
||||
{
|
||||
namespace obsys
|
||||
{
|
||||
|
||||
TEST(TestWhiteList, ObNetUtil)
|
||||
{
|
||||
ObString host_name_0("100.104.127.0/26");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("100.104.127.44", host_name_0));
|
||||
|
||||
ObString host_name("192.168.0.0/16");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.1.1", host_name));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.1.0", host_name));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.1.255", host_name));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.-1", host_name));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.-1.1", host_name));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.256.1", host_name));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.256", host_name));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.169.1.1", host_name));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.0.1.1", host_name));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.1", host_name));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("hello", host_name));
|
||||
|
||||
ObString host_name_ipv6("fe80:90fa:2017:ff00::/56");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("fe80:90fa:2017:ff03::0a:02", host_name_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:02", host_name_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("fe80:90fa:2017:fe00:00e8:0074:0a:02", host_name_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match(":90fa:2017:fe00:00e8:0074:0a:02", host_name_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("fe80:90fa:2017:ff:", host_name_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("::", host_name_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("::1", host_name_ipv6));
|
||||
|
||||
ObString host_name2("0.0.0.0/0");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.1.1", host_name2));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.1.0", host_name2));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.1.255", host_name2));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.-1", host_name2));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.-1.1", host_name2));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.256.1", host_name2));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.256", host_name2));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.169.1.1", host_name2));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.0.1.1", host_name2));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.1", host_name2));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("hello", host_name2));
|
||||
|
||||
ObString host_name2_ipv6("::/0");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("fe80:90fa:2017:ff03::0a:02", host_name2_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("fe80:90fa:2017:ff03::", host_name2_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("::", host_name2_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("::1", host_name2_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.1", host_name2_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match(":2017:ff03::", host_name2_ipv6));
|
||||
|
||||
ObString host_name3("192.168.1.1/32");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.1.1", host_name3));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.0", host_name3));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.255", host_name3));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.-1", host_name3));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.-1.1", host_name3));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.256.1", host_name3));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.256", host_name3));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.169.1.1", host_name3));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.0.1.1", host_name3));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.1", host_name3));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("hello", host_name3));
|
||||
|
||||
ObString host_name4("192.168.11.0/255.255.255.0");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.11.1", host_name4));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.11.0", host_name4));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.11.255", host_name4));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.-1", host_name4));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.256", host_name4));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.1", host_name4));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.10.1", host_name4));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.0.1.1", host_name4));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.1", host_name4));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("hello", host_name4));
|
||||
|
||||
ObString host_name4_ipv6("fe80:90fa:2017:ff80::/ffff:ffff:ffff:ffff:0:0:0:0");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("fe80:90fa:2017:ff80:00e8:ff74:0a:02", host_name4_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("fe80:90fa:2017:ff80::", host_name4_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("fe80:90fa:2017:ff80:e8::0a:02", host_name4_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:02", host_name4_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("fe80:90fa:2017:ff00::", host_name4_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("::", host_name4_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("::1", host_name4_ipv6));
|
||||
|
||||
ObString host_name5("0.0.0.0/0.0.0.0");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.11.1", host_name5));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.11.0", host_name5));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.11.255", host_name5));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.-1", host_name5));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.256", host_name5));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.1.1", host_name5));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.10.1", host_name5));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.0.1.1", host_name5));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.1", host_name5));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("hello", host_name5));
|
||||
|
||||
ObString host_name5_ipv6("::/::");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:02", host_name5_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("::", host_name5_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("::1", host_name5_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("ff:ff:ff:ff:ff:ff:ff:ff", host_name5_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("90fa:2017:ff00:00e8:0074:0a:02", host_name5_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:-1", host_name5_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:g1", host_name5_ipv6));
|
||||
|
||||
ObString host_name6("192.168.11.1/255.255.255.255");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.11.1", host_name6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.0", host_name6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.255", host_name6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.-1", host_name6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.256", host_name6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.1", host_name6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.10.1", host_name6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.0.1.1", host_name6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.1", host_name6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("hello", host_name6));
|
||||
|
||||
ObString host_name7("192.168.11.1/33");
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.1", host_name7));
|
||||
ObString host_name8("192.168.11.1/-1");
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.1", host_name8));
|
||||
ObString host_name9("192.168.11.1/");
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.1", host_name9));
|
||||
|
||||
ObString host_name7_ipv6("fe80:90fa:2017:ff00::/129");
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("fe80:90fa:2017:ff03::0a:02", host_name7_ipv6));
|
||||
ObString host_name8_ipv6("fe80:90fa:2017:ff00::/-1");
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("fe80:90fa:2017:ff03::0a:02", host_name8_ipv6));
|
||||
ObString host_name9_ipv6("fe80:90fa:2017:ff00::/");
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("fe80:90fa:2017:ff03::0a:02", host_name9_ipv6));
|
||||
|
||||
ObString host_name10("192.168.11.1");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("192.168.11.1", host_name10));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.0", host_name10));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.255", host_name10));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.-1", host_name10));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.11.256", host_name10));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.1.1", host_name10));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.168.10.1", host_name10));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.0.1.1", host_name10));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("192.1", host_name10));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("hello", host_name10));
|
||||
|
||||
ObString host_name10_ipv6("2017::a:2");
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("2017:0:0:0:0:0:a:2", host_name10_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_ip_match("2017::0a:02", host_name10_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("2017:2::0a:02", host_name10_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("::", host_name10_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_ip_match("::1", host_name10_ipv6));
|
||||
|
||||
ObString host_name11("192.168.11.%");
|
||||
EXPECT_EQ(true, ObNetUtil::is_wild_match("192.168.11.0", host_name11));
|
||||
EXPECT_EQ(true, ObNetUtil::is_wild_match("192.168.11.255", host_name11));
|
||||
EXPECT_EQ(true, ObNetUtil::is_wild_match("192.168.11.-1", host_name11));
|
||||
EXPECT_EQ(true, ObNetUtil::is_wild_match("192.168.11.256", host_name11));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("192.168.1.1", host_name11));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("192.168.10.1", host_name11));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("192.0.1.1", host_name11));
|
||||
|
||||
ObString host_name11_ipv6("fe80:fe20:ffff:%");
|
||||
EXPECT_EQ(true, ObNetUtil::is_wild_match("fe80:fe20:ffff:2014:0506:02:56:80", host_name11_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_wild_match("fe80:fe20:ffff::", host_name11_ipv6));
|
||||
EXPECT_EQ(true, ObNetUtil::is_wild_match("fe80:fe20:ffff:2019::", host_name11_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("fe80:fe20:fffe::", host_name11_ipv6));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("fe80:fe20:8fff::2084:92:23:78:ff30", host_name11_ipv6));
|
||||
|
||||
ObString host_name12("192.168.11._");
|
||||
EXPECT_EQ(true, ObNetUtil::is_wild_match("192.168.11.0", host_name12));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("192.168.11.255", host_name12));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("192.168.11.-1", host_name12));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("192.168.11.256", host_name12));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("192.168.1.1", host_name12));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("192.168.10.1", host_name12));
|
||||
EXPECT_EQ(false, ObNetUtil::is_wild_match("192.0.1.1", host_name12));
|
||||
|
||||
int64_t value = 0;
|
||||
EXPECT_EQ(OB_SUCCESS, ObNetUtil::get_int_value("12", value));
|
||||
EXPECT_EQ(12, value);
|
||||
EXPECT_EQ(OB_SUCCESS, ObNetUtil::get_int_value("-12", value));
|
||||
EXPECT_EQ(-12, value);
|
||||
EXPECT_EQ(OB_SUCCESS, ObNetUtil::get_int_value("0", value));
|
||||
EXPECT_EQ(0, value);
|
||||
EXPECT_EQ(OB_SUCCESS, ObNetUtil::get_int_value("65536", value));
|
||||
EXPECT_EQ(65536, value);
|
||||
EXPECT_EQ(OB_SUCCESS, ObNetUtil::get_int_value("-65536", value));
|
||||
EXPECT_EQ(-65536, value);
|
||||
EXPECT_EQ(OB_INVALID_DATA, ObNetUtil::get_int_value("12sds", value));
|
||||
EXPECT_EQ(OB_INVALID_DATA, ObNetUtil::get_int_value("12 sddf", value));
|
||||
EXPECT_EQ(OB_INVALID_DATA, ObNetUtil::get_int_value("++12", value));
|
||||
EXPECT_EQ(OB_INVALID_DATA, ObNetUtil::get_int_value("--12", value));
|
||||
|
||||
ObString ip_white_list1("");
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("192.0.1.1", ip_white_list1));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("%", ip_white_list1));
|
||||
|
||||
ObString ip_white_list2;
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("192.0.1.1", ip_white_list2));
|
||||
|
||||
ObString ip_white_list3("%");
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("192.0.1.1", ip_white_list3));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("192.0.1.-1", ip_white_list3));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("hello", ip_white_list3));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("", ip_white_list3));
|
||||
|
||||
ObString ip_white_list4("192.0.1.0/24");
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("192.0.1.1", ip_white_list4));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("192.0.1.-1", ip_white_list4));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("hello", ip_white_list4));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("", ip_white_list4));
|
||||
|
||||
ObString ip_white_list5("192.0.1.0/24, %");
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("192.0.1.1", ip_white_list5));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("192.0.1.-1", ip_white_list5));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("hello", ip_white_list5));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("", ip_white_list5));
|
||||
|
||||
ObString ip_white_list6("192.0.1.0/24,%");
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("192.0.1.1", ip_white_list6));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("192.0.1.-1", ip_white_list6));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("hello", ip_white_list6));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("", ip_white_list6));
|
||||
|
||||
ObString ip_white_list7(",192.0.1,192.0.1.0/24");
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("192.0.1.1", ip_white_list7));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("192.0.1.-1", ip_white_list7));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("hello", ip_white_list7));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("", ip_white_list7));
|
||||
|
||||
ObString ip_white_list8("10.125.224.0/255.255.252.0");
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("10.125.224.15", ip_white_list8));
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("10.125.224.5", ip_white_list8));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("192.0.1.-1", ip_white_list8));
|
||||
|
||||
ObString ip_white_list9("10.125.224.0/22");
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("10.125.224.15", ip_white_list9));
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("10.125.224.5", ip_white_list9));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("192.0.1.-1", ip_white_list9));
|
||||
|
||||
ObString ip_white_list10("255.255.224.0/22");
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.15", ip_white_list10));
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.5", ip_white_list10));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("255.255.255.15", ip_white_list10));
|
||||
|
||||
ObString ip_white_list11("255.255.224.14,,255.255.224.15");
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("255.255.224.13", ip_white_list11));
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.14", ip_white_list11));
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.15", ip_white_list11));
|
||||
|
||||
ObString ip_white_list12("255.255.224.15,255.255.224.14,255.255.224.13,255.255.224.12,255.255.224.11");
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.11", ip_white_list12));
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.11", ip_white_list12));
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.12", ip_white_list12));
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.13", ip_white_list12));
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.14", ip_white_list12));
|
||||
ASSERT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.15", ip_white_list12));
|
||||
ASSERT_EQ(false, ObNetUtil::is_in_white_list("255.255.224.16", ip_white_list12));
|
||||
|
||||
ObString ip_white_list13(" 255.255.224.15, 255.255.224.14, 255.255.224.13, 255.255.224.12");
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.15", ip_white_list13));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.14", ip_white_list13));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.13", ip_white_list13));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.12", ip_white_list13));
|
||||
|
||||
ObString ip_white_list14(" 255.255.224.15/32 , 255.255.224.14/32 , 255.255.224.13/32 , 255.255.224.12/32");
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.15", ip_white_list14));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.14", ip_white_list14));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.13", ip_white_list14));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("255.255.224.12", ip_white_list14));
|
||||
|
||||
ObString ip_white_list15("10.244.32.%,10.250.37.18,192.168.11._");
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("10.250.37.18", ip_white_list15));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("192.168.11.1", ip_white_list15));
|
||||
EXPECT_EQ(false, ObNetUtil::is_in_white_list("192.168.12.1", ip_white_list15));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("10.244.32.222", ip_white_list15));
|
||||
EXPECT_EQ(false, ObNetUtil::is_in_white_list("10.250.49.24", ip_white_list15));
|
||||
EXPECT_EQ(false, ObNetUtil::is_in_white_list("10.250.49.251", ip_white_list15));
|
||||
|
||||
ObString ip_white_list_mixed("10.244.32.%,10.250.37.18, 192.0.1.0/24, 192.168.11._, fe80:90fa:2017:ff00::/56, "
|
||||
"fe80:90fa:2017:ee00:00e8:0074:0a:02");
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("10.250.37.18", ip_white_list_mixed));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("10.244.32.222", ip_white_list_mixed));
|
||||
EXPECT_EQ(false, ObNetUtil::is_in_white_list("10.250.49.24", ip_white_list_mixed));
|
||||
EXPECT_EQ(false, ObNetUtil::is_in_white_list("10.250.49.251", ip_white_list_mixed));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("fe80:90fa:2017:ff00:00e8:0074:0a:02", ip_white_list_mixed));
|
||||
EXPECT_EQ(false, ObNetUtil::is_in_white_list("fe80:90ee:2017:ff00:00e8:0074:0a:02", ip_white_list_mixed));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("fe80:90fa:2017:ee00:00e8:0074:0a:02", ip_white_list_mixed));
|
||||
EXPECT_EQ(false, ObNetUtil::is_in_white_list("fe80:90fa:2017:ee00:00e8:0074:0a:03", ip_white_list_mixed));
|
||||
EXPECT_EQ(true, ObNetUtil::is_in_white_list("192.168.11.1", ip_white_list_mixed));
|
||||
}
|
||||
} // namespace obsys
|
||||
} // end of namespace oceanbase
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
oceanbase::common::ObLogger::get_logger().set_log_level("DEBUG");
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
@ -16,6 +16,7 @@
|
||||
#include "util/easy_mod_stat.h"
|
||||
#include "observer/mysql/obmp_connect.h"
|
||||
#include "lib/mysqlclient/ob_mysql_result.h"
|
||||
#include "lib/net/ob_net_util.h"
|
||||
#include "lib/string/ob_sql_string.h"
|
||||
#include "lib/oblog/ob_log.h"
|
||||
#include "lib/stat/ob_session_stat.h"
|
||||
@ -1089,8 +1090,7 @@ int ObMPConnect::update_login_stat_mysql(const uint64_t tenant_id,
|
||||
if (OB_ISNULL(user_info)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("user info is null", K(tenant_id), K(user_name_), K(ret));
|
||||
} else if (!ObHostnameStuct::is_wild_match(client_ip_, user_info->get_host_name_str())
|
||||
&& !ObHostnameStuct::is_ip_match(client_ip_, user_info->get_host_name_str())) {
|
||||
} else if (!obsys::ObNetUtil::is_match(client_ip_, user_info->get_host_name_str())) {
|
||||
LOG_INFO("account not matched, try next", KPC(user_info), K(client_ip_));
|
||||
} else if (OB_FAIL(update_login_stat_in_trans_mysql(tenant_id, *user_info, is_login_succ,
|
||||
is_locked_tmp))) {
|
||||
@ -2026,7 +2026,7 @@ int ObMPConnect::verify_ip_white_list(const uint64_t tenant_id) const
|
||||
LOG_WARN("fail to get_sysvar_schema", K(ret));
|
||||
} else {
|
||||
ObString var_value = sysvar->get_value();
|
||||
if (!ObHostnameStuct::is_in_white_list(client_ip_, var_value)) {
|
||||
if (!obsys::ObNetUtil::is_in_white_list(client_ip_, var_value)) {
|
||||
ret = OB_ERR_NO_PRIVILEGE;
|
||||
LOG_WARN("client is not invited into this tenant", K(ret));
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "lib/container/ob_array_iterator.h"
|
||||
#include "lib/container/ob_se_array.h"
|
||||
#include "lib/container/ob_se_array_iterator.h"
|
||||
#include "lib/net/ob_net_util.h"
|
||||
#include "share/schema/ob_multi_version_schema_service.h"
|
||||
#include "share/schema/ob_schema_struct.h"
|
||||
#include "share/schema/ob_table_schema.h"
|
||||
@ -2769,8 +2770,7 @@ int ObSchemaGetterGuard::check_user_access(
|
||||
LOG_INFO("password error", "tenant_name", login_info.tenant_name_,
|
||||
"user_name", login_info.user_name_,
|
||||
"client_ip_", login_info.client_ip_, KR(ret));
|
||||
} else if (!ObHostnameStuct::is_wild_match(login_info.client_ip_, user_info->get_host_name_str())
|
||||
&& !ObHostnameStuct::is_ip_match(login_info.client_ip_, user_info->get_host_name_str())) {
|
||||
} else if (!obsys::ObNetUtil::is_match(login_info.client_ip_, user_info->get_host_name_str())) {
|
||||
LOG_TRACE("account not matched, try next", KPC(user_info), K(login_info));
|
||||
} else {
|
||||
matched_user_info = user_info;
|
||||
|
@ -10965,122 +10965,6 @@ OB_SERIALIZE_MEMBER(ObRecycleObject, tenant_id_, database_id_, table_id_,
|
||||
tablegroup_id_, object_name_, original_name_, type_, tablegroup_name_, database_name_);
|
||||
|
||||
//------end of funcs of outlineinfo-----//
|
||||
int ObHostnameStuct::get_int_value(const common::ObString &str, int64_t &value)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (OB_UNLIKELY(str.empty())) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("str is empty", K(str), K(ret));
|
||||
} else {
|
||||
static const int32_t MAX_INT64_STORE_LEN = 31;
|
||||
char int_buf[MAX_INT64_STORE_LEN + 1];
|
||||
int64_t len = std::min(str.length(), MAX_INT64_STORE_LEN);
|
||||
MEMCPY(int_buf, str.ptr(), len);
|
||||
int_buf[len] = '\0';
|
||||
char *end_ptr = NULL;
|
||||
value = strtoll(int_buf, &end_ptr, 10);
|
||||
if (('\0' != *int_buf ) && ('\0' == *end_ptr)) {
|
||||
// succ, do nothing
|
||||
} else {
|
||||
ret = OB_INVALID_DATA;
|
||||
LOG_WARN("invalid int value", K(value), K(str), K(ret));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool ObHostnameStuct::calc_ip(const common::ObString &host_ip, common::ObAddr &addr)
|
||||
{
|
||||
return addr.set_ip_addr(host_ip, FAKE_PORT);
|
||||
}
|
||||
|
||||
bool ObHostnameStuct::calc_ip_mask(const common::ObString &host_ip_mask, common::ObAddr &mask)
|
||||
{
|
||||
bool ret_bool = false;
|
||||
int64_t ip_mask_int64 = 0;
|
||||
if (OB_UNLIKELY(host_ip_mask.empty())) {
|
||||
} else {
|
||||
if (host_ip_mask.find('.') || host_ip_mask.find(':')) {
|
||||
ret_bool = mask.set_ip_addr(host_ip_mask, FAKE_PORT);
|
||||
} else {
|
||||
if (OB_SUCCESS != (get_int_value(host_ip_mask, ip_mask_int64))) {
|
||||
// break
|
||||
} else if (OB_UNLIKELY(ip_mask_int64 > MAX_IP_BITS) || OB_UNLIKELY(ip_mask_int64 < 0)) {
|
||||
// break
|
||||
} else {
|
||||
mask.as_mask(ip_mask_int64);
|
||||
ret_bool = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret_bool;
|
||||
}
|
||||
|
||||
bool ObHostnameStuct::is_ip_match(const common::ObString &client_ip, common::ObString host_name)
|
||||
{
|
||||
bool ret_bool = false;
|
||||
bool is_ip_valied = false;
|
||||
common::ObAddr client, host, mask;
|
||||
if (OB_UNLIKELY(host_name.empty()) || OB_UNLIKELY(client_ip.empty())) {
|
||||
//not match
|
||||
} else if (host_name.find('/')) {
|
||||
common::ObString ip = host_name.split_on('/');
|
||||
if (calc_ip(ip, host)
|
||||
&& calc_ip(client_ip, client)
|
||||
&& calc_ip_mask(host_name, mask)) {
|
||||
is_ip_valied = true;
|
||||
}
|
||||
} else {
|
||||
mask.set_max();
|
||||
if (calc_ip(host_name, host)
|
||||
&& calc_ip(client_ip, client)) {
|
||||
is_ip_valied = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_ip_valied) {
|
||||
ret_bool = (client.as_subnet(mask) == host.as_subnet(mask));
|
||||
}
|
||||
return ret_bool;
|
||||
}
|
||||
|
||||
bool ObHostnameStuct::is_wild_match(const common::ObString &client_ip, const common::ObString &host_name)
|
||||
{
|
||||
return ObCharset::wildcmp(CS_TYPE_UTF8MB4_BIN, client_ip, host_name, 0, '_', '%');
|
||||
}
|
||||
|
||||
bool ObHostnameStuct::is_in_white_list(const common::ObString &client_ip, common::ObString &ip_white_list)
|
||||
{
|
||||
bool ret_bool = false;
|
||||
if (ip_white_list.empty() || client_ip.empty()) {
|
||||
LOG_WARN_RET(OB_SUCCESS, "ip_white_list or client_ip is emtpy, denied any client", K(client_ip), K(ip_white_list));
|
||||
} else {
|
||||
const char COMMA = ',';
|
||||
ObString orig_ip_white_list = ip_white_list;
|
||||
while (NULL != ip_white_list.find(COMMA) && !ret_bool) {
|
||||
ObString invited_ip = ip_white_list.split_on(COMMA).trim();
|
||||
if (!invited_ip.empty()) {
|
||||
if (ObHostnameStuct::is_wild_match(client_ip, invited_ip)
|
||||
|| ObHostnameStuct::is_ip_match(client_ip, invited_ip)) {
|
||||
ret_bool = true;
|
||||
}
|
||||
LOG_TRACE("match result", K(ret_bool), K(client_ip), K(invited_ip));
|
||||
}
|
||||
}
|
||||
if (!ret_bool) {
|
||||
if (ip_white_list.empty()) {
|
||||
LOG_WARN_RET(OB_SUCCESS, "ip_white_list is emtpy, denied any client", K(client_ip), K(orig_ip_white_list));
|
||||
} else if (!ObHostnameStuct::is_wild_match(client_ip, ip_white_list)
|
||||
&& !ObHostnameStuct::is_ip_match(client_ip, ip_white_list)) {
|
||||
LOG_WARN_RET(OB_SUCCESS, "client ip is not in ip_white_list", K(client_ip), K(orig_ip_white_list));
|
||||
} else {
|
||||
ret_bool = true;
|
||||
LOG_TRACE("match result", K(ret_bool), K(client_ip), K(ip_white_list));
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret_bool;
|
||||
}
|
||||
// ObKeystoreSchema
|
||||
OB_SERIALIZE_MEMBER(ObKeystoreSchema,
|
||||
tenant_id_,
|
||||
|
@ -4930,23 +4930,6 @@ private:
|
||||
uint64_t grantee_id_;
|
||||
};
|
||||
|
||||
int get_int_value(const common::ObString &str, int64_t &value);
|
||||
|
||||
class ObHostnameStuct
|
||||
{
|
||||
public:
|
||||
ObHostnameStuct() {}
|
||||
~ObHostnameStuct() {}
|
||||
static const uint32_t FAKE_PORT = 0;
|
||||
static const int MAX_IP_BITS = 128;
|
||||
static int get_int_value(const common::ObString &str, int64_t &value);
|
||||
static bool calc_ip(const common::ObString &host_ip, common::ObAddr &addr);
|
||||
static bool calc_ip_mask(const common::ObString &host_ip_mask, common::ObAddr &mask);
|
||||
static bool is_ip_match(const common::ObString &client_ip, common::ObString host_name);
|
||||
static bool is_wild_match(const common::ObString &client_ip, const common::ObString &host_name);
|
||||
static bool is_in_white_list(const common::ObString &client_ip, common::ObString &ip_white_list);
|
||||
};
|
||||
|
||||
enum ObHintFormat
|
||||
{
|
||||
HINT_NORMAL,
|
||||
|
@ -70,8 +70,9 @@ int ObExprIsServingTenant::check_serving_tenant(
|
||||
} else if (OB_FAIL(ui_getter.get_tenant_servers(tenant_id, servers))) {
|
||||
LOG_WARN("fail to get servers of a tenant", K(ret));
|
||||
} else if (false == svr.set_ip_addr(ip, static_cast<int32_t>(port))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("fail to set ip addr", K(ret), K(ip), K(port));
|
||||
LOG_USER_ERROR(OB_INVALID_ARGUMENT, "invalid ip or port");
|
||||
} else {
|
||||
bool found_server = false;
|
||||
for (int64_t i = 0; OB_SUCC(ret) && false == found_server && i < servers.count(); ++i) {
|
||||
|
@ -23,11 +23,7 @@ select is_serving_tenant(host_ip(), rpc_port(), 888);
|
||||
| 0 |
|
||||
+-----------------------------------------------+
|
||||
select is_serving_tenant('abc', rpc_port(), effective_tenant_id());
|
||||
+-------------------------------------------------------------+
|
||||
| is_serving_tenant('abc', rpc_port(), effective_tenant_id()) |
|
||||
+-------------------------------------------------------------+
|
||||
| 0 |
|
||||
+-------------------------------------------------------------+
|
||||
ERROR HY000: Incorrect arguments to invalid ip or port
|
||||
select is_serving_tenant('abc', rpc_port(), 1);
|
||||
+-----------------------------------------+
|
||||
| is_serving_tenant('abc', rpc_port(), 1) |
|
||||
@ -35,9 +31,5 @@ select is_serving_tenant('abc', rpc_port(), 1);
|
||||
| 1 |
|
||||
+-----------------------------------------+
|
||||
select is_serving_tenant('abc', rpc_port(), 888);
|
||||
+-------------------------------------------+
|
||||
| is_serving_tenant('abc', rpc_port(), 888) |
|
||||
+-------------------------------------------+
|
||||
| 0 |
|
||||
+-------------------------------------------+
|
||||
ERROR HY000: Incorrect arguments to invalid ip or port
|
||||
|
||||
|
@ -60,265 +60,6 @@ TEST(ObSchemaStructTest, hash_map)
|
||||
}
|
||||
}
|
||||
|
||||
TEST(ObSchemaStructTest, ObHostnameStuct)
|
||||
{
|
||||
ObString host_name_0("100.104.127.0/26");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("100.104.127.44", host_name_0));
|
||||
|
||||
ObString host_name("192.168.0.0/16");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.1", host_name));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.0", host_name));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.255", host_name));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.-1", host_name));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.-1.1", host_name));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.256.1", host_name));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.256", host_name));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.169.1.1", host_name));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.0.1.1", host_name));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name));
|
||||
|
||||
ObString host_name_ipv6("fe80:90fa:2017:ff00::/56");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff03::0a:02", host_name_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:02", host_name_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:fe00:00e8:0074:0a:02", host_name_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match(":90fa:2017:fe00:00e8:0074:0a:02", host_name_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff:", host_name_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::", host_name_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::1", host_name_ipv6));
|
||||
|
||||
ObString host_name2("0.0.0.0/0");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.1", host_name2));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.0", host_name2));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.255", host_name2));
|
||||
//EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.-1", host_name2));
|
||||
//EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.-1.1", host_name2));
|
||||
//EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.256.1", host_name2));
|
||||
// EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.256", host_name2));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.169.1.1", host_name2));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.0.1.1", host_name2));
|
||||
// EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name2));
|
||||
// EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name2));
|
||||
|
||||
ObString host_name2_ipv6("::/0");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff03::0a:02", host_name2_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff03::", host_name2_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("::", host_name2_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("::1", host_name2_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.1", host_name2));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match(":2017:ff03::", host_name2_ipv6));
|
||||
|
||||
ObString host_name3("192.168.1.1/32");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.1", host_name3));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.0", host_name3));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.255", host_name3));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.-1", host_name3));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.-1.1", host_name3));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.256.1", host_name3));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.256", host_name3));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.169.1.1", host_name3));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.0.1.1", host_name3));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name3));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name3));
|
||||
|
||||
|
||||
ObString host_name4("192.168.11.0/255.255.255.0");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.1", host_name4));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.0", host_name4));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.255", host_name4));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.-1", host_name4));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.256", host_name4));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.1", host_name4));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.10.1", host_name4));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.0.1.1", host_name4));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name4));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name4));
|
||||
|
||||
ObString host_name4_ipv6("fe80:90fa:2017:ff80::/ffff:ffff:ffff:ffff:0:0:0:0");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff80:00e8:ff74:0a:02", host_name4_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff80::", host_name4_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff80:e8::0a:02", host_name4_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:02", host_name4_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00::", host_name4_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::", host_name4_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::1", host_name4_ipv6));
|
||||
|
||||
ObString host_name5("0.0.0.0/0.0.0.0");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.1", host_name5));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.0", host_name5));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.255", host_name5));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.-1", host_name5));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.256", host_name5));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.1", host_name5));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.10.1", host_name5));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.0.1.1", host_name5));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name5));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name5));
|
||||
|
||||
ObString host_name5_ipv6("::/::");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:02", host_name5_ipv6));
|
||||
//EXPECT_EQ(true, ObHostnameStuct::is_ip_match("::" host_name5_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("::1", host_name5_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("ff:ff:ff:ff:ff:ff:ff:ff", host_name5_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("90fa:2017:ff00:00e8:0074:0a:02", host_name5_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:-1", host_name5_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:g1", host_name5_ipv6));
|
||||
|
||||
ObString host_name6("192.168.11.1/255.255.255.255");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.1", host_name6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.0", host_name6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.255", host_name6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.-1", host_name6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.256", host_name6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.1", host_name6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.10.1", host_name6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.0.1.1", host_name6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name6));
|
||||
|
||||
ObString host_name10("192.168.11.1");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.1", host_name10));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.0", host_name10));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.255", host_name10));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.-1", host_name10));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.256", host_name10));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.1", host_name10));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.10.1", host_name10));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.0.1.1", host_name10));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name10));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name10));
|
||||
|
||||
ObString host_name10_ipv6("2017::a:2");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("2017:0:0:0:0:0:a:2", host_name10_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("2017::0a:02", host_name10_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("2017:2::0a:02", host_name10_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::", host_name10_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::1", host_name10_ipv6));
|
||||
|
||||
|
||||
ObString host_name7("192.168.11.1/33");
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.1", host_name7));
|
||||
ObString host_name8("192.168.11.1/-1");
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.1", host_name8));
|
||||
ObString host_name9("192.168.11.1/");
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.1", host_name9));
|
||||
|
||||
ObString host_name11("192.168.11.%");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("192.168.11.0", host_name11));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("192.168.11.255", host_name11));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("192.168.11.-1", host_name11));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("192.168.11.256", host_name11));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.1.1", host_name11));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.10.1", host_name11));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.0.1.1", host_name11));
|
||||
|
||||
ObString host_name11_ipv6("fe80:fe20:ffff:%");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("fe80:fe20:ffff:2014:0506:02:56:80", host_name11_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("fe80:fe20:ffff::", host_name11_ipv6));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("fe80:fe20:ffff:2019::", host_name11_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("fe80:fe20:fffe::", host_name11_ipv6));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("fe80:fe20:8fff::2084:92:23:78:ff30", host_name11_ipv6));
|
||||
|
||||
|
||||
ObString host_name12("192.168.11._");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("192.168.11.0", host_name12));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.11.255", host_name12));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.11.-1", host_name12));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.11.256", host_name12));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.1.1", host_name12));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.10.1", host_name12));
|
||||
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.0.1.1", host_name12));
|
||||
|
||||
int64_t value = 0;
|
||||
EXPECT_EQ(OB_SUCCESS, ObHostnameStuct::get_int_value("12", value));
|
||||
EXPECT_EQ(12, value);
|
||||
EXPECT_EQ(OB_SUCCESS, ObHostnameStuct::get_int_value("-12", value));
|
||||
EXPECT_EQ(-12, value);
|
||||
EXPECT_EQ(OB_SUCCESS, ObHostnameStuct::get_int_value("0", value));
|
||||
EXPECT_EQ(0, value);
|
||||
EXPECT_EQ(OB_SUCCESS, ObHostnameStuct::get_int_value("65536", value));
|
||||
EXPECT_EQ(65536, value);
|
||||
EXPECT_EQ(OB_SUCCESS, ObHostnameStuct::get_int_value("-65536", value));
|
||||
EXPECT_EQ(-65536, value);
|
||||
EXPECT_EQ(OB_INVALID_DATA, ObHostnameStuct::get_int_value("12sds", value));
|
||||
EXPECT_EQ(OB_INVALID_DATA, ObHostnameStuct::get_int_value("12 sddf", value));
|
||||
EXPECT_EQ(OB_INVALID_DATA, ObHostnameStuct::get_int_value("++12", value));
|
||||
EXPECT_EQ(OB_INVALID_DATA, ObHostnameStuct::get_int_value("--12", value));
|
||||
|
||||
ObString ip_white_list1("");
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list1));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("%", ip_white_list1));
|
||||
|
||||
ObString ip_white_list2;
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list2));
|
||||
|
||||
ObString ip_white_list3("%");
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list3));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list3));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("hello", ip_white_list3));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("", ip_white_list3));
|
||||
|
||||
ObString ip_white_list4("192.0.1.0/24");
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list4));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list4));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("hello", ip_white_list4));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("", ip_white_list4));
|
||||
|
||||
ObString ip_white_list5("192.0.1.0/24, %");
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list5));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list5));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("hello", ip_white_list5));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("", ip_white_list5));
|
||||
|
||||
ObString ip_white_list6("192.0.1.0/24,%");
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list6));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list6));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("hello", ip_white_list6));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("", ip_white_list6));
|
||||
|
||||
ObString ip_white_list7(",192.0.1,192.0.1.0/24");
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list7));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list7));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("hello", ip_white_list7));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("", ip_white_list7));
|
||||
|
||||
ObString ip_white_list8("10.125.224.0/255.255.252.0");
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("10.125.224.15", ip_white_list8));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("10.125.224.5", ip_white_list8));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list8));
|
||||
|
||||
ObString ip_white_list9("10.125.224.0/22");
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("10.125.224.15", ip_white_list9));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("10.125.224.5", ip_white_list9));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list9));
|
||||
|
||||
ObString ip_white_list10("255.255.224.0/22");
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.15", ip_white_list10));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.5", ip_white_list10));
|
||||
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("255.255.255.15", ip_white_list10));
|
||||
|
||||
ObString ip_white_list11("255.255.224.15");
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.15", ip_white_list11));
|
||||
|
||||
ObString ip_white_list12("255.255.224.15,255.255.224.14,255.255.224.13,255.255.224.12,255.255.224.11");
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.15", ip_white_list12));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.14", ip_white_list12));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.13", ip_white_list12));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.12", ip_white_list12));
|
||||
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.11", ip_white_list12));
|
||||
|
||||
ObString ip_white_list13(" 255.255.224.15, 255.255.224.14, 255.255.224.13, 255.255.224.12");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.15", ip_white_list13));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.14", ip_white_list13));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.13", ip_white_list13));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.12", ip_white_list13));
|
||||
|
||||
ObString ip_white_list14(" 255.255.224.15/32 , 255.255.224.14/32 , 255.255.224.13/32 , 255.255.224.12/32");
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.15", ip_white_list14));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.14", ip_white_list14));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.13", ip_white_list14));
|
||||
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.12", ip_white_list14));
|
||||
}
|
||||
}//end of namespace schema
|
||||
}//end of namespace share
|
||||
}//end of namespace oceanbase
|
||||
|
Loading…
x
Reference in New Issue
Block a user