Toshaan Bharvani
1 year ago
commit
d9f61e7360
6 changed files with 1115 additions and 0 deletions
@ -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} |
@ -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 |
||||||
|
|
@ -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 |
||||||
|
|
@ -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 |
||||||
|
|
@ -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 |
||||||
|
|
@ -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…
Reference in new issue