commit d9f61e7360b09d51749dfdedceecf1c18465f23b Author: Toshaan Bharvani Date: Tue Dec 27 16:58:23 2022 +0100 initial package creation Signed-off-by: Toshaan Bharvani diff --git a/SOURCES/lksctp-tools-1.0.19-libdir.patch b/SOURCES/lksctp-tools-1.0.19-libdir.patch new file mode 100644 index 0000000..db82318 --- /dev/null +++ b/SOURCES/lksctp-tools-1.0.19-libdir.patch @@ -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} diff --git a/SOURCES/myftp-replace-use-of-deprecated-gethostbyname-with-g.patch b/SOURCES/myftp-replace-use-of-deprecated-gethostbyname-with-g.patch new file mode 100644 index 0000000..e5ddd2d --- /dev/null +++ b/SOURCES/myftp-replace-use-of-deprecated-gethostbyname-with-g.patch @@ -0,0 +1,143 @@ +From 166c26dca2a5004f83c5dbc1cb9870667fa8e301 Mon Sep 17 00:00:00 2001 +From: Xin Long +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 +Signed-off-by: Marcelo Ricardo Leitner +--- + 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 + diff --git a/SOURCES/sctp_darn-replace-use-of-deprecated-gethostbyname-wi.patch b/SOURCES/sctp_darn-replace-use-of-deprecated-gethostbyname-wi.patch new file mode 100644 index 0000000..76899e8 --- /dev/null +++ b/SOURCES/sctp_darn-replace-use-of-deprecated-gethostbyname-wi.patch @@ -0,0 +1,401 @@ +From e44ac51d213c193c894747fef6d61f521d0a7804 Mon Sep 17 00:00:00 2001 +From: Xin Long +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 +Signed-off-by: Marcelo Ricardo Leitner +--- + 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 + diff --git a/SOURCES/sctp_test-replace-use-of-deprecated-gethostbyname-wi.patch b/SOURCES/sctp_test-replace-use-of-deprecated-gethostbyname-wi.patch new file mode 100644 index 0000000..0f23490 --- /dev/null +++ b/SOURCES/sctp_test-replace-use-of-deprecated-gethostbyname-wi.patch @@ -0,0 +1,116 @@ +From ecdb9294c5dce938ef7c488404be65d23552fb18 Mon Sep 17 00:00:00 2001 +From: Xin Long +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 +Signed-off-by: Marcelo Ricardo Leitner +--- + 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 + diff --git a/SOURCES/sctp_xconnect-replace-use-of-deprecated-gethostbynam.patch b/SOURCES/sctp_xconnect-replace-use-of-deprecated-gethostbynam.patch new file mode 100644 index 0000000..b9479eb --- /dev/null +++ b/SOURCES/sctp_xconnect-replace-use-of-deprecated-gethostbynam.patch @@ -0,0 +1,156 @@ +From 469cf426bc292b6d23770ce930577c1997654229 Mon Sep 17 00:00:00 2001 +From: Xin Long +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 +Signed-off-by: Marcelo Ricardo Leitner +--- + 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 + diff --git a/SPECS/lksctp-tools.spec b/SPECS/lksctp-tools.spec new file mode 100644 index 0000000..d5e98ba --- /dev/null +++ b/SPECS/lksctp-tools.spec @@ -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 - 1.0.19-2 +- Bring back one RHEL specific patch to fix the installation issue. + Related: rhbz#2031786 + +* Wed Nov 17 2021 Xin Long - 1.0.19-1 +- Rebase to 1.0.19 and append the fixes for gethostbyname. + Related: rhbz#1982820 + +* Mon Aug 09 2021 Mohan Boddu - 1.0.18-11 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Fri Apr 16 2021 Mohan Boddu - 1.0.18-10 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Tue Jan 26 2021 Fedora Release Engineering - 1.0.18-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Sep 09 2020 Jeff Law - 1.0.18-8 +- Use symver attribute for symbol versioning. Re-enable LTO + +* Wed Aug 19 2020 Igor Raits - 1.0.18-7 +- Drop useless ldconfig scriptlets + +* Tue Jul 28 2020 Fedora Release Engineering - 1.0.18-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jul 01 2020 Jeff Law - 1.0.18-5 +- Disable LTO + +* Wed Jan 29 2020 Fedora Release Engineering - 1.0.18-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Oct 18 2019 Vit Mojzis - 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 - 1.0.16-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri Feb 01 2019 Fedora Release Engineering - 1.0.16-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Jul 13 2018 Fedora Release Engineering - 1.0.16-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu Feb 08 2018 Fedora Release Engineering - 1.0.16-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Aug 03 2017 Fedora Release Engineering - 1.0.16-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 1.0.16-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 1.0.16-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 04 2016 Fedora Release Engineering - 1.0.16-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jun 17 2015 Fedora Release Engineering - 1.0.16-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sun Aug 17 2014 Fedora Release Engineering - 1.0.16-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 1.0.16-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue May 6 2014 Peter Robinson 1.0.16-1 +- Update to 1.0.16 +- Spec cleanups + +* Sat Aug 03 2013 Fedora Release Engineering - 1.0.15-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Sun May 12 2013 Daniel Borkmann - 1.0.15-1 +- Update to 1.0.15 + +* Tue Apr 09 2013 Daniel Borkmann - 1.0.14-1 +- Update to 1.0.14 + +* Fri Jan 25 2013 Daniel Borkmann - 1.0.13-1 +- Update to 1.0.13 + +* Mon Jan 21 2013 Jan Safranek - 1.0.12-1 +- Update to 1.0.12 + +* Thu Jul 19 2012 Fedora Release Engineering - 1.0.11-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri Jan 13 2012 Fedora Release Engineering - 1.0.11-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Feb 08 2011 Fedora Release Engineering - 1.0.11-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Oct 05 2010 Parag Nemade - 1.0.11-2 +- Merge-review cleanup (#226100) + +* Tue Dec 1 2009 Jan Safranek 1.0.11-1 +- Update to 1.0.11 +- Remove rpath from compiled binaries +- Remove static libraries + +* Sat Jul 25 2009 Fedora Release Engineering - 1.0.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue Apr 14 2009 Zdenek Prikryl 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 - 1.0.9-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Wed Aug 06 2008 Zdenek Prikryl 1.0.9-1 +- Update to 1.0.9 + +* Wed Jul 16 2008 Zdenek Prikryl 1.0.8-1 +- Update to 1.0.8 + +* Wed Feb 20 2008 Fedora Release Engineering - 1.0.7-3 +- Autorebuild for GCC 4.3 + +* Wed Aug 29 2007 Karsten Hopp 1.0.7-2 +- rebuild for buildid + +* Wed Aug 08 2007 Karsten Hopp 1.0.7-1 +- update to 1.0.7 +- update license tag + +* Wed Feb 21 2007 Karsten Hopp 1.0.6-3 +- add post/postun requirements +- review fixes + +* Tue Sep 19 2006 Karsten Hopp 1.0.6-2 +- fix fileconflict (#205225) + +* Tue Jul 25 2006 Karsten Hopp 1.0.6-1 +- update to 1.0.6 + +* Wed Jul 12 2006 Jesse Keating - 1.0.5-1.fc5.2.1 +- rebuild + +* Fri Feb 10 2006 Jesse Keating - 1.0.5-1.fc5.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1.0.5-1.fc5.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Tue Jan 24 2006 Warren Togami 1.0.5-1 +- 1.0.5 + +* Fri Nov 11 2005 Matthias Saou 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 1.0.2-5 +- build with gcc-4 + +* Mon Feb 07 2005 Karsten Hopp 1.0.2-4 +- initialize variable before use +- fix subscript out of range bug (#147286) + +* Mon Jan 24 2005 Karsten Hopp 1.0.2-3 +- build for FC + +* Mon Jan 24 2005 Karsten Hopp 1.0.2-2.40E.1 +- initial RH version based on sourceforge rpm + +* Thu Dec 30 2004 Sridhar Samudrala 1.0.2-1 +- 1.0.2 Release + +* Tue May 11 2004 Sridhar Samudrala 1.0.1-1 +- 1.0.1 Release + +* Thu Feb 26 2004 Sridhar Samudrala 1.0.0-1 +- 1.0.0 Release + +* Fri Feb 6 2004 Francois-Xavier Kowalski 0.9.0-1 +- package only .txt doc files + +* Wed Feb 4 2004 Francois-Xavier Kowalski 0.7.5-1 +- badly placed & undelivered files +- simplified delivery list + +* Tue Jan 27 2004 Francois-Xavier Kowalski 0.7.5-1 +- Integrate comment from project team + +* Sat Jan 10 2004 Francois-Xavier Kowalski 2.6.0_test7_0.7.4-1 +- Creation