Overview
Comment: | * tlsInt.h: * tls.c: * tlsIO.c: corrected structure initialization to work when compiling with 8.2. Now compiles with 8.2+ and tested to work with 8.2+ and dynamically adjust to the version of Tcl it was loaded into. TLS will fail the test suite with Tcl 8.2-8.3.1. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e7ef654f47612caaffca97b9803cea15 |
User & Date: | hobbs on 2000-08-15 18:49:30 |
Other Links: | manifest | tags |
Context
2000-08-16
| ||
17:44 | * tls.c (Tls_Init): corrected interpretation of version number (patchlevel and release/serial were swapped). check-in: 090741a97a user: hobbs tags: trunk | |
2000-08-15
| ||
18:49 | * tlsInt.h: * tls.c: * tlsIO.c: corrected structure initialization to work when compiling with 8.2. Now compiles with 8.2+ and tested to work with 8.2+ and dynamically adjust to the version of Tcl it was loaded into. TLS will fail the test suite with Tcl 8.2-8.3.1. check-in: e7ef654f47 user: hobbs tags: trunk | |
18:49 | * README.txt: added notes about need to use 8.2.0+. check-in: 74804ed748 user: hobbs tags: trunk | |
Changes
Modified ChangeLog
from [00d4c60b28]
to [1bd81afa71].
1 2 3 4 5 6 7 8 | 2000-08-15 Jeff Hobbs <hobbs@scriptics.com> * tests/simpleClient.tcl: * tests/simpleServer.tcl: added simple client/server test scripts that use test certs and can do simple stress tests. 2000-08-14 Jeff Hobbs <hobbs@scriptics.com> | > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 2000-08-15 Jeff Hobbs <hobbs@scriptics.com> * README.txt: added notes about need to use 8.2.0+. * tlsInt.h: * tls.c: * tlsIO.c: corrected structure initialization to work when compiling with 8.2. Now compiles with 8.2+ and tested to work with 8.2+ and dynamically adjust to the version of Tcl it was loaded into. TLS will fail the test suite with Tcl 8.2-8.3.1. * tests/all.tcl: added catch around ::tcltest::normalizePath because it doesn't exist in pre-8.3 tcltest. * tests/simpleClient.tcl: * tests/simpleServer.tcl: added simple client/server test scripts that use test certs and can do simple stress tests. 2000-08-14 Jeff Hobbs <hobbs@scriptics.com> |
︙ | ︙ |
Modified tls.c
from [468d0efc89]
to [bc1abaf8b3].
1 2 3 | /* * Copyright (C) 1997-1999 Matt Newman <matt@novadigm.com> * | > | | 1 2 3 4 5 6 7 8 9 10 11 12 | /* * Copyright (C) 1997-1999 Matt Newman <matt@novadigm.com> * Copyright (C) 2000 Ajuba Solutions * * $Header: /home/rkeene/tmp/cvs2fossil/../tcltls/tls/tls/tls.c,v 1.10 2000/08/15 18:49:30 hobbs Exp $ * * TLS (aka SSL) Channel - can be layered on any bi-directional * Tcl_Channel (Note: Requires Trf Core Patch) * * This was built (almost) from scratch based upon observation of * OpenSSL 0.9.2B * |
︙ | ︙ |
Modified tlsIO.c
from [7f2f9df19f]
to [76eadcab80].
1 2 3 | /* * Copyright (C) 1997-2000 Matt Newman <matt@novadigm.com> * | > | < < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /* * Copyright (C) 1997-2000 Matt Newman <matt@novadigm.com> * Copyright (C) 2000 Ajuba Solutions * * $Header: /home/rkeene/tmp/cvs2fossil/../tcltls/tls/tls/tlsIO.c,v 1.10 2000/08/15 18:49:30 hobbs Exp $ * * TLS (aka SSL) Channel - can be layered on any bi-directional * Tcl_Channel (Note: Requires Trf Core Patch) * * This was built from scratch based upon observation of OpenSSL 0.9.2B * * Addition credit is due for Andreas Kupries (a.kupries@westend.com), for * providing the Tcl_ReplaceChannel mechanism and working closely with me * to enhance it to support full fileevent semantics. * * Also work done by the follow people provided the impetus to do this "right": * tclSSL (Colin McCormack, Shared Technology) * SSLtcl (Peter Antman) * */ #include "tlsInt.h" /* * Forward declarations */ static int TlsBlockModeProc _ANSI_ARGS_((ClientData instanceData, int mode)); static int TlsCloseProc _ANSI_ARGS_ ((ClientData instanceData, |
︙ | ︙ | |||
50 51 52 53 54 55 56 | int mask)); static void TlsChannelHandler _ANSI_ARGS_ ((ClientData clientData, int mask)); static void TlsChannelHandlerTimer _ANSI_ARGS_ ((ClientData clientData)); /* * This structure describes the channel type structure for TCP socket | | > > > < < < < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > | > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > | | > > > | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | int mask)); static void TlsChannelHandler _ANSI_ARGS_ ((ClientData clientData, int mask)); static void TlsChannelHandlerTimer _ANSI_ARGS_ ((ClientData clientData)); /* * This structure describes the channel type structure for TCP socket * based IO. These are what the structures should look like, but we * have to build them up at runtime to be correct depending on whether * we are loaded into an 8.2.0-8.3.1 or 8.3.2+ Tcl interpreter. */ #ifdef TLS_STATIC_STRUCTURES_NOT_USED static Tcl_ChannelType tlsChannelType2 = { "tls", /* Type name. */ TCL_CHANNEL_VERSION_2, /* A v2 channel (8.3.2+) */ TlsCloseProc, /* Close proc. */ TlsInputProc, /* Input proc. */ TlsOutputProc, /* Output proc. */ NULL, /* Seek proc. */ NULL, /* Set option proc. */ TlsGetOptionProc, /* Get option proc. */ TlsWatchProc, /* Initialize notifier. */ TlsGetHandleProc, /* Get file handle out of channel. */ NULL, /* Close2Proc. */ TlsBlockModeProc, /* Set blocking/nonblocking mode.*/ NULL, /* FlushProc. */ TlsNotifyProc, /* handlerProc. */ }; static Tcl_ChannelType tlsChannelType1 = { "tls", /* Type name. */ TlsBlockModeProc, /* Set blocking/nonblocking mode.*/ TlsCloseProc, /* Close proc. */ TlsInputProc, /* Input proc. */ TlsOutputProc, /* Output proc. */ NULL, /* Seek proc. */ NULL, /* Set option proc. */ TlsGetOptionProc, /* Get option proc. */ TlsWatchProc, /* Initialize notifier. */ TlsGetHandleProc, /* Get file handle out of channel. */ }; #else static Tcl_ChannelType *tlsChannelType = NULL; #endif /* *------------------------------------------------------------------- * * Tls_ChannelType -- * * Return the correct TLS channel driver info * * Results: * The correct channel driver for the current version of Tcl. * * Side effects: * None. * *------------------------------------------------------------------- */ Tcl_ChannelType *Tls_ChannelType() { /* * Initialize the channel type if necessary */ if (tlsChannelType == NULL) { /* * Allocation of a new channeltype structure is not easy, because of * the various verson of the core and subsequent changes to the * structure. The main challenge is to allocate enough memory for * odern versions even if this extyension is compiled against one * of the older variant! * * (1) Versions before stubs (8.0.x) are simple, because they are * supported only if the extension is compiled against exactly * that version of the core. * * (2) With stubs we just determine the difference between the older * and modern variant and overallocate accordingly if compiled * against an older variant. */ int size = sizeof(Tcl_ChannelType); /* Base size */ /* * Size of a procedure pointer. We assume that all procedure * pointers are of the same size, regardless of exact type * (arguments and return values). * * 8.2. First version containing close2proc. Baseline. * 8.3.2 Three additional vectors. Moved blockMode, new flush- and * handlerProc's. * * => Compilation against earlier version has to overallocate three * procedure pointers. */ #ifdef EMULATE_CHANNEL_VERSION_2 size += 3 * procPtrSize; #endif tlsChannelType = (Tcl_ChannelType *) ckalloc(size); memset((VOID *) tlsChannelType, 0, size); /* * Common elements of the structure (no changes in location or name) * close2Proc, seekProc, setOptionProc stay NULL. */ tlsChannelType->closeProc = TlsCloseProc; tlsChannelType->inputProc = TlsInputProc; tlsChannelType->outputProc = TlsOutputProc; tlsChannelType->getOptionProc = TlsGetOptionProc; tlsChannelType->watchProc = TlsWatchProc; tlsChannelType->getHandleProc = TlsGetHandleProc; /* * blockModeProc is a twister. We have to make some runtime-choices, * depending on the version we compiled against. */ #ifdef EMULATE_CHANNEL_VERSION_2 /* * We are compiling against an 8.3.1- core. We have to create some * definitions for the new elements as the compiler does not know them * by name. */ if (channelTypeVersion == TLS_CHANNEL_VERSION_1) { /* * The 'version' element of 8.3.2 is in the the place of the * blockModeProc. For 8.2.0-8.3.1 we have to set our blockModeProc * into this place. */ tlsChannelType->blockModeProc = TlsBlockModeProc; } else /* channelTypeVersion == TLS_CHANNEL_VERSION_2 */ { /* * For the 8.3.2 core we present ourselves as a version 2 * driver. This means a special value in version (ex * blockModeProc), blockModeProc in a different place and of * course usage of the handlerProc. The last two have to * referenced with pointer magic because they aren't defined * otherwise. */ tlsChannelType->blockModeProc = (Tcl_DriverBlockModeProc*) TLS_CHANNEL_VERSION_2; (*((Tcl_DriverBlockModeProc**)(&(tlsChannelType->close2Proc)+1))) = TlsBlockModeProc; (*((TlsDriverHandlerProc**)(&(tlsChannelType->close2Proc)+3))) = TlsNotifyProc; } #else /* * Compiled against 8.3.2+. Direct access to all elements possible. Use * channelTypeVersion information to select the values to use. */ if (channelTypeVersion == TLS_CHANNEL_VERSION_1) { /* * The 'version' element of 8.3.2 is in the the place of the * blockModeProc. For the original patch in 8.1.x and the firstly * included (8.2) we have to set our blockModeProc into this * place. */ tlsChannelType->version = (Tcl_ChannelTypeVersion)TlsBlockModeProc; } else /* channelTypeVersion == TLS_CHANNEL_VERSION_2 */ { /* * For the 8.3.2 core we present ourselves as a version 2 * driver. This means a special value in version (ex * blockModeProc), blockModeProc in a different place and of * course usage of the handlerProc. */ tlsChannelType->version = TCL_CHANNEL_VERSION_2; tlsChannelType->blockModeProc = TlsBlockModeProc; tlsChannelType->handlerProc = TlsNotifyProc; } #endif } return tlsChannelType; } /* *------------------------------------------------------------------- * * TlsBlockModeProc -- * |
︙ | ︙ |
Modified tlsInt.h
from [b040f94bfd]
to [45743e25af].
1 2 3 | /* * Copyright (C) 1997-2000 Matt Newman <matt@novadigm.com> * | | | 1 2 3 4 5 6 7 8 9 10 11 | /* * Copyright (C) 1997-2000 Matt Newman <matt@novadigm.com> * * $Header: /home/rkeene/tmp/cvs2fossil/../tcltls/tls/tls/tlsInt.h,v 1.7 2000/08/15 18:49:31 hobbs Exp $ * * TLS (aka SSL) Channel - can be layered on any bi-directional * Tcl_Channel (Note: Requires Trf Core Patch) * * This was built from scratch based upon observation of OpenSSL 0.9.2B * * Addition credit is due for Andreas Kupries (a.kupries@westend.com), for |
︙ | ︙ | |||
100 101 102 103 104 105 106 | BIO *bio; /* Struct for SSL processing */ BIO *p_bio; /* Parent BIO (that is layered on Tcl_Channel) */ char *err; } State; /* | | | | | 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | BIO *bio; /* Struct for SSL processing */ BIO *p_bio; /* Parent BIO (that is layered on Tcl_Channel) */ char *err; } State; /* * The following definitions have to be usable for 8.2.0-8.3.1 and 8.3.2+. * The differences between these versions: * * 8.0-8.1: There is no support for these in TLS 1.4 (get 1.3). This * was the version with the original patch. * * 8.2.0- Changed semantics for Tcl_StackChannel (Tcl_ReplaceChannel). * 8.3.1: Check at runtime to switch the behaviour. The patch is part * of the core from now on. * * 8.3.2+: Stacked channels rewritten for better behaviour in some * situations (closing). Some new API's, semantic changes. * * The following magic was adapted from Trf 2.1 (Kupries). */ #define TLS_CHANNEL_VERSION_1 0x1 #define TLS_CHANNEL_VERSION_2 0x2 extern int channelTypeVersion; #ifdef USE_TCL_STUBS |
︙ | ︙ | |||
160 161 162 163 164 165 166 | typedef Tcl_Channel (tls_GetStackedChannel) _ANSI_ARGS_((Tcl_Channel chan)); #define Tcl_GetStackedChannel ((tls_GetStackedChannel*) tclStubsPtr->reserved283) #endif /* Tcl_GetStackedChannel */ | | > > > > > > | 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | typedef Tcl_Channel (tls_GetStackedChannel) _ANSI_ARGS_((Tcl_Channel chan)); #define Tcl_GetStackedChannel ((tls_GetStackedChannel*) tclStubsPtr->reserved283) #endif /* Tcl_GetStackedChannel */ #ifndef TCL_CHANNEL_VERSION_2 /* * Core is older than 8.3.2. Supply the missing definitions for * the new API's in 8.3.2. */ #define EMULATE_CHANNEL_VERSION_2 typedef struct TlsChannelTypeVersion_* TlsChannelTypeVersion; #define TCL_CHANNEL_VERSION_2 ((TlsChannelTypeVersion) 0x2) typedef int (TlsDriverHandlerProc) _ANSI_ARGS_((ClientData instanceData, int interestMask)); /* 394 */ typedef int (tls_ReadRaw) _ANSI_ARGS_((Tcl_Channel chan, char *dst, int bytesToRead)); /* 395 */ typedef int (tls_WriteRaw) _ANSI_ARGS_((Tcl_Channel chan, char *src, int srcLen)); /* 397 */ |
︙ | ︙ | |||
193 194 195 196 197 198 199 | #define IDX(n) (((n)-370) * procPtrSize) #define SLOT(n) (STUB_BASE + IDX(n)) #define Tcl_ReadRaw (*((tls_ReadRaw**) (SLOT(394)))) #define Tcl_WriteRaw (*((tls_WriteRaw**) (SLOT(395)))) #define Tcl_GetTopChannel (*((tls_GetTopChannel**)(SLOT(396)))) | < < < | | 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | #define IDX(n) (((n)-370) * procPtrSize) #define SLOT(n) (STUB_BASE + IDX(n)) #define Tcl_ReadRaw (*((tls_ReadRaw**) (SLOT(394)))) #define Tcl_WriteRaw (*((tls_WriteRaw**) (SLOT(395)))) #define Tcl_GetTopChannel (*((tls_GetTopChannel**)(SLOT(396)))) /* * Required, easy emulation. */ #define Tcl_ChannelGetOptionProc(chanDriver) ((chanDriver)->getOptionProc) #endif /* TCL_CHANNEL_VERSION_2 */ #endif /* USE_TCL_STUBS */ /* * Forward declarations */ |
︙ | ︙ |