From owner-freebsd-ports Thu Jun 15 7:50:21 2000 Delivered-To: freebsd-ports@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id 449A637B839 for ; Thu, 15 Jun 2000 07:50:01 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id HAA95555; Thu, 15 Jun 2000 07:50:01 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from point.osg.gov.bc.ca (point.osg.gov.bc.ca [142.32.102.44]) by hub.freebsd.org (Postfix) with ESMTP id 46EB637BC2C for ; Thu, 15 Jun 2000 07:47:07 -0700 (PDT) (envelope-from Cy.Schubert@uumail.gov.bc.ca) Received: (from daemon@localhost) by point.osg.gov.bc.ca (8.8.7/8.8.8) id HAA23564 for ; Thu, 15 Jun 2000 07:47:03 -0700 Received: from passer.osg.gov.bc.ca(142.32.110.29) via SMTP by point.osg.gov.bc.ca, id smtpda23562; Thu Jun 15 07:46:46 2000 Received: (from uucp@localhost) by passer.osg.gov.bc.ca (8.9.3/8.9.1) id HAA64036 for ; Thu, 15 Jun 2000 07:46:46 -0700 (PDT) Received: from cwsys9.cwsent.com(10.2.2.1), claiming to be "cwsys.cwsent.com" via SMTP by passer9.cwsent.com, id smtpdv64032; Thu Jun 15 07:46:16 2000 Received: (from cy@localhost) by cwsys.cwsent.com (8.10.2/8.9.1) id e5FEkGE63015; Thu, 15 Jun 2000 07:46:16 -0700 (PDT) Message-Id: <200006151446.e5FEkGE63015@cwsys.cwsent.com> Date: Thu, 15 Jun 2000 07:46:16 -0700 (PDT) From: Cy Schubert Reply-To: Cy.Schubert@uumail.gov.bc.ca To: FreeBSD-gnats-submit@freebsd.org X-Send-Pr-Version: 3.2 Subject: ports/19301: Kerberos Security Patches Sender: owner-freebsd-ports@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >Number: 19301 >Category: ports >Synopsis: krb5kdc and gssftp security patches >Confidential: no >Severity: critical >Priority: high >Responsible: freebsd-ports >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Jun 15 07:50:00 PDT 2000 >Closed-Date: >Last-Modified: >Originator: Cy Schubert >Release: FreeBSD 4.0-STABLE i386 >Organization: ITSD ISTA Province of BC >Environment: All FreeBSD and non-FreeBSD systems. >Description: kdc and gssftp patches from MIT Kerberos Web site. >How-To-Repeat: N/A >Fix: Patch to krb5 port: diff -urPN --exclude=CVS --exclude=00_TRANS.TBL /opt/CVSup/usr/ports/security/krb5/patches/patch-ca /usr/local/ports-local/krb5-fixed/patches/patch-ca --- krb5/patches/patch-ca Wed Dec 31 16:00:00 1969 +++ krb5-fixed/patches/patch-ca Fri Jun 9 16:59:37 2000 @@ -0,0 +1,812 @@ +Index: kdc/kerberos_v4.c +diff -c krb5/src/kdc/kerberos_v4.c:5.65.2.2 krb5/src/kdc/kerberos_v4.c:5.65.2.3 +*** kdc/kerberos_v4.c:5.65.2.2 Wed Sep 22 20:47:22 1999 +--- kdc/kerberos_v4.c Mon Jun 5 13:58:34 2000 +*************** +*** 233,243 **** + return(retval); + + if (!*local_realm) { /* local-realm name already set up */ +- /* XXX assumes realm is null-terminated! */ + lrealm = master_princ->realm.data; +! if (strlen(lrealm) < sizeof(local_realm)) +! strcpy(local_realm, lrealm); +! else + retval = KRB5_CONFIG_NOTENUFSPACE; + } + /* convert client_fulladdr to client_sockaddr: +--- 233,243 ---- + return(retval); + + if (!*local_realm) { /* local-realm name already set up */ + lrealm = master_princ->realm.data; +! if (master_princ->realm.length < sizeof(local_realm)) { +! memcpy(local_realm, lrealm, master_princ->realm.length); +! local_realm[master_princ->realm.length] = '\0'; +! } else + retval = KRB5_CONFIG_NOTENUFSPACE; + } + /* convert client_fulladdr to client_sockaddr: +*************** +*** 256,261 **** +--- 256,262 ---- + return KRB5KRB_ERR_FIELD_TOOLONG; + } + v4_pkt.length = pkt->length; ++ v4_pkt.mbz = 0; + memcpy( v4_pkt.dat, pkt->data, pkt->length); + + kerberos_v4( &client_sockaddr, &v4_pkt); +*************** +*** 293,299 **** + case L_APPL_REQ: + strcpy(log_text, "PROCESS_V4:"); + vsprintf(log_text+strlen(log_text), format, pvar); +! krb5_klog_syslog(logpri, log_text); + /* ignore the other types... */ + } + va_end(pvar); +--- 294,300 ---- + case L_APPL_REQ: + strcpy(log_text, "PROCESS_V4:"); + vsprintf(log_text+strlen(log_text), format, pvar); +! krb5_klog_syslog(logpri, "%s", log_text); + /* ignore the other types... */ + } + va_end(pvar); +*************** +*** 622,627 **** +--- 623,631 ---- + + req_act_vno = req_version; + ++ /* set these to point to something safe */ ++ req_name_ptr = req_inst_ptr = req_realm_ptr = ""; ++ + /* check if disabled, but we tell client */ + if (kdc_v4 == KDC_V4_DISABLE) { + lt = klog(L_KRB_PERR, +*************** +*** 700,706 **** + + if ((i = check_princ(req_name_ptr, req_inst_ptr, 0, + &a_name_data, &k5key, 0))) { +! kerb_err_reply(client, pkt, i, lt); + a_name_data.key_low = a_name_data.key_high = 0; + krb5_free_keyblock_contents(kdc_context, &k5key); + return; +--- 704,710 ---- + + if ((i = check_princ(req_name_ptr, req_inst_ptr, 0, + &a_name_data, &k5key, 0))) { +! kerb_err_reply(client, pkt, i, "check_princ failed"); + a_name_data.key_low = a_name_data.key_high = 0; + krb5_free_keyblock_contents(kdc_context, &k5key); + return; +*************** +*** 715,721 **** + /* this does all the checking */ + if ((i = check_princ(service, instance, lifetime, + &s_name_data, &k5key, 1))) { +! kerb_err_reply(client, pkt, i, lt); + a_name_data.key_high = a_name_data.key_low = 0; + s_name_data.key_high = s_name_data.key_low = 0; + krb5_free_keyblock_contents(kdc_context, &k5key); +--- 719,725 ---- + /* this does all the checking */ + if ((i = check_princ(service, instance, lifetime, + &s_name_data, &k5key, 1))) { +! kerb_err_reply(client, pkt, i, "check_princ failed"); + a_name_data.key_high = a_name_data.key_low = 0; + s_name_data.key_high = s_name_data.key_low = 0; + krb5_free_keyblock_contents(kdc_context, &k5key); +*************** +*** 806,824 **** + tk->length = 0; + k_flags = 0; /* various kerberos flags */ + + auth->length = 4 + strlen((char *)pkt->dat + 3); + auth->length += (int) *(pkt->dat + auth->length) + + (int) *(pkt->dat + auth->length + 1) + 2; + + memcpy(auth->dat, pkt->dat, auth->length); + + strncpy(tktrlm, (char *)auth->dat + 3, REALM_SZ); + kvno = (krb5_kvno)auth->dat[2]; + if (set_tgtkey(tktrlm, kvno)) { + lt = klog(L_ERR_UNK, + "FAILED set_tgtkey realm %s, kvno %d. Host: %s ", + tktrlm, kvno, inet_ntoa(client_host)); +! kerb_err_reply(client, pkt, kerno, lt); + return; + } + kerno = krb_rd_req(auth, "krbtgt", tktrlm, client_host.s_addr, +--- 810,849 ---- + tk->length = 0; + k_flags = 0; /* various kerberos flags */ + ++ auth->mbz = 0; /* pkt->mbz already zeroed */ + auth->length = 4 + strlen((char *)pkt->dat + 3); ++ if (auth->length + 1 > MAX_KTXT_LEN) { ++ lt = klog(L_KRB_PERR, ++ "APPL request with realm length too long from %s", ++ inet_ntoa(client_host)); ++ kerb_err_reply(client, pkt, RD_AP_INCON, ++ "realm length too long"); ++ return; ++ } ++ + auth->length += (int) *(pkt->dat + auth->length) + + (int) *(pkt->dat + auth->length + 1) + 2; ++ if (auth->length > MAX_KTXT_LEN) { ++ lt = klog(L_KRB_PERR, ++ "APPL request with funky tkt or req_id length from %s", ++ inet_ntoa(client_host)); ++ kerb_err_reply(client, pkt, RD_AP_INCON, ++ "funky tkt or req_id length"); ++ return; ++ } + + memcpy(auth->dat, pkt->dat, auth->length); + + strncpy(tktrlm, (char *)auth->dat + 3, REALM_SZ); ++ tktrlm[REALM_SZ-1] = '\0'; + kvno = (krb5_kvno)auth->dat[2]; + if (set_tgtkey(tktrlm, kvno)) { + lt = klog(L_ERR_UNK, + "FAILED set_tgtkey realm %s, kvno %d. Host: %s ", + tktrlm, kvno, inet_ntoa(client_host)); +! /* no better error code */ +! kerb_err_reply(client, pkt, +! KERB_ERR_PRINCIPAL_UNKNOWN, lt); + return; + } + kerno = krb_rd_req(auth, "krbtgt", tktrlm, client_host.s_addr, +*************** +*** 863,869 **** + kerno = check_princ(service, instance, req_life, + &s_name_data, &k5key, 1); + if (kerno) { +! kerb_err_reply(client, pkt, kerno, lt); + s_name_data.key_high = s_name_data.key_low = 0; + krb5_free_keyblock_contents(kdc_context, &k5key); + return; +--- 888,894 ---- + kerno = check_princ(service, instance, req_life, + &s_name_data, &k5key, 1); + if (kerno) { +! kerb_err_reply(client, pkt, kerno, "check_princ failed"); + s_name_data.key_high = s_name_data.key_low = 0; + krb5_free_keyblock_contents(kdc_context, &k5key); + return; +*************** +*** 968,974 **** + static char e_msg[128]; + + strcpy(e_msg, "\nKerberos error -- "); +! strcat(e_msg, string); + cr_err_reply(e_pkt, req_name_ptr, req_inst_ptr, req_realm_ptr, + req_time_ws, err, e_msg); + krb4_sendto(f, (char *) e_pkt->dat, e_pkt->length, 0, +--- 993,999 ---- + static char e_msg[128]; + + strcpy(e_msg, "\nKerberos error -- "); +! strncat(e_msg, string, sizeof(e_msg) - 1 - 19); + cr_err_reply(e_pkt, req_name_ptr, req_inst_ptr, req_realm_ptr, + req_time_ws, err, e_msg); + krb4_sendto(f, (char *) e_pkt->dat, e_pkt->length, 0, +*************** +*** 1127,1133 **** + + if (!K4KDC_ENCTYPE_OK(k5key.enctype)) { + krb_set_key_krb5(kdc_context, &k5key); +! strcpy(lastrealm, r); + last_kvno = kvno; + } else { + /* unseal tgt key from master key */ +--- 1152,1159 ---- + + if (!K4KDC_ENCTYPE_OK(k5key.enctype)) { + krb_set_key_krb5(kdc_context, &k5key); +! strncpy(lastrealm, r, sizeof(lastrealm) - 1); +! lastrealm[sizeof(lastrealm) - 1] = '\0'; + last_kvno = kvno; + } else { + /* unseal tgt key from master key */ +*************** +*** 1136,1142 **** + kdb_encrypt_key(key, key, master_key, + master_key_schedule, DECRYPT); + krb_set_key((char *) key, 0); +! strcpy(lastrealm, r); + last_kvno = kvno; + } + krb5_free_keyblock_contents(kdc_context, &k5key); +--- 1162,1169 ---- + kdb_encrypt_key(key, key, master_key, + master_key_schedule, DECRYPT); + krb_set_key((char *) key, 0); +! strncpy(lastrealm, r, sizeof(lastrealm) - 1); +! lastrealm[sizeof(lastrealm) - 1] = '\0'; + last_kvno = kvno; + } + krb5_free_keyblock_contents(kdc_context, &k5key); +Index: lib/krb5/krb/kfree.c +diff -c krb5/src/lib/krb5/krb/kfree.c:5.3.4.1 krb5/src/lib/krb5/krb/kfree.c:5.3.4.2 +*** lib/krb5/krb/kfree.c:5.3.4.1 Wed Sep 22 20:50:11 1999 +--- lib/krb5/krb/kfree.c Mon Jun 5 18:30:06 2000 +*************** +*** 36,42 **** + if (val->contents) + krb5_xfree(val->contents); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 36,41 ---- +*************** +*** 52,58 **** + krb5_xfree(*temp); + } + krb5_xfree(val); +- return; + } + + +--- 51,56 ---- +*************** +*** 64,70 **** + if (val->enc_part.ciphertext.data) + krb5_xfree(val->enc_part.ciphertext.data); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 62,67 ---- +*************** +*** 77,83 **** + if (val->authenticator.ciphertext.data) + krb5_xfree(val->authenticator.ciphertext.data); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 74,79 ---- +*************** +*** 88,94 **** + if (val->subkey) + krb5_free_keyblock(context, val->subkey); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 84,89 ---- +*************** +*** 96,110 **** + krb5_context context; + krb5_authenticator FAR *val; + { +! if (val->checksum) + krb5_free_checksum(context, val->checksum); +! if (val->client) + krb5_free_principal(context, val->client); +! if (val->subkey) + krb5_free_keyblock(context, val->subkey); +! if (val->authorization_data) +! krb5_free_authdata(context, val->authorization_data); +! return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 91,112 ---- + krb5_context context; + krb5_authenticator FAR *val; + { +! if (val->checksum) { + krb5_free_checksum(context, val->checksum); +! val->checksum = 0; +! } +! if (val->client) { + krb5_free_principal(context, val->client); +! val->client = 0; +! } +! if (val->subkey) { + krb5_free_keyblock(context, val->subkey); +! val->subkey = 0; +! } +! if (val->authorization_data) { +! krb5_free_authdata(context, val->authorization_data); +! val->authorization_data = 0; +! } + } + + KRB5_DLLIMP void KRB5_CALLCONV +*************** +*** 120,126 **** + krb5_xfree(*temp); + } + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 122,127 ---- +*************** +*** 128,143 **** + krb5_context context; + krb5_authenticator FAR *val; + { +! if (val->checksum) +! krb5_free_checksum(context, val->checksum); +! if (val->client) +! krb5_free_principal(context, val->client); +! if (val->subkey) +! krb5_free_keyblock(context, val->subkey); +! if (val->authorization_data) +! krb5_free_authdata(context, val->authorization_data); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 129,136 ---- + krb5_context context; + krb5_authenticator FAR *val; + { +! krb5_free_authenticator_contents(context, val); + krb5_xfree(val); + } + + KRB5_DLLIMP void KRB5_CALLCONV +*************** +*** 145,154 **** + krb5_context context; + register krb5_checksum *val; + { +! if (val->contents) +! krb5_xfree(val->contents); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 138,145 ---- + krb5_context context; + register krb5_checksum *val; + { +! krb5_free_checksum_contents(context, val); + krb5_xfree(val); + } + + KRB5_DLLIMP void KRB5_CALLCONV +*************** +*** 156,164 **** + krb5_context context; + register krb5_checksum *val; + { +! if (val->contents) + krb5_xfree(val->contents); +! return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 147,156 ---- + krb5_context context; + register krb5_checksum *val; + { +! if (val->contents) { + krb5_xfree(val->contents); +! val->contents = 0; +! } + } + + KRB5_DLLIMP void KRB5_CALLCONV +*************** +*** 171,177 **** + if (val->enc_part.ciphertext.data) + krb5_xfree(val->enc_part.ciphertext.data); + krb5_xfree(val); +- return; + } + + /* +--- 163,168 ---- +*************** +*** 184,206 **** + krb5_context context; + krb5_creds FAR *val; + { +! if (val->client) + krb5_free_principal(context, val->client); +! if (val->server) + krb5_free_principal(context, val->server); + if (val->keyblock.contents) { + memset((char *)val->keyblock.contents, 0, val->keyblock.length); + krb5_xfree(val->keyblock.contents); + } +! if (val->ticket.data) + krb5_xfree(val->ticket.data); +! if (val->second_ticket.data) + krb5_xfree(val->second_ticket.data); +! if (val->addresses) + krb5_free_addresses(context, val->addresses); +! if (val->authdata) + krb5_free_authdata(context, val->authdata); +! return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 175,209 ---- + krb5_context context; + krb5_creds FAR *val; + { +! if (val->client) { + krb5_free_principal(context, val->client); +! val->client = 0; +! } +! if (val->server) { + krb5_free_principal(context, val->server); ++ val->server = 0; ++ } + if (val->keyblock.contents) { + memset((char *)val->keyblock.contents, 0, val->keyblock.length); + krb5_xfree(val->keyblock.contents); ++ val->keyblock.contents = 0; + } +! if (val->ticket.data) { + krb5_xfree(val->ticket.data); +! val->ticket.data = 0; +! } +! if (val->second_ticket.data) { + krb5_xfree(val->second_ticket.data); +! val->second_ticket.data = 0; +! } +! if (val->addresses) { + krb5_free_addresses(context, val->addresses); +! val->addresses = 0; +! } +! if (val->authdata) { + krb5_free_authdata(context, val->authdata); +! val->authdata = 0; +! } + } + + KRB5_DLLIMP void KRB5_CALLCONV +*************** +*** 210,219 **** + { + register krb5_cred_info **temp; + +! if (val->r_address) +! krb5_free_address(context, val->r_address); +! if (val->s_address) +! krb5_free_address(context, val->s_address); + + if (val->ticket_info) { + for (temp = val->ticket_info; *temp; temp++) { +--- 213,226 ---- + { + register krb5_cred_info **temp; + +! if (val->r_address) { +! krb5_free_address(context, val->r_address); +! val->r_address = 0; +! } +! if (val->s_address) { +! krb5_free_address(context, val->s_address); +! val->s_address = 0; +! } + + if (val->ticket_info) { + for (temp = val->ticket_info; *temp; temp++) { +*************** +*** 228,235 **** + krb5_xfree((*temp)); + } + krb5_xfree(val->ticket_info); + } +- return; + } + + +--- 235,242 ---- + krb5_xfree((*temp)); + } + krb5_xfree(val->ticket_info); ++ val->ticket_info = 0; + } + } + + +*************** +*** 240,246 **** + { + krb5_free_cred_contents(context, val); + krb5_xfree(val); +- return; + } + + +--- 247,252 ---- +*************** +*** 252,258 **** + if (val->data) + krb5_xfree(val->data); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 258,263 ---- +*************** +*** 260,268 **** + krb5_context context; + krb5_data FAR * val; + { +! if (val->data) + krb5_xfree(val->data); +! return; + } + + void krb5_free_etype_info(context, info) +--- 265,274 ---- + krb5_context context; + krb5_data FAR * val; + { +! if (val->data) { + krb5_xfree(val->data); +! val->data = 0; +! } + } + + void krb5_free_etype_info(context, info) +*************** +*** 294,300 **** + if (val->caddrs) + krb5_free_addresses(context, val->caddrs); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 300,305 ---- +*************** +*** 313,319 **** + if (val->authorization_data) + krb5_free_authdata(context, val->authorization_data); + krb5_xfree(val); +- return; + } + + +--- 318,323 ---- +*************** +*** 331,337 **** + if (val->e_data.data) + krb5_xfree(val->e_data.data); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 335,340 ---- +*************** +*** 350,356 **** + if (val->enc_part2) + krb5_free_enc_kdc_rep_part(context, val->enc_part2); + krb5_xfree(val); +- return; + } + + +--- 353,358 ---- +*************** +*** 376,382 **** + if (val->second_ticket) + krb5_free_tickets(context, val->second_ticket); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 378,383 ---- +*************** +*** 387,394 **** + if (key->contents) { + memset(key->contents, 0, key->length); + krb5_xfree(key->contents); + } +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 388,395 ---- + if (key->contents) { + memset(key->contents, 0, key->length); + krb5_xfree(key->contents); ++ key->contents = 0; + } + } + + KRB5_DLLIMP void KRB5_CALLCONV +*************** +*** 398,404 **** + { + krb5_free_keyblock_contents(context, val); + krb5_xfree(val); +- return; + } + + +--- 399,404 ---- +*************** +*** 413,419 **** + for (temp = val; *temp; temp++) + krb5_xfree(*temp); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 413,418 ---- +*************** +*** 429,435 **** + krb5_xfree(*temp); + } + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 428,433 ---- +*************** +*** 451,457 **** + if (val->realm.data) + krb5_xfree(val->realm.data); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 449,454 ---- +*************** +*** 462,468 **** + if (val->enc_part.ciphertext.data) + krb5_xfree(val->enc_part.ciphertext.data); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 459,464 ---- +*************** +*** 477,483 **** + if (val->s_address) + krb5_free_address(context, val->s_address); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 473,478 ---- +*************** +*** 488,494 **** + if (val->element) + krb5_free_pwd_sequences(context, val->element); + krb5_xfree(val); +- return; + } + + +--- 483,488 ---- +*************** +*** 497,507 **** + krb5_context context; + passwd_phrase_element FAR * FAR *val; + { +! if ((*val)->passwd) + krb5_xfree((*val)->passwd); +! if ((*val)->phrase) + krb5_xfree((*val)->phrase); +! return; + } + + +--- 491,504 ---- + krb5_context context; + passwd_phrase_element FAR * FAR *val; + { +! if ((*val)->passwd) { + krb5_xfree((*val)->passwd); +! (*val)->passwd = 0; +! } +! if ((*val)->phrase) { + krb5_xfree((*val)->phrase); +! (*val)->phrase = 0; +! } + } + + +*************** +*** 519,525 **** + if (val->checksum) + krb5_free_checksum(context, val->checksum); + krb5_xfree(val); +- return; + } + + +--- 516,521 ---- +*************** +*** 535,541 **** + if (val->enc_part2) + krb5_free_enc_tkt_part(context, val->enc_part2); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 531,536 ---- +*************** +*** 548,554 **** + for (temp = val; *temp; temp++) + krb5_free_ticket(context, *temp); + krb5_xfree(val); +- return; + } + + +--- 543,548 ---- +*************** +*** 573,579 **** + if (val->authenticator) + krb5_free_authenticator(context, val->authenticator); + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 567,572 ---- +*************** +*** 583,589 **** + { + if (val) + krb5_xfree(val); +- return; + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 576,581 ---- +*************** +*** 612,619 **** + krb5_free_data_contents(ctx, &sc->sam_response_prompt); + if (sc->sam_pk_for_sad.data) + krb5_free_data_contents(ctx, &sc->sam_pk_for_sad); +! if (sc->sam_cksum.contents) + krb5_xfree(sc->sam_cksum.contents); + } + + KRB5_DLLIMP void KRB5_CALLCONV +--- 604,613 ---- + krb5_free_data_contents(ctx, &sc->sam_response_prompt); + if (sc->sam_pk_for_sad.data) + krb5_free_data_contents(ctx, &sc->sam_pk_for_sad); +! if (sc->sam_cksum.contents) { + krb5_xfree(sc->sam_cksum.contents); ++ sc->sam_cksum.contents = 0; ++ } + } + + KRB5_DLLIMP void KRB5_CALLCONV +*************** +*** 685,688 **** + return; + krb5_xfree(pa_enc_ts); + } +- +--- 679,681 ---- diff -urPN --exclude=CVS --exclude=00_TRANS.TBL /opt/CVSup/usr/ports/security/krb5/patches/patch-cb /usr/local/ports-local/krb5-fixed/patches/patch-cb --- /krb5/patches/patch-cb Wed Dec 31 16:00:00 1969 +++ krb5-fixed/patches/patch-cb Thu Jun 15 06:18:55 2000 @@ -0,0 +1,24 @@ +Index: ftpcmd.y +=================================================================== +RCS file: /cvs/krbdev/krb5/src/appl/gssftp/ftpd/ftpcmd.y,v +retrieving revision 1.14 +diff -c -r1.14 ftpcmd.y +*** appl/gssftp/ftpd/ftpcmd.y 1999/03/24 22:14:02 1.14 +--- appl/gssftp/ftpd/ftpcmd.y 2000/06/14 17:35:19 +*************** +*** 865,871 **** + $$ = 0; + } + else +! $$ = 1; + } + ; + %% +--- 865,871 ---- + $$ = 0; + } + else +! $$ = $1; + } + ; + %% >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message