summaryrefslogtreecommitdiff
path: root/libgtop2-2.40.0-deprecated-networking.patch
blob: 5cc7010d9f223fe1002069f7e5e08dd30c95930c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
From 3cb07d9c440d7bf0c4f8877a68a8d7467b97a238 Mon Sep 17 00:00:00 2001
From: David King <amigadave@amigadave.com>
Date: Mon, 6 Jun 2022 17:30:40 +0100
Subject: [PATCH] Avoid some deprecated networking functions

rpminspect trips up on some old networking functions in libgtop, which
are mentioned as deprecated in the Linux man pages.

inet_ntoa() only works on IPv4 addresses, whereas the newer inet_ntop()
works on both IPv4 and IPv6 addresses, so use inet_ntop() instead.
Similarly, use getaddrinfo() rather than gethostbyname(), and avoid
inet_addr() entirely.

https://bugzilla.redhat.com/show_bug.cgi?id=2050712
---
 examples/netload.c       | 10 +++-------
 src/daemon/gnuserv.c     | 20 ++++++++++++++------
 sysdeps/common/gnuslib.c | 16 ++++++++++------
 3 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/examples/netload.c b/examples/netload.c
index 979b245d..520b5040 100644
--- a/examples/netload.c
+++ b/examples/netload.c
@@ -66,7 +66,7 @@ main (int argc, char *argv [])
 	glibtop_netload netload;
 	unsigned method, count, port;
 	struct in_addr addr, subnet;
-	char *address_string, *subnet_string;
+	char address_string[INET_ADDRSTRLEN], subnet_string[INET_ADDRSTRLEN];
 	char address6_string[INET6_ADDRSTRLEN], prefix6_string[INET6_ADDRSTRLEN];
 	char *hwaddress_string;
 	char buffer [BUFSIZ];
@@ -105,9 +105,8 @@ main (int argc, char *argv [])
 	addr.s_addr = netload.address;
 	subnet.s_addr = netload.subnet;
 
-	address_string = g_strdup (inet_ntoa (addr));
-	subnet_string  = g_strdup (inet_ntoa (subnet));
-
+	inet_ntop (AF_INET, &addr,   address_string, INET_ADDRSTRLEN);
+	inet_ntop (AF_INET, &subnet, subnet_string,  INET_ADDRSTRLEN);
 	inet_ntop (AF_INET6, netload.address6, address6_string, INET6_ADDRSTRLEN);
 	inet_ntop (AF_INET6, netload.prefix6,  prefix6_string,  INET6_ADDRSTRLEN);
 
@@ -153,9 +152,6 @@ main (int argc, char *argv [])
 		hwaddress_string);
 
 
-	g_free (address_string);
-	g_free (subnet_string);
-
 	glibtop_close ();
 
 	exit (0);
diff --git a/src/daemon/gnuserv.c b/src/daemon/gnuserv.c
index 78ebb643..26e9dd92 100644
--- a/src/daemon/gnuserv.c
+++ b/src/daemon/gnuserv.c
@@ -392,6 +392,7 @@ handle_internet_request (int ls)
     int s;
     size_t addrlen = sizeof (struct sockaddr_in);
     struct sockaddr_in peer;	/* for peer socket address */
+    char addrstr[addrlen];
     pid_t pid;
 
     memset ((char *) &peer, 0, sizeof (struct sockaddr_in));
@@ -401,21 +402,24 @@ handle_internet_request (int ls)
 	exit (1);
     }
 
+    /* TODO: Check errno. */
+    inet_ntop (AF_INET, &peer, addrstr, addrlen);
+
     if (verbose_output)
 	syslog_message (LOG_INFO, "Connection was made from %s port %u.",
-			inet_ntoa (peer.sin_addr), ntohs (peer.sin_port));
+			addrstr, ntohs (peer.sin_port));
 
     /* Check that access is allowed - if not return crud to the client */
     if (!permitted (peer.sin_addr.s_addr, s)) {
 	close (s);
 	syslog_message (LOG_CRIT, "Refused connection from %s.",
-			inet_ntoa (peer.sin_addr));
+			addrstr);
 	return;
     }			/* if */
 
     if (verbose_output)
 	syslog_message (LOG_INFO, "Accepted connection from %s port %u.",
-			inet_ntoa (peer.sin_addr), ntohs (peer.sin_port));
+			addrstr, ntohs (peer.sin_port));
 
     pid = fork ();
 
@@ -436,7 +440,7 @@ handle_internet_request (int ls)
 
     if (verbose_output)
 	syslog_message (LOG_INFO, "Closed connection to %s port %u.",
-			inet_ntoa (peer.sin_addr), ntohs (peer.sin_port));
+			addrstr, ntohs (peer.sin_port));
 
     _exit (0);
 }				/* handle_internet_request */
@@ -560,6 +564,7 @@ main (int argc, char **argv)
     if (invoked_from_inetd) {
 	size_t addrlen = sizeof (struct sockaddr_in);
 	struct sockaddr_in peer;
+	char addrstr[addrlen];
 
 	memset ((char *) &peer, 0, sizeof (struct sockaddr_in));
 
@@ -568,15 +573,18 @@ main (int argc, char **argv)
 	    exit (1);
 	}
 
+	/* TODO: Check errno. */
+	inet_ntop (AF_INET, &peer, addrstr, addrlen);
+
 	if (verbose_output)
 	    syslog_message (LOG_INFO, "Connection was made from %s port %u.",
-			    inet_ntoa (peer.sin_addr), ntohs (peer.sin_port));
+			    addrstr, ntohs (peer.sin_port));
 
 	/* Check that access is allowed - if not return crud to the client */
 	if (!permitted (peer.sin_addr.s_addr, 0)) {
 	    close (0);
 	    syslog_message (LOG_CRIT, "Refused connection from %s.",
-			    inet_ntoa (peer.sin_addr));
+			    addrstr);
 	    exit (1);
 	}
 
diff --git a/sysdeps/common/gnuslib.c b/sysdeps/common/gnuslib.c
index 79295485..3f994f2c 100644
--- a/sysdeps/common/gnuslib.c
+++ b/sysdeps/common/gnuslib.c
@@ -202,16 +202,20 @@ connect_to_unix_server (void)
 long
 glibtop_internet_addr (const char *host)
 {
-	struct hostent *hp;	/* pointer to host info for remote host */
+	/* specify IPv4 and TCP */
+	struct addrinfo hints = { AF_INET, SOCK_STREAM, };
+	struct addrinfo *result;/* pointer to host info for remote host */
 	IN_ADDR numeric_addr;	/* host address */
 
-	numeric_addr = inet_addr (host);
-	if (!NUMERIC_ADDR_ERROR)
+	if (getaddrinfo (NULL, host, &hints, &result) == 0) {
+		/* Take only the first address. */
+		struct sockaddr_in *res = (struct sockaddr_in *)result->ai_addr;
+		numeric_addr = res->sin_addr.s_addr;
+		freeaddrinfo (result);
 		return numeric_addr;
-	else if ((hp = gethostbyname (host)) != NULL)
-		return ((struct in_addr *) (hp->h_addr))->s_addr;
+	}
 	else {
-		glibtop_warn_io ("gethostbyname (%s)", host);
+		glibtop_warn_io ("getaddrinfo (%s)", host);
 		return -1;
 	}
 
-- 
2.36.1