diff options
Diffstat (limited to 'src/backend/utils/adt/network.c')
-rw-r--r-- | src/backend/utils/adt/network.c | 249 |
1 files changed, 145 insertions, 104 deletions
diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c index 49e2694261a..32ebc66fd02 100644 --- a/src/backend/utils/adt/network.c +++ b/src/backend/utils/adt/network.c @@ -1,7 +1,7 @@ /* * PostgreSQL type definitions for the INET and CIDR types. * - * $PostgreSQL: pgsql/src/backend/utils/adt/network.c,v 1.50 2004/05/26 18:35:38 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/network.c,v 1.51 2004/06/13 19:56:50 tgl Exp $ * * Jon Postel RIP 16 Oct 1998 */ @@ -133,109 +133,6 @@ cidr_in(PG_FUNCTION_ARGS) PG_RETURN_INET_P(network_in(src, 1)); } -/* INET that the client is connecting from */ -Datum -inet_client_addr(PG_FUNCTION_ARGS) -{ - Port *port = MyProcPort; - - if (port == NULL) - PG_RETURN_NULL(); - - switch (port->raddr.addr.ss_family) { - case AF_INET: -#ifdef HAVE_IPV6 - case AF_INET6: -#endif - break; - default: - PG_RETURN_NULL(); - } - - PG_RETURN_INET_P(network_in(port->remote_host, 0)); -} - - -/* port that the client is connecting from */ -Datum -inet_client_port(PG_FUNCTION_ARGS) -{ - Port *port = MyProcPort; - - if (port == NULL) - PG_RETURN_NULL(); - - PG_RETURN_INT32(DirectFunctionCall1(int4in, CStringGetDatum(port->remote_port))); -} - - -/* server INET that the client connected to */ -Datum -inet_server_addr(PG_FUNCTION_ARGS) -{ - Port *port = MyProcPort; - char local_host[NI_MAXHOST]; - int ret; - - if (port == NULL) - PG_RETURN_NULL(); - - switch (port->laddr.addr.ss_family) { - case AF_INET: -#ifdef HAVE_IPV6 - case AF_INET6: -#endif - break; - default: - PG_RETURN_NULL(); - } - - local_host[0] = '\0'; - - ret = getnameinfo_all(&port->laddr.addr, port->laddr.salen, - local_host, sizeof(local_host), - NULL, 0, - NI_NUMERICHOST | NI_NUMERICSERV); - if (ret) - PG_RETURN_NULL(); - - PG_RETURN_INET_P(network_in(local_host, 0)); -} - - -/* port that the server accepted the connection on */ -Datum -inet_server_port(PG_FUNCTION_ARGS) -{ - Port *port = MyProcPort; - char local_port[NI_MAXSERV]; - int ret; - - if (port == NULL) - PG_RETURN_NULL(); - - switch (port->laddr.addr.ss_family) { - case AF_INET: -#ifdef HAVE_IPV6 - case AF_INET6: -#endif - break; - default: - PG_RETURN_NULL(); - } - - local_port[0] = '\0'; - - ret = getnameinfo_all(&port->laddr.addr, port->laddr.salen, - NULL, 0, - local_port, sizeof(local_port), - NI_NUMERICHOST | NI_NUMERICSERV); - if (ret) - PG_RETURN_NULL(); - - PG_RETURN_INT32(DirectFunctionCall1(int4in, CStringGetDatum(local_port))); -} - /* * INET address output function. @@ -1069,3 +966,147 @@ network_scan_last(Datum in) DirectFunctionCall1(network_broadcast, in), Int32GetDatum(-1)); } + + +/* + * IP address that the client is connecting from (NULL if Unix socket) + */ +Datum +inet_client_addr(PG_FUNCTION_ARGS) +{ + Port *port = MyProcPort; + char remote_host[NI_MAXHOST]; + int ret; + + if (port == NULL) + PG_RETURN_NULL(); + + switch (port->raddr.addr.ss_family) { + case AF_INET: +#ifdef HAVE_IPV6 + case AF_INET6: +#endif + break; + default: + PG_RETURN_NULL(); + } + + remote_host[0] = '\0'; + + ret = getnameinfo_all(&port->raddr.addr, port->raddr.salen, + remote_host, sizeof(remote_host), + NULL, 0, + NI_NUMERICHOST | NI_NUMERICSERV); + if (ret) + PG_RETURN_NULL(); + + PG_RETURN_INET_P(network_in(remote_host, 0)); +} + + +/* + * port that the client is connecting from (NULL if Unix socket) + */ +Datum +inet_client_port(PG_FUNCTION_ARGS) +{ + Port *port = MyProcPort; + char remote_port[NI_MAXSERV]; + int ret; + + if (port == NULL) + PG_RETURN_NULL(); + + switch (port->raddr.addr.ss_family) { + case AF_INET: +#ifdef HAVE_IPV6 + case AF_INET6: +#endif + break; + default: + PG_RETURN_NULL(); + } + + remote_port[0] = '\0'; + + ret = getnameinfo_all(&port->raddr.addr, port->raddr.salen, + NULL, 0, + remote_port, sizeof(remote_port), + NI_NUMERICHOST | NI_NUMERICSERV); + if (ret) + PG_RETURN_NULL(); + + PG_RETURN_DATUM(DirectFunctionCall1(int4in, CStringGetDatum(remote_port))); +} + + +/* + * IP address that the server accepted the connection on (NULL if Unix socket) + */ +Datum +inet_server_addr(PG_FUNCTION_ARGS) +{ + Port *port = MyProcPort; + char local_host[NI_MAXHOST]; + int ret; + + if (port == NULL) + PG_RETURN_NULL(); + + switch (port->laddr.addr.ss_family) { + case AF_INET: +#ifdef HAVE_IPV6 + case AF_INET6: +#endif + break; + default: + PG_RETURN_NULL(); + } + + local_host[0] = '\0'; + + ret = getnameinfo_all(&port->laddr.addr, port->laddr.salen, + local_host, sizeof(local_host), + NULL, 0, + NI_NUMERICHOST | NI_NUMERICSERV); + if (ret) + PG_RETURN_NULL(); + + PG_RETURN_INET_P(network_in(local_host, 0)); +} + + +/* + * port that the server accepted the connection on (NULL if Unix socket) + */ +Datum +inet_server_port(PG_FUNCTION_ARGS) +{ + Port *port = MyProcPort; + char local_port[NI_MAXSERV]; + int ret; + + if (port == NULL) + PG_RETURN_NULL(); + + switch (port->laddr.addr.ss_family) { + case AF_INET: +#ifdef HAVE_IPV6 + case AF_INET6: +#endif + break; + default: + PG_RETURN_NULL(); + } + + local_port[0] = '\0'; + + ret = getnameinfo_all(&port->laddr.addr, port->laddr.salen, + NULL, 0, + local_port, sizeof(local_port), + NI_NUMERICHOST | NI_NUMERICSERV); + if (ret) + PG_RETURN_NULL(); + + PG_RETURN_DATUM(DirectFunctionCall1(int4in, CStringGetDatum(local_port))); +} |