Browse Source

initial package creation

Signed-off-by: Toshaan Bharvani <toshaan@powerel.org>
master
Toshaan Bharvani 1 year ago
commit
d9f61e7360
  1. 10
      SOURCES/lksctp-tools-1.0.19-libdir.patch
  2. 143
      SOURCES/myftp-replace-use-of-deprecated-gethostbyname-with-g.patch
  3. 401
      SOURCES/sctp_darn-replace-use-of-deprecated-gethostbyname-wi.patch
  4. 116
      SOURCES/sctp_test-replace-use-of-deprecated-gethostbyname-wi.patch
  5. 156
      SOURCES/sctp_xconnect-replace-use-of-deprecated-gethostbynam.patch
  6. 289
      SPECS/lksctp-tools.spec

10
SOURCES/lksctp-tools-1.0.19-libdir.patch

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
--- lksctp-tools-1.0.16/src/withsctp/withsctp.in.orig 2014-02-18 10:42:49.000000000 +0000
+++ lksctp-tools-1.0.16/src/withsctp/withsctp.in 2014-05-06 12:24:12.931873787 +0100
@@ -1,6 +1,6 @@
#!/bin/sh
# -*- sh -*-
-LIBDIR=@libdir@/@PACKAGE@
+LIBDIR=`rpm --eval "%{_libdir}"`/@PACKAGE@
BINDIR=@bindir@
LIBVER=@LIBWITHSCTP_CURRENT@.@LIBWITHSCTP_AGE@.@LIBWITHSCTP_REVISION@
export LD_PRELOAD=${LIBDIR}/libwithsctp.so.${LIBVER}

143
SOURCES/myftp-replace-use-of-deprecated-gethostbyname-with-g.patch

@ -0,0 +1,143 @@ @@ -0,0 +1,143 @@
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

401
SOURCES/sctp_darn-replace-use-of-deprecated-gethostbyname-wi.patch

@ -0,0 +1,401 @@ @@ -0,0 +1,401 @@
From e44ac51d213c193c894747fef6d61f521d0a7804 Mon Sep 17 00:00:00 2001
From: Xin Long <lucien.xin@gmail.com>
Date: Wed, 4 Aug 2021 07:29:16 -0400
Subject: [PATCH 4/4] sctp_darn: replace use of deprecated gethostbyname with
getaddrinfo

This patch is to replace use of deprecated gethostbyname with
getaddrinfo in the file src/apps/sctp_darn.c.

Note that different from sctp_test, sctp_darn prefers v4 address
to v6 address when getting addrinfo from hostname. To keep the
compatibility, we don't change it.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
---
configure.ac | 2 +-
src/apps/sctp_darn.c | 246 +++++++++++++------------------------------
2 files changed, 72 insertions(+), 176 deletions(-)

diff --git a/configure.ac b/configure.ac
index 8345dab..28132bf 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 getaddrinfo gethostbyname gettimeofday memmove memset select socket \
+AC_CHECK_FUNCS([bzero getaddrinfo gettimeofday memmove memset select socket \
strchr strerror strtol strtoul])
# Support for stream reset even, added on v4.11, 35ea82d611da
diff --git a/src/apps/sctp_darn.c b/src/apps/sctp_darn.c
index bcfb822..133c1c6 100644
--- a/src/apps/sctp_darn.c
+++ b/src/apps/sctp_darn.c
@@ -126,7 +126,6 @@ int if_index = 0;
sockaddr_storage_t remote_addr;
sa_family_t ra_family; /* What family is remote_addr? */
int ra_len = 0; /* How long is remote_addr? */
-void *ra_raw; /* This is the addr part of remote_addr. */
int new_connection = 1;
enum inter_cmd_num {
@@ -491,49 +490,29 @@ int
build_endpoint(char *argv0, int portnum)
{
int retval;
- struct hostent *hst;
+ struct addrinfo hints, *rp;
sockaddr_storage_t local_addr;
- sa_family_t la_family; /* What family is local_addr? */
- int la_len; /* How long is local_addr? */
- void *la_raw; /* This is the addr part of local_addr. */
int error;
struct sctp_event_subscribe subscribe;
/* Get the transport address for the local host name. */
- hst = gethostbyname(local_host);
- if (hst == NULL) {
- hst = gethostbyname2(local_host, AF_INET6);
- }
-
- if (hst == NULL || hst->h_length < 1) {
- fprintf(stderr, "%s: bad hostname: %s\n", argv0, local_host);
- exit(1);
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = AF_INET;
+ hints.ai_protocol = IPPROTO_SCTP;
+ if (getaddrinfo(local_host, NULL, &hints, &rp) != 0) {
+ hints.ai_family = AF_INET6;
+ if (getaddrinfo(local_host, NULL, &hints, &rp) != 0) {
+ fprintf(stderr, "%s: bad hostname: %s\n", argv0, local_host);
+ exit(1);
+ }
}
-
- la_family = hst->h_addrtype;
- switch (la_family) {
- case AF_INET:
- la_len = sizeof(local_addr.v4);
- la_raw = &local_addr.v4.sin_addr;
- local_addr.v4.sin_port = htons(portnum);
- local_addr.v4.sin_family = AF_INET;
- break;
- case AF_INET6:
- la_len = sizeof(local_addr.v6);
- la_raw = &local_addr.v6.sin6_addr;
- local_addr.v6.sin6_port = htons(portnum);
- local_addr.v6.sin6_family = AF_INET6;
+ memcpy(&local_addr, rp->ai_addr, rp->ai_addrlen);
+ local_addr.v4.sin_port = htons(portnum); /* equal to v6.sin6_port */
+ if (rp->ai_family == AF_INET6)
local_addr.v6.sin6_scope_id = if_index;
- break;
- default:
- fprintf(stderr, "Invalid address type.\n");
- exit(1);
- break;
- }
- memcpy(la_raw, hst->h_addr_list[0], hst->h_length);
/* Create the local endpoint. */
- retval = socket(la_family, socket_type, IPPROTO_SCTP);
+ retval = socket(rp->ai_family, socket_type, IPPROTO_SCTP);
if (retval < 0) {
fprintf(stderr, "%s: failed to create socket: %s.\n",
argv0, strerror(errno));
@@ -553,7 +532,7 @@ build_endpoint(char *argv0, int portnum)
}
/* Bind this socket to the test port. */
- error = bind(retval, &local_addr.sa, la_len);
+ error = bind(retval, &local_addr.sa, rp->ai_addrlen);
if (error != 0) {
fprintf(stderr, "%s: can not bind to %s:%d: %s.\n",
argv0, local_host, portnum,
@@ -778,7 +757,7 @@ command_send(char *argv0, int *skp)
struct iovec iov;
int done = 0;
char message[REALLY_BIG];
- struct hostent *hst;
+ struct addrinfo hints, *rp;
int c;
struct sockaddr *addrs;
int msglen;
@@ -787,38 +766,21 @@ command_send(char *argv0, int *skp)
/* Set up the destination. */
if (remote_host != NULL) {
- hst = gethostbyname(remote_host);
- if (hst == NULL) {
- hst = gethostbyname2(remote_host, AF_INET6);
- }
-
- if (hst == NULL || hst->h_length < 1) {
- fprintf(stderr, "%s: bad hostname: %s\n",
- argv0, remote_host);
- exit(1);
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = AF_INET;
+ hints.ai_protocol = IPPROTO_SCTP;
+ if (getaddrinfo(remote_host, NULL, &hints, &rp) != 0) {
+ hints.ai_family = AF_INET6;
+ if (getaddrinfo(remote_host, NULL, &hints, &rp) != 0) {
+ fprintf(stderr, "%s: bad hostname: %s\n", argv0, remote_host);
+ exit(1);
+ }
}
-
- ra_family = hst->h_addrtype;
- switch (ra_family) {
- case AF_INET:
- ra_len = sizeof(remote_addr.v4);
- ra_raw = &remote_addr.v4.sin_addr;
- remote_addr.v4.sin_port = htons(remote_port);
- remote_addr.v4.sin_family = AF_INET;
- break;
- case AF_INET6:
- ra_len = sizeof(remote_addr.v6);
- ra_raw = &remote_addr.v6.sin6_addr;
- remote_addr.v6.sin6_port = htons(remote_port);
- remote_addr.v6.sin6_family = AF_INET6;
+ memcpy(&remote_addr, rp->ai_addr, rp->ai_addrlen);
+ remote_addr.v4.sin_port = htons(remote_port); /* equal to v6.sin6_port */
+ if (rp->ai_family == AF_INET6)
remote_addr.v6.sin6_scope_id = if_index;
- break;
- default:
- fprintf(stderr, "Invalid address type.\n");
- exit(1);
- break;
- }
- memcpy(ra_raw, hst->h_addr_list[0], hst->h_length);
+ ra_len = rp->ai_addrlen;
}
/* Initialize the global value for interactive mode functions. */
@@ -1041,7 +1003,7 @@ command_poll(char *argv0)
fd_set *xbitsp = NULL;
struct msghdr outmsg;
- struct hostent *hst;
+ struct addrinfo hints, *rp;
int msglen;
int temp_fd, temp_set;
@@ -1050,38 +1012,20 @@ command_poll(char *argv0)
/* If a remote host is specified, initialize the destination. */
if (remote_host) {
/* Set up the destination. */
- hst = gethostbyname(remote_host);
- if (hst == NULL) {
- hst = gethostbyname2(remote_host, AF_INET6);
- }
-
- if (hst == NULL || hst->h_length < 1) {
- fprintf(stderr, "%s: bad hostname: %s\n",
- argv0, remote_host);
- exit(1);
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = AF_INET;
+ hints.ai_protocol = IPPROTO_SCTP;
+ if (getaddrinfo(remote_host, NULL, &hints, &rp) != 0) {
+ hints.ai_family = AF_INET6;
+ if (getaddrinfo(remote_host, NULL, &hints, &rp) != 0) {
+ fprintf(stderr, "%s: bad hostname: %s\n", argv0, remote_host);
+ exit(1);
+ }
}
-
- ra_family = hst->h_addrtype;
- switch (ra_family) {
- case AF_INET:
- ra_len = sizeof(remote_addr.v4);
- ra_raw = &remote_addr.v4.sin_addr;
- remote_addr.v4.sin_port = htons(remote_port);
- remote_addr.v4.sin_family = AF_INET;
- break;
- case AF_INET6:
- ra_len = sizeof(remote_addr.v6);
- ra_raw = &remote_addr.v6.sin6_addr;
- remote_addr.v6.sin6_port = htons(remote_port);
- remote_addr.v6.sin6_family = AF_INET6;
+ memcpy(&remote_addr, rp->ai_addr, rp->ai_addrlen);
+ remote_addr.v4.sin_port = htons(remote_port); /* equal to v6.sin6_port */
+ if (rp->ai_family == AF_INET6)
remote_addr.v6.sin6_scope_id = if_index;
- break;
- default:
- fprintf(stderr, "Invalid address type.\n");
- exit(1);
- break;
- }
- memcpy(ra_raw, hst->h_addr_list[0], hst->h_length);
/* Initialize the message struct we use to pass messages to
* the remote socket.
@@ -1091,7 +1035,7 @@ command_poll(char *argv0)
outmsg.msg_control = NULL;
outmsg.msg_controllen = 0;
outmsg.msg_name = &remote_addr;
- outmsg.msg_namelen = ra_len;
+ outmsg.msg_namelen = rp->ai_addrlen;
outmsg.msg_flags = 0;
}
@@ -1406,14 +1350,11 @@ struct sockaddr *
append_addr(const char *parm, struct sockaddr *addrs, int *ret_count)
{
struct sockaddr *new_addrs = NULL;
+ struct addrinfo hints, *res, *rp;
void *aptr;
struct sockaddr *sa_addr;
struct sockaddr_in *b4ap;
struct sockaddr_in6 *b6ap;
- struct hostent *hst4 = NULL;
- struct hostent *hst6 = NULL;
- int i4 = 0;
- int i6 = 0;
int j;
int orig_count = *ret_count;
int count = orig_count;
@@ -1421,28 +1362,17 @@ append_addr(const char *parm, struct sockaddr *addrs, int *ret_count)
if (!parm)
return NULL;
- /* Get the entries for this host. */
- hst4 = gethostbyname(parm);
- hst6 = gethostbyname2(parm, AF_INET6);
- if ((NULL == hst4 || hst4->h_length < 1)
- && (NULL == hst6 || hst6->h_length < 1)) {
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_protocol = IPPROTO_SCTP;
+ if (getaddrinfo(parm, NULL, &hints, &res) != 0) {
fprintf(stderr, "bad hostname: %s\n", parm);
goto finally;
}
-
- /* Figure out the number of addresses. */
- if (NULL != hst4) {
- for (i4 = 0; NULL != hst4->h_addr_list[i4]; ++i4) {
- count++;
- }
- }
- if (NULL != hst6) {
- for (i6 = 0; NULL != hst6->h_addr_list[i6]; ++i6) {
- count++;
- }
- }
+ for (rp = res; rp != NULL; rp = rp->ai_next)
+ count++;
/* Expand memory for the new addresses. Assume all the addresses
* are v6 addresses.
@@ -1473,31 +1403,14 @@ append_addr(const char *parm, struct sockaddr *addrs, int *ret_count)
}
/* Put the new addresses away. */
- if (NULL != hst4) {
- for (j = 0; j < i4; ++j) {
- b4ap = (struct sockaddr_in *)aptr;
- memset(b4ap, 0x00, sizeof(*b4ap));
- b4ap->sin_family = AF_INET;
- b4ap->sin_port = htons(local_port);
- bcopy(hst4->h_addr_list[j], &b4ap->sin_addr,
- hst4->h_length);
-
- aptr += sizeof(struct sockaddr_in);
- } /* for (loop through the new v4 addresses) */
- }
-
- if (NULL != hst6) {
- for (j = 0; j < i6; ++j) {
- b6ap = (struct sockaddr_in6 *)aptr;
- memset(b6ap, 0x00, sizeof(*b6ap));
- b6ap->sin6_family = AF_INET6;
- b6ap->sin6_port = htons(local_port);
+ for (rp = res; rp != NULL; rp = rp->ai_next) {
+ b4ap = (struct sockaddr_in *)aptr;
+ b6ap = (struct sockaddr_in6 *)aptr;
+ bcopy(rp->ai_addr, aptr, rp->ai_addrlen);
+ b4ap->sin_port = htons(local_port); /* equal to b6ap.v6.sin6_port */
+ if (rp->ai_family == AF_INET6)
b6ap->sin6_scope_id = if_index;
- bcopy(hst6->h_addr_list[j], &b6ap->sin6_addr,
- hst6->h_length);
-
- aptr += sizeof(struct sockaddr_in6);
- } /* for (loop through the new v6 addresses) */
+ aptr += rp->ai_addrlen;
}
finally:
@@ -2123,7 +2036,7 @@ shutdown_func(char *argv0, int *skp, int shutdown_type)
struct cmsghdr *cmsg;
int error=0, bytes_sent;
struct sctp_sndrcvinfo *sinfo;
- struct hostent *hst;
+ struct addrinfo hints, *rp;
char *sd_type;
int sk = *skp;
@@ -2142,37 +2055,20 @@ shutdown_func(char *argv0, int *skp, int shutdown_type)
if (socket_type == SOCK_SEQPACKET) {
/* Set up the destination. */
if (remote_host) {
- hst = gethostbyname(remote_host);
- if (hst == NULL) {
- hst = gethostbyname2(remote_host, AF_INET6);
- }
-
- if (hst == NULL || hst->h_length < 1) {
- fprintf(stderr, "%s: bad hostname: %s\n",
- argv0, remote_host);
- exit(1);
- }
-
- ra_family = hst->h_addrtype;
- switch (ra_family) {
- case AF_INET:
- ra_len = sizeof(remote_addr.v4);
- ra_raw = &remote_addr.v4.sin_addr;
- remote_addr.v4.sin_port = htons(remote_port);
- remote_addr.v4.sin_family = AF_INET;
- break;
- case AF_INET6:
- ra_len = sizeof(remote_addr.v6);
- ra_raw = &remote_addr.v6.sin6_addr;
- remote_addr.v6.sin6_port = htons(remote_port);
- remote_addr.v6.sin6_family = AF_INET6;
- break;
- default:
- fprintf(stderr, "Invalid address type.\n");
- exit(1);
- break;
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = AF_INET;
+ hints.ai_protocol = IPPROTO_SCTP;
+ if (getaddrinfo(remote_host, NULL, &hints, &rp) != 0) {
+ hints.ai_family = AF_INET6;
+ if (getaddrinfo(remote_host, NULL, &hints, &rp) != 0) {
+ fprintf(stderr, "%s: bad hostname: %s\n",
+ argv0, remote_host);
+ exit(1);
+ }
}
- memcpy(ra_raw, hst->h_addr_list[0], hst->h_length);
+ memcpy(&remote_addr, rp->ai_addr, rp->ai_addrlen);
+ remote_addr.v4.sin_port = htons(remote_port); /* equal to v6.sin6_port */
+ ra_len = rp->ai_addrlen;
}
/* Initialize the message struct we use to pass messages to
--
2.27.0

116
SOURCES/sctp_test-replace-use-of-deprecated-gethostbyname-wi.patch

@ -0,0 +1,116 @@ @@ -0,0 +1,116 @@
From ecdb9294c5dce938ef7c488404be65d23552fb18 Mon Sep 17 00:00:00 2001
From: Xin Long <lucien.xin@gmail.com>
Date: Wed, 4 Aug 2021 07:29:15 -0400
Subject: [PATCH 3/4] sctp_test: replace use of deprecated gethostbyname with
getaddrinfo

This patch is to replace use of deprecated gethostbyname with
getaddrinfo in the file src/apps/sctp_test.c.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
---
src/apps/sctp_test.c | 63 +++++++++++---------------------------------
1 file changed, 16 insertions(+), 47 deletions(-)

diff --git a/src/apps/sctp_test.c b/src/apps/sctp_test.c
index cd7654b..e382804 100644
--- a/src/apps/sctp_test.c
+++ b/src/apps/sctp_test.c
@@ -487,14 +487,11 @@ struct sockaddr *
append_addr(const char *parm, struct sockaddr *addrs, int *ret_count)
{
struct sockaddr *new_addrs = NULL;
+ struct addrinfo hints, *res, *rp;
void *aptr;
struct sockaddr *sa_addr;
struct sockaddr_in *b4ap;
struct sockaddr_in6 *b6ap;
- struct hostent *hst4 = NULL;
- struct hostent *hst6 = NULL;
- int i4 = 0;
- int i6 = 0;
int j;
int orig_count = *ret_count;
int count = orig_count;
@@ -514,27 +511,16 @@ append_addr(const char *parm, struct sockaddr *addrs, int *ret_count)
}
}
- /* Get the entries for this host. */
- hst4 = gethostbyname(ipaddr);
- hst6 = gethostbyname2(ipaddr, AF_INET6);
-
- if ((NULL == hst4 || hst4->h_length < 1)
- && (NULL == hst6 || hst6->h_length < 1)) {
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_protocol = IPPROTO_SCTP;
+ if (getaddrinfo(ipaddr, NULL, &hints, &res) != 0) {
fprintf(stderr, "bad hostname: %s\n", ipaddr);
goto finally;
}
- /* Figure out the number of addresses. */
- if (NULL != hst4) {
- for (i4 = 0; NULL != hst4->h_addr_list[i4]; ++i4) {
- count++;
- }
- }
- if (NULL != hst6) {
- for (i6 = 0; NULL != hst6->h_addr_list[i6]; ++i6) {
- count++;
- }
- }
+ for (rp = res; rp != NULL; rp = rp->ai_next)
+ count++;
/* Expand memory for the new addresses. Assume all the addresses
* are v6 addresses.
@@ -565,34 +551,17 @@ append_addr(const char *parm, struct sockaddr *addrs, int *ret_count)
}
/* Put the new addresses away. */
- if (NULL != hst4) {
- for (j = 0; j < i4; ++j) {
- b4ap = (struct sockaddr_in *)aptr;
- memset(b4ap, 0x00, sizeof(*b4ap));
- b4ap->sin_family = AF_INET;
- b4ap->sin_port = htons(local_port);
- bcopy(hst4->h_addr_list[j], &b4ap->sin_addr,
- hst4->h_length);
-
- aptr += sizeof(struct sockaddr_in);
- } /* for (loop through the new v4 addresses) */
- }
-
- if (NULL != hst6) {
- for (j = 0; j < i6; ++j) {
- b6ap = (struct sockaddr_in6 *)aptr;
- memset(b6ap, 0x00, sizeof(*b6ap));
- b6ap->sin6_family = AF_INET6;
- b6ap->sin6_port = htons(local_port);
+ for (rp = res; rp != NULL; rp = rp->ai_next) {
+ b4ap = (struct sockaddr_in *)aptr;
+ b6ap = (struct sockaddr_in6 *)aptr;
+ bcopy(rp->ai_addr, aptr, rp->ai_addrlen);
+ b4ap->sin_port = htons(local_port); /* equal to b6ap.v6.sin6_port */
+ if (rp->ai_family == AF_INET6) {
b6ap->sin6_scope_id = if_index;
- bcopy(hst6->h_addr_list[j], &b6ap->sin6_addr,
- hst6->h_length);
- if (!ifindex) {
+ if (!ifindex)
b6ap->sin6_scope_id = ifindex;
- }
-
- aptr += sizeof(struct sockaddr_in6);
- } /* for (loop through the new v6 addresses) */
+ }
+ aptr += rp->ai_addrlen;
}
finally:
--
2.27.0

156
SOURCES/sctp_xconnect-replace-use-of-deprecated-gethostbynam.patch

@ -0,0 +1,156 @@ @@ -0,0 +1,156 @@
From 469cf426bc292b6d23770ce930577c1997654229 Mon Sep 17 00:00:00 2001
From: Xin Long <lucien.xin@gmail.com>
Date: Wed, 4 Aug 2021 07:29:14 -0400
Subject: [PATCH 2/4] sctp_xconnect: replace use of deprecated gethostbyname
with getaddrinfo

This patch is to replace use of deprecated gethostbyname with
getaddrinfo in the file src/apps/sctp_xconnect.c.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
---
src/apps/sctp_xconnect.c | 72 +++++++++++++++++-----------------------
1 file changed, 31 insertions(+), 41 deletions(-)

diff --git a/src/apps/sctp_xconnect.c b/src/apps/sctp_xconnect.c
index 6759c0e..5cd1049 100644
--- a/src/apps/sctp_xconnect.c
+++ b/src/apps/sctp_xconnect.c
@@ -63,13 +63,13 @@ int TST_CNT = 0;
int mode = NOT_DEFINED;
-int assoc_num,
- remote_port,
- local_port;
+int assoc_num;
int active = 0;
-char *local_host = NULL;
-char *remote_host = NULL;
+char *local_host;
+char *remote_host;
+char *local_port;
+char *remote_port;
sockaddr_storage_t client_loop,
server_loop;
struct hostent *hst;
@@ -102,6 +102,7 @@ void usage(char *argv0)
/* Parse command line options */
void parse_arguments(int argc, char*argv[]) {
+ struct addrinfo hints, *rp;
int c;
while ((c = getopt(argc, argv, ":H:P:ach:ln:p:")) >= 0) {
@@ -110,7 +111,7 @@ void parse_arguments(int argc, char*argv[]) {
local_host = optarg;
break;
case 'P':
- local_port = atoi(optarg);
+ local_port = optarg;
break;
case 'c':
if (mode == NOT_DEFINED)
@@ -138,7 +139,7 @@ void parse_arguments(int argc, char*argv[]) {
assoc_num = atoi(optarg);
break;
case 'p':
- remote_port = atoi(optarg);
+ remote_port = optarg;
break;
default:
usage(argv[0]);
@@ -146,6 +147,9 @@ void parse_arguments(int argc, char*argv[]) {
}
} /* while() */
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = AF_INET;
+ hints.ai_protocol = IPPROTO_SCTP;
if (mode == CLIENT) {
if (assoc_num) {
if (assoc_num > MAXCLIENTNUM) {
@@ -160,13 +164,13 @@ void parse_arguments(int argc, char*argv[]) {
assoc_num = 1;
if (remote_host && remote_port) {
- hst = gethostbyname(remote_host);
-
- memcpy(&server_loop.v4.sin_addr, hst->h_addr_list[0],
- sizeof(server_loop.v4.sin_addr));
-
- server_loop.v4.sin_family = AF_INET;
-server_loop.v4.sin_port = htons(remote_port);
+ if (getaddrinfo(remote_host, remote_port, &hints, &rp) != 0) {
+ printf("%s: bad remote hostname or port: %s, %s\n",
+ argv[0], remote_host, remote_port);
+ usage(argv[0]);
+ exit(0);
+ }
+ memcpy(&server_loop, rp->ai_addr, rp->ai_addrlen);
} else {
printf("Remote host and remote port must be defined "
"in client mode\n");
@@ -174,20 +178,12 @@ server_loop.v4.sin_port = htons(remote_port);
exit(0);
}
- if (local_host) {
- hst = gethostbyname(local_host);
-
- memcpy(&client_loop.v4.sin_addr, hst->h_addr_list[0],
- sizeof(client_loop.v4.sin_addr));
- } else
- client_loop.v4.sin_addr.s_addr = INADDR_ANY;
-
- if (local_port)
- client_loop.v4.sin_port = htons(local_port);
- else
- client_loop.v4.sin_port = 0;
-
- client_loop.v4.sin_family = AF_INET;
+ if (getaddrinfo(local_host, local_port, &hints, &rp) != 0) {
+ printf("%s: bad local hostname or port: %s, %s\n",
+ argv[0], local_host, local_port);
+ exit(0);
+ }
+ memcpy(&client_loop, rp->ai_addr, rp->ai_addrlen);
} else if (mode == SERVER) {
if (active) {
printf("This option if for client use only");
@@ -201,23 +197,17 @@ server_loop.v4.sin_port = htons(remote_port);
exit(0);
}
- if (local_host) {
- hst = gethostbyname(local_host);
-
- memcpy(&server_loop.v4.sin_addr, hst->h_addr_list[0],
- sizeof(server_loop.v4.sin_addr));
- } else
- server_loop.v4.sin_addr.s_addr = INADDR_ANY;
-
- if (local_port)
- server_loop.v4.sin_port = htons(local_port);
- else {
+ if (!local_port) {
printf("Specify a local port in server mode.\n");
usage(argv[0]);
exit(0);
}
-
- server_loop.v4.sin_family = AF_INET;
+ if (getaddrinfo(local_host, local_port, &hints, &rp) != 0) {
+ printf("%s: bad local hostname or port: %s, %s\n",
+ argv[0], local_host, local_port);
+ exit(0);
+ }
+ memcpy(&server_loop, rp->ai_addr, rp->ai_addrlen);
} else {
printf("Must assisgn a client or server mode.\n");
usage(argv[0]);
--
2.27.0

289
SPECS/lksctp-tools.spec

@ -0,0 +1,289 @@ @@ -0,0 +1,289 @@
Name: lksctp-tools
Summary: User-space access to Linux Kernel SCTP
Version: 1.0.19
Release: 2%{?dist}
# src/apps/bindx_test.C is GPLv2, I've asked upstream for clarification
License: GPLv2 and GPLv2+ and LGPLv2 and MIT
Group: System Environment/Libraries
URL: http://lksctp.sourceforge.net

Source0: https://github.com/sctp/lksctp-tools/archive/%{name}-%{version}.tar.gz
Patch0: lksctp-tools-1.0.19-libdir.patch
Patch1: myftp-replace-use-of-deprecated-gethostbyname-with-g.patch
Patch2: sctp_xconnect-replace-use-of-deprecated-gethostbynam.patch
Patch3: sctp_test-replace-use-of-deprecated-gethostbyname-wi.patch
Patch4: sctp_darn-replace-use-of-deprecated-gethostbyname-wi.patch
BuildRequires: libtool, automake, autoconf, make

%description
This is the lksctp-tools package for Linux Kernel SCTP (Stream Control
Transmission Protocol) Reference Implementation.

This package is intended to supplement the Linux Kernel SCTP Reference
Implementation now available in the Linux kernel source tree in
versions 2.5.36 and following. For more information on LKSCTP see the
package documentation README file, section titled "LKSCTP - Linux
Kernel SCTP."

This package contains the base run-time library and command-line tools.

%package devel
Summary: Development files for lksctp-tools
Group: Development/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}

%description devel
Development files for lksctp-tools which include man pages, header files,
static libraries, symlinks to dynamic libraries and some tutorial source code.

%package doc
Summary: Documents pertaining to SCTP
Group: System Environment/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}

%description doc
Documents pertaining to LKSCTP & SCTP in general (IETF RFC's & Internet
Drafts).

%prep
%setup -q -n %{name}-%{name}-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1

%build
[ ! -x ./configure ] && sh bootstrap
%configure --disable-static
# remove rpath from libtool
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool

%make_build

%install
rm -f doc/rfc2960.txt doc/states.txt
%make_install

find $RPM_BUILD_ROOT -type f -name "*.la" -delete

%files
%doc AUTHORS ChangeLog COPYING* README
%{_bindir}/*
%{_libdir}/libsctp.so.1*
%dir %{_libdir}/lksctp-tools/
%{_libdir}/lksctp-tools/libwithsctp.so.1*
%{_mandir}/man7/*

%files devel
%{_includedir}/*
%{_libdir}/libsctp.so
%{_libdir}/pkgconfig/libsctp.pc
%{_libdir}/lksctp-tools/libwithsctp.so
%{_datadir}/lksctp-tools/
%{_mandir}/man3/*

%files doc
%doc doc/*.txt

%changelog
* Tue Apr 12 2022 Xin Long <lxin@redhat.com> - 1.0.19-2
- Bring back one RHEL specific patch to fix the installation issue.
Related: rhbz#2031786

* Wed Nov 17 2021 Xin Long <lxin@redhat.com> - 1.0.19-1
- Rebase to 1.0.19 and append the fixes for gethostbyname.
Related: rhbz#1982820

* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1.0.18-11
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688

* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.0.18-10
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937

* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.18-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild

* Wed Sep 09 2020 Jeff Law <law@redhat.com> - 1.0.18-8
- Use symver attribute for symbol versioning. Re-enable LTO

* Wed Aug 19 2020 Igor Raits <ignatenkobrain@fedoraproject.org> - 1.0.18-7
- Drop useless ldconfig scriptlets

* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.18-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild

* Wed Jul 01 2020 Jeff Law <law@redhat.com> - 1.0.18-5
- Disable LTO

* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.18-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild

* Fri Oct 18 2019 Vit Mojzis <vmojzis@redhat.com> - 1.0.18-3
- Added a patch to fix netinet/sctp.h not to be installed.
- Added some fixes for kernel feature detection.
- Updated to 1.0.18. [1568622]

* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.16-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild

* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.16-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild

* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.16-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild

* Thu Feb 08 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.16-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild

* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.16-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild

* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.16-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild

* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.16-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild

* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.16-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild

* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.16-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild

* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.16-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild

* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.16-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild

* Tue May 6 2014 Peter Robinson <pbrobinson@fedoraproject.org> 1.0.16-1
- Update to 1.0.16
- Spec cleanups

* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.15-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild

* Sun May 12 2013 Daniel Borkmann <dborkman@redhat.com> - 1.0.15-1
- Update to 1.0.15

* Tue Apr 09 2013 Daniel Borkmann <dborkman@redhat.com> - 1.0.14-1
- Update to 1.0.14

* Fri Jan 25 2013 Daniel Borkmann <dborkman@redhat.com> - 1.0.13-1
- Update to 1.0.13

* Mon Jan 21 2013 Jan Safranek <jsafrane@redhat.com> - 1.0.12-1
- Update to 1.0.12

* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.11-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild

* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.11-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild

* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.11-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild

* Tue Oct 05 2010 Parag Nemade <paragn AT fedoraproject.org> - 1.0.11-2
- Merge-review cleanup (#226100)

* Tue Dec 1 2009 Jan Safranek <jsafrane@redhat.com> 1.0.11-1
- Update to 1.0.11
- Remove rpath from compiled binaries
- Remove static libraries

* Sat Jul 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.10-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild

* Tue Apr 14 2009 Zdenek Prikryl <zprikryl@redhat.com> 1.0.10-1
- added release tag to Requires of devel and doc packages (#492531)
- Update to 1.0.10

* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.9-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild

* Wed Aug 06 2008 Zdenek Prikryl <zprikryl@redhat.com> 1.0.9-1
- Update to 1.0.9

* Wed Jul 16 2008 Zdenek Prikryl <zprikryl@redhat.com> 1.0.8-1
- Update to 1.0.8

* Wed Feb 20 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 1.0.7-3
- Autorebuild for GCC 4.3

* Wed Aug 29 2007 Karsten Hopp <karsten@redhat.com> 1.0.7-2
- rebuild for buildid

* Wed Aug 08 2007 Karsten Hopp <karsten@redhat.com> 1.0.7-1
- update to 1.0.7
- update license tag

* Wed Feb 21 2007 Karsten Hopp <karsten@redhat.com> 1.0.6-3
- add post/postun requirements
- review fixes

* Tue Sep 19 2006 Karsten Hopp <karsten@redhat.de> 1.0.6-2
- fix fileconflict (#205225)

* Tue Jul 25 2006 Karsten Hopp <karsten@redhat.de> 1.0.6-1
- update to 1.0.6

* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 1.0.5-1.fc5.2.1
- rebuild

* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 1.0.5-1.fc5.2
- bump again for double-long bug on ppc(64)

* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 1.0.5-1.fc5.1
- rebuilt for new gcc4.1 snapshot and glibc changes

* Tue Jan 24 2006 Warren Togami <wtogami@redhat.com> 1.0.5-1
- 1.0.5

* Fri Nov 11 2005 Matthias Saou <http://freshrpms.net/> 1.0.4-1
- Update to 1.0.4.
- Update syntax patch.
- Execute bootstrap if no configure script is found.
- Don't own entire man? directories.
- Own data and lib lksctp-tools directories.
- Move devel libs in _libdir/lksctp-tools/ to devel package.
- Exclude .la files.
- Minor spec file cleanups.

* Wed Mar 02 2005 Karsten Hopp <karsten@redhat.de> 1.0.2-5
- build with gcc-4

* Mon Feb 07 2005 Karsten Hopp <karsten@redhat.de> 1.0.2-4
- initialize variable before use
- fix subscript out of range bug (#147286)

* Mon Jan 24 2005 Karsten Hopp <karsten@redhat.de> 1.0.2-3
- build for FC

* Mon Jan 24 2005 Karsten Hopp <karsten@redhat.de> 1.0.2-2.40E.1
- initial RH version based on sourceforge rpm

* Thu Dec 30 2004 Sridhar Samudrala <sri@us.ibm.com> 1.0.2-1
- 1.0.2 Release

* Tue May 11 2004 Sridhar Samudrala <sri@us.ibm.com> 1.0.1-1
- 1.0.1 Release

* Thu Feb 26 2004 Sridhar Samudrala <sri@us.ibm.com> 1.0.0-1
- 1.0.0 Release

* Fri Feb 6 2004 Francois-Xavier Kowalski <francois-xavier.kowalski@hp.com> 0.9.0-1
- package only .txt doc files

* Wed Feb 4 2004 Francois-Xavier Kowalski <francois-xavier.kowalski@hp.com> 0.7.5-1
- badly placed & undelivered files
- simplified delivery list

* Tue Jan 27 2004 Francois-Xavier Kowalski <francois-xavier.kowalski@hp.com> 0.7.5-1
- Integrate comment from project team

* Sat Jan 10 2004 Francois-Xavier Kowalski <francois-xavier.kowalski@hp.com> 2.6.0_test7_0.7.4-1
- Creation
Loading…
Cancel
Save