You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.4 KiB
143 lines
4.4 KiB
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 |
|
|
|
|