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 142 /// @retval 0 The session is offline.
143 143 int (*is_connected)(const H3270 *hSession);
144 144  
145   - /// @brief get socket name.
  145 + /// @brief Get socket name.
146 146 ///
147 147 /// @return On success, zero is returned. On error, -1 is returned, and errno is set appropriately.
148 148 ///
... ... @@ -150,6 +150,14 @@
150 150 /// @retval -1 Error (errno is set).
151 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 161 /// @brief Set socket options.
154 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 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 99 static void * unsecure_network_add_poll(H3270 *hSession, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata) {
96 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 170 .non_blocking = unsecure_network_non_blocking,
167 171 .is_connected = unsecure_network_is_connected,
168 172 .getsockname = unsecure_network_getsockname,
  173 + .getpeername = unsecure_network_getpeername,
169 174 .setsockopt = unsecure_network_setsockopt,
170 175 .getsockopt = unsecure_network_getsockopt,
171 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 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 193 static void * openssl_network_add_poll(H3270 *hSession, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata) {
190 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 350 .non_blocking = openssl_network_non_blocking,
347 351 .is_connected = openssl_network_is_connected,
348 352 .getsockname = openssl_network_getsockname,
  353 + .getpeername = openssl_network_getpeername,
349 354 .setsockopt = openssl_network_setsockopt,
350 355 .getsockopt = openssl_network_getsockopt,
351 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 263  
264 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 +
... ...