Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: binary MIME-Version: 1.0 X-Mailer: MIME-tools 5.420 (Entity 5.420) X-RT-Original-Encoding: iso-8859-1 Content-Length: 5883 From krb5-bugs-incoming-bounces@PCH.MIT.EDU Mon Aug 6 19:42:58 2007 Received: from pch.mit.edu (PCH.MIT.EDU [18.7.21.90]) by krbdev.mit.edu (8.12.9) with ESMTP id l76NgwHW021368; Mon, 6 Aug 2007 19:42:58 -0400 (EDT) Received: from pch.mit.edu (pch.mit.edu [127.0.0.1]) by pch.mit.edu (8.13.6/8.12.8) with ESMTP id l76NgrTi005811; Mon, 6 Aug 2007 19:42:53 -0400 Received: from pacific-carrier-annex.mit.edu (PACIFIC-CARRIER-ANNEX.MIT.EDU [18.7.21.83]) by pch.mit.edu (8.13.6/8.12.8) with ESMTP id l76NdZ07005272 for ; Mon, 6 Aug 2007 19:39:35 -0400 Received: from mit.edu (M24-004-BARRACUDA-2.MIT.EDU [18.7.7.112]) by pacific-carrier-annex.mit.edu (8.13.6/8.9.2) with ESMTP id l76NdXZ9015072 for ; Mon, 6 Aug 2007 19:39:33 -0400 (EDT) Received: from ptb-relay03.plus.net (ptb-relay03.plus.net [212.159.14.214]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mit.edu (Spam Firewall) with ESMTP id 4C5D16DCD72 for ; Mon, 6 Aug 2007 19:39:32 -0400 (EDT) Received: from [81.174.172.105] (helo=opensuse.suse.home) by ptb-relay03.plus.net with esmtp (Exim) id 1IICAa-00067M-JK for krb5-bugs@mit.edu; Tue, 07 Aug 2007 00:39:28 +0100 Received: by opensuse.suse.home (Postfix, from userid 1000) id D6ED1B840A; Tue, 7 Aug 2007 00:39:07 +0100 (BST) To: krb5-bugs@mit.edu From: huaraz@moeller.plus.com X-send-pr-version: 3.99 Message-Id: <20070806233907.D6ED1B840A@opensuse.suse.home> Date: Tue, 7 Aug 2007 00:39:07 +0100 (BST) X-Spam-Score: 2.002 X-Spam-Level: ** (2.002) X-Spam-Flag: NO X-Scanned-By: MIMEDefang 2.42 X-Mailman-Approved-At: Mon, 06 Aug 2007 19:42:51 -0400 X-BeenThere: krb5-bugs-incoming@mailman.mit.edu X-Mailman-Version: 2.1.6 Precedence: list Reply-To: huaraz@moeller.plus.com Sender: krb5-bugs-incoming-bounces@PCH.MIT.EDU Errors-To: krb5-bugs-incoming-bounces@PCH.MIT.EDU >Submitter-Id: net >Originator: Markus Moeller >Organization: privat >Confidential: no >Synopsis: gss_init_sec_context does not release output token buffer when used with spnego mech >Severity: non-critical >Priority: medium >Category: krb5-libs >Class: sw-bug >Release: 1.6.1 >Environment: i686 GNU/Linux System: Linux OpenSuse 2.6.18.8-0.3-default #1 SMP Tue Apr 17 08:42:35 UTC 2007 i686 i686 i386 GNU/Linux Architecture: i686 >Description: When creating gss context for spnego mechanism the output token is not released >How-To-Repeat: Use following code static gss_OID_desc _gss_mech_spnego = {6, (void *)"\x2b\x06\x01\x05\x05\x02"}; gss_OID gss_mech_spnego = &_gss_mech_spnego; const char *create_token(int spnego, const char *server) { OM_uint32 major_status, minor_status; gss_ctx_id_t gss_context = GSS_C_NO_CONTEXT; gss_name_t server_name = GSS_C_NO_NAME; gss_buffer_desc service = GSS_C_EMPTY_BUFFER; gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER; gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER; const char *token = NULL; setbuf(stdout,NULL); setbuf(stdin,NULL); if (!server) { fprintf(stderr, "%s| %s: Error: No server name\n", LogTime(), PROGRAM); return NULL; } service.value = malloc(strlen("HTTP")+strlen(server)+2); snprintf(service.value,strlen("HTTP")+strlen(server)+2,"%s@%s","HTTP",server); service.length = strlen((char *)service.value); major_status = gss_import_name(&minor_status, &service, gss_nt_service_name, &server_name); if (check_gss_err(major_status,minor_status,"gss_import_name()") ) goto cleanup; if (spnego) { major_status = gss_init_sec_context(&minor_status, GSS_C_NO_CREDENTIAL, &gss_context, server_name, gss_mech_spnego, 0, 0, GSS_C_NO_CHANNEL_BINDINGS, &input_token, NULL, &output_token, NULL, NULL); } else { major_status = gss_init_sec_context(&minor_status, GSS_C_NO_CREDENTIAL, &gss_context, server_name, GSS_C_NO_OID, 0, 0, GSS_C_NO_CHANNEL_BINDINGS, &input_token, NULL, &output_token, NULL, NULL); } if (check_gss_err(major_status,minor_status,"gss_init_sec_context()") ) goto cleanup; if (output_token.length) { token = "OK"; } cleanup: gss_delete_sec_context(&minor_status, &gss_context, NULL); gss_release_buffer(&minor_status, &service); gss_release_buffer(&minor_status, &input_token); gss_release_buffer(&minor_status, &output_token); gss_release_name(&minor_status, &server_name); return token; } int main(int argc, char *argv[]) { const char *Token; int opt,i=10; int spnego=0; while (-1 != (opt = getopt(argc, argv, "s"))) { switch (opt) { case 's': spnego = 1; break; default: fprintf(stderr, "%s| %s: unknown option: -%c.\n", LogTime(), PROGRAM, opt); } } fprintf(stdout,"Spnego : %d\n",spnego); while (i--) { Token = (const char *)create_token(spnego,"w2k3.windows2003.home"); fprintf(stdout,"Token: %s\n",Token); } return(0); } >Fix: None