Re: problem with Kerberose and TDS 7.2

Frediano Ziglio <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
2011/5/7 Frediano Ziglio <[email protected]>:
> 2011/5/7 Frediano Ziglio <[email protected]>:
>> Il giorno ven, 06/05/2011 alle 18.41 -0400, [email protected] ha
>> scritto:
>>> Using bsqlodbc and TDS 7.2 with Kerberos, I get a protocol error.  Dropping to
>>> 7.1 works, as does using a non-kerberos login:
>>>
>>> $ TDSVER=7.2 TDSDUMP=dump  bsqlodbc -S $S -v <<< "select cast('1 mar 2011' as date) as march" || less -S dump
>>> bsqlodbc:273: Verbose operation enabled
>>> bsqlodbc: error -1: SQLConnect: SQL_ERROR: failed
>>> bsqlodbc: error 20020: 08S01: [unixODBC][FreeTDS][SQL Server]Bad token from the server: Datastream processing out of sync
>>> "[unixODBC][FreeTDS][SQL Server]Unable to connect to data source"
>>>
>>> Start of dump:
>>>
>>> log.c:196:Starting log file for FreeTDS 0.83.dev.20110103
>>>         on 2011-05-06 18:34:25 with debug flags 0x4fff.
>>> iconv.c:330:tds_iconv_open(0x1914a440, UTF-8)
>>> iconv.c:187:local name for ISO-8859-1 is ISO-8859-1
>>> iconv.c:187:local name for UTF-8 is UTF-8
>>> iconv.c:187:local name for UCS-2LE is UCS-2LE
>>> iconv.c:187:local name for UCS-2BE is UCS-2BE
>>> iconv.c:349:setting up conversions for client charset "UTF-8"
>>> iconv.c:351:preparing iconv for "UTF-8" <-> "UCS-2LE" conversion
>>> iconv.c:391:preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion
>>> iconv.c:394:tds_iconv_open: done
>>> net.c:205:Connecting to xx.xx.xx.xx port xxx (TDS version 7.2)
>>> net.c:270:tds_open_socket: connect(2) returned "Operation now in progress"
>>> net.c:310:tds_open_socket() succeeded
>>> util.c:156:Changed query state from DEAD to IDLE
>>> net.c:741:Sending packet
>>> 0000 12 01 00 3a 00 00 00 00-00 00 1a 00 06 01 00 20 |...:.... ....... |
>>> 0010 00 01 02 00 21 00 0c 03-00 2d 00 04 04 00 31 00 |....!... .-....1.|
>>> 0020 01 ff 09 00 00 00 00 00-02 4d 53 53 51 4c 53 65 |........ .MSSQLSe|
>>> 0030 72 76 65 72 00 d8 06 00-00 00                   |rver.... ..|
>>>
>>> net.c:555:Received header
>>> 0000 04 01 00 2b 00 00 01 00-                        |...+....|
>>>
>>> net.c:609:Received packet
>>> 0000 04 01 00 2b 00 00 01 00-00 00 1a 00 06 01 00 20 |...+.... ....... |
>>> 0010 00 01 02 00 21 00 01 03-00 22 00 00 04 00 22 00 |....!... ."....".|
>>> 0020 01 ff 0a 32 06 40 00 00-02 00 00                |...2.@.. ...|
>>>
>>> login.c:1051:detected flag 2
>>> gssapi.c:172:kerberos name MSSQLSvc/[deleted...]
>>> login.c:776:quietly sending TDS 7+ login packet
>>> token.c:328:tds_process_login_tokens()
>>> net.c:555:Received header
>>> 0000 04 01 00 91 00 00 01 00-                        |........|
>>>
>>> net.c:609:Received packet
>>> 0000 04 01 00 91 00 00 01 00-ed 86 00 60 81 83 06 09 |........ ...`....|
>>> 0010 2a 86 48 86 f7 12 01 02-02 02 00 6f 74 30 72 a0 |*.H..... ...ot0r.|
>>> 0020 03 02 01 05 a1 03 02 01-0f a2 66 30 64 a0 03 02 |........ ..f0d...|
>>> 0030 01 17 a2 5d 04 5b 4f 9d-cc 42 98 44 53 4f e4 b9 |...].[O. .B.DSO..|
>>> 0040 1f 72 6f 69 16 58 88 1e-bc 2a 54 ca a5 0d eb d3 |.roi.X.. .*T.....|
>>> 0050 1c 47 70 cb de 79 3c 54-84 6e 6f 37 d2 5e fc dc |.Gp..y<T .no7.^..|
>>> 0060 b3 d5 5f 82 dc 06 13 2a-73 1e 22 6c 70 78 26 11 |.._....* s."lpx&.|
>>> 0070 81 7b 31 9a cd 49 35 39-dd 25 84 0c 81 4a 41 9e |.{1..I59 .%...JA.|
>>> 0080 b2 a4 28 ce 20 c3 3f d4-23 87 7d de 22 87 cd 24 |..(. .?. #.}."..$|
>>> 0090 31                     -                        |1|
>>>
>>> token.c:337:looking for login token, got  ed(AUTH)
>>> token.c:456:TDS_AUTH_TOKEN PDU size 134
>>> token.c:337:looking for login token, got  60()
>>> token.c:122:tds_process_default_tokens() marker is 60()
>>> util.c:156:Changed query state from IDLE to DEAD
>>> util.c:331:tdserror(0x19149060, 0x1914a440, 20020, 0)
>>> odbc.c:2271:msgno 20020 20003
>>> util.c:361:tdserror: client library returned TDS_INT_CANCEL(2)
>>> util.c:384:tdserror: returning TDS_INT_CANCEL(2)
>>> token.c:256:Unknown marker: 96(60)!!
>>> login.c:460:login packet accepted
>>> == end ==
>>>
>>> Well, not exactly *accepted*.
>>>
>>
>> I see two problems. In gssapi.c tds_gss_handle_next is not expected to
>> receive authentication so it returns fail. In token.c,
>> tds_process_login_tokens fail for tds_process_auth is ignored leading to
>> protocol mismatch. To solve second just remove TDS_AUTH_TOKEN case in
>> tds_process_login_tokens. The first... I don't know, I note in gssapi.c
>> that there are some lines commented out
>>
>> /*
>>        if (maj_stat == GSS_S_CONTINUE_NEEDED) {
>>                if (recv_token(s, &token_flags, &recv_tok) < 0) {
>>                        (void) gss_release_name(&min_stat,
>> &target_name);
>>                        return -1;
>>                }
>>                token_ptr = &recv_tok;
>>        }
>> */
>>
>> Probably recv_token would read our authentication token !!
>>
>> freddy77
>>
>
> Mumble... but is Kerberose the romantic version of Kerberos ?? :)
>
> Try this patch ;-)
>

Tested and committed, works correctly

Frediano
_______________________________________________
FreeTDS mailing list
[email protected]
http://lists.ibiblio.org/mailman/listinfo/freetds
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.