144 lines
4.4 KiB
Diff
144 lines
4.4 KiB
Diff
|
From 166c26dca2a5004f83c5dbc1cb9870667fa8e301 Mon Sep 17 00:00:00 2001
|
||
|
From: Xin Long <lucien.xin@gmail.com>
|
||
|
Date: Wed, 4 Aug 2021 07:29:13 -0400
|
||
|
Subject: [PATCH 1/4] myftp: replace use of deprecated gethostbyname with
|
||
|
getaddrinfo
|
||
|
|
||
|
This patch is to replace use of deprecated gethostbyname with
|
||
|
getaddrinfo in the file src/apps/myftp.c.
|
||
|
|
||
|
Signed-off-by: Xin Long <lucien.xin@gmail.com>
|
||
|
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
|
||
|
---
|
||
|
configure.ac | 2 +-
|
||
|
src/apps/myftp.c | 40 ++++++++++++++++++----------------------
|
||
|
2 files changed, 19 insertions(+), 23 deletions(-)
|
||
|
|
||
|
diff --git a/configure.ac b/configure.ac
|
||
|
index 4e2f7b4..8345dab 100644
|
||
|
--- a/configure.ac
|
||
|
+++ b/configure.ac
|
||
|
@@ -75,7 +75,7 @@ AC_FUNC_REALLOC
|
||
|
AC_FUNC_SELECT_ARGTYPES
|
||
|
AC_FUNC_SETVBUF_REVERSED
|
||
|
AC_FUNC_VPRINTF
|
||
|
-AC_CHECK_FUNCS([bzero gethostbyname gettimeofday memmove memset select socket \
|
||
|
+AC_CHECK_FUNCS([bzero getaddrinfo gethostbyname gettimeofday memmove memset select socket \
|
||
|
strchr strerror strtol strtoul])
|
||
|
|
||
|
# Support for stream reset even, added on v4.11, 35ea82d611da
|
||
|
diff --git a/src/apps/myftp.c b/src/apps/myftp.c
|
||
|
index 64fa3f2..473fa03 100644
|
||
|
--- a/src/apps/myftp.c
|
||
|
+++ b/src/apps/myftp.c
|
||
|
@@ -64,11 +64,11 @@ typedef enum { COMMAND_NONE, COMMAND_RECV, COMMAND_SEND } command_t;
|
||
|
#define MAX_NUM_HOST 5
|
||
|
static char *local_host[MAX_NUM_HOST];
|
||
|
static int num_local_host = 0;
|
||
|
-static int local_port = 4444;
|
||
|
+static char *local_port = "4444";
|
||
|
|
||
|
static int buffer_size = BUFSIZE;
|
||
|
static char *remote_host = NULL;
|
||
|
-static int remote_port = 4444;
|
||
|
+static char *remote_port = "4444";
|
||
|
static command_t command = COMMAND_NONE;
|
||
|
static char *filename = NULL;
|
||
|
static int interactive = 0;
|
||
|
@@ -133,7 +133,7 @@ static int parse_arguments(int argc, char *argv[])
|
||
|
break;
|
||
|
case 2: /* local port */
|
||
|
case 'P':
|
||
|
- local_port = atoi(optarg);
|
||
|
+ local_port = optarg;
|
||
|
break;
|
||
|
case 3: /* remote host */
|
||
|
case 'h':
|
||
|
@@ -141,7 +141,7 @@ static int parse_arguments(int argc, char *argv[])
|
||
|
break;
|
||
|
case 4: /* remote port */
|
||
|
case 'p':
|
||
|
- remote_port = atoi(optarg);
|
||
|
+ remote_port = optarg;
|
||
|
break;
|
||
|
case 5:
|
||
|
case 'f':
|
||
|
@@ -236,6 +236,7 @@ emsg(char *prog,char *s)
|
||
|
|
||
|
static int build_endpoint(char *argv0)
|
||
|
{
|
||
|
+ struct addrinfo hints, *rp;
|
||
|
int retval,i;
|
||
|
|
||
|
/* Create the local endpoint. */
|
||
|
@@ -245,22 +246,19 @@ static int build_endpoint(char *argv0)
|
||
|
}
|
||
|
|
||
|
for ( i = 0;i < num_local_host;i++ ) {
|
||
|
- struct hostent *hst;
|
||
|
- struct sockaddr_in laddr;
|
||
|
-
|
||
|
- memset(&laddr, 0, sizeof(laddr));
|
||
|
/* Get the transport address for the local host name. */
|
||
|
fprintf(stderr,"Hostname %d is %s\n",i+1,local_host[i]);
|
||
|
- if ( (hst = gethostbyname(local_host[i])) == NULL ) {
|
||
|
+
|
||
|
+ memset(&hints, 0, sizeof(struct addrinfo));
|
||
|
+ hints.ai_family = AF_INET;
|
||
|
+ hints.ai_protocol = IPPROTO_SCTP;
|
||
|
+ if (getaddrinfo(local_host[i], local_port, &hints, &rp) != 0) {
|
||
|
fprintf(stderr, "%s: bad hostname: %s\n", argv0, local_host[i]);
|
||
|
exit(1);
|
||
|
}
|
||
|
- memcpy(&laddr.sin_addr, hst->h_addr_list[0],sizeof(laddr.sin_addr));
|
||
|
- laddr.sin_port = htons(local_port);
|
||
|
- laddr.sin_family = AF_INET;
|
||
|
|
||
|
/* Bind this socket to the test port. */
|
||
|
- if ( bind(retval, (struct sockaddr *)&laddr, sizeof(laddr)) ) {
|
||
|
+ if (bind(retval, rp->ai_addr, rp->ai_addrlen)) {
|
||
|
emsg(argv0,"bind");
|
||
|
exit(-1);
|
||
|
}
|
||
|
@@ -339,21 +337,19 @@ command_send(char *argv0, int sk)
|
||
|
{
|
||
|
struct msghdr outmsg;
|
||
|
struct iovec iov;
|
||
|
- struct hostent *hst;
|
||
|
- struct sockaddr_in remote_addr;
|
||
|
+ struct addrinfo hints, *rp;
|
||
|
int fd;
|
||
|
int msglen;
|
||
|
int ct;
|
||
|
|
||
|
/* Set up the destination. */
|
||
|
- hst = gethostbyname(remote_host);
|
||
|
- if (hst == NULL || hst->h_length < 1) {
|
||
|
+ memset(&hints, 0, sizeof(struct addrinfo));
|
||
|
+ hints.ai_family = AF_INET;
|
||
|
+ hints.ai_protocol = IPPROTO_SCTP;
|
||
|
+ if (getaddrinfo(remote_host, remote_port, &hints, &rp) != 0) {
|
||
|
fprintf(stderr, "%s: bad hostname: %s\n", argv0, remote_host);
|
||
|
exit(1);
|
||
|
}
|
||
|
- memcpy(&remote_addr.sin_addr, hst->h_addr_list[0], sizeof(remote_addr.sin_addr));
|
||
|
- remote_addr.sin_port = htons(remote_port);
|
||
|
- remote_addr.sin_family = AF_INET;
|
||
|
|
||
|
/* Initialize the message struct we use to pass messages to
|
||
|
* the remote socket.
|
||
|
@@ -364,8 +360,8 @@ command_send(char *argv0, int sk)
|
||
|
outmsg.msg_iovlen = 1;
|
||
|
outmsg.msg_control = NULL;
|
||
|
outmsg.msg_controllen = 0;
|
||
|
- outmsg.msg_name = &remote_addr;
|
||
|
- outmsg.msg_namelen = sizeof(remote_addr);
|
||
|
+ outmsg.msg_name = rp->ai_addr;
|
||
|
+ outmsg.msg_namelen = rp->ai_addrlen;
|
||
|
|
||
|
/* open the file */
|
||
|
if ( filename == NULL ) fd = 0;
|
||
|
--
|
||
|
2.27.0
|
||
|
|