Commit 406d745d69a69d550d5ec8478f06a7ed2cebdc20

Authored by Perry Werneck
1 parent f1526cdc
Exists in master and in 2 other branches develop, macos

Enabling get peer and name methods required for custom audit plugin.

src/include/networking.h
@@ -142,7 +142,7 @@ @@ -142,7 +142,7 @@
142 /// @retval 0 The session is offline. 142 /// @retval 0 The session is offline.
143 int (*is_connected)(const H3270 *hSession); 143 int (*is_connected)(const H3270 *hSession);
144 144
145 - /// @brief get socket name. 145 + /// @brief Get socket name.
146 /// 146 ///
147 /// @return On success, zero is returned. On error, -1 is returned, and errno is set appropriately. 147 /// @return On success, zero is returned. On error, -1 is returned, and errno is set appropriately.
148 /// 148 ///
@@ -150,6 +150,14 @@ @@ -150,6 +150,14 @@
150 /// @retval -1 Error (errno is set). 150 /// @retval -1 Error (errno is set).
151 int (*getsockname)(const H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen); 151 int (*getsockname)(const H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen);
152 152
  153 + /// @brief Get name of connected peer socket.
  154 + ///
  155 + /// @return On success, zero is returned. On error, -1 is returned, and errno is set appropriately.
  156 + ///
  157 + /// @retval 0 Success.
  158 + /// @retval -1 Error (errno is set).
  159 + int (*getpeername)(const H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen);
  160 +
153 /// @brief Set socket options. 161 /// @brief Set socket options.
154 int (*setsockopt)(H3270 *hSession, int level, int optname, const void *optval, size_t optlen); 162 int (*setsockopt)(H3270 *hSession, int level, int optname, const void *optval, size_t optlen);
155 163
src/network_modules/default/main.c
@@ -92,6 +92,10 @@ static int unsecure_network_getsockname(const H3270 *hSession, struct sockaddr * @@ -92,6 +92,10 @@ static int unsecure_network_getsockname(const H3270 *hSession, struct sockaddr *
92 return getsockname(hSession->network.context->sock, addr, addrlen); 92 return getsockname(hSession->network.context->sock, addr, addrlen);
93 } 93 }
94 94
  95 +static int unsecure_network_getpeername(const H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen) {
  96 + return getpeername(hSession->network.context->sock, addr, addrlen);
  97 +}
  98 +
95 static void * unsecure_network_add_poll(H3270 *hSession, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata) { 99 static void * unsecure_network_add_poll(H3270 *hSession, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata) {
96 return lib3270_add_poll_fd(hSession,hSession->network.context->sock,flag,call,userdata); 100 return lib3270_add_poll_fd(hSession,hSession->network.context->sock,flag,call,userdata);
97 } 101 }
@@ -166,6 +170,7 @@ void lib3270_set_default_network_module(H3270 *hSession) { @@ -166,6 +170,7 @@ void lib3270_set_default_network_module(H3270 *hSession) {
166 .non_blocking = unsecure_network_non_blocking, 170 .non_blocking = unsecure_network_non_blocking,
167 .is_connected = unsecure_network_is_connected, 171 .is_connected = unsecure_network_is_connected,
168 .getsockname = unsecure_network_getsockname, 172 .getsockname = unsecure_network_getsockname,
  173 + .getpeername = unsecure_network_getpeername,
169 .setsockopt = unsecure_network_setsockopt, 174 .setsockopt = unsecure_network_setsockopt,
170 .getsockopt = unsecure_network_getsockopt, 175 .getsockopt = unsecure_network_getsockopt,
171 .reset = unsecure_network_reset 176 .reset = unsecure_network_reset
src/network_modules/openssl/main.c
@@ -186,6 +186,10 @@ static int openssl_network_getsockname(const H3270 *hSession, struct sockaddr *a @@ -186,6 +186,10 @@ static int openssl_network_getsockname(const H3270 *hSession, struct sockaddr *a
186 return getsockname(hSession->network.context->sock, addr, addrlen); 186 return getsockname(hSession->network.context->sock, addr, addrlen);
187 } 187 }
188 188
  189 +static int openssl_network_getpeername(const H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen) {
  190 + return getpeername(hSession->network.context->sock, addr, addrlen);
  191 +}
  192 +
189 static void * openssl_network_add_poll(H3270 *hSession, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata) { 193 static void * openssl_network_add_poll(H3270 *hSession, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata) {
190 return lib3270_add_poll_fd(hSession,hSession->network.context->sock,flag,call,userdata); 194 return lib3270_add_poll_fd(hSession,hSession->network.context->sock,flag,call,userdata);
191 } 195 }
@@ -346,6 +350,7 @@ void lib3270_set_libssl_network_module(H3270 *hSession) { @@ -346,6 +350,7 @@ void lib3270_set_libssl_network_module(H3270 *hSession) {
346 .non_blocking = openssl_network_non_blocking, 350 .non_blocking = openssl_network_non_blocking,
347 .is_connected = openssl_network_is_connected, 351 .is_connected = openssl_network_is_connected,
348 .getsockname = openssl_network_getsockname, 352 .getsockname = openssl_network_getsockname,
  353 + .getpeername = openssl_network_getpeername,
349 .setsockopt = openssl_network_setsockopt, 354 .setsockopt = openssl_network_setsockopt,
350 .getsockopt = openssl_network_getsockopt, 355 .getsockopt = openssl_network_getsockopt,
351 .getcert = openssl_network_getcert, 356 .getcert = openssl_network_getcert,
src/network_modules/tools.c
@@ -263,3 +263,16 @@ int lib3270_socket_set_non_blocking(H3270 *hSession, int sock, const unsigned ch @@ -263,3 +263,16 @@ int lib3270_socket_set_non_blocking(H3270 *hSession, int sock, const unsigned ch
263 263
264 return EINVAL; 264 return EINVAL;
265 } 265 }
  266 +
  267 + LIB3270_EXPORT int lib3270_getpeername(H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen)
  268 + {
  269 + FAIL_IF_NOT_ONLINE(hSession);
  270 + return hSession->network.module->getpeername(hSession, addr, addrlen);
  271 + }
  272 +
  273 + LIB3270_EXPORT int lib3270_getsockname(H3270 *hSession, struct sockaddr *addr, socklen_t *addrlen)
  274 + {
  275 + FAIL_IF_NOT_ONLINE(hSession);
  276 + return hSession->network.module->getsockname(hSession, addr, addrlen);
  277 + }
  278 +