5
5
* Written by Frank Dabek July 1998
6
6
* Updated by Jeffrey Altman June 2006
8
* Copyright 1998, 1999, 2006 by the Massachusetts Institute of Technology.
8
* Copyright 1998, 1999, 2006, 2008 by the Massachusetts Institute of Technology.
9
9
* All Rights Reserved.
11
11
* Export of this software from the United States of America may
88
90
krb5_stdccv3_ptcursor_new,
89
91
krb5_stdccv3_ptcursor_next,
90
92
krb5_stdccv3_ptcursor_free,
94
krb5_stdccv3_last_change_time, /* lastchange */
95
NULL, /* wasdefault */
95
99
krb5_stdcc_get_name,
96
100
krb5_stdcc_resolve,
230
234
krb5_error_code err = 0;
232
236
if (gCCVersion >= ccapi_version_5) {
233
krb5_os_context os_ctx = (krb5_os_context) in_context->os_context;
237
krb5_os_context os_ctx = (krb5_os_context) &in_context->os_context;
234
238
cc_time_t time_offset = 0;
236
240
err = cc_ccache_get_kdc_time_offset (in_ccache, cc_credentials_v5,
257
261
krb5_error_code err = 0;
259
263
if (gCCVersion >= ccapi_version_5) {
260
krb5_os_context os_ctx = (krb5_os_context) in_context->os_context;
264
krb5_os_context os_ctx = (krb5_os_context) &in_context->os_context;
262
266
if (!err && os_ctx->os_flags & KRB5_OS_TOFFSET_VALID) {
263
267
err = cc_ccache_set_kdc_time_offset (in_ccache,
346
name = (char *) malloc (sizeof (*name) * (strlen (ccstring->data) + 1));
350
name = strdup (ccstring->data);
347
351
if (!name) { err = KRB5_CC_NOMEM; }
351
strcpy (name, ccstring->data);
352
355
ccapi_data->cache_name = name;
353
356
name = NULL; /* take ownership */
936
name = (char *) malloc (sizeof (*name) * (strlen (ccstring->data) + 1));
941
name = strdup (ccstring->data);
937
942
if (!name) { err = KRB5_CC_NOMEM; }
941
strcpy (name, ccstring->data);
942
946
ccapi_data->cache_name = name;
943
947
name = NULL; /* take ownership */
989
krb5_error_code KRB5_CALLCONV krb5_stdccv3_last_change_time
990
(krb5_context context, krb5_ccache id,
991
krb5_timestamp *change_time)
993
krb5_error_code err = 0;
994
stdccCacheDataPtr ccapi_data = id->data;
995
cc_time_t ccapi_change_time = 0;
1000
err = stdccv3_setup(context, ccapi_data);
1003
err = cc_ccache_get_change_time (ccapi_data->NamedCache, &ccapi_change_time);
1006
*change_time = ccapi_change_time;
1009
return cc_err_xlate (err);
1012
krb5_error_code KRB5_CALLCONV krb5_stdccv3_lock
1013
(krb5_context context, krb5_ccache id)
1015
krb5_error_code err = 0;
1016
stdccCacheDataPtr ccapi_data = id->data;
1019
err = stdccv3_setup(context, ccapi_data);
1022
err = cc_ccache_lock(ccapi_data->NamedCache, cc_lock_write, cc_lock_block);
1024
return cc_err_xlate(err);
1027
krb5_error_code KRB5_CALLCONV krb5_stdccv3_unlock
1028
(krb5_context context, krb5_ccache id)
1030
krb5_error_code err = 0;
1031
stdccCacheDataPtr ccapi_data = id->data;
1034
err = stdccv3_setup(context, ccapi_data);
1037
err = cc_ccache_unlock(ccapi_data->NamedCache);
1039
return cc_err_xlate(err);
1042
krb5_error_code KRB5_CALLCONV krb5_stdccv3_context_lock
1043
(krb5_context context)
1045
krb5_error_code err = 0;
1047
if (!err && !gCntrlBlock) {
1048
err = cc_initialize (&gCntrlBlock, ccapi_version_max, &gCCVersion, NULL);
1051
err = cc_context_lock(gCntrlBlock, cc_lock_write, cc_lock_block);
1053
return cc_err_xlate(err);
1056
krb5_error_code KRB5_CALLCONV krb5_stdccv3_context_unlock
1057
(krb5_context context)
1059
krb5_error_code err = 0;
1061
if (!err && !gCntrlBlock) {
1062
err = cc_initialize (&gCntrlBlock, ccapi_version_max, &gCCVersion, NULL);
1065
err = cc_context_unlock(gCntrlBlock);
1067
return cc_err_xlate(err);
985
1070
#else /* !USE_CCAPI_V3 */
987
1072
static krb5_error_code stdcc_setup(krb5_context context,
1061
1146
/* create a unique name */
1062
1147
cc_get_change_time(gCntrlBlock, &change_time);
1063
sprintf(name, "gen_new_cache%d", change_time);
1148
snprintf(name, 256, "gen_new_cache%d", change_time);
1065
1150
/* create the new cache */
1066
1151
err = cc_create(gCntrlBlock, name, name, CC_CRED_V5, 0L,
1114
1199
if (!(ccapi_data = (stdccCacheDataPtr)malloc(sizeof(stdccCacheData))))
1117
if (!(cName = malloc(strlen(residual)+1)))
1202
if (!(cName = strdup(residual)))
1120
1205
newCache->ops = &krb5_cc_stdcc_ops;
1121
1206
newCache->data = ccapi_data;
1122
1207
ccapi_data->cache_name = cName;
1124
strcpy(cName, residual);
1126
1209
err = cc_open(gCntrlBlock, cName, CC_CRED_V5, 0L,
1127
1210
&ccapi_data->NamedCache);
1128
1211
if (err != CC_NOERROR) {