This commit is contained in:
parent
c1c1df81b9
commit
e64e277961
@ -1,7 +1,44 @@
|
||||
Index: src/include/k5-int.h
|
||||
===================================================================
|
||||
--- src/include/k5-int.h (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/include/k5-int.h (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -216,6 +216,10 @@
|
||||
/* required */
|
||||
#define KDC_ERR_SERVER_NOMATCH 26 /* Requested server and */
|
||||
/* ticket don't match*/
|
||||
+#define KDC_ERR_SVC_UNAVAILABLE 29 /* A service is not
|
||||
+ * available that is
|
||||
+ * required to process the
|
||||
+ * request */
|
||||
/* Application errors */
|
||||
#define KRB_AP_ERR_BAD_INTEGRITY 31 /* Decrypt integrity check failed */
|
||||
#define KRB_AP_ERR_TKT_EXPIRED 32 /* Ticket expired */
|
||||
@@ -498,7 +502,9 @@
|
||||
krb5_error_code krb5int_sendto (krb5_context context, const krb5_data *message,
|
||||
const struct addrlist *addrs, struct sendto_callback_info* callback_info,
|
||||
krb5_data *reply, struct sockaddr *localaddr, socklen_t *localaddrlen,
|
||||
- struct sockaddr *remoteaddr, socklen_t *remoteaddrlen, int *addr_used);
|
||||
+ struct sockaddr *remoteaddr, socklen_t *remoteaddrlen, int *addr_used,
|
||||
+ int (*msg_handler)(krb5_context, const krb5_data *, void *),
|
||||
+ void *msg_handler_data);
|
||||
|
||||
krb5_error_code krb5_get_krbhst (krb5_context, const krb5_data *, char *** );
|
||||
krb5_error_code krb5_free_krbhst (krb5_context, char * const * );
|
||||
@@ -1885,7 +1891,9 @@
|
||||
krb5_error_code (*sendto_udp) (krb5_context, const krb5_data *msg,
|
||||
const struct addrlist *, struct sendto_callback_info*, krb5_data *reply,
|
||||
struct sockaddr *, socklen_t *,struct sockaddr *,
|
||||
- socklen_t *, int *);
|
||||
+ socklen_t *, int *,
|
||||
+ int (*msg_handler)(krb5_context, const krb5_data *, void *),
|
||||
+ void *msg_handler_data);
|
||||
krb5_error_code (*add_host_to_list)(struct addrlist *lp,
|
||||
const char *hostname,
|
||||
int port, int secport,
|
||||
Index: src/clients/kvno/kvno.M
|
||||
===================================================================
|
||||
--- src/clients/kvno/kvno.M (.../tags/krb5-1-6-2-final) (Revision 19931)
|
||||
+++ src/clients/kvno/kvno.M (.../branches/krb5-1-6) (Revision 19931)
|
||||
--- src/clients/kvno/kvno.M (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/clients/kvno/kvno.M (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -55,6 +55,15 @@
|
||||
specifies that Kerberos version 4 tickets should be acquired and
|
||||
described. This option is only available if Kerberos 4 support was
|
||||
@ -20,8 +57,8 @@ Index: src/clients/kvno/kvno.M
|
||||
uses the following environment variable:
|
||||
Index: src/clients/kvno/kvno.c
|
||||
===================================================================
|
||||
--- src/clients/kvno/kvno.c (.../tags/krb5-1-6-2-final) (Revision 19931)
|
||||
+++ src/clients/kvno/kvno.c (.../branches/krb5-1-6) (Revision 19931)
|
||||
--- src/clients/kvno/kvno.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/clients/kvno/kvno.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -41,10 +41,10 @@
|
||||
{
|
||||
#ifdef KRB5_KRB4_COMPAT
|
||||
@ -115,8 +152,8 @@ Index: src/clients/kvno/kvno.c
|
||||
com_err(prog, ret, "while parsing principal name %s", names[i]);
|
||||
Index: src/lib/crypto/prng.c
|
||||
===================================================================
|
||||
--- src/lib/crypto/prng.c (.../tags/krb5-1-6-2-final) (Revision 19931)
|
||||
+++ src/lib/crypto/prng.c (.../branches/krb5-1-6) (Revision 19931)
|
||||
--- src/lib/crypto/prng.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/crypto/prng.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -162,7 +162,7 @@
|
||||
krb5_data data;
|
||||
struct stat sb;
|
||||
@ -156,8 +193,8 @@ Index: src/lib/crypto/prng.c
|
||||
data included in the reseed so we get it first.*/
|
||||
Index: src/lib/gssapi/spnego/spnego_mech.c
|
||||
===================================================================
|
||||
--- src/lib/gssapi/spnego/spnego_mech.c (.../tags/krb5-1-6-2-final) (Revision 19931)
|
||||
+++ src/lib/gssapi/spnego/spnego_mech.c (.../branches/krb5-1-6) (Revision 19931)
|
||||
--- src/lib/gssapi/spnego/spnego_mech.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/gssapi/spnego/spnego_mech.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -61,7 +61,7 @@
|
||||
/* private routines for spnego_mechanism */
|
||||
static spnego_token_t make_spnego_token(char *);
|
||||
@ -175,23 +212,310 @@ Index: src/lib/gssapi/spnego/spnego_mech.c
|
||||
if (ret == GSS_S_COMPLETE) {
|
||||
/*
|
||||
* Now, switch the output context to refer to the
|
||||
Index: src/lib/krb4/send_to_kdc.c
|
||||
===================================================================
|
||||
--- src/lib/krb4/send_to_kdc.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/krb4/send_to_kdc.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -181,7 +181,7 @@
|
||||
message.length = pkt->length;
|
||||
message.data = (char *)pkt->dat; /* XXX yuck */
|
||||
retval = internals.sendto_udp(NULL, &message, &al, NULL, &reply, addr,
|
||||
- addrlen, NULL, 0, NULL);
|
||||
+ addrlen, NULL, 0, NULL, NULL, NULL);
|
||||
DEB(("sendto_udp returns %d\n", retval));
|
||||
free_al:
|
||||
internals.free_addrlist(&al);
|
||||
Index: src/lib/krb5/os/sendto_kdc.c
|
||||
===================================================================
|
||||
--- src/lib/krb5/os/sendto_kdc.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/krb5/os/sendto_kdc.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* lib/krb5/os/sendto_kdc.c
|
||||
*
|
||||
- * Copyright 1990,1991,2001,2002,2004,2005 by the Massachusetts Institute of Technology.
|
||||
+ * Copyright 1990,1991,2001,2002,2004,2005,2007 by the Massachusetts Institute of Technology.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Export of this software from the United States of America may
|
||||
@@ -295,6 +295,30 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int
|
||||
+check_for_svc_unavailable (krb5_context context,
|
||||
+ const krb5_data *reply,
|
||||
+ void *msg_handler_data)
|
||||
+{
|
||||
+ krb5_error_code *retval = (krb5_error_code *)msg_handler_data;
|
||||
+
|
||||
+ *retval = 0;
|
||||
+
|
||||
+ if (krb5_is_krb_error(reply)) {
|
||||
+ krb5_error *err_reply;
|
||||
+
|
||||
+ if (decode_krb5_error(reply, &err_reply) == 0) {
|
||||
+ *retval = err_reply->error;
|
||||
+ krb5_free_error(context, err_reply);
|
||||
+
|
||||
+ /* Returning 0 means continue to next KDC */
|
||||
+ return (*retval != KDC_ERR_SVC_UNAVAILABLE);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* send the formatted request 'message' to a KDC for realm 'realm' and
|
||||
* return the response (if any) in 'reply'.
|
||||
@@ -381,9 +405,12 @@
|
||||
}
|
||||
|
||||
if (addrs.naddrs > 0) {
|
||||
+ krb5_error_code err = 0;
|
||||
+
|
||||
retval = krb5int_sendto (context, message, &addrs, 0, reply, 0, 0,
|
||||
- 0, 0, &addr_used);
|
||||
- if (retval == 0) {
|
||||
+ 0, 0, &addr_used, check_for_svc_unavailable, &err);
|
||||
+ switch (retval) {
|
||||
+ case 0:
|
||||
/*
|
||||
* Set use_master to 1 if we ended up talking to a master when
|
||||
* we didn't explicitly request to
|
||||
@@ -401,7 +428,19 @@
|
||||
}
|
||||
krb5int_free_addrlist (&addrs);
|
||||
return 0;
|
||||
- }
|
||||
+ default:
|
||||
+ break;
|
||||
+ /* Cases here are for constructing useful error messages. */
|
||||
+ case KRB5_KDC_UNREACH:
|
||||
+ if (err == KDC_ERR_SVC_UNAVAILABLE) {
|
||||
+ retval = KRB5KDC_ERR_SVC_UNAVAILABLE;
|
||||
+ } else {
|
||||
+ krb5_set_error_message(context, retval,
|
||||
+ "Cannot contact any KDC for realm '%.*s'",
|
||||
+ realm->length, realm->data);
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
krb5int_free_addrlist (&addrs);
|
||||
}
|
||||
return retval;
|
||||
@@ -1015,9 +1054,12 @@
|
||||
}
|
||||
|
||||
static int
|
||||
-service_fds (struct select_state *selstate,
|
||||
+service_fds (krb5_context context,
|
||||
+ struct select_state *selstate,
|
||||
struct conn_state *conns, size_t n_conns, int *winning_conn,
|
||||
- struct select_state *seltemp)
|
||||
+ struct select_state *seltemp,
|
||||
+ int (*msg_handler)(krb5_context, const krb5_data *, void *),
|
||||
+ void *msg_handler_data)
|
||||
{
|
||||
int e, selret;
|
||||
|
||||
@@ -1056,9 +1098,22 @@
|
||||
state_strings[(int) conns[i].state]);
|
||||
|
||||
if (conns[i].service (&conns[i], selstate, ssflags)) {
|
||||
- dprint("fd service routine says we're done\n");
|
||||
- *winning_conn = i;
|
||||
- return 1;
|
||||
+ int stop = 1;
|
||||
+
|
||||
+ if (msg_handler != NULL) {
|
||||
+ krb5_data reply;
|
||||
+
|
||||
+ reply.data = conns[i].x.in.buf;
|
||||
+ reply.length = conns[i].x.in.pos - conns[i].x.in.buf;
|
||||
+
|
||||
+ stop = (msg_handler(context, &reply, msg_handler_data) != 0);
|
||||
+ }
|
||||
+
|
||||
+ if (stop) {
|
||||
+ dprint("fd service routine says we're done\n");
|
||||
+ *winning_conn = i;
|
||||
+ return 1;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1098,7 +1153,10 @@
|
||||
struct sendto_callback_info* callback_info, krb5_data *reply,
|
||||
struct sockaddr *localaddr, socklen_t *localaddrlen,
|
||||
struct sockaddr *remoteaddr, socklen_t *remoteaddrlen,
|
||||
- int *addr_used)
|
||||
+ int *addr_used,
|
||||
+ /* return 0 -> keep going, 1 -> quit */
|
||||
+ int (*msg_handler)(krb5_context, const krb5_data *, void *),
|
||||
+ void *msg_handler_data)
|
||||
{
|
||||
int i, pass;
|
||||
int delay_this_pass = 2;
|
||||
@@ -1185,8 +1243,8 @@
|
||||
goto egress;
|
||||
sel_state->end_time = now;
|
||||
sel_state->end_time.tv_sec += 1;
|
||||
- e = service_fds(sel_state, conns, host+1, &winning_conn,
|
||||
- sel_state+1);
|
||||
+ e = service_fds(context, sel_state, conns, host+1, &winning_conn,
|
||||
+ sel_state+1, msg_handler, msg_handler_data);
|
||||
if (e)
|
||||
break;
|
||||
if (pass > 0 && sel_state->nfds == 0)
|
||||
@@ -1206,7 +1264,8 @@
|
||||
call with the last one from the above loop, if the loop
|
||||
actually calls select. */
|
||||
sel_state->end_time.tv_sec += delay_this_pass;
|
||||
- e = service_fds(sel_state, conns, host+1, &winning_conn, sel_state+1);
|
||||
+ e = service_fds(context, sel_state, conns, host+1, &winning_conn,
|
||||
+ sel_state+1, msg_handler, msg_handler_data);
|
||||
if (e)
|
||||
break;
|
||||
if (sel_state->nfds == 0)
|
||||
Index: src/lib/krb5/os/send524.c
|
||||
===================================================================
|
||||
--- src/lib/krb5/os/send524.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/krb5/os/send524.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -98,7 +98,7 @@
|
||||
if (al.naddrs == 0)
|
||||
return KRB5_REALM_UNKNOWN;
|
||||
|
||||
- retval = krb5int_sendto (context, message, &al, NULL, reply, addr, addrlen, NULL, 0, NULL);
|
||||
+ retval = krb5int_sendto (context, message, &al, NULL, reply, addr, addrlen, NULL, 0, NULL, NULL, NULL);
|
||||
krb5int_free_addrlist (&al);
|
||||
return retval;
|
||||
#else
|
||||
Index: src/lib/krb5/os/changepw.c
|
||||
===================================================================
|
||||
--- src/lib/krb5/os/changepw.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/krb5/os/changepw.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -247,6 +247,8 @@
|
||||
NULL,
|
||||
ss2sa(&remote_addr),
|
||||
&addrlen,
|
||||
+ NULL,
|
||||
+ NULL,
|
||||
NULL
|
||||
))) {
|
||||
|
||||
Index: src/lib/krb5/error_tables/krb5_err.et
|
||||
===================================================================
|
||||
--- src/lib/krb5/error_tables/krb5_err.et (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/krb5/error_tables/krb5_err.et (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# lib/krb5/error_tables/krb5_err.et
|
||||
#
|
||||
-# Copyright 1989,1990,1991 by the Massachusetts Institute of Technology.
|
||||
+# Copyright 1989,1990,1991,2007 by the Massachusetts Institute of Technology.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Export of this software from the United States of America may
|
||||
@@ -68,7 +68,7 @@
|
||||
error_code KRB5KDC_ERR_SERVER_NOMATCH, "Requested server and ticket don't match"
|
||||
error_code KRB5PLACEHOLD_27, "KRB5 error code 27"
|
||||
error_code KRB5PLACEHOLD_28, "KRB5 error code 28"
|
||||
-error_code KRB5PLACEHOLD_29, "KRB5 error code 29"
|
||||
+error_code KRB5KDC_ERR_SVC_UNAVAILABLE, "A service is not available that is required to process the request"
|
||||
error_code KRB5PLACEHOLD_30, "KRB5 error code 30"
|
||||
# vv 31
|
||||
error_code KRB5KRB_AP_ERR_BAD_INTEGRITY, "Decrypt integrity check failed"
|
||||
Index: src/lib/krb5/ccache/t_cc.c
|
||||
===================================================================
|
||||
--- src/lib/krb5/ccache/t_cc.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/krb5/ccache/t_cc.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -123,6 +123,7 @@
|
||||
krb5_cc_cursor cursor;
|
||||
const char *c_name;
|
||||
char newcache[300];
|
||||
+ char *save_type;
|
||||
|
||||
init_test_cred(context);
|
||||
|
||||
@@ -135,7 +136,9 @@
|
||||
CHECK_STR(c_name, "get_name");
|
||||
|
||||
c_name = krb5_cc_get_type(context, id);
|
||||
- CHECK_STR(c_name, "get_prefix");
|
||||
+ CHECK_STR(c_name, "get_type");
|
||||
+ save_type=strdup(c_name);
|
||||
+ CHECK_STR(save_type, "copying type");
|
||||
|
||||
kret = krb5_cc_store_cred(context, id, &test_creds);
|
||||
CHECK(kret, "store");
|
||||
@@ -192,17 +195,22 @@
|
||||
kret = krb5_cc_destroy(context, id);
|
||||
CHECK(kret, "destroy");
|
||||
|
||||
-#if 0
|
||||
/* ----------------------------------------------------- */
|
||||
/* Tests the generate new code */
|
||||
- kret = krb5_cc_resolve(context, name, &id);
|
||||
- CHECK(kret, "resolve");
|
||||
- kret = krb5_cc_gen_new(context, &id);
|
||||
- CHECK(kret, "gen_new");
|
||||
- kret = krb5_cc_destroy(context, id);
|
||||
- CHECK(kret, "destroy");
|
||||
-#endif
|
||||
+ kret = krb5_cc_new_unique(context, save_type,
|
||||
+ NULL, &id2);
|
||||
+ CHECK(kret, "new_unique");
|
||||
+
|
||||
+ kret = krb5_cc_initialize(context, id2, test_creds.client);
|
||||
+ CHECK(kret, "initialize");
|
||||
|
||||
+ kret = krb5_cc_store_cred(context, id2, &test_creds);
|
||||
+ CHECK(kret, "store");
|
||||
+
|
||||
+ kret = krb5_cc_destroy(context, id2);
|
||||
+ CHECK(kret, "destroy id2");
|
||||
+
|
||||
+ free(save_type);
|
||||
free_test_cred(context);
|
||||
|
||||
}
|
||||
Index: src/lib/krb5/ccache/cc_file.c
|
||||
===================================================================
|
||||
--- src/lib/krb5/ccache/cc_file.c (.../tags/krb5-1-6-2-final) (Revision 19931)
|
||||
+++ src/lib/krb5/ccache/cc_file.c (.../branches/krb5-1-6) (Revision 19931)
|
||||
@@ -1954,6 +1954,9 @@
|
||||
--- src/lib/krb5/ccache/cc_file.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/krb5/ccache/cc_file.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -1950,115 +1950,165 @@
|
||||
{
|
||||
krb5_ccache lid;
|
||||
int ret;
|
||||
- krb5_error_code retcode = 0;
|
||||
+ krb5_error_code kret = 0;
|
||||
char scratch[sizeof(TKT_ROOT)+6+1]; /* +6 for the scratch part, +1 for
|
||||
NUL */
|
||||
krb5_fcc_data *data;
|
||||
+ krb5_int16 fcc_fvno = htons(context->fcc_default_format);
|
||||
+ krb5_int16 fcc_flen = 0;
|
||||
+ int errsave, cnt;
|
||||
+ struct fcc_set *setptr;
|
||||
|
||||
/* Allocate memory */
|
||||
lid = (krb5_ccache) malloc(sizeof(struct _krb5_ccache));
|
||||
@@ -1968,13 +1971,20 @@
|
||||
- /* Allocate memory */
|
||||
- lid = (krb5_ccache) malloc(sizeof(struct _krb5_ccache));
|
||||
- if (lid == NULL)
|
||||
- return KRB5_CC_NOMEM;
|
||||
+ /* Set master lock */
|
||||
+ kret = k5_mutex_lock(&krb5int_cc_file_mutex);
|
||||
+ if (kret)
|
||||
+ return kret;
|
||||
|
||||
- lid->ops = &krb5_fcc_ops;
|
||||
-
|
||||
(void) strcpy(scratch, TKT_ROOT);
|
||||
(void) strcat(scratch, "XXXXXX");
|
||||
#ifdef HAVE_MKSTEMP
|
||||
ret = mkstemp(scratch);
|
||||
if (ret == -1) {
|
||||
+ k5_mutex_unlock(&krb5int_cc_file_mutex);
|
||||
return krb5_fcc_interpret(context, errno);
|
||||
- } else close(ret);
|
||||
+ }
|
||||
@ -204,36 +528,73 @@ Index: src/lib/krb5/ccache/cc_file.c
|
||||
+ }
|
||||
#endif
|
||||
|
||||
lid->data = (krb5_pointer) malloc(sizeof(krb5_fcc_data));
|
||||
if (lid->data == NULL) {
|
||||
- lid->data = (krb5_pointer) malloc(sizeof(krb5_fcc_data));
|
||||
- if (lid->data == NULL) {
|
||||
- krb5_xfree(lid);
|
||||
+ /* Allocate memory */
|
||||
+ data = (krb5_pointer) malloc(sizeof(krb5_fcc_data));
|
||||
+ if (data == NULL) {
|
||||
+ close(ret);
|
||||
+ unlink(scratch);
|
||||
krb5_xfree(lid);
|
||||
+ k5_mutex_unlock(&krb5int_cc_file_mutex);
|
||||
return KRB5_CC_NOMEM;
|
||||
}
|
||||
@@ -1982,6 +1992,8 @@
|
||||
((krb5_fcc_data *) lid->data)->filename = (char *)
|
||||
malloc(strlen(scratch) + 1);
|
||||
if (((krb5_fcc_data *) lid->data)->filename == NULL) {
|
||||
|
||||
- ((krb5_fcc_data *) lid->data)->filename = (char *)
|
||||
- malloc(strlen(scratch) + 1);
|
||||
- if (((krb5_fcc_data *) lid->data)->filename == NULL) {
|
||||
- krb5_xfree(((krb5_fcc_data *) lid->data));
|
||||
- krb5_xfree(lid);
|
||||
+ data->filename = strdup(scratch);
|
||||
+ if (data->filename == NULL) {
|
||||
+ k5_mutex_unlock(&krb5int_cc_file_mutex);
|
||||
+ free(data);
|
||||
+ close(ret);
|
||||
+ unlink(scratch);
|
||||
krb5_xfree(((krb5_fcc_data *) lid->data));
|
||||
krb5_xfree(lid);
|
||||
+ k5_mutex_unlock(&krb5int_cc_file_mutex);
|
||||
return KRB5_CC_NOMEM;
|
||||
@@ -1996,63 +2008,54 @@
|
||||
data = (krb5_fcc_data *) lid->data;
|
||||
}
|
||||
|
||||
retcode = k5_mutex_init(&data->lock);
|
||||
- if (retcode)
|
||||
+ if (retcode) {
|
||||
+ close(ret);
|
||||
+ unlink(scratch);
|
||||
goto err_out;
|
||||
+ kret = k5_mutex_init(&data->lock);
|
||||
+ if (kret) {
|
||||
+ k5_mutex_unlock(&krb5int_cc_file_mutex);
|
||||
+ free(data->filename);
|
||||
+ free(data);
|
||||
+ close(ret);
|
||||
+ unlink(scratch);
|
||||
+ return kret;
|
||||
+ }
|
||||
+ kret = k5_mutex_lock(&data->lock);
|
||||
+ if (kret) {
|
||||
+ k5_mutex_unlock(&krb5int_cc_file_mutex);
|
||||
+ k5_mutex_destroy(&data->lock);
|
||||
+ free(data->filename);
|
||||
+ free(data);
|
||||
+ close(ret);
|
||||
+ unlink(scratch);
|
||||
+ return kret;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* The file is initially closed at the end of this call...
|
||||
*/
|
||||
- ((krb5_fcc_data *) lid->data)->flags = 0;
|
||||
- ((krb5_fcc_data *) lid->data)->file = -1;
|
||||
- ((krb5_fcc_data *) lid->data)->valid_bytes = 0;
|
||||
- data = (krb5_fcc_data *) lid->data;
|
||||
+ data->flags = 0;
|
||||
+ data->file = -1;
|
||||
+ data->valid_bytes = 0;
|
||||
+ /* data->version,mode filled in for real later */
|
||||
+ data->version = data->mode = 0;
|
||||
|
||||
/* Set up the filename */
|
||||
strcpy(((krb5_fcc_data *) lid->data)->filename, scratch);
|
||||
- retcode = k5_mutex_init(&data->lock);
|
||||
- if (retcode)
|
||||
- goto err_out;
|
||||
|
||||
- /* Set up the filename */
|
||||
- strcpy(((krb5_fcc_data *) lid->data)->filename, scratch);
|
||||
-
|
||||
- /* Make sure the file name is reserved */
|
||||
- ret = THREEPARAMOPEN(((krb5_fcc_data *) lid->data)->filename,
|
||||
- O_CREAT | O_EXCL | O_WRONLY | O_BINARY, 0);
|
||||
@ -250,7 +611,7 @@ Index: src/lib/krb5/ccache/cc_file.c
|
||||
#ifndef HAVE_FCHMOD
|
||||
#ifdef HAVE_CHMOD
|
||||
- chmod(((krb5_fcc_data *) lid->data)->filename, S_IRUSR | S_IWUSR);
|
||||
+ chmod(((krb5_fcc_data *) lid->data)->filename, S_IRUSR | S_IWUSR);
|
||||
+ chmod(data->filename, S_IRUSR | S_IWUSR);
|
||||
#endif
|
||||
#else
|
||||
- fchmod(ret, S_IRUSR | S_IWUSR);
|
||||
@ -267,8 +628,8 @@ Index: src/lib/krb5/ccache/cc_file.c
|
||||
+ != sizeof(fcc_fvno)) {
|
||||
+ errsave = errno;
|
||||
+ (void) close(ret);
|
||||
+ (void) unlink(((krb5_fcc_data *) lid->data)->filename);
|
||||
+ retcode = (cnt == -1) ? krb5_fcc_interpret(context, errsave) : KRB5_CC_IO;
|
||||
+ (void) unlink(data->filename);
|
||||
+ kret = (cnt == -1) ? krb5_fcc_interpret(context, errsave) : KRB5_CC_IO;
|
||||
+ goto err_out;
|
||||
+ }
|
||||
+ /* For version 4 we save a length for the rest of the header */
|
||||
@ -277,8 +638,8 @@ Index: src/lib/krb5/ccache/cc_file.c
|
||||
+ != sizeof(fcc_flen)) {
|
||||
+ errsave = errno;
|
||||
+ (void) close(ret);
|
||||
+ (void) unlink(((krb5_fcc_data *) lid->data)->filename);
|
||||
+ retcode = (cnt == -1) ? krb5_fcc_interpret(context, errsave) : KRB5_CC_IO;
|
||||
+ (void) unlink(data->filename);
|
||||
+ kret = (cnt == -1) ? krb5_fcc_interpret(context, errsave) : KRB5_CC_IO;
|
||||
+ goto err_out;
|
||||
}
|
||||
- /* For version 4 we save a length for the rest of the header */
|
||||
@ -307,23 +668,67 @@ Index: src/lib/krb5/ccache/cc_file.c
|
||||
}
|
||||
+ if (close(ret) == -1) {
|
||||
+ errsave = errno;
|
||||
+ (void) unlink(((krb5_fcc_data *) lid->data)->filename);
|
||||
+ retcode = krb5_fcc_interpret(context, errsave);
|
||||
+ (void) unlink(data->filename);
|
||||
+ kret = krb5_fcc_interpret(context, errsave);
|
||||
+ goto err_out;
|
||||
+ }
|
||||
+ *id = lid;
|
||||
|
||||
+
|
||||
+ setptr = malloc(sizeof(struct fcc_set));
|
||||
+ if (setptr == NULL) {
|
||||
+ k5_mutex_unlock(&krb5int_cc_file_mutex);
|
||||
+ k5_mutex_destroy(&data->lock);
|
||||
+ free(data->filename);
|
||||
+ free(data);
|
||||
+ (void) close(ret);
|
||||
+ (void) unlink(scratch);
|
||||
+ return KRB5_CC_NOMEM;
|
||||
+ }
|
||||
+ setptr->refcount = 1;
|
||||
+ setptr->data = data;
|
||||
+ setptr->next = fccs;
|
||||
+ fccs = setptr;
|
||||
+ k5_mutex_unlock(&krb5int_cc_file_mutex);
|
||||
+
|
||||
+ k5_mutex_assert_locked(&data->lock);
|
||||
+ k5_mutex_unlock(&data->lock);
|
||||
+ lid = (krb5_ccache) malloc(sizeof(struct _krb5_ccache));
|
||||
+ if (lid == NULL) {
|
||||
+ dereference(context, data);
|
||||
+ return KRB5_CC_NOMEM;
|
||||
+ }
|
||||
+
|
||||
+ lid->ops = &krb5_fcc_ops;
|
||||
+ lid->data = data;
|
||||
+ lid->magic = KV5M_CCACHE;
|
||||
+
|
||||
+ /* default to open/close on every trn - otherwise destroy
|
||||
+ will get as to state confused */
|
||||
+ ((krb5_fcc_data *) lid->data)->flags = KRB5_TC_OPENCLOSE;
|
||||
+
|
||||
+ *id = lid;
|
||||
+
|
||||
+
|
||||
+ krb5_change_cache ();
|
||||
+ return KRB5_OK;
|
||||
|
||||
+
|
||||
err_out:
|
||||
krb5_xfree(((krb5_fcc_data *) lid->data)->filename);
|
||||
- krb5_xfree(((krb5_fcc_data *) lid->data)->filename);
|
||||
- krb5_xfree(((krb5_fcc_data *) lid->data));
|
||||
- krb5_xfree(lid);
|
||||
- return retcode;
|
||||
+ k5_mutex_unlock(&krb5int_cc_file_mutex);
|
||||
+ k5_mutex_destroy(&data->lock);
|
||||
+ free(data->filename);
|
||||
+ free(data);
|
||||
+ return kret;
|
||||
}
|
||||
|
||||
/*
|
||||
Index: src/lib/krb5/ccache/ccfns.c
|
||||
===================================================================
|
||||
--- src/lib/krb5/ccache/ccfns.c (.../tags/krb5-1-6-2-final) (Revision 19931)
|
||||
+++ src/lib/krb5/ccache/ccfns.c (.../branches/krb5-1-6) (Revision 19931)
|
||||
--- src/lib/krb5/ccache/ccfns.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/krb5/ccache/ccfns.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* lib/krb5/ccache/ccfns.c
|
||||
@ -391,8 +796,8 @@ Index: src/lib/krb5/ccache/ccfns.c
|
||||
krb5_error_code KRB5_CALLCONV
|
||||
Index: src/lib/krb5/krb/gc_frm_kdc.c
|
||||
===================================================================
|
||||
--- src/lib/krb5/krb/gc_frm_kdc.c (.../tags/krb5-1-6-2-final) (Revision 19931)
|
||||
+++ src/lib/krb5/krb/gc_frm_kdc.c (.../branches/krb5-1-6) (Revision 19931)
|
||||
--- src/lib/krb5/krb/gc_frm_kdc.c (.../tags/krb5-1-6-2-final) (Revision 19936)
|
||||
+++ src/lib/krb5/krb/gc_frm_kdc.c (.../branches/krb5-1-6) (Revision 19936)
|
||||
@@ -906,7 +906,6 @@
|
||||
/* Whether or not that succeeded, we're done. */
|
||||
goto cleanup;
|
||||
@ -450,3 +855,4 @@ Index: src/lib/krb5/krb/gc_frm_kdc.c
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -13,18 +13,18 @@
|
||||
Name: krb5-doc
|
||||
BuildRequires: ghostscript-library latex2html texlive
|
||||
Version: 1.6.2
|
||||
Release: 28
|
||||
Release: 29
|
||||
%define srcRoot krb5-1.6.2
|
||||
Summary: MIT Kerberos5 Implementation--Documentation
|
||||
License: X11/MIT
|
||||
URL: http://web.mit.edu/kerberos/www/
|
||||
Url: http://web.mit.edu/kerberos/www/
|
||||
Group: Documentation/Other
|
||||
Source: krb5-1.6.2.tar.bz2
|
||||
Source1: README.Source
|
||||
Source2: Makefile.kadm5
|
||||
Patch0: krb5-1.3.5-perlfix.dif
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
BuildArchitectures: noarch
|
||||
BuildArch: noarch
|
||||
|
||||
%description
|
||||
Kerberos V5 is a trusted-third-party network authentication
|
||||
|
@ -1,3 +1,11 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Sep 14 12:10:01 CEST 2007 - mc@suse.de
|
||||
|
||||
- update krb5-1.6.2-post.dif
|
||||
* If a KDC returns KDC_ERR_SVC_UNAVAILABLE, it appears that
|
||||
that the client library will not failover to the next KDC.
|
||||
[#310540]
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Sep 11 15:11:34 CEST 2007 - mc@suse.de
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
Name: krb5-plugins
|
||||
Version: 1.6.2
|
||||
Release: 3
|
||||
Release: 4
|
||||
BuildRequires: bison krb5-devel ncurses-devel openldap2-devel
|
||||
%define srcRoot krb5-1.6.2
|
||||
%define vendorFiles %{_builddir}/%{srcRoot}/vendor-files/
|
||||
@ -21,7 +21,7 @@ BuildRequires: bison krb5-devel ncurses-devel openldap2-devel
|
||||
Requires: krb5-server
|
||||
Summary: MIT Kerberos5 Implementation--Libraries
|
||||
License: X11/MIT
|
||||
URL: http://web.mit.edu/kerberos/www/
|
||||
Url: http://web.mit.edu/kerberos/www/
|
||||
Group: Productivity/Networking/Security
|
||||
Source: krb5-1.6.2.tar.bz2
|
||||
Source1: vendor-files.tar.bz2
|
||||
@ -66,7 +66,7 @@ Authors:
|
||||
Requires: krb5-server = %{version}
|
||||
Summary: MIT Kerberos5 Implementation--LDAP Database Plugin
|
||||
License: X11/MIT
|
||||
URL: http://web.mit.edu/kerberos/www/
|
||||
Url: http://web.mit.edu/kerberos/www/
|
||||
Group: Productivity/Networking/Security
|
||||
|
||||
%description -n krb5-plugin-kdb-ldap
|
||||
@ -209,6 +209,11 @@ rm -rf %{buildroot}
|
||||
%{_mandir}/man8/*
|
||||
|
||||
%changelog
|
||||
* Fri Sep 14 2007 - mc@suse.de
|
||||
- update krb5-1.6.2-post.dif
|
||||
* If a KDC returns KDC_ERR_SVC_UNAVAILABLE, it appears that
|
||||
that the client library will not failover to the next KDC.
|
||||
[#310540]
|
||||
* Tue Sep 11 2007 - mc@suse.de
|
||||
- update krb5-1.6.2-post.dif
|
||||
* new -S sname option for kvno
|
||||
|
@ -1,3 +1,11 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Sep 14 12:08:55 CEST 2007 - mc@suse.de
|
||||
|
||||
- update krb5-1.6.2-post.dif
|
||||
* If a KDC returns KDC_ERR_SVC_UNAVAILABLE, it appears that
|
||||
that the client library will not failover to the next KDC.
|
||||
[#310540]
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Sep 11 15:09:14 CEST 2007 - mc@suse.de
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
Name: krb5
|
||||
Version: 1.6.2
|
||||
Release: 18
|
||||
Release: 19
|
||||
BuildRequires: bison libcom_err-devel ncurses-devel
|
||||
%if %{suse_version} > 1010
|
||||
BuildRequires: keyutils keyutils-devel
|
||||
@ -24,7 +24,7 @@ Provides: heimdal-lib
|
||||
Obsoletes: heimdal-lib
|
||||
Summary: MIT Kerberos5 Implementation--Libraries
|
||||
License: X11/MIT
|
||||
URL: http://web.mit.edu/kerberos/www/
|
||||
Url: http://web.mit.edu/kerberos/www/
|
||||
Group: Productivity/Networking/Security
|
||||
Source: krb5-1.6.2.tar.bz2
|
||||
Source1: vendor-files.tar.bz2
|
||||
@ -513,6 +513,11 @@ rm -rf %{buildroot}
|
||||
%{_mandir}/man1/krb5-config.1*
|
||||
|
||||
%changelog
|
||||
* Fri Sep 14 2007 - mc@suse.de
|
||||
- update krb5-1.6.2-post.dif
|
||||
* If a KDC returns KDC_ERR_SVC_UNAVAILABLE, it appears that
|
||||
that the client library will not failover to the next KDC.
|
||||
[#310540]
|
||||
* Tue Sep 11 2007 - mc@suse.de
|
||||
- update krb5-1.6.2-post.dif
|
||||
* new -S sname option for kvno
|
||||
|
Loading…
Reference in New Issue
Block a user