]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
merge to trunk rev 18332 ldap-integ
authorKen Raeburn <raeburn@mit.edu>
Mon, 17 Jul 2006 20:57:49 +0000 (20:57 +0000)
committerKen Raeburn <raeburn@mit.edu>
Mon, 17 Jul 2006 20:57:49 +0000 (20:57 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/branches/ldap-integ@18333 dc483132-0cff-0310-8789-dd5450dbe970

26 files changed:
src/aclocal.m4
src/appl/gssftp/ftpd/Makefile.in
src/kadmin/ktutil/ktutil.M
src/lib/ccapi/client/ccache.c
src/lib/ccapi/client/ccache.h
src/lib/ccapi/client/context.c
src/lib/ccapi/client/context.h
src/lib/ccapi/common/generic_lists.c
src/lib/ccapi/common/marshall.c
src/lib/ccapi/common/msg.c
src/lib/ccapi/include/CredentialsCache.h
src/lib/ccapi/include/CredentialsCache2.h
src/lib/ccapi/include/generic_lists.h
src/lib/ccapi/include/msg.h
src/lib/ccapi/mac/CCAPI.xcodeproj/lxs.pbxuser [deleted file]
src/lib/ccapi/mac/CCAPI.xcodeproj/lxs.perspective [deleted file]
src/lib/ccapi/mac/CCAPI.xcodeproj/project.pbxproj
src/lib/ccapi/server/ccs_lists.c
src/lib/ccapi/server/mac/main.c
src/lib/ccapi/server/rpc_auth.c
src/lib/gssapi/krb5/indicate_mechs.c
src/lib/krb5/ccache/ccapi/stdcc.c
src/lib/krb5/ccache/ccapi/stdcc.h
src/lib/krb5/ccache/ccapi/stdcc_util.c
src/lib/krb5/ccache/ccapi/stdcc_util.h
src/plugins/kdb/db2/Makefile.in

index 85adb41113fd298d45213edb48a26c1b49f9ac9e..62081052bd4234163c79677d6c348e52c5affad0 100644 (file)
@@ -158,9 +158,14 @@ fi
 
 dnl find dlopen
 AC_DEFUN([KRB5_AC_FIND_DLOPEN],[
-AC_CHECK_LIB(dl, dlopen,[DL_LIB=-ldl
+old_LIBS="$LIBS"
+DL_LIB=
+AC_SEARCH_LIBS(dlopen, dl, [
+if test "$ac_cv_search_dlopen" != "none required"; then
+  DL_LIB=$ac_cv_search_dlopen
+fi
+LIBS="$old_LIBS"
 AC_DEFINE(USE_DLOPEN,1,[Define if dlopen should be used])])
-dnl AC_CHECK_LIB(ld, main, DL_LIB=-lld)
 AC_SUBST(DL_LIB)
 ])
 
index 1f0444c6574964a141d42c5080c47d7819fd9f6e..0050893263de95ed07adaa839feefd19795a86b6 100644 (file)
@@ -111,4 +111,3 @@ $(OUTPRE)secure.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
   $(SRCTOP)/include/kerberosIV/des.h $(SRCTOP)/include/kerberosIV/krb.h \
   $(srcdir)/../arpa/ftp.h $(srcdir)/../ftp/secure.c secure.h
 $(OUTPRE)getdtablesize.$(OBJEXT): $(srcdir)/../../bsd/getdtablesize.c
-$(OUTPRE)setenv.$(OBJEXT): $(srcdir)/../../bsd/setenv.c
index de5fe7cb7ffc276c1f758c95a2701a3a735f7585..9e6d46dfe04ab844ca72e7c58d74f85394f72c27 100644 (file)
@@ -43,11 +43,15 @@ Clear the current keylist.  Alias:
 .BR clear .
 .TP
 \fBdelete_entry\fP \fIslot\fP
-Delets the entry in slot number
+Delete the entry in slot number
 .I slot
-from the current keylist.  Alais:
+from the current keylist.  Alias:
 .BR delent .
 .TP
+\fBadd_entry\fP (\-key | \-password) \-p \fIprincipal\fP \-k \fIkvno\fP \-e \fIenctype\fP
+Add principal to keylist using key or password.  Alias:
+.BR addent .
+.TP
 .BR list_requests
 Displays a listing of available commands.  Aliases:
 .BR lr ,
index 07e9b8e8790235042705aee79ca98304bc88fb6c..c442a8827826219e3709b2efd26598343ee3668e 100644 (file)
@@ -816,9 +816,10 @@ cc_int_ccache_move( cc_ccache_t source,
     return code;
 }       
 
+cc_int32
 cc_int_ccache_lock( cc_ccache_t ccache,
-                cc_uint32 lock_type,
-                cc_uint32 block )
+                    cc_uint32 lock_type,
+                    cc_uint32 block )
 {
     cc_int_ccache_t    int_ccache;
     cc_msg_t           *request = NULL;
@@ -1004,7 +1005,7 @@ cc_int_ccache_get_last_default_time( cc_ccache_t ccache,
 }
 
 cc_int32
-cc_int_ccache_get_change_time( cc_ccache_t ccache, cc_time* time )
+cc_int_ccache_get_change_time( cc_ccache_t ccache, cc_time* change_time )
 {
     cc_int_ccache_t    int_ccache;
     cc_msg_t           *request = NULL;
@@ -1049,7 +1050,7 @@ cc_int_ccache_get_change_time( cc_ccache_t ccache, cc_time* time )
         ccmsg_ccache_get_change_time_resp_t * response_header = (ccmsg_ccache_get_change_time_resp_t*)response->header;
         t64 = htonll(response_header->time);
        /* TODO: validate that we do not overflow 'time' */
-       *time = t64;
+       *change_time = t64;
         code = ccNoError;
     } else {
         code = ccErrBadInternalMessage;
index 0a92ebf63d3beed4b1522efd2397428d1f157472..255cf2a4210a6e415dc1bb6f26b0c431c7e5805f 100644 (file)
@@ -114,11 +114,11 @@ cc_int_ccache_unlock( cc_ccache_t ccache );
 
 cc_int32
 cc_int_ccache_get_last_default_time( cc_ccache_t ccache,
-                                cc_time* time );
+                                cc_time* last_default_tim );
 
 cc_int32
 cc_int_ccache_get_change_time( cc_ccache_t ccache,
-                          cc_time* time );
+                          cc_time* change_time );
 
 cc_int32
 cc_int_ccache_compare( cc_ccache_t ccache,
@@ -128,12 +128,12 @@ cc_int_ccache_compare( cc_ccache_t ccache,
 cc_int32       
 cc_int_ccache_get_kdc_time_offset( cc_ccache_t ccache,
                               cc_int32 credentials_version,
-                              cc_time* time_offset );
+                              cc_time* kdc_time_offset );
 
 cc_int32
 cc_int_ccache_set_kdc_time_offset( cc_ccache_t ccache,
                               cc_int32 credentials_version,
-                              cc_time  time_offset );
+                              cc_time  kdc_time_offset );
                                 
 cc_int32
 cc_int_ccache_clear_kdc_time_offset( cc_ccache_t       ccache,
index 5d88d4686823763202d4a1c592d539ff304181cd..4bcfc040c8f84f4fe810cb2100cacf567461ec6f 100644 (file)
@@ -154,7 +154,7 @@ cc_int_context_release( cc_context_t context )
 
 cc_int32
 cc_int_context_get_change_time( cc_context_t context,
-                                cc_time* time)
+                                cc_time* change_time)
 {
     cc_int_context_t           int_context;
     cc_msg_t                   *request = NULL;
@@ -199,7 +199,7 @@ cc_int_context_get_change_time( cc_context_t context,
         response_header = (ccmsg_ctx_get_change_time_resp_t*)response->header;
         t64 = ntohll(response_header->time);
        /* TODO: validate that value is not greater than can fit in cc_time */
-       *time = (cc_time)t64;
+       *change_time = (cc_time)t64;
         code = ccNoError;
     } else {
         code = ccErrBadInternalMessage;
index 6ff113a26928a4da32b06aa656f532c68ecd946f..eb0ea520e3b027194661a4acf92bf41338c5e8b7 100644 (file)
@@ -66,7 +66,7 @@ cc_int_context_release( cc_context_t context );
 
 cc_int32
 cc_int_context_get_change_time( cc_context_t context,
-                                cc_time* time);
+                                cc_time* change_time);
 
 cc_int32
 cc_int_context_get_default_ccache_name( cc_context_t context,
index 2c7398313d29262efda25a3117ab1e2350be92f2..62f8d8de40f1c6a3eb9a51ccddbcfdf012e4f38c 100644 (file)
@@ -117,7 +117,7 @@ cci_generic_list_new(cc_generic_list_head_t ** listpp)
     if (ret == NULL)\r
         return ccErrNoMem;\r
        \r
-    ret->type = generic;\r
+    ret->type = cc_generic_list;\r
     ret->head = ret->tail = NULL;\r
     *listpp = ret;\r
 \r
index 48abb3370268ea1dc0192188e6bb3a4bb17b1b6a..b2433cb1da5ab7a7cb7c79186c0a2d8a4e5ae00b 100644 (file)
-/* $Copyright:\r
- *\r
- * Copyright 2004-2006 by the Massachusetts Institute of Technology.\r
- * \r
- * All rights reserved.\r
- * \r
- * Export of this software from the United States of America may require a\r
- * specific license from the United States Government.  It is the\r
- * responsibility of any person or organization contemplating export to\r
- * obtain such a license before exporting.\r
- * \r
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and distribute\r
- * this software and its documentation for any purpose and without fee is\r
- * hereby granted, provided that the above copyright notice appear in all\r
- * copies and that both that copyright notice and this permission notice\r
- * appear in supporting documentation, and that the name of M.I.T. not be\r
- * used in advertising or publicity pertaining to distribution of the\r
- * software without specific, written prior permission.  Furthermore if you\r
- * modify this software you must label your software as modified software\r
- * and not distribute it in such a fashion that it might be confused with\r
- * the original MIT software. M.I.T. makes no representations about the\r
- * suitability of this software for any purpose.  It is provided "as is"\r
- * without express or implied warranty.\r
- * \r
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF\r
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.\r
- * \r
- * Individual source code files are copyright MIT, Cygnus Support,\r
- * OpenVision, Oracle, Sun Soft, FundsXpress, and others.\r
- * \r
- * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira,\r
- * and Zephyr are trademarks of the Massachusetts Institute of Technology\r
- * (MIT).  No commercial use of these trademarks may be made without prior\r
- * written permission of MIT.\r
- * \r
- * "Commercial use" means use of a name in a product or other for-profit\r
- * manner.  It does NOT prevent a commercial firm from referring to the MIT\r
- * trademarks in order to convey information (although in doing so,\r
- * recognition of their trademark status should be given).\r
- * $\r
- */\r
-\r
-/* marshall.c */\r
-\r
-#include <stdlib.h>\r
-#include <stdio.h>\r
-#include <string.h>\r
-#include <CredentialsCache.h>\r
-#include "msg.h"\r
-#include "msg_headers.h"\r
-#include "marshall.h"\r
-\r
-cc_int32\r
-cci_creds_v4_marshall( cc_credentials_v4_t * creds, \r
-                       char ** pflat, \r
-                       cc_uint32 * plen)\r
-{\r
-    cc_uint32 len;\r
-    char * flat;\r
-    cci_flat_creds_v4_t * header;\r
-    cc_time64 t64;\r
-\r
-    if ( creds == NULL || pflat == NULL || plen == NULL )\r
-        return ccErrBadParam;\r
-\r
-    len = sizeof(cci_flat_creds_v4_t);\r
-    flat = (char *)malloc(len);\r
-    if ( flat == NULL )\r
-        return ccErrNoMem;\r
-    memset(flat, 0, len);\r
-\r
-    header = (cci_flat_creds_v4_t *)flat;\r
-    header->version = htonl(creds->version);\r
-    memcpy(header->principal, creds->principal, cc_v4_name_size);\r
-    memcpy(header->principal_instance, creds->principal_instance, cc_v4_instance_size);\r
-    memcpy(header->service, creds->service, cc_v4_name_size);\r
-    memcpy(header->service_instance, creds->service_instance, cc_v4_instance_size);\r
-    memcpy(header->realm, creds->realm, cc_v4_realm_size);\r
-    memcpy(header->session_key, creds->session_key, cc_v4_key_size);\r
-    header->kvno = htonl(creds->kvno);\r
-    header->string_to_key_type = htonl(creds->string_to_key_type);\r
-    t64 = creds->issue_date;\r
-    header->issue_date = htonll(t64);\r
-    header->lifetime = htonl(creds->lifetime);\r
-    /* TODO: verify that address is stored in host order */\r
-    header->address = htonl(creds->address);\r
-    header->ticket_size = htonl(creds->ticket_size);\r
-    memcpy(header->ticket, creds->ticket, cc_v4_ticket_size);\r
-\r
-    *pflat = flat;\r
-    *plen = len;\r
-\r
-    return ccNoError;  \r
-}\r
-\r
-cc_int32\r
-cci_creds_v4_unmarshall( char * flat, \r
-                         cc_uint32 len,\r
-                         cc_credentials_union * creds_union)\r
-{\r
-    struct cci_flat_creds_v4 * header;\r
-    cc_credentials_v4_t * creds;\r
-    cc_time64 t64;\r
-\r
-    if ( flat == NULL || len == 0 || creds_union == NULL )\r
-        return ccErrBadParam;\r
-\r
-    creds_union->version = cc_credentials_v4;\r
-\r
-    header = (cci_flat_creds_v4_t *)flat;\r
-\r
-    creds = (cc_credentials_v4_t *)malloc(sizeof(cc_credentials_v4_t));\r
-    if ( creds == NULL )\r
-       return ccErrNoMem;\r
-\r
-    creds->version = ntohl(header->version);\r
-    memcpy(creds->principal, header->principal, cc_v4_name_size);\r
-    memcpy(creds->principal_instance, header->principal_instance, cc_v4_instance_size);\r
-    memcpy(creds->service, header->service, cc_v4_name_size);\r
-    memcpy(creds->service_instance, header->service_instance, cc_v4_instance_size);\r
-    memcpy(creds->realm, header->realm, cc_v4_realm_size);\r
-    memcpy(creds->session_key, header->session_key, cc_v4_key_size);\r
-    creds->kvno = htonl(header->kvno);\r
-    creds->string_to_key_type = htonl(header->string_to_key_type);\r
-    t64 = header->issue_date;\r
-    creds->issue_date = (cc_time64)ntohll(t64);\r
-    creds->lifetime = (cc_int32)ntohl(header->lifetime);\r
-    /* TODO: verify that address is stored in host order */\r
-    creds->address = ntohl(header->address);\r
-    creds->ticket_size = ntohl(header->ticket_size);\r
-    memcpy(creds->ticket, header->ticket, cc_v4_ticket_size);\r
-\r
-    creds_union->credentials.credentials_v4 = creds;\r
-\r
-    return ccNoError;\r
-}\r
-\r
-\r
-cc_int32\r
-cci_creds_cc_data_array_count_entries( cc_data ** array, cc_uint32 * pcount)\r
-{\r
-    cc_uint32 count;\r
-\r
-    if (array == NULL) {\r
-        *pcount = 0;\r
-        return ccNoError;\r
-    }\r
-\r
-    for ( count=0; array[count] != NULL ; count++) ;\r
-\r
-    *pcount = count;\r
-    return ccNoError;\r
-}\r
-\r
-cc_int32\r
-cci_creds_v5_compute_flat_size( cc_credentials_v5_t * creds, cc_uint32 * plen)\r
-{\r
-    cc_uint32 len;\r
-    cc_uint32 i, count;\r
-\r
-    len = sizeof(struct cci_flat_creds_v5);\r
-\r
-    if (creds->client)\r
-        len += strlen(creds->client) + 1;\r
-\r
-    if (creds->server)\r
-        len += strlen(creds->server) + 1;\r
-\r
-    len += creds->keyblock.length;\r
-\r
-    cci_creds_cc_data_array_count_entries( creds->addresses, &count );\r
-    len += count * sizeof(cc_flat_data);\r
-    for ( i=0; i<count; i++ ) {\r
-        len += creds->addresses[i]->length;\r
-    }\r
-\r
-    len += creds->ticket.length;\r
-    len += creds->second_ticket.length;\r
-\r
-    cci_creds_cc_data_array_count_entries( creds->authdata, &count );\r
-    len += count * sizeof(cc_flat_data);\r
-    for ( i=0; i<count; i++ ) {\r
-        len += creds->authdata[i]->length;\r
-    }\r
-\r
-    *plen = len;\r
-    return ccNoError;\r
-}\r
-\r
-cc_int32\r
-cci_creds_v5_marshall( cc_credentials_v5_t * creds, \r
-                       char ** pflat, \r
-                       cc_uint32 * plen)\r
-{\r
-    cc_uint32 len;\r
-    char * flat;\r
-    struct cci_flat_creds_v5 * header;\r
-    cc_uint32 length;\r
-    cc_uint32 offset;\r
-    cc_time64 t64;\r
-    cc_uint32 count;\r
-    cc_uint32 i;\r
-\r
-    if ( creds == NULL || pflat == NULL || plen == NULL )\r
-        return ccErrBadParam;\r
-\r
-    cci_creds_v5_compute_flat_size(creds, &len);\r
-\r
-    flat = (char *)malloc(len);\r
-    if ( flat == NULL )\r
-        return ccErrNoMem;\r
-    memset(flat, 0, len);\r
-\r
-    offset = sizeof(struct cci_flat_creds_v5);\r
-    header = (struct cci_flat_creds_v5 *)flat;\r
-    header->version = htonl(FLAT_CREDS_V5_VERSION);\r
-    if (creds->client) {\r
-       length = strlen(creds->client) + 1;\r
-        header->client.length = htonl(length);\r
-        header->client.data = htonl(offset);\r
-        memcpy(flat + offset, creds->client, length);\r
-        offset += length;\r
-    }\r
-\r
-    if (creds->server) {\r
-       length = strlen(creds->server) + 1;\r
-        header->server.length = htonl(length);\r
-        header->server.data = htonl(offset);\r
-        memcpy(flat + offset, creds->server, length);\r
-        offset += length;\r
-    }\r
-\r
-    header->keyblock.type = htonl(creds->keyblock.type);\r
-    if (creds->keyblock.length) {\r
-       length = creds->keyblock.length;\r
-        header->keyblock.length = htonl(length);\r
-        header->keyblock.data = htonl(offset);\r
-        memcpy(flat + offset, creds->keyblock.data, length);\r
-        offset += length;\r
-    }           \r
-\r
-    t64 = creds->authtime;\r
-    header->authtime = htonll(t64);\r
-    t64 = creds->starttime;\r
-    header->starttime = htonll(t64);\r
-    t64 = creds->endtime;\r
-    header->endtime = htonll(t64);\r
-    t64 = creds->renew_till;\r
-    header->renew_till = htonll(t64);\r
-\r
-    header->is_skey = htonl(creds->is_skey);\r
-    header->ticket_flags = htonl(creds->ticket_flags);\r
-\r
-    cci_creds_cc_data_array_count_entries( creds->addresses, &count );\r
-    if ( count ) {\r
-        cc_flat_data * addresses = (cc_flat_data *)flat + offset;\r
-       header->address_count = htonl(count);\r
-        header->addresses = htonl(offset);\r
-        offset += count * sizeof(cc_flat_data);\r
-\r
-        for ( i=0; i < count; i++ ) {\r
-            addresses[i].type = htonl(creds->addresses[i]->type);\r
-            if (creds->addresses[i]->length) {\r
-               length = creds->addresses[i]->length;\r
-                addresses[i].length = htonl(length);\r
-                addresses[i].data = htonl(offset);\r
-               /* TODO: verify that addresses are stored in network order */\r
-                memcpy(flat + offset, creds->addresses[i]->data, length);\r
-                offset += length;\r
-            }\r
-        }\r
-    }\r
-\r
-    header->ticket.type = htonl(creds->ticket.type);\r
-    if (creds->ticket.length) {\r
-       length = creds->ticket.length;\r
-        header->ticket.length = htonl(length);\r
-        header->ticket.data = htonl(offset);\r
-        memcpy(flat + offset, creds->ticket.data, length);\r
-        offset += length;\r
-    }           \r
-\r
-    header->second_ticket.type = htonl(creds->second_ticket.type);\r
-    if (creds->second_ticket.length) {\r
-       length = creds->second_ticket.length;\r
-        header->second_ticket.length = htonl(length);\r
-        header->second_ticket.data = htonl(offset);\r
-        memcpy(flat + offset, creds->second_ticket.data, length);\r
-        offset += length;\r
-    }           \r
-\r
-    cci_creds_cc_data_array_count_entries( creds->authdata, &count );\r
-    if ( count ) {\r
-        cc_flat_data * authdata = (cc_flat_data *)flat + offset;\r
-\r
-       header->authdata_count = htonl(count);\r
-        header->authdata = (offset);\r
-        offset += count * sizeof(cc_flat_data);\r
-\r
-        for ( i=0; i < count; i++ ) {\r
-            authdata[i].type = htonl(creds->authdata[i]->type);\r
-            if (creds->authdata[i]->length) {\r
-               length = creds->authdata[i]->length;\r
-                authdata[i].length = htonl(length);\r
-                authdata[i].data = htonl(offset);\r
-                memcpy(flat + offset, creds->authdata[i]->data, length);\r
-                offset += length;\r
-            }\r
-        }\r
-    }\r
-\r
-    *pflat = flat;\r
-    *plen = len;\r
-    return ccNoError;\r
-}\r
-\r
-\r
-// TODO: a much better job of checking for out of memory errors\r
-//       and validating that we do not read beyond the flat input\r
-//       data buffer\r
-\r
-cc_int32\r
-cci_creds_v5_unmarshall( char * flat, \r
-                         cc_uint32 len,\r
-                         cc_credentials_union * creds_union)\r
-{\r
-    struct cci_flat_creds_v5 * header;\r
-    cc_credentials_v5_t * creds;\r
-    cc_flat_data * flat_data;\r
-    cc_time64 t64;\r
-    cc_uint32  length;\r
-    cc_uint32  count;\r
-    cc_uint32  i;\r
-\r
-    if ( flat == NULL || len == 0 || creds_union == NULL )\r
-        return ccErrBadParam;\r
-\r
-    creds_union->version = cc_credentials_v5;\r
-\r
-    header = (struct cci_flat_creds_v5 *)flat;\r
-\r
-    if ( ntohl(header->version) != FLAT_CREDS_V5_VERSION )\r
-        return ccErrBadParam;\r
-\r
-    creds = (cc_credentials_v5_t *)malloc(sizeof(cc_credentials_v5_t));\r
-    if ( creds == NULL )\r
-        return ccErrNoMem;\r
-    memset(creds, 0, sizeof(cc_credentials_v5_t));\r
-\r
-    if ( header->client.length ) {\r
-       length = ntohl(header->client.length);\r
-        creds->client = (char *)malloc(length);\r
-        memcpy(creds->client, flat + header->client.data, length);\r
-    }\r
-\r
-    if ( header->server.length ) {\r
-       length = ntohl(header->server.length);\r
-        creds->server = (char *)malloc(length);\r
-        memcpy(creds->server, flat + header->server.data, length);\r
-    }\r
-\r
-    creds->keyblock.type = ntohl(header->keyblock.type);\r
-    if ( header->keyblock.length ) {\r
-       length = ntohl(header->keyblock.length);\r
-        creds->keyblock.length = length;\r
-        creds->keyblock.data = malloc(length);\r
-        memcpy(creds->keyblock.data, flat + header->keyblock.data, length);\r
-    }\r
-\r
-    /* TODO: need to perform overflow validation checks to ensure\r
-     * that we do not attempt to store too large a value into cc_time_t\r
-     * when it is a 32-bit field.\r
-     */\r
-    t64 = ntohll(header->authtime);\r
-    creds->authtime = (cc_time)t64;\r
-    t64 = ntohll(header->starttime);\r
-    creds->starttime = (cc_time)t64;\r
-    t64 = ntohll(header->endtime);\r
-    creds->endtime = (cc_time)t64;\r
-    t64 = ntohll(header->renew_till);\r
-    creds->renew_till = (cc_time)t64;\r
-\r
-    creds->is_skey = ntohl(header->is_skey);\r
-    creds->ticket_flags = ntohl(header->ticket_flags);\r
-\r
-    count = ntohl(header->address_count);\r
-    creds->addresses = (cc_data **) malloc((count + 1) * sizeof(cc_data *));\r
-    flat_data = (cc_flat_data *)flat + header->addresses;\r
-    for ( i=0 ; i < count ; i++ ) {\r
-        creds->addresses[i] = (cc_data *)malloc(sizeof(cc_data));\r
-        creds->addresses[i]->type = ntohl(flat_data[i].type);\r
-       length = ntohl(flat_data[i].length);\r
-        creds->addresses[i]->length = length;\r
-        if ( length ) {\r
-            creds->addresses[i]->data = malloc(length);\r
-           /* TODO: verify that addresses are stored in network order */\r
-            memcpy(creds->addresses[i]->data, flat + flat_data[i].data, length);\r
-        } else {\r
-            creds->addresses[i]->data = NULL;\r
-        }\r
-    }\r
-    creds->addresses[i] = NULL;\r
-\r
-    creds->ticket.type = ntohl(header->ticket.type);\r
-    length = ntohl(header->ticket.length);\r
-    if ( length ) {\r
-        creds->ticket.length = length;\r
-        creds->ticket.data = malloc(length);\r
-        memcpy(creds->ticket.data, flat + header->ticket.data, length);\r
-    }\r
-\r
-    creds->second_ticket.type = header->second_ticket.type;\r
-    if ( header->second_ticket.length ) {\r
-        creds->second_ticket.length = header->second_ticket.length;\r
-        creds->second_ticket.data = malloc(creds->second_ticket.length);\r
-        memcpy(creds->second_ticket.data, flat + header->second_ticket.data, creds->second_ticket.length);\r
-    }\r
-\r
-    count = ntohl(header->authdata_count);\r
-    creds->authdata = (cc_data **) malloc((count + 1) * sizeof(cc_data *));\r
-    flat_data = (cc_flat_data *)flat + header->authdata;\r
-    for ( i=0 ; i < count ; i++ ) {\r
-        creds->authdata[i] = (cc_data *)malloc(sizeof(cc_data));\r
-        creds->authdata[i]->type = ntohl(flat_data[i].type);\r
-       length = ntohl(flat_data[i].length);\r
-        creds->authdata[i]->length = length;\r
-        if ( length ) {\r
-            creds->authdata[i]->data = malloc(length);\r
-            memcpy(creds->authdata[i]->data, flat + flat_data[i].data, length);\r
-        } else {\r
-            creds->authdata[i]->data = NULL;\r
-        }\r
-    }\r
-    creds->authdata[i] = NULL;\r
-\r
-    creds_union->credentials.credentials_v5 = creds;\r
-\r
-    return ccNoError;\r
-}\r
-\r
+/* $Copyright:
+ *
+ * Copyright 2004-2006 by the Massachusetts Institute of Technology.
+ * 
+ * All rights reserved.
+ * 
+ * Export of this software from the United States of America may require a
+ * specific license from the United States Government.  It is the
+ * responsibility of any person or organization contemplating export to
+ * obtain such a license before exporting.
+ * 
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and distribute
+ * this software and its documentation for any purpose and without fee is
+ * hereby granted, provided that the above copyright notice appear in all
+ * copies and that both that copyright notice and this permission notice
+ * appear in supporting documentation, and that the name of M.I.T. not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission.  Furthermore if you
+ * modify this software you must label your software as modified software
+ * and not distribute it in such a fashion that it might be confused with
+ * the original MIT software. M.I.T. makes no representations about the
+ * suitability of this software for any purpose.  It is provided "as is"
+ * without express or implied warranty.
+ * 
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * 
+ * Individual source code files are copyright MIT, Cygnus Support,
+ * OpenVision, Oracle, Sun Soft, FundsXpress, and others.
+ * 
+ * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira,
+ * and Zephyr are trademarks of the Massachusetts Institute of Technology
+ * (MIT).  No commercial use of these trademarks may be made without prior
+ * written permission of MIT.
+ * 
+ * "Commercial use" means use of a name in a product or other for-profit
+ * manner.  It does NOT prevent a commercial firm from referring to the MIT
+ * trademarks in order to convey information (although in doing so,
+ * recognition of their trademark status should be given).
+ * $
+ */
+
+/* marshall.c */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <CredentialsCache.h>
+#include "msg.h"
+#include "msg_headers.h"
+#include "marshall.h"
+
+cc_int32
+cci_creds_v4_marshall( cc_credentials_v4_t * creds, 
+                       char ** pflat, 
+                       cc_uint32 * plen)
+{
+    cc_uint32 len;
+    char * flat;
+    cci_flat_creds_v4_t * header;
+    cc_time64 t64;
+
+    if ( creds == NULL || pflat == NULL || plen == NULL )
+        return ccErrBadParam;
+
+    len = sizeof(cci_flat_creds_v4_t);
+    flat = (char *)malloc(len);
+    if ( flat == NULL )
+        return ccErrNoMem;
+    memset(flat, 0, len);
+
+    header = (cci_flat_creds_v4_t *)flat;
+    header->version = htonl(creds->version);
+    memcpy(header->principal, creds->principal, cc_v4_name_size);
+    memcpy(header->principal_instance, creds->principal_instance, cc_v4_instance_size);
+    memcpy(header->service, creds->service, cc_v4_name_size);
+    memcpy(header->service_instance, creds->service_instance, cc_v4_instance_size);
+    memcpy(header->realm, creds->realm, cc_v4_realm_size);
+    memcpy(header->session_key, creds->session_key, cc_v4_key_size);
+    header->kvno = htonl(creds->kvno);
+    header->string_to_key_type = htonl(creds->string_to_key_type);
+    t64 = creds->issue_date;
+    header->issue_date = htonll(t64);
+    header->lifetime = htonl(creds->lifetime);
+    /* TODO: verify that address is stored in host order */
+    header->address = htonl(creds->address);
+    header->ticket_size = htonl(creds->ticket_size);
+    memcpy(header->ticket, creds->ticket, cc_v4_ticket_size);
+
+    *pflat = flat;
+    *plen = len;
+
+    return ccNoError;  
+}
+
+cc_int32
+cci_creds_v4_unmarshall( char * flat, 
+                         cc_uint32 len,
+                         cc_credentials_union * creds_union)
+{
+    struct cci_flat_creds_v4 * header;
+    cc_credentials_v4_t * creds;
+    cc_time64 t64;
+
+    if ( flat == NULL || len == 0 || creds_union == NULL )
+        return ccErrBadParam;
+
+    creds_union->version = cc_credentials_v4;
+
+    header = (cci_flat_creds_v4_t *)flat;
+
+    creds = (cc_credentials_v4_t *)malloc(sizeof(cc_credentials_v4_t));
+    if ( creds == NULL )
+       return ccErrNoMem;
+
+    creds->version = ntohl(header->version);
+    memcpy(creds->principal, header->principal, cc_v4_name_size);
+    memcpy(creds->principal_instance, header->principal_instance, cc_v4_instance_size);
+    memcpy(creds->service, header->service, cc_v4_name_size);
+    memcpy(creds->service_instance, header->service_instance, cc_v4_instance_size);
+    memcpy(creds->realm, header->realm, cc_v4_realm_size);
+    memcpy(creds->session_key, header->session_key, cc_v4_key_size);
+    creds->kvno = htonl(header->kvno);
+    creds->string_to_key_type = htonl(header->string_to_key_type);
+    t64 = header->issue_date;
+    creds->issue_date = (cc_time64)ntohll(t64);
+    creds->lifetime = (cc_int32)ntohl(header->lifetime);
+    /* TODO: verify that address is stored in host order */
+    creds->address = ntohl(header->address);
+    creds->ticket_size = ntohl(header->ticket_size);
+    memcpy(creds->ticket, header->ticket, cc_v4_ticket_size);
+
+    creds_union->credentials.credentials_v4 = creds;
+
+    return ccNoError;
+}
+
+
+static cc_int32
+cci_creds_cc_data_array_count_entries( cc_data ** array, cc_uint32 * pcount)
+{
+    cc_uint32 count;
+
+    if (array == NULL) {
+        *pcount = 0;
+        return ccNoError;
+    }
+
+    for ( count=0; array[count] != NULL ; count++) ;
+
+    *pcount = count;
+    return ccNoError;
+}
+
+static cc_int32
+cci_creds_v5_compute_flat_size( cc_credentials_v5_t * creds, cc_uint32 * plen)
+{
+    cc_uint32 len;
+    cc_uint32 i, count;
+
+    len = sizeof(struct cci_flat_creds_v5);
+
+    if (creds->client)
+        len += strlen(creds->client) + 1;
+
+    if (creds->server)
+        len += strlen(creds->server) + 1;
+
+    len += creds->keyblock.length;
+
+    cci_creds_cc_data_array_count_entries( creds->addresses, &count );
+    len += count * sizeof(cc_flat_data);
+    for ( i=0; i<count; i++ ) {
+        len += creds->addresses[i]->length;
+    }
+
+    len += creds->ticket.length;
+    len += creds->second_ticket.length;
+
+    cci_creds_cc_data_array_count_entries( creds->authdata, &count );
+    len += count * sizeof(cc_flat_data);
+    for ( i=0; i<count; i++ ) {
+        len += creds->authdata[i]->length;
+    }
+
+    *plen = len;
+    return ccNoError;
+}
+
+cc_int32
+cci_creds_v5_marshall( cc_credentials_v5_t * creds, 
+                       char ** pflat, 
+                       cc_uint32 * plen)
+{
+    cc_uint32 len;
+    char * flat;
+    struct cci_flat_creds_v5 * header;
+    cc_uint32 length;
+    cc_uint32 offset;
+    cc_time64 t64;
+    cc_uint32 count;
+    cc_uint32 i;
+
+    if ( creds == NULL || pflat == NULL || plen == NULL )
+        return ccErrBadParam;
+
+    cci_creds_v5_compute_flat_size(creds, &len);
+
+    flat = (char *)malloc(len);
+    if ( flat == NULL )
+        return ccErrNoMem;
+    memset(flat, 0, len);
+
+    offset = sizeof(struct cci_flat_creds_v5);
+    header = (struct cci_flat_creds_v5 *)flat;
+    header->version = htonl(FLAT_CREDS_V5_VERSION);
+    if (creds->client) {
+       length = strlen(creds->client) + 1;
+        header->client.length = htonl(length);
+        header->client.data = htonl(offset);
+        memcpy(flat + offset, creds->client, length);
+        offset += length;
+    }
+
+    if (creds->server) {
+       length = strlen(creds->server) + 1;
+        header->server.length = htonl(length);
+        header->server.data = htonl(offset);
+        memcpy(flat + offset, creds->server, length);
+        offset += length;
+    }
+
+    header->keyblock.type = htonl(creds->keyblock.type);
+    if (creds->keyblock.length) {
+       length = creds->keyblock.length;
+        header->keyblock.length = htonl(length);
+        header->keyblock.data = htonl(offset);
+        memcpy(flat + offset, creds->keyblock.data, length);
+        offset += length;
+    }           
+
+    t64 = creds->authtime;
+    header->authtime = htonll(t64);
+    t64 = creds->starttime;
+    header->starttime = htonll(t64);
+    t64 = creds->endtime;
+    header->endtime = htonll(t64);
+    t64 = creds->renew_till;
+    header->renew_till = htonll(t64);
+
+    header->is_skey = htonl(creds->is_skey);
+    header->ticket_flags = htonl(creds->ticket_flags);
+
+    cci_creds_cc_data_array_count_entries( creds->addresses, &count );
+    if ( count ) {
+        cc_flat_data * addresses = (cc_flat_data *)flat + offset;
+       header->address_count = htonl(count);
+        header->addresses = htonl(offset);
+        offset += count * sizeof(cc_flat_data);
+
+        for ( i=0; i < count; i++ ) {
+            addresses[i].type = htonl(creds->addresses[i]->type);
+            if (creds->addresses[i]->length) {
+               length = creds->addresses[i]->length;
+                addresses[i].length = htonl(length);
+                addresses[i].data = htonl(offset);
+               /* TODO: verify that addresses are stored in network order */
+                memcpy(flat + offset, creds->addresses[i]->data, length);
+                offset += length;
+            }
+        }
+    }
+
+    header->ticket.type = htonl(creds->ticket.type);
+    if (creds->ticket.length) {
+       length = creds->ticket.length;
+        header->ticket.length = htonl(length);
+        header->ticket.data = htonl(offset);
+        memcpy(flat + offset, creds->ticket.data, length);
+        offset += length;
+    }           
+
+    header->second_ticket.type = htonl(creds->second_ticket.type);
+    if (creds->second_ticket.length) {
+       length = creds->second_ticket.length;
+        header->second_ticket.length = htonl(length);
+        header->second_ticket.data = htonl(offset);
+        memcpy(flat + offset, creds->second_ticket.data, length);
+        offset += length;
+    }           
+
+    cci_creds_cc_data_array_count_entries( creds->authdata, &count );
+    if ( count ) {
+        cc_flat_data * authdata = (cc_flat_data *)flat + offset;
+
+       header->authdata_count = htonl(count);
+        header->authdata = (offset);
+        offset += count * sizeof(cc_flat_data);
+
+        for ( i=0; i < count; i++ ) {
+            authdata[i].type = htonl(creds->authdata[i]->type);
+            if (creds->authdata[i]->length) {
+               length = creds->authdata[i]->length;
+                authdata[i].length = htonl(length);
+                authdata[i].data = htonl(offset);
+                memcpy(flat + offset, creds->authdata[i]->data, length);
+                offset += length;
+            }
+        }
+    }
+
+    *pflat = flat;
+    *plen = len;
+    return ccNoError;
+}
+
+
+// TODO: a much better job of checking for out of memory errors
+//       and validating that we do not read beyond the flat input
+//       data buffer
+
+cc_int32
+cci_creds_v5_unmarshall( char * flat, 
+                         cc_uint32 len,
+                         cc_credentials_union * creds_union)
+{
+    struct cci_flat_creds_v5 * header;
+    cc_credentials_v5_t * creds;
+    cc_flat_data * flat_data;
+    cc_time64 t64;
+    cc_uint32  length;
+    cc_uint32  count;
+    cc_uint32  i;
+
+    if ( flat == NULL || len == 0 || creds_union == NULL )
+        return ccErrBadParam;
+
+    creds_union->version = cc_credentials_v5;
+
+    header = (struct cci_flat_creds_v5 *)flat;
+
+    if ( ntohl(header->version) != FLAT_CREDS_V5_VERSION )
+        return ccErrBadParam;
+
+    creds = (cc_credentials_v5_t *)malloc(sizeof(cc_credentials_v5_t));
+    if ( creds == NULL )
+        return ccErrNoMem;
+    memset(creds, 0, sizeof(cc_credentials_v5_t));
+
+    if ( header->client.length ) {
+       length = ntohl(header->client.length);
+        creds->client = (char *)malloc(length);
+        memcpy(creds->client, flat + header->client.data, length);
+    }
+
+    if ( header->server.length ) {
+       length = ntohl(header->server.length);
+        creds->server = (char *)malloc(length);
+        memcpy(creds->server, flat + header->server.data, length);
+    }
+
+    creds->keyblock.type = ntohl(header->keyblock.type);
+    if ( header->keyblock.length ) {
+       length = ntohl(header->keyblock.length);
+        creds->keyblock.length = length;
+        creds->keyblock.data = malloc(length);
+        memcpy(creds->keyblock.data, flat + header->keyblock.data, length);
+    }
+
+    /* TODO: need to perform overflow validation checks to ensure
+     * that we do not attempt to store too large a value into cc_time_t
+     * when it is a 32-bit field.
+     */
+    t64 = ntohll(header->authtime);
+    creds->authtime = (cc_time)t64;
+    t64 = ntohll(header->starttime);
+    creds->starttime = (cc_time)t64;
+    t64 = ntohll(header->endtime);
+    creds->endtime = (cc_time)t64;
+    t64 = ntohll(header->renew_till);
+    creds->renew_till = (cc_time)t64;
+
+    creds->is_skey = ntohl(header->is_skey);
+    creds->ticket_flags = ntohl(header->ticket_flags);
+
+    count = ntohl(header->address_count);
+    creds->addresses = (cc_data **) malloc((count + 1) * sizeof(cc_data *));
+    flat_data = (cc_flat_data *)flat + header->addresses;
+    for ( i=0 ; i < count ; i++ ) {
+        creds->addresses[i] = (cc_data *)malloc(sizeof(cc_data));
+        creds->addresses[i]->type = ntohl(flat_data[i].type);
+       length = ntohl(flat_data[i].length);
+        creds->addresses[i]->length = length;
+        if ( length ) {
+            creds->addresses[i]->data = malloc(length);
+           /* TODO: verify that addresses are stored in network order */
+            memcpy(creds->addresses[i]->data, flat + flat_data[i].data, length);
+        } else {
+            creds->addresses[i]->data = NULL;
+        }
+    }
+    creds->addresses[i] = NULL;
+
+    creds->ticket.type = ntohl(header->ticket.type);
+    length = ntohl(header->ticket.length);
+    if ( length ) {
+        creds->ticket.length = length;
+        creds->ticket.data = malloc(length);
+        memcpy(creds->ticket.data, flat + header->ticket.data, length);
+    }
+
+    creds->second_ticket.type = header->second_ticket.type;
+    if ( header->second_ticket.length ) {
+        creds->second_ticket.length = header->second_ticket.length;
+        creds->second_ticket.data = malloc(creds->second_ticket.length);
+        memcpy(creds->second_ticket.data, flat + header->second_ticket.data, creds->second_ticket.length);
+    }
+
+    count = ntohl(header->authdata_count);
+    creds->authdata = (cc_data **) malloc((count + 1) * sizeof(cc_data *));
+    flat_data = (cc_flat_data *)flat + header->authdata;
+    for ( i=0 ; i < count ; i++ ) {
+        creds->authdata[i] = (cc_data *)malloc(sizeof(cc_data));
+        creds->authdata[i]->type = ntohl(flat_data[i].type);
+       length = ntohl(flat_data[i].length);
+        creds->authdata[i]->length = length;
+        if ( length ) {
+            creds->authdata[i]->data = malloc(length);
+            memcpy(creds->authdata[i]->data, flat + flat_data[i].data, length);
+        } else {
+            creds->authdata[i]->data = NULL;
+        }
+    }
+    creds->authdata[i] = NULL;
+
+    creds_union->credentials.credentials_v5 = creds;
+
+    return ccNoError;
+}
+
index 789fc874649c374f457923e1f5e5ecbad643d6d4..fa051e95a5eb8db0b6ff86d5e089b70045fc4a21 100644 (file)
-/* $Copyright:\r
- *\r
- * Copyright 2004-2006 by the Massachusetts Institute of Technology.\r
- * \r
- * All rights reserved.\r
- * \r
- * Export of this software from the United States of America may require a\r
- * specific license from the United States Government.  It is the\r
- * responsibility of any person or organization contemplating export to\r
- * obtain such a license before exporting.\r
- * \r
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and distribute\r
- * this software and its documentation for any purpose and without fee is\r
- * hereby granted, provided that the above copyright notice appear in all\r
- * copies and that both that copyright notice and this permission notice\r
- * appear in supporting documentation, and that the name of M.I.T. not be\r
- * used in advertising or publicity pertaining to distribution of the\r
- * software without specific, written prior permission.  Furthermore if you\r
- * modify this software you must label your software as modified software\r
- * and not distribute it in such a fashion that it might be confused with\r
- * the original MIT software. M.I.T. makes no representations about the\r
- * suitability of this software for any purpose.  It is provided "as is"\r
- * without express or implied warranty.\r
- * \r
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED\r
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF\r
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.\r
- * \r
- * Individual source code files are copyright MIT, Cygnus Support,\r
- * OpenVision, Oracle, Sun Soft, FundsXpress, and others.\r
- * \r
- * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira,\r
- * and Zephyr are trademarks of the Massachusetts Institute of Technology\r
- * (MIT).  No commercial use of these trademarks may be made without prior\r
- * written permission of MIT.\r
- * \r
- * "Commercial use" means use of a name in a product or other for-profit\r
- * manner.  It does NOT prevent a commercial firm from referring to the MIT\r
- * trademarks in order to convey information (although in doing so,\r
- * recognition of their trademark status should be given).\r
- * $\r
- */\r
-\r
-/*\r
- * Verifiable, extensible message format.\r
- *\r
- * Format:\r
- * <size of header block (header_len)>\r
- * <size of *entire* message, including previous field (flat_len)>\r
- * <message type (type)>\r
- * <type specific header (header)>\r
- * <magic number (magic)>\r
- * <data blob 1 length>\r
- * <data blob 1>\r
- * <data blob 2 length>\r
- * <data blob 2>\r
- * ...\r
- * <magic number (magic)>\r
- *\r
- * If the header has variable length data it is included in the data blobs. \r
- * The header field has the offset from the beginning of the message of the 1st \r
- * byte of the data and the length of the data.\r
- */\r
-\r
-#include "CredentialsCache.h"\r
-#include "msg.h"\r
-#include "generic_lists.h"\r
-\r
-#include <stdlib.h>\r
-#include <memory.h>\r
-#include <stdio.h>\r
-#include <string.h>\r
-\r
-/**\r
- * cci_msg_new()\r
- *\r
- * Purpose: Allocate and initialize a new cc_msg_t structure\r
- *\r
- * Input parameter (type) in host order\r
- *\r
- * Return:  non-NULL, the msg\r
- *          NULL, failure\r
- *\r
- * Errors:  ccErrNoMem\r
- *\r
- */\r
-cc_int32\r
-cci_msg_new(cc_uint32 type, cc_msg_t** msgpp) \r
-{\r
-    // type should be validated.  If invalid set error to ccErrBadParam\r
-    cc_msg_t* msg;\r
-    \r
-    if ( type > CC_MSG_MAX_TYPE || msgpp == NULL )\r
-        return ccErrBadParam;\r
-\r
-    msg = (cc_msg_t*)malloc(sizeof(cc_msg_t));\r
-    if (msg == NULL)\r
-        return ccErrNoMem;\r
-\r
-    msg->type = type;\r
-    msg->flat = NULL;\r
-    msg->header = NULL;\r
-    msg->flat_len = 0;\r
-    msg->header_len = 0;\r
-    msg->magic = 0;\r
-    cci_generic_list_new(&msg->data_blobs);\r
-    if (msg->data_blobs == NULL) {\r
-        // pass on error from previous call\r
-        free(msg);\r
-        return ccErrNoMem;\r
-    }\r
-\r
-    *msgpp = msg;     \r
-    return ccNoError;\r
-}\r
-\r
-/**\r
- * cci_msg_calc_header_size()\r
- *\r
- * Purpose: Calculates the size of the header\r
- *\r
- * Return:  the size in bytes\r
- *\r
- * Errors:  ccErrBadParam\r
- *\r
- */\r
-cc_int32\r
-cci_msg_calc_header_size(cc_msg_t* msg, cc_uint32 * lenp) \r
-{\r
-    int header_len = 12; /* header size, entire size, type */\r
-\r
-    if ( msg == NULL || lenp == NULL )\r
-        return ccErrBadParam;\r
-\r
-    header_len += msg->header_len;\r
-    *lenp = header_len;\r
-    return ccNoError;\r
-}\r
-\r
-/**\r
- * cci_msg_calc_size()\r
- *\r
- * Purpose: Calculates the size of the message\r
- *          (does not include the magic bytes)\r
- *\r
- * Return:  the size in bytes\r
- *\r
- * Errors:  ccErrBadParam\r
- *\r
- */\r
-cc_int32 \r
-cci_msg_calc_size(cc_msg_t* msg, cc_uint32 * lenp) \r
-{\r
-    cc_uint32 flat_len;\r
-    cc_generic_list_node_t* gen_node;\r
-    cc_generic_iterate_t* gen_iterator;\r
-       cc_int32 code;\r
-\r
-    if ( msg == NULL || lenp == NULL ) \r
-        return ccErrBadParam;\r
-\r
-    code = cci_msg_calc_header_size(msg, &flat_len);\r
-    if (code != ccNoError)\r
-        goto bad;\r
-\r
-    code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator);\r
-    if ( code != ccNoError )\r
-        goto bad;\r
-\r
-    while (cci_generic_iterate_has_next(gen_iterator)) {\r
-        code = cci_generic_iterate_next(gen_iterator, &gen_node);\r
-        if (code != ccNoError)\r
-            break;\r
-        flat_len += gen_node->len + BLOB_LEN;\r
-    }\r
-    cci_generic_free_iterator(gen_iterator);\r
-    if (code != ccNoError)\r
-        goto bad;\r
-\r
-    flat_len += MAGIC_HEAD_LEN + MAGIC_DATA_LEN;\r
-    *lenp = flat_len;\r
-\r
-  bad:\r
-    return code;\r
-}\r
-\r
-/**\r
- * cci_msg_add_data_blob()\r
- *\r
- * Purpose: Adds 'len' bytes of data to the msg\r
- *\r
- * Return: \r
- *\r
- * Errors: \r
- *\r
- */\r
-cc_int32 \r
-cci_msg_add_data_blob(cc_msg_t* msg, void *data, cc_uint32 len, cc_uint32 *lenp) \r
-{\r
-    cc_int32 code;\r
-\r
-    if (msg == NULL || data == NULL || len <= 0 || lenp == NULL)\r
-        return ccErrBadParam;\r
-\r
-    code = cci_generic_list_append(msg->data_blobs, data, len, NULL);\r
-    if ( code != ccNoError )\r
-        return code;\r
-    return cci_msg_calc_blob_pos(msg, data, len, lenp);\r
-}\r
-\r
-/**\r
- * cc_msg_\r
- *\r
- * Purpose:\r
- *\r
- * Return: \r
- *\r
- * Errors: \r
- *\r
- */\r
-cc_int32 \r
-cci_msg_calc_blob_pos(cc_msg_t* msg, void *data, cc_uint32 len, cc_uint32 * posp) \r
-{\r
-    cc_uint32 pos;\r
-    cc_generic_list_node_t* gen_node;\r
-    cc_generic_iterate_t* gen_iterator;\r
-    cc_int32 code;\r
-\r
-    code = cci_msg_calc_header_size(msg, &pos);\r
-    pos += sizeof(cc_uint32); /*+ sizeof(cc_uint32) for magic*/\r
-\r
-    code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator);\r
-    while (cci_generic_iterate_has_next(gen_iterator)) {\r
-        code = cci_generic_iterate_next(gen_iterator, &gen_node);\r
-        if (gen_node->len != len && gen_node->data != data) {\r
-            pos += gen_node->len + sizeof(cc_uint32);\r
-        } else {\r
-            cci_generic_free_iterator(gen_iterator);\r
-            *posp = pos + sizeof(cc_uint32);\r
-            return ccNoError;\r
-        }\r
-    }\r
-    \r
-    cci_generic_free_iterator(gen_iterator);\r
-    return ccIteratorEnd;\r
-}\r
-\r
-/**\r
- * cc_msg_\r
- *\r
- * Purpose:\r
- *\r
- * Return: \r
- *\r
- * Errors: \r
- *\r
- */\r
-cc_int32 \r
-cci_msg_add_header(cc_msg_t* msg, void *header, cc_uint32 header_len) \r
-{\r
-    if ( msg == NULL || header == NULL )\r
-        return ccErrBadParam;\r
-\r
-    msg->header = header;\r
-    msg->header_len = header_len;\r
-    return ccNoError;\r
-}\r
-\r
-\r
-/**\r
- * cc_msg_\r
- *\r
- * Purpose:\r
- *\r
- * Return: \r
- *\r
- * Errors: \r
- *\r
- */\r
-cc_int32\r
-cci_msg_flatten(cc_msg_t* msg, void **flatpp) \r
-{\r
-    cc_generic_list_node_t* gen_node;\r
-    cc_generic_iterate_t* gen_iterator;\r
-    char *cur_pos;\r
-    cc_uint32 zero = 0;\r
-    cc_uint32 magic = 0;\r
-    cc_uint32 msg_len;\r
-    cc_uint32 u32;\r
-    cc_int32 code;\r
-\r
-    if (msg == NULL)\r
-        return ccErrBadParam;\r
-\r
-    code = cci_msg_calc_size(msg,&msg->flat_len);\r
-    if ( code != ccNoError )\r
-        return code;\r
-\r
-    if (msg->flat_len > CC_MSG_MAX_SIZE)\r
-        return ccErrBadParam;\r
-\r
-    msg->flat = (void *)malloc(msg->flat_len);\r
-    if (msg->flat == NULL)\r
-        return ccErrNoMem;\r
-    \r
-    cur_pos = msg->flat;\r
-\r
-    u32 = htonl(msg->header_len);\r
-    memcpy(cur_pos,&u32,sizeof(cc_uint32));\r
-    cur_pos+=sizeof(cc_uint32);\r
-\r
-    u32 = htonl(msg->flat_len);\r
-    memcpy(cur_pos,&u32,sizeof(cc_uint32));\r
-    cur_pos+=sizeof(cc_uint32);\r
-\r
-    u32 = htonl(msg->type);\r
-    memcpy(cur_pos,&u32,sizeof(cc_uint32));\r
-    cur_pos+=sizeof(cc_uint32);\r
-\r
-    /* header data is already in network order */\r
-    memcpy(cur_pos, msg->header, msg->header_len);\r
-    cur_pos += msg->header_len;\r
-\r
-    u32 = htonl(zero);\r
-    memcpy(cur_pos, &u32, sizeof(cc_uint32)); /*will be magic number later*/\r
-    cur_pos += sizeof(cc_uint32);\r
-\r
-    code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator);\r
-    if ( code != ccNoError ) {\r
-        free(msg->flat);\r
-        return code;\r
-    }\r
-\r
-    while (cci_generic_iterate_has_next(gen_iterator)) {\r
-        code = cci_generic_iterate_next(gen_iterator, &gen_node);\r
-        if (code != ccNoError) {\r
-            free(gen_iterator);\r
-            free(msg->flat);\r
-            return code;\r
-        }\r
-       u32 = htonl(gen_node->len);\r
-           memcpy(cur_pos, &u32, sizeof(cc_uint32));\r
-        cur_pos+=sizeof(cc_uint32);\r
-               \r
-       /* data already in network order */\r
-        memcpy(cur_pos, gen_node->data, gen_node->len);\r
-        cur_pos += gen_node->len;\r
-    }\r
-    free(gen_iterator);\r
-\r
-    u32 = htonl(zero);\r
-    memcpy(cur_pos, &u32, sizeof(cc_uint32)); /*magic number will go here later*/\r
-    cur_pos += sizeof(cc_uint32);\r
-\r
-    if (cur_pos - (char *)msg->flat != msg->flat_len) {\r
-        fprintf(stderr, "ERROR cur_pos - msg->flat = %d\n",msg->flat_len);\r
-    }\r
-\r
-    cci_msg_calc_magic(msg->flat, msg->flat_len, &magic);\r
-    printf("magic = %d\n",magic);\r
-       \r
-    cci_msg_calc_header_size(msg, &msg_len);\r
-    memcpy((char *)msg->flat + msg_len, &magic, sizeof(cc_uint32));\r
-    memcpy((char *)msg->flat + msg->flat_len - sizeof(cc_uint32), &magic, sizeof(cc_uint32));\r
-\r
-    if ( flatpp != NULL )\r
-        *flatpp = msg->flat;\r
-\r
-    return ccNoError;\r
-}\r
-\r
-/**\r
- * cc_msg_\r
- *\r
- * Purpose:\r
- *\r
- * Return: \r
- *\r
- * Errors: \r
- *\r
- */\r
-cc_int32\r
-cci_msg_calc_magic(void *flat, int flat_len, cc_uint32 * magicp)\r
-{\r
-    cc_uint32 magic = 0;\r
-    int i;\r
-       \r
-    for (i = 0; i < flat_len; i += sizeof(cc_uint32)) {\r
-        magic = magic ^ *(int *)((char *)flat + i);\r
-    }\r
-    *magicp = htonl(magic);\r
-    return ccNoError;\r
-}\r
-\r
-/**\r
- * cc_msg_\r
- *\r
- * Purpose:\r
- *\r
- * Return: \r
- *\r
- * Errors: \r
- *\r
- */\r
-cc_int32 \r
-cci_msg_verify(void *flat, int flat_len, cc_uint32 * validp)  \r
-{\r
-    cc_uint32 *magic1, *magic2;\r
-    cc_uint32 *pheader_len;\r
-    cc_uint32 header_len;\r
-    cc_uint32 *ptotal_len;\r
-    cc_uint32 total_len;\r
-    cc_uint32 *pblob_len;\r
-    cc_uint32 blob_len;\r
-    cc_uint32 *ptype;\r
-    cc_uint32 type;\r
-    cc_uint32 num_blobs = 0;\r
-    cc_uint32 zero = 0;\r
-    cc_uint32 msg_magic, msg_magic2;\r
-\r
-    if (flat == NULL || flat_len <= 0 || validp == NULL)\r
-        return ccErrBadParam;\r
-\r
-    pheader_len = flat;\r
-    ptotal_len = (cc_uint32 *)((char *)pheader_len + sizeof(cc_uint32));\r
-    ptype = (cc_uint32 *)((char *)ptotal_len + sizeof(cc_uint32));\r
-\r
-    header_len = ntohl(*pheader_len);\r
-    total_len = ntohl(*ptotal_len);\r
-    type = ntohl(*ptype);\r
-\r
-    if (total_len != flat_len) {\r
-        *validp = 0;\r
-        return ccNoError;\r
-    }\r
-    \r
-    if (header_len > flat_len) {\r
-        /*too weak. We could verify header_len against type spec header.*/\r
-        *validp = 0;\r
-        return ccNoError;\r
-    }\r
-    if (type > CC_MSG_MAX_TYPE) {\r
-        *validp = 0;\r
-        return ccNoError;\r
-    }\r
-\r
-    magic1 = (cc_uint32 *)((char *)ptype + sizeof(cc_uint32) + header_len); \r
-    if ((char *)magic1 - (char *)flat == (flat_len - 8)) {\r
-        /*There are no data blobs*/\r
-        magic2 = (cc_uint32 *)((char *)magic1 + sizeof(cc_uint32));\r
-        num_blobs = 0;\r
-    } else {\r
-        pblob_len = (cc_uint32 *)((char *)magic1 + sizeof(cc_uint32));\r
-        num_blobs = 1;\r
-       blob_len = ntohl(*pblob_len);\r
-\r
-        while (blob_len + sizeof(cc_uint32) + ((char *)pblob_len - (char *)flat) < (flat_len - sizeof(cc_uint32))) {\r
-            pblob_len = (cc_uint32 *)((char *)pblob_len + blob_len + sizeof(cc_uint32));\r
-            num_blobs++;\r
-           blob_len = ntohl(*pblob_len);\r
-        }\r
-\r
-        if (blob_len + sizeof(cc_uint32) + ((char *)pblob_len - (char *)flat) != (flat_len - sizeof(cc_uint32))) {\r
-            /*blobs didn't line up*/\r
-            *validp = 0;\r
-            return ccNoError;\r
-        }\r
-        magic2 = (cc_uint32 *)((char *)pblob_len + blob_len + sizeof(cc_uint32)); /*2nd magic should be directly after the last blob*/\r
-    }\r
-       \r
-    if (*magic1 != *magic2) {\r
-        *validp = 0;\r
-        return ccNoError;\r
-    }\r
-    msg_magic = *magic1;\r
-\r
-    printf("%d %d\n", (char *)magic1 - (char *)flat, (char *)magic2 - (char *)flat);\r
-\r
-    memcpy(magic1, &zero, sizeof(cc_uint32));\r
-    memcpy(magic2, &zero, sizeof(cc_uint32));\r
-    cci_msg_calc_magic(flat, flat_len, &msg_magic2);\r
-    /* both msg_magic and msg_magic2 are in network order */\r
-    if (msg_magic != msg_magic2) {\r
-        *validp = 0;\r
-        return ccNoError;\r
-    }\r
-    memcpy(magic1, &msg_magic, sizeof(cc_uint32));\r
-    memcpy(magic2, &msg_magic, sizeof(cc_uint32));\r
-\r
-    *validp = 1;\r
-    return ccNoError;\r
-}\r
-\r
-/**\r
- * cc_msg_\r
- *\r
- * Purpose:\r
- *\r
- * Return: \r
- *\r
- * Errors: \r
- *\r
- */\r
-cc_int32\r
-cci_msg_unflatten(void *flat, int flat_len, cc_msg_t** msgpp) \r
-{\r
-    cc_msg_t* msg;\r
-    char *cur_pos;\r
-    cc_uint32 blob_len;\r
-    char *blob;\r
-    cc_uint32 valid;\r
-    cc_int32 code;\r
-\r
-    if ( flat == NULL || flat_len <= 0 || msgpp == NULL )\r
-        return ccErrBadParam;\r
-\r
-    code = cci_msg_new(0, &msg);\r
-    if (code)\r
-        return code;\r
-\r
-    cci_msg_verify(flat, flat_len, &valid);\r
-    if (valid != 1) {\r
-        cci_msg_destroy(msg);\r
-        return ccErrBadParam;\r
-    }\r
-\r
-    cur_pos = flat;\r
-    msg->flat = flat;\r
-\r
-    msg->header_len = ntohl(*(cc_uint32 *)cur_pos);\r
-    cur_pos += sizeof(cc_uint32);\r
-\r
-    msg->flat_len = ntohl(*(cc_uint32 *)cur_pos);\r
-    cur_pos += sizeof(cc_uint32);\r
-\r
-    msg->type = ntohl(*(cc_uint32 *)cur_pos);\r
-    cur_pos += sizeof(cc_uint32);\r
-\r
-    msg->header = (void *)malloc(msg->header_len);\r
-    if (msg->header == NULL) {\r
-        cci_msg_destroy(msg);\r
-        return ccErrNoMem;\r
-    }\r
-    memcpy(msg->header, cur_pos, msg->header_len);\r
-    cur_pos += msg->header_len;\r
-       \r
-    msg->magic = ntohl(*(cc_uint32 *)cur_pos);\r
-    cur_pos += sizeof(cc_uint32);\r
-\r
-    if (cur_pos - (char *)flat != flat_len - 8) { /*at least 1 blob*/\r
-        blob_len = ntohl(*(cc_uint32 *)cur_pos);\r
-        while (blob_len + (cur_pos - (char *)flat) + sizeof(cc_uint32) <= flat_len - sizeof(cc_uint32)) {\r
-            blob = (void *)malloc(blob_len);\r
-            if (blob == NULL) {\r
-                cci_msg_destroy(msg);\r
-                return ccErrNoMem;\r
-            }\r
-            memcpy(blob, cur_pos + sizeof(cc_uint32), blob_len);\r
-            cci_generic_list_append(msg->data_blobs, blob, blob_len, NULL);\r
-\r
-            cur_pos += sizeof(cc_uint32) + blob_len;\r
-            blob_len = ntohl(*(int *)cur_pos);\r
-        }\r
-    }\r
-    *msgpp = msg;\r
-    return ccNoError;\r
-}\r
-\r
-cc_int32\r
-cci_msg_retrieve_blob(cc_msg_t* msg, cc_uint32 blob_offset, cc_uint32 blob_len, char **blobp) \r
-{\r
-    cc_generic_iterate_t*      gen_iterator;\r
-    cc_generic_list_node_t*    gen_node;\r
-    void *ret;\r
-    cc_uint32                   blob_pos;\r
-    cc_int32                    code;\r
-\r
-    /*Ensure that the message has been unflattened*/\r
-    if ( msg == NULL || msg->flat == NULL || blob_offset > msg->flat_len || \r
-         blob_len > msg->flat_len - blob_offset || blobp == NULL)\r
-        return ccErrBadParam;\r
-\r
-    code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator);\r
-    while (cci_generic_iterate_has_next(gen_iterator)) {\r
-        code = cci_generic_iterate_next(gen_iterator, &gen_node);\r
-        code = cci_msg_calc_blob_pos(msg, gen_node->data, gen_node->len, &blob_pos);\r
-        if (blob_pos == blob_offset && gen_node->len == blob_len)  {\r
-            free(gen_iterator);\r
-            ret = (void *)malloc(blob_len);\r
-            if (ret == NULL)\r
-                return ccErrNoMem;\r
-            memcpy(ret,(char *)msg->flat + blob_offset, blob_len);     \r
-            *blobp = ret;\r
-            return ccNoError;\r
-        }\r
-    }\r
-    free(gen_iterator);\r
-    return ccIteratorEnd;\r
-}\r
-\r
-/**\r
- * cc_msg_\r
- *\r
- * Purpose:\r
- *\r
- * Return: \r
- *\r
- * Errors: \r
- *\r
- */\r
-cc_int32 \r
-cci_msg_destroy(cc_msg_t* msg) \r
-{\r
-    if (msg->flat != NULL) \r
-        free(msg->flat);\r
-    if (msg->header != NULL)\r
-        free(msg->header);\r
-    cci_generic_list_destroy(msg->data_blobs);\r
-    free(msg);\r
-    return ccNoError;\r
-}\r
-\r
+/* $Copyright:
+ *
+ * Copyright 2004-2006 by the Massachusetts Institute of Technology.
+ * 
+ * All rights reserved.
+ * 
+ * Export of this software from the United States of America may require a
+ * specific license from the United States Government.  It is the
+ * responsibility of any person or organization contemplating export to
+ * obtain such a license before exporting.
+ * 
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and distribute
+ * this software and its documentation for any purpose and without fee is
+ * hereby granted, provided that the above copyright notice appear in all
+ * copies and that both that copyright notice and this permission notice
+ * appear in supporting documentation, and that the name of M.I.T. not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission.  Furthermore if you
+ * modify this software you must label your software as modified software
+ * and not distribute it in such a fashion that it might be confused with
+ * the original MIT software. M.I.T. makes no representations about the
+ * suitability of this software for any purpose.  It is provided "as is"
+ * without express or implied warranty.
+ * 
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * 
+ * Individual source code files are copyright MIT, Cygnus Support,
+ * OpenVision, Oracle, Sun Soft, FundsXpress, and others.
+ * 
+ * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira,
+ * and Zephyr are trademarks of the Massachusetts Institute of Technology
+ * (MIT).  No commercial use of these trademarks may be made without prior
+ * written permission of MIT.
+ * 
+ * "Commercial use" means use of a name in a product or other for-profit
+ * manner.  It does NOT prevent a commercial firm from referring to the MIT
+ * trademarks in order to convey information (although in doing so,
+ * recognition of their trademark status should be given).
+ * $
+ */
+
+/*
+ * Verifiable, extensible message format.
+ *
+ * Format:
+ * <size of header block (header_len)>
+ * <size of *entire* message, including previous field (flat_len)>
+ * <message type (type)>
+ * <type specific header (header)>
+ * <magic number (magic)>
+ * <data blob 1 length>
+ * <data blob 1>
+ * <data blob 2 length>
+ * <data blob 2>
+ * ...
+ * <magic number (magic)>
+ *
+ * If the header has variable length data it is included in the data blobs. 
+ * The header field has the offset from the beginning of the message of the 1st 
+ * byte of the data and the length of the data.
+ */
+
+#include "CredentialsCache.h"
+#include "msg.h"
+#include "generic_lists.h"
+
+#include <stdlib.h>
+#include <memory.h>
+#include <stdio.h>
+#include <string.h>
+
+/**
+ * cci_msg_new()
+ *
+ * Purpose: Allocate and initialize a new cc_msg_t structure
+ *
+ * Input parameter (type) in host order
+ *
+ * Return:  non-NULL, the msg
+ *          NULL, failure
+ *
+ * Errors:  ccErrNoMem
+ *
+ */
+cc_int32
+cci_msg_new(cc_uint32 type, cc_msg_t** msgpp) 
+{
+    // type should be validated.  If invalid set error to ccErrBadParam
+    cc_msg_t* msg;
+    
+    if ( type > CC_MSG_MAX_TYPE || msgpp == NULL )
+        return ccErrBadParam;
+
+    msg = (cc_msg_t*)malloc(sizeof(cc_msg_t));
+    if (msg == NULL)
+        return ccErrNoMem;
+
+    msg->type = type;
+    msg->flat = NULL;
+    msg->header = NULL;
+    msg->flat_len = 0;
+    msg->header_len = 0;
+    msg->magic = 0;
+    cci_generic_list_new(&msg->data_blobs);
+    if (msg->data_blobs == NULL) {
+        // pass on error from previous call
+        free(msg);
+        return ccErrNoMem;
+    }
+
+    *msgpp = msg;     
+    return ccNoError;
+}
+
+/**
+ * cci_msg_calc_header_size()
+ *
+ * Purpose: Calculates the size of the header
+ *
+ * Return:  the size in bytes
+ *
+ * Errors:  ccErrBadParam
+ *
+ */
+cc_int32
+cci_msg_calc_header_size(cc_msg_t* msg, cc_uint32 * lenp) 
+{
+    int header_len = 12; /* header size, entire size, type */
+
+    if ( msg == NULL || lenp == NULL )
+        return ccErrBadParam;
+
+    header_len += msg->header_len;
+    *lenp = header_len;
+    return ccNoError;
+}
+
+/**
+ * cci_msg_calc_size()
+ *
+ * Purpose: Calculates the size of the message
+ *          (does not include the magic bytes)
+ *
+ * Return:  the size in bytes
+ *
+ * Errors:  ccErrBadParam
+ *
+ */
+cc_int32 
+cci_msg_calc_size(cc_msg_t* msg, cc_uint32 * lenp) 
+{
+    cc_uint32 flat_len;
+    cc_generic_list_node_t* gen_node;
+    cc_generic_iterate_t* gen_iterator;
+       cc_int32 code;
+
+    if ( msg == NULL || lenp == NULL ) 
+        return ccErrBadParam;
+
+    code = cci_msg_calc_header_size(msg, &flat_len);
+    if (code != ccNoError)
+        goto bad;
+
+    code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator);
+    if ( code != ccNoError )
+        goto bad;
+
+    while (cci_generic_iterate_has_next(gen_iterator)) {
+        code = cci_generic_iterate_next(gen_iterator, &gen_node);
+        if (code != ccNoError)
+            break;
+        flat_len += gen_node->len + BLOB_LEN;
+    }
+    cci_generic_free_iterator(gen_iterator);
+    if (code != ccNoError)
+        goto bad;
+
+    flat_len += MAGIC_HEAD_LEN + MAGIC_DATA_LEN;
+    *lenp = flat_len;
+
+  bad:
+    return code;
+}
+
+/**
+ * cci_msg_add_data_blob()
+ *
+ * Purpose: Adds 'len' bytes of data to the msg
+ *
+ * Return: 
+ *
+ * Errors: 
+ *
+ */
+cc_int32 
+cci_msg_add_data_blob(cc_msg_t* msg, void *data, cc_uint32 len, cc_uint32 *lenp) 
+{
+    cc_int32 code;
+
+    if (msg == NULL || data == NULL || len <= 0 || lenp == NULL)
+        return ccErrBadParam;
+
+    code = cci_generic_list_append(msg->data_blobs, data, len, NULL);
+    if ( code != ccNoError )
+        return code;
+    return cci_msg_calc_blob_pos(msg, data, len, lenp);
+}
+
+/**
+ * cc_msg_
+ *
+ * Purpose:
+ *
+ * Return: 
+ *
+ * Errors: 
+ *
+ */
+cc_int32 
+cci_msg_calc_blob_pos(cc_msg_t* msg, void *data, cc_uint32 len, cc_uint32 * posp) 
+{
+    cc_uint32 pos;
+    cc_generic_list_node_t* gen_node;
+    cc_generic_iterate_t* gen_iterator;
+    cc_int32 code;
+
+    code = cci_msg_calc_header_size(msg, &pos);
+    pos += sizeof(cc_uint32); /*+ sizeof(cc_uint32) for magic*/
+
+    code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator);
+    while (cci_generic_iterate_has_next(gen_iterator)) {
+        code = cci_generic_iterate_next(gen_iterator, &gen_node);
+        if (gen_node->len != len && gen_node->data != data) {
+            pos += gen_node->len + sizeof(cc_uint32);
+        } else {
+            cci_generic_free_iterator(gen_iterator);
+            *posp = pos + sizeof(cc_uint32);
+            return ccNoError;
+        }
+    }
+    
+    cci_generic_free_iterator(gen_iterator);
+    return ccIteratorEnd;
+}
+
+/**
+ * cc_msg_
+ *
+ * Purpose:
+ *
+ * Return: 
+ *
+ * Errors: 
+ *
+ */
+cc_int32 
+cci_msg_add_header(cc_msg_t* msg, void *header, cc_uint32 header_len) 
+{
+    if ( msg == NULL || header == NULL )
+        return ccErrBadParam;
+
+    msg->header = header;
+    msg->header_len = header_len;
+    return ccNoError;
+}
+
+
+/**
+ * cc_msg_
+ *
+ * Purpose:
+ *
+ * Return: 
+ *
+ * Errors: 
+ *
+ */
+cc_int32
+cci_msg_flatten(cc_msg_t* msg, void **flatpp) 
+{
+    cc_generic_list_node_t* gen_node;
+    cc_generic_iterate_t* gen_iterator;
+    unsigned char *cur_pos;
+    cc_uint32 zero = 0;
+    cc_uint32 magic = 0;
+    cc_uint32 msg_len;
+    cc_uint32 u32;
+    cc_int32 code;
+
+    if (msg == NULL)
+        return ccErrBadParam;
+
+    code = cci_msg_calc_size(msg,&msg->flat_len);
+    if ( code != ccNoError )
+        return code;
+
+    if (msg->flat_len > CC_MSG_MAX_SIZE)
+        return ccErrBadParam;
+
+    msg->flat = (void *)malloc(msg->flat_len);
+    if (msg->flat == NULL)
+        return ccErrNoMem;
+    
+    cur_pos = msg->flat;
+
+    u32 = htonl(msg->header_len);
+    memcpy(cur_pos,&u32,sizeof(cc_uint32));
+    cur_pos+=sizeof(cc_uint32);
+
+    u32 = htonl(msg->flat_len);
+    memcpy(cur_pos,&u32,sizeof(cc_uint32));
+    cur_pos+=sizeof(cc_uint32);
+
+    u32 = htonl(msg->type);
+    memcpy(cur_pos,&u32,sizeof(cc_uint32));
+    cur_pos+=sizeof(cc_uint32);
+
+    /* header data is already in network order */
+    memcpy(cur_pos, msg->header, msg->header_len);
+    cur_pos += msg->header_len;
+
+    u32 = htonl(zero);
+    memcpy(cur_pos, &u32, sizeof(cc_uint32)); /*will be magic number later*/
+    cur_pos += sizeof(cc_uint32);
+
+    code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator);
+    if ( code != ccNoError ) {
+        free(msg->flat);
+        return code;
+    }
+
+    while (cci_generic_iterate_has_next(gen_iterator)) {
+        code = cci_generic_iterate_next(gen_iterator, &gen_node);
+        if (code != ccNoError) {
+            free(gen_iterator);
+            free(msg->flat);
+            return code;
+        }
+       u32 = htonl(gen_node->len);
+           memcpy(cur_pos, &u32, sizeof(cc_uint32));
+        cur_pos+=sizeof(cc_uint32);
+               
+       /* data already in network order */
+        memcpy(cur_pos, gen_node->data, gen_node->len);
+        cur_pos += gen_node->len;
+    }
+    free(gen_iterator);
+
+    u32 = htonl(zero);
+    memcpy(cur_pos, &u32, sizeof(cc_uint32)); /*magic number will go here later*/
+    cur_pos += sizeof(cc_uint32);
+
+    if (cur_pos - (unsigned char *)msg->flat != msg->flat_len) {
+        fprintf(stderr, "ERROR cur_pos - msg->flat = %d\n",msg->flat_len);
+    }
+
+    cci_msg_calc_magic(msg->flat, msg->flat_len, &magic);
+    printf("magic = %d\n",magic);
+       
+    cci_msg_calc_header_size(msg, &msg_len);
+    memcpy((char *)msg->flat + msg_len, &magic, sizeof(cc_uint32));
+    memcpy((char *)msg->flat + msg->flat_len - sizeof(cc_uint32), &magic, sizeof(cc_uint32));
+
+    if ( flatpp != NULL )
+        *flatpp = msg->flat;
+
+    return ccNoError;
+}
+
+/**
+ * cc_msg_
+ *
+ * Purpose:
+ *
+ * Return: 
+ *
+ * Errors: 
+ *
+ */
+cc_int32
+cci_msg_calc_magic(void *flat, cc_uint32 flat_len, cc_uint32 * magicp)
+{
+    cc_uint32 magic = 0;
+    cc_uint32 i;
+       
+    for (i = 0; i < flat_len; i += sizeof(cc_uint32)) {
+        magic = magic ^ *(int *)((char *)flat + i);
+    }
+    *magicp = htonl(magic);
+    return ccNoError;
+}
+
+/**
+ * cc_msg_
+ *
+ * Purpose:
+ *
+ * Return: 
+ *
+ * Errors: 
+ *
+ */
+cc_int32 
+cci_msg_verify(void *flat, cc_uint32 flat_len, cc_uint32 * validp)  
+{
+    cc_uint32 *magic1, *magic2;
+    cc_uint32 *pheader_len;
+    cc_uint32 header_len;
+    cc_uint32 *ptotal_len;
+    cc_uint32 total_len;
+    cc_uint32 *pblob_len;
+    cc_uint32 blob_len;
+    cc_uint32 *ptype;
+    cc_uint32 type;
+    cc_uint32 num_blobs = 0;
+    cc_uint32 zero = 0;
+    cc_uint32 msg_magic, msg_magic2;
+
+    if (flat == NULL || flat_len <= 0 || validp == NULL)
+        return ccErrBadParam;
+
+    pheader_len = flat;
+    ptotal_len = (cc_uint32 *)((char *)pheader_len + sizeof(cc_uint32));
+    ptype = (cc_uint32 *)((char *)ptotal_len + sizeof(cc_uint32));
+
+    header_len = ntohl(*pheader_len);
+    total_len = ntohl(*ptotal_len);
+    type = ntohl(*ptype);
+
+    if (total_len != flat_len) {
+        *validp = 0;
+        return ccNoError;
+    }
+    
+    if (header_len > flat_len) {
+        /*too weak. We could verify header_len against type spec header.*/
+        *validp = 0;
+        return ccNoError;
+    }
+    if (type > CC_MSG_MAX_TYPE) {
+        *validp = 0;
+        return ccNoError;
+    }
+
+    magic1 = (cc_uint32 *)((char *)ptype + sizeof(cc_uint32) + header_len); 
+    if ((char *)magic1 - (char *)flat == (flat_len - 8)) {
+        /*There are no data blobs*/
+        magic2 = (cc_uint32 *)((char *)magic1 + sizeof(cc_uint32));
+        num_blobs = 0;
+    } else {
+        pblob_len = (cc_uint32 *)((char *)magic1 + sizeof(cc_uint32));
+        num_blobs = 1;
+       blob_len = ntohl(*pblob_len);
+
+        while (blob_len + sizeof(cc_uint32) + ((char *)pblob_len - (char *)flat) < (flat_len - sizeof(cc_uint32))) {
+            pblob_len = (cc_uint32 *)((char *)pblob_len + blob_len + sizeof(cc_uint32));
+            num_blobs++;
+           blob_len = ntohl(*pblob_len);
+        }
+
+        if (blob_len + sizeof(cc_uint32) + ((char *)pblob_len - (char *)flat) != (flat_len - sizeof(cc_uint32))) {
+            /*blobs didn't line up*/
+            *validp = 0;
+            return ccNoError;
+        }
+        magic2 = (cc_uint32 *)((char *)pblob_len + blob_len + sizeof(cc_uint32)); /*2nd magic should be directly after the last blob*/
+    }
+       
+    if (*magic1 != *magic2) {
+        *validp = 0;
+        return ccNoError;
+    }
+    msg_magic = *magic1;
+
+    printf("%d %d\n", (char *)magic1 - (char *)flat, (char *)magic2 - (char *)flat);
+
+    memcpy(magic1, &zero, sizeof(cc_uint32));
+    memcpy(magic2, &zero, sizeof(cc_uint32));
+    cci_msg_calc_magic(flat, flat_len, &msg_magic2);
+    /* both msg_magic and msg_magic2 are in network order */
+    if (msg_magic != msg_magic2) {
+        *validp = 0;
+        return ccNoError;
+    }
+    memcpy(magic1, &msg_magic, sizeof(cc_uint32));
+    memcpy(magic2, &msg_magic, sizeof(cc_uint32));
+
+    *validp = 1;
+    return ccNoError;
+}
+
+/**
+ * cc_msg_
+ *
+ * Purpose:
+ *
+ * Return: 
+ *
+ * Errors: 
+ *
+ */
+cc_int32
+cci_msg_unflatten(void *flat, cc_uint32 flat_len, cc_msg_t** msgpp) 
+{
+    cc_msg_t* msg;
+    char *cur_pos;
+    cc_uint32 blob_len;
+    char *blob;
+    cc_uint32 valid;
+    cc_int32 code;
+
+    if ( flat == NULL || flat_len <= 0 || msgpp == NULL )
+        return ccErrBadParam;
+
+    code = cci_msg_new(0, &msg);
+    if (code)
+        return code;
+
+    cci_msg_verify(flat, flat_len, &valid);
+    if (valid != 1) {
+        cci_msg_destroy(msg);
+        return ccErrBadParam;
+    }
+
+    cur_pos = flat;
+    msg->flat = flat;
+
+    msg->header_len = ntohl(*(cc_uint32 *)cur_pos);
+    cur_pos += sizeof(cc_uint32);
+
+    msg->flat_len = ntohl(*(cc_uint32 *)cur_pos);
+    cur_pos += sizeof(cc_uint32);
+
+    msg->type = ntohl(*(cc_uint32 *)cur_pos);
+    cur_pos += sizeof(cc_uint32);
+
+    msg->header = (void *)malloc(msg->header_len);
+    if (msg->header == NULL) {
+        cci_msg_destroy(msg);
+        return ccErrNoMem;
+    }
+    memcpy(msg->header, cur_pos, msg->header_len);
+    cur_pos += msg->header_len;
+       
+    msg->magic = ntohl(*(cc_uint32 *)cur_pos);
+    cur_pos += sizeof(cc_uint32);
+
+    if (cur_pos - (char *)flat != flat_len - 8) { /*at least 1 blob*/
+        blob_len = ntohl(*(cc_uint32 *)cur_pos);
+        while (blob_len + (cur_pos - (char *)flat) + sizeof(cc_uint32) <= flat_len - sizeof(cc_uint32)) {
+            blob = (void *)malloc(blob_len);
+            if (blob == NULL) {
+                cci_msg_destroy(msg);
+                return ccErrNoMem;
+            }
+            memcpy(blob, cur_pos + sizeof(cc_uint32), blob_len);
+            cci_generic_list_append(msg->data_blobs, blob, blob_len, NULL);
+
+            cur_pos += sizeof(cc_uint32) + blob_len;
+            blob_len = ntohl(*(int *)cur_pos);
+        }
+    }
+    *msgpp = msg;
+    return ccNoError;
+}
+
+cc_int32
+cci_msg_retrieve_blob(cc_msg_t* msg, cc_uint32 blob_offset, cc_uint32 blob_len, char **blobp) 
+{
+    cc_generic_iterate_t*      gen_iterator;
+    cc_generic_list_node_t*    gen_node;
+    void *ret;
+    cc_uint32                   blob_pos;
+    cc_int32                    code;
+
+    /*Ensure that the message has been unflattened*/
+    if ( msg == NULL || msg->flat == NULL || blob_offset > msg->flat_len || 
+         blob_len > msg->flat_len - blob_offset || blobp == NULL)
+        return ccErrBadParam;
+
+    code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator);
+    while (cci_generic_iterate_has_next(gen_iterator)) {
+        code = cci_generic_iterate_next(gen_iterator, &gen_node);
+        code = cci_msg_calc_blob_pos(msg, gen_node->data, gen_node->len, &blob_pos);
+        if (blob_pos == blob_offset && gen_node->len == blob_len)  {
+            free(gen_iterator);
+            ret = (void *)malloc(blob_len);
+            if (ret == NULL)
+                return ccErrNoMem;
+            memcpy(ret,(char *)msg->flat + blob_offset, blob_len);     
+            *blobp = ret;
+            return ccNoError;
+        }
+    }
+    free(gen_iterator);
+    return ccIteratorEnd;
+}
+
+/**
+ * cc_msg_
+ *
+ * Purpose:
+ *
+ * Return: 
+ *
+ * Errors: 
+ *
+ */
+cc_int32 
+cci_msg_destroy(cc_msg_t* msg) 
+{
+    if (msg->flat != NULL) 
+        free(msg->flat);
+    if (msg->header != NULL)
+        free(msg->header);
+    cci_generic_list_destroy(msg->data_blobs);
+    free(msg);
+    return ccNoError;
+}
+
index 95c4fe79ba1c710b9c774d8aaf55f2e0c1a536d4..baad48fe7a908ebe09f6ad8b0e53dbf1791439e8 100644 (file)
@@ -277,219 +277,211 @@ typedef struct cc_credentials_union cc_credentials_union;
 /* Exposed parts */
 
 struct cc_context_d {
-    const cc_context_f*        functions;
+    const cc_context_f *functions;
 #if TARGET_OS_MAC
-    const cc_context_f*        otherFunctions;
+    const cc_context_f *otherFunctions;
 #endif
 };
 typedef struct cc_context_d cc_context_d;
-typedef cc_context_d*  cc_context_t;
+typedef cc_context_d *cc_context_t;
 
 struct cc_ccache_d {
-    const cc_ccache_ffunctions;
+    const cc_ccache_f *functions;
 #if TARGET_OS_MAC
-    const cc_ccache_fotherFunctions;
+    const cc_ccache_f *otherFunctions;
 #endif
 };
 typedef struct cc_ccache_d cc_ccache_d;
-typedef cc_ccache_d*   cc_ccache_t;
+typedef cc_ccache_d *cc_ccache_t;
 
 struct cc_ccache_iterator_d {
-    const cc_ccache_iterator_f*        functions;
+    const cc_ccache_iterator_f *functions;
 #if TARGET_OS_MAC
-    const cc_ccache_iterator_f*        otherFunctions;
+    const cc_ccache_iterator_f *otherFunctions;
 #endif
 };
 typedef struct cc_ccache_iterator_d cc_ccache_iterator_d;
-typedef cc_ccache_iterator_d*  cc_ccache_iterator_t;
+typedef cc_ccache_iterator_d *cc_ccache_iterator_t;
 
 struct cc_credentials_iterator_d {
-    const cc_credentials_iterator_f*   functions;
+    const cc_credentials_iterator_f *functions;
 #if TARGET_OS_MAC
-    const cc_credentials_iterator_f*   otherFunctions;
+    const cc_credentials_iterator_f *otherFunctions;
 #endif
 };
 typedef struct cc_credentials_iterator_d cc_credentials_iterator_d;
-typedef cc_credentials_iterator_d*     cc_credentials_iterator_t;
+typedef cc_credentials_iterator_d *cc_credentials_iterator_t;
 
 struct cc_string_d {
-    const char*                        data;
-    const cc_string_ffunctions;
+    const char *data;
+    const cc_string_f *functions;
 #if TARGET_OS_MAC
-    const cc_string_fotherFunctions;
+    const cc_string_f *otherFunctions;
 #endif
 };
 typedef struct cc_string_d cc_string_d;
-typedef cc_string_d*   cc_string_t;
+typedef cc_string_d *cc_string_t;
 
 struct cc_credentials_d {
-    const cc_credentials_uniondata;
-    const cc_credentials_ffunctions;
+    const cc_credentials_union *data;
+    const cc_credentials_f *functions;
 #if TARGET_OS_MAC
-    const cc_credentials_f*    otherFunctions;
+    const cc_credentials_f *otherFunctions;
 #endif
 };
 typedef struct cc_credentials_d cc_credentials_d;
-typedef cc_credentials_dcc_credentials_t;
+typedef cc_credentials_d *cc_credentials_t;
 
 /* Function pointer structs */
 
 struct  cc_context_f {
-    cc_int32    (*release) (
-                                cc_context_t context);
-    cc_int32    (*get_change_time) (
-                                cc_context_t context,
-                                cc_time* time);
-    cc_int32    (*get_default_ccache_name) (
-                                cc_context_t context,
-                                cc_string_t* name);
-    cc_int32    (*open_ccache) (
-                                cc_context_t context,
-                                const char* name,
-                                cc_ccache_t* ccache);
-    cc_int32    (*open_default_ccache) (
-                                cc_context_t context,
-                                cc_ccache_t* ccache);
-    cc_int32    (*create_ccache) (
-                                cc_context_t context,
-                                const char* name,
-                                cc_uint32 cred_vers,
-                                const char* principal, 
-                                cc_ccache_t* ccache);
-    cc_int32    (*create_default_ccache) (
-                                cc_context_t context,
-                                cc_uint32 cred_vers,
-                                const char* principal, 
-                                cc_ccache_t* ccache);
-    cc_int32    (*create_new_ccache) (
-                                cc_context_t context,
-                                cc_uint32 cred_vers,
-                                const char* principal, 
-                                cc_ccache_t* ccache);
-    cc_int32    (*new_ccache_iterator) (
-                                cc_context_t context,
-                                cc_ccache_iterator_t* iterator);
-    cc_int32    (*lock) (
-                                cc_context_t context,
-                                cc_uint32 lock_type,
-                                cc_uint32 block);
-    cc_int32    (*unlock) (
-                                cc_context_t context);
-    cc_int32    (*compare) (
-                                cc_context_t context,
-                                cc_context_t compare_to,
-                                cc_uint32* equal);
+    cc_int32 (*release) (cc_context_t in_context);
+    
+    cc_int32 (*get_change_time) (cc_context_t  in_context,
+                                 cc_time      *out_time);
+    
+    cc_int32 (*get_default_ccache_name) (cc_context_t  in_context,
+                                         cc_string_t  *out_name);
+    
+    cc_int32 (*open_ccache) (cc_context_t  in_context,
+                             const char   *in_name,
+                             cc_ccache_t  *out_ccache);
+    
+    cc_int32 (*open_default_ccache) (cc_context_t  in_context,
+                                     cc_ccache_t  *out_ccache);
+    
+    cc_int32 (*create_ccache) (cc_context_t  in_context,
+                               const char   *in_name,
+                               cc_uint32     in_cred_vers,
+                               const char   *in_principal, 
+                               cc_ccache_t  *out_ccache);
+    
+    cc_int32 (*create_default_ccache) (cc_context_t  in_context,
+                                       cc_uint32     in_cred_vers,
+                                       const char   *in_principal, 
+                                       cc_ccache_t  *out_ccache);
+    
+    cc_int32 (*create_new_ccache) (cc_context_t in_context,
+                                   cc_uint32    in_cred_vers,
+                                   const char  *in_principal, 
+                                   cc_ccache_t *out_ccache);
+    
+    cc_int32 (*new_ccache_iterator) (cc_context_t          in_context,
+                                     cc_ccache_iterator_t *out_iterator);
+    
+    cc_int32 (*lock) (cc_context_t in_context,
+                      cc_uint32    in_lock_type,
+                      cc_uint32    in_block);
+    
+    cc_int32 (*unlock) (cc_context_t in_cc_context);
+    
+    cc_int32 (*compare) (cc_context_t  in_cc_context,
+                         cc_context_t  in_compare_to_context,
+                         cc_uint32    *out_equal);
 };
 
 struct cc_ccache_f {
-    cc_int32    (*release) (
-                                 cc_ccache_t ccache);
-    cc_int32    (*destroy) (
-                                 cc_ccache_t ccache);
-    cc_int32    (*set_default) (
-                                 cc_ccache_t ccache);
-    cc_int32    (*get_credentials_version) (
-                                 cc_ccache_t ccache,
-                                 cc_uint32* credentials_version);
-    cc_int32    (*get_name) (
-                                 cc_ccache_t ccache,
-                                 cc_string_t* name);
-    cc_int32    (*get_principal) (
-                                 cc_ccache_t ccache,
-                                 cc_uint32 credentials_version,
-                                 cc_string_t* principal);
-    cc_int32    (*set_principal) (
-                                 cc_ccache_t ccache,
-                                 cc_uint32 credentials_version,
-                                 const char* principal);
-    cc_int32    (*store_credentials) (
-                                 cc_ccache_t ccache,
-                                 const cc_credentials_union* credentials);
-    cc_int32    (*remove_credentials) (
-                                 cc_ccache_t ccache,
-                                 cc_credentials_t credentials);
-    cc_int32    (*new_credentials_iterator) (
-                                 cc_ccache_t ccache,
-                                 cc_credentials_iterator_t* iterator);
-    cc_int32    (*move) (
-                                 cc_ccache_t source,
-                                 cc_ccache_t destination);
-    cc_int32    (*lock) (
-                                 cc_ccache_t ccache,
-                                 cc_uint32 lock_type,
-                                 cc_uint32 block);
-    cc_int32    (*unlock) (
-                                 cc_ccache_t ccache);
-    cc_int32    (*get_last_default_time) (
-                                 cc_ccache_t ccache,
-                                 cc_time* time);
-    cc_int32    (*get_change_time) (
-                                 cc_ccache_t ccache,
-                                 cc_time* time);
-    cc_int32    (*compare) (
-                                cc_ccache_t ccache,
-                                cc_ccache_t compare_to,
-                                cc_uint32* equal);
-    cc_int32   (*get_kdc_time_offset) (
-                                cc_ccache_t ccache,
-                                cc_int32       credentials_version,
-                                cc_time*       time_offset);
-    cc_int32   (*set_kdc_time_offset) (
-                                cc_ccache_t ccache,
-                                cc_int32       credentials_version,
-                                cc_time        time_offset);
-                                
-    cc_int32   (*clear_kdc_time_offset) (
-                                cc_ccache_t    ccache,
-                                cc_int32       credentials_version);
+    cc_int32 (*release) (cc_ccache_t io_ccache);
+    
+    cc_int32 (*destroy) (cc_ccache_t io_ccache);
+    
+    cc_int32 (*set_default) (cc_ccache_t io_ccache);
+    
+    cc_int32 (*get_credentials_version) (cc_ccache_t  in_ccache,
+                                         cc_uint32   *in_credentials_version);
+    
+    cc_int32 (*get_name) (cc_ccache_t  in_ccache,
+                          cc_string_t *out_name);
+    
+    cc_int32 (*get_principal) (cc_ccache_t  in_ccache,
+                               cc_uint32    in_credentials_version,
+                               cc_string_t *out_principal);
+    
+    cc_int32 (*set_principal) (cc_ccache_t  io_ccache,
+                               cc_uint32    in_credentials_version,
+                               const char  *in_principal);
+    
+    cc_int32 (*store_credentials) (cc_ccache_t                 io_ccache,
+                                   const cc_credentials_union *in_credentials_union);
+    
+    cc_int32 (*remove_credentials) (cc_ccache_t      io_ccache,
+                                    cc_credentials_t in_credentials);
+    
+    cc_int32 (*new_credentials_iterator) (cc_ccache_t                in_ccache,
+                                          cc_credentials_iterator_t *out_credentials_iterator);
+    
+    cc_int32 (*move) (cc_ccache_t io_source_ccache,
+                      cc_ccache_t io_destination_ccache);
+    
+    cc_int32 (*lock) (cc_ccache_t io_ccache,
+                      cc_uint32   in_lock_type,
+                      cc_uint32   in_block);
+    
+    cc_int32 (*unlock) (cc_ccache_t io_ccache);
+    
+    cc_int32 (*get_last_default_time) (cc_ccache_t  in_ccache,
+                                       cc_time     *out_last_default_time);
+    
+    cc_int32 (*get_change_time) (cc_ccache_t  in_ccache,
+                                 cc_time     *out_change_time);
+    
+    cc_int32 (*compare) (cc_ccache_t in_ccache,
+                         cc_ccache_t in_compare_to_ccache,
+                         cc_uint32   *out_equal);
+    
+    cc_int32 (*get_kdc_time_offset) (cc_ccache_t  in_ccache,
+                                     cc_int32     in_credentials_version,
+                                     cc_time     *out_time_offset);
+    
+    cc_int32 (*set_kdc_time_offset) (cc_ccache_t io_ccache,
+                                     cc_int32    in_credentials_version,
+                                     cc_time     in_time_offset);
+    
+    cc_int32 (*clear_kdc_time_offset) (cc_ccache_t in_ccache,
+                                       cc_int32           in_credentials_version);
 };
 
 struct cc_string_f {
-    cc_int32   (*release) (
-                                cc_string_t string);
+    cc_int32 (*release) (cc_string_t in_string);
 };
 
 struct cc_credentials_f {
-    cc_int32   (*release) (
-                                cc_credentials_t credentials);
-    cc_int32    (*compare) (
-                                cc_credentials_t credentials,
-                                cc_credentials_t compare_to,
-                                cc_uint32* equal);
+    cc_int32 (*release) (cc_credentials_t  io_credentials);
+    
+    cc_int32 (*compare) (cc_credentials_t  in_credentials,
+                         cc_credentials_t  in_compare_to_credentials,
+                         cc_uint32        *out_equal);
 };
 
-                          
+
 struct cc_ccache_iterator_f {
-    cc_int32    (*release) (
-                                 cc_ccache_iterator_t iter);
-    cc_int32    (*next) (
-                                 cc_ccache_iterator_t iter,
-                                 cc_ccache_t* ccache);
-
-    cc_int32   (*clone) (       cc_ccache_iterator_t iter,
-                                cc_ccache_iterator_t* new_iter);
+    cc_int32 (*release) (cc_ccache_iterator_t io_ccache_iterator);
+    
+    cc_int32 (*next) (cc_ccache_iterator_t  in_ccache_iterator,
+                      cc_ccache_t          *out_ccache);
+    
+    cc_int32 (*clone) (cc_ccache_iterator_t  in_ccache_iterator,
+                       cc_ccache_iterator_t *out_ccache_iterator);
 };
 
 struct cc_credentials_iterator_f {
-    cc_int32    (*release) (
-                                 cc_credentials_iterator_t iter);
-    cc_int32    (*next) (
-                                 cc_credentials_iterator_t iter,
-                                 cc_credentials_t* cred);
-
-    cc_int32   (*clone) (       cc_credentials_iterator_t iter,
-                                cc_credentials_iterator_t* new_iter);
+    cc_int32 (*release) (cc_credentials_iterator_t io_credentials_iterator);
+    
+    cc_int32 (*next) (cc_credentials_iterator_t  in_credentials_iterator,
+                      cc_credentials_t          *out_credentials);
+    
+    cc_int32 (*clone) (cc_credentials_iterator_t  in_credentials_iterator,
+                       cc_credentials_iterator_t *out_credentials_iterator);
 };
 
 /*
  * API functions
  */
-CCACHE_API cc_int32 cc_initialize (
-       cc_context_t*           outContext,
-       cc_int32                inVersion,
-       cc_int32*               outSupportedVersion,
-       char const**            outVendor);
+
+CCACHE_API cc_int32 cc_initialize (cc_context_t  *out_context,
+                                   cc_int32       in_version,
+                                   cc_int32      *out_supported_version,
+                                   char const   **out_vendor);
        
 /*
  * Convenience macros
index 5505bf29fe9c192bb4c8216284c219ff18ada31f..b7366273dd1940157e5d5180f41b3679c21c6b9d 100644 (file)
@@ -307,4 +307,4 @@ CCACHE_API cc_int32 cc_lock_request(
 }
 #endif /* __cplusplus */
 
-#endif /* __CREDENTIALSCACHE2__ */
\ No newline at end of file
+#endif /* __CREDENTIALSCACHE2__ */
index 14b7ae28c34eb48db9f50e59bb5fc2538a7a8312..93636da388fc719755715cf0018b7cd8256bc796 100644 (file)
 #define __CC_GENERIC_LISTS_H_\r
 \r
 enum cc_list_type {\r
-    generic = 0,\r
-    context,\r
-    cache,\r
-    credentials\r
+    cc_generic_list = 0,\r
+    cc_context_list,\r
+    cc_cache_list,\r
+    cc_credentials_list\r
 };\r
 \r
 struct cc_generic_list_node_t {\r
index 79b9a7f72e118b61fbfce9fe448ef689f1ecd753..1682811c01cb1b323feffb87e54ff86b33dc9b12 100644 (file)
 #include "CredentialsCache.h"
 #include "generic_lists.h"
 
+#if TARGET_OS_MAC
+#define htonll(x) OSSwapHostToBigInt64(x)
+#define ntohll(x) OSSwapBigToHostInt64(x)
+#endif
+
 struct  cc_msg_t {
     cc_uint32 type;                    /*type of message*/
     cc_uint8 *flat;                    /*flattened representation of this message*/
@@ -136,9 +141,9 @@ cc_int32 cci_msg_add_data_blob(cc_msg_t* msg, void *data, cc_uint32 len, cc_uint
 cc_int32 cci_msg_add_header(cc_msg_t* msg, void *header, cc_uint32 header_len);
 cc_int32 cci_msg_calc_blob_pos(cc_msg_t* msg, void *data, cc_uint32 len, cc_uint32 * sizep);
 cc_int32 cci_msg_flatten(cc_msg_t* msg, void **);
-cc_int32 cci_msg_calc_magic(void *flat, int flat_len, cc_uint32 * sizep);
-cc_int32 cci_msg_verify(void* flat, int flat_len, cc_uint32 * sizep);
-cc_int32 cci_msg_unflatten(void *flat, int flat_len, cc_msg_t** msgpp);
+cc_int32 cci_msg_calc_magic(void *flat, cc_uint32 flat_len, cc_uint32 * sizep);
+cc_int32 cci_msg_verify(void* flat, cc_uint32 flat_len, cc_uint32 * sizep);
+cc_int32 cci_msg_unflatten(void *flat, cc_uint32 flat_len, cc_msg_t** msgpp);
 cc_int32 cci_msg_retrieve_blob(cc_msg_t* msg, cc_uint32 blob_offset, cc_uint32 blob_len, char **);
 cc_int32 cci_msg_destroy(cc_msg_t* msg);
 
diff --git a/src/lib/ccapi/mac/CCAPI.xcodeproj/lxs.pbxuser b/src/lib/ccapi/mac/CCAPI.xcodeproj/lxs.pbxuser
deleted file mode 100644 (file)
index ea15e54..0000000
+++ /dev/null
@@ -1,2005 +0,0 @@
-// !$*UTF8*$!
-{
-       08FB7793FE84155DC02AAC07 /* Project object */ = {
-               activeBuildConfigurationName = Debug;
-               activeExecutable = A1E70D5E0A38B796007BE3E3 /* CCacheServer */;
-               activeTarget = A1E70D5C0A38B796007BE3E3 /* CCacheServer */;
-               addToTargets = (
-               );
-               breakpoints = (
-               );
-               breakpointsGroup = A1E70D500A38B5F3007BE3E3 /* XCBreakpointsBucket */;
-               codeSenseManager = A1E70CFE0A38B536007BE3E3 /* Code sense */;
-               executables = (
-                       A1E70D5E0A38B796007BE3E3 /* CCacheServer */,
-               );
-               perUserDictionary = {
-                       PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
-                               PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
-                               PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
-                               PBXFileTableDataSourceColumnWidthsKey = (
-                                       20,
-                                       811,
-                                       20,
-                                       48,
-                                       43,
-                                       43,
-                                       20,
-                               );
-                               PBXFileTableDataSourceColumnsKey = (
-                                       PBXFileDataSource_FiletypeID,
-                                       PBXFileDataSource_Filename_ColumnID,
-                                       PBXFileDataSource_Built_ColumnID,
-                                       PBXFileDataSource_ObjectSize_ColumnID,
-                                       PBXFileDataSource_Errors_ColumnID,
-                                       PBXFileDataSource_Warnings_ColumnID,
-                                       PBXFileDataSource_Target_ColumnID,
-                               );
-                       };
-                       PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
-                               PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
-                               PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
-                               PBXFileTableDataSourceColumnWidthsKey = (
-                                       20,
-                                       200,
-                                       608,
-                                       20,
-                                       48,
-                                       43,
-                                       43,
-                               );
-                               PBXFileTableDataSourceColumnsKey = (
-                                       PBXFileDataSource_FiletypeID,
-                                       PBXFileDataSource_Filename_ColumnID,
-                                       PBXTargetDataSource_PrimaryAttribute,
-                                       PBXFileDataSource_Built_ColumnID,
-                                       PBXFileDataSource_ObjectSize_ColumnID,
-                                       PBXFileDataSource_Errors_ColumnID,
-                                       PBXFileDataSource_Warnings_ColumnID,
-                               );
-                       };
-                       PBXPerProjectTemplateStateSaveDate = 171582174;
-                       PBXWorkspaceStateSaveDate = 171582174;
-               };
-               perUserProjectItems = {
-                       A1E70DF70A38C765007BE3E3 /* PBXTextBookmark */ = A1E70DF70A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70DF80A38C765007BE3E3 /* PBXTextBookmark */ = A1E70DF80A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70DF90A38C765007BE3E3 /* PBXTextBookmark */ = A1E70DF90A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70DFA0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70DFA0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70DFB0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70DFB0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70DFD0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70DFD0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E010A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E010A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E020A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E020A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E060A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E060A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E090A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E090A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E0A0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E0A0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E0B0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E0B0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E0C0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E0C0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E100A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E100A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E110A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E110A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E120A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E120A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E130A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E130A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E140A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E140A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E150A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E150A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E160A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E160A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E170A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E170A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E180A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E180A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E1B0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E1B0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E1E0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E1E0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E1F0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E1F0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E200A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E200A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E250A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E250A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E260A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E260A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E290A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E290A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E2A0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E2A0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E2B0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E2B0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E2D0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E2D0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E2E0A38C765007BE3E3 /* PBXTextBookmark */ = A1E70E2E0A38C765007BE3E3 /* PBXTextBookmark */;
-                       A1E70E380A38C778007BE3E3 /* PBXTextBookmark */ = A1E70E380A38C778007BE3E3 /* PBXTextBookmark */;
-                       A1E70E3D0A38C78C007BE3E3 /* PBXTextBookmark */ = A1E70E3D0A38C78C007BE3E3 /* PBXTextBookmark */;
-                       A1E70E410A38C78C007BE3E3 /* PBXTextBookmark */ = A1E70E410A38C78C007BE3E3 /* PBXTextBookmark */;
-                       A1E70E430A38C791007BE3E3 /* PBXTextBookmark */ = A1E70E430A38C791007BE3E3 /* PBXTextBookmark */;
-                       A1E70E450A38C791007BE3E3 /* PBXTextBookmark */ = A1E70E450A38C791007BE3E3 /* PBXTextBookmark */;
-                       A1E70E4A0A38C7BE007BE3E3 /* PBXTextBookmark */ = A1E70E4A0A38C7BE007BE3E3 /* PBXTextBookmark */;
-                       A1E70E520A38C9FD007BE3E3 /* PBXTextBookmark */ = A1E70E520A38C9FD007BE3E3 /* PBXTextBookmark */;
-                       A1E70E530A38C9FD007BE3E3 /* PBXTextBookmark */ = A1E70E530A38C9FD007BE3E3 /* PBXTextBookmark */;
-                       A1E70E560A38C9FD007BE3E3 /* PBXTextBookmark */ = A1E70E560A38C9FD007BE3E3 /* PBXTextBookmark */;
-                       A1E70E580A38C9FD007BE3E3 /* PBXTextBookmark */ = A1E70E580A38C9FD007BE3E3 /* PBXTextBookmark */;
-                       A1E70E6F0A38CA08007BE3E3 /* PBXTextBookmark */ = A1E70E6F0A38CA08007BE3E3 /* PBXTextBookmark */;
-                       A1E70E770A38CA55007BE3E3 /* PBXTextBookmark */ = A1E70E770A38CA55007BE3E3 /* PBXTextBookmark */;
-                       A1E70E7D0A38CA55007BE3E3 /* PBXTextBookmark */ = A1E70E7D0A38CA55007BE3E3 /* PBXTextBookmark */;
-                       A1E70E9C0A38CAF1007BE3E3 /* PBXTextBookmark */ = A1E70E9C0A38CAF1007BE3E3 /* PBXTextBookmark */;
-                       A1E70EA80A38CB24007BE3E3 /* PBXTextBookmark */ = A1E70EA80A38CB24007BE3E3 /* PBXTextBookmark */;
-                       A1E70EAB0A38CB24007BE3E3 /* PBXTextBookmark */ = A1E70EAB0A38CB24007BE3E3 /* PBXTextBookmark */;
-                       A1E70EB50A38CB4D007BE3E3 /* PBXTextBookmark */ = A1E70EB50A38CB4D007BE3E3 /* PBXTextBookmark */;
-                       A1E70EC30A38CC14007BE3E3 /* PBXTextBookmark */ = A1E70EC30A38CC14007BE3E3 /* PBXTextBookmark */;
-                       A1E70ECB0A38CC4C007BE3E3 /* PBXTextBookmark */ = A1E70ECB0A38CC4C007BE3E3 /* PBXTextBookmark */;
-                       A1E70ED70A38CCB6007BE3E3 /* PBXTextBookmark */ = A1E70ED70A38CCB6007BE3E3 /* PBXTextBookmark */;
-                       A1E70EE20A38CCD6007BE3E3 /* PBXTextBookmark */ = A1E70EE20A38CCD6007BE3E3 /* PBXTextBookmark */;
-                       A1E70EFE0A38CD66007BE3E3 /* PBXTextBookmark */ = A1E70EFE0A38CD66007BE3E3 /* PBXTextBookmark */;
-                       A1E70F0F0A38CE21007BE3E3 /* PBXTextBookmark */ = A1E70F0F0A38CE21007BE3E3 /* PBXTextBookmark */;
-                       A1E70F440A38D252007BE3E3 /* PBXTextBookmark */ = A1E70F440A38D252007BE3E3 /* PBXTextBookmark */;
-                       A1E70F450A38D252007BE3E3 /* PBXTextBookmark */ = A1E70F450A38D252007BE3E3 /* PBXTextBookmark */;
-                       A1E70F8B0A38D3B4007BE3E3 /* PBXTextBookmark */ = A1E70F8B0A38D3B4007BE3E3 /* PBXTextBookmark */;
-                       A1E70F9C0A38D41E007BE3E3 /* PBXTextBookmark */ = A1E70F9C0A38D41E007BE3E3 /* PBXTextBookmark */;
-                       A1E70F9D0A38D41E007BE3E3 /* PBXTextBookmark */ = A1E70F9D0A38D41E007BE3E3 /* PBXTextBookmark */;
-                       A1E70FC60A38D560007BE3E3 /* PBXTextBookmark */ = A1E70FC60A38D560007BE3E3 /* PBXTextBookmark */;
-                       A1E70FC80A38D560007BE3E3 /* PBXTextBookmark */ = A1E70FC80A38D560007BE3E3 /* PBXTextBookmark */;
-                       A1E70FC90A38D560007BE3E3 /* PBXTextBookmark */ = A1E70FC90A38D560007BE3E3 /* PBXTextBookmark */;
-                       A1E70FCA0A38D560007BE3E3 /* PBXTextBookmark */ = A1E70FCA0A38D560007BE3E3 /* PBXTextBookmark */;
-                       A1E70FCD0A38D560007BE3E3 /* PBXTextBookmark */ = A1E70FCD0A38D560007BE3E3 /* PBXTextBookmark */;
-                       A1E70FD80A38D573007BE3E3 /* PBXTextBookmark */ = A1E70FD80A38D573007BE3E3 /* PBXTextBookmark */;
-                       A1E70FEE0A38D7C0007BE3E3 /* PBXTextBookmark */ = A1E70FEE0A38D7C0007BE3E3 /* PBXTextBookmark */;
-                       A1E70FEF0A38D7C0007BE3E3 /* PBXTextBookmark */ = A1E70FEF0A38D7C0007BE3E3 /* PBXTextBookmark */;
-                       A1E70FF00A38D7C0007BE3E3 /* PBXTextBookmark */ = A1E70FF00A38D7C0007BE3E3 /* PBXTextBookmark */;
-                       A1E70FFA0A38D806007BE3E3 /* PBXTextBookmark */ = A1E70FFA0A38D806007BE3E3 /* PBXTextBookmark */;
-                       A1E70FFC0A38D806007BE3E3 /* PBXTextBookmark */ = A1E70FFC0A38D806007BE3E3 /* PBXTextBookmark */;
-                       A1E70FFF0A38D806007BE3E3 /* PBXTextBookmark */ = A1E70FFF0A38D806007BE3E3 /* PBXTextBookmark */;
-                       A1E710010A38D814007BE3E3 /* PBXTextBookmark */ = A1E710010A38D814007BE3E3 /* PBXTextBookmark */;
-                       A1E7100A0A38D888007BE3E3 /* PBXTextBookmark */ = A1E7100A0A38D888007BE3E3 /* PBXTextBookmark */;
-                       A1E7100C0A38D888007BE3E3 /* PBXTextBookmark */ = A1E7100C0A38D888007BE3E3 /* PBXTextBookmark */;
-                       A1E7100D0A38D888007BE3E3 /* PBXTextBookmark */ = A1E7100D0A38D888007BE3E3 /* PBXTextBookmark */;
-                       A1E710110A38D888007BE3E3 /* PBXTextBookmark */ = A1E710110A38D888007BE3E3 /* PBXTextBookmark */;
-                       A1E710140A38D888007BE3E3 /* PBXTextBookmark */ = A1E710140A38D888007BE3E3 /* PBXTextBookmark */;
-                       A1E7103C0A38DE0B007BE3E3 /* PBXTextBookmark */ = A1E7103C0A38DE0B007BE3E3 /* PBXTextBookmark */;
-                       A1E710400A38DE0B007BE3E3 /* PBXTextBookmark */ = A1E710400A38DE0B007BE3E3 /* PBXTextBookmark */;
-                       A1E710530A39EC0B007BE3E3 /* PBXTextBookmark */ = A1E710530A39EC0B007BE3E3 /* PBXTextBookmark */;
-                       A1E7105A0A39ED89007BE3E3 /* PBXTextBookmark */ = A1E7105A0A39ED89007BE3E3 /* PBXTextBookmark */;
-                       A1E7105D0A39ED89007BE3E3 /* PBXTextBookmark */ = A1E7105D0A39ED89007BE3E3 /* PBXTextBookmark */;
-                       A1E7105E0A39ED89007BE3E3 /* PBXTextBookmark */ = A1E7105E0A39ED89007BE3E3 /* PBXTextBookmark */;
-                       A1E710680A39F102007BE3E3 /* PBXTextBookmark */ = A1E710680A39F102007BE3E3 /* PBXTextBookmark */;
-                       A1E710840A3A1CFB007BE3E3 /* PBXTextBookmark */ = A1E710840A3A1CFB007BE3E3 /* PBXTextBookmark */;
-                       A1E710860A3A1CFB007BE3E3 /* PBXTextBookmark */ = A1E710860A3A1CFB007BE3E3 /* PBXTextBookmark */;
-                       A1E710870A3A1CFB007BE3E3 /* PBXTextBookmark */ = A1E710870A3A1CFB007BE3E3 /* PBXTextBookmark */;
-                       A1E710890A3A1D04007BE3E3 /* PBXTextBookmark */ = A1E710890A3A1D04007BE3E3 /* PBXTextBookmark */;
-                       A1E7108B0A3A1D04007BE3E3 /* PBXTextBookmark */ = A1E7108B0A3A1D04007BE3E3 /* PBXTextBookmark */;
-                       A1E7108D0A3A1D06007BE3E3 /* PBXTextBookmark */ = A1E7108D0A3A1D06007BE3E3 /* PBXTextBookmark */;
-                       A1E710930A3A1D22007BE3E3 /* PBXTextBookmark */ = A1E710930A3A1D22007BE3E3 /* PBXTextBookmark */;
-                       A1E710940A3A1D22007BE3E3 /* PBXTextBookmark */ = A1E710940A3A1D22007BE3E3 /* PBXTextBookmark */;
-                       A1E710950A3A1D22007BE3E3 /* PBXTextBookmark */ = A1E710950A3A1D22007BE3E3 /* PBXTextBookmark */;
-                       A1E710960A3A1D22007BE3E3 /* PBXTextBookmark */ = A1E710960A3A1D22007BE3E3 /* PBXTextBookmark */;
-                       A1E710970A3A1D22007BE3E3 /* PBXTextBookmark */ = A1E710970A3A1D22007BE3E3 /* PBXTextBookmark */;
-                       A1E7109C0A3A1D2B007BE3E3 /* PBXTextBookmark */ = A1E7109C0A3A1D2B007BE3E3 /* PBXTextBookmark */;
-                       A1E7109D0A3A1D2B007BE3E3 /* PBXTextBookmark */ = A1E7109D0A3A1D2B007BE3E3 /* PBXTextBookmark */;
-                       A1E7109F0A3A1DD0007BE3E3 /* PBXTextBookmark */ = A1E7109F0A3A1DD0007BE3E3 /* PBXTextBookmark */;
-                       A1E710A00A3A1DD0007BE3E3 /* PBXTextBookmark */ = A1E710A00A3A1DD0007BE3E3 /* PBXTextBookmark */;
-                       A1E710A50A3A22E1007BE3E3 /* PBXTextBookmark */ = A1E710A50A3A22E1007BE3E3 /* PBXTextBookmark */;
-                       A1E710AB0A3A22F5007BE3E3 /* PBXTextBookmark */ = A1E710AB0A3A22F5007BE3E3 /* PBXTextBookmark */;
-                       A1E710AC0A3A22F5007BE3E3 /* PBXTextBookmark */ = A1E710AC0A3A22F5007BE3E3 /* PBXTextBookmark */;
-                       A1E710AD0A3A22F5007BE3E3 /* PBXTextBookmark */ = A1E710AD0A3A22F5007BE3E3 /* PBXTextBookmark */;
-                       A1E710AF0A3A22FE007BE3E3 /* PBXTextBookmark */ = A1E710AF0A3A22FE007BE3E3 /* PBXTextBookmark */;
-                       A1E710B30A3A22FF007BE3E3 /* PBXTextBookmark */ = A1E710B30A3A22FF007BE3E3 /* PBXTextBookmark */;
-                       A1E710B90A3A23FB007BE3E3 /* PBXTextBookmark */ = A1E710B90A3A23FB007BE3E3 /* PBXTextBookmark */;
-                       A1E710BC0A3A2415007BE3E3 /* PBXTextBookmark */ = A1E710BC0A3A2415007BE3E3 /* PBXTextBookmark */;
-                       A1E710BD0A3A2415007BE3E3 /* PBXTextBookmark */ = A1E710BD0A3A2415007BE3E3 /* PBXTextBookmark */;
-                       A1E710BE0A3A2415007BE3E3 /* PBXTextBookmark */ = A1E710BE0A3A2415007BE3E3 /* PBXTextBookmark */;
-                       A1E710BF0A3A2415007BE3E3 /* PBXTextBookmark */ = A1E710BF0A3A2415007BE3E3 /* PBXTextBookmark */;
-                       A1E710C00A3A2415007BE3E3 /* PBXTextBookmark */ = A1E710C00A3A2415007BE3E3 /* PBXTextBookmark */;
-                       A1E710C60A3A2441007BE3E3 /* PBXTextBookmark */ = A1E710C60A3A2441007BE3E3 /* PBXTextBookmark */;
-                       A1E710C70A3A2441007BE3E3 /* PBXTextBookmark */ = A1E710C70A3A2441007BE3E3 /* PBXTextBookmark */;
-                       A1E710C80A3A2441007BE3E3 /* PBXTextBookmark */ = A1E710C80A3A2441007BE3E3 /* PBXTextBookmark */;
-                       A1E710C90A3A2441007BE3E3 /* PBXTextBookmark */ = A1E710C90A3A2441007BE3E3 /* PBXTextBookmark */;
-                       A1E710CA0A3A244D007BE3E3 /* PBXTextBookmark */ = A1E710CA0A3A244D007BE3E3 /* PBXTextBookmark */;
-                       A1E710CB0A3A244D007BE3E3 /* PBXTextBookmark */ = A1E710CB0A3A244D007BE3E3 /* PBXTextBookmark */;
-                       A1E710CC0A3A244D007BE3E3 /* PBXTextBookmark */ = A1E710CC0A3A244D007BE3E3 /* PBXTextBookmark */;
-                       A1E710CD0A3A244D007BE3E3 /* PBXTextBookmark */ = A1E710CD0A3A244D007BE3E3 /* PBXTextBookmark */;
-                       A1E710CE0A3A244D007BE3E3 /* PBXTextBookmark */ = A1E710CE0A3A244D007BE3E3 /* PBXTextBookmark */;
-                       A1E710D00A3A2456007BE3E3 /* PBXTextBookmark */ = A1E710D00A3A2456007BE3E3 /* PBXTextBookmark */;
-                       A1E710D10A3A2456007BE3E3 /* PBXTextBookmark */ = A1E710D10A3A2456007BE3E3 /* PBXTextBookmark */;
-                       A1E710D20A3A2456007BE3E3 /* PBXTextBookmark */ = A1E710D20A3A2456007BE3E3 /* PBXTextBookmark */;
-                       A1E710D30A3A2456007BE3E3 /* PBXTextBookmark */ = A1E710D30A3A2456007BE3E3 /* PBXTextBookmark */;
-                       A1E710D40A3A2456007BE3E3 /* PBXTextBookmark */ = A1E710D40A3A2456007BE3E3 /* PBXTextBookmark */;
-                       A1E710D70A3A2465007BE3E3 /* PBXTextBookmark */ = A1E710D70A3A2465007BE3E3 /* PBXTextBookmark */;
-                       A1E710D80A3A2465007BE3E3 /* PBXTextBookmark */ = A1E710D80A3A2465007BE3E3 /* PBXTextBookmark */;
-                       A1E710D90A3A2465007BE3E3 /* PBXTextBookmark */ = A1E710D90A3A2465007BE3E3 /* PBXTextBookmark */;
-                       A1E710DB0A3A246E007BE3E3 /* PBXTextBookmark */ = A1E710DB0A3A246E007BE3E3 /* PBXTextBookmark */;
-                       A1E710DF0A3A247D007BE3E3 /* PBXTextBookmark */ = A1E710DF0A3A247D007BE3E3 /* PBXTextBookmark */;
-                       A1E710E00A3A247D007BE3E3 /* PBXTextBookmark */ = A1E710E00A3A247D007BE3E3 /* PBXTextBookmark */;
-                       A1E710E10A3A247D007BE3E3 /* PBXTextBookmark */ = A1E710E10A3A247D007BE3E3 /* PBXTextBookmark */;
-                       A1E710E20A3A247D007BE3E3 /* PBXTextBookmark */ = A1E710E20A3A247D007BE3E3 /* PBXTextBookmark */;
-                       A1E710E30A3A247D007BE3E3 /* PBXTextBookmark */ = A1E710E30A3A247D007BE3E3 /* PBXTextBookmark */;
-                       A1E710E50A3A248A007BE3E3 /* PBXTextBookmark */ = A1E710E50A3A248A007BE3E3 /* PBXTextBookmark */;
-                       A1E710E60A3A248A007BE3E3 /* PBXTextBookmark */ = A1E710E60A3A248A007BE3E3 /* PBXTextBookmark */;
-                       A1E710E70A3A24A4007BE3E3 /* PBXTextBookmark */ = A1E710E70A3A24A4007BE3E3 /* PBXTextBookmark */;
-                       A1E710E80A3A24A5007BE3E3 /* PBXTextBookmark */ = A1E710E80A3A24A5007BE3E3 /* PBXTextBookmark */;
-                       A1E710E90A3A24A5007BE3E3 /* PBXTextBookmark */ = A1E710E90A3A24A5007BE3E3 /* PBXTextBookmark */;
-                       A1E710EA0A3A2521007BE3E3 /* PBXTextBookmark */ = A1E710EA0A3A2521007BE3E3 /* PBXTextBookmark */;
-                       A1E710EB0A3A2521007BE3E3 /* PBXTextBookmark */ = A1E710EB0A3A2521007BE3E3 /* PBXTextBookmark */;
-                       A1E710EC0A3A2521007BE3E3 /* PBXTextBookmark */ = A1E710EC0A3A2521007BE3E3 /* PBXTextBookmark */;
-                       A1E710ED0A3A2521007BE3E3 /* PBXTextBookmark */ = A1E710ED0A3A2521007BE3E3 /* PBXTextBookmark */;
-                       A1E710EE0A3A2521007BE3E3 /* PBXTextBookmark */ = A1E710EE0A3A2521007BE3E3 /* PBXTextBookmark */;
-                       A1E710EF0A3A2521007BE3E3 /* PBXTextBookmark */ = A1E710EF0A3A2521007BE3E3 /* PBXTextBookmark */;
-                       A1E710F00A3A2521007BE3E3 /* PBXTextBookmark */ = A1E710F00A3A2521007BE3E3 /* PBXTextBookmark */;
-                       A1E710F10A3A2521007BE3E3 /* PBXTextBookmark */ = A1E710F10A3A2521007BE3E3 /* PBXTextBookmark */;
-                       A1E710F40A3A253F007BE3E3 /* PBXTextBookmark */ = A1E710F40A3A253F007BE3E3 /* PBXTextBookmark */;
-                       A1E710F50A3A253F007BE3E3 /* PBXTextBookmark */ = A1E710F50A3A253F007BE3E3 /* PBXTextBookmark */;
-               };
-               sourceControlManager = A1E70CFD0A38B536007BE3E3 /* Source Control */;
-               userBuildSettings = {
-               };
-       };
-       A1E70CFD0A38B536007BE3E3 /* Source Control */ = {
-               isa = PBXSourceControlManager;
-               fallbackIsa = XCSourceControlManager;
-               isSCMEnabled = 0;
-               scmConfiguration = {
-               };
-               scmType = "";
-       };
-       A1E70CFE0A38B536007BE3E3 /* Code sense */ = {
-               isa = PBXCodeSenseManager;
-               indexTemplatePath = "";
-       };
-       A1E70D000A38B5BB007BE3E3 /* cacheapi.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1087, 2100}}";
-                       sepNavSelRange = "{4787, 139}";
-                       sepNavVisRect = "{{0, 1547}, {1087, 448}}";
-               };
-       };
-       A1E70D010A38B5BB007BE3E3 /* ccache.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1003, 18424}}";
-                       sepNavSelRange = "{11919, 0}";
-                       sepNavVisRect = "{{0, 5185}, {1003, 481}}";
-               };
-       };
-       A1E70D020A38B5BB007BE3E3 /* ccache.h */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {980, 2058}}";
-                       sepNavSelRange = "{2339, 9}";
-                       sepNavVisRect = "{{0, 556}, {980, 387}}";
-               };
-       };
-       A1E70D080A38B5BB007BE3E3 /* context.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {980, 13958}}";
-                       sepNavSelRange = "{29891, 21}";
-                       sepNavVisRect = "{{0, 13156}, {980, 387}}";
-               };
-       };
-       A1E70D0B0A38B5BB007BE3E3 /* credentials.h */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {621, 1330}}";
-                       sepNavSelRange = "{0, 2110}";
-                       sepNavVisRect = "{{0, 235}, {621, 499}}";
-               };
-       };
-       A1E70D0C0A38B5BB007BE3E3 /* credentials_iterator.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {980, 3836}}";
-                       sepNavSelRange = "{6723, 21}";
-                       sepNavVisRect = "{{0, 2544}, {980, 387}}";
-               };
-       };
-       A1E70D0F0A38B5BB007BE3E3 /* NTMakefile */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {734, 998}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {734, 998}}";
-                       sepNavWindowFrame = "{{15, 46}, {779, 1127}}";
-               };
-       };
-       A1E70D120A38B5BB007BE3E3 /* generic_lists.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1003, 5572}}";
-                       sepNavSelRange = "{2282, 0}";
-                       sepNavVisRect = "{{0, 489}, {1003, 521}}";
-               };
-       };
-       A1E70D130A38B5BB007BE3E3 /* marshall.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {980, 6188}}";
-                       sepNavSelRange = "{11995, 68}";
-                       sepNavVisRect = "{{0, 4756}, {980, 387}}";
-               };
-       };
-       A1E70D140A38B5BB007BE3E3 /* msg.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1087, 8722}}";
-                       sepNavSelRange = "{15262, 21}";
-                       sepNavVisRect = "{{0, 7868}, {1087, 448}}";
-               };
-       };
-       A1E70D150A38B5BB007BE3E3 /* NTMakefile */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {621, 499}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {621, 499}}";
-               };
-       };
-       A1E70D190A38B5BB007BE3E3 /* cc_rpc.h */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {888, 742}}";
-                       sepNavSelRange = "{2202, 18}";
-                       sepNavVisRect = "{{0, 453}, {888, 289}}";
-               };
-       };
-       A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1003, 8302}}";
-                       sepNavSelRange = "{2631, 0}";
-                       sepNavVisRect = "{{0, 958}, {1003, 521}}";
-               };
-       };
-       A1E70D1B0A38B5BB007BE3E3 /* CredentialsCache2.h */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1003, 4340}}";
-                       sepNavSelRange = "{7813, 0}";
-                       sepNavVisRect = "{{0, 422}, {1003, 521}}";
-               };
-       };
-       A1E70D1C0A38B5BB007BE3E3 /* datastore.h */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {888, 2562}}";
-                       sepNavSelRange = "{2301, 0}";
-                       sepNavVisRect = "{{0, 573}, {888, 436}}";
-               };
-       };
-       A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1003, 1442}}";
-                       sepNavSelRange = "{2369, 0}";
-                       sepNavVisRect = "{{0, 545}, {1003, 521}}";
-               };
-       };
-       A1E70D1F0A38B5BB007BE3E3 /* msg.h */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1003, 2268}}";
-                       sepNavSelRange = "{5529, 0}";
-                       sepNavVisRect = "{{0, 1721}, {1003, 521}}";
-               };
-       };
-       A1E70D260A38B5BB007BE3E3 /* NTMakefile */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {621, 499}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {621, 499}}";
-               };
-       };
-       A1E70D280A38B5BB007BE3E3 /* ccs_ccache.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1003, 9856}}";
-                       sepNavSelRange = "{9783, 0}";
-                       sepNavVisRect = "{{0, 3674}, {1003, 730}}";
-               };
-       };
-       A1E70D2C0A38B5BB007BE3E3 /* main.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {621, 910}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 134}, {621, 727}}";
-               };
-       };
-       A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1087, 22204}}";
-                       sepNavSelRange = "{36879, 21}";
-                       sepNavVisRect = "{{0, 14168}, {1087, 448}}";
-               };
-       };
-       A1E70D3B0A38B5BB007BE3E3 /* client.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {804, 1988}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {804, 503}}";
-               };
-       };
-       A1E70D460A38B5BC007BE3E3 /* server.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {621, 9520}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {621, 499}}";
-               };
-       };
-       A1E70D500A38B5F3007BE3E3 /* XCBreakpointsBucket */ = {
-               isa = XCBreakpointsBucket;
-               name = CCAPI;
-               objects = (
-               );
-       };
-       A1E70D5C0A38B796007BE3E3 /* CCacheServer */ = {
-               activeExec = 0;
-               executables = (
-                       A1E70D5E0A38B796007BE3E3 /* CCacheServer */,
-               );
-       };
-       A1E70D5E0A38B796007BE3E3 /* CCacheServer */ = {
-               isa = PBXExecutable;
-               activeArgIndex = 2147483647;
-               activeArgIndices = (
-               );
-               argumentStrings = (
-               );
-               autoAttachOnCrash = 1;
-               configStateDict = {
-               };
-               customDataFormattersEnabled = 1;
-               debuggerPlugin = GDBDebugging;
-               disassemblyDisplayState = 0;
-               enableDebugStr = 1;
-               environmentEntries = (
-               );
-               executableSystemSymbolLevel = 0;
-               executableUserSymbolLevel = 0;
-               libgmallocEnabled = 0;
-               name = CCacheServer;
-               sourceDirectories = (
-               );
-       };
-       A1E70D930A38BB67007BE3E3 /* main.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {980, 476}}";
-                       sepNavSelRange = "{316, 42}";
-                       sepNavVisRect = "{{0, 24}, {980, 387}}";
-               };
-       };
-       A1E70D9E0A38BCAD007BE3E3 /* mig.defs */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {804, 826}}";
-                       sepNavSelRange = "{2123, 0}";
-                       sepNavVisRect = "{{0, 400}, {804, 391}}";
-               };
-       };
-       A1E70DB10A38C01E007BE3E3 /* mig_types.h */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {804, 686}}";
-                       sepNavSelRange = "{2188, 0}";
-                       sepNavVisRect = "{{0, 281}, {804, 391}}";
-               };
-       };
-       A1E70DE10A38C6FD007BE3E3 /* kipc_common.h */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {888, 1078}}";
-                       sepNavSelRange = "{1293, 0}";
-                       sepNavVisRect = "{{0, 206}, {888, 470}}";
-               };
-       };
-       A1E70DE40A38C6FD007BE3E3 /* kipc_client.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {804, 1218}}";
-                       sepNavSelRange = "{1240, 34}";
-                       sepNavVisRect = "{{0, 235}, {804, 329}}";
-               };
-       };
-       A1E70DE50A38C6FD007BE3E3 /* kipc_common.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {632, 1316}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {621, 499}}";
-               };
-       };
-       A1E70DE60A38C6FD007BE3E3 /* kipc_server.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {728, 4396}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {621, 499}}";
-               };
-       };
-       A1E70DE70A38C6FD007BE3E3 /* kipc_session.c */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {698, 1988}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {621, 499}}";
-               };
-       };
-       A1E70DE80A38C6FD007BE3E3 /* notify.defs */ = {
-               uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {621, 518}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {621, 499}}";
-               };
-       };
-       A1E70DF70A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D150A38B5BB007BE3E3 /* NTMakefile */;
-               name = "NTMakefile: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 308;
-               vrLoc = 0;
-       };
-       A1E70DF80A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D3B0A38B5BB007BE3E3 /* client.c */;
-               name = "client.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 903;
-               vrLoc = 0;
-       };
-       A1E70DF90A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D3C0A38B5BB007BE3E3 /* dllmain.c */;
-               name = "dllmain.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 298;
-               vrLoc = 0;
-       };
-       A1E70DFA0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D3A0A38B5BB007BE3E3 /* cacheapi.def */;
-               name = "cacheapi.def: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 847;
-               vrLoc = 0;
-       };
-       A1E70DFB0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D460A38B5BC007BE3E3 /* server.c */;
-               name = "server.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 756;
-               vrLoc = 0;
-       };
-       A1E70DFD0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "generic_lists.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1826;
-               vrLoc = 0;
-       };
-       A1E70E010A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D0B0A38B5BB007BE3E3 /* credentials.h */;
-               name = "credentials.h: 1";
-               rLen = 2110;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1604;
-               vrLoc = 749;
-       };
-       A1E70E020A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D2C0A38B5BB007BE3E3 /* main.c */;
-               name = "main.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1306;
-               vrLoc = 202;
-       };
-       A1E70E060A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1B0A38B5BB007BE3E3 /* CredentialsCache2.h */;
-               name = "CredentialsCache2.h: 303";
-               rLen = 0;
-               rLoc = 7813;
-               rType = 0;
-               vrLen = 1128;
-               vrLoc = 6802;
-       };
-       A1E70E090A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE80A38C6FD007BE3E3 /* notify.defs */;
-               name = "notify.defs: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1437;
-               vrLoc = 0;
-       };
-       A1E70E0A0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE60A38C6FD007BE3E3 /* kipc_server.c */;
-               name = "kipc_server.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1538;
-               vrLoc = 0;
-       };
-       A1E70E0B0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE70A38C6FD007BE3E3 /* kipc_session.c */;
-               name = "kipc_session.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1461;
-               vrLoc = 0;
-       };
-       A1E70E0C0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE50A38C6FD007BE3E3 /* kipc_common.c */;
-               name = "kipc_common.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1496;
-               vrLoc = 0;
-       };
-       A1E70E100A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D150A38B5BB007BE3E3 /* NTMakefile */;
-               name = "NTMakefile: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 308;
-               vrLoc = 0;
-       };
-       A1E70E110A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "generic_lists.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1826;
-               vrLoc = 0;
-       };
-       A1E70E120A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D3B0A38B5BB007BE3E3 /* client.c */;
-               name = "client.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 903;
-               vrLoc = 0;
-       };
-       A1E70E130A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D3C0A38B5BB007BE3E3 /* dllmain.c */;
-               name = "dllmain.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 298;
-               vrLoc = 0;
-       };
-       A1E70E140A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D3A0A38B5BB007BE3E3 /* cacheapi.def */;
-               name = "cacheapi.def: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 847;
-               vrLoc = 0;
-       };
-       A1E70E150A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D460A38B5BC007BE3E3 /* server.c */;
-               name = "server.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 756;
-               vrLoc = 0;
-       };
-       A1E70E160A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D2C0A38B5BB007BE3E3 /* main.c */;
-               name = "main.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 954;
-               vrLoc = 0;
-       };
-       A1E70E170A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */;
-               name = "serv_ops.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1825;
-               vrLoc = 0;
-       };
-       A1E70E180A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D280A38B5BB007BE3E3 /* ccs_ccache.c */;
-               name = "ccs_ccache.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1861;
-               vrLoc = 0;
-       };
-       A1E70E1B0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D930A38BB67007BE3E3 /* main.c */;
-               name = "main.c: 22";
-               rLen = 0;
-               rLoc = 509;
-               rType = 0;
-               vrLen = 954;
-               vrLoc = 0;
-       };
-       A1E70E1E0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D0B0A38B5BB007BE3E3 /* credentials.h */;
-               name = "credentials.h: 1";
-               rLen = 2110;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1604;
-               vrLoc = 749;
-       };
-       A1E70E1F0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D130A38B5BB007BE3E3 /* marshall.c */;
-               name = cci_creds_v5_marshall;
-               rLen = 21;
-               rLoc = 6670;
-               rType = 0;
-               vrLen = 1513;
-               vrLoc = 6116;
-       };
-       A1E70E200A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = cci_msg_flatten;
-               rLen = 15;
-               rLoc = 7396;
-               rType = 0;
-               vrLen = 1003;
-               vrLoc = 7034;
-       };
-       A1E70E250A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 583";
-               rLen = 0;
-               rLoc = 20525;
-               rType = 0;
-               vrLen = 2454;
-               vrLoc = 18163;
-       };
-       A1E70E260A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D9E0A38BCAD007BE3E3 /* mig.defs */;
-               name = "ccapi_ipc.defs: 55";
-               rLen = 0;
-               rLoc = 2520;
-               rType = 0;
-               vrLen = 1955;
-               vrLoc = 87;
-       };
-       A1E70E290A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE40A38C6FD007BE3E3 /* kipc_client.c */;
-               name = "kipc_client.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1544;
-               vrLoc = 0;
-       };
-       A1E70E2A0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE50A38C6FD007BE3E3 /* kipc_common.c */;
-               name = "kipc_common.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1496;
-               vrLoc = 0;
-       };
-       A1E70E2B0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE80A38C6FD007BE3E3 /* notify.defs */;
-               name = "notify.defs: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1437;
-               vrLoc = 0;
-       };
-       A1E70E2D0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE60A38C6FD007BE3E3 /* kipc_server.c */;
-               name = "kipc_server.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1538;
-               vrLoc = 0;
-       };
-       A1E70E2E0A38C765007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE70A38C6FD007BE3E3 /* kipc_session.c */;
-               name = "kipc_session.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1461;
-               vrLoc = 0;
-       };
-       A1E70E380A38C778007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D000A38B5BB007BE3E3 /* cacheapi.c */;
-               name = "#include <CredentialsCache.h>";
-               rLen = 30;
-               rLoc = 2170;
-               rType = 0;
-               vrLen = 696;
-               vrLoc = 1821;
-       };
-       A1E70E3D0A38C78C007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D260A38B5BB007BE3E3 /* NTMakefile */;
-               name = "NTMakefile: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 437;
-               vrLoc = 0;
-       };
-       A1E70E410A38C78C007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D260A38B5BB007BE3E3 /* NTMakefile */;
-               name = "NTMakefile: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 437;
-               vrLoc = 0;
-       };
-       A1E70E430A38C791007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D0F0A38B5BB007BE3E3 /* NTMakefile */;
-               name = "NTMakefile: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 432;
-               vrLoc = 0;
-       };
-       A1E70E450A38C791007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D0F0A38B5BB007BE3E3 /* NTMakefile */;
-               name = "NTMakefile: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 432;
-               vrLoc = 0;
-       };
-       A1E70E4A0A38C7BE007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D0F0A38B5BB007BE3E3 /* NTMakefile */;
-               name = "NTMakefile: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 432;
-               vrLoc = 0;
-       };
-       A1E70E520A38C9FD007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D150A38B5BB007BE3E3 /* NTMakefile */;
-               name = "NTMakefile: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 308;
-               vrLoc = 0;
-       };
-       A1E70E530A38C9FD007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1C0A38B5BB007BE3E3 /* datastore.h */;
-               name = cc_list_type;
-               rLen = 0;
-               rLoc = 2301;
-               rType = 0;
-               vrLen = 425;
-               vrLoc = 2113;
-       };
-       A1E70E560A38C9FD007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */;
-               name = cc_list_type;
-               rLen = 12;
-               rLoc = 2736;
-               rType = 0;
-               vrLen = 728;
-               vrLoc = 2219;
-       };
-       A1E70E580A38C9FD007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1C0A38B5BB007BE3E3 /* datastore.h */;
-               name = cc_list_type;
-               rLen = 0;
-               rLoc = 2301;
-               rType = 0;
-               vrLen = 425;
-               vrLoc = 2113;
-       };
-       A1E70E6F0A38CA08007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1F0A38B5BB007BE3E3 /* msg.h */;
-               name = "#include \"generic_lists.h\"";
-               rLen = 27;
-               rLoc = 2765;
-               rType = 0;
-               vrLen = 755;
-               vrLoc = 2478;
-       };
-       A1E70E770A38CA55007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D190A38B5BB007BE3E3 /* cc_rpc.h */;
-               name = "#include \"msg.h\"";
-               rLen = 18;
-               rLoc = 2202;
-               rType = 0;
-               vrLen = 644;
-               vrLoc = 1674;
-       };
-       A1E70E7D0A38CA55007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D190A38B5BB007BE3E3 /* cc_rpc.h */;
-               name = "#include \"msg.h\"";
-               rLen = 18;
-               rLoc = 2202;
-               rType = 0;
-               vrLen = 644;
-               vrLoc = 1674;
-       };
-       A1E70E9C0A38CAF1007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "generic_lists.c: 56";
-               rLen = 0;
-               rLoc = 2280;
-               rType = 0;
-               vrLen = 463;
-               vrLoc = 2119;
-       };
-       A1E70EA80A38CB24007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */;
-               name = "generic_lists.h: cc_generic_list_node_t";
-               rLen = 0;
-               rLoc = 2452;
-               rType = 0;
-               vrLen = 598;
-               vrLoc = 2206;
-       };
-       A1E70EAB0A38CB24007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D080A38B5BB007BE3E3 /* context.c */;
-               name = "code = cci_msg_add_data_blob(request, (void *)name, strlen(name) + 1, &blob_pos);";
-               rLen = 86;
-               rLoc = 14073;
-               rType = 0;
-               vrLen = 704;
-               vrLoc = 13925;
-       };
-       A1E70EB50A38CB4D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D000A38B5BB007BE3E3 /* cacheapi.c */;
-               name = "strncpy(vendor, string, sizeof(vendor)-1);";
-               rLen = 55;
-               rLoc = 4926;
-               rType = 0;
-               vrLen = 780;
-               vrLoc = 1821;
-       };
-       A1E70EC30A38CC14007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D010A38B5BB007BE3E3 /* ccache.c */;
-               name = "ccache.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 1115;
-               vrLoc = 0;
-       };
-       A1E70ECB0A38CC4C007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE40A38C6FD007BE3E3 /* kipc_client.c */;
-               name = "#include <Kerberos/kipc_client.h>";
-               rLen = 34;
-               rLoc = 1240;
-               rType = 0;
-               vrLen = 891;
-               vrLoc = 724;
-       };
-       A1E70ED70A38CCB6007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE40A38C6FD007BE3E3 /* kipc_client.c */;
-               name = "#include <Kerberos/kipc_client.h>";
-               rLen = 34;
-               rLoc = 1240;
-               rType = 0;
-               vrLen = 1069;
-               vrLoc = 582;
-       };
-       A1E70EE20A38CCD6007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DB10A38C01E007BE3E3 /* mig_types.h */;
-               name = "ccapi_ipc.h: 39";
-               rLen = 0;
-               rLoc = 1957;
-               rType = 0;
-               vrLen = 892;
-               vrLoc = 1209;
-       };
-       A1E70EFE0A38CD66007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE10A38C6FD007BE3E3 /* kipc_common.h */;
-               name = "#include <Kerberos/KerberosDebug.h>";
-               rLen = 36;
-               rLoc = 1293;
-               rType = 0;
-               vrLen = 609;
-               vrLoc = 1011;
-       };
-       A1E70F0F0A38CE21007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D3B0A38B5BB007BE3E3 /* client.c */;
-               name = "client.c: 1";
-               rLen = 0;
-               rLoc = 0;
-               rType = 0;
-               vrLen = 903;
-               vrLoc = 0;
-       };
-       A1E70F440A38D252007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DB10A38C01E007BE3E3 /* mig_types.h */;
-               name = "msg_ipc.h: 48";
-               rLen = 0;
-               rLoc = 2188;
-               rType = 0;
-               vrLen = 793;
-               vrLoc = 1409;
-       };
-       A1E70F450A38D252007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DE10A38C6FD007BE3E3 /* kipc_common.h */;
-               name = "kipc_common.h: 32";
-               rLen = 0;
-               rLoc = 1293;
-               rType = 0;
-               vrLen = 1252;
-               vrLoc = 450;
-       };
-       A1E70F8B0A38D3B4007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D9E0A38BCAD007BE3E3 /* mig.defs */;
-               name = "msg_ipc.defs: 43";
-               rLen = 0;
-               rLoc = 2111;
-               rType = 0;
-               vrLen = 1149;
-               vrLoc = 1378;
-       };
-       A1E70F9C0A38D41E007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70DB10A38C01E007BE3E3 /* mig_types.h */;
-               name = "mig_types.h: 48";
-               rLen = 0;
-               rLoc = 2188;
-               rType = 0;
-               vrLen = 1178;
-               vrLoc = 1024;
-       };
-       A1E70F9D0A38D41E007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D9E0A38BCAD007BE3E3 /* mig.defs */;
-               name = "mig.defs: 44";
-               rLen = 0;
-               rLoc = 2123;
-               rType = 0;
-               vrLen = 1034;
-               vrLoc = 1439;
-       };
-       A1E70FC60A38D560007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70FC70A38D560007BE3E3 /* migServer.h */;
-               name = ccapi_server;
-               rLen = 12;
-               rLoc = 1268;
-               rType = 0;
-               vrLen = 879;
-               vrLoc = 942;
-       };
-       A1E70FC70A38D560007BE3E3 /* migServer.h */ = {
-               isa = PBXFileReference;
-               name = migServer.h;
-               path = "/Volumes/Ra-Tilt/Users/lxs/Builds/CCAPI.build/Debug/CCacheServer.build/DerivedSources/migServer.h";
-               sourceTree = "<absolute>";
-       };
-       A1E70FC80A38D560007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D930A38BB67007BE3E3 /* main.c */;
-               name = "main.c: 23";
-               rLen = 0;
-               rLoc = 495;
-               rType = 0;
-               vrLen = 691;
-               vrLoc = 0;
-       };
-       A1E70FC90A38D560007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1C0A38B5BB007BE3E3 /* datastore.h */;
-               name = "datastore.h: 55";
-               rLen = 0;
-               rLoc = 2301;
-               rType = 0;
-               vrLen = 805;
-               vrLoc = 2101;
-       };
-       A1E70FCA0A38D560007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */;
-               name = "generic_lists.h: 52";
-               rLen = 0;
-               rLoc = 2371;
-               rType = 0;
-               vrLen = 757;
-               vrLoc = 2012;
-       };
-       A1E70FCD0A38D560007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D930A38BB67007BE3E3 /* main.c */;
-               name = "main.c: 23";
-               rLen = 0;
-               rLoc = 495;
-               rType = 0;
-               vrLen = 691;
-               vrLoc = 0;
-       };
-       A1E70FD80A38D573007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D930A38BB67007BE3E3 /* main.c */;
-               name = "syslog (LOG_INFO, \"Starting up.\");";
-               rLen = 42;
-               rLoc = 316;
-               rType = 0;
-               vrLen = 628;
-               vrLoc = 21;
-       };
-       A1E70FEE0A38D7C0007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D130A38B5BB007BE3E3 /* marshall.c */;
-               name = "marshall.c: 48";
-               rLen = 0;
-               rLoc = 2234;
-               rType = 0;
-               vrLen = 831;
-               vrLoc = 1674;
-       };
-       A1E70FEF0A38D7C0007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D010A38B5BB007BE3E3 /* ccache.c */;
-               name = "ccache.c: 49";
-               rLen = 0;
-               rLoc = 2186;
-               rType = 0;
-               vrLen = 432;
-               vrLoc = 2106;
-       };
-       A1E70FF00A38D7C0007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D080A38B5BB007BE3E3 /* context.c */;
-               name = "code = cci_msg_retrieve_blob(response, ntohl(response_header->vendor_offset), ntohl(response_header->vendor_length), &string);";
-               rLen = 139;
-               rLoc = 29872;
-               rType = 0;
-               vrLen = 757;
-               vrLoc = 27442;
-       };
-       A1E70FFA0A38D806007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D130A38B5BB007BE3E3 /* marshall.c */;
-               name = "memcpy(creds->client, flat + header->client.data, length);";
-               rLen = 68;
-               rLoc = 11995;
-               rType = 0;
-               vrLen = 1038;
-               vrLoc = 11543;
-       };
-       A1E70FFC0A38D806007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D020A38B5BB007BE3E3 /* ccache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 2339;
-               rType = 0;
-               vrLen = 663;
-               vrLoc = 2042;
-       };
-       A1E70FFF0A38D806007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D020A38B5BB007BE3E3 /* ccache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 2339;
-               rType = 0;
-               vrLen = 663;
-               vrLoc = 2042;
-       };
-       A1E710010A38D814007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 5095;
-               rType = 0;
-               vrLen = 617;
-               vrLoc = 4722;
-       };
-       A1E7100A0A38D888007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 5095;
-               rType = 0;
-               vrLen = 619;
-               vrLoc = 4720;
-       };
-       A1E7100C0A38D888007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D080A38B5BB007BE3E3 /* context.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 29891;
-               rType = 0;
-               vrLen = 1038;
-               vrLoc = 29282;
-       };
-       A1E7100D0A38D888007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D0C0A38B5BB007BE3E3 /* credentials_iterator.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 6723;
-               rType = 0;
-               vrLen = 1080;
-               vrLoc = 6223;
-       };
-       A1E710110A38D888007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 22827;
-               rType = 0;
-               vrLen = 921;
-               vrLoc = 22183;
-       };
-       A1E710140A38D888007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D0C0A38B5BB007BE3E3 /* credentials_iterator.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 6723;
-               rType = 0;
-               vrLen = 1080;
-               vrLoc = 6223;
-       };
-       A1E7103C0A38DE0B007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1F0A38B5BB007BE3E3 /* msg.h */;
-               name = "msg.h: 142";
-               rLen = 0;
-               rLoc = 5529;
-               rType = 0;
-               vrLen = 1239;
-               vrLoc = 4630;
-       };
-       A1E710400A38DE0B007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "msg.c: cci_msg_retrieve_blob";
-               rLen = 0;
-               rLoc = 15353;
-               rType = 0;
-               vrLen = 962;
-               vrLoc = 14947;
-       };
-       A1E710530A39EC0B007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */;
-               name = "serv_ops.c: 322";
-               rLen = 0;
-               rLoc = 12676;
-               rType = 0;
-               vrLen = 1049;
-               vrLoc = 12199;
-       };
-       A1E7105A0A39ED89007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D000A38B5BB007BE3E3 /* cacheapi.c */;
-               name = "code = cci_msg_retrieve_blob(response, ntohl(response_header->vendor_offset), ntohl(response_header->vendor_length), &string);";
-               rLen = 139;
-               rLoc = 4787;
-               rType = 0;
-               vrLen = 1079;
-               vrLoc = 4176;
-       };
-       A1E7105D0A39ED89007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D000A38B5BB007BE3E3 /* cacheapi.c */;
-               name = "code = cci_msg_retrieve_blob(response, ntohl(response_header->vendor_offset), ntohl(response_header->vendor_length), &string);";
-               rLen = 139;
-               rLoc = 4787;
-               rType = 0;
-               vrLen = 1079;
-               vrLoc = 4176;
-       };
-       A1E7105E0A39ED89007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "cur_pos = msg->flat;";
-               rLen = 25;
-               rLoc = 7704;
-               rType = 0;
-               vrLen = 835;
-               vrLoc = 7353;
-       };
-       A1E710680A39F102007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */;
-               name = "resp_header->ccache = htonll((cc_handle) ccache);";
-               rLen = 54;
-               rLoc = 23249;
-               rType = 0;
-               vrLen = 1200;
-               vrLoc = 22714;
-       };
-       A1E710840A3A1CFB007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D010A38B5BB007BE3E3 /* ccache.c */;
-               name = "ccache.c: 378";
-               rLen = 0;
-               rLoc = 11919;
-               rType = 0;
-               vrLen = 1092;
-               vrLoc = 11685;
-       };
-       A1E710860A3A1CFB007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "msg.c: 585";
-               rLen = 0;
-               rLoc = 15353;
-               rType = 0;
-               vrLen = 1129;
-               vrLoc = 14797;
-       };
-       A1E710870A3A1CFB007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D010A38B5BB007BE3E3 /* ccache.c */;
-               name = "ccache.c: 378";
-               rLen = 0;
-               rLoc = 11919;
-               rType = 0;
-               vrLen = 1092;
-               vrLoc = 11685;
-       };
-       A1E710890A3A1D04007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D280A38B5BB007BE3E3 /* ccs_ccache.c */;
-               name = "ccs_ccache.c: 289";
-               rLen = 0;
-               rLoc = 9783;
-               rType = 0;
-               vrLen = 919;
-               vrLoc = 9327;
-       };
-       A1E7108B0A3A1D04007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D280A38B5BB007BE3E3 /* ccs_ccache.c */;
-               name = "ccs_ccache.c: 289";
-               rLen = 0;
-               rLoc = 9783;
-               rType = 0;
-               vrLen = 919;
-               vrLoc = 9327;
-       };
-       A1E7108D0A3A1D06007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D280A38B5BB007BE3E3 /* ccs_ccache.c */;
-               name = "ccs_ccache.c: 289";
-               rLen = 0;
-               rLoc = 9783;
-               rType = 0;
-               vrLen = 1441;
-               vrLoc = 9196;
-       };
-       A1E710930A3A1D22007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 36879;
-               rType = 0;
-               vrLen = 1393;
-               vrLoc = 35980;
-       };
-       A1E710940A3A1D22007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1F0A38B5BB007BE3E3 /* msg.h */;
-               name = "msg.h: 142";
-               rLen = 0;
-               rLoc = 5529;
-               rType = 0;
-               vrLen = 1480;
-               vrLoc = 4457;
-       };
-       A1E710950A3A1D22007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               rLen = 21;
-               rLoc = 14700;
-               rType = 0;
-       };
-       A1E710960A3A1D22007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 36879;
-               rType = 0;
-               vrLen = 1393;
-               vrLoc = 35980;
-       };
-       A1E710970A3A1D22007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1F0A38B5BB007BE3E3 /* msg.h */;
-               name = "msg.h: 142";
-               rLen = 0;
-               rLoc = 5529;
-               rType = 0;
-               vrLen = 1480;
-               vrLoc = 4457;
-       };
-       A1E7109C0A3A1D2B007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 36879;
-               rType = 0;
-               vrLen = 1196;
-               vrLoc = 36344;
-       };
-       A1E7109D0A3A1D2B007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               comments = "error: conflicting types for 'cci_msg_retrieve_blob'";
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               rLen = 1;
-               rLoc = 570;
-               rType = 1;
-       };
-       A1E7109F0A3A1DD0007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "msg.c: 1248";
-               rLen = 0;
-               rLoc = 16800;
-               rType = 0;
-               vrLen = 1576;
-               vrLoc = 14015;
-       };
-       A1E710A00A3A1DD0007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "msg.c: 1248";
-               rLen = 0;
-               rLoc = 16800;
-               rType = 0;
-               vrLen = 1582;
-               vrLoc = 0;
-       };
-       A1E710A50A3A22E1007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "msg.c: 623";
-               rLen = 0;
-               rLoc = 16800;
-               rType = 0;
-               vrLen = 1674;
-               vrLoc = 0;
-       };
-       A1E710AB0A3A22F5007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "msg.c: 623";
-               rLen = 0;
-               rLoc = 16800;
-               rType = 0;
-               vrLen = 2012;
-               vrLoc = 0;
-       };
-       A1E710AC0A3A22F5007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "msg.c: cci_msg_retrieve_blob";
-               rLen = 0;
-               rLoc = 15346;
-               rType = 0;
-               vrLen = 1284;
-               vrLoc = 15187;
-       };
-       A1E710AD0A3A22F5007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "msg.c: cci_msg_retrieve_blob";
-               rLen = 0;
-               rLoc = 15346;
-               rType = 0;
-               vrLen = 1209;
-               vrLoc = 15187;
-       };
-       A1E710AF0A3A22FE007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "msg.c: cci_msg_retrieve_blob";
-               rLen = 0;
-               rLoc = 15346;
-               rType = 0;
-               vrLen = 1589;
-               vrLoc = 14614;
-       };
-       A1E710B30A3A22FF007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = "msg.c: cci_msg_retrieve_blob";
-               rLen = 0;
-               rLoc = 15346;
-               rType = 0;
-               vrLen = 1209;
-               vrLoc = 15187;
-       };
-       A1E710B90A3A23FB007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 15262;
-               rType = 0;
-               vrLen = 1209;
-               vrLoc = 15187;
-       };
-       A1E710BC0A3A2415007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 15262;
-               rType = 0;
-               vrLen = 1356;
-               vrLoc = 15083;
-       };
-       A1E710BD0A3A2415007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "generic_lists.c: 56";
-               rLen = 0;
-               rLoc = 2280;
-               rType = 0;
-               vrLen = 873;
-               vrLoc = 1826;
-       };
-       A1E710BE0A3A2415007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 15262;
-               rType = 0;
-               vrLen = 1356;
-               vrLoc = 15083;
-       };
-       A1E710BF0A3A2415007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "generic_lists.c: 56";
-               rLen = 0;
-               rLoc = 2280;
-               rType = 0;
-               vrLen = 863;
-               vrLoc = 1826;
-       };
-       A1E710C00A3A2415007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 15262;
-               rType = 0;
-               vrLen = 1209;
-               vrLoc = 15187;
-       };
-       A1E710C60A3A2441007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "generic_lists.c: 56";
-               rLen = 0;
-               rLoc = 2280;
-               rType = 0;
-               vrLen = 863;
-               vrLoc = 1826;
-       };
-       A1E710C70A3A2441007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */;
-               name = "generic_lists.h: 54";
-               rLen = 0;
-               rLoc = 2452;
-               rType = 0;
-               vrLen = 1215;
-               vrLoc = 1674;
-       };
-       A1E710C80A3A2441007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "generic_lists.c: 56";
-               rLen = 0;
-               rLoc = 2280;
-               rType = 0;
-               vrLen = 863;
-               vrLoc = 1826;
-       };
-       A1E710C90A3A2441007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */;
-               name = "generic_lists.h: 58";
-               rLen = 0;
-               rLoc = 2369;
-               rType = 0;
-               vrLen = 939;
-               vrLoc = 1935;
-       };
-       A1E710CA0A3A244D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D140A38B5BB007BE3E3 /* msg.c */;
-               name = cci_msg_retrieve_blob;
-               rLen = 21;
-               rLoc = 15262;
-               rType = 0;
-               vrLen = 1209;
-               vrLoc = 15187;
-       };
-       A1E710CB0A3A244D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */;
-               name = "generic_lists.h: 58";
-               rLen = 0;
-               rLoc = 2369;
-               rType = 0;
-               vrLen = 696;
-               vrLoc = 2147;
-       };
-       A1E710CC0A3A244D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               comments = "error: CredentialsCache.h: No such file or directory";
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               rLen = 1;
-               rLoc = 53;
-               rType = 1;
-       };
-       A1E710CD0A3A244D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */;
-               name = "generic_lists.h: 58";
-               rLen = 0;
-               rLoc = 2369;
-               rType = 0;
-               vrLen = 696;
-               vrLoc = 2147;
-       };
-       A1E710CE0A3A244D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "#include \"CredentialsCache.h\"";
-               rLen = 31;
-               rLoc = 2221;
-               rType = 0;
-               vrLen = 608;
-               vrLoc = 2043;
-       };
-       A1E710D00A3A2456007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */;
-               name = "generic_lists.h: 58";
-               rLen = 0;
-               rLoc = 2369;
-               rType = 0;
-               vrLen = 906;
-               vrLoc = 2012;
-       };
-       A1E710D10A3A2456007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "#include \"CredentialsCache.h\"";
-               rLen = 31;
-               rLoc = 2221;
-               rType = 0;
-               vrLen = 861;
-               vrLoc = 1792;
-       };
-       A1E710D20A3A2456007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 5095;
-               rType = 0;
-               vrLen = 822;
-               vrLoc = 4694;
-       };
-       A1E710D30A3A2456007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "#include \"CredentialsCache.h\"";
-               rLen = 31;
-               rLoc = 2221;
-               rType = 0;
-               vrLen = 861;
-               vrLoc = 1792;
-       };
-       A1E710D40A3A2456007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 5095;
-               rType = 0;
-               vrLen = 822;
-               vrLoc = 4694;
-       };
-       A1E710D70A3A2465007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 5095;
-               rType = 0;
-               vrLen = 802;
-               vrLoc = 4694;
-       };
-       A1E710D80A3A2465007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "#include \"CredentialsCache.h\"";
-               rLen = 31;
-               rLoc = 2221;
-               rType = 0;
-               vrLen = 683;
-               vrLoc = 1899;
-       };
-       A1E710D90A3A2465007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 5095;
-               rType = 0;
-               vrLen = 726;
-               vrLoc = 4701;
-       };
-       A1E710DB0A3A246E007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 5095;
-               rType = 0;
-               vrLen = 726;
-               vrLoc = 4701;
-       };
-       A1E710DF0A3A247D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1B0A38B5BB007BE3E3 /* CredentialsCache2.h */;
-               name = "CredentialsCache2.h: 303";
-               rLen = 0;
-               rLoc = 7813;
-               rType = 0;
-               vrLen = 786;
-               vrLoc = 7144;
-       };
-       A1E710E00A3A247D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 5095;
-               rType = 0;
-               vrLen = 802;
-               vrLoc = 4694;
-       };
-       A1E710E10A3A247D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = cc_handle;
-               rLen = 9;
-               rLoc = 5095;
-               rType = 0;
-               vrLen = 802;
-               vrLoc = 4694;
-       };
-       A1E710E20A3A247D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1B0A38B5BB007BE3E3 /* CredentialsCache2.h */;
-               name = "CredentialsCache2.h: 303";
-               rLen = 0;
-               rLoc = 7813;
-               rType = 0;
-               vrLen = 786;
-               vrLoc = 7144;
-       };
-       A1E710E30A3A247D007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 67";
-               rLen = 0;
-               rLoc = 2631;
-               rType = 0;
-               vrLen = 836;
-               vrLoc = 2610;
-       };
-       A1E710E50A3A248A007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 67";
-               rLen = 0;
-               rLoc = 2631;
-               rType = 0;
-               vrLen = 1007;
-               vrLoc = 2180;
-       };
-       A1E710E60A3A248A007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 67";
-               rLen = 0;
-               rLoc = 2631;
-               rType = 0;
-               vrLen = 750;
-               vrLoc = 2696;
-       };
-       A1E710E70A3A24A4007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 67";
-               rLen = 0;
-               rLoc = 2631;
-               rType = 0;
-               vrLen = 750;
-               vrLoc = 2696;
-       };
-       A1E710E80A3A24A5007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 67";
-               rLen = 0;
-               rLoc = 2631;
-               rType = 0;
-               vrLen = 825;
-               vrLoc = 2639;
-       };
-       A1E710E90A3A24A5007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 67";
-               rLen = 0;
-               rLoc = 2631;
-               rType = 0;
-               vrLen = 750;
-               vrLoc = 2696;
-       };
-       A1E710EA0A3A2521007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 67";
-               rLen = 0;
-               rLoc = 2631;
-               rType = 0;
-               vrLen = 825;
-               vrLoc = 2639;
-       };
-       A1E710EB0A3A2521007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1B0A38B5BB007BE3E3 /* CredentialsCache2.h */;
-               name = "CredentialsCache2.h: 303";
-               rLen = 0;
-               rLoc = 7813;
-               rType = 0;
-               vrLen = 1103;
-               vrLoc = 1564;
-       };
-       A1E710EC0A3A2521007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */;
-               name = "generic_lists.h: 58";
-               rLen = 0;
-               rLoc = 2369;
-               rType = 0;
-               vrLen = 906;
-               vrLoc = 2012;
-       };
-       A1E710ED0A3A2521007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 67";
-               rLen = 0;
-               rLoc = 2631;
-               rType = 0;
-               vrLen = 825;
-               vrLoc = 2639;
-       };
-       A1E710EE0A3A2521007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1B0A38B5BB007BE3E3 /* CredentialsCache2.h */;
-               name = "CredentialsCache2.h: 303";
-               rLen = 0;
-               rLoc = 7813;
-               rType = 0;
-               vrLen = 1103;
-               vrLoc = 1564;
-       };
-       A1E710EF0A3A2521007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */;
-               name = "generic_lists.h: 58";
-               rLen = 0;
-               rLoc = 2369;
-               rType = 0;
-               vrLen = 906;
-               vrLoc = 2012;
-       };
-       A1E710F00A3A2521007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "generic_lists.c: 56";
-               rLen = 0;
-               rLoc = 2280;
-               rType = 0;
-               vrLen = 842;
-               vrLoc = 1792;
-       };
-       A1E710F10A3A2521007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 67";
-               rLen = 0;
-               rLoc = 2631;
-               rType = 0;
-               vrLen = 750;
-               vrLoc = 2696;
-       };
-       A1E710F40A3A253F007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */;
-               name = "generic_lists.c: 57";
-               rLen = 0;
-               rLoc = 2282;
-               rType = 0;
-               vrLen = 861;
-               vrLoc = 1792;
-       };
-       A1E710F50A3A253F007BE3E3 /* PBXTextBookmark */ = {
-               isa = PBXTextBookmark;
-               fRef = A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */;
-               name = "CredentialsCache.h: 67";
-               rLen = 0;
-               rLoc = 2631;
-               rType = 0;
-               vrLen = 750;
-               vrLoc = 2696;
-       };
-       D2AAC045055464E500DB518D /* CCAPI */ = {
-               activeExec = 0;
-       };
-}
diff --git a/src/lib/ccapi/mac/CCAPI.xcodeproj/lxs.perspective b/src/lib/ccapi/mac/CCAPI.xcodeproj/lxs.perspective
deleted file mode 100644 (file)
index 1983707..0000000
+++ /dev/null
@@ -1,1567 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-       <key>ActivePerspectiveName</key>
-       <string>Project</string>
-       <key>AllowedModules</key>
-       <array>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>PBXSmartGroupTreeModule</string>
-                       <key>Name</key>
-                       <string>Groups and Files Outline View</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>PBXNavigatorGroup</string>
-                       <key>Name</key>
-                       <string>Editor</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>XCTaskListModule</string>
-                       <key>Name</key>
-                       <string>Task List</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>XCDetailModule</string>
-                       <key>Name</key>
-                       <string>File and Smart Group Detail Viewer</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>1</string>
-                       <key>Module</key>
-                       <string>PBXBuildResultsModule</string>
-                       <key>Name</key>
-                       <string>Detailed Build Results Viewer</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>1</string>
-                       <key>Module</key>
-                       <string>PBXProjectFindModule</string>
-                       <key>Name</key>
-                       <string>Project Batch Find Tool</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>PBXRunSessionModule</string>
-                       <key>Name</key>
-                       <string>Run Log</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>PBXBookmarksModule</string>
-                       <key>Name</key>
-                       <string>Bookmarks Tool</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>PBXClassBrowserModule</string>
-                       <key>Name</key>
-                       <string>Class Browser</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>PBXCVSModule</string>
-                       <key>Name</key>
-                       <string>Source Code Control Tool</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>PBXDebugBreakpointsModule</string>
-                       <key>Name</key>
-                       <string>Debug Breakpoints Tool</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>XCDockableInspector</string>
-                       <key>Name</key>
-                       <string>Inspector</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>n</string>
-                       <key>Module</key>
-                       <string>PBXOpenQuicklyModule</string>
-                       <key>Name</key>
-                       <string>Open Quickly Tool</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>1</string>
-                       <key>Module</key>
-                       <string>PBXDebugSessionModule</string>
-                       <key>Name</key>
-                       <string>Debugger</string>
-               </dict>
-               <dict>
-                       <key>BundleLoadPath</key>
-                       <string></string>
-                       <key>MaxInstances</key>
-                       <string>1</string>
-                       <key>Module</key>
-                       <string>PBXDebugCLIModule</string>
-                       <key>Name</key>
-                       <string>Debug Console</string>
-               </dict>
-       </array>
-       <key>Description</key>
-       <string>AIODescriptionKey</string>
-       <key>DockingSystemVisible</key>
-       <false/>
-       <key>Extension</key>
-       <string>perspective</string>
-       <key>FavBarConfig</key>
-       <dict>
-               <key>PBXProjectModuleGUID</key>
-               <string>A1E70E750A38CA08007BE3E3</string>
-               <key>XCBarModuleItemNames</key>
-               <dict/>
-               <key>XCBarModuleItems</key>
-               <array/>
-       </dict>
-       <key>FirstTimeWindowDisplayed</key>
-       <false/>
-       <key>Identifier</key>
-       <string>com.apple.perspectives.project.default</string>
-       <key>MajorVersion</key>
-       <integer>33</integer>
-       <key>MinorVersion</key>
-       <integer>0</integer>
-       <key>Name</key>
-       <string>All-In-One</string>
-       <key>Notifications</key>
-       <array>
-               <dict>
-                       <key>XCObserverAutoDisconnectKey</key>
-                       <true/>
-                       <key>XCObserverDefintionKey</key>
-                       <dict/>
-                       <key>XCObserverFactoryKey</key>
-                       <string>XCPerspectivesSpecificationIdentifier</string>
-                       <key>XCObserverGUIDKey</key>
-                       <string>XCObserverProjectIdentifier</string>
-                       <key>XCObserverNotificationKey</key>
-                       <string>PBXStatusBuildStateMessageNotification</string>
-                       <key>XCObserverTargetKey</key>
-                       <string>XCMainBuildResultsModuleGUID</string>
-                       <key>XCObserverTriggerKey</key>
-                       <string>awakenModuleWithObserver:</string>
-                       <key>XCObserverValidationKey</key>
-                       <dict/>
-               </dict>
-       </array>
-       <key>OpenEditors</key>
-       <array/>
-       <key>PerspectiveWidths</key>
-       <array>
-               <integer>1340</integer>
-               <integer>1340</integer>
-               <integer>1340</integer>
-       </array>
-       <key>Perspectives</key>
-       <array>
-               <dict>
-                       <key>ChosenToolbarItems</key>
-                       <array>
-                               <string>XCToolbarPerspectiveControl</string>
-                               <string>NSToolbarSeparatorItem</string>
-                               <string>active-target-popup</string>
-                               <string>action</string>
-                               <string>NSToolbarFlexibleSpaceItem</string>
-                               <string>buildOrClean</string>
-                               <string>build-and-runOrDebug</string>
-                               <string>com.apple.ide.PBXToolbarStopButton</string>
-                               <string>get-info</string>
-                               <string>toggle-editor</string>
-                               <string>NSToolbarFlexibleSpaceItem</string>
-                               <string>com.apple.pbx.toolbar.searchfield</string>
-                       </array>
-                       <key>ControllerClassBaseName</key>
-                       <string></string>
-                       <key>IconName</key>
-                       <string>WindowOfProject</string>
-                       <key>Identifier</key>
-                       <string>perspective.project</string>
-                       <key>IsVertical</key>
-                       <false/>
-                       <key>Layout</key>
-                       <array>
-                               <dict>
-                                       <key>ContentConfiguration</key>
-                                       <dict>
-                                               <key>PBXBottomSmartGroupGIDs</key>
-                                               <array>
-                                                       <string>1C37FBAC04509CD000000102</string>
-                                                       <string>1C37FAAC04509CD000000102</string>
-                                                       <string>1C08E77C0454961000C914BD</string>
-                                                       <string>1C37FABC05509CD000000102</string>
-                                                       <string>1C37FABC05539CD112110102</string>
-                                                       <string>E2644B35053B69B200211256</string>
-                                                       <string>1C37FABC04509CD000100104</string>
-                                                       <string>1CC0EA4004350EF90044410B</string>
-                                                       <string>1CC0EA4004350EF90041110B</string>
-                                                       <string>1C77FABC04509CD000000102</string>
-                                               </array>
-                                               <key>PBXProjectModuleGUID</key>
-                                               <string>1CA23ED40692098700951B8B</string>
-                                               <key>PBXProjectModuleLabel</key>
-                                               <string>Files</string>
-                                               <key>PBXProjectStructureProvided</key>
-                                               <string>yes</string>
-                                               <key>PBXSmartGroupTreeModuleColumnData</key>
-                                               <dict>
-                                                       <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
-                                                       <array>
-                                                               <real>268</real>
-                                                       </array>
-                                                       <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
-                                                       <array>
-                                                               <string>MainColumn</string>
-                                                       </array>
-                                               </dict>
-                                               <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
-                                               <dict>
-                                                       <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
-                                                       <array>
-                                                               <string>08FB7794FE84155DC02AAC07</string>
-                                                               <string>A1E70CFF0A38B5BB007BE3E3</string>
-                                                               <string>A1E70D110A38B5BB007BE3E3</string>
-                                                               <string>A1E70D7E0A38BAC5007BE3E3</string>
-                                                               <string>A1E70D180A38B5BB007BE3E3</string>
-                                                               <string>A1E70D270A38B5BB007BE3E3</string>
-                                                               <string>A1E70D2B0A38B5BB007BE3E3</string>
-                                                               <string>A1E70D390A38B5BB007BE3E3</string>
-                                                               <string>1C37FBAC04509CD000000102</string>
-                                                       </array>
-                                                       <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
-                                                       <array>
-                                                               <array>
-                                                                       <integer>24</integer>
-                                                                       <integer>19</integer>
-                                                                       <integer>0</integer>
-                                                               </array>
-                                                       </array>
-                                                       <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
-                                                       <string>{{0, 0}, {268, 841}}</string>
-                                               </dict>
-                                               <key>PBXTopSmartGroupGIDs</key>
-                                               <array/>
-                                               <key>XCIncludePerspectivesSwitch</key>
-                                               <false/>
-                                       </dict>
-                                       <key>GeometryConfiguration</key>
-                                       <dict>
-                                               <key>Frame</key>
-                                               <string>{{0, 0}, {285, 859}}</string>
-                                               <key>GroupTreeTableConfiguration</key>
-                                               <array>
-                                                       <string>MainColumn</string>
-                                                       <real>268</real>
-                                               </array>
-                                               <key>RubberWindowFrame</key>
-                                               <string>170 278 1340 900 0 0 1920 1178 </string>
-                                       </dict>
-                                       <key>Module</key>
-                                       <string>PBXSmartGroupTreeModule</string>
-                                       <key>Proportion</key>
-                                       <string>285pt</string>
-                               </dict>
-                               <dict>
-                                       <key>Dock</key>
-                                       <array>
-                                               <dict>
-                                                       <key>BecomeActive</key>
-                                                       <true/>
-                                                       <key>ContentConfiguration</key>
-                                                       <dict>
-                                                               <key>PBXProjectModuleGUID</key>
-                                                               <string>A1E70DF50A38C765007BE3E3</string>
-                                                               <key>PBXProjectModuleLabel</key>
-                                                               <string>generic_lists.c</string>
-                                                               <key>PBXSplitModuleInNavigatorKey</key>
-                                                               <dict>
-                                                                       <key>Split0</key>
-                                                                       <dict>
-                                                                               <key>PBXProjectModuleGUID</key>
-                                                                               <string>A1E70DF60A38C765007BE3E3</string>
-                                                                               <key>PBXProjectModuleLabel</key>
-                                                                               <string>generic_lists.c</string>
-                                                                               <key>_historyCapacity</key>
-                                                                               <integer>0</integer>
-                                                                               <key>bookmark</key>
-                                                                               <string>A1E710F40A3A253F007BE3E3</string>
-                                                                               <key>history</key>
-                                                                               <array>
-                                                                                       <string>A1E70DF90A38C765007BE3E3</string>
-                                                                                       <string>A1E70DFA0A38C765007BE3E3</string>
-                                                                                       <string>A1E70DFB0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E010A38C765007BE3E3</string>
-                                                                                       <string>A1E70E020A38C765007BE3E3</string>
-                                                                                       <string>A1E70E090A38C765007BE3E3</string>
-                                                                                       <string>A1E70E0A0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E0B0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E0C0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E3D0A38C78C007BE3E3</string>
-                                                                                       <string>A1E70E4A0A38C7BE007BE3E3</string>
-                                                                                       <string>A1E70E520A38C9FD007BE3E3</string>
-                                                                                       <string>A1E70E530A38C9FD007BE3E3</string>
-                                                                                       <string>A1E70E770A38CA55007BE3E3</string>
-                                                                                       <string>A1E70EB50A38CB4D007BE3E3</string>
-                                                                                       <string>A1E70ED70A38CCB6007BE3E3</string>
-                                                                                       <string>A1E70EFE0A38CD66007BE3E3</string>
-                                                                                       <string>A1E70F0F0A38CE21007BE3E3</string>
-                                                                                       <string>A1E70F9C0A38D41E007BE3E3</string>
-                                                                                       <string>A1E70F9D0A38D41E007BE3E3</string>
-                                                                                       <string>A1E70FC60A38D560007BE3E3</string>
-                                                                                       <string>A1E70FD80A38D573007BE3E3</string>
-                                                                                       <string>A1E70FFA0A38D806007BE3E3</string>
-                                                                                       <string>A1E70FFC0A38D806007BE3E3</string>
-                                                                                       <string>A1E7100C0A38D888007BE3E3</string>
-                                                                                       <string>A1E7100D0A38D888007BE3E3</string>
-                                                                                       <string>A1E710840A3A1CFB007BE3E3</string>
-                                                                                       <string>A1E7108D0A3A1D06007BE3E3</string>
-                                                                                       <string>A1E710930A3A1D22007BE3E3</string>
-                                                                                       <string>A1E710940A3A1D22007BE3E3</string>
-                                                                                       <string>A1E710BC0A3A2415007BE3E3</string>
-                                                                                       <string>A1E710EA0A3A2521007BE3E3</string>
-                                                                                       <string>A1E710EB0A3A2521007BE3E3</string>
-                                                                                       <string>A1E710EC0A3A2521007BE3E3</string>
-                                                                                       <string>A1E710D10A3A2456007BE3E3</string>
-                                                                               </array>
-                                                                               <key>prevStack</key>
-                                                                               <array>
-                                                                                       <string>A1E70E100A38C765007BE3E3</string>
-                                                                                       <string>A1E70E110A38C765007BE3E3</string>
-                                                                                       <string>A1E70E120A38C765007BE3E3</string>
-                                                                                       <string>A1E70E130A38C765007BE3E3</string>
-                                                                                       <string>A1E70E140A38C765007BE3E3</string>
-                                                                                       <string>A1E70E150A38C765007BE3E3</string>
-                                                                                       <string>A1E70E160A38C765007BE3E3</string>
-                                                                                       <string>A1E70E180A38C765007BE3E3</string>
-                                                                                       <string>A1E70E1B0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E1E0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E1F0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E200A38C765007BE3E3</string>
-                                                                                       <string>A1E70E250A38C765007BE3E3</string>
-                                                                                       <string>A1E70E260A38C765007BE3E3</string>
-                                                                                       <string>A1E70E290A38C765007BE3E3</string>
-                                                                                       <string>A1E70E2A0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E2B0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E2D0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E2E0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E380A38C778007BE3E3</string>
-                                                                                       <string>A1E70E410A38C78C007BE3E3</string>
-                                                                                       <string>A1E70E450A38C791007BE3E3</string>
-                                                                                       <string>A1E70E560A38C9FD007BE3E3</string>
-                                                                                       <string>A1E70E580A38C9FD007BE3E3</string>
-                                                                                       <string>A1E70E6F0A38CA08007BE3E3</string>
-                                                                                       <string>A1E70E7D0A38CA55007BE3E3</string>
-                                                                                       <string>A1E70EAB0A38CB24007BE3E3</string>
-                                                                                       <string>A1E70EC30A38CC14007BE3E3</string>
-                                                                                       <string>A1E70EE20A38CCD6007BE3E3</string>
-                                                                                       <string>A1E70FFF0A38D806007BE3E3</string>
-                                                                                       <string>A1E710110A38D888007BE3E3</string>
-                                                                                       <string>A1E710140A38D888007BE3E3</string>
-                                                                                       <string>A1E710BE0A3A2415007BE3E3</string>
-                                                                                       <string>A1E710C80A3A2441007BE3E3</string>
-                                                                                       <string>A1E710D30A3A2456007BE3E3</string>
-                                                                                       <string>A1E710E10A3A247D007BE3E3</string>
-                                                                                       <string>A1E710E20A3A247D007BE3E3</string>
-                                                                                       <string>A1E710ED0A3A2521007BE3E3</string>
-                                                                                       <string>A1E710EE0A3A2521007BE3E3</string>
-                                                                                       <string>A1E710EF0A3A2521007BE3E3</string>
-                                                                               </array>
-                                                                       </dict>
-                                                                       <key>SplitCount</key>
-                                                                       <string>1</string>
-                                                               </dict>
-                                                               <key>StatusBarVisibility</key>
-                                                               <true/>
-                                                               <key>XCSharingToken</key>
-                                                               <string>com.apple.Xcode.CommonNavigatorGroupSharingToken</string>
-                                                       </dict>
-                                                       <key>GeometryConfiguration</key>
-                                                       <dict>
-                                                               <key>Frame</key>
-                                                               <string>{{0, 0}, {1050, 553}}</string>
-                                                               <key>RubberWindowFrame</key>
-                                                               <string>170 278 1340 900 0 0 1920 1178 </string>
-                                                       </dict>
-                                                       <key>Module</key>
-                                                       <string>PBXNavigatorGroup</string>
-                                                       <key>Proportion</key>
-                                                       <string>553pt</string>
-                                               </dict>
-                                               <dict>
-                                                       <key>Proportion</key>
-                                                       <string>301pt</string>
-                                                       <key>Tabs</key>
-                                                       <array>
-                                                               <dict>
-                                                                       <key>ContentConfiguration</key>
-                                                                       <dict>
-                                                                               <key>PBXProjectModuleGUID</key>
-                                                                               <string>1CA23EDF0692099D00951B8B</string>
-                                                                               <key>PBXProjectModuleLabel</key>
-                                                                               <string>Detail</string>
-                                                                       </dict>
-                                                                       <key>GeometryConfiguration</key>
-                                                                       <dict>
-                                                                               <key>Frame</key>
-                                                                               <string>{{10, 27}, {1050, 274}}</string>
-                                                                               <key>RubberWindowFrame</key>
-                                                                               <string>170 278 1340 900 0 0 1920 1178 </string>
-                                                                       </dict>
-                                                                       <key>Module</key>
-                                                                       <string>XCDetailModule</string>
-                                                               </dict>
-                                                               <dict>
-                                                                       <key>ContentConfiguration</key>
-                                                                       <dict>
-                                                                               <key>PBXProjectModuleGUID</key>
-                                                                               <string>1CA23EE00692099D00951B8B</string>
-                                                                               <key>PBXProjectModuleLabel</key>
-                                                                               <string>Project Find</string>
-                                                                       </dict>
-                                                                       <key>GeometryConfiguration</key>
-                                                                       <dict>
-                                                                               <key>Frame</key>
-                                                                               <string>{{10, 27}, {1050, 274}}</string>
-                                                                       </dict>
-                                                                       <key>Module</key>
-                                                                       <string>PBXProjectFindModule</string>
-                                                               </dict>
-                                                               <dict>
-                                                                       <key>ContentConfiguration</key>
-                                                                       <dict>
-                                                                               <key>PBXProjectModuleGUID</key>
-                                                                               <string>1CA23EE10692099D00951B8B</string>
-                                                                               <key>PBXProjectModuleLabel</key>
-                                                                               <string>SCM Results</string>
-                                                                       </dict>
-                                                                       <key>GeometryConfiguration</key>
-                                                                       <dict>
-                                                                               <key>Frame</key>
-                                                                               <string>{{10, 31}, {603, 297}}</string>
-                                                                       </dict>
-                                                                       <key>Module</key>
-                                                                       <string>PBXCVSModule</string>
-                                                               </dict>
-                                                       </array>
-                                               </dict>
-                                       </array>
-                                       <key>Proportion</key>
-                                       <string>1050pt</string>
-                               </dict>
-                       </array>
-                       <key>Name</key>
-                       <string>Project</string>
-                       <key>ServiceClasses</key>
-                       <array>
-                               <string>XCModuleDock</string>
-                               <string>PBXSmartGroupTreeModule</string>
-                               <string>XCModuleDock</string>
-                               <string>PBXNavigatorGroup</string>
-                               <string>XCDockableTabModule</string>
-                               <string>XCDetailModule</string>
-                               <string>PBXProjectFindModule</string>
-                               <string>PBXCVSModule</string>
-                       </array>
-                       <key>TableOfContents</key>
-                       <array>
-                               <string>A1E710B00A3A22FE007BE3E3</string>
-                               <string>1CA23ED40692098700951B8B</string>
-                               <string>A1E710B10A3A22FE007BE3E3</string>
-                               <string>A1E70DF50A38C765007BE3E3</string>
-                               <string>A1E710B20A3A22FE007BE3E3</string>
-                               <string>1CA23EDF0692099D00951B8B</string>
-                               <string>1CA23EE00692099D00951B8B</string>
-                               <string>1CA23EE10692099D00951B8B</string>
-                       </array>
-                       <key>ToolbarConfiguration</key>
-                       <string>xcode.toolbar.config.default</string>
-               </dict>
-               <dict>
-                       <key>ChosenToolbarItems</key>
-                       <array>
-                               <string>XCToolbarPerspectiveControl</string>
-                               <string>NSToolbarSeparatorItem</string>
-                               <string>active-target-popup</string>
-                               <string>active-executable-popup</string>
-                               <string>active-buildstyle-popup</string>
-                               <string>NSToolbarFlexibleSpaceItem</string>
-                               <string>build</string>
-                               <string>clean</string>
-                               <string>NSToolbarSeparatorItem</string>
-                               <string>run</string>
-                               <string>debug</string>
-                       </array>
-                       <key>ControllerClassBaseName</key>
-                       <string></string>
-                       <key>IconName</key>
-                       <string>BuildTabIcon</string>
-                       <key>Identifier</key>
-                       <string>perspective.build</string>
-                       <key>IsVertical</key>
-                       <false/>
-                       <key>Layout</key>
-                       <array>
-                               <dict>
-                                       <key>ContentConfiguration</key>
-                                       <dict>
-                                               <key>PBXBottomSmartGroupGIDs</key>
-                                               <array/>
-                                               <key>PBXProjectModuleGUID</key>
-                                               <string>1CA23EE50692099D00951B8B</string>
-                                               <key>PBXProjectModuleLabel</key>
-                                               <string>Files</string>
-                                               <key>PBXProjectStructureProvided</key>
-                                               <string>yes</string>
-                                               <key>PBXSmartGroupTreeModuleColumnData</key>
-                                               <dict>
-                                                       <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
-                                                       <array>
-                                                               <real>184</real>
-                                                       </array>
-                                                       <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
-                                                       <array>
-                                                               <string>MainColumn</string>
-                                                       </array>
-                                               </dict>
-                                               <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
-                                               <dict>
-                                                       <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
-                                                       <array/>
-                                                       <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
-                                                       <array>
-                                                               <array>
-                                                                       <integer>0</integer>
-                                                               </array>
-                                                       </array>
-                                                       <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
-                                                       <string>{{0, 0}, {184, 841}}</string>
-                                               </dict>
-                                               <key>PBXTopSmartGroupGIDs</key>
-                                               <array/>
-                                               <key>XCIncludePerspectivesSwitch</key>
-                                               <false/>
-                                       </dict>
-                                       <key>GeometryConfiguration</key>
-                                       <dict>
-                                               <key>Frame</key>
-                                               <string>{{0, 0}, {201, 859}}</string>
-                                               <key>GroupTreeTableConfiguration</key>
-                                               <array>
-                                                       <string>MainColumn</string>
-                                                       <real>184</real>
-                                               </array>
-                                       </dict>
-                                       <key>Module</key>
-                                       <string>PBXSmartGroupTreeModule</string>
-                                       <key>Proportion</key>
-                                       <string>201pt</string>
-                               </dict>
-                               <dict>
-                                       <key>Dock</key>
-                                       <array>
-                                               <dict>
-                                                       <key>ContentConfiguration</key>
-                                                       <dict>
-                                                               <key>PBXProjectModuleGUID</key>
-                                                               <string>A1E70DF50A38C765007BE3E3</string>
-                                                               <key>PBXProjectModuleLabel</key>
-                                                               <string>CredentialsCache.h</string>
-                                                               <key>PBXSplitModuleInNavigatorKey</key>
-                                                               <dict>
-                                                                       <key>Split0</key>
-                                                                       <dict>
-                                                                               <key>PBXProjectModuleGUID</key>
-                                                                               <string>A1E70DF60A38C765007BE3E3</string>
-                                                                               <key>PBXProjectModuleLabel</key>
-                                                                               <string>CredentialsCache.h</string>
-                                                                               <key>_historyCapacity</key>
-                                                                               <integer>0</integer>
-                                                                               <key>bookmark</key>
-                                                                               <string>A1E710F50A3A253F007BE3E3</string>
-                                                                               <key>history</key>
-                                                                               <array>
-                                                                                       <string>A1E70DF70A38C765007BE3E3</string>
-                                                                                       <string>A1E70DF80A38C765007BE3E3</string>
-                                                                                       <string>A1E70DF90A38C765007BE3E3</string>
-                                                                                       <string>A1E70DFA0A38C765007BE3E3</string>
-                                                                                       <string>A1E70DFB0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E010A38C765007BE3E3</string>
-                                                                                       <string>A1E70E020A38C765007BE3E3</string>
-                                                                                       <string>A1E70E060A38C765007BE3E3</string>
-                                                                                       <string>A1E70E090A38C765007BE3E3</string>
-                                                                                       <string>A1E70E0A0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E0B0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E0C0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E3D0A38C78C007BE3E3</string>
-                                                                                       <string>A1E70E430A38C791007BE3E3</string>
-                                                                                       <string>A1E70E770A38CA55007BE3E3</string>
-                                                                                       <string>A1E70ECB0A38CC4C007BE3E3</string>
-                                                                                       <string>A1E70F440A38D252007BE3E3</string>
-                                                                                       <string>A1E70F450A38D252007BE3E3</string>
-                                                                                       <string>A1E70F8B0A38D3B4007BE3E3</string>
-                                                                                       <string>A1E70FC60A38D560007BE3E3</string>
-                                                                                       <string>A1E70FC80A38D560007BE3E3</string>
-                                                                                       <string>A1E70FC90A38D560007BE3E3</string>
-                                                                                       <string>A1E70FEE0A38D7C0007BE3E3</string>
-                                                                                       <string>A1E70FEF0A38D7C0007BE3E3</string>
-                                                                                       <string>A1E70FF00A38D7C0007BE3E3</string>
-                                                                                       <string>A1E70FFC0A38D806007BE3E3</string>
-                                                                                       <string>A1E7100D0A38D888007BE3E3</string>
-                                                                                       <string>A1E7103C0A38DE0B007BE3E3</string>
-                                                                                       <string>A1E7105A0A39ED89007BE3E3</string>
-                                                                                       <string>A1E710890A3A1D04007BE3E3</string>
-                                                                                       <string>A1E7109C0A3A1D2B007BE3E3</string>
-                                                                                       <string>A1E710CA0A3A244D007BE3E3</string>
-                                                                                       <string>A1E710CB0A3A244D007BE3E3</string>
-                                                                                       <string>A1E710D80A3A2465007BE3E3</string>
-                                                                                       <string>A1E710E30A3A247D007BE3E3</string>
-                                                                               </array>
-                                                                               <key>prevStack</key>
-                                                                               <array>
-                                                                                       <string>A1E70E100A38C765007BE3E3</string>
-                                                                                       <string>A1E70E110A38C765007BE3E3</string>
-                                                                                       <string>A1E70E120A38C765007BE3E3</string>
-                                                                                       <string>A1E70E130A38C765007BE3E3</string>
-                                                                                       <string>A1E70E140A38C765007BE3E3</string>
-                                                                                       <string>A1E70E150A38C765007BE3E3</string>
-                                                                                       <string>A1E70E160A38C765007BE3E3</string>
-                                                                                       <string>A1E70E170A38C765007BE3E3</string>
-                                                                                       <string>A1E70E180A38C765007BE3E3</string>
-                                                                                       <string>A1E70E1E0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E1F0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E250A38C765007BE3E3</string>
-                                                                                       <string>A1E70E260A38C765007BE3E3</string>
-                                                                                       <string>A1E70E290A38C765007BE3E3</string>
-                                                                                       <string>A1E70E2A0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E2B0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E2D0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E2E0A38C765007BE3E3</string>
-                                                                                       <string>A1E70E380A38C778007BE3E3</string>
-                                                                                       <string>A1E70E410A38C78C007BE3E3</string>
-                                                                                       <string>A1E70E450A38C791007BE3E3</string>
-                                                                                       <string>A1E70E560A38C9FD007BE3E3</string>
-                                                                                       <string>A1E70E580A38C9FD007BE3E3</string>
-                                                                                       <string>A1E70E7D0A38CA55007BE3E3</string>
-                                                                                       <string>A1E70EAB0A38CB24007BE3E3</string>
-                                                                                       <string>A1E70EC30A38CC14007BE3E3</string>
-                                                                                       <string>A1E70EE20A38CCD6007BE3E3</string>
-                                                                                       <string>A1E70FCD0A38D560007BE3E3</string>
-                                                                                       <string>A1E70FFF0A38D806007BE3E3</string>
-                                                                                       <string>A1E710140A38D888007BE3E3</string>
-                                                                                       <string>A1E710400A38DE0B007BE3E3</string>
-                                                                                       <string>A1E70E6F0A38CA08007BE3E3</string>
-                                                                                       <string>A1E710CD0A3A244D007BE3E3</string>
-                                                                                       <string>A1E710E20A3A247D007BE3E3</string>
-                                                                               </array>
-                                                                       </dict>
-                                                                       <key>SplitCount</key>
-                                                                       <string>1</string>
-                                                               </dict>
-                                                               <key>StatusBarVisibility</key>
-                                                               <true/>
-                                                               <key>XCSharingToken</key>
-                                                               <string>com.apple.Xcode.CommonNavigatorGroupSharingToken</string>
-                                                       </dict>
-                                                       <key>GeometryConfiguration</key>
-                                                       <dict>
-                                                               <key>Frame</key>
-                                                               <string>{{0, 0}, {1134, 480}}</string>
-                                                       </dict>
-                                                       <key>Module</key>
-                                                       <string>PBXNavigatorGroup</string>
-                                                       <key>Proportion</key>
-                                                       <string>480pt</string>
-                                               </dict>
-                                               <dict>
-                                                       <key>Proportion</key>
-                                                       <string>374pt</string>
-                                                       <key>Tabs</key>
-                                                       <array>
-                                                               <dict>
-                                                                       <key>ContentConfiguration</key>
-                                                                       <dict>
-                                                                               <key>PBXProjectModuleGUID</key>
-                                                                               <string>XCMainBuildResultsModuleGUID</string>
-                                                                               <key>PBXProjectModuleLabel</key>
-                                                                               <string>Build</string>
-                                                                               <key>XCBuildResultsTrigger_Collapse</key>
-                                                                               <integer>1021</integer>
-                                                                               <key>XCBuildResultsTrigger_Open</key>
-                                                                               <integer>1010</integer>
-                                                                       </dict>
-                                                                       <key>GeometryConfiguration</key>
-                                                                       <dict>
-                                                                               <key>Frame</key>
-                                                                               <string>{{10, 27}, {1134, 347}}</string>
-                                                                       </dict>
-                                                                       <key>Module</key>
-                                                                       <string>PBXBuildResultsModule</string>
-                                                               </dict>
-                                                               <dict>
-                                                                       <key>ContentConfiguration</key>
-                                                                       <dict>
-                                                                               <key>LauncherConfigVersion</key>
-                                                                               <string>3</string>
-                                                                               <key>PBXProjectModuleGUID</key>
-                                                                               <string>1CA23EE80692099D00951B8B</string>
-                                                                               <key>PBXProjectModuleLabel</key>
-                                                                               <string>Run</string>
-                                                                               <key>Runner</key>
-                                                                               <dict>
-                                                                                       <key>HorizontalSplitView</key>
-                                                                                       <dict>
-                                                                                               <key>_collapsingFrameDimension</key>
-                                                                                               <real>0.0</real>
-                                                                                               <key>_indexOfCollapsedView</key>
-                                                                                               <integer>0</integer>
-                                                                                               <key>_percentageOfCollapsedView</key>
-                                                                                               <real>0.0</real>
-                                                                                               <key>isCollapsed</key>
-                                                                                               <string>yes</string>
-                                                                                               <key>sizes</key>
-                                                                                               <array>
-                                                                                                       <string>{{0, 0}, {365, 167}}</string>
-                                                                                                       <string>{{0, 176}, {365, 267}}</string>
-                                                                                               </array>
-                                                                                       </dict>
-                                                                                       <key>VerticalSplitView</key>
-                                                                                       <dict>
-                                                                                               <key>_collapsingFrameDimension</key>
-                                                                                               <real>0.0</real>
-                                                                                               <key>_indexOfCollapsedView</key>
-                                                                                               <integer>0</integer>
-                                                                                               <key>_percentageOfCollapsedView</key>
-                                                                                               <real>0.0</real>
-                                                                                               <key>isCollapsed</key>
-                                                                                               <string>yes</string>
-                                                                                               <key>sizes</key>
-                                                                                               <array>
-                                                                                                       <string>{{0, 0}, {405, 443}}</string>
-                                                                                                       <string>{{414, 0}, {514, 443}}</string>
-                                                                                               </array>
-                                                                                       </dict>
-                                                                               </dict>
-                                                                       </dict>
-                                                                       <key>GeometryConfiguration</key>
-                                                                       <dict>
-                                                                               <key>Frame</key>
-                                                                               <string>{{0, 0}, {0, 0}}</string>
-                                                                       </dict>
-                                                                       <key>Module</key>
-                                                                       <string>PBXRunSessionModule</string>
-                                                               </dict>
-                                                       </array>
-                                               </dict>
-                                       </array>
-                                       <key>Proportion</key>
-                                       <string>1134pt</string>
-                               </dict>
-                       </array>
-                       <key>Name</key>
-                       <string>Build</string>
-                       <key>ServiceClasses</key>
-                       <array>
-                               <string>XCModuleDock</string>
-                               <string>PBXSmartGroupTreeModule</string>
-                               <string>XCModuleDock</string>
-                               <string>PBXNavigatorGroup</string>
-                               <string>XCDockableTabModule</string>
-                               <string>PBXBuildResultsModule</string>
-                               <string>PBXRunSessionModule</string>
-                               <string>XCConsole</string>
-                       </array>
-                       <key>TableOfContents</key>
-                       <array>
-                               <string>A1E710B40A3A22FF007BE3E3</string>
-                               <string>1CA23EE50692099D00951B8B</string>
-                               <string>A1E710B50A3A22FF007BE3E3</string>
-                               <string>A1E70DF50A38C765007BE3E3</string>
-                               <string>A1E710B60A3A22FF007BE3E3</string>
-                               <string>XCMainBuildResultsModuleGUID</string>
-                               <string>1CA23EE80692099D00951B8B</string>
-                               <string>A1E710B70A3A22FF007BE3E3</string>
-                       </array>
-                       <key>ToolbarConfiguration</key>
-                       <string>xcode.toolbar.config.buildAndRun</string>
-               </dict>
-               <dict>
-                       <key>ChosenToolbarItems</key>
-                       <array>
-                               <string>XCToolbarPerspectiveControl</string>
-                               <string>NSToolbarSeparatorItem</string>
-                               <string>build-and-debug</string>
-                               <string>debug</string>
-                               <string>NSToolbarFlexibleSpaceItem</string>
-                               <string>debugger-fix-and-continue</string>
-                               <string>debugger-restart-executable</string>
-                               <string>debugger-pause</string>
-                               <string>debugger-continue</string>
-                               <string>debugger-step-over</string>
-                               <string>debugger-step-into</string>
-                               <string>debugger-step-out</string>
-                               <string>debugger-step-instruction</string>
-                               <string>NSToolbarFlexibleSpaceItem</string>
-                       </array>
-                       <key>ControllerClassBaseName</key>
-                       <string>PBXDebugSessionModule</string>
-                       <key>IconName</key>
-                       <string>DebugTabIcon</string>
-                       <key>Identifier</key>
-                       <string>perspective.debug</string>
-                       <key>IsVertical</key>
-                       <integer>1</integer>
-                       <key>Layout</key>
-                       <array>
-                               <dict>
-                                       <key>ContentConfiguration</key>
-                                       <dict>
-                                               <key>PBXProjectModuleGUID</key>
-                                               <string>1CCC7628064C1048000F2A68</string>
-                                               <key>PBXProjectModuleLabel</key>
-                                               <string>Debugger Console</string>
-                                       </dict>
-                                       <key>GeometryConfiguration</key>
-                                       <dict>
-                                               <key>Frame</key>
-                                               <string>{{0, 0}, {810, 0}}</string>
-                                       </dict>
-                                       <key>Module</key>
-                                       <string>PBXDebugCLIModule</string>
-                                       <key>Proportion</key>
-                                       <string>0%</string>
-                               </dict>
-                               <dict>
-                                       <key>ContentConfiguration</key>
-                                       <dict>
-                                               <key>Debugger</key>
-                                               <dict>
-                                                       <key>HorizontalSplitView</key>
-                                                       <dict>
-                                                               <key>_collapsingFrameDimension</key>
-                                                               <real>0.0</real>
-                                                               <key>_indexOfCollapsedView</key>
-                                                               <integer>0</integer>
-                                                               <key>_percentageOfCollapsedView</key>
-                                                               <real>0.0</real>
-                                                               <key>isCollapsed</key>
-                                                               <string>yes</string>
-                                                               <key>sizes</key>
-                                                               <array>
-                                                                       <string>{{0, 0}, {395, 213}}</string>
-                                                                       <string>{{395, 0}, {415, 213}}</string>
-                                                               </array>
-                                                       </dict>
-                                                       <key>VerticalSplitView</key>
-                                                       <dict>
-                                                               <key>_collapsingFrameDimension</key>
-                                                               <real>0.0</real>
-                                                               <key>_indexOfCollapsedView</key>
-                                                               <integer>0</integer>
-                                                               <key>_percentageOfCollapsedView</key>
-                                                               <real>0.0</real>
-                                                               <key>isCollapsed</key>
-                                                               <string>yes</string>
-                                                               <key>sizes</key>
-                                                               <array>
-                                                                       <string>{{0, 0}, {810, 213}}</string>
-                                                                       <string>{{0, 213}, {810, 225}}</string>
-                                                               </array>
-                                                       </dict>
-                                               </dict>
-                                               <key>LauncherConfigVersion</key>
-                                               <string>8</string>
-                                               <key>PBXProjectModuleGUID</key>
-                                               <string>1CCC7629064C1048000F2A68</string>
-                                               <key>PBXProjectModuleLabel</key>
-                                               <string>Debug</string>
-                                       </dict>
-                                       <key>GeometryConfiguration</key>
-                                       <dict>
-                                               <key>DebugConsoleDrawerSize</key>
-                                               <string>{100, 120}</string>
-                                               <key>DebugConsoleVisible</key>
-                                               <string>None</string>
-                                               <key>DebugConsoleWindowFrame</key>
-                                               <string>{{200, 200}, {500, 300}}</string>
-                                               <key>DebugSTDIOWindowFrame</key>
-                                               <string>{{200, 200}, {500, 300}}</string>
-                                               <key>Frame</key>
-                                               <string>{{0, 7}, {810, 438}}</string>
-                                       </dict>
-                                       <key>Module</key>
-                                       <string>PBXDebugSessionModule</string>
-                                       <key>Proportion</key>
-                                       <string>443pt</string>
-                               </dict>
-                       </array>
-                       <key>Name</key>
-                       <string>Debug</string>
-                       <key>ServiceClasses</key>
-                       <array>
-                               <string>XCModuleDock</string>
-                               <string>XCModuleDock</string>
-                               <string>PBXDebugCLIModule</string>
-                               <string>PBXDebugSessionModule</string>
-                               <string>XCConsole</string>
-                       </array>
-                       <key>TableOfContents</key>
-                       <array>
-                               <string>1CC8E6A5069209BD00BB180A</string>
-                               <string>1CC8E6A6069209BD00BB180A</string>
-                               <string>1CCC7628064C1048000F2A68</string>
-                               <string>1CCC7629064C1048000F2A68</string>
-                               <string>1CC8E6A7069209BD00BB180A</string>
-                       </array>
-                       <key>ToolbarConfiguration</key>
-                       <string>xcode.toolbar.config.debug</string>
-               </dict>
-       </array>
-       <key>PerspectivesBarVisible</key>
-       <true/>
-       <key>ShelfIsVisible</key>
-       <false/>
-       <key>SourceDescription</key>
-       <string>file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecification.xcperspec'</string>
-       <key>StatusbarIsVisible</key>
-       <true/>
-       <key>TimeStamp</key>
-       <real>171582783.00723499</real>
-       <key>ToolbarDisplayMode</key>
-       <integer>1</integer>
-       <key>ToolbarIsVisible</key>
-       <true/>
-       <key>ToolbarSizeMode</key>
-       <integer>1</integer>
-       <key>Type</key>
-       <string>Perspectives</string>
-       <key>UpdateMessage</key>
-       <string></string>
-       <key>WindowJustification</key>
-       <integer>5</integer>
-       <key>WindowOrderList</key>
-       <array>
-               <string>/Volumes/Ra-Tilt/Users/lxs/KfM/CCAPI/src/lib/ccapi/mac/CCAPI.xcodeproj</string>
-       </array>
-       <key>WindowString</key>
-       <string>170 278 1340 900 0 0 1920 1178 </string>
-       <key>WindowTools</key>
-       <array>
-               <dict>
-                       <key>Identifier</key>
-                       <string>windowTool.find</string>
-                       <key>Layout</key>
-                       <array>
-                               <dict>
-                                       <key>Dock</key>
-                                       <array>
-                                               <dict>
-                                                       <key>Dock</key>
-                                                       <array>
-                                                               <dict>
-                                                                       <key>ContentConfiguration</key>
-                                                                       <dict>
-                                                                               <key>PBXProjectModuleGUID</key>
-                                                                               <string>1CDD528C0622207200134675</string>
-                                                                               <key>PBXProjectModuleLabel</key>
-                                                                               <string>&lt;No Editor&gt;</string>
-                                                                               <key>PBXSplitModuleInNavigatorKey</key>
-                                                                               <dict>
-                                                                                       <key>Split0</key>
-                                                                                       <dict>
-                                                                                               <key>PBXProjectModuleGUID</key>
-                                                                                               <string>1CD0528D0623707200166675</string>
-                                                                                       </dict>
-                                                                                       <key>SplitCount</key>
-                                                                                       <string>1</string>
-                                                                               </dict>
-                                                                               <key>StatusBarVisibility</key>
-                                                                               <integer>1</integer>
-                                                                       </dict>
-                                                                       <key>GeometryConfiguration</key>
-                                                                       <dict>
-                                                                               <key>Frame</key>
-                                                                               <string>{{0, 0}, {781, 167}}</string>
-                                                                               <key>RubberWindowFrame</key>
-                                                                               <string>62 385 781 470 0 0 1440 878 </string>
-                                                                       </dict>
-                                                                       <key>Module</key>
-                                                                       <string>PBXNavigatorGroup</string>
-                                                                       <key>Proportion</key>
-                                                                       <string>781pt</string>
-                                                               </dict>
-                                                       </array>
-                                                       <key>Proportion</key>
-                                                       <string>50%</string>
-                                               </dict>
-                                               <dict>
-                                                       <key>BecomeActive</key>
-                                                       <integer>1</integer>
-                                                       <key>ContentConfiguration</key>
-                                                       <dict>
-                                                               <key>PBXProjectModuleGUID</key>
-                                                               <string>1CD0528E0623707200166675</string>
-                                                               <key>PBXProjectModuleLabel</key>
-                                                               <string>Project Find</string>
-                                                       </dict>
-                                                       <key>GeometryConfiguration</key>
-                                                       <dict>
-                                                               <key>Frame</key>
-                                                               <string>{{8, 0}, {773, 254}}</string>
-                                                               <key>RubberWindowFrame</key>
-                                                               <string>62 385 781 470 0 0 1440 878 </string>
-                                                       </dict>
-                                                       <key>Module</key>
-                                                       <string>PBXProjectFindModule</string>
-                                                       <key>Proportion</key>
-                                                       <string>50%</string>
-                                               </dict>
-                                       </array>
-                                       <key>Proportion</key>
-                                       <string>428pt</string>
-                               </dict>
-                       </array>
-                       <key>Name</key>
-                       <string>Project Find</string>
-                       <key>ServiceClasses</key>
-                       <array>
-                               <string>PBXProjectFindModule</string>
-                       </array>
-                       <key>StatusbarIsVisible</key>
-                       <integer>1</integer>
-                       <key>TableOfContents</key>
-                       <array>
-                               <string>1C530D57069F1CE1000CFCEE</string>
-                               <string>1C530D58069F1CE1000CFCEE</string>
-                               <string>1C530D59069F1CE1000CFCEE</string>
-                               <string>1CDD528C0622207200134675</string>
-                               <string>1C530D5A069F1CE1000CFCEE</string>
-                               <string>1CE0B1FE06471DED0097A5F4</string>
-                               <string>1CD0528E0623707200166675</string>
-                       </array>
-                       <key>WindowString</key>
-                       <string>62 385 781 470 0 0 1440 878 </string>
-                       <key>WindowToolGUID</key>
-                       <string>1C530D57069F1CE1000CFCEE</string>
-                       <key>WindowToolIsVisible</key>
-                       <integer>0</integer>
-               </dict>
-               <dict>
-                       <key>Identifier</key>
-                       <string>windowTool.run</string>
-                       <key>Layout</key>
-                       <array>
-                               <dict>
-                                       <key>Dock</key>
-                                       <array>
-                                               <dict>
-                                                       <key>ContentConfiguration</key>
-                                                       <dict>
-                                                               <key>LauncherConfigVersion</key>
-                                                               <string>3</string>
-                                                               <key>PBXProjectModuleGUID</key>
-                                                               <string>1CD0528B0623707200166675</string>
-                                                               <key>PBXProjectModuleLabel</key>
-                                                               <string>Run - cocoapp112 - cocoapp112</string>
-                                                               <key>Runner</key>
-                                                               <dict>
-                                                                       <key>HorizontalSplitView</key>
-                                                                       <dict>
-                                                                               <key>_collapsingFrameDimension</key>
-                                                                               <real>0.0</real>
-                                                                               <key>_indexOfCollapsedView</key>
-                                                                               <integer>0</integer>
-                                                                               <key>_percentageOfCollapsedView</key>
-                                                                               <real>0.0</real>
-                                                                               <key>isCollapsed</key>
-                                                                               <string>yes</string>
-                                                                               <key>sizes</key>
-                                                                               <array>
-                                                                                       <string>{{0, 0}, {365, 167}}</string>
-                                                                                       <string>{{0, 176}, {365, 267}}</string>
-                                                                               </array>
-                                                                       </dict>
-                                                                       <key>VerticalSplitView</key>
-                                                                       <dict>
-                                                                               <key>_collapsingFrameDimension</key>
-                                                                               <real>0.0</real>
-                                                                               <key>_indexOfCollapsedView</key>
-                                                                               <integer>0</integer>
-                                                                               <key>_percentageOfCollapsedView</key>
-                                                                               <real>0.0</real>
-                                                                               <key>isCollapsed</key>
-                                                                               <string>yes</string>
-                                                                               <key>sizes</key>
-                                                                               <array>
-                                                                                       <string>{{0, 0}, {405, 443}}</string>
-                                                                                       <string>{{414, 0}, {514, 443}}</string>
-                                                                               </array>
-                                                                       </dict>
-                                                               </dict>
-                                                       </dict>
-                                                       <key>GeometryConfiguration</key>
-                                                       <dict>
-                                                               <key>Frame</key>
-                                                               <string>{{0, 0}, {456, 192}}</string>
-                                                               <key>RubberWindowFrame</key>
-                                                               <string>741 130 456 234 0 0 1280 1002 </string>
-                                                       </dict>
-                                                       <key>Module</key>
-                                                       <string>PBXRunSessionModule</string>
-                                                       <key>Proportion</key>
-                                                       <string>192pt</string>
-                                               </dict>
-                                       </array>
-                                       <key>Proportion</key>
-                                       <string>192pt</string>
-                               </dict>
-                       </array>
-                       <key>Name</key>
-                       <string>Run Log</string>
-                       <key>ServiceClasses</key>
-                       <array>
-                               <string>PBXRunSessionModule</string>
-                       </array>
-                       <key>StatusbarIsVisible</key>
-                       <integer>1</integer>
-                       <key>TableOfContents</key>
-                       <array>
-                               <string>1C78EAAF065D492600B07095</string>
-                               <string>1C78EAB0065D492600B07095</string>
-                               <string>1CD0528B0623707200166675</string>
-                               <string>1C78EAB1065D492600B07095</string>
-                       </array>
-                       <key>ToolbarConfiguration</key>
-                       <string>xcode.toolbar.config.run</string>
-                       <key>WindowString</key>
-                       <string>741 130 456 234 0 0 1280 1002 </string>
-               </dict>
-               <dict>
-                       <key>Identifier</key>
-                       <string>windowTool.scm</string>
-                       <key>Layout</key>
-                       <array>
-                               <dict>
-                                       <key>Dock</key>
-                                       <array>
-                                               <dict>
-                                                       <key>ContentConfiguration</key>
-                                                       <dict>
-                                                               <key>PBXProjectModuleGUID</key>
-                                                               <string>1C78EAB2065D492600B07095</string>
-                                                               <key>PBXProjectModuleLabel</key>
-                                                               <string>&lt;No Editor&gt;</string>
-                                                               <key>PBXSplitModuleInNavigatorKey</key>
-                                                               <dict>
-                                                                       <key>Split0</key>
-                                                                       <dict>
-                                                                               <key>PBXProjectModuleGUID</key>
-                                                                               <string>1C78EAB3065D492600B07095</string>
-                                                                       </dict>
-                                                                       <key>SplitCount</key>
-                                                                       <string>1</string>
-                                                               </dict>
-                                                               <key>StatusBarVisibility</key>
-                                                               <integer>1</integer>
-                                                       </dict>
-                                                       <key>GeometryConfiguration</key>
-                                                       <dict>
-                                                               <key>Frame</key>
-                                                               <string>{{0, 0}, {452, 0}}</string>
-                                                               <key>RubberWindowFrame</key>
-                                                               <string>743 379 452 308 0 0 1280 1002 </string>
-                                                       </dict>
-                                                       <key>Module</key>
-                                                       <string>PBXNavigatorGroup</string>
-                                                       <key>Proportion</key>
-                                                       <string>0pt</string>
-                                               </dict>
-                                               <dict>
-                                                       <key>BecomeActive</key>
-                                                       <integer>1</integer>
-                                                       <key>ContentConfiguration</key>
-                                                       <dict>
-                                                               <key>PBXProjectModuleGUID</key>
-                                                               <string>1CD052920623707200166675</string>
-                                                               <key>PBXProjectModuleLabel</key>
-                                                               <string>SCM</string>
-                                                       </dict>
-                                                       <key>GeometryConfiguration</key>
-                                                       <dict>
-                                                               <key>ConsoleFrame</key>
-                                                               <string>{{0, 259}, {452, 0}}</string>
-                                                               <key>Frame</key>
-                                                               <string>{{0, 7}, {452, 259}}</string>
-                                                               <key>RubberWindowFrame</key>
-                                                               <string>743 379 452 308 0 0 1280 1002 </string>
-                                                               <key>TableConfiguration</key>
-                                                               <array>
-                                                                       <string>Status</string>
-                                                                       <real>30</real>
-                                                                       <string>FileName</string>
-                                                                       <real>199</real>
-                                                                       <string>Path</string>
-                                                                       <real>197.09500122070312</real>
-                                                               </array>
-                                                               <key>TableFrame</key>
-                                                               <string>{{0, 0}, {452, 250}}</string>
-                                                       </dict>
-                                                       <key>Module</key>
-                                                       <string>PBXCVSModule</string>
-                                                       <key>Proportion</key>
-                                                       <string>262pt</string>
-                                               </dict>
-                                       </array>
-                                       <key>Proportion</key>
-                                       <string>266pt</string>
-                               </dict>
-                       </array>
-                       <key>Name</key>
-                       <string>SCM</string>
-                       <key>ServiceClasses</key>
-                       <array>
-                               <string>PBXCVSModule</string>
-                       </array>
-                       <key>StatusbarIsVisible</key>
-                       <integer>1</integer>
-                       <key>TableOfContents</key>
-                       <array>
-                               <string>1C78EAB4065D492600B07095</string>
-                               <string>1C78EAB5065D492600B07095</string>
-                               <string>1C78EAB2065D492600B07095</string>
-                               <string>1CD052920623707200166675</string>
-                       </array>
-                       <key>ToolbarConfiguration</key>
-                       <string>xcode.toolbar.config.scm</string>
-                       <key>WindowString</key>
-                       <string>743 379 452 308 0 0 1280 1002 </string>
-               </dict>
-               <dict>
-                       <key>Identifier</key>
-                       <string>windowTool.breakpoints</string>
-                       <key>IsVertical</key>
-                       <integer>0</integer>
-                       <key>Layout</key>
-                       <array>
-                               <dict>
-                                       <key>Dock</key>
-                                       <array>
-                                               <dict>
-                                                       <key>BecomeActive</key>
-                                                       <integer>1</integer>
-                                                       <key>ContentConfiguration</key>
-                                                       <dict>
-                                                               <key>PBXBottomSmartGroupGIDs</key>
-                                                               <array>
-                                                                       <string>1C77FABC04509CD000000102</string>
-                                                               </array>
-                                                               <key>PBXProjectModuleGUID</key>
-                                                               <string>1CE0B1FE06471DED0097A5F4</string>
-                                                               <key>PBXProjectModuleLabel</key>
-                                                               <string>Files</string>
-                                                               <key>PBXProjectStructureProvided</key>
-                                                               <string>no</string>
-                                                               <key>PBXSmartGroupTreeModuleColumnData</key>
-                                                               <dict>
-                                                                       <key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
-                                                                       <array>
-                                                                               <real>168</real>
-                                                                       </array>
-                                                                       <key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
-                                                                       <array>
-                                                                               <string>MainColumn</string>
-                                                                       </array>
-                                                               </dict>
-                                                               <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
-                                                               <dict>
-                                                                       <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
-                                                                       <array>
-                                                                               <string>1C77FABC04509CD000000102</string>
-                                                                       </array>
-                                                                       <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
-                                                                       <array>
-                                                                               <array>
-                                                                                       <integer>0</integer>
-                                                                               </array>
-                                                                       </array>
-                                                                       <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
-                                                                       <string>{{0, 0}, {168, 350}}</string>
-                                                               </dict>
-                                                               <key>PBXTopSmartGroupGIDs</key>
-                                                               <array/>
-                                                               <key>XCIncludePerspectivesSwitch</key>
-                                                               <integer>0</integer>
-                                                       </dict>
-                                                       <key>GeometryConfiguration</key>
-                                                       <dict>
-                                                               <key>Frame</key>
-                                                               <string>{{0, 0}, {185, 368}}</string>
-                                                               <key>GroupTreeTableConfiguration</key>
-                                                               <array>
-                                                                       <string>MainColumn</string>
-                                                                       <real>168</real>
-                                                               </array>
-                                                               <key>RubberWindowFrame</key>
-                                                               <string>315 424 744 409 0 0 1440 878 </string>
-                                                       </dict>
-                                                       <key>Module</key>
-                                                       <string>PBXSmartGroupTreeModule</string>
-                                                       <key>Proportion</key>
-                                                       <string>185pt</string>
-                                               </dict>
-                                               <dict>
-                                                       <key>ContentConfiguration</key>
-                                                       <dict>
-                                                               <key>PBXProjectModuleGUID</key>
-                                                               <string>1CA1AED706398EBD00589147</string>
-                                                               <key>PBXProjectModuleLabel</key>
-                                                               <string>Detail</string>
-                                                       </dict>
-                                                       <key>GeometryConfiguration</key>
-                                                       <dict>
-                                                               <key>Frame</key>
-                                                               <string>{{190, 0}, {554, 368}}</string>
-                                                               <key>RubberWindowFrame</key>
-                                                               <string>315 424 744 409 0 0 1440 878 </string>
-                                                       </dict>
-                                                       <key>Module</key>
-                                                       <string>XCDetailModule</string>
-                                                       <key>Proportion</key>
-                                                       <string>554pt</string>
-                                               </dict>
-                                       </array>
-                                       <key>Proportion</key>
-                                       <string>368pt</string>
-                               </dict>
-                       </array>
-                       <key>MajorVersion</key>
-                       <integer>2</integer>
-                       <key>MinorVersion</key>
-                       <integer>0</integer>
-                       <key>Name</key>
-                       <string>Breakpoints</string>
-                       <key>ServiceClasses</key>
-                       <array>
-                               <string>PBXSmartGroupTreeModule</string>
-                               <string>XCDetailModule</string>
-                       </array>
-                       <key>StatusbarIsVisible</key>
-                       <integer>1</integer>
-                       <key>TableOfContents</key>
-                       <array>
-                               <string>1CDDB66807F98D9800BB5817</string>
-                               <string>1CDDB66907F98D9800BB5817</string>
-                               <string>1CE0B1FE06471DED0097A5F4</string>
-                               <string>1CA1AED706398EBD00589147</string>
-                       </array>
-                       <key>ToolbarConfiguration</key>
-                       <string>xcode.toolbar.config.breakpoints</string>
-                       <key>WindowString</key>
-                       <string>315 424 744 409 0 0 1440 878 </string>
-                       <key>WindowToolGUID</key>
-                       <string>1CDDB66807F98D9800BB5817</string>
-                       <key>WindowToolIsVisible</key>
-                       <integer>1</integer>
-               </dict>
-               <dict>
-                       <key>Identifier</key>
-                       <string>windowTool.debugAnimator</string>
-                       <key>Layout</key>
-                       <array>
-                               <dict>
-                                       <key>Dock</key>
-                                       <array>
-                                               <dict>
-                                                       <key>Module</key>
-                                                       <string>PBXNavigatorGroup</string>
-                                                       <key>Proportion</key>
-                                                       <string>100%</string>
-                                               </dict>
-                                       </array>
-                                       <key>Proportion</key>
-                                       <string>100%</string>
-                               </dict>
-                       </array>
-                       <key>Name</key>
-                       <string>Debug Visualizer</string>
-                       <key>ServiceClasses</key>
-                       <array>
-                               <string>PBXNavigatorGroup</string>
-                       </array>
-                       <key>StatusbarIsVisible</key>
-                       <integer>1</integer>
-                       <key>ToolbarConfiguration</key>
-                       <string>xcode.toolbar.config.debugAnimator</string>
-                       <key>WindowString</key>
-                       <string>100 100 700 500 0 0 1280 1002 </string>
-               </dict>
-               <dict>
-                       <key>Identifier</key>
-                       <string>windowTool.bookmarks</string>
-                       <key>Layout</key>
-                       <array>
-                               <dict>
-                                       <key>Dock</key>
-                                       <array>
-                                               <dict>
-                                                       <key>Module</key>
-                                                       <string>PBXBookmarksModule</string>
-                                                       <key>Proportion</key>
-                                                       <string>166pt</string>
-                                               </dict>
-                                       </array>
-                                       <key>Proportion</key>
-                                       <string>166pt</string>
-                               </dict>
-                       </array>
-                       <key>Name</key>
-                       <string>Bookmarks</string>
-                       <key>ServiceClasses</key>
-                       <array>
-                               <string>PBXBookmarksModule</string>
-                       </array>
-                       <key>StatusbarIsVisible</key>
-                       <integer>0</integer>
-                       <key>WindowString</key>
-                       <string>538 42 401 187 0 0 1280 1002 </string>
-               </dict>
-               <dict>
-                       <key>Identifier</key>
-                       <string>windowTool.classBrowser</string>
-                       <key>Layout</key>
-                       <array>
-                               <dict>
-                                       <key>Dock</key>
-                                       <array>
-                                               <dict>
-                                                       <key>BecomeActive</key>
-                                                       <integer>1</integer>
-                                                       <key>ContentConfiguration</key>
-                                                       <dict>
-                                                               <key>OptionsSetName</key>
-                                                               <string>Hierarchy, all classes</string>
-                                                               <key>PBXProjectModuleGUID</key>
-                                                               <string>1CA6456E063B45B4001379D8</string>
-                                                               <key>PBXProjectModuleLabel</key>
-                                                               <string>Class Browser - NSObject</string>
-                                                       </dict>
-                                                       <key>GeometryConfiguration</key>
-                                                       <dict>
-                                                               <key>ClassesFrame</key>
-                                                               <string>{{0, 0}, {369, 96}}</string>
-                                                               <key>ClassesTreeTableConfiguration</key>
-                                                               <array>
-                                                                       <string>PBXClassNameColumnIdentifier</string>
-                                                                       <real>208</real>
-                                                                       <string>PBXClassBookColumnIdentifier</string>
-                                                                       <real>22</real>
-                                                               </array>
-                                                               <key>Frame</key>
-                                                               <string>{{0, 0}, {616, 353}}</string>
-                                                               <key>MembersFrame</key>
-                                                               <string>{{0, 105}, {369, 395}}</string>
-                                                               <key>MembersTreeTableConfiguration</key>
-                                                               <array>
-                                                                       <string>PBXMemberTypeIconColumnIdentifier</string>
-                                                                       <real>22</real>
-                                                                       <string>PBXMemberNameColumnIdentifier</string>
-                                                                       <real>216</real>
-                                                                       <string>PBXMemberTypeColumnIdentifier</string>
-                                                                       <real>94</real>
-                                                                       <string>PBXMemberBookColumnIdentifier</string>
-                                                                       <real>22</real>
-                                                               </array>
-                                                               <key>PBXModuleWindowStatusBarHidden2</key>
-                                                               <integer>1</integer>
-                                                               <key>RubberWindowFrame</key>
-                                                               <string>597 125 616 374 0 0 1280 1002 </string>
-                                                       </dict>
-                                                       <key>Module</key>
-                                                       <string>PBXClassBrowserModule</string>
-                                                       <key>Proportion</key>
-                                                       <string>354pt</string>
-                                               </dict>
-                                       </array>
-                                       <key>Proportion</key>
-                                       <string>354pt</string>
-                               </dict>
-                       </array>
-                       <key>Name</key>
-                       <string>Class Browser</string>
-                       <key>ServiceClasses</key>
-                       <array>
-                               <string>PBXClassBrowserModule</string>
-                       </array>
-                       <key>StatusbarIsVisible</key>
-                       <integer>0</integer>
-                       <key>TableOfContents</key>
-                       <array>
-                               <string>1C78EABA065D492600B07095</string>
-                               <string>1C78EABB065D492600B07095</string>
-                               <string>1CA6456E063B45B4001379D8</string>
-                       </array>
-                       <key>ToolbarConfiguration</key>
-                       <string>xcode.toolbar.config.classbrowser</string>
-                       <key>WindowString</key>
-                       <string>597 125 616 374 0 0 1280 1002 </string>
-               </dict>
-       </array>
-</dict>
-</plist>
index 38a73b4c9610ea4b7130e76d33b9c513f2b5b8eb..912c48b57c5f03978615f2d7ee9ea42e55648a1a 100644 (file)
@@ -95,7 +95,7 @@
                A1E70D440A38B5BC007BE3E3 /* NTMakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NTMakefile; sourceTree = "<group>"; };
                A1E70D450A38B5BC007BE3E3 /* server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = server.c; sourceTree = "<group>"; };
                A1E70D460A38B5BC007BE3E3 /* server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = server.c; sourceTree = "<group>"; };
-               A1E70D5D0A38B796007BE3E3 /* CCacheServer.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = CCacheServer.app; sourceTree = BUILT_PRODUCTS_DIR; };
+               A1E70D5D0A38B796007BE3E3 /* CCacheServer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CCacheServer.app; sourceTree = BUILT_PRODUCTS_DIR; };
                A1E70D910A38BB67007BE3E3 /* CCacheServer.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = CCacheServer.plist; sourceTree = "<group>"; };
                A1E70D920A38BB67007BE3E3 /* CCacheServerInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = CCacheServerInfo.plist; sourceTree = "<group>"; };
                A1E70D930A38BB67007BE3E3 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
index 779c17b7a0c5876c176b5fa8667d44a358d40645..5a20c10ab2a9740042994c7fbc8f7ce4ccdc4c1d 100644 (file)
@@ -296,7 +296,7 @@ ccs_context_list_new(cc_context_list_head_t ** headpp)
     if (ret == NULL)\r
         return ccErrNoMem;\r
     ret->head = ret->tail = NULL;\r
-       ret->type = context;\r
+       ret->type = cc_context_list;\r
     *headpp = ret;\r
     return ccNoError;\r
 }\r
index a9da8da6c83e45ef385e1a1db0a843b2c72d386c..004e360952fd103eb4b8c07672f52315da517547 100644 (file)
@@ -4,14 +4,14 @@
 #include "CredentialsCache.h"
 #include "msg.h"
 #include "migServer.h"
+#include "serv_ops.h"
 
 #include <Kerberos/kipc_server.h>
 
 int main (int argc, const char *argv[])
 {
     cc_int32 code = 0;
-    int running = 1;
-
+    
     openlog (argv[0], LOG_CONS | LOG_PID, LOG_AUTH);
     syslog (LOG_INFO, "Starting up.");   
 
index 66bc6aee9c0836d3c664946312faf55c8b95d327..a0af4254f061e7a1f0a76b7966c9d3e7470b8820 100644 (file)
@@ -47,6 +47,7 @@
 
 #include "CredentialsCache.h"
 #include "rpc_auth.h"
+#include <string.h>
 
 cc_int32 
 ccs_rpc_is_authorized( cc_auth_info_t* msg_auth, cc_session_info_t* msg_session, cc_auth_info_t* stored_auth, 
index 9f2a2a1aa00d74de568af717d5b7ac31efdb5a52..c7ee4746fd304c289af08cb7dd1ae13add15ed3c 100644 (file)
@@ -34,7 +34,7 @@ krb5_gss_indicate_mechs(minor_status, mech_set)
 {
    *minor_status = 0;
 
-   if (gssint_copy_oid_set(minor_status, gss_mech_set_krb5_both, mech_set)) {
+   if (gssint_copy_oid_set(minor_status, gss_mech_set_krb5_both, mech_set)) {
          *mech_set     = GSS_C_NO_OID_SET;
          *minor_status = ENOMEM;
          return(GSS_S_FAILURE);
index 4414abfbc3c91b2e0f03a344f9a1f6feb485bfdf..34428c08cae3e3eeb83ed583c4ba8b305deb447e 100644 (file)
@@ -111,7 +111,7 @@ krb5_cc_ops krb5_cc_stdcc_ops = {
  * changes made.  We register a unique message type with which
  * we'll communicate to all other processes. 
  */
-void cache_changed()
+static void cache_changed()
 {
        static unsigned int message = 0;
        
@@ -122,7 +122,7 @@ void cache_changed()
 }
 #else /* _WIN32 */
 
-void cache_changed()
+static void cache_changed()
 {
        return;
 }
@@ -189,65 +189,48 @@ static const struct err_xlate err_xlate_table[] =
 
 static krb5_error_code cc_err_xlate(int err)
 {
-       const struct err_xlate *p;
-
+    const struct err_xlate *p;
+    
 #ifdef USE_CCAPI_V3
-       if (err == ccNoError)
-               return 0;
+    if (err == ccNoError)
+        return 0;
 #else
-        if (err == CC_NOERROR)
-               return 0;
+    if (err == CC_NOERROR)
+        return 0;
 #endif
-
-       for (p = err_xlate_table; p->cc_err; p++) {
-               if (err == p->cc_err)
-                       return p->krb5_err;
-       }
-       return KRB5_FCC_INTERNAL; /* XXX we need a miscellaneous return */
+    
+    for (p = err_xlate_table; p->cc_err; p++) {
+        if (err == p->cc_err)
+            return p->krb5_err;
+    }
+    return KRB5_FCC_INTERNAL; /* XXX we need a miscellaneous return */
 }
 
 
 #ifdef USE_CCAPI_V3
-static krb5_error_code stdccv3_setup(krb5_context context,
-                                    stdccCacheDataPtr ccapi_data)
+static krb5_error_code stdccv3_setup (krb5_context context,
+                                      stdccCacheDataPtr ccapi_data)
 {
-       cc_int32        err;
-
-       /* make sure the API has been intialized */
-       if (gCntrlBlock == NULL) {
-               err = cc_initialize(&gCntrlBlock, ccapi_version_max, NULL, NULL);
-               if (err != ccNoError)
-                       return cc_err_xlate(err);
-       }
-
-       /*
-        * No ccapi_data structure, so we don't need to make sure the
-        * ccache exists.
-        */
-       if (!ccapi_data)
-               return 0;
-
-       /*
-        * The ccache already exists
-        */
-       if (ccapi_data->NamedCache)
-               return 0;
-
-       err = cc_context_open_ccache(gCntrlBlock, ccapi_data->cache_name,
-                     &ccapi_data->NamedCache);
-       if (err == ccNoError)
-               return 0;
-
-       ccapi_data->NamedCache = NULL;
-       return cc_err_xlate(err);
+    krb5_error_code err = 0;
+    
+    if (!err && !gCntrlBlock) {
+        err = cc_initialize (&gCntrlBlock, ccapi_version_max, NULL, NULL);
+    }
+    
+    if (!err && ccapi_data && !ccapi_data->NamedCache) {
+        /* ccache has not been opened yet.  open it. */  
+        err = cc_context_open_ccache (gCntrlBlock, ccapi_data->cache_name,
+                                      &ccapi_data->NamedCache);
+    }
+    
+    return cc_err_xlate(err);
 }
 
 /* krb5_stdcc_shutdown is exported; use the old name */
 void krb5_stdcc_shutdown()
 {
-       if (gCntrlBlock)
-               cc_context_release(gCntrlBlock);
-       gCntrlBlock = NULL;
+    if (gCntrlBlock) { cc_context_release(gCntrlBlock); }
+    gCntrlBlock = NULL;
 }
 
 /*
@@ -256,58 +239,68 @@ void krb5_stdcc_shutdown()
  * create a new cache with a unique name, corresponds to creating a
  * named cache initialize the API here if we have to.
  */
-krb5_error_code KRB5_CALLCONV  krb5_stdccv3_generate_new 
-       (krb5_context context, krb5_ccache *id ) 
+krb5_error_code KRB5_CALLCONV  
+krb5_stdccv3_generate_new (krb5_context context, krb5_ccache *id ) 
 {
-       krb5_ccache             newCache = NULL;
-       krb5_error_code         retval;
-       stdccCacheDataPtr       ccapi_data = NULL;
-       char                    *name = NULL;
-       cc_time                 time;
-       int                     err;
-
-       if ((retval = stdccv3_setup(context, NULL)))
-               return retval;
-       
-       retval = KRB5_CC_NOMEM;
-       if (!(newCache = (krb5_ccache) malloc(sizeof(struct _krb5_ccache))))
-               goto errout;
-       if (!(ccapi_data = (stdccCacheDataPtr)malloc(sizeof(stdccCacheData))))
-               goto errout;
-       if (!(name = malloc(256)))
-               goto errout;
-       
-       /* create a unique name */
-       if (retval = cc_context_get_change_time(gCntrlBlock, &time))
-               goto errout;
-       sprintf(name, "gen_new_cache%d", time);
-       
-       /* create the new cache */
-       err = cc_context_create_ccache(gCntrlBlock, name, cc_credentials_v5, 0L,
-                       &ccapi_data->NamedCache);
-       if (err != ccNoError) {
-               retval = cc_err_xlate(err);
-               goto errout;
-       }
-
-       /* setup some fields */
-       newCache->ops = &krb5_cc_stdcc_ops;
-       newCache->data = ccapi_data;
-       ccapi_data->cache_name = name;
-       
-       /* return a pointer to the new cache */
-       *id = newCache;
-               
-       return 0;
-
-errout:
-       if (newCache)
-               free(newCache);
-       if (ccapi_data)
-               free(ccapi_data);
-       if (name)
-               free(name);
-       return retval;
+    krb5_error_code err = 0;
+    krb5_ccache newCache = NULL;
+    stdccCacheDataPtr ccapi_data = NULL;
+    cc_ccache_t ccache = NULL;
+    cc_string_t ccstring = NULL;
+    char *name = NULL;
+    
+    if (!err) {
+        err = stdccv3_setup(context, NULL);
+    }
+    
+    if (!err) {
+        newCache = (krb5_ccache) malloc (sizeof (*newCache));
+        if (!newCache) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err) {
+        ccapi_data = (stdccCacheDataPtr) malloc (sizeof (*ccapi_data));
+        if (!ccapi_data) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err) {
+        err = cc_context_create_new_ccache(gCntrlBlock, cc_credentials_v5, 0L,
+                                           &ccapi_data->NamedCache);
+    }
+    
+    if (!err) {
+        err = cc_ccache_get_name (ccapi_data->NamedCache, &ccstring);
+    }
+    
+    if (!err) {
+        name = (char *) malloc (sizeof (*name) * (strlen (ccstring->data) + 1));
+        if (!name) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err) {
+        strcpy (name, ccstring->data);
+        ccapi_data->cache_name = name;
+        name = NULL; /* take ownership */
+        
+        ccapi_data->NamedCache = ccache;
+        ccache = NULL; /* take ownership */
+        
+        newCache->ops = &krb5_cc_stdcc_ops;
+        newCache->data = ccapi_data;
+        ccapi_data = NULL; /* take ownership */
+        
+        /* return a pointer to the new cache */
+        *id = newCache;
+        newCache = NULL;
+    }
+    
+    if (ccstring)   { cc_string_release (ccstring); }
+    if (name)       { free (name); }
+    if (ccache)     { cc_ccache_release (ccache); }
+    if (ccapi_data) { free (ccapi_data); }
+    if (newCache)   { free (newCache); }
+    
+    return cc_err_xlate (err);
 }
   
 /*
@@ -315,54 +308,58 @@ errout:
  *
  * create a new cache with the name stored in residual
  */
-krb5_error_code KRB5_CALLCONV  krb5_stdccv3_resolve 
-        (krb5_context context, krb5_ccache *id , const char *residual ) 
+krb5_error_code KRB5_CALLCONV  
+krb5_stdccv3_resolve (krb5_context context, krb5_ccache *id , const char *residual ) 
 {
-       krb5_ccache             newCache = NULL;
-       stdccCacheDataPtr       ccapi_data = NULL;
-       int                     err;
-       krb5_error_code         retval;
-       char                    *cName = NULL;
-       
-       if ((retval = stdccv3_setup(context, NULL)))
-               return retval;
-       
-       retval = KRB5_CC_NOMEM;
-       if (!(newCache = (krb5_ccache) malloc(sizeof(struct _krb5_ccache))))
-               goto errout;
-       
-       if (!(ccapi_data = (stdccCacheDataPtr)malloc(sizeof(stdccCacheData))))
-               goto errout;
-
-       if (!(cName = malloc(strlen(residual)+1)))
-               goto errout;
-       
-       newCache->ops = &krb5_cc_stdcc_ops;
-       newCache->data = ccapi_data;
-       ccapi_data->cache_name = cName;
-
-       strcpy(cName, residual);
-       
-       err = cc_context_open_ccache(gCntrlBlock, cName,
-                                    &ccapi_data->NamedCache);
-        if (err != ccNoError) {
-               ccapi_data->NamedCache = NULL;
-               goto errout;
-       }
-
-       /* return new cache structure */
-       *id = newCache;
-       
-       return 0;
-       
-errout:
-       if (newCache)
-               free(newCache);
-       if (ccapi_data)
-               free(ccapi_data);
-       if (cName)
-               free(cName);
-       return retval;
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = NULL;
+    krb5_ccache ccache = NULL;
+    char *name = NULL;
+    
+    if (id == NULL) { err = KRB5_CC_NOMEM; }
+    
+    if (!err) {
+        err = stdccv3_setup (context, NULL);
+    }
+    
+    if (!err) {
+        ccapi_data = (stdccCacheDataPtr) malloc (sizeof (*ccapi_data));
+        if (!ccapi_data) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err) {
+        ccache = (krb5_ccache ) malloc (sizeof (*ccache));
+        if (!ccache) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err) {
+        name = malloc (strlen(residual) + 1);
+        if (!name) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err) {
+        err = cc_context_open_ccache (gCntrlBlock, residual,
+                                      &ccapi_data->NamedCache);
+    }
+
+    if (!err) {
+       strcpy(name, residual);        
+       ccapi_data->cache_name = name;
+        name = NULL; /* take ownership */
+
+       ccache->ops = &krb5_cc_stdcc_ops;
+       ccache->data = ccapi_data;
+        ccapi_data = NULL; /* take ownership */
+        
+        *id = ccache;
+        ccache = NULL; /* take ownership */
+    }
+    
+    if (ccache)     { free (ccache); }
+    if (ccapi_data) { free (ccapi_data); }
+    if (name)       { free (name); }
+    
+    return cc_err_xlate (err);
 }
   
 /*
@@ -372,43 +369,43 @@ errout:
  * principal if not set our principal to this principal. This
  * searching enables ticket sharing
  */
-krb5_error_code KRB5_CALLCONV  krb5_stdccv3_initialize 
-       (krb5_context context, krb5_ccache id,  krb5_principal princ) 
+krb5_error_code KRB5_CALLCONV  
+krb5_stdccv3_initialize (krb5_context context, 
+                         krb5_ccache id,  
+                         krb5_principal princ) 
 {
-       stdccCacheDataPtr       ccapi_data = NULL;
-       int                     err;
-       char                    *cName = NULL;
-       krb5_error_code         retval;
-       
-       if ((retval = stdccv3_setup(context, NULL)))
-               return retval;
-       
-       /* test id for null */
-       if (id == NULL) return KRB5_CC_NOMEM;
-       
-       if ((retval = krb5_unparse_name(context, princ, &cName)))
-               return retval;
-
-       ccapi_data = id->data;
-
-
-        if (ccapi_data->NamedCache) {
-               err = cc_ccache_release(ccapi_data->NamedCache);
-               ccapi_data->NamedCache = NULL;
-       }
-
-       err = cc_context_create_ccache(gCntrlBlock, ccapi_data->cache_name, 
-                                      cc_credentials_v5, cName,
-                                      &ccapi_data->NamedCache);
-       if (err != ccNoError) {
-               krb5_free_unparsed_name(context, cName);
-               return cc_err_xlate(err);
-       }
-
-       krb5_free_unparsed_name(context, cName);
-       cache_changed();
-       
-       return cc_err_xlate(err);
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+    char *name = NULL;
+    
+    if (id == NULL) { err = KRB5_CC_NOMEM; }
+    
+    if (!err) {
+        err = stdccv3_setup (context, NULL);
+    }
+    
+    if (!err) {
+        err = krb5_unparse_name(context, princ, &name);
+    }
+    
+    if (!err && ccapi_data->NamedCache) {
+        err = cc_ccache_release(ccapi_data->NamedCache);
+        ccapi_data->NamedCache = NULL;
+    }
+    
+    if (!err) {
+        err = cc_context_create_ccache (gCntrlBlock, ccapi_data->cache_name, 
+                                        cc_credentials_v5, name,
+                                        &ccapi_data->NamedCache);
+    }
+    
+    if (!err) {
+        cache_changed();
+    }
+    
+    if (name) { krb5_free_unparsed_name(context, name); }
+    
+    return cc_err_xlate(err);
 }
 
 /*
@@ -416,32 +413,34 @@ krb5_error_code KRB5_CALLCONV  krb5_stdccv3_initialize
  *
  * store some credentials in our cache
  */
-krb5_error_code KRB5_CALLCONV krb5_stdccv3_store 
-        (krb5_context context, krb5_ccache id, krb5_creds *creds )
+krb5_error_code KRB5_CALLCONV 
+krb5_stdccv3_store (krb5_context context, krb5_ccache id, krb5_creds *creds )
 {
-       krb5_error_code         retval;
-       stdccCacheDataPtr       ccapi_data = id->data;
-       cc_credentials_t        c = NULL;
-       int err;
-
-       if ((retval = stdccv3_setup(context, ccapi_data)))
-               return retval;
-       
-       /* copy the fields from the almost identical structures */
-       dupK5toCC3(context, creds, &c);
-                       
-       /*
-        * finally store the credential
-        * store will copy (that is duplicate) everything
-        */
-       err = cc_ccache_store_credentials(((stdccCacheDataPtr)(id->data))->NamedCache, c->data);
-       if (err != ccNoError)
-               return cc_err_xlate(err);
-             
-       err = cc_credentials_release(c);
-                
-       cache_changed();
-       return err;
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+    cc_credentials_t credentials = NULL;
+    
+    if (!err) {
+        err = stdccv3_setup (context, ccapi_data);
+    }
+    
+    if (!err) {
+        /* copy the fields from the almost identical structures */
+        err = copy_krb5_creds_to_cc_credentials (context, creds, &credentials);
+    }
+    
+    if (!err) {
+        err = cc_ccache_store_credentials (ccapi_data->NamedCache, 
+                                           credentials->data);
+    }
+    
+    if (!err) {
+        cache_changed();
+    }
+    
+    if (credentials) { cc_credentials_release (credentials); }
+    
+    return cc_err_xlate (err);
 }
 
 /*
@@ -449,23 +448,29 @@ krb5_error_code KRB5_CALLCONV krb5_stdccv3_store
  *
  * begin an iterator call to get all of the credentials in the cache
  */
-krb5_error_code KRB5_CALLCONV krb5_stdccv3_start_seq_get 
-(krb5_context context, krb5_ccache id , krb5_cc_cursor *cursor )
+krb5_error_code KRB5_CALLCONV 
+krb5_stdccv3_start_seq_get (krb5_context context, 
+                            krb5_ccache id, 
+                            krb5_cc_cursor *cursor )
 {
-       stdccCacheDataPtr               ccapi_data = id->data;
-       krb5_error_code                 retval;
-       int                             err;
-       cc_credentials_iterator_t       iterator;
-
-       if ((retval = stdccv3_setup(context, ccapi_data)))
-               return retval;
-
-       err = cc_ccache_new_credentials_iterator(ccapi_data->NamedCache,
-                                                &iterator);
-       if (err != ccNoError)
-               return cc_err_xlate(err);
-       *cursor = iterator;
-       return 0;
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+    cc_credentials_iterator_t iterator = NULL;
+    
+    if (!err) {
+        err = stdccv3_setup (context, ccapi_data);
+    }
+    
+    if (!err) {
+        err = cc_ccache_new_credentials_iterator(ccapi_data->NamedCache,
+                                                 &iterator);
+    }
+    
+    if (!err) {
+        *cursor = iterator;
+    }
+    
+    return cc_err_xlate (err);
 }
 
 /*
@@ -474,37 +479,40 @@ krb5_error_code KRB5_CALLCONV krb5_stdccv3_start_seq_get
  * - get the next credential in the cache as part of an iterator call
  * - this maps to call to cc_seq_fetch_creds
  */
-krb5_error_code KRB5_CALLCONV krb5_stdccv3_next_cred 
-        (krb5_context context, krb5_ccache id,  krb5_cc_cursor *cursor, 
-        krb5_creds *creds)
+krb5_error_code KRB5_CALLCONV 
+krb5_stdccv3_next_cred (krb5_context context, 
+                        krb5_ccache id, 
+                        krb5_cc_cursor *cursor, 
+                        krb5_creds *creds)
 {
-       krb5_error_code                 retval;
-       stdccCacheDataPtr               ccapi_data = id->data;
-       int                             err;
-       cc_credentials_t                cu;
-       cc_credentials_iterator_t       iterator;
-       
-       if ((retval = stdccv3_setup(context, ccapi_data)))
-               return retval;
-       
-       iterator = *cursor;
-       if (iterator == 0)
-               return KRB5_CC_END;
-       err = cc_credentials_iterator_next(iterator, &cu);
-
-       if (err == ccIteratorEnd) {
-               cc_credentials_iterator_release(iterator);
-               *cursor = 0;
-       }
-       if (err != ccNoError)
-               return cc_err_xlate(err);
-       
-       /* copy data    (with translation) */
-       dupCC3toK5(context, cu, creds);
-       
-       cc_credentials_release(cu);
-       
-       return 0;
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+    cc_credentials_t credentials = NULL;
+    cc_credentials_iterator_t iterator = *cursor;
+    
+    if (!iterator) { err = KRB5_CC_END; }
+    
+    if (!err) {
+        err = stdccv3_setup (context, ccapi_data);
+    }
+    
+    /* Note: CCAPI v3 ccaches can contain both v4 and v5 creds */
+    while (!err) {
+        err = cc_credentials_iterator_next (iterator, &credentials);
+
+        if (!err && (credentials->data->version == cc_credentials_v5)) {
+            copy_cc_credentials_to_krb5_creds(context, credentials, creds);
+            break;
+        }
+    }
+    
+    if (credentials) { cc_credentials_release (credentials); }
+    if (err == ccIteratorEnd) {
+        cc_credentials_iterator_release (iterator);
+        *cursor = 0;
+    }    
+    
+    return cc_err_xlate (err);
 }
 
 
@@ -514,12 +522,11 @@ krb5_error_code KRB5_CALLCONV krb5_stdccv3_next_cred
  * - try to find a matching credential in the cache
  */
 krb5_error_code KRB5_CALLCONV
-krb5_stdccv3_retrieve(context, id, whichfields, mcreds, creds)
-   krb5_context context;
-   krb5_ccache id;
-   krb5_flags whichfields;
-   krb5_creds *mcreds;
-   krb5_creds *creds;
+krb5_stdccv3_retrieve (krb5_context context, 
+                       krb5_ccache id, 
+                       krb5_flags whichfields, 
+                       krb5_creds *mcreds, 
+                       krb5_creds *creds)
 {
     return krb5_cc_retrieve_cred_default (context, id, whichfields,
                                          mcreds, creds);
@@ -530,28 +537,26 @@ krb5_stdccv3_retrieve(context, id, whichfields, mcreds, creds)
  *
  * just free up the storage assoicated with the cursor (if we can)
  */
-krb5_error_code KRB5_CALLCONV krb5_stdccv3_end_seq_get 
-        (krb5_context context, krb5_ccache id, krb5_cc_cursor *cursor)
+krb5_error_code KRB5_CALLCONV 
+krb5_stdccv3_end_seq_get (krb5_context context, 
+                          krb5_ccache id, 
+                          krb5_cc_cursor *cursor)
 {
-       krb5_error_code                 retval;
-       stdccCacheDataPtr               ccapi_data = NULL;
-       int                             err;
-        cc_credentials_iterator_t      iterator;
-
-       ccapi_data = id->data;
-       
-        if ((retval = stdccv3_setup(context, ccapi_data)))
-               return retval;
-
-       if (*cursor == NULL)
-               return 0;
-
-        iterator = *cursor;
-
-       err = cc_credentials_iterator_release(iterator);
-       if (err != ccNoError)
-               return cc_err_xlate(err);
-       return(0);
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+    cc_credentials_iterator_t iterator = *cursor;
+    
+    if (!iterator) { return 0; }
+    
+    if (!err) {
+        err = stdccv3_setup (context, ccapi_data);
+    }
+    
+    if (!err) {
+        err = cc_credentials_iterator_release(iterator);
+    }
+    
+    return cc_err_xlate(err);
 }
      
 /*
@@ -560,26 +565,31 @@ krb5_error_code KRB5_CALLCONV krb5_stdccv3_end_seq_get
  * - free our pointers to the NC
  */
 krb5_error_code KRB5_CALLCONV 
-krb5_stdccv3_close(krb5_context context, krb5_ccache id)
+krb5_stdccv3_close(krb5_context context, 
+                   krb5_ccache id)
 {
-       krb5_error_code retval;
-       stdccCacheDataPtr       ccapi_data = id->data;
-
-       if ((retval = stdccv3_setup(context, NULL)))
-               return retval;
-       
-       /* free it */
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+    
+    if (!err) {
+        err = stdccv3_setup (context, NULL);
+    }
+    
+    if (!err) {
        if (ccapi_data) {
-               if (ccapi_data->cache_name)
-                       free(ccapi_data->cache_name);
-               if (ccapi_data->NamedCache)
-                       cc_ccache_release(ccapi_data->NamedCache);
-               free(ccapi_data);
-               id->data = NULL;
+            if (ccapi_data->cache_name) { 
+                free (ccapi_data->cache_name); 
+            }
+            if (ccapi_data->NamedCache) { 
+                err = cc_ccache_release (ccapi_data->NamedCache); 
+            }
+            free (ccapi_data);
+            id->data = NULL;
        }
-       free(id);
-       
-       return 0;
+       free (id);        
+    }
+    
+    return cc_err_xlate(err);
 }
 
 /*
@@ -588,37 +598,36 @@ krb5_stdccv3_close(krb5_context context, krb5_ccache id)
  * - free our storage and the cache
  */
 krb5_error_code KRB5_CALLCONV
-krb5_stdccv3_destroy (krb5_context context, krb5_ccache id)
+krb5_stdccv3_destroy (krb5_context context, 
+                      krb5_ccache id)
 {
-       int err;
-       krb5_error_code retval;
-       stdccCacheDataPtr       ccapi_data = id->data;
-
-       if ((retval = stdccv3_setup(context, ccapi_data))) {
-               return retval;
-       }
-
-       /* free memory associated with the krb5_ccache */
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+   
+    if (!err) {
+        err = stdccv3_setup(context, ccapi_data);
+    }
+    
+    if (!err) {
        if (ccapi_data) {
-               if (ccapi_data->cache_name)
-                       free(ccapi_data->cache_name);
-               if (ccapi_data->NamedCache) {
-                       /* destroy the named cache */
-                       err = cc_ccache_destroy(ccapi_data->NamedCache);
-                       retval = cc_err_xlate(err);
-                       cache_changed();
-               }
-               free(ccapi_data);
-               id->data = NULL;
+            if (ccapi_data->cache_name) { 
+                free(ccapi_data->cache_name); 
+            }
+            if (ccapi_data->NamedCache) {
+                /* destroy the named cache */
+                err = cc_ccache_destroy(ccapi_data->NamedCache);
+                if (err == ccErrCCacheNotFound) { 
+                    err = 0; /* ccache maybe already destroyed */
+                }
+                cache_changed();
+            }
+            free(ccapi_data);
+            id->data = NULL;
        }
-       free(id);
-
-       /* If the cache does not exist when we tried to destroy it,
-          that's fine.  That means someone else destroyed it since
-          we resolved it. */
-       if (retval == ccErrCCacheNotFound)
-               return 0;
-       return retval;
+       free(id);        
+    }
+    
+    return cc_err_xlate(err);
 }
 
 /*
@@ -626,15 +635,17 @@ krb5_stdccv3_destroy (krb5_context context, krb5_ccache id)
  *
  * - return the name of the named cache
  */
-const char * KRB5_CALLCONV krb5_stdccv3_get_name 
-        (krb5_context context, krb5_ccache id )
+const char * KRB5_CALLCONV 
+krb5_stdccv3_get_name (krb5_context context, 
+                       krb5_ccache id )
 {
-       stdccCacheDataPtr       ccapi_data = id->data;
-
-       if (!ccapi_data)
-               return 0;
-
-       return (ccapi_data->cache_name);
+    stdccCacheDataPtr ccapi_data = id->data;
+    
+    if (!ccapi_data) {
+        return NULL;
+    } else {
+        return (ccapi_data->cache_name);
+    }
 }
 
 
@@ -642,29 +653,30 @@ const char * KRB5_CALLCONV krb5_stdccv3_get_name
  *
  * - return the principal associated with the named cache
  */
-krb5_error_code KRB5_CALLCONV krb5_stdccv3_get_principal
-       (krb5_context context, krb5_ccache id , krb5_principal *princ) 
+krb5_error_code KRB5_CALLCONV 
+krb5_stdccv3_get_principal (krb5_context context, 
+                            krb5_ccache id , 
+                            krb5_principal *princ) 
 {
-       int                     err;
-       cc_string_t             name = NULL;
-       stdccCacheDataPtr       ccapi_data = id->data;
-       krb5_error_code         retval;
-       
-       if ((retval = stdccv3_setup(context, ccapi_data)))
-               return retval;
-
-       /* another wrapper */
-       err = cc_ccache_get_principal(ccapi_data->NamedCache, cc_credentials_v5, &name);
-
-       if (err != ccNoError) 
-               return cc_err_xlate(err);
-               
-       /* turn it into a krb principal */
-       err = krb5_parse_name(context, name->data, princ);
-
-       cc_string_release(name);
-       
-       return err;     
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+    cc_string_t name = NULL;
+    
+    if (!err) {
+        err = stdccv3_setup(context, ccapi_data);
+    }
+    
+    if (!err) {
+        err = cc_ccache_get_principal (ccapi_data->NamedCache, cc_credentials_v5, &name);
+    }
+    
+    if (!err) {
+        err = krb5_parse_name (context, name->data, princ);
+    }
+    
+    if (name) { cc_string_release (name); }
+    
+    return cc_err_xlate (err);
 }
 
 /*
@@ -672,16 +684,17 @@ krb5_error_code KRB5_CALLCONV krb5_stdccv3_get_principal
  *
  * - currently a NOP since we don't store any flags in the NC
  */
-krb5_error_code KRB5_CALLCONV krb5_stdccv3_set_flags 
-        (krb5_context context, krb5_ccache id , krb5_flags flags)
+krb5_error_code KRB5_CALLCONV 
+krb5_stdccv3_set_flags (krb5_context context, 
+                        krb5_ccache id, 
+                        krb5_flags flags)
 {
-       stdccCacheDataPtr       ccapi_data = id->data;
-       krb5_error_code         retval;
-       
-       if ((retval = stdccv3_setup(context, ccapi_data)))
-               return retval;
-
-       return 0;
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+    
+    err = stdccv3_setup (context, ccapi_data);
+    
+    return cc_err_xlate (err);
 }
 
 /*
@@ -689,16 +702,17 @@ krb5_error_code KRB5_CALLCONV krb5_stdccv3_set_flags
  *
  * - currently a NOP since we don't store any flags in the NC
  */
-krb5_error_code KRB5_CALLCONV krb5_stdccv3_get_flags 
-        (krb5_context context, krb5_ccache id , krb5_flags *flags)
+krb5_error_code KRB5_CALLCONV 
+krb5_stdccv3_get_flags (krb5_context context, 
+                        krb5_ccache id, 
+                        krb5_flags *flags)
 {
-       stdccCacheDataPtr       ccapi_data = id->data;
-       krb5_error_code         retval;
-       
-       if ((retval = stdccv3_setup(context, ccapi_data)))
-               return retval;
-
-       return 0;
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+    
+    err = stdccv3_setup (context, ccapi_data);
+    
+    return cc_err_xlate (err);
 }
 
 /*
@@ -706,37 +720,41 @@ krb5_error_code KRB5_CALLCONV krb5_stdccv3_get_flags
  *
  * - remove the specified credentials from the NC
  */
-krb5_error_code KRB5_CALLCONV krb5_stdccv3_remove 
-        (krb5_context context, krb5_ccache id,
-        krb5_flags flags, krb5_creds *creds)
+krb5_error_code KRB5_CALLCONV 
+krb5_stdccv3_remove (krb5_context context, 
+                     krb5_ccache id,
+                     krb5_flags flags, 
+                     krb5_creds *creds)
 {
-       cc_credentials_t        c = NULL;
-       int                     err;
-       stdccCacheDataPtr       ccapi_data = id->data;
-       krb5_error_code         retval;
-       
-       if ((retval = stdccv3_setup(context, ccapi_data))) {
-               if (retval == KRB5_FCC_NOFILE)
-                       return 0;
-               return retval;
-       }
-       
-       /* convert to a cred union */
-       dupK5toCC3(context, creds, &c);
-       
-       /* remove it */
-       err = cc_ccache_remove_credentials(ccapi_data->NamedCache, c);
-       if (err != ccNoError)
-               return cc_err_xlate(err);
-       
-       err = cc_credentials_release(c);
-       cache_changed();
-       if (err != ccNoError)
-               return cc_err_xlate(err);
-
-        return 0;
+    krb5_error_code err = 0;
+    stdccCacheDataPtr ccapi_data = id->data;
+    cc_credentials_t credentials = NULL;
+    
+    if (!err) {
+        err = stdccv3_setup(context, ccapi_data);
+    }
+    
+    if (!err) {
+        err = copy_krb5_creds_to_cc_credentials (context, creds, &credentials);
+    }
+    
+    if (!err) {
+        err = cc_ccache_remove_credentials (ccapi_data->NamedCache, credentials);
+    }
+    
+    if (!err) {
+        cache_changed ();
+    } else if (err == KRB5_FCC_NOFILE) {
+        err = 0;
+    }
+    
+    if (credentials) { cc_credentials_release (credentials); }
+    
+    return cc_err_xlate (err);
 }
+
 #else /* !USE_CCAPI_V3 */
+
 static krb5_error_code stdcc_setup(krb5_context context,
                                   stdccCacheDataPtr ccapi_data)
 {
@@ -797,7 +815,7 @@ krb5_error_code KRB5_CALLCONV  krb5_stdcc_generate_new
        krb5_error_code         retval;
        stdccCacheDataPtr       ccapi_data = NULL;
        char                    *name = NULL;
-       cc_time_t               time;
+       cc_time_t               change_time;
        int                     err;
 
        if ((retval = stdcc_setup(context, NULL)))
@@ -812,8 +830,8 @@ krb5_error_code KRB5_CALLCONV  krb5_stdcc_generate_new
                goto errout;
        
        /* create a unique name */
-       cc_get_change_time(gCntrlBlock, &time);
-       sprintf(name, "gen_new_cache%d", time);
+       cc_get_change_time(gCntrlBlock, &change_time);
+       sprintf(name, "gen_new_cache%d", change_time);
        
        /* create the new cache */
        err = cc_create(gCntrlBlock, name, name, CC_CRED_V5, 0L,
@@ -878,9 +896,14 @@ krb5_error_code KRB5_CALLCONV  krb5_stdcc_resolve
        
        err = cc_open(gCntrlBlock, cName, CC_CRED_V5, 0L,
                      &ccapi_data->NamedCache);
-        if (err != CC_NOERROR)
+        if (err != CC_NOERROR) {
                ccapi_data->NamedCache = NULL;
-
+               if (err != CC_NO_EXIST) {
+                       retval = cc_err_xlate(err);
+                       goto errout;
+               }
+        }
+        
        /* return new cache structure */
        *id = newCache;
        
@@ -1358,4 +1381,4 @@ krb5_error_code KRB5_CALLCONV krb5_stdcc_remove
 
         return 0;
 }
-#endif /* !USE_CCAPI_V3 */
\ No newline at end of file
+#endif /* !USE_CCAPI_V3 */
index c0ce13b420494017b98d9cf61efc37a6a22c6c31..03948d1a848fe23a9ac3156c6a5f2a585ce5587e 100644 (file)
@@ -141,4 +141,4 @@ krb5_error_code KRB5_CALLCONV krb5_stdcc_get_flags
 
 krb5_error_code KRB5_CALLCONV krb5_stdcc_remove 
         (krb5_context, krb5_ccache id , krb5_flags flags, krb5_creds *creds);
-#endif
\ No newline at end of file
+#endif
index 1969b6e718af29341818d82741be5cb263d99b5c..2e6538ccaf3438985a6db9eb0e0acfddc3978c97 100644 (file)
 /* krb5int_cc_credentials_release(cc_credentials_t creds)
  * - function used to release internally generated cc_credentials_t objects
  */
+
+static void 
+free_cc_array (cc_data **io_cc_array)
+{
+    if (io_cc_array) {
+        unsigned int i;
+        
+        for (i = 0; io_cc_array[i]; i++) {
+            if (io_cc_array[i]->data) { free (io_cc_array[i]->data); }
+            free (io_cc_array[i]);
+        }
+        free (io_cc_array);
+    }    
+}
+
 static cc_int32 
-krb5int_cc_credentials_release(cc_credentials_t creds) {
-    free(creds);
+krb5int_cc_credentials_release(cc_credentials_t creds) 
+{
+    if (creds) {
+        if (creds->data) {
+            if (creds->data->version == cc_credentials_v5 &&
+                creds->data->credentials.credentials_v5) {
+                cc_credentials_v5_t *cv5 = creds->data->credentials.credentials_v5;
+                
+                /* should use krb5_free_unparsed_name but we have no context */
+                if (cv5->client) { free (cv5->client); }
+                if (cv5->server) { free (cv5->server); }
+                
+                if (cv5->keyblock.data)      { free (cv5->keyblock.data); }
+                if (cv5->ticket.data)        { free (cv5->ticket.data); }
+                if (cv5->second_ticket.data) { free (cv5->second_ticket.data); }
+                
+                free_cc_array (cv5->addresses);
+                free_cc_array (cv5->authdata);
+                
+                free (cv5);
+                
+            } else if (creds->data->version == cc_credentials_v4 &&
+                       creds->data->credentials.credentials_v4) {
+                free (creds->data->credentials.credentials_v4);
+            }
+            free ((cc_credentials_union *) creds->data);
+        }
+        free(creds);
+    }
+    
     return ccNoError;
 }
 
@@ -36,381 +79,488 @@ krb5int_cc_credentials_compare(cc_credentials_t creds,
     return ccErrNotImplemented;
 }
 
-/*
- * CopyCC3DataArrayToK5
- * - copy and translate the null terminated arrays of data records
- *      used in k5 tickets
- */
-int 
-copyCC3DataArrayToK5(cc_credentials_v5_t *ccCreds, krb5_creds *v5Creds, char whichArray) {
-
-    switch (whichArray) {
-    case kAddressArray: 
-       if (ccCreds->addresses == NULL) {
-           v5Creds->addresses = NULL;
-       } else {
-
-           krb5_address        **addrPtr, *addr;
-           cc_data             **dataPtr, *data;
-           unsigned int        numRecords = 0;
-
-           /* Allocate the array of pointers: */
-           for (dataPtr = ccCreds->addresses; *dataPtr != NULL; numRecords++, dataPtr++) {}
-
-           v5Creds->addresses = (krb5_address **) malloc (sizeof(krb5_address *) * (numRecords + 1));
-           if (v5Creds->addresses == NULL)
-               return ENOMEM;
-
-           /* Fill in the array, allocating the address structures: */
-           for (dataPtr = ccCreds->addresses, addrPtr = v5Creds->addresses; *dataPtr != NULL; addrPtr++, dataPtr++) {
-
-               *addrPtr = (krb5_address *) malloc (sizeof(krb5_address));
-               if (*addrPtr == NULL)
-                   return ENOMEM;
-               data = *dataPtr;
-               addr = *addrPtr;
-
-               addr->addrtype = data->type;
-               addr->magic    = KV5M_ADDRESS;
-               addr->length   = data->length;
-               addr->contents = (krb5_octet *) malloc (sizeof(krb5_octet) * addr->length);
-               if (addr->contents == NULL)
-                   return ENOMEM;
-               memmove(addr->contents, data->data, addr->length); /* copy contents */
-           }
-
-           /* Write terminator: */
-           *addrPtr = NULL;
-       }
-       break;
-    case kAuthDataArray:
-       if (ccCreds->authdata == NULL) {
-           v5Creds->authdata = NULL;
-       } else {
-           krb5_authdata       **authPtr, *auth;
-           cc_data             **dataPtr, *data;
-           unsigned int        numRecords = 0;
-
-           /* Allocate the array of pointers: */
-           for (dataPtr = ccCreds->authdata; *dataPtr != NULL; numRecords++, dataPtr++) {}
-
-           v5Creds->authdata = (krb5_authdata **) malloc (sizeof(krb5_authdata *) * (numRecords + 1));
-           if (v5Creds->authdata == NULL)
-               return ENOMEM;
-
-           /* Fill in the array, allocating the address structures: */
-           for (dataPtr = ccCreds->authdata, authPtr = v5Creds->authdata; *dataPtr != NULL; authPtr++, dataPtr++) {
-
-               *authPtr = (krb5_authdata *) malloc (sizeof(krb5_authdata));
-               if (*authPtr == NULL)
-                   return ENOMEM;
-               data = *dataPtr;
-               auth = *authPtr;
-
-               auth->ad_type  = data->type;
-               auth->magic    = KV5M_AUTHDATA;
-               auth->length   = data->length;
-               auth->contents = (krb5_octet *) malloc (sizeof(krb5_octet) * auth->length);
-               if (auth->contents == NULL)
-                   return ENOMEM;
-               memmove(auth->contents, data->data, auth->length); /* copy contents */
-           }
-
-           /* Write terminator: */
-           *authPtr = NULL;
-       }
-       break;
+static krb5_error_code 
+copy_cc_array_to_addresses (krb5_context in_context, 
+                            cc_data **in_cc_array, 
+                            krb5_address ***out_addresses)
+{
+    krb5_error_code err = 0;
+    
+    if (in_cc_array == NULL) {
+        *out_addresses = NULL;
+        
+    } else {
+        unsigned int count, i;
+        krb5_address **addresses = NULL;
+
+        /* get length of array */
+        for (count = 0; in_cc_array[count]; count++);
+        addresses = (krb5_address **) malloc (sizeof (*addresses) * (count + 1));
+        if (!addresses) { err = KRB5_CC_NOMEM; }
+        
+        for (i = 0; !err && i < count; i++) { 
+            addresses[i] = (krb5_address *) malloc (sizeof (krb5_address));
+            if (!addresses[i]) { err = KRB5_CC_NOMEM; }
+            
+            if (!err) {
+                addresses[i]->contents = (krb5_octet *) malloc (sizeof (krb5_octet) * 
+                                                            in_cc_array[i]->length);
+                if (!addresses[i]->contents) { err = KRB5_CC_NOMEM; }
+            }
+            
+            if (!err) {
+                addresses[i]->magic = KV5M_ADDRESS;
+                addresses[i]->addrtype = in_cc_array[i]->type;
+                addresses[i]->length = in_cc_array[i]->length;
+                memcpy (addresses[i]->contents, 
+                        in_cc_array[i]->data, in_cc_array[i]->length);
+            }
+        }
+        
+        if (!err) {
+            addresses[i] = NULL; /* terminator */
+            *out_addresses = addresses;
+            addresses = NULL;
+        }
+
+        if (addresses) { krb5_free_addresses (in_context, addresses); }
     }
-
-    return 0;
+    
+    return err;
 }
 
-/*
- * copyK5DataArrayToCC
- * - analagous to above, but in the other direction
- */
-int 
-copyK5DataArrayToCC3(krb5_creds *v5Creds, cc_credentials_v5_t * ccCreds, char whichArray)
+static krb5_error_code 
+copy_cc_array_to_authdata (krb5_context in_context, 
+                           cc_data **in_cc_array, 
+                           krb5_authdata ***out_authdata)
 {
-    switch (whichArray) {
-    case kAddressArray:
-       if (v5Creds->addresses == NULL) {
-           ccCreds->addresses = NULL;
-       } else {
-
-           krb5_address        **addrPtr, *addr;
-           cc_data             **dataPtr, *data;
-           unsigned int        numRecords = 0;
-
-           /* Allocate the array of pointers: */
-           for (addrPtr = v5Creds->addresses; *addrPtr != NULL; numRecords++, addrPtr++) {}
-
-           ccCreds->addresses = (cc_data **) malloc (sizeof(cc_data *) * (numRecords + 1));
-           if (ccCreds->addresses == NULL)
-               return ENOMEM;
-
-           /* Fill in the array, allocating the address structures: */
-           for (dataPtr = ccCreds->addresses, addrPtr = v5Creds->addresses; *addrPtr != NULL; addrPtr++, dataPtr++) {
-
-               *dataPtr = (cc_data *) malloc (sizeof(cc_data));
-               if (*dataPtr == NULL)
-                   return ENOMEM;
-               data = *dataPtr;
-               addr = *addrPtr;
-
-               data->type   = addr->addrtype;
-               data->length = addr->length;
-               data->data   = malloc (sizeof(char) * data->length);
-               if (data->data == NULL)
-                   return ENOMEM;
-               memmove(data->data, addr->contents, data->length); /* copy contents */
-           }
-
-           /* Write terminator: */
-           *dataPtr = NULL;
-       }
-       break;
-    case kAuthDataArray:
-       if (v5Creds->authdata == NULL) {
-           ccCreds->authdata = NULL;
-       } else {
-           krb5_authdata       **authPtr, *auth;
-           cc_data                     **dataPtr, *data;
-           unsigned int                        numRecords = 0;
-
-           /* Allocate the array of pointers: */
-           for (authPtr = v5Creds->authdata; *authPtr != NULL; numRecords++, authPtr++) {}
-
-           ccCreds->authdata = (cc_data **) malloc (sizeof(cc_data *) * (numRecords + 1));
-           if (ccCreds->authdata == NULL)
-               return ENOMEM;
-
-           /* Fill in the array, allocating the address structures: */
-           for (dataPtr = ccCreds->authdata, authPtr = v5Creds->authdata; *authPtr != NULL; authPtr++, dataPtr++) {
-
-               *dataPtr = (cc_data *) malloc (sizeof(cc_data));
-               if (*dataPtr == NULL)
-                   return ENOMEM;
-               data = *dataPtr;
-               auth = *authPtr;
-
-               data->type   = auth->ad_type;
-               data->length = auth->length;
-               data->data   = malloc (sizeof(char) * data->length);
-               if (data->data == NULL)
-                   return ENOMEM;
-               memmove(data->data, auth->contents, data->length); /* copy contents */
-           }
+    krb5_error_code err = 0;
+    
+    if (in_cc_array == NULL) {
+        *out_authdata = NULL;
+        
+    } else {
+        unsigned int count, i;
+        krb5_authdata **authdata = NULL;
+        
+        /* get length of array */
+        for (count = 0; in_cc_array[count]; count++);
+        authdata = (krb5_authdata **) malloc (sizeof (*authdata) * (count + 1));
+        if (!authdata) { err = KRB5_CC_NOMEM; }
+        
+        for (i = 0; !err && i < count; i++) { 
+            authdata[i] = (krb5_authdata *) malloc (sizeof (krb5_authdata));
+            if (!authdata[i]) { err = KRB5_CC_NOMEM; }
+            
+            if (!err) {
+                authdata[i]->contents = (krb5_octet *) malloc (sizeof (krb5_octet) * 
+                                                           in_cc_array[i]->length);
+                if (!authdata[i]->contents) { err = KRB5_CC_NOMEM; }
+            }
+            
+            if (!err) {
+                authdata[i]->magic = KV5M_AUTHDATA;
+                authdata[i]->ad_type = in_cc_array[i]->type;
+                authdata[i]->length = in_cc_array[i]->length;
+                memcpy (authdata[i]->contents, 
+                        in_cc_array[i]->data, in_cc_array[i]->length);
+            }
+        }
+        
+        if (!err) {
+            authdata[i] = NULL; /* terminator */
+            *out_authdata = authdata;
+            authdata = NULL;
+        }
+        
+        if (authdata) { krb5_free_authdata (in_context, authdata); }
+    }
+    
+    return err;
+}
 
-           /* Write terminator: */
-           *dataPtr = NULL;
-       }
-       break;
+static krb5_error_code 
+copy_addresses_to_cc_array (krb5_context in_context, 
+                            krb5_address **in_addresses, 
+                            cc_data ***out_cc_array)
+{
+    krb5_error_code err = 0;
+    
+    if (in_addresses == NULL) {
+        *out_cc_array = NULL;
+        
+    } else {
+        unsigned int count, i;
+        cc_data **cc_array = NULL;
+
+        /* get length of array */
+        for (count = 0; in_addresses[count]; count++);
+        cc_array = (cc_data **) malloc (sizeof (*cc_array) * (count + 1));
+        if (!cc_array) { err = KRB5_CC_NOMEM; }
+    
+        for (i = 0; !err && i < count; i++) { 
+            cc_array[i] = (cc_data *) malloc (sizeof (cc_data));
+            if (!cc_array[i]) { err = KRB5_CC_NOMEM; }
+            
+            if (!err) {
+                cc_array[i]->data = malloc (in_addresses[i]->length);
+                if (!cc_array[i]->data) { err = KRB5_CC_NOMEM; }
+            }
+            
+            if (!err) {
+                cc_array[i]->type = in_addresses[i]->addrtype;
+                cc_array[i]->length = in_addresses[i]->length;
+                memcpy (cc_array[i]->data, in_addresses[i]->contents, in_addresses[i]->length);
+            }
+        }
+        
+        if (!err) {
+            cc_array[i] = NULL; /* terminator */
+            *out_cc_array = cc_array;
+            cc_array = NULL;
+        }
+
+        if (cc_array) { free_cc_array (cc_array); }
     }
+    
+    
+    return err;
+}
 
-    return 0;
+static krb5_error_code 
+copy_authdata_to_cc_array (krb5_context in_context, 
+                           krb5_authdata **in_authdata, 
+                           cc_data ***out_cc_array)
+{
+    krb5_error_code err = 0;
+    
+    if (in_authdata == NULL) {
+        *out_cc_array = NULL;
 
+    } else {
+        unsigned int count, i;
+        cc_data **cc_array = NULL;
+
+        /* get length of array */
+        for (count = 0; in_authdata[count]; count++);
+        cc_array = (cc_data **) malloc (sizeof (*cc_array) * (count + 1));
+        if (!cc_array) { err = KRB5_CC_NOMEM; }
+    
+        for (i = 0; !err && i < count; i++) { 
+            cc_array[i] = (cc_data *) malloc (sizeof (cc_data));
+            if (!cc_array[i]) { err = KRB5_CC_NOMEM; }
+            
+            if (!err) {
+                cc_array[i]->data = malloc (in_authdata[i]->length);
+                if (!cc_array[i]->data) { err = KRB5_CC_NOMEM; }
+            }
+            
+            if (!err) {
+                cc_array[i]->type = in_authdata[i]->ad_type;
+                cc_array[i]->length = in_authdata[i]->length;
+                memcpy (cc_array[i]->data, in_authdata[i]->contents, in_authdata[i]->length);
+            }
+        }
+        
+        if (!err) {
+            cc_array[i] = NULL; /* terminator */
+            *out_cc_array = cc_array;
+            cc_array = NULL;
+        }
+
+        if (cc_array) { free_cc_array (cc_array); }
+    }
+    
+    
+    return err;
 }
 
+
 /*
- * dupCC3toK5
+ * copy_cc_credentials_to_krb5_creds
  * - allocate an empty k5 style ticket and copy info from the cc_creds ticket
  */
 
-krb5_error_code
-dupCC3toK5(krb5_context context, cc_credentials_t src, krb5_creds *dest)
+krb5_error_code 
+copy_cc_credentials_to_krb5_creds (krb5_context in_context, 
+                                   cc_credentials_t in_credentials, 
+                                   krb5_creds *out_creds)
 {
-    const cc_credentials_union         *cu = src->data;
-    cc_credentials_v5_t                *cv5;
+    krb5_error_code err = 0;
+    const cc_credentials_union *cred_union = in_credentials->data;
+    cc_credentials_v5_t *cv5 = NULL;
     krb5_int32 offset_seconds = 0, offset_microseconds = 0;
-    krb5_error_code err;
-
-    if (cu->version != cc_credentials_v5) 
-       return KRB5_CC_NOT_KTYPE;
-
-    cv5 = cu->credentials.credentials_v5;
-
-    /*
-     * allocate and copy
-     * copy all of those damn fields back
-     */
-    err = krb5_parse_name(context, cv5->client, &(dest->client));
-    err = krb5_parse_name(context, cv5->server, &(dest->server));
-    if (err) 
-       return err; /* parsename fails w/o krb5.ini for example */
-
-    /* copy keyblock */
-    dest->keyblock.enctype = cv5->keyblock.type;
-    dest->keyblock.length = cv5->keyblock.length;
-    dest->keyblock.contents = (krb5_octet *)malloc(dest->keyblock.length);
-    memcpy(dest->keyblock.contents, cv5->keyblock.data, dest->keyblock.length);
-
-    /* copy times */
+    krb5_principal client = NULL;
+    krb5_principal server = NULL;
+    char *ticket_data = NULL;
+    char *second_ticket_data = NULL;
+    unsigned char *keyblock_contents = NULL;
+    krb5_address **addresses = NULL;
+    krb5_authdata **authdata = NULL;
+    
+    if (cred_union->version != cc_credentials_v5) { 
+       err = KRB5_CC_NOT_KTYPE;
+    } else {
+        cv5 = cred_union->credentials.credentials_v5;
+    }
+    
 #if TARGET_OS_MAC
-    err = krb5_get_time_offsets(context, &offset_seconds, &offset_microseconds);
-    if (err) 
-       return err;
+    if (!err) {
+        err = krb5_get_time_offsets (in_context, &offset_seconds, &offset_microseconds);
+    }
 #endif
-    dest->times.authtime   = cv5->authtime     + offset_seconds;
-    dest->times.starttime  = cv5->starttime    + offset_seconds;
-    dest->times.endtime    = cv5->endtime      + offset_seconds;
-    dest->times.renew_till = cv5->renew_till   + offset_seconds;
-    dest->is_skey          = cv5->is_skey;
-    dest->ticket_flags     = cv5->ticket_flags;
-
-    /* more branching fields */
-    err = copyCC3DataArrayToK5(cv5, dest, kAddressArray);
-    if (err) 
-       return err;
-
-    /* first ticket */
-    dest->ticket.length = cv5->ticket.length;
-    dest->ticket.data = (char *)malloc(cv5->ticket.length);
-    memcpy(dest->ticket.data, cv5->ticket.data, cv5->ticket.length);
-
-    /* second ticket */
-    dest->second_ticket.length = cv5->second_ticket.length;
-    (dest->second_ticket).data = ( char *)malloc(cv5->second_ticket.length);
-    memcpy(dest->second_ticket.data, cv5->second_ticket.data, cv5->second_ticket.length);
-
-    /* zero out magic number */
-    dest->magic = 0;
-
-    /* authdata */
-    err = copyCC3DataArrayToK5(cv5, dest, kAuthDataArray);
-    if (err) 
-       return err;
-
-    return 0;
+    
+    if (!err) {
+        err = krb5_parse_name (in_context, cv5->client, &client);
+    }
+    
+    if (!err) {
+        err = krb5_parse_name (in_context, cv5->server, &server);
+    }
+    
+    if (!err && cv5->keyblock.data) {
+        keyblock_contents = (unsigned char *) malloc (cv5->keyblock.length);
+        if (!keyblock_contents) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err && cv5->ticket.data) {
+        ticket_data = (char *) malloc (cv5->ticket.length);
+        if (!ticket_data) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err && cv5->second_ticket.data) {
+        second_ticket_data = (char *) malloc (cv5->second_ticket.length);
+        if (!second_ticket_data) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err) {
+        /* addresses */
+        err = copy_cc_array_to_addresses (in_context, cv5->addresses, &addresses);
+    }
+    if (!err) {
+        /* authdata */
+        err = copy_cc_array_to_authdata (in_context, cv5->authdata, &authdata);
+    }
+    
+    if (!err) {
+        /* principals */
+        out_creds->client = client;
+        client = NULL;
+        out_creds->server = server;
+        server = NULL;
+        
+        /* copy keyblock */
+        if (cv5->keyblock.data) {
+            memcpy (keyblock_contents, cv5->keyblock.data, cv5->keyblock.length);
+        }
+        out_creds->keyblock.enctype = cv5->keyblock.type;
+        out_creds->keyblock.length = cv5->keyblock.length;
+        out_creds->keyblock.contents = keyblock_contents;
+        keyblock_contents = NULL;
+
+        /* copy times */
+        out_creds->times.authtime   = cv5->authtime     + offset_seconds;
+        out_creds->times.starttime  = cv5->starttime    + offset_seconds;
+        out_creds->times.endtime    = cv5->endtime      + offset_seconds;
+        out_creds->times.renew_till = cv5->renew_till   + offset_seconds;
+        out_creds->is_skey          = cv5->is_skey;
+        out_creds->ticket_flags     = cv5->ticket_flags;
+
+        /* first ticket */
+        if (cv5->ticket.data) {
+            memcpy(ticket_data, cv5->ticket.data, cv5->ticket.length);
+        }
+        out_creds->ticket.length = cv5->ticket.length;
+        out_creds->ticket.data = ticket_data;
+        ticket_data = NULL;
+        
+        /* second ticket */
+        if (cv5->second_ticket.data) {
+            memcpy(second_ticket_data, cv5->second_ticket.data, cv5->second_ticket.length);
+        }
+        out_creds->second_ticket.length = cv5->second_ticket.length;
+        out_creds->second_ticket.data = second_ticket_data;
+        second_ticket_data = NULL;
+        
+        out_creds->addresses = addresses;
+        addresses = NULL;
+
+        out_creds->authdata = authdata;
+        authdata = NULL;
+        
+        /* zero out magic number */
+        out_creds->magic = 0;
+    }
+    
+    if (addresses)          { krb5_free_addresses (in_context, addresses); }
+    if (authdata)           { krb5_free_authdata (in_context, authdata); }
+    if (keyblock_contents)  { free (keyblock_contents); }
+    if (ticket_data)        { free (ticket_data); }
+    if (second_ticket_data) { free (second_ticket_data); }
+    if (client)             { krb5_free_principal (in_context, client); }
+    if (server)             { krb5_free_principal (in_context, server); }
+    
+    return err;
 }
 
 /*
- * dupK5toCC3
+ * copy_krb5_creds_to_cc_credentials
  * - analagous to above but in the reverse direction
  */
 krb5_error_code
-dupK5toCC3(krb5_context context, krb5_creds *src, cc_credentials_t *dest)
+copy_krb5_creds_to_cc_credentials (krb5_context in_context, 
+                                   krb5_creds *in_creds, 
+                                   cc_credentials_t *out_credentials)
 {
-    cc_credentials_v5_t *c;
-    cc_credentials_union *cu;
-    cc_credentials_f    *f;
-    int err;
+    krb5_error_code err = 0;
+    cc_credentials_t credentials = NULL;
+    cc_credentials_union *cred_union = NULL;
+    cc_credentials_f    *functions = NULL;
+    cc_credentials_v5_t *cv5 = NULL;
+    char *client = NULL;
+    char *server = NULL;
+    unsigned char *ticket_data = NULL;
+    unsigned char *second_ticket_data = NULL;
+    unsigned char *keyblock_data = NULL;
     krb5_int32 offset_seconds = 0, offset_microseconds = 0;
-    cc_credentials_t           creds = NULL;
-
-    if (dest == NULL) 
-       return KRB5_CC_NOMEM;
-
-    /* allocate the cc_credentials_t */
-    creds = (cc_credentials_t)malloc(sizeof(cc_credentials_d));
-    if (!creds) {
-       err = KRB5_CC_NOMEM;
-       goto cleanup;
+    cc_data **cc_address_array = NULL;
+    cc_data **cc_authdata_array = NULL;
+    
+    if (out_credentials == NULL) { err = KRB5_CC_NOMEM; }
+    
+#if TARGET_OS_MAC
+    if (!err) {
+        err = krb5_get_time_offsets (in_context, &offset_seconds, &offset_microseconds);
     }
-
-    /* allocate the cred_union */
-    creds->data = NULL;
-    creds->functions = NULL;
-#ifdef TARGET_OS_MAC
-    creds->otherFunctions = NULL;
 #endif
-    f = (cc_credentials_f *)malloc(sizeof(cc_credentials_f));
-    if (!f) {
-       err = KRB5_CC_NOMEM;
-       goto cleanup;
+    
+    if (!err) {
+        credentials = (cc_credentials_t) malloc (sizeof (*credentials));
+        if (!credentials) { err = KRB5_CC_NOMEM; }
     }
-    creds->functions = f;
-
-    cu = (cc_credentials_union *)malloc(sizeof(cc_credentials_union));
-    if (!creds->data) {
-       err = KRB5_CC_NOMEM;
-       goto cleanup;
+    
+    if (!err) {
+        functions = (cc_credentials_f *) malloc (sizeof (*functions));
+        if (!functions) { err = KRB5_CC_NOMEM; }
     }
-    creds->data = cu; 
-
-    f->release = krb5int_cc_credentials_release;
-    f->compare = krb5int_cc_credentials_compare;
-
-    cu->version = cc_credentials_v5;
-
-    c = (cc_credentials_v5_t*)malloc(sizeof(cc_credentials_v5_t));
-    if (!c) {
-       err = KRB5_CC_NOMEM;
-       goto cleanup;
+    
+    if (!err) {
+        cred_union = (cc_credentials_union *) malloc (sizeof (*cred_union));
+        if (!cred_union) { err = KRB5_CC_NOMEM; }
     }
-    cu->credentials.credentials_v5 = c;
-
-    /* convert krb5 principals to flat principals */
-    err = krb5_unparse_name(context, src->client, &(c->client));
-    if (err) 
-       goto cleanup;
-
-    err = krb5_unparse_name(context, src->server, &(c->server));
-    if (err) 
-       goto cleanup;
-
-    /* copy more fields */
-    c->keyblock.type = src->keyblock.enctype;
-    c->keyblock.length = src->keyblock.length;
-
-    if (src->keyblock.contents != NULL) {
-       c->keyblock.data = (unsigned char *)malloc(src->keyblock.length);
-       memcpy(c->keyblock.data, src->keyblock.contents, src->keyblock.length);
-    } else {
-       c->keyblock.data = NULL;
+    
+    if (!err) {
+        cv5 = (cc_credentials_v5_t *) malloc (sizeof (*cv5));
+        if (!cv5) { err = KRB5_CC_NOMEM; }
     }
-
-#if TARGET_OS_MAC
-    err = krb5_get_time_offsets(context, &offset_seconds, &offset_microseconds);
-    if (err) 
-       goto cleanup;
-#endif
-    c->authtime     = src->times.authtime   - offset_seconds;
-    c->starttime    = src->times.starttime  - offset_seconds;
-    c->endtime      = src->times.endtime    - offset_seconds;
-    c->renew_till   = src->times.renew_till - offset_seconds;
-    c->is_skey      = src->is_skey;
-    c->ticket_flags = src->ticket_flags;
-
-    err = copyK5DataArrayToCC3(src, c, kAddressArray);
-    if (err) 
-       goto cleanup;
-
-    c->ticket.length = src->ticket.length;
-    if (src->ticket.data != NULL) {
-       c->ticket.data = (unsigned char *)malloc(src->ticket.length);
-       memcpy(c->ticket.data, src->ticket.data, src->ticket.length);
-    } else {
-       c->ticket.data = NULL;
+    
+    if (!err) {
+        err = krb5_unparse_name (in_context, in_creds->client, &client);
     }
-
-    c->second_ticket.length = src->second_ticket.length;
-    if (src->second_ticket.data != NULL) {
-       c->second_ticket.data = (unsigned char *)malloc(src->second_ticket.length);
-       memcpy(c->second_ticket.data, src->second_ticket.data, src->second_ticket.length);
-    } else {
-       c->second_ticket.data = NULL;
+    
+    if (!err) {
+        err = krb5_unparse_name (in_context, in_creds->server, &server);
     }
-
-    err = copyK5DataArrayToCC3(src, c, kAuthDataArray);
-    if (err) 
-       goto cleanup;
-
-    *dest = creds;
-    return 0;
-
-  cleanup:
-    if (creds) {
-       if (creds->functions)
-           free((void *)creds->functions);
-       if (creds->data) {
-           if (creds->data->credentials.credentials_v5)
-               free(creds->data->credentials.credentials_v5);
-           free((void *)creds->data);
-       }
-       free(creds);
+    
+    if (!err && in_creds->keyblock.contents) {
+        keyblock_data = (unsigned char *) malloc (in_creds->keyblock.length);
+        if (!keyblock_data) { err = KRB5_CC_NOMEM; }
     }
-
+    
+    if (!err && in_creds->ticket.data) {
+        ticket_data = (unsigned char *) malloc (in_creds->ticket.length);
+        if (!ticket_data) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err && in_creds->second_ticket.data) {
+        second_ticket_data = (unsigned char *) malloc (in_creds->second_ticket.length);
+        if (!second_ticket_data) { err = KRB5_CC_NOMEM; }
+    }
+    
+    if (!err) {
+        err = copy_addresses_to_cc_array (in_context, in_creds->addresses, &cc_address_array);
+    }
+    
+    if (!err) {
+        err = copy_authdata_to_cc_array (in_context, in_creds->authdata, &cc_authdata_array);
+    }
+        
+    if (!err) {
+        /* principals */
+        cv5->client = client;
+        client = NULL;
+        cv5->server = server;
+        server = NULL;
+
+        /* copy more fields */
+        if (in_creds->keyblock.contents) {
+            memcpy(keyblock_data, in_creds->keyblock.contents, in_creds->keyblock.length);
+        }
+        cv5->keyblock.type = in_creds->keyblock.enctype;
+        cv5->keyblock.length = in_creds->keyblock.length;
+        cv5->keyblock.data = keyblock_data;
+        keyblock_data = NULL;
+        
+        cv5->authtime     = in_creds->times.authtime   - offset_seconds;
+        cv5->starttime    = in_creds->times.starttime  - offset_seconds;
+        cv5->endtime      = in_creds->times.endtime    - offset_seconds;
+        cv5->renew_till   = in_creds->times.renew_till - offset_seconds;
+        cv5->is_skey      = in_creds->is_skey;
+        cv5->ticket_flags = in_creds->ticket_flags;
+
+        if (in_creds->ticket.data) {
+            memcpy (ticket_data, in_creds->ticket.data, in_creds->ticket.length);
+        }
+        cv5->ticket.length = in_creds->ticket.length;
+        cv5->ticket.data = ticket_data;
+        ticket_data = NULL;
+        
+        if (in_creds->second_ticket.data) {
+            memcpy (second_ticket_data, in_creds->second_ticket.data, in_creds->second_ticket.length);
+        }
+        cv5->second_ticket.length = in_creds->second_ticket.length;
+        cv5->second_ticket.data = second_ticket_data;
+        second_ticket_data = NULL;
+        
+        cv5->addresses = cc_address_array;
+        cc_address_array = NULL;
+        
+        cv5->authdata = cc_authdata_array;
+        cc_authdata_array = NULL;       
+        
+        /* Set up the structures to return to the caller */
+        cred_union->version = cc_credentials_v5;
+        cred_union->credentials.credentials_v5 = cv5;
+        cv5 = NULL;
+        
+        credentials->data = cred_union;
+        cred_union = NULL;
+        
+        functions->release = krb5int_cc_credentials_release;
+        functions->compare = krb5int_cc_credentials_compare;
+        credentials->functions = functions;
+        functions = NULL;
+#ifdef TARGET_OS_MAC
+        credentials->otherFunctions = NULL;
+#endif
+        
+        *out_credentials = credentials;
+        credentials = NULL;
+    }
+    
+    if (cc_address_array)   { free_cc_array (cc_address_array); }
+    if (cc_authdata_array)  { free_cc_array (cc_authdata_array); }
+    if (keyblock_data)      { free (keyblock_data); }
+    if (ticket_data)        { free (ticket_data); }
+    if (second_ticket_data) { free (second_ticket_data); }
+    if (client)             { krb5_free_unparsed_name (in_context, client); }
+    if (server)             { krb5_free_unparsed_name (in_context, server); }
+    if (cv5)                { free (cv5); }
+    if (cred_union)         { free (cred_union); }
+    if (functions)          { free (functions); } 
+    if (credentials)        { free (credentials); }
+    
     return err;
 }
 #else /* !USE_CCAPI_V3 */
@@ -739,14 +889,14 @@ static void deep_free_cc_data (cc_data data)
 
 static void deep_free_cc_data_array (cc_data** data) {
 
-    unsigned int       index;
+    unsigned int i;
 
     if (data == NULL)
        return;
 
-    for (index = 0; data [index] != NULL; index++) {
-       deep_free_cc_data (*(data [index]));
-       free (data [index]);
+    for (i = 0; data [i] != NULL; i++) {
+       deep_free_cc_data (*(data [i]));
+       free (data [i]);
     }
 
     free (data);
index 7476313dfa5c953ea38a7cb3d70dd0c365381c55..257eb8dcc580c2b95b267aafdddf8ab6338a88de 100644 (file)
 
 /* protoypes for private functions declared in stdcc_util.c */
 #ifdef USE_CCAPI_V3
-krb5_error_code dupCC3toK5(krb5_context context, cc_credentials_t src, krb5_creds *dest);
-krb5_error_code dupK5toCC3(krb5_context context, krb5_creds *src, cc_credentials_t *dest);
-cc_int32 krb5int_cc_credentials_release(cc_credentials_t creds);
-cc_int32 krb5int_cc_credentials_compare(cc_credentials_t creds,
-                                       cc_credentials_t compare_to,
-                                       cc_uint32* equal);
-int copyCC3DataArrayToK5(cc_credentials_v5_t *ccCreds, krb5_creds *v5Creds, char whichArray);
-int copyK5DataArrayToCC3(krb5_creds *v5Creds, cc_credentials_v5_t * ccCreds, char whichArray);
+krb5_error_code 
+copy_cc_credentials_to_krb5_creds (krb5_context in_context, 
+                                   cc_credentials_t in_credentials, 
+                                   krb5_creds *out_creds);
+krb5_error_code
+copy_krb5_creds_to_cc_credentials (krb5_context in_context, 
+                                   krb5_creds *in_creds, 
+                                   cc_credentials_t *out_credentials);
+
 #else
 int copyCCDataArrayToK5(cc_creds *cc, krb5_creds *kc, char whichArray);
 int copyK5DataArrayToCC(krb5_creds *kc, cc_creds *cc, char whichArray);
index d79063701846c19c59587f8bacaef2b5435c6dd4..897d55911726b49ba85d071a879ad2b1d1a1b9c7 100644 (file)
@@ -130,8 +130,8 @@ kdb_db2.so kdb_db2.po $(OUTPRE)kdb_db2.$(OBJEXT): $(BUILDTOP)/include/autoconf.h
   $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/kdb.h \
   $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \
   $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \
-  $(SRCTOP)/lib/kdb/kdb5.h kdb_compat.h kdb_db2.c kdb_db2.h \
-  kdb_xdr.h policy_db.h
+  $(SRCTOP)/lib/kdb/kdb5.h kdb_db2.c kdb_db2.h kdb_xdr.h \
+  policy_db.h
 pol_xdr.so pol_xdr.po $(OUTPRE)pol_xdr.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
   $(BUILDTOP)/include/gssapi/gssapi.h $(BUILDTOP)/include/gssrpc/auth.h \
   $(BUILDTOP)/include/gssrpc/auth_gss.h $(BUILDTOP)/include/gssrpc/auth_unix.h \