aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/restricted/aws/aws-c-io/source/socket_shared.c
diff options
context:
space:
mode:
authorthegeorg <thegeorg@yandex-team.com>2025-05-12 15:51:24 +0300
committerthegeorg <thegeorg@yandex-team.com>2025-05-12 16:06:27 +0300
commitd629bb70c8773d2c0c43f5088ddbb5a86d8c37ea (patch)
tree4f678e0d65ad08c800db21c657d3b0f71fafed06 /contrib/restricted/aws/aws-c-io/source/socket_shared.c
parent92c4b696d7a1c03d54e13aff7a7c20a078d90dd7 (diff)
downloadydb-d629bb70c8773d2c0c43f5088ddbb5a86d8c37ea.tar.gz
Update contrib/restricted/aws libraries to nixpkgs 24.05
commit_hash:f8083acb039e6005e820cdee77b84e0a6b6c6d6d
Diffstat (limited to 'contrib/restricted/aws/aws-c-io/source/socket_shared.c')
-rw-r--r--contrib/restricted/aws/aws-c-io/source/socket_shared.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/contrib/restricted/aws/aws-c-io/source/socket_shared.c b/contrib/restricted/aws/aws-c-io/source/socket_shared.c
new file mode 100644
index 00000000000..63c640b4926
--- /dev/null
+++ b/contrib/restricted/aws/aws-c-io/source/socket_shared.c
@@ -0,0 +1,75 @@
+/**
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0.
+ */
+#include <aws/io/socket.h>
+
+#include <aws/io/logging.h>
+
+/* common validation for connect() and bind() */
+static int s_socket_validate_port_for_domain(uint32_t port, enum aws_socket_domain domain) {
+ switch (domain) {
+ case AWS_SOCKET_IPV4:
+ case AWS_SOCKET_IPV6:
+ if (port > UINT16_MAX) {
+ AWS_LOGF_ERROR(
+ AWS_LS_IO_SOCKET,
+ "Invalid port=%u for %s. Cannot exceed 65535",
+ port,
+ domain == AWS_SOCKET_IPV4 ? "IPv4" : "IPv6");
+ return aws_raise_error(AWS_IO_SOCKET_INVALID_ADDRESS);
+ }
+ break;
+
+ case AWS_SOCKET_LOCAL:
+ /* port is ignored */
+ break;
+
+ case AWS_SOCKET_VSOCK:
+ /* any 32bit port is legal */
+ break;
+
+ default:
+ AWS_LOGF_ERROR(AWS_LS_IO_SOCKET, "Cannot validate port for unknown domain=%d", domain);
+ return aws_raise_error(AWS_IO_SOCKET_INVALID_ADDRESS);
+ }
+ return AWS_OP_SUCCESS;
+}
+
+int aws_socket_validate_port_for_connect(uint32_t port, enum aws_socket_domain domain) {
+ if (s_socket_validate_port_for_domain(port, domain)) {
+ return AWS_OP_ERR;
+ }
+
+ /* additional validation */
+ switch (domain) {
+ case AWS_SOCKET_IPV4:
+ case AWS_SOCKET_IPV6:
+ if (port == 0) {
+ AWS_LOGF_ERROR(
+ AWS_LS_IO_SOCKET,
+ "Invalid port=%u for %s connections. Must use 1-65535",
+ port,
+ domain == AWS_SOCKET_IPV4 ? "IPv4" : "IPv6");
+ return aws_raise_error(AWS_IO_SOCKET_INVALID_ADDRESS);
+ }
+ break;
+
+ case AWS_SOCKET_VSOCK:
+ if (port == (uint32_t)-1) {
+ AWS_LOGF_ERROR(
+ AWS_LS_IO_SOCKET, "Invalid port for VSOCK connections. Cannot use VMADDR_PORT_ANY (-1U).");
+ return aws_raise_error(AWS_IO_SOCKET_INVALID_ADDRESS);
+ }
+ break;
+
+ default:
+ /* no extra validation */
+ break;
+ }
+ return AWS_OP_SUCCESS;
+}
+
+int aws_socket_validate_port_for_bind(uint32_t port, enum aws_socket_domain domain) {
+ return s_socket_validate_port_for_domain(port, domain);
+}