summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordoug <>2015-01-03 18:07:29 +0000
committerdoug <>2015-01-03 18:07:29 +0000
commit919ac61b86380814cf1aa68d10ccb1b5bed747af (patch)
tree1a682c1fdd2a7e05c5dde4ef08c70ba98577cbdd
parent3a71bbcdc4f61edf763302e9f0114aa00ce81b97 (diff)
downloadopenbsd-919ac61b86380814cf1aa68d10ccb1b5bed747af.tar.gz
openbsd-919ac61b86380814cf1aa68d10ccb1b5bed747af.tar.bz2
openbsd-919ac61b86380814cf1aa68d10ccb1b5bed747af.zip
Fix incorrect OPENSSL_assert() usage.
Instead of asserting, return an error code for I/O errors. This is based on OpenSSL commit 2521fcd8527008ceb3e4748f95b0ed4e2d70cfef. Added checks for two calloc()s while I'm here. ok miod@
-rw-r--r--src/lib/libcrypto/bio/bss_dgram.c77
-rw-r--r--src/lib/libssl/src/crypto/bio/bss_dgram.c77
2 files changed, 106 insertions, 48 deletions
diff --git a/src/lib/libcrypto/bio/bss_dgram.c b/src/lib/libcrypto/bio/bss_dgram.c
index 2e17dc9e21..c6b552eb32 100644
--- a/src/lib/libcrypto/bio/bss_dgram.c
+++ b/src/lib/libcrypto/bio/bss_dgram.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: bss_dgram.c,v 1.37 2014/11/26 05:41:44 bcook Exp $ */ 1/* $OpenBSD: bss_dgram.c,v 1.38 2015/01/03 18:07:29 doug Exp $ */
2/* 2/*
3 * DTLS implementation written by Nagendra Modadugu 3 * DTLS implementation written by Nagendra Modadugu
4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. 4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
@@ -719,18 +719,25 @@ BIO_new_dgram_sctp(int fd, int close_flag)
719 /* Activate SCTP-AUTH for DATA and FORWARD-TSN chunks */ 719 /* Activate SCTP-AUTH for DATA and FORWARD-TSN chunks */
720 auth.sauth_chunk = OPENSSL_SCTP_DATA_CHUNK_TYPE; 720 auth.sauth_chunk = OPENSSL_SCTP_DATA_CHUNK_TYPE;
721 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_AUTH_CHUNK, &auth, sizeof(struct sctp_authchunk)); 721 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_AUTH_CHUNK, &auth, sizeof(struct sctp_authchunk));
722 OPENSSL_assert(ret >= 0); 722 if (ret < 0)
723 goto err;
723 auth.sauth_chunk = OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE; 724 auth.sauth_chunk = OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE;
724 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_AUTH_CHUNK, &auth, sizeof(struct sctp_authchunk)); 725 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_AUTH_CHUNK, &auth, sizeof(struct sctp_authchunk));
725 OPENSSL_assert(ret >= 0); 726 if (ret < 0)
727 goto err;
726 728
727 /* Test if activation was successful. When using accept(), 729 /* Test if activation was successful. When using accept(),
728 * SCTP-AUTH has to be activated for the listening socket 730 * SCTP-AUTH has to be activated for the listening socket
729 * already, otherwise the connected socket won't use it. */ 731 * already, otherwise the connected socket won't use it. */
730 sockopt_len = (socklen_t)(sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t)); 732 sockopt_len = (socklen_t)(sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t));
731 authchunks = calloc(1, sockopt_len); 733 authchunks = calloc(1, sockopt_len);
734 if (authchunks == NULL)
735 goto err;
732 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len); 736 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len);
733 OPENSSL_assert(ret >= 0); 737 if (ret < 0) {
738 free(authchunks);
739 goto err;
740 }
734 741
735 for (p = (unsigned char*) authchunks->gauth_chunks; 742 for (p = (unsigned char*) authchunks->gauth_chunks;
736 p < (unsigned char*) authchunks + sockopt_len; 743 p < (unsigned char*) authchunks + sockopt_len;
@@ -753,16 +760,19 @@ BIO_new_dgram_sctp(int fd, int close_flag)
753 event.se_type = SCTP_AUTHENTICATION_EVENT; 760 event.se_type = SCTP_AUTHENTICATION_EVENT;
754 event.se_on = 1; 761 event.se_on = 1;
755 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_EVENT, &event, sizeof(struct sctp_event)); 762 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_EVENT, &event, sizeof(struct sctp_event));
756 OPENSSL_assert(ret >= 0); 763 if (ret < 0)
764 goto err;
757#else 765#else
758 sockopt_len = (socklen_t) sizeof(struct sctp_event_subscribe); 766 sockopt_len = (socklen_t) sizeof(struct sctp_event_subscribe);
759 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event, &sockopt_len); 767 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event, &sockopt_len);
760 OPENSSL_assert(ret >= 0); 768 if (ret < 0)
769 goto err;
761 770
762 event.sctp_authentication_event = 1; 771 event.sctp_authentication_event = 1;
763 772
764 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(struct sctp_event_subscribe)); 773 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(struct sctp_event_subscribe));
765 OPENSSL_assert(ret >= 0); 774 if (ret < 0)
775 goto err;
766#endif 776#endif
767#endif 777#endif
768 778
@@ -770,9 +780,14 @@ BIO_new_dgram_sctp(int fd, int close_flag)
770 * larger than the max record size of 2^14 + 2048 + 13 780 * larger than the max record size of 2^14 + 2048 + 13
771 */ 781 */
772 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_PARTIAL_DELIVERY_POINT, &optval, sizeof(optval)); 782 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_PARTIAL_DELIVERY_POINT, &optval, sizeof(optval));
773 OPENSSL_assert(ret >= 0); 783 if (ret < 0)
784 goto err;
774 785
775 return (bio); 786 return (bio);
787
788err:
789 BIO_vfree(bio);
790 return (NULL);
776} 791}
777 792
778int 793int
@@ -929,16 +944,25 @@ dgram_sctp_read(BIO *b, char *out, int outl)
929 event.se_type = SCTP_SENDER_DRY_EVENT; 944 event.se_type = SCTP_SENDER_DRY_EVENT;
930 event.se_on = 0; 945 event.se_on = 0;
931 i = setsockopt(b->num, IPPROTO_SCTP, SCTP_EVENT, &event, sizeof(struct sctp_event)); 946 i = setsockopt(b->num, IPPROTO_SCTP, SCTP_EVENT, &event, sizeof(struct sctp_event));
932 OPENSSL_assert(i >= 0); 947 if (i < 0) {
948 ret = i;
949 break;
950 }
933#else 951#else
934 eventsize = sizeof(struct sctp_event_subscribe); 952 eventsize = sizeof(struct sctp_event_subscribe);
935 i = getsockopt(b->num, IPPROTO_SCTP, SCTP_EVENTS, &event, &eventsize); 953 i = getsockopt(b->num, IPPROTO_SCTP, SCTP_EVENTS, &event, &eventsize);
936 OPENSSL_assert(i >= 0); 954 if (i < 0) {
955 ret = i;
956 break;
957 }
937 958
938 event.sctp_sender_dry_event = 0; 959 event.sctp_sender_dry_event = 0;
939 960
940 i = setsockopt(b->num, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(struct sctp_event_subscribe)); 961 i = setsockopt(b->num, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(struct sctp_event_subscribe));
941 OPENSSL_assert(i >= 0); 962 if (i < 0) {
963 ret = i;
964 break;
965 }
942#endif 966#endif
943 } 967 }
944 968
@@ -969,8 +993,8 @@ dgram_sctp_read(BIO *b, char *out, int outl)
969 */ 993 */
970 optlen = (socklen_t) sizeof(int); 994 optlen = (socklen_t) sizeof(int);
971 ret = getsockopt(b->num, SOL_SOCKET, SO_RCVBUF, &optval, &optlen); 995 ret = getsockopt(b->num, SOL_SOCKET, SO_RCVBUF, &optval, &optlen);
972 OPENSSL_assert(ret >= 0); 996 if (ret >= 0)
973 OPENSSL_assert(optval >= 18445); 997 OPENSSL_assert(optval >= 18445);
974 998
975 /* Test if SCTP doesn't partially deliver below 999 /* Test if SCTP doesn't partially deliver below
976 * max record size (2^14 + 2048 + 13) 1000 * max record size (2^14 + 2048 + 13)
@@ -978,8 +1002,8 @@ dgram_sctp_read(BIO *b, char *out, int outl)
978 optlen = (socklen_t) sizeof(int); 1002 optlen = (socklen_t) sizeof(int);
979 ret = getsockopt(b->num, IPPROTO_SCTP, 1003 ret = getsockopt(b->num, IPPROTO_SCTP,
980 SCTP_PARTIAL_DELIVERY_POINT, &optval, &optlen); 1004 SCTP_PARTIAL_DELIVERY_POINT, &optval, &optlen);
981 OPENSSL_assert(ret >= 0); 1005 if (ret >= 0)
982 OPENSSL_assert(optval >= 18445); 1006 OPENSSL_assert(optval >= 18445);
983 1007
984 /* Partially delivered notification??? Probably a bug.... */ 1008 /* Partially delivered notification??? Probably a bug.... */
985 OPENSSL_assert(!(msg.msg_flags & MSG_NOTIFICATION)); 1009 OPENSSL_assert(!(msg.msg_flags & MSG_NOTIFICATION));
@@ -1008,16 +1032,21 @@ dgram_sctp_read(BIO *b, char *out, int outl)
1008 1032
1009 optlen = (socklen_t)(sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t)); 1033 optlen = (socklen_t)(sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t));
1010 authchunks = calloc(1, optlen); 1034 authchunks = calloc(1, optlen);
1035 if (authchunks == NULL) {
1036 BIOerr(BIO_F_DGRAM_SCTP_READ,
1037 ERR_R_MALLOC_ERROR);
1038 return (-1);
1039 }
1011 ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, authchunks, &optlen); 1040 ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, authchunks, &optlen);
1012 OPENSSL_assert(ii >= 0); 1041 if (ii >= 0) {
1013 1042 for (p = (unsigned char*) authchunks->gauth_chunks;
1014 for (p = (unsigned char*) authchunks->gauth_chunks; 1043 p < (unsigned char*) authchunks + optlen;
1015 p < (unsigned char*) authchunks + optlen; 1044 p += sizeof(uint8_t)) {
1016 p += sizeof(uint8_t)) { 1045 if (*p == OPENSSL_SCTP_DATA_CHUNK_TYPE)
1017 if (*p == OPENSSL_SCTP_DATA_CHUNK_TYPE) 1046 auth_data = 1;
1018 auth_data = 1; 1047 if (*p == OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE)
1019 if (*p == OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE) 1048 auth_forward = 1;
1020 auth_forward = 1; 1049 }
1021 } 1050 }
1022 1051
1023 free(authchunks); 1052 free(authchunks);
diff --git a/src/lib/libssl/src/crypto/bio/bss_dgram.c b/src/lib/libssl/src/crypto/bio/bss_dgram.c
index 2e17dc9e21..c6b552eb32 100644
--- a/src/lib/libssl/src/crypto/bio/bss_dgram.c
+++ b/src/lib/libssl/src/crypto/bio/bss_dgram.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: bss_dgram.c,v 1.37 2014/11/26 05:41:44 bcook Exp $ */ 1/* $OpenBSD: bss_dgram.c,v 1.38 2015/01/03 18:07:29 doug Exp $ */
2/* 2/*
3 * DTLS implementation written by Nagendra Modadugu 3 * DTLS implementation written by Nagendra Modadugu
4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. 4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
@@ -719,18 +719,25 @@ BIO_new_dgram_sctp(int fd, int close_flag)
719 /* Activate SCTP-AUTH for DATA and FORWARD-TSN chunks */ 719 /* Activate SCTP-AUTH for DATA and FORWARD-TSN chunks */
720 auth.sauth_chunk = OPENSSL_SCTP_DATA_CHUNK_TYPE; 720 auth.sauth_chunk = OPENSSL_SCTP_DATA_CHUNK_TYPE;
721 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_AUTH_CHUNK, &auth, sizeof(struct sctp_authchunk)); 721 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_AUTH_CHUNK, &auth, sizeof(struct sctp_authchunk));
722 OPENSSL_assert(ret >= 0); 722 if (ret < 0)
723 goto err;
723 auth.sauth_chunk = OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE; 724 auth.sauth_chunk = OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE;
724 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_AUTH_CHUNK, &auth, sizeof(struct sctp_authchunk)); 725 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_AUTH_CHUNK, &auth, sizeof(struct sctp_authchunk));
725 OPENSSL_assert(ret >= 0); 726 if (ret < 0)
727 goto err;
726 728
727 /* Test if activation was successful. When using accept(), 729 /* Test if activation was successful. When using accept(),
728 * SCTP-AUTH has to be activated for the listening socket 730 * SCTP-AUTH has to be activated for the listening socket
729 * already, otherwise the connected socket won't use it. */ 731 * already, otherwise the connected socket won't use it. */
730 sockopt_len = (socklen_t)(sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t)); 732 sockopt_len = (socklen_t)(sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t));
731 authchunks = calloc(1, sockopt_len); 733 authchunks = calloc(1, sockopt_len);
734 if (authchunks == NULL)
735 goto err;
732 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len); 736 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len);
733 OPENSSL_assert(ret >= 0); 737 if (ret < 0) {
738 free(authchunks);
739 goto err;
740 }
734 741
735 for (p = (unsigned char*) authchunks->gauth_chunks; 742 for (p = (unsigned char*) authchunks->gauth_chunks;
736 p < (unsigned char*) authchunks + sockopt_len; 743 p < (unsigned char*) authchunks + sockopt_len;
@@ -753,16 +760,19 @@ BIO_new_dgram_sctp(int fd, int close_flag)
753 event.se_type = SCTP_AUTHENTICATION_EVENT; 760 event.se_type = SCTP_AUTHENTICATION_EVENT;
754 event.se_on = 1; 761 event.se_on = 1;
755 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_EVENT, &event, sizeof(struct sctp_event)); 762 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_EVENT, &event, sizeof(struct sctp_event));
756 OPENSSL_assert(ret >= 0); 763 if (ret < 0)
764 goto err;
757#else 765#else
758 sockopt_len = (socklen_t) sizeof(struct sctp_event_subscribe); 766 sockopt_len = (socklen_t) sizeof(struct sctp_event_subscribe);
759 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event, &sockopt_len); 767 ret = getsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event, &sockopt_len);
760 OPENSSL_assert(ret >= 0); 768 if (ret < 0)
769 goto err;
761 770
762 event.sctp_authentication_event = 1; 771 event.sctp_authentication_event = 1;
763 772
764 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(struct sctp_event_subscribe)); 773 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(struct sctp_event_subscribe));
765 OPENSSL_assert(ret >= 0); 774 if (ret < 0)
775 goto err;
766#endif 776#endif
767#endif 777#endif
768 778
@@ -770,9 +780,14 @@ BIO_new_dgram_sctp(int fd, int close_flag)
770 * larger than the max record size of 2^14 + 2048 + 13 780 * larger than the max record size of 2^14 + 2048 + 13
771 */ 781 */
772 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_PARTIAL_DELIVERY_POINT, &optval, sizeof(optval)); 782 ret = setsockopt(fd, IPPROTO_SCTP, SCTP_PARTIAL_DELIVERY_POINT, &optval, sizeof(optval));
773 OPENSSL_assert(ret >= 0); 783 if (ret < 0)
784 goto err;
774 785
775 return (bio); 786 return (bio);
787
788err:
789 BIO_vfree(bio);
790 return (NULL);
776} 791}
777 792
778int 793int
@@ -929,16 +944,25 @@ dgram_sctp_read(BIO *b, char *out, int outl)
929 event.se_type = SCTP_SENDER_DRY_EVENT; 944 event.se_type = SCTP_SENDER_DRY_EVENT;
930 event.se_on = 0; 945 event.se_on = 0;
931 i = setsockopt(b->num, IPPROTO_SCTP, SCTP_EVENT, &event, sizeof(struct sctp_event)); 946 i = setsockopt(b->num, IPPROTO_SCTP, SCTP_EVENT, &event, sizeof(struct sctp_event));
932 OPENSSL_assert(i >= 0); 947 if (i < 0) {
948 ret = i;
949 break;
950 }
933#else 951#else
934 eventsize = sizeof(struct sctp_event_subscribe); 952 eventsize = sizeof(struct sctp_event_subscribe);
935 i = getsockopt(b->num, IPPROTO_SCTP, SCTP_EVENTS, &event, &eventsize); 953 i = getsockopt(b->num, IPPROTO_SCTP, SCTP_EVENTS, &event, &eventsize);
936 OPENSSL_assert(i >= 0); 954 if (i < 0) {
955 ret = i;
956 break;
957 }
937 958
938 event.sctp_sender_dry_event = 0; 959 event.sctp_sender_dry_event = 0;
939 960
940 i = setsockopt(b->num, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(struct sctp_event_subscribe)); 961 i = setsockopt(b->num, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(struct sctp_event_subscribe));
941 OPENSSL_assert(i >= 0); 962 if (i < 0) {
963 ret = i;
964 break;
965 }
942#endif 966#endif
943 } 967 }
944 968
@@ -969,8 +993,8 @@ dgram_sctp_read(BIO *b, char *out, int outl)
969 */ 993 */
970 optlen = (socklen_t) sizeof(int); 994 optlen = (socklen_t) sizeof(int);
971 ret = getsockopt(b->num, SOL_SOCKET, SO_RCVBUF, &optval, &optlen); 995 ret = getsockopt(b->num, SOL_SOCKET, SO_RCVBUF, &optval, &optlen);
972 OPENSSL_assert(ret >= 0); 996 if (ret >= 0)
973 OPENSSL_assert(optval >= 18445); 997 OPENSSL_assert(optval >= 18445);
974 998
975 /* Test if SCTP doesn't partially deliver below 999 /* Test if SCTP doesn't partially deliver below
976 * max record size (2^14 + 2048 + 13) 1000 * max record size (2^14 + 2048 + 13)
@@ -978,8 +1002,8 @@ dgram_sctp_read(BIO *b, char *out, int outl)
978 optlen = (socklen_t) sizeof(int); 1002 optlen = (socklen_t) sizeof(int);
979 ret = getsockopt(b->num, IPPROTO_SCTP, 1003 ret = getsockopt(b->num, IPPROTO_SCTP,
980 SCTP_PARTIAL_DELIVERY_POINT, &optval, &optlen); 1004 SCTP_PARTIAL_DELIVERY_POINT, &optval, &optlen);
981 OPENSSL_assert(ret >= 0); 1005 if (ret >= 0)
982 OPENSSL_assert(optval >= 18445); 1006 OPENSSL_assert(optval >= 18445);
983 1007
984 /* Partially delivered notification??? Probably a bug.... */ 1008 /* Partially delivered notification??? Probably a bug.... */
985 OPENSSL_assert(!(msg.msg_flags & MSG_NOTIFICATION)); 1009 OPENSSL_assert(!(msg.msg_flags & MSG_NOTIFICATION));
@@ -1008,16 +1032,21 @@ dgram_sctp_read(BIO *b, char *out, int outl)
1008 1032
1009 optlen = (socklen_t)(sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t)); 1033 optlen = (socklen_t)(sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t));
1010 authchunks = calloc(1, optlen); 1034 authchunks = calloc(1, optlen);
1035 if (authchunks == NULL) {
1036 BIOerr(BIO_F_DGRAM_SCTP_READ,
1037 ERR_R_MALLOC_ERROR);
1038 return (-1);
1039 }
1011 ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, authchunks, &optlen); 1040 ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, authchunks, &optlen);
1012 OPENSSL_assert(ii >= 0); 1041 if (ii >= 0) {
1013 1042 for (p = (unsigned char*) authchunks->gauth_chunks;
1014 for (p = (unsigned char*) authchunks->gauth_chunks; 1043 p < (unsigned char*) authchunks + optlen;
1015 p < (unsigned char*) authchunks + optlen; 1044 p += sizeof(uint8_t)) {
1016 p += sizeof(uint8_t)) { 1045 if (*p == OPENSSL_SCTP_DATA_CHUNK_TYPE)
1017 if (*p == OPENSSL_SCTP_DATA_CHUNK_TYPE) 1046 auth_data = 1;
1018 auth_data = 1; 1047 if (*p == OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE)
1019 if (*p == OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE) 1048 auth_forward = 1;
1020 auth_forward = 1; 1049 }
1021 } 1050 }
1022 1051
1023 free(authchunks); 1052 free(authchunks);