aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/network.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/network.c')
-rw-r--r--src/backend/utils/adt/network.c249
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)));
+}