[CalendarServer-changes] [4241] PyKerberos/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue May 12 18:01:58 PDT 2009


Revision: 4241
          http://trac.macosforge.org/projects/calendarserver/changeset/4241
Author:   cdaboo at apple.com
Date:     2009-05-12 18:01:58 -0700 (Tue, 12 May 2009)
Log Message:
-----------
Allow server service name to be empty and extract the target name from the context when it is.
Add a new api to get the target name.

Modified Paths:
--------------
    PyKerberos/trunk/pysrc/kerberos.py
    PyKerberos/trunk/src/kerberos.c
    PyKerberos/trunk/src/kerberosgss.c
    PyKerberos/trunk/src/kerberosgss.h
    PyKerberos/trunk/support/PyKerberos.xcodeproj/cyrusdaboo.mode1v3
    PyKerberos/trunk/support/PyKerberos.xcodeproj/cyrusdaboo.pbxuser
    PyKerberos/trunk/support/PyKerberos.xcodeproj/project.pbxproj
    PyKerberos/trunk/support/main.c
    PyKerberos/trunk/test.py

Modified: PyKerberos/trunk/pysrc/kerberos.py
===================================================================
--- PyKerberos/trunk/pysrc/kerberos.py	2009-05-12 21:50:50 UTC (rev 4240)
+++ PyKerberos/trunk/pysrc/kerberos.py	2009-05-13 01:01:58 UTC (rev 4241)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2008 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2009 Apple Inc. All rights reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -208,9 +208,18 @@
 def authGSSServerUserName(context):
     """
     Get the user name of the principal trying to authenticate to the server.
-    This method must only be called after authGSSClientStep returns a complete or continue response code.
+    This method must only be called after authGSSServerStep returns a complete or continue response code.
 
     @param context: the context object returned from authGSSServerInit.
     @return: a string containing the user name.
     """
 
+def authGSSServerTargetName(context):
+    """
+    Get the target name if the server did not supply its own credentials.
+    This method must only be called after authGSSServerStep returns a complete or continue response code.
+
+    @param context: the context object returned from authGSSServerInit.
+    @return: a string containing the target name.
+    """
+

Modified: PyKerberos/trunk/src/kerberos.c
===================================================================
--- PyKerberos/trunk/src/kerberos.c	2009-05-12 21:50:50 UTC (rev 4240)
+++ PyKerberos/trunk/src/kerberos.c	2009-05-13 01:01:58 UTC (rev 4241)
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2006-2008 Apple Inc. All rights reserved.
+ * Copyright (c) 2006-2009 Apple Inc. All rights reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -344,22 +344,42 @@
 {
     gss_server_state *state;
     PyObject *pystate;
-
+    
     if (!PyArg_ParseTuple(args, "O", &pystate))
         return NULL;
-
+    
     if (!PyCObject_Check(pystate)) {
         PyErr_SetString(PyExc_TypeError, "Expected a context object");
         return NULL;
     }
-
+    
     state = (gss_server_state *)PyCObject_AsVoidPtr(pystate);
     if (state == NULL)
         return NULL;
-
+    
     return Py_BuildValue("s", state->username);
 }
 
+static PyObject *authGSSServerTargetName(PyObject *self, PyObject *args)
+{
+    gss_server_state *state;
+    PyObject *pystate;
+    
+    if (!PyArg_ParseTuple(args, "O", &pystate))
+        return NULL;
+    
+    if (!PyCObject_Check(pystate)) {
+        PyErr_SetString(PyExc_TypeError, "Expected a context object");
+        return NULL;
+    }
+    
+    state = (gss_server_state *)PyCObject_AsVoidPtr(pystate);
+    if (state == NULL)
+        return NULL;
+    
+    return Py_BuildValue("s", state->targetname);
+}
+
 static PyMethodDef KerberosMethods[] = {
     {"checkPassword",  checkPassword, METH_VARARGS,
      "Check the supplied user/password against Kerberos KDC."},
@@ -390,7 +410,9 @@
     {"authGSSServerResponse",  authGSSServerResponse, METH_VARARGS,
      "Get the response from the last server-side GSSAPI step."},
     {"authGSSServerUserName",  authGSSServerUserName, METH_VARARGS,
-     "Get the user name from the last server-side GSSAPI step."},
+        "Get the user name from the last server-side GSSAPI step."},
+    {"authGSSServerTargetName",  authGSSServerTargetName, METH_VARARGS,
+        "Get the target name from the last server-side GSSAPI step."},
     {NULL, NULL, 0, NULL}        /* Sentinel */
 };
 

Modified: PyKerberos/trunk/src/kerberosgss.c
===================================================================
--- PyKerberos/trunk/src/kerberosgss.c	2009-05-12 21:50:50 UTC (rev 4240)
+++ PyKerberos/trunk/src/kerberosgss.c	2009-05-13 01:01:58 UTC (rev 4241)
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2006-2008 Apple Inc. All rights reserved.
+ * Copyright (c) 2006-2009 Apple Inc. All rights reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -34,75 +34,75 @@
     char match[1024];
     int match_len = 0;
     char* result = NULL;
-
+    
     int code;
     krb5_context kcontext;
     krb5_keytab kt = NULL;
     krb5_kt_cursor cursor = NULL;
     krb5_keytab_entry entry;
     char* pname = NULL;
-
+    
     // Generate the principal prefix we want to match
     snprintf(match, 1024, "%s/%s@", service, hostname);
     match_len = strlen(match);
-
+    
     code = krb5_init_context(&kcontext);
     if (code)
     {
-	PyErr_SetObject(KrbException_class, Py_BuildValue("((s:i))",
-							  "Cannot initialize Kerberos5 context", code));
-	return NULL;
+        PyErr_SetObject(KrbException_class, Py_BuildValue("((s:i))",
+                                                          "Cannot initialize Kerberos5 context", code));
+        return NULL;
     }
-
+    
     if ((code = krb5_kt_default(kcontext, &kt)))
     {
-	PyErr_SetObject(KrbException_class, Py_BuildValue("((s:i))",
-							  "Cannot get default keytab", code));
-	goto end;
+        PyErr_SetObject(KrbException_class, Py_BuildValue("((s:i))",
+                                                          "Cannot get default keytab", code));
+        goto end;
     }
-
+    
     if ((code = krb5_kt_start_seq_get(kcontext, kt, &cursor)))
     {
-	PyErr_SetObject(KrbException_class, Py_BuildValue("((s:i))",
-							  "Cannot get sequence cursor from keytab", code));
-	goto end;
+        PyErr_SetObject(KrbException_class, Py_BuildValue("((s:i))",
+                                                          "Cannot get sequence cursor from keytab", code));
+        goto end;
     }
-
+    
     while ((code = krb5_kt_next_entry(kcontext, kt, &entry, &cursor)) == 0)
     {
-	if ((code = krb5_unparse_name(kcontext, entry.principal, &pname)))
-	{
-	    PyErr_SetObject(KrbException_class, Py_BuildValue("((s:i))",
-							      "Cannot parse principal name from keytab", code));
-	    goto end;
-	}
-
-	if (strncmp(pname, match, match_len) == 0)
-	{
-	    result = malloc(strlen(pname) + 1);
-	    strcpy(result, pname);
-	    krb5_free_unparsed_name(kcontext, pname);
-	    krb5_free_keytab_entry_contents(kcontext, &entry);
-	    break;
-	}
-
-	krb5_free_unparsed_name(kcontext, pname);
-	krb5_free_keytab_entry_contents(kcontext, &entry);
+        if ((code = krb5_unparse_name(kcontext, entry.principal, &pname)))
+        {
+            PyErr_SetObject(KrbException_class, Py_BuildValue("((s:i))",
+                                                              "Cannot parse principal name from keytab", code));
+            goto end;
+        }
+        
+        if (strncmp(pname, match, match_len) == 0)
+        {
+            result = malloc(strlen(pname) + 1);
+            strcpy(result, pname);
+            krb5_free_unparsed_name(kcontext, pname);
+            krb5_free_keytab_entry_contents(kcontext, &entry);
+            break;
+        }
+        
+        krb5_free_unparsed_name(kcontext, pname);
+        krb5_free_keytab_entry_contents(kcontext, &entry);
     }
-
+    
     if (result == NULL)
     {
-	PyErr_SetObject(KrbException_class, Py_BuildValue("((s:i))",
-							  "Principal not found in keytab", -1));
+        PyErr_SetObject(KrbException_class, Py_BuildValue("((s:i))",
+                                                          "Principal not found in keytab", -1));
     }
-
+    
 end:
     if (cursor)
-	krb5_kt_end_seq_get(kcontext, kt, &cursor);
+        krb5_kt_end_seq_get(kcontext, kt, &cursor);
     if (kt)
-	krb5_kt_close(kcontext, kt);
+        krb5_kt_close(kcontext, kt);
     krb5_free_context(kcontext);
-
+    
     return result;
 }
 
@@ -112,26 +112,26 @@
     OM_uint32 min_stat;
     gss_buffer_desc name_token = GSS_C_EMPTY_BUFFER;
     int ret = AUTH_GSS_COMPLETE;
-
+    
     state->server_name = GSS_C_NO_NAME;
     state->context = GSS_C_NO_CONTEXT;
     state->gss_flags = gss_flags;
     state->username = NULL;
     state->response = NULL;
-
+    
     // Import server name first
     name_token.length = strlen(service);
     name_token.value = (char *)service;
-
+    
     maj_stat = gss_import_name(&min_stat, &name_token, gss_krb5_nt_service_name, &state->server_name);
-
+    
     if (GSS_ERROR(maj_stat))
     {
-	set_gss_error(maj_stat, min_stat);
-	ret = AUTH_GSS_ERROR;
-	goto end;
+        set_gss_error(maj_stat, min_stat);
+        ret = AUTH_GSS_ERROR;
+        goto end;
     }
-
+    
 end:
     return ret;
 }
@@ -141,22 +141,22 @@
     OM_uint32 maj_stat;
     OM_uint32 min_stat;
     int ret = AUTH_GSS_COMPLETE;
-
+    
     if (state->context != GSS_C_NO_CONTEXT)
-	maj_stat = gss_delete_sec_context(&min_stat, &state->context, GSS_C_NO_BUFFER);
+        maj_stat = gss_delete_sec_context(&min_stat, &state->context, GSS_C_NO_BUFFER);
     if (state->server_name != GSS_C_NO_NAME)
-	maj_stat = gss_release_name(&min_stat, &state->server_name);
+        maj_stat = gss_release_name(&min_stat, &state->server_name);
     if (state->username != NULL)
     {
-	free(state->username);
-	state->username = NULL;
+        free(state->username);
+        state->username = NULL;
     }
     if (state->response != NULL)
     {
-	free(state->response);
-	state->response = NULL;
+        free(state->response);
+        state->response = NULL;
     }
-
+    
     return ret;
 }
 
@@ -167,91 +167,91 @@
     gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER;
     gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
     int ret = AUTH_GSS_CONTINUE;
-
+    
     // Always clear out the old response
     if (state->response != NULL)
     {
-	free(state->response);
-	state->response = NULL;
+        free(state->response);
+        state->response = NULL;
     }
-
+    
     // If there is a challenge (data from the server) we need to give it to GSS
     if (challenge && *challenge)
     {
-	int len;
-	input_token.value = base64_decode(challenge, &len);
-	input_token.length = len;
+        int len;
+        input_token.value = base64_decode(challenge, &len);
+        input_token.length = len;
     }
-
+    
     // Do GSSAPI step
     maj_stat = gss_init_sec_context(&min_stat,
-				    GSS_C_NO_CREDENTIAL,
-				    &state->context,
-				    state->server_name,
-				    GSS_C_NO_OID,
-				    (OM_uint32)state->gss_flags,
-				    0,
-				    GSS_C_NO_CHANNEL_BINDINGS,
-				    &input_token,
-				    NULL,
-				    &output_token,
-				    NULL,
-				    NULL);
-
+                                    GSS_C_NO_CREDENTIAL,
+                                    &state->context,
+                                    state->server_name,
+                                    GSS_C_NO_OID,
+                                    (OM_uint32)state->gss_flags,
+                                    0,
+                                    GSS_C_NO_CHANNEL_BINDINGS,
+                                    &input_token,
+                                    NULL,
+                                    &output_token,
+                                    NULL,
+                                    NULL);
+    
     if ((maj_stat != GSS_S_COMPLETE) && (maj_stat != GSS_S_CONTINUE_NEEDED))
     {
-	set_gss_error(maj_stat, min_stat);
-	ret = AUTH_GSS_ERROR;
-	goto end;
+        set_gss_error(maj_stat, min_stat);
+        ret = AUTH_GSS_ERROR;
+        goto end;
     }
-
+    
     ret = (maj_stat == GSS_S_COMPLETE) ? AUTH_GSS_COMPLETE : AUTH_GSS_CONTINUE;
     // Grab the client response to send back to the server
     if (output_token.length)
     {
-	state->response = base64_encode((const unsigned char *)output_token.value, output_token.length);;
-	maj_stat = gss_release_buffer(&min_stat, &output_token);
+        state->response = base64_encode((const unsigned char *)output_token.value, output_token.length);;
+        maj_stat = gss_release_buffer(&min_stat, &output_token);
     }
-
+    
     // Try to get the user name if we have completed all GSS operations
     if (ret == AUTH_GSS_COMPLETE)
     {
-	gss_name_t gssuser = GSS_C_NO_NAME;
-	maj_stat = gss_inquire_context(&min_stat, state->context, &gssuser, NULL, NULL, NULL,  NULL, NULL, NULL);
-	if (GSS_ERROR(maj_stat))
-	{
-	    set_gss_error(maj_stat, min_stat);
-	    ret = AUTH_GSS_ERROR;
-	    goto end;
-	}
-
-	gss_buffer_desc name_token;
-	name_token.length = 0;
-	maj_stat = gss_display_name(&min_stat, gssuser, &name_token, NULL);
-	if (GSS_ERROR(maj_stat))
-	{
-	    if (name_token.value)
-		gss_release_buffer(&min_stat, &name_token);
-	    gss_release_name(&min_stat, &gssuser);
-
-	    set_gss_error(maj_stat, min_stat);
-	    ret = AUTH_GSS_ERROR;
-	    goto end;
-	}
-	else
-	{
-	    state->username = (char *)malloc(name_token.length + 1);
-	    strncpy(state->username, (char*) name_token.value, name_token.length);
-	    state->username[name_token.length] = 0;
-	    gss_release_buffer(&min_stat, &name_token);
-	    gss_release_name(&min_stat, &gssuser);
-	}
+        gss_name_t gssuser = GSS_C_NO_NAME;
+        maj_stat = gss_inquire_context(&min_stat, state->context, &gssuser, NULL, NULL, NULL,  NULL, NULL, NULL);
+        if (GSS_ERROR(maj_stat))
+        {
+            set_gss_error(maj_stat, min_stat);
+            ret = AUTH_GSS_ERROR;
+            goto end;
+        }
+        
+        gss_buffer_desc name_token;
+        name_token.length = 0;
+        maj_stat = gss_display_name(&min_stat, gssuser, &name_token, NULL);
+        if (GSS_ERROR(maj_stat))
+        {
+            if (name_token.value)
+                gss_release_buffer(&min_stat, &name_token);
+            gss_release_name(&min_stat, &gssuser);
+            
+            set_gss_error(maj_stat, min_stat);
+            ret = AUTH_GSS_ERROR;
+            goto end;
+        }
+        else
+        {
+            state->username = (char *)malloc(name_token.length + 1);
+            strncpy(state->username, (char*) name_token.value, name_token.length);
+            state->username[name_token.length] = 0;
+            gss_release_buffer(&min_stat, &name_token);
+            gss_release_name(&min_stat, &gssuser);
+        }
     }
 end:
     if (output_token.value)
-	gss_release_buffer(&min_stat, &output_token);
+        gss_release_buffer(&min_stat, &output_token);
     if (input_token.value)
-	free(input_token.value);
+        free(input_token.value);
     return ret;
 }
 
@@ -262,14 +262,14 @@
 	gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER;
 	gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
 	int ret = AUTH_GSS_CONTINUE;
-
+    
 	// Always clear out the old response
 	if (state->response != NULL)
 	{
 		free(state->response);
 		state->response = NULL;
 	}
-
+    
 	// If there is a challenge (data from the server) we need to give it to GSS
 	if (challenge && *challenge)
 	{
@@ -277,15 +277,15 @@
 		input_token.value = base64_decode(challenge, &len);
 		input_token.length = len;
 	}
-
+    
 	// Do GSSAPI step
 	maj_stat = gss_unwrap(&min_stat,
-							state->context,
-							&input_token,
-							&output_token,
-							NULL,
-							NULL);
-
+                          state->context,
+                          &input_token,
+                          &output_token,
+                          NULL,
+                          NULL);
+    
 	if (maj_stat != GSS_S_COMPLETE)
 	{
 		set_gss_error(maj_stat, min_stat);
@@ -294,7 +294,7 @@
 	}
 	else
 		ret = AUTH_GSS_COMPLETE;
-
+    
 	// Grab the client response
 	if (output_token.length)
 	{
@@ -318,21 +318,21 @@
 	int ret = AUTH_GSS_CONTINUE;
 	char buf[4096], server_conf_flags;
 	unsigned long buf_size;
-
+    
 	// Always clear out the old response
 	if (state->response != NULL)
 	{
 		free(state->response);
 		state->response = NULL;
 	}
-
+    
 	if (challenge && *challenge)
 	{
 		int len;
 		input_token.value = base64_decode(challenge, &len);
 		input_token.length = len;
 	}
-
+    
 	if (user) {
 		// get bufsize
 		server_conf_flags = ((char*) input_token.value)[0];
@@ -341,12 +341,12 @@
 		free(input_token.value);
 #ifdef PRINTFS
 		printf("User: %s, %c%c%c\n", user,
-			server_conf_flags & GSS_AUTH_P_NONE      ? 'N' : '-',
-			server_conf_flags & GSS_AUTH_P_INTEGRITY ? 'I' : '-',
-			server_conf_flags & GSS_AUTH_P_PRIVACY   ? 'P' : '-');
+               server_conf_flags & GSS_AUTH_P_NONE      ? 'N' : '-',
+               server_conf_flags & GSS_AUTH_P_INTEGRITY ? 'I' : '-',
+               server_conf_flags & GSS_AUTH_P_PRIVACY   ? 'P' : '-');
 		printf("Maximum GSS token size is %ld\n", buf_size);
 #endif
-
+        
 		// agree to terms (hack!)
 		buf_size = htonl(buf_size); // not relevant without integrity/privacy
 		memcpy(buf, &buf_size, 4);
@@ -356,7 +356,7 @@
 		input_token.value = buf;
 		input_token.length = 4 + strlen(user) + 1;
 	}
-
+    
 	// Do GSSAPI wrap
 	maj_stat = gss_wrap(&min_stat,
 						state->context,
@@ -365,7 +365,7 @@
 						&input_token,
 						NULL,
 						&output_token);
-
+    
 	if (maj_stat != GSS_S_COMPLETE)
 	{
 		set_gss_error(maj_stat, min_stat);
@@ -392,39 +392,45 @@
     OM_uint32 min_stat;
     gss_buffer_desc name_token = GSS_C_EMPTY_BUFFER;
     int ret = AUTH_GSS_COMPLETE;
-
+    
     state->context = GSS_C_NO_CONTEXT;
     state->server_name = GSS_C_NO_NAME;
     state->client_name = GSS_C_NO_NAME;
     state->server_creds = GSS_C_NO_CREDENTIAL;
     state->client_creds = GSS_C_NO_CREDENTIAL;
     state->username = NULL;
+    state->targetname = NULL;
     state->response = NULL;
-
-    // Import server name first
-    name_token.length = strlen(service);
-    name_token.value = (char *)service;
-
-    maj_stat = gss_import_name(&min_stat, &name_token, GSS_C_NT_HOSTBASED_SERVICE, &state->server_name);
-
-    if (GSS_ERROR(maj_stat))
+    
+    // Server name may be empty which means we aren't going to create our own creds
+    size_t service_len = strlen(service);
+    if (service_len != 0)
     {
-	set_gss_error(maj_stat, min_stat);
-	ret = AUTH_GSS_ERROR;
-	goto end;
+        // Import server name first
+        name_token.length = strlen(service);
+        name_token.value = (char *)service;
+        
+        maj_stat = gss_import_name(&min_stat, &name_token, GSS_C_NT_HOSTBASED_SERVICE, &state->server_name);
+        
+        if (GSS_ERROR(maj_stat))
+        {
+            set_gss_error(maj_stat, min_stat);
+            ret = AUTH_GSS_ERROR;
+            goto end;
+        }
+        
+        // Get credentials
+        maj_stat = gss_acquire_cred(&min_stat, state->server_name, GSS_C_INDEFINITE,
+                                    GSS_C_NO_OID_SET, GSS_C_ACCEPT, &state->server_creds, NULL, NULL);
+        
+        if (GSS_ERROR(maj_stat))
+        {
+            set_gss_error(maj_stat, min_stat);
+            ret = AUTH_GSS_ERROR;
+            goto end;
+        }
     }
-
-    // Get credentials
-    maj_stat = gss_acquire_cred(&min_stat, state->server_name, GSS_C_INDEFINITE,
-				GSS_C_NO_OID_SET, GSS_C_ACCEPT, &state->server_creds, NULL, NULL);
-
-    if (GSS_ERROR(maj_stat))
-    {
-	set_gss_error(maj_stat, min_stat);
-	ret = AUTH_GSS_ERROR;
-	goto end;
-    }
-
+    
 end:
     return ret;
 }
@@ -434,28 +440,33 @@
     OM_uint32 maj_stat;
     OM_uint32 min_stat;
     int ret = AUTH_GSS_COMPLETE;
-
+    
     if (state->context != GSS_C_NO_CONTEXT)
-	maj_stat = gss_delete_sec_context(&min_stat, &state->context, GSS_C_NO_BUFFER);
+        maj_stat = gss_delete_sec_context(&min_stat, &state->context, GSS_C_NO_BUFFER);
     if (state->server_name != GSS_C_NO_NAME)
-	maj_stat = gss_release_name(&min_stat, &state->server_name);
+        maj_stat = gss_release_name(&min_stat, &state->server_name);
     if (state->client_name != GSS_C_NO_NAME)
-	maj_stat = gss_release_name(&min_stat, &state->client_name);
+        maj_stat = gss_release_name(&min_stat, &state->client_name);
     if (state->server_creds != GSS_C_NO_CREDENTIAL)
-	maj_stat = gss_release_cred(&min_stat, &state->server_creds);
+        maj_stat = gss_release_cred(&min_stat, &state->server_creds);
     if (state->client_creds != GSS_C_NO_CREDENTIAL)
-	maj_stat = gss_release_cred(&min_stat, &state->client_creds);
+        maj_stat = gss_release_cred(&min_stat, &state->client_creds);
     if (state->username != NULL)
     {
-	free(state->username);
-	state->username = NULL;
+        free(state->username);
+        state->username = NULL;
     }
+    if (state->targetname != NULL)
+    {
+        free(state->targetname);
+        state->targetname = NULL;
+    }
     if (state->response != NULL)
     {
-	free(state->response);
-	state->response = NULL;
+        free(state->response);
+        state->response = NULL;
     }
-
+    
     return ret;
 }
 
@@ -466,72 +477,96 @@
     gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER;
     gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
     int ret = AUTH_GSS_CONTINUE;
-
+    
     // Always clear out the old response
     if (state->response != NULL)
     {
-	free(state->response);
-	state->response = NULL;
+        free(state->response);
+        state->response = NULL;
     }
-
+    
     // If there is a challenge (data from the server) we need to give it to GSS
     if (challenge && *challenge)
     {
-	int len;
-	input_token.value = base64_decode(challenge, &len);
-	input_token.length = len;
+        int len;
+        input_token.value = base64_decode(challenge, &len);
+        input_token.length = len;
     }
     else
     {
-	PyErr_SetString(KrbException_class, "No challenge parameter in request from client");
-	ret = AUTH_GSS_ERROR;
-	goto end;
+        PyErr_SetString(KrbException_class, "No challenge parameter in request from client");
+        ret = AUTH_GSS_ERROR;
+        goto end;
     }
-
+    
     maj_stat = gss_accept_sec_context(&min_stat,
-				      &state->context,
-				      state->server_creds,
-				      &input_token,
-				      GSS_C_NO_CHANNEL_BINDINGS,
-				      &state->client_name,
-				      NULL,
-				      &output_token,
-				      NULL,
-				      NULL,
-				      &state->client_creds);
-
+                                      &state->context,
+                                      state->server_creds,
+                                      &input_token,
+                                      GSS_C_NO_CHANNEL_BINDINGS,
+                                      &state->client_name,
+                                      NULL,
+                                      &output_token,
+                                      NULL,
+                                      NULL,
+                                      &state->client_creds);
+    
     if (GSS_ERROR(maj_stat))
     {
-	set_gss_error(maj_stat, min_stat);
-	ret = AUTH_GSS_ERROR;
-	goto end;
+        set_gss_error(maj_stat, min_stat);
+        ret = AUTH_GSS_ERROR;
+        goto end;
     }
-
+    
     // Grab the server response to send back to the client
     if (output_token.length)
     {
-	state->response = base64_encode((const unsigned char *)output_token.value, output_token.length);;
-	maj_stat = gss_release_buffer(&min_stat, &output_token);
+        state->response = base64_encode((const unsigned char *)output_token.value, output_token.length);;
+        maj_stat = gss_release_buffer(&min_stat, &output_token);
     }
-
+    
+    // Get the user name
     maj_stat = gss_display_name(&min_stat, state->client_name, &output_token, NULL);
     if (GSS_ERROR(maj_stat))
     {
-	set_gss_error(maj_stat, min_stat);
-	ret = AUTH_GSS_ERROR;
-	goto end;
+        set_gss_error(maj_stat, min_stat);
+        ret = AUTH_GSS_ERROR;
+        goto end;
     }
     state->username = (char *)malloc(output_token.length + 1);
     strncpy(state->username, (char*) output_token.value, output_token.length);
     state->username[output_token.length] = 0;
+    
+    // Get the target name if no server creds were supplied
+    if (state->server_creds == GSS_C_NO_CREDENTIAL)
+    {
+        gss_name_t target_name = GSS_C_NO_NAME;
+        maj_stat = gss_inquire_context(&min_stat, state->context, NULL, &target_name, NULL, NULL, NULL, NULL, NULL);
+        if (GSS_ERROR(maj_stat))
+        {
+            set_gss_error(maj_stat, min_stat);
+            ret = AUTH_GSS_ERROR;
+            goto end;
+        }
+        maj_stat = gss_display_name(&min_stat, target_name, &output_token, NULL);
+        if (GSS_ERROR(maj_stat))
+        {
+            set_gss_error(maj_stat, min_stat);
+            ret = AUTH_GSS_ERROR;
+            goto end;
+        }
+        state->targetname = (char *)malloc(output_token.length + 1);
+        strncpy(state->targetname, (char*) output_token.value, output_token.length);
+        state->targetname[output_token.length] = 0;
+    }
 
     ret = AUTH_GSS_COMPLETE;
-
+    
 end:
     if (output_token.length)
-	gss_release_buffer(&min_stat, &output_token);
+        gss_release_buffer(&min_stat, &output_token);
     if (input_token.value)
-	free(input_token.value);
+        free(input_token.value);
     return ret;
 }
 
@@ -543,32 +578,32 @@
     gss_buffer_desc status_string;
     char buf_maj[512];
     char buf_min[512];
-
+    
     do
     {
-	maj_stat = gss_display_status (&min_stat,
-				       err_maj,
-				       GSS_C_GSS_CODE,
-				       GSS_C_NO_OID,
-				       &msg_ctx,
-				       &status_string);
-	if (GSS_ERROR(maj_stat))
-	    break;
-	strncpy(buf_maj, (char*) status_string.value, sizeof(buf_maj));
-	gss_release_buffer(&min_stat, &status_string);
-
-	maj_stat = gss_display_status (&min_stat,
-				       err_min,
-				       GSS_C_MECH_CODE,
-				       GSS_C_NULL_OID,
-				       &msg_ctx,
-				       &status_string);
-	if (!GSS_ERROR(maj_stat))
-	{
-	    strncpy(buf_min, (char*) status_string.value, sizeof(buf_min));
-	    gss_release_buffer(&min_stat, &status_string);
-	}
+        maj_stat = gss_display_status (&min_stat,
+                                       err_maj,
+                                       GSS_C_GSS_CODE,
+                                       GSS_C_NO_OID,
+                                       &msg_ctx,
+                                       &status_string);
+        if (GSS_ERROR(maj_stat))
+            break;
+        strncpy(buf_maj, (char*) status_string.value, sizeof(buf_maj));
+        gss_release_buffer(&min_stat, &status_string);
+        
+        maj_stat = gss_display_status (&min_stat,
+                                       err_min,
+                                       GSS_C_MECH_CODE,
+                                       GSS_C_NULL_OID,
+                                       &msg_ctx,
+                                       &status_string);
+        if (!GSS_ERROR(maj_stat))
+        {
+            strncpy(buf_min, (char*) status_string.value, sizeof(buf_min));
+            gss_release_buffer(&min_stat, &status_string);
+        }
     } while (!GSS_ERROR(maj_stat) && msg_ctx != 0);
-
+    
     PyErr_SetObject(GssException_class, Py_BuildValue("((s:i)(s:i))", buf_maj, err_maj, buf_min, err_min));
 }

Modified: PyKerberos/trunk/src/kerberosgss.h
===================================================================
--- PyKerberos/trunk/src/kerberosgss.h	2009-05-12 21:50:50 UTC (rev 4240)
+++ PyKerberos/trunk/src/kerberosgss.h	2009-05-13 01:01:58 UTC (rev 4241)
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2006-2008 Apple Inc. All rights reserved.
+ * Copyright (c) 2006-2009 Apple Inc. All rights reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -43,6 +43,7 @@
     gss_cred_id_t    server_creds;
     gss_cred_id_t    client_creds;
     char*            username;
+    char*            targetname;
     char*            response;
 } gss_server_state;
 

Modified: PyKerberos/trunk/support/PyKerberos.xcodeproj/cyrusdaboo.mode1v3
===================================================================
--- PyKerberos/trunk/support/PyKerberos.xcodeproj/cyrusdaboo.mode1v3	2009-05-12 21:50:50 UTC (rev 4240)
+++ PyKerberos/trunk/support/PyKerberos.xcodeproj/cyrusdaboo.mode1v3	2009-05-13 01:01:58 UTC (rev 4241)
@@ -72,6 +72,16 @@
 			<key>MaxInstances</key>
 			<string>n</string>
 			<key>Module</key>
+			<string>XCProjectFormatConflictsModule</string>
+			<key>Name</key>
+			<string>Project Format Conflicts List</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>
@@ -157,6 +167,8 @@
 			<string>Snapshots Tool</string>
 		</dict>
 	</array>
+	<key>BundlePath</key>
+	<string>/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources</string>
 	<key>Description</key>
 	<string>DefaultDescriptionKey</string>
 	<key>DockingSystemVisible</key>
@@ -166,7 +178,7 @@
 	<key>FavBarConfig</key>
 	<dict>
 		<key>PBXProjectModuleGUID</key>
-		<string>AFDE37F40BB41E00008C037E</string>
+		<string>AF88E9340FBA3EB400C5AA9C</string>
 		<key>XCBarModuleItemNames</key>
 		<dict/>
 		<key>XCBarModuleItems</key>
@@ -177,9 +189,9 @@
 	<key>Identifier</key>
 	<string>com.apple.perspectives.project.mode1v3</string>
 	<key>MajorVersion</key>
-	<integer>32</integer>
+	<integer>33</integer>
 	<key>MinorVersion</key>
-	<integer>1</integer>
+	<integer>0</integer>
 	<key>Name</key>
 	<string>Default</string>
 	<key>Notifications</key>
@@ -196,15 +208,17 @@
 		<dict>
 			<key>ChosenToolbarItems</key>
 			<array>
-				<string>active-target-popup</string>
-				<string>active-buildstyle-popup</string>
+				<string>active-combo-popup</string>
 				<string>action</string>
 				<string>NSToolbarFlexibleSpaceItem</string>
 				<string>buildOrClean</string>
-				<string>build-and-goOrGo</string>
+				<string>build-and-go</string>
+				<string>go</string>
+				<string>servicesModulebuild</string>
+				<string>debugger-enable-breakpoints</string>
 				<string>com.apple.ide.PBXToolbarStopButton</string>
+				<string>toggle-editor</string>
 				<string>get-info</string>
-				<string>toggle-editor</string>
 				<string>NSToolbarFlexibleSpaceItem</string>
 				<string>com.apple.pbx.toolbar.searchfield</string>
 			</array>
@@ -225,7 +239,6 @@
 						<array>
 							<string>1C37FBAC04509CD000000102</string>
 							<string>1C37FAAC04509CD000000102</string>
-							<string>1C08E77C0454961000C914BD</string>
 							<string>1C37FABC05509CD000000102</string>
 							<string>1C37FABC05539CD112110102</string>
 							<string>E2644B35053B69B200211256</string>
@@ -243,7 +256,7 @@
 						<dict>
 							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
 							<array>
-								<real>186</real>
+								<real>275</real>
 							</array>
 							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
 							<array>
@@ -262,12 +275,13 @@
 							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
 							<array>
 								<array>
+									<integer>7</integer>
 									<integer>1</integer>
 									<integer>0</integer>
 								</array>
 							</array>
 							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
-							<string>{{0, 0}, {186, 901}}</string>
+							<string>{{0, 0}, {275, 1060}}</string>
 						</dict>
 						<key>PBXTopSmartGroupGIDs</key>
 						<array/>
@@ -279,30 +293,32 @@
 					<key>GeometryConfiguration</key>
 					<dict>
 						<key>Frame</key>
-						<string>{{0, 0}, {203, 919}}</string>
+						<string>{{0, 0}, {292, 1078}}</string>
 						<key>GroupTreeTableConfiguration</key>
 						<array>
 							<string>MainColumn</string>
-							<real>186</real>
+							<real>275</real>
 						</array>
 						<key>RubberWindowFrame</key>
-						<string>14 208 1260 960 0 0 1920 1178 </string>
+						<string>0 59 1920 1119 0 0 1920 1178 </string>
 					</dict>
 					<key>Module</key>
 					<string>PBXSmartGroupTreeModule</string>
 					<key>Proportion</key>
-					<string>203pt</string>
+					<string>292pt</string>
 				</dict>
 				<dict>
 					<key>Dock</key>
 					<array>
 						<dict>
+							<key>BecomeActive</key>
+							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
 								<string>1CE0B20306471E060097A5F4</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>main.c</string>
+								<string>kerberosgss.c</string>
 								<key>PBXSplitModuleInNavigatorKey</key>
 								<dict>
 									<key>Split0</key>
@@ -310,25 +326,23 @@
 										<key>PBXProjectModuleGUID</key>
 										<string>1CE0B20406471E060097A5F4</string>
 										<key>PBXProjectModuleLabel</key>
-										<string>main.c</string>
+										<string>kerberosgss.c</string>
 										<key>_historyCapacity</key>
 										<integer>0</integer>
 										<key>bookmark</key>
-										<string>AF4480DF0BB42E3C00408822</string>
+										<string>AF88E97B0FBA449500C5AA9C</string>
 										<key>history</key>
 										<array>
-											<string>AFDE38870BB42287008C037E</string>
-											<string>AF4480AD0BB42BFD00408822</string>
-											<string>AF4480CF0BB42D1700408822</string>
+											<string>AF88E95D0FBA41D300C5AA9C</string>
+											<string>AF88E95F0FBA41D300C5AA9C</string>
+											<string>AF88E9600FBA41D300C5AA9C</string>
+											<string>AF88E9610FBA41D300C5AA9C</string>
+											<string>AF88E9660FBA435000C5AA9C</string>
+											<string>AF88E9670FBA435000C5AA9C</string>
+											<string>AF88E9680FBA435000C5AA9C</string>
+											<string>AF88E9690FBA435000C5AA9C</string>
+											<string>AF88E97A0FBA449500C5AA9C</string>
 										</array>
-										<key>prevStack</key>
-										<array>
-											<string>AFDE38700BB420B1008C037E</string>
-											<string>AFDE388A0BB42287008C037E</string>
-											<string>AFDE388E0BB42287008C037E</string>
-											<string>AF4480AF0BB42BFD00408822</string>
-											<string>AF4480B00BB42BFD00408822</string>
-										</array>
 									</dict>
 									<key>SplitCount</key>
 									<string>1</string>
@@ -339,18 +353,16 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {1052, 556}}</string>
+								<string>{{0, 0}, {1623, 648}}</string>
 								<key>RubberWindowFrame</key>
-								<string>14 208 1260 960 0 0 1920 1178 </string>
+								<string>0 59 1920 1119 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 							<key>Proportion</key>
-							<string>556pt</string>
+							<string>648pt</string>
 						</dict>
 						<dict>
-							<key>BecomeActive</key>
-							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
@@ -361,18 +373,18 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 561}, {1052, 358}}</string>
+								<string>{{0, 653}, {1623, 425}}</string>
 								<key>RubberWindowFrame</key>
-								<string>14 208 1260 960 0 0 1920 1178 </string>
+								<string>0 59 1920 1119 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
 							<key>Proportion</key>
-							<string>358pt</string>
+							<string>425pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
-					<string>1052pt</string>
+					<string>1623pt</string>
 				</dict>
 			</array>
 			<key>Name</key>
@@ -387,12 +399,14 @@
 			</array>
 			<key>TableOfContents</key>
 			<array>
-				<string>AF4480B20BB42BFD00408822</string>
+				<string>AF88E9320FBA3EB400C5AA9C</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
-				<string>AF4480B30BB42BFD00408822</string>
+				<string>AF88E9330FBA3EB400C5AA9C</string>
 				<string>1CE0B20306471E060097A5F4</string>
 				<string>1CE0B20506471E060097A5F4</string>
 			</array>
+			<key>ToolbarConfigUserDefaultsMinorVersion</key>
+			<string>2</string>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.defaultV3</string>
 		</dict>
@@ -504,11 +518,13 @@
 	<key>ShelfIsVisible</key>
 	<false/>
 	<key>SourceDescription</key>
-	<string>file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
+	<string>file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
 	<key>StatusbarIsVisible</key>
 	<true/>
 	<key>TimeStamp</key>
 	<real>0.0</real>
+	<key>ToolbarConfigUserDefaultsMinorVersion</key>
+	<string>2</string>
 	<key>ToolbarDisplayMode</key>
 	<integer>1</integer>
 	<key>ToolbarIsVisible</key>
@@ -523,24 +539,15 @@
 	<integer>5</integer>
 	<key>WindowOrderList</key>
 	<array>
-		<string>AF4480DB0BB42D9C00408822</string>
-		<string>AF4480C70BB42CA000408822</string>
-		<string>AF4480CA0BB42CA000408822</string>
-		<string>AF4480B40BB42BFD00408822</string>
-		<string>AF4480B70BB42BFD00408822</string>
-		<string>AF4480B80BB42BFD00408822</string>
-		<string>AF4480BA0BB42BFD00408822</string>
-		<string>AF4480BB0BB42BFD00408822</string>
-		<string>AF4480BC0BB42BFD00408822</string>
+		<string>AF88E9640FBA41D300C5AA9C</string>
+		<string>AF88E9650FBA41D300C5AA9C</string>
 		<string>1C78EAAD065D492600B07095</string>
-		<string>AFDE38090BB41EA7008C037E</string>
+		<string>AF88E9420FBA3FD300C5AA9C</string>
 		<string>1CD10A99069EF8BA00B06720</string>
-		<string>AF4480BD0BB42BFD00408822</string>
-		<string>AF4480BE0BB42BFD00408822</string>
-		<string>/Users/cyrusdaboo/Documents/Development/Apple/eclipse/PyKerberos/support/PyKerberos.xcodeproj</string>
+		<string>/Volumes/Data/Users/cyrusdaboo/Documents/Development/Apple/eclipse/PyKerberos/support/PyKerberos.xcodeproj</string>
 	</array>
 	<key>WindowString</key>
-	<string>14 208 1260 960 0 0 1920 1178 </string>
+	<string>0 59 1920 1119 0 0 1920 1178 </string>
 	<key>WindowToolsV3</key>
 	<array>
 		<dict>
@@ -556,36 +563,36 @@
 					<key>Dock</key>
 					<array>
 						<dict>
-							<key>BecomeActive</key>
-							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
 								<string>1CD0528F0623707200166675</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>main.c</string>
+								<string>kerberosbasic.c</string>
 								<key>StatusBarVisibility</key>
 								<true/>
 							</dict>
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {993, 324}}</string>
+								<string>{{0, 0}, {1344, 622}}</string>
 								<key>RubberWindowFrame</key>
-								<string>506 511 993 606 0 0 1920 1178 </string>
+								<string>21 251 1344 904 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 							<key>Proportion</key>
-							<string>324pt</string>
+							<string>622pt</string>
 						</dict>
 						<dict>
+							<key>BecomeActive</key>
+							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
 								<string>XCMainBuildResultsModuleGUID</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>Build</string>
+								<string>Build Results</string>
 								<key>XCBuildResultsTrigger_Collapse</key>
 								<integer>1021</integer>
 								<key>XCBuildResultsTrigger_Open</key>
@@ -594,9 +601,9 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 329}, {993, 236}}</string>
+								<string>{{0, 627}, {1344, 236}}</string>
 								<key>RubberWindowFrame</key>
-								<string>506 511 993 606 0 0 1920 1178 </string>
+								<string>21 251 1344 904 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXBuildResultsModule</string>
@@ -605,7 +612,7 @@
 						</dict>
 					</array>
 					<key>Proportion</key>
-					<string>565pt</string>
+					<string>863pt</string>
 				</dict>
 			</array>
 			<key>Name</key>
@@ -618,17 +625,17 @@
 			<true/>
 			<key>TableOfContents</key>
 			<array>
-				<string>AFDE38090BB41EA7008C037E</string>
-				<string>AF44809A0BB428F200408822</string>
+				<string>AF88E9420FBA3FD300C5AA9C</string>
+				<string>AF88E9430FBA3FD300C5AA9C</string>
 				<string>1CD0528F0623707200166675</string>
 				<string>XCMainBuildResultsModuleGUID</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.buildV3</string>
 			<key>WindowString</key>
-			<string>506 511 993 606 0 0 1920 1178 </string>
+			<string>21 251 1344 904 0 0 1920 1178 </string>
 			<key>WindowToolGUID</key>
-			<string>AFDE38090BB41EA7008C037E</string>
+			<string>AF88E9420FBA3FD300C5AA9C</string>
 			<key>WindowToolIsVisible</key>
 			<false/>
 		</dict>
@@ -661,8 +668,8 @@
 										<string>yes</string>
 										<key>sizes</key>
 										<array>
-											<string>{{0, 0}, {477, 385}}</string>
-											<string>{{477, 0}, {568, 385}}</string>
+											<string>{{0, 0}, {733, 484}}</string>
+											<string>{{733, 0}, {877, 484}}</string>
 										</array>
 									</dict>
 									<key>VerticalSplitView</key>
@@ -677,8 +684,8 @@
 										<string>yes</string>
 										<key>sizes</key>
 										<array>
-											<string>{{0, 0}, {1045, 385}}</string>
-											<string>{{0, 385}, {1045, 371}}</string>
+											<string>{{0, 0}, {1610, 484}}</string>
+											<string>{{0, 484}, {1610, 512}}</string>
 										</array>
 									</dict>
 								</dict>
@@ -698,34 +705,34 @@
 								<key>DebugSTDIOWindowFrame</key>
 								<string>{{200, 200}, {500, 300}}</string>
 								<key>Frame</key>
-								<string>{{0, 0}, {1045, 756}}</string>
+								<string>{{0, 0}, {1610, 996}}</string>
 								<key>PBXDebugSessionStackFrameViewKey</key>
 								<dict>
 									<key>DebugVariablesTableConfiguration</key>
 									<array>
 										<string>Name</string>
-										<real>187</real>
+										<real>120</real>
 										<string>Value</string>
 										<real>85</real>
 										<string>Summary</string>
-										<real>271</real>
+										<real>647</real>
 									</array>
 									<key>Frame</key>
-									<string>{{477, 0}, {568, 385}}</string>
+									<string>{{733, 0}, {877, 484}}</string>
 									<key>RubberWindowFrame</key>
-									<string>469 256 1045 797 0 0 1920 1178 </string>
+									<string>21 118 1610 1037 0 0 1920 1178 </string>
 								</dict>
 								<key>RubberWindowFrame</key>
-								<string>469 256 1045 797 0 0 1920 1178 </string>
+								<string>21 118 1610 1037 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXDebugSessionModule</string>
 							<key>Proportion</key>
-							<string>756pt</string>
+							<string>996pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
-					<string>756pt</string>
+					<string>996pt</string>
 				</dict>
 			</array>
 			<key>Name</key>
@@ -739,18 +746,18 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>1CD10A99069EF8BA00B06720</string>
-				<string>AF44809B0BB428F200408822</string>
+				<string>AF88E9350FBA3EB400C5AA9C</string>
 				<string>1C162984064C10D400B95A72</string>
-				<string>AF44809C0BB428F200408822</string>
-				<string>AF44809D0BB428F200408822</string>
-				<string>AF44809E0BB428F200408822</string>
-				<string>AF44809F0BB428F200408822</string>
-				<string>AF4480A00BB428F200408822</string>
+				<string>AF88E9360FBA3EB400C5AA9C</string>
+				<string>AF88E9370FBA3EB400C5AA9C</string>
+				<string>AF88E9380FBA3EB400C5AA9C</string>
+				<string>AF88E9390FBA3EB400C5AA9C</string>
+				<string>AF88E93A0FBA3EB400C5AA9C</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.debugV3</string>
 			<key>WindowString</key>
-			<string>469 256 1045 797 0 0 1920 1178 </string>
+			<string>21 118 1610 1037 0 0 1920 1178 </string>
 			<key>WindowToolGUID</key>
 			<string>1CD10A99069EF8BA00B06720</string>
 			<key>WindowToolIsVisible</key>
@@ -882,14 +889,14 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {650, 358}}</string>
+								<string>{{0, 0}, {650, 209}}</string>
 								<key>RubberWindowFrame</key>
-								<string>35 895 650 250 0 0 1920 1178 </string>
+								<string>21 905 650 250 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXDebugCLIModule</string>
 							<key>Proportion</key>
-							<string>358pt</string>
+							<string>209pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
@@ -907,13 +914,13 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>1C78EAAD065D492600B07095</string>
-				<string>AF4480A10BB428F200408822</string>
+				<string>AF88E9570FBA419E00C5AA9C</string>
 				<string>1C78EAAC065D492600B07095</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.consoleV3</string>
 			<key>WindowString</key>
-			<string>35 895 650 250 0 0 1920 1178 </string>
+			<string>21 905 650 250 0 0 1920 1178 </string>
 			<key>WindowToolGUID</key>
 			<string>1C78EAAD065D492600B07095</string>
 			<key>WindowToolIsVisible</key>
@@ -1018,7 +1025,7 @@
 									<string>FileName</string>
 									<real>199</real>
 									<string>Path</string>
-									<real>197.09500122070312</real>
+									<real>197.0950012207031</real>
 								</array>
 								<key>TableFrame</key>
 								<string>{{0, 0}, {452, 250}}</string>
@@ -1244,6 +1251,38 @@
 		</dict>
 		<dict>
 			<key>Identifier</key>
+			<string>windowTool.projectFormatConflicts</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>Module</key>
+							<string>XCProjectFormatConflictsModule</string>
+							<key>Proportion</key>
+							<string>100%</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>100%</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Project Format Conflicts</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>XCProjectFormatConflictsModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>0</integer>
+			<key>WindowContentMinSize</key>
+			<string>450 300</string>
+			<key>WindowString</key>
+			<string>50 850 472 307 0 0 1440 877</string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
 			<string>windowTool.classBrowser</string>
 			<key>Layout</key>
 			<array>

Modified: PyKerberos/trunk/support/PyKerberos.xcodeproj/cyrusdaboo.pbxuser
===================================================================
--- PyKerberos/trunk/support/PyKerberos.xcodeproj/cyrusdaboo.pbxuser	2009-05-12 21:50:50 UTC (rev 4240)
+++ PyKerberos/trunk/support/PyKerberos.xcodeproj/cyrusdaboo.pbxuser	2009-05-13 01:01:58 UTC (rev 4241)
@@ -1,9 +1,9 @@
 // !$*UTF8*$!
 {
 	08FB7793FE84155DC02AAC07 /* Project object */ = {
-		activeArchitecture = i386;
 		activeBuildConfigurationName = Debug;
 		activeExecutable = AFDE37EE0BB41DF9008C037E /* PyKerberos */;
+		activeSDKPreference = macosx10.6;
 		activeTarget = 8DD76F620486A84900D96B5E /* PyKerberos */;
 		addToTargets = (
 			8DD76F620486A84900D96B5E /* PyKerberos */,
@@ -11,7 +11,7 @@
 		breakpoints = (
 			AF4480A50BB4292300408822 /* kerberosbasic.c:35 */,
 			AF4480C10BB42C1E00408822 /* kerberosbasic.c:92 */,
-			AF4480CD0BB42CFF00408822 /* main.c:18 */,
+			AF4480CD0BB42CFF00408822 /* main.c:23 */,
 			AF4480D80BB42D6100408822 /* kerberosgss.c:253 */,
 		);
 		codeSenseManager = AFDE37F60BB41E00008C037E /* Code sense */;
@@ -24,7 +24,7 @@
 				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
 				PBXFileTableDataSourceColumnWidthsKey = (
 					20,
-					813,
+					1384,
 					20,
 					48,
 					43,
@@ -41,8 +41,8 @@
 					PBXFileDataSource_Target_ColumnID,
 				);
 			};
-			PBXPerProjectTemplateStateSaveDate = 196357790;
-			PBXWorkspaceStateSaveDate = 196357790;
+			PBXPerProjectTemplateStateSaveDate = 263863739;
+			PBXWorkspaceStateSaveDate = 263863739;
 		};
 		perUserProjectItems = {
 			AF4480AD0BB42BFD00408822 = AF4480AD0BB42BFD00408822 /* PBXTextBookmark */;
@@ -50,6 +50,37 @@
 			AF4480B00BB42BFD00408822 = AF4480B00BB42BFD00408822 /* PBXTextBookmark */;
 			AF4480CF0BB42D1700408822 = AF4480CF0BB42D1700408822 /* PBXTextBookmark */;
 			AF4480DF0BB42E3C00408822 = AF4480DF0BB42E3C00408822 /* PBXTextBookmark */;
+			AF88E92D0FBA3EB400C5AA9C /* PBXTextBookmark */ = AF88E92D0FBA3EB400C5AA9C /* PBXTextBookmark */;
+			AF88E92E0FBA3EB400C5AA9C /* PBXTextBookmark */ = AF88E92E0FBA3EB400C5AA9C /* PBXTextBookmark */;
+			AF88E9300FBA3EB400C5AA9C /* PBXTextBookmark */ = AF88E9300FBA3EB400C5AA9C /* PBXTextBookmark */;
+			AF88E9400FBA3FD300C5AA9C /* XCBuildMessageTextBookmark */ = AF88E9400FBA3FD300C5AA9C /* XCBuildMessageTextBookmark */;
+			AF88E9410FBA3FD300C5AA9C /* PBXTextBookmark */ = AF88E9410FBA3FD300C5AA9C /* PBXTextBookmark */;
+			AF88E94C0FBA407500C5AA9C /* PBXTextBookmark */ = AF88E94C0FBA407500C5AA9C /* PBXTextBookmark */;
+			AF88E9560FBA419E00C5AA9C /* PBXTextBookmark */ = AF88E9560FBA419E00C5AA9C /* PBXTextBookmark */;
+			AF88E95C0FBA41D300C5AA9C /* PBXTextBookmark */ = AF88E95C0FBA41D300C5AA9C /* PBXTextBookmark */;
+			AF88E95D0FBA41D300C5AA9C /* PBXTextBookmark */ = AF88E95D0FBA41D300C5AA9C /* PBXTextBookmark */;
+			AF88E95E0FBA41D300C5AA9C /* PBXTextBookmark */ = AF88E95E0FBA41D300C5AA9C /* PBXTextBookmark */;
+			AF88E95F0FBA41D300C5AA9C /* PBXTextBookmark */ = AF88E95F0FBA41D300C5AA9C /* PBXTextBookmark */;
+			AF88E9600FBA41D300C5AA9C /* PBXTextBookmark */ = AF88E9600FBA41D300C5AA9C /* PBXTextBookmark */;
+			AF88E9610FBA41D300C5AA9C /* PBXTextBookmark */ = AF88E9610FBA41D300C5AA9C /* PBXTextBookmark */;
+			AF88E9620FBA41D300C5AA9C /* PBXTextBookmark */ = AF88E9620FBA41D300C5AA9C /* PBXTextBookmark */;
+			AF88E9630FBA41D300C5AA9C /* PBXTextBookmark */ = AF88E9630FBA41D300C5AA9C /* PBXTextBookmark */;
+			AF88E9660FBA435000C5AA9C /* PBXTextBookmark */ = AF88E9660FBA435000C5AA9C /* PBXTextBookmark */;
+			AF88E9670FBA435000C5AA9C /* PBXTextBookmark */ = AF88E9670FBA435000C5AA9C /* PBXTextBookmark */;
+			AF88E9680FBA435000C5AA9C /* PBXTextBookmark */ = AF88E9680FBA435000C5AA9C /* PBXTextBookmark */;
+			AF88E9690FBA435000C5AA9C /* PBXTextBookmark */ = AF88E9690FBA435000C5AA9C /* PBXTextBookmark */;
+			AF88E96A0FBA435000C5AA9C /* PBXTextBookmark */ = AF88E96A0FBA435000C5AA9C /* PBXTextBookmark */;
+			AF88E96B0FBA435000C5AA9C /* PBXTextBookmark */ = AF88E96B0FBA435000C5AA9C /* PBXTextBookmark */;
+			AF88E96C0FBA438E00C5AA9C /* PBXTextBookmark */ = AF88E96C0FBA438E00C5AA9C /* PBXTextBookmark */;
+			AF88E96D0FBA43A100C5AA9C /* PBXTextBookmark */ = AF88E96D0FBA43A100C5AA9C /* PBXTextBookmark */;
+			AF88E96E0FBA43B300C5AA9C /* PBXTextBookmark */ = AF88E96E0FBA43B300C5AA9C /* PBXTextBookmark */;
+			AF88E96F0FBA43D100C5AA9C /* PBXTextBookmark */ = AF88E96F0FBA43D100C5AA9C /* PBXTextBookmark */;
+			AF88E9700FBA441100C5AA9C /* PBXTextBookmark */ = AF88E9700FBA441100C5AA9C /* PBXTextBookmark */;
+			AF88E9710FBA441B00C5AA9C /* PBXTextBookmark */ = AF88E9710FBA441B00C5AA9C /* PBXTextBookmark */;
+			AF88E9720FBA442300C5AA9C /* PBXTextBookmark */ = AF88E9720FBA442300C5AA9C /* PBXTextBookmark */;
+			AF88E9730FBA443200C5AA9C /* PBXTextBookmark */ = AF88E9730FBA443200C5AA9C /* PBXTextBookmark */;
+			AF88E97A0FBA449500C5AA9C /* PBXTextBookmark */ = AF88E97A0FBA449500C5AA9C /* PBXTextBookmark */;
+			AF88E97B0FBA449500C5AA9C /* PBXTextBookmark */ = AF88E97B0FBA449500C5AA9C /* PBXTextBookmark */;
 			AFDE38700BB420B1008C037E = AFDE38700BB420B1008C037E /* PBXTextBookmark */;
 			AFDE38870BB42287008C037E = AFDE38870BB42287008C037E /* PBXTextBookmark */;
 			AFDE388A0BB42287008C037E = AFDE388A0BB42287008C037E /* PBXTextBookmark */;
@@ -61,8 +92,9 @@
 	};
 	08FB7796FE84155DC02AAC07 /* main.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {984, 322}}";
-			sepNavSelRange = "{420, 0}";
+			sepNavIntBoundsRect = "{{0, 0}, {1562, 616}}";
+			sepNavSelRange = "{1055, 0}";
+			sepNavVisRange = "{0, 1131}";
 			sepNavVisRect = "{{0, 0}, {984, 308}}";
 			sepNavWindowFrame = "{{485, -20}, {1395, 1160}}";
 		};
@@ -86,8 +118,9 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 35;
-		location = kerberosbasic.ob;
-		modificationTime = 196358061.544823;
+		location = PyKerberos;
+		modificationTime = 263864776.548559;
+		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
 	AF4480AD0BB42BFD00408822 /* PBXTextBookmark */ = {
@@ -95,7 +128,7 @@
 		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
 		name = "kerberosgss.c: 47";
 		rLen = 0;
-		rLoc = 1285;
+		rLoc = 1293;
 		rType = 0;
 		vrLen = 930;
 		vrLoc = 867;
@@ -115,7 +148,7 @@
 		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
 		name = "kerberosgss.c: 47";
 		rLen = 0;
-		rLoc = 1285;
+		rLoc = 1293;
 		rType = 0;
 		vrLen = 930;
 		vrLoc = 867;
@@ -133,11 +166,12 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 92;
-		location = kerberosbasic.ob;
-		modificationTime = 196358061.544839;
+		location = PyKerberos;
+		modificationTime = 263864776.583793;
+		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
-	AF4480CD0BB42CFF00408822 /* main.c:18 */ = {
+	AF4480CD0BB42CFF00408822 /* main.c:23 */ = {
 		isa = PBXFileBreakpoint;
 		actions = (
 		);
@@ -146,12 +180,13 @@
 		countType = 0;
 		delayBeforeContinue = 0;
 		fileReference = 08FB7796FE84155DC02AAC07 /* main.c */;
-		functionName = "main (int argc, char * const argv[])";
+		functionName = "main()";
 		hitCount = 1;
 		ignoreCount = 0;
-		lineNumber = 18;
-		location = main.ob;
-		modificationTime = 196358037.390216;
+		lineNumber = 23;
+		location = PyKerberos;
+		modificationTime = 263864776.766891;
+		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
 	AF4480CF0BB42D1700408822 /* PBXTextBookmark */ = {
@@ -175,8 +210,9 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 253;
-		location = kerberosgss.ob;
-		modificationTime = 196358037.343018;
+		location = PyKerberos;
+		modificationTime = 263864776.633991;
+		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
 	AF4480DF0BB42E3C00408822 /* PBXTextBookmark */ = {
@@ -189,9 +225,343 @@
 		vrLen = 584;
 		vrLoc = 0;
 	};
+	AF88E92D0FBA3EB400C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 498";
+		rLen = 0;
+		rLoc = 15211;
+		rType = 0;
+		vrLen = 1613;
+		vrLoc = 12775;
+	};
+	AF88E92E0FBA3EB400C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AF88E92F0FBA3EB400C5AA9C /* gssapi.h */;
+		rLen = 1;
+		rLoc = 203;
+		rType = 1;
+	};
+	AF88E92F0FBA3EB400C5AA9C /* gssapi.h */ = {
+		isa = PBXFileReference;
+		lastKnownFileType = sourcecode.c.h;
+		name = gssapi.h;
+		path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/gssapi/gssapi.h;
+		sourceTree = "<absolute>";
+	};
+	AF88E9300FBA3EB400C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AF88E9310FBA3EB400C5AA9C /* gssapi.h */;
+		name = "gssapi.h: 204";
+		rLen = 48;
+		rLoc = 5223;
+		rType = 0;
+		vrLen = 1593;
+		vrLoc = 4463;
+	};
+	AF88E9310FBA3EB400C5AA9C /* gssapi.h */ = {
+		isa = PBXFileReference;
+		lastKnownFileType = sourcecode.c.h;
+		name = gssapi.h;
+		path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/gssapi/gssapi.h;
+		sourceTree = "<absolute>";
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {1651, 10504}}";
+			sepNavSelRange = "{18918, 19}";
+			sepNavVisRange = "{18293, 1476}";
+		};
+	};
+	AF88E9400FBA3FD300C5AA9C /* XCBuildMessageTextBookmark */ = {
+		isa = XCBuildMessageTextBookmark;
+		comments = "Python.h: No such file or directory";
+		fRef = AFDE37FA0BB41E1D008C037E /* kerberosbasic.c */;
+		rLen = 1;
+		rLoc = 16;
+		rType = 1;
+	};
+	AF88E9410FBA3FD300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FA0BB41E1D008C037E /* kerberosbasic.c */;
+		name = "kerberosbasic.c: 17";
+		rLen = 0;
+		rLoc = 627;
+		rType = 0;
+		vrLen = 450;
+		vrLoc = 300;
+	};
+	AF88E94C0FBA407500C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FA0BB41E1D008C037E /* kerberosbasic.c */;
+		name = "kerberosbasic.c: 17";
+		rLen = 0;
+		rLoc = 627;
+		rType = 0;
+		vrLen = 1616;
+		vrLoc = 0;
+	};
+	AF88E94E0FBA416E00C5AA9C /* kerberospw.c */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {1562, 1781}}";
+			sepNavSelRange = "{0, 0}";
+			sepNavVisRange = "{0, 1509}";
+		};
+	};
+	AF88E94F0FBA416E00C5AA9C /* kerberospw.h */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {1562, 616}}";
+			sepNavSelRange = "{0, 0}";
+			sepNavVisRange = "{0, 867}";
+		};
+	};
+	AF88E9560FBA419E00C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FA0BB41E1D008C037E /* kerberosbasic.c */;
+		name = "kerberosbasic.c: 17";
+		rLen = 0;
+		rLoc = 627;
+		rType = 0;
+		vrLen = 1487;
+		vrLoc = 0;
+	};
+	AF88E95C0FBA41D300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 496";
+		rLen = 22;
+		rLoc = 15065;
+		rType = 0;
+		vrLen = 1715;
+		vrLoc = 14638;
+	};
+	AF88E95D0FBA41D300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AF88E9310FBA3EB400C5AA9C /* gssapi.h */;
+		name = "gssapi.h: 585";
+		rLen = 19;
+		rLoc = 18918;
+		rType = 0;
+		vrLen = 1476;
+		vrLoc = 18293;
+	};
+	AF88E95E0FBA41D300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE383A0BB41FFA008C037E /* kerberos.c */;
+		name = "kerberos.c: 39";
+		rLen = 25;
+		rLoc = 1160;
+		rType = 0;
+		vrLen = 1124;
+		vrLoc = 992;
+	};
+	AF88E95F0FBA41D300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FA0BB41E1D008C037E /* kerberosbasic.c */;
+		name = "kerberosbasic.c: 27";
+		rLen = 63;
+		rLoc = 806;
+		rType = 0;
+		vrLen = 1617;
+		vrLoc = 63;
+	};
+	AF88E9600FBA41D300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AF88E94F0FBA416E00C5AA9C /* kerberospw.h */;
+		name = "kerberospw.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 867;
+		vrLoc = 0;
+	};
+	AF88E9610FBA41D300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AF88E94E0FBA416E00C5AA9C /* kerberospw.c */;
+		name = "kerberospw.c: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1509;
+		vrLoc = 0;
+	};
+	AF88E9620FBA41D300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 08FB7796FE84155DC02AAC07 /* main.c */;
+		rLen = 0;
+		rLoc = 22;
+		rType = 1;
+	};
+	AF88E9630FBA41D300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 08FB7796FE84155DC02AAC07 /* main.c */;
+		name = "main.c: 33";
+		rLen = 0;
+		rLoc = 1055;
+		rType = 0;
+		vrLen = 1131;
+		vrLoc = 0;
+	};
+	AF88E9660FBA435000C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 08FB7796FE84155DC02AAC07 /* main.c */;
+		name = "main.c: 33";
+		rLen = 0;
+		rLoc = 1055;
+		rType = 0;
+		vrLen = 1131;
+		vrLoc = 0;
+	};
+	AF88E9670FBA435000C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE383A0BB41FFA008C037E /* kerberos.c */;
+		name = "kerberos.c: 415";
+		rLen = 0;
+		rLoc = 11472;
+		rType = 0;
+		vrLen = 1178;
+		vrLoc = 7396;
+	};
+	AF88E9680FBA435000C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FB0BB41E1D008C037E /* kerberosbasic.h */;
+		name = "kerberosbasic.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 898;
+		vrLoc = 0;
+	};
+	AF88E9690FBA435000C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FD0BB41E1D008C037E /* kerberosgss.h */;
+		name = "kerberosgss.h: 46";
+		rLen = 0;
+		rLoc = 1419;
+		rType = 0;
+		vrLen = 1615;
+		vrLoc = 587;
+	};
+	AF88E96A0FBA435000C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 496";
+		rLen = 22;
+		rLoc = 15065;
+		rType = 0;
+		vrLen = 1710;
+		vrLoc = 14638;
+	};
+	AF88E96B0FBA435000C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 539";
+		rLen = 0;
+		rLoc = 17377;
+		rType = 0;
+		vrLen = 1293;
+		vrLoc = 15634;
+	};
+	AF88E96C0FBA438E00C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 543";
+		rLen = 19;
+		rLoc = 16673;
+		rType = 0;
+		vrLen = 1714;
+		vrLoc = 15772;
+	};
+	AF88E96D0FBA43A100C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 543";
+		rLen = 0;
+		rLoc = 16692;
+		rType = 0;
+		vrLen = 1563;
+		vrLoc = 15772;
+	};
+	AF88E96E0FBA43B300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 543";
+		rLen = 0;
+		rLoc = 16718;
+		rType = 0;
+		vrLen = 1588;
+		vrLoc = 15777;
+	};
+	AF88E96F0FBA43D100C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 543";
+		rLen = 0;
+		rLoc = 16726;
+		rType = 0;
+		vrLen = 1594;
+		vrLoc = 15777;
+	};
+	AF88E9700FBA441100C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 544";
+		rLen = 0;
+		rLoc = 16738;
+		rType = 0;
+		vrLen = 1483;
+		vrLoc = 16048;
+	};
+	AF88E9710FBA441B00C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 544";
+		rLen = 0;
+		rLoc = 16768;
+		rType = 0;
+		vrLen = 1484;
+		vrLoc = 16048;
+	};
+	AF88E9720FBA442300C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 544";
+		rLen = 0;
+		rLoc = 16768;
+		rType = 0;
+		vrLen = 1491;
+		vrLoc = 16048;
+	};
+	AF88E9730FBA443200C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 544";
+		rLen = 0;
+		rLoc = 16768;
+		rType = 0;
+		vrLen = 1503;
+		vrLoc = 16048;
+	};
+	AF88E97A0FBA449500C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 529";
+		rLen = 16;
+		rLoc = 16093;
+		rType = 0;
+		vrLen = 1576;
+		vrLoc = 15766;
+	};
+	AF88E97B0FBA449500C5AA9C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
+		name = "kerberosgss.c: 551";
+		rLen = 0;
+		rLoc = 16985;
+		rType = 0;
+		vrLen = 1596;
+		vrLoc = 16048;
+	};
 	AFDE37EE0BB41DF9008C037E /* PyKerberos */ = {
 		isa = PBXExecutable;
-		activeArgIndex = 2147483647;
 		activeArgIndices = (
 		);
 		argumentStrings = (
@@ -201,6 +571,9 @@
 		configStateDict = {
 		};
 		customDataFormattersEnabled = 1;
+		dataTipCustomDataFormattersEnabled = 1;
+		dataTipShowTypeColumn = 1;
+		dataTipSortType = 0;
 		debuggerPlugin = GDBDebugging;
 		disassemblyDisplayState = 0;
 		dylibVariantSuffix = "";
@@ -213,6 +586,7 @@
 		name = PyKerberos;
 		savedGlobals = {
 		};
+		showTypeColumn = 0;
 		sourceDirectories = (
 		);
 		variableFormatDictionary = {
@@ -222,7 +596,11 @@
 		isa = PBXSourceControlManager;
 		fallbackIsa = XCSourceControlManager;
 		isSCMEnabled = 0;
+		repositoryNamesForRoots = {
+		};
 		scmConfiguration = {
+			repositoryNamesForRoots = {
+			};
 		};
 	};
 	AFDE37F60BB41E00008C037E /* Code sense */ = {
@@ -238,38 +616,43 @@
 	};
 	AFDE37FA0BB41E1D008C037E /* kerberosbasic.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {984, 2142}}";
-			sepNavSelRange = "{1171, 0}";
+			sepNavIntBoundsRect = "{{0, 0}, {1283, 1846}}";
+			sepNavSelRange = "{627, 0}";
+			sepNavVisRange = "{0, 1616}";
 			sepNavVisRect = "{{0, 325}, {984, 316}}";
 		};
 	};
 	AFDE37FB0BB41E1D008C037E /* kerberosbasic.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1336, 1031}}";
-			sepNavSelRange = "{824, 115}";
+			sepNavIntBoundsRect = "{{0, 0}, {1562, 616}}";
+			sepNavSelRange = "{0, 0}";
+			sepNavVisRange = "{0, 898}";
 			sepNavVisRect = "{{0, 0}, {1336, 1031}}";
 			sepNavWindowFrame = "{{15, 13}, {1395, 1160}}";
 		};
 	};
 	AFDE37FC0BB41E1D008C037E /* kerberosgss.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {984, 4550}}";
-			sepNavSelRange = "{7491, 0}";
+			sepNavIntBoundsRect = "{{0, 0}, {1562, 7969}}";
+			sepNavSelRange = "{16985, 0}";
+			sepNavVisRange = "{16048, 1596}";
 			sepNavVisRect = "{{0, 2485}, {984, 308}}";
 		};
 	};
 	AFDE37FD0BB41E1D008C037E /* kerberosgss.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1336, 1031}}";
-			sepNavSelRange = "{1553, 140}";
+			sepNavIntBoundsRect = "{{0, 0}, {1562, 793}}";
+			sepNavSelRange = "{1419, 0}";
+			sepNavVisRange = "{587, 1615}";
 			sepNavVisRect = "{{0, 0}, {1336, 1031}}";
 			sepNavWindowFrame = "{{15, 13}, {1395, 1160}}";
 		};
 	};
 	AFDE383A0BB41FFA008C037E /* kerberos.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {932, 2282}}";
-			sepNavSelRange = "{690, 0}";
+			sepNavIntBoundsRect = "{{0, 0}, {1562, 5733}}";
+			sepNavSelRange = "{11472, 0}";
+			sepNavVisRange = "{7396, 1178}";
 			sepNavVisRect = "{{0, 0}, {932, 292}}";
 		};
 	};
@@ -315,7 +698,7 @@
 		fRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */;
 		name = "kerberosgss.c: 47";
 		rLen = 0;
-		rLoc = 1290;
+		rLoc = 1298;
 		rType = 0;
 		vrLen = 1144;
 		vrLoc = 1097;

Modified: PyKerberos/trunk/support/PyKerberos.xcodeproj/project.pbxproj
===================================================================
--- PyKerberos/trunk/support/PyKerberos.xcodeproj/project.pbxproj	2009-05-12 21:50:50 UTC (rev 4240)
+++ PyKerberos/trunk/support/PyKerberos.xcodeproj/project.pbxproj	2009-05-13 01:01:58 UTC (rev 4241)
@@ -3,12 +3,13 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 42;
+	objectVersion = 44;
 	objects = {
 
 /* Begin PBXBuildFile section */
 		8DD76F650486A84900D96B5E /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* main.c */; settings = {ATTRIBUTES = (); }; };
 		8DD76F6A0486A84900D96B5E /* PyKerberos.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6859E8B029090EE04C91782 /* PyKerberos.1 */; };
+		AF88E9500FBA416E00C5AA9C /* kerberospw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF88E94E0FBA416E00C5AA9C /* kerberospw.c */; };
 		AFDE37FE0BB41E1D008C037E /* base64.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDE37F80BB41E1D008C037E /* base64.c */; };
 		AFDE37FF0BB41E1D008C037E /* kerberosbasic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDE37FA0BB41E1D008C037E /* kerberosbasic.c */; };
 		AFDE38000BB41E1D008C037E /* kerberosgss.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDE37FC0BB41E1D008C037E /* kerberosgss.c */; };
@@ -33,6 +34,8 @@
 /* Begin PBXFileReference section */
 		08FB7796FE84155DC02AAC07 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
 		8DD76F6C0486A84900D96B5E /* PyKerberos */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = PyKerberos; sourceTree = BUILT_PRODUCTS_DIR; };
+		AF88E94E0FBA416E00C5AA9C /* kerberospw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = kerberospw.c; path = ../src/kerberospw.c; sourceTree = SOURCE_ROOT; };
+		AF88E94F0FBA416E00C5AA9C /* kerberospw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = kerberospw.h; path = ../src/kerberospw.h; sourceTree = SOURCE_ROOT; };
 		AFDE37F80BB41E1D008C037E /* base64.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = base64.c; path = ../src/base64.c; sourceTree = SOURCE_ROOT; };
 		AFDE37F90BB41E1D008C037E /* base64.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = base64.h; path = ../src/base64.h; sourceTree = SOURCE_ROOT; };
 		AFDE37FA0BB41E1D008C037E /* kerberosbasic.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = kerberosbasic.c; path = ../src/kerberosbasic.c; sourceTree = SOURCE_ROOT; };
@@ -79,6 +82,8 @@
 				AFDE37FB0BB41E1D008C037E /* kerberosbasic.h */,
 				AFDE37FC0BB41E1D008C037E /* kerberosgss.c */,
 				AFDE37FD0BB41E1D008C037E /* kerberosgss.h */,
+				AF88E94E0FBA416E00C5AA9C /* kerberospw.c */,
+				AF88E94F0FBA416E00C5AA9C /* kerberospw.h */,
 				08FB7796FE84155DC02AAC07 /* main.c */,
 			);
 			name = Source;
@@ -141,7 +146,6 @@
 			mainGroup = 08FB7794FE84155DC02AAC07 /* PyKerberos */;
 			projectDirPath = "";
 			projectRoot = "";
-			shouldCheckCompatibility = 1;
 			targets = (
 				8DD76F620486A84900D96B5E /* PyKerberos */,
 			);
@@ -158,6 +162,7 @@
 				AFDE37FF0BB41E1D008C037E /* kerberosbasic.c in Sources */,
 				AFDE38000BB41E1D008C037E /* kerberosgss.c in Sources */,
 				AFDE383B0BB41FFA008C037E /* kerberos.c in Sources */,
+				AF88E9500FBA416E00C5AA9C /* kerberospw.c in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -176,6 +181,7 @@
 					"_GLIBCXX_DEBUG=1",
 					"_GLIBCXX_DEBUG_PEDANTIC=1",
 				);
+				HEADER_SEARCH_PATHS = "/System/Library/Frameworks/Python.framework/Headers/**";
 				INSTALL_PATH = /usr/local/bin;
 				PRODUCT_NAME = PyKerberos;
 				ZERO_LINK = YES;
@@ -191,6 +197,7 @@
 				);
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				GCC_MODEL_TUNING = G5;
+				HEADER_SEARCH_PATHS = "/System/Library/Frameworks/Python.framework/Headers/**";
 				INSTALL_PATH = /usr/local/bin;
 				PRODUCT_NAME = PyKerberos;
 			};
@@ -202,7 +209,7 @@
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.5.sdk;
+				SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
 			};
 			name = Debug;
 		};
@@ -213,7 +220,7 @@
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				HEADER_SEARCH_PATHS = "";
 				PREBINDING = NO;
-				SDKROOT = /Developer/SDKs/MacOSX10.5.sdk;
+				SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
 				USER_HEADER_SEARCH_PATHS = ..src;
 			};
 			name = Release;

Modified: PyKerberos/trunk/support/main.c
===================================================================
--- PyKerberos/trunk/support/main.c	2009-05-12 21:50:50 UTC (rev 4240)
+++ PyKerberos/trunk/support/main.c	2009-05-13 01:01:58 UTC (rev 4241)
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2006-2008 Apple Inc. All rights reserved.
+ * Copyright (c) 2006-2009 Apple Inc. All rights reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,13 +24,13 @@
 	char* service = 0L;
 	gss_server_state state;
 
-	service = server_principal_details("http", "caldav.corp.apple.com");
+	service = server_principal_details("http", "caldav.local");
 
 	//printf("Got service principal: %s\n", result);
 
 	//code = authenticate_user_krb5pwd("x", "x", "http/caldav.corp.apple.com at CALDAV.CORP.APPLE.COM", "CALDAV.CORP.APPLE.COM");
 
-	code = authenticate_gss_server_init("http at CALDAV.CORP.APPLE.COM", &state);
+	code = authenticate_gss_server_init("", &state);
 	code = authenticate_gss_server_clean(&state);
 
     return 0;

Modified: PyKerberos/trunk/test.py
===================================================================
--- PyKerberos/trunk/test.py	2009-05-12 21:50:50 UTC (rev 4240)
+++ PyKerberos/trunk/test.py	2009-05-13 01:01:58 UTC (rev 4241)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2008 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2009 Apple Inc. All rights reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
     # Extract arguments
     user = ""
     pswd = ""
-    service = "http at EXAMPLE.COM"
+    service = "HTTP at EXAMPLE.COM"
     host = "host.example.com"
     realm ="HOST.EXAMPLE.COM"
     port = 8008
@@ -115,7 +115,7 @@
     if rc != 1:
         return
     
-    rs, vs = kerberos.authGSSServerInit(service);
+    rs, vs = kerberos.authGSSServerInit("");
     print "Status for authGSSServerInit = %s" % statusText(rs);
     if rs != 1:
         return
@@ -136,6 +136,7 @@
         return
 
     print "Server user name: %s" % kerberos.authGSSServerUserName(vs);
+    print "Server target name: %s" % kerberos.authGSSServerTargetName(vs);
     print "Client user name: %s" % kerberos.authGSSClientUserName(vc);
     
     rc = kerberos.authGSSClientClean(vc);
@@ -204,7 +205,7 @@
     try:
         kerberos.authGSSClientStep(vc, "");
     except kerberos.GSSError, e:
-        print "Could not do GSSAPI setp with continue: %s/%s" % (e[0][0], e[1][0])
+        print "Could not do GSSAPI step with continue: %s/%s" % (e[0][0], e[1][0])
         return
 
     hdrs = {}
@@ -248,6 +249,7 @@
         print "Could not clean-up GSSAPI: %s/%s" % (e[0][0], e[1][0])
         return
 
+    print "Authenticated successfully"
     return
 
 if __name__=='__main__':
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090512/d369a48d/attachment-0001.html>


More information about the calendarserver-changes mailing list