Make Enter Identity dialog have one auto-completing, auto-validating text field for...
authorJustin Anderson <jander@mit.edu>
Thu, 2 Oct 2008 03:48:48 +0000 (03:48 +0000)
committerJustin Anderson <jander@mit.edu>
Thu, 2 Oct 2008 03:48:48 +0000 (03:48 +0000)
Changed options for a favorite identity get saved out to kim_preferences.

Also, include copyright on more files.

ticket:6055

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20807 dc483132-0cff-0310-8789-dd5450dbe970

16 files changed:
src/kim/agent/mac/AuthenticationController.h
src/kim/agent/mac/AuthenticationController.m
src/kim/agent/mac/IPCClient.h
src/kim/agent/mac/IPCClient.m
src/kim/agent/mac/Identities.m
src/kim/agent/mac/KIMUtilities.h
src/kim/agent/mac/KIMUtilities.m
src/kim/agent/mac/KerberosAgentController.m
src/kim/agent/mac/KerberosAgentListener.h
src/kim/agent/mac/KerberosAgentListener.m
src/kim/agent/mac/KerberosFormatters.m
src/kim/agent/mac/SelectIdentityController.h
src/kim/agent/mac/SelectIdentityController.m
src/kim/agent/mac/ServerDemux.m
src/kim/agent/mac/resources/English.lproj/Authentication.xib
src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib

index ed5d9d79a17deb14cca93ce76712089853bf9616..4035668e2e61c1c7240bb59d910c390ae4251d25 100644 (file)
 #import <Cocoa/Cocoa.h>
 
 @class IPCClient;
+@class KerberosTimeFormatter;
 @class BadgedImageView;
 
 @interface AuthenticationController : NSWindowController {
     IPCClient *associatedClient;
     
+    IBOutlet KerberosTimeFormatter *lifetimeFormatter;
+    
     IBOutlet NSView *containerView;
     IBOutlet NSView *identityView;
     IBOutlet NSView *passwordView;
@@ -45,7 +48,7 @@
     IBOutlet BadgedImageView *errorBadge;
     
     // Controls that need to be made key
-    IBOutlet NSTextField *usernameField;
+    IBOutlet NSTextField *identityField;
     IBOutlet NSTextField *passwordField;
     IBOutlet NSTextField *samPromptField;
     IBOutlet NSTextField *oldPasswordField;
     
     IBOutlet NSSlider *validLifetimeSlider;
     IBOutlet NSSlider *renewableLifetimeSlider;
+    
+    NSMutableArray *favoriteIdentities;
+    NSMutableDictionary *favoriteOptions;
 }
 
 @property (readwrite, retain) IPCClient *associatedClient;
+@property (readwrite, retain) NSMutableArray *favoriteIdentities;
+@property (readwrite, retain) NSMutableDictionary *favoriteOptions;
 
 - (void) setContent: (NSMutableDictionary *) newContent;
 
index 1756e5aabf242b14ff171f56a53f089fdad594ec..eaf4e6913e3e6351bdaa412a016e55c0b7ee08cd 100644 (file)
@@ -24,6 +24,7 @@
 
 #import "AuthenticationController.h"
 #import "IPCClient.h"
+#import "KerberosFormatters.h"
 #import "BadgedImageView.h"
 
 // to get kim_prompt_type enum
  * verify_password = "
  */
 
-#define client_name_keypath          @"content.name"
-#define client_path_keypath          @"content.path"
-
-#define identity_string_keypath      @"content.identity_string"
-#define title_keypath                @"content.title"
-#define message_keypath              @"content.message"
-#define description_keypath          @"content.description"
-
-#define username_keypath             @"content.username"
-#define realm_keypath                @"content.realm"
-#define realm_history_keypath        @"content.realm_history"
-
-#define prompt_response_keypath      @"content.prompt_response"
-#define allow_save_password_keypath  @"content.allow_save"
-#define should_save_password_keypath @"content.save_response"
-
-#define password_expired_keypath     @"content.expired"
-#define old_password_keypath         @"content.old_password"
-#define new_password_keypath         @"content.new_password"
-#define verify_password_keypath      @"content.verify_password"
-
-#define enable_identity_ok_keypath   @"content.isPrincipalValid"
-#define enable_prompt_ok_keypath     @"content.isPromptValid"
-#define change_password_ok_keypath   @"content.isChangePasswordValid"
-
-#define options_keypath              @"content.options"
-
-#define valid_lifetime_keypath       @"content.valid_lifetime"
-#define renewal_lifetime_keypath     @"content.renewal_lifetime"
-#define renewable_keypath            @"content.renewable"
-#define addressless_keypath          @"content.addressless"
-#define forwardable_keypath          @"content.forwardable"
-
-#define min_valid_keypath            @"content.minValidLifetime"
-#define max_valid_keypath            @"content.maxValidLifetime"
-#define min_renewable_keypath        @"content.minRenewableLifetime"
-#define max_renewable_keypath        @"content.maxRenewableLifetime"
-
-#define ACKVOContext                 @"authenticationController"
-
 // localization keys and tables
 
 #define ACLocalizationTable          @"AuthenticationController"
 @implementation AuthenticationController
 
 @synthesize associatedClient;
+@synthesize favoriteIdentities;
+@synthesize favoriteOptions;
 
 - (id) init
 {
     // We need to float over the loginwindow and SecurityAgent so use its hardcoded level.
     [[self window] setLevel:2003];
     
+    lifetimeFormatter.displaySeconds = NO;
+    lifetimeFormatter.displayShortFormat = NO;
+    
     [glueController addObserver:self 
-                     forKeyPath:username_keypath 
+                     forKeyPath:identity_string_keypath 
                         options:NSKeyValueObservingOptionNew 
                         context:ACKVOContext];
-    [glueController addObserver:self
-                     forKeyPath:realm_keypath
-                        options:NSKeyValueObservingOptionNew
-                        context:ACKVOContext];
     [glueController addObserver:self
                      forKeyPath:prompt_response_keypath
                         options:NSKeyValueObservingOptionNew
 
 - (void) dealloc
 {
-    [glueController removeObserver:self forKeyPath:username_keypath];
-    [glueController removeObserver:self forKeyPath:realm_keypath];
+    [glueController removeObserver:self forKeyPath:identity_string_keypath];
     [glueController removeObserver:self forKeyPath:prompt_response_keypath];
     [super dealloc];
 }
 
 - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
 {
+    BOOL valid = NO;
+    
     if ([(NSString *) context isEqualToString:ACKVOContext]) {
-       if ([keyPath isEqualToString:username_keypath] || [keyPath isEqualToString:realm_keypath]) {
-            BOOL valid = [KIMUtilities validatePrincipalWithName:[glueController valueForKeyPath:username_keypath] 
-                                                           realm:[glueController valueForKeyPath:realm_keypath]];
+       if ([keyPath isEqualToString:identity_string_keypath]) {
+            valid = [KIMUtilities validateIdentity:[glueController valueForKeyPath:identity_string_keypath]];
             [glueController setValue:[NSNumber numberWithBool:valid] 
                           forKeyPath:enable_identity_ok_keypath];
        }
         else if ([keyPath isEqualToString:prompt_response_keypath]) {
-            BOOL valid = ([[glueController valueForKeyPath:prompt_response_keypath] length] > 0);
+            valid = ([[glueController valueForKeyPath:prompt_response_keypath] length] > 0);
             [glueController setValue:[NSNumber numberWithBool:valid] 
                           forKeyPath:enable_prompt_ok_keypath];
        }
             NSString *oldString = [glueController valueForKeyPath:old_password_keypath];
             NSString *newString = [glueController valueForKeyPath:new_password_keypath];
             NSString *verifyString = [glueController valueForKeyPath:verify_password_keypath];
-            BOOL valid = ([oldString length] > 0 &&
-                          [newString length] > 0 &&
-                          [verifyString length] > 0 &&
-                          [newString isEqualToString:verifyString]);
+            valid = ([oldString length] > 0 && [newString length] > 0 &&
+                     [verifyString length] > 0 && [newString isEqualToString:verifyString]);
             [glueController setValue:[NSNumber numberWithBool:valid] 
                           forKeyPath:change_password_ok_keypath];
         }
 
 - (void) showEnterIdentity
 {
+    kim_error err = KIM_NO_ERROR;
     NSString *key = (associatedClient.name) ? ACAppPrincReqKey : ACPrincReqKey;
     NSString *message = [NSString stringWithFormat:
                          NSLocalizedStringFromTable(key, ACLocalizationTable, NULL),
                          associatedClient.name];
     
+    self.favoriteIdentities = [NSMutableArray array];
+    self.favoriteOptions = [NSMutableDictionary dictionary];
+    // get array of favorite identity strings and associated options
+    
+    if (!err) {
+        kim_preferences preferences = NULL;
+        kim_options kimOptions = NULL;
+        kim_count i;
+        kim_count count = 0;
+        
+        err = kim_preferences_create(&preferences);
+        
+        if (!err) {
+            err = kim_preferences_get_number_of_favorite_identities(preferences,
+                                                                    &count);
+        }
+        
+        for (i = 0; !err && i < count; i++) {
+            kim_identity kimIdentity = NULL;
+            kim_string display_string = NULL;
+            NSString *identityString = nil;
+            
+            err = kim_preferences_get_favorite_identity_at_index(preferences,
+                                                                 i,
+                                                                 &kimIdentity,
+                                                                 &kimOptions);
+            if (!err) {
+                err = kim_identity_get_display_string(kimIdentity, &display_string);
+            }
+            if (!err && display_string) {
+                identityString = [NSString stringWithUTF8String:display_string];
+                [favoriteIdentities addObject:identityString];
+            }
+            if (!err) {
+                [favoriteOptions setObject:[KIMUtilities dictionaryForKimOptions:kimOptions]
+                                    forKey:identityString];
+            }
+            
+            kim_options_free(&kimOptions);
+            kim_string_free (&display_string);
+            kim_identity_free (&kimIdentity);
+        }
+        
+        kim_preferences_free(&preferences);
+    }
+    
+    [glueController setValue:favoriteIdentities forKeyPath:favorite_strings_keypath];
+    
     // wake up the nib connections and adjust window size
     [self window];
     // set up controls with info from associatedClient
     [glueController setValue:message
                   forKeyPath:message_keypath];
     [self showWindow:nil];
-    [[self window] makeFirstResponder:usernameField];
+    [[self window] makeFirstResponder:identityField];
 }
 
 - (void) showAuthPrompt
 
 - (IBAction) showTicketOptions: (id) sender
 {
+    NSDictionary *options = nil;
+    // if this is a favorite, try to load its default options
+    [identityField validateEditing];
+
+    options = [favoriteOptions valueForKey:[identityField stringValue]];
+    
+    if (!options) {
+        options = [[[glueController valueForKeyPath:options_keypath] mutableCopy] autorelease];
+    }
+    
+    // else fallback to options passed from client
     // use a copy of the current options
-    [ticketOptionsController setContent:
-     [[[glueController valueForKeyPath:options_keypath] mutableCopy] autorelease]];
+    [ticketOptionsController setContent:options];
     
     [ticketOptionsController setValue:[NSNumber numberWithInteger:[KIMUtilities minValidLifetime]]
                            forKeyPath:min_valid_keypath];
         [ticketOptionsController setContent:nil];
     } else {
         // replace existing options with new
-        [glueController setValue:[ticketOptionsController content] forKeyPath:options_keypath];
+        // add to favorites if not already in list
+        
+        // replace options of existing if already in list
+        kim_error err = KIM_NO_ERROR;
+        kim_preferences prefs = NULL;
+        kim_identity identity = NULL;
+        kim_options options = NULL;
+
+        [glueController setValue:[ticketOptionsController content] 
+                      forKeyPath:options_keypath];
+        
+        err = kim_preferences_create(&prefs);
+        
+        if (!err) {
+            err = kim_identity_create_from_string(&identity, [[identityField stringValue] UTF8String]);
+        }
+        if (!err) {
+            options = [KIMUtilities kimOptionsForDictionary:[ticketOptionsController content]];
+        }
+        if (!identity) { err = KIM_BAD_PRINCIPAL_STRING_ERR; }
+        if (!options) { err = KIM_BAD_OPTIONS_ERR; }
+        
+        if (!err && identity) {
+            err = kim_preferences_remove_favorite_identity(prefs, identity);
+        }
+        if (!err && identity && options) {
+            err = kim_preferences_add_favorite_identity(prefs, identity, options);
+        }
+                
+        if (!err) {
+            err = kim_preferences_synchronize(prefs);
+        }
+        
+        kim_preferences_free(&prefs);
+        kim_options_free(&options);
+        kim_identity_free(&identity);
     }
     [ticketOptionsSheet orderOut:nil];
 }
 
 - (IBAction) enterIdentity: (id) sender
 {
-    NSString *usernameString = [glueController valueForKeyPath:username_keypath];
-    NSString *realmString = [glueController valueForKeyPath:realm_keypath];
-    NSString *identityString = [NSString stringWithFormat:@"%@@%@", usernameString, realmString];
+    NSString *identityString = [glueController valueForKeyPath:identity_string_keypath];
     NSDictionary *options = [glueController valueForKeyPath:options_keypath];
-    NSLog(@"%s options == %@", __FUNCTION__, options);
     
     // the principal must already be valid to get this far
     [associatedClient didEnterIdentity:identityString options:options];
index 6a0654e98548f4412f3ec1a8596008ea1983cc5d..172d79374ff3e5899da31cd40e0a9e113eff4bcb 100644 (file)
@@ -1,10 +1,27 @@
-//
-//  IPCClient.h
-//  Kerberos5
-//
-//  Created by Justin Anderson on 9/28/08.
-//  Copyright 2008 MIT. All rights reserved.
-//
+/*
+ * Copyright 2008 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 M.I.T. 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.
+ */
+
 
 #import <Cocoa/Cocoa.h>
 #import "KIMUtilities.h"
@@ -40,7 +57,7 @@
 - (kim_error) handleError: (NSDictionary *) info;
 
 - (void) didCancel;
-- (void) didSelectIdentity: (NSString *) identityString;
+- (void) didSelectIdentity: (NSString *) identityString options: (NSDictionary *) options;
 - (void) didEnterIdentity: (NSString *) identityString options: (NSDictionary *) options;
 - (void) didPromptForAuth: (NSString *) responseString saveResponse: (NSNumber *) saveResponse;
 - (void) didChangePassword: (NSString *) oldPassword
index c49e35d04affb01a1d6f5b15106481339e6d53ab..814e1480f5c991bd2b011e7b88bc47a88e5c74ad 100644 (file)
@@ -1,10 +1,27 @@
-//
-//  IPCClient.m
-//  Kerberos5
-//
-//  Created by Justin Anderson on 9/28/08.
-//  Copyright 2008 MIT. All rights reserved.
-//
+/*
+ * Copyright 2008 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 M.I.T. 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.
+ */
+
 
 #import "IPCClient.h"
 #import "SelectIdentityController.h"
@@ -102,9 +119,10 @@ enum krb_agent_client_state {
     return 0;
 }
 
-- (void) didSelectIdentity: (NSString *) identityString
+- (void) didSelectIdentity: (NSString *) identityString options: (NSDictionary *) options
 {
     [self.currentInfo setObject:identityString forKey:@"identity_string"];
+    [self.currentInfo setObject:options forKey:@"options"];
     
     [KerberosAgentListener didSelectIdentity:self.currentInfo error:0];
     
index 2ead4e5e88842ea0278e8491465c40ac11df04ed..4d9aeb71c56813303ed3cf16c413bbe8f4b2b3bc 100644 (file)
     if (self.kimIdentity) {
         err = kim_identity_get_components_string(self.kimIdentity, &display_string);
     }
-    
+
     if (!err && display_string) {
         result = [NSString stringWithUTF8String:display_string];
     }
         [parts addObject:[NSString stringWithFormat:@"%d minutes", minutes]];
     }
     if ([parts count] == 0) {
-        [parts addObject:@"0 lifetime"];
+        [parts addObject:@"0"];
     }
     return [parts componentsJoinedByString:@", "];
 }
index 49871d9e6d2e155c2fe02aae246b875913038f45..4e448b9d5616d72a44adc35a287a698e0d5db96a 100644 (file)
@@ -1,10 +1,27 @@
-//
-//  KIMUtilities.h
-//  Kerberos5
-//
-//  Created by Justin Anderson on 9/28/08.
-//  Copyright 2008 MIT. All rights reserved.
-//
+/*
+ * Copyright 2008 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 M.I.T. 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.
+ */
+
 
 #import <Cocoa/Cocoa.h>
 #import <Kerberos/kim.h>
 #define VALID_LIFETIME_INCREMENT (5 * 60)
 #define RENEWABLE_LIFETIME_INCREMENT (15 * 60)
 
+#define client_name_keypath          @"content.name"
+#define client_path_keypath          @"content.path"
+
+#define identity_string_keypath      @"content.identity_string"
+#define favorite_strings_keypath     @"content.favorite_identity_strings"
+#define title_keypath                @"content.title"
+#define message_keypath              @"content.message"
+#define description_keypath          @"content.description"
+
+#define prompt_response_keypath      @"content.prompt_response"
+#define allow_save_password_keypath  @"content.allow_save"
+#define should_save_password_keypath @"content.save_response"
+
+#define password_expired_keypath     @"content.expired"
+#define old_password_keypath         @"content.old_password"
+#define new_password_keypath         @"content.new_password"
+#define verify_password_keypath      @"content.verify_password"
+
+#define enable_identity_ok_keypath   @"content.isPrincipalValid"
+#define enable_prompt_ok_keypath     @"content.isPromptValid"
+#define change_password_ok_keypath   @"content.isChangePasswordValid"
+
+#define options_keypath              @"content.options"
+
+#define valid_lifetime_keypath       @"content.valid_lifetime"
+#define renewal_lifetime_keypath     @"content.renewal_lifetime"
+#define renewable_keypath            @"content.renewable"
+#define addressless_keypath          @"content.addressless"
+#define forwardable_keypath          @"content.forwardable"
+
+#define min_valid_keypath            @"content.minValidLifetime"
+#define max_valid_keypath            @"content.maxValidLifetime"
+#define min_renewable_keypath        @"content.minRenewableLifetime"
+#define max_renewable_keypath        @"content.maxRenewableLifetime"
+
+#define ACKVOContext                 @"authenticationController"
+
+
+
 #define log_kim_error_to_console(err)\
 {\
 NSLog(@"%s got error %@", __FUNCTION__, [KIMUtilities stringForLastKIMError:err]);\
@@ -24,10 +80,13 @@ NSLog(@"%s got error %@", __FUNCTION__, [KIMUtilities stringForLastKIMError:err]
 + (BOOL) validatePrincipalWithName: (NSString *) name
                              realm: (NSString *) realm;
 
-+ (NSDictionary *) dictionaryForKimOptions: (kim_options) options;
++ (BOOL) validateIdentity: (NSString *) identityString;
 
++ (NSDictionary *) dictionaryForKimOptions: (kim_options) options;
 + (kim_options) kimOptionsForDictionary: (NSDictionary *) aDict;
 
++ (NSDictionary *) dictionaryForKimSelectionHints: (kim_selection_hints) hints;
+
 + (NSUInteger)minValidLifetime;
 + (NSUInteger)maxValidLifetime;
 + (NSUInteger)minRenewableLifetime;
index 9319e676ae021bcc64c70b670c1cd6208e4a807c..f450cdf2ba3122f714ad02113fa0755954f98d23 100644 (file)
@@ -1,10 +1,26 @@
-//
-//  KIMUtilities.m
-//  Kerberos5
-//
-//  Created by Justin Anderson on 9/28/08.
-//  Copyright 2008 MIT. All rights reserved.
-//
+/*
+ * Copyright 2008 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 M.I.T. 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.
+ */
 
 #import "KIMUtilities.h"
 
                              realm: (NSString *) realm
 {
     kim_error err = KIM_NO_ERROR;
-    kim_identity identity = NULL;
-    NSString *principal = nil;
+    NSString *identityString = nil;
     
     if (!name || !realm || [name length] == 0) {
         err = KIM_BAD_PRINCIPAL_STRING_ERR;
     }
     if (!err) {
-        principal = [[NSString alloc] initWithFormat:@"%@@%@", name, realm];
-        err = kim_identity_create_from_string(&identity, [principal UTF8String]);
-        [principal release];
+        identityString = [[NSString alloc] initWithFormat:@"%@@%@", name, realm];
+        err = [KIMUtilities validateIdentity:identityString];
+        [identityString release];
+    }
+    
+    return (err == KIM_NO_ERROR);
+}
+
++ (BOOL) validateIdentity: (NSString *) identityString
+{
+    kim_error err = KIM_NO_ERROR;
+    kim_identity identity = NULL;
+    if (!identityString || [identityString length] <= 1) {
+        err = KIM_BAD_PRINCIPAL_STRING_ERR;
+    }
+    if (!err) {
+        err = kim_identity_create_from_string(&identity, [identityString UTF8String]);
     }
     if (!identity) {
         err = KIM_BAD_PRINCIPAL_STRING_ERR;
     return options;
 }
 
++ (NSDictionary *) dictionaryForKimSelectionHints: (kim_selection_hints) hints
+{
+    kim_error err = KIM_NO_ERROR;
+
+    NSMutableDictionary *newDict = [NSMutableDictionary dictionaryWithCapacity:20];
+    
+    kim_string explanation             = NULL;
+    kim_options options                = NULL;
+    kim_string service_identity        = NULL;
+    kim_string client_realm            = NULL;
+    kim_string user                    = NULL;
+    kim_string service_realm           = NULL;
+    kim_string service                 = NULL;
+    kim_string server                  = NULL;
+
+    if (!err) {
+        err = kim_selection_hints_get_explanation(hints, &explanation);
+        [newDict setValue:(explanation) ? [NSString stringWithUTF8String:explanation] : @"" 
+                   forKey:@"explanation"];
+    }
+    if (!err) {
+        err = kim_selection_hints_get_options(hints, &options);
+        [newDict setValue:[KIMUtilities dictionaryForKimOptions:options]
+                   forKey:@"options"];
+    }
+    if (!err) {
+        err = kim_selection_hints_get_hint(hints, kim_hint_key_client_realm, &client_realm);
+        [newDict setValue:(client_realm) ? [NSString stringWithUTF8String:client_realm] : @"" 
+                    forKey:@"client_realm"];
+    }
+    if (!err) {
+        err = kim_selection_hints_get_hint(hints, kim_hint_key_user, &user);
+        [newDict setValue:(user) ? [NSString stringWithUTF8String:user] : @"" 
+                   forKey:@"user"];
+    }
+    if (!err) {
+        err = kim_selection_hints_get_hint(hints, kim_hint_key_service_realm, &service_realm);
+        [newDict setValue:(service_realm) ? [NSString stringWithUTF8String:service_realm] : @"" 
+                   forKey:@"service_realm"];
+    }
+    if (!err) {
+        err = kim_selection_hints_get_hint(hints, kim_hint_key_service, &service);
+        [newDict setValue:(service) ? [NSString stringWithUTF8String:service] : @"" 
+                   forKey:@"service"];
+    }
+    if (!err) {
+        err = kim_selection_hints_get_hint(hints, kim_hint_key_server, &server);
+        [newDict setValue:(server) ? [NSString stringWithUTF8String:server] : @"" 
+                   forKey:@"server"];
+    }
+    if (!err) {
+        err = kim_selection_hints_get_hint(hints, kim_hint_key_service_identity, &service_identity);
+        [newDict setValue:(service_identity) ? [NSString stringWithUTF8String:service_identity] : @"" 
+                   forKey:@"service_identity"];
+    }
+    
+    return newDict;
+}
+
 + (NSUInteger)minValidLifetime
 {
     kim_error err = KIM_NO_ERROR;
index 5e973ea5e6bdf00c3454f311ab1444005b4f602f..b392dd40a241aa695ba716ddd023f6934b9330d2 100644 (file)
@@ -29,7 +29,7 @@
 #import "IPCClient.h"
 #import "ServerDemux.h"
 
-#define SECONDS_BEFORE_AUTO_QUIT_ON_START 5
+#define SECONDS_BEFORE_AUTO_QUIT_ON_START 600
 #define SECONDS_BEFORE_AUTO_QUIT_ON_NO_CLIENTS 1
 
 @implementation KerberosAgentController
index 3c0fc8ee36b6a88bc226c1e1ea55e2c7590c2152..2d9378aff52f36fcae91ed0ff4d1cb1472ec4a9e 100644 (file)
@@ -1,10 +1,27 @@
-//
-//  KerberosAgentListener.h
-//  Kerberos5
-//
-//  Created by Justin Anderson on 9/28/08.
-//  Copyright 2008 MIT. All rights reserved.
-//
+/*
+ * Copyright 2008 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 M.I.T. 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.
+ */
+
 
 #import <Cocoa/Cocoa.h>
 #import <Kerberos/kim.h>
index fb87c02c3583d24cb1ffac8486e618fb04746e92..019fbb4ff16fb830c360afa0f15026f1b28af052 100644 (file)
@@ -1,10 +1,27 @@
-//
-//  KerberosAgentListener.m
-//  Kerberos5
-//
-//  Created by Justin Anderson on 9/28/08.
-//  Copyright 2008 MIT. All rights reserved.
-//
+/*
+ * Copyright 2008 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 M.I.T. 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.
+ */
+
 
 #import "KerberosAgentListener.h"
 #import "KIMUtilities.h"
@@ -171,17 +188,12 @@ static KerberosAgentListener *sharedListener = nil;
                             replyPort: (mach_port_t) reply_port
                                 hints: (kim_selection_hints) hints
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_selection_hints new_hints = NULL;
     NSDictionary *info = nil;
     
-    // new hints will be freed by main thread
-    err = kim_selection_hints_copy(&new_hints, hints);
-    
     info = [[NSDictionary alloc] initWithObjectsAndKeys:
             [NSNumber numberWithInteger:client_port], @"client_port",
             [NSNumber numberWithInteger:reply_port], @"reply_port",
-            [NSValue valueWithPointer:new_hints], @"hints", 
+            [KIMUtilities dictionaryForKimSelectionHints:hints], @"hints", 
             nil];
     
     [[NSApp delegate] performSelectorOnMainThread:@selector(selectIdentity:) 
@@ -209,9 +221,6 @@ static KerberosAgentListener *sharedListener = nil;
         options = [KIMUtilities kimOptionsForDictionary:[info objectForKey:@"options"]];
     }
 
-    log_kim_error_to_console(err);
-    log_kim_error_to_console(error);
-    
     if (!err) {
         err = kim_handle_reply_select_identity(reply_port, identity, options, error);
     }
index b8a5b3aa4f631ae29a58fd2755d428c8e7bf42c2..dc4092140b45cecb05750a251ad91c93e2643903 100644 (file)
 {
     NSString *result = nil;
     
-    if (anObject == nil || ![anObject respondsToSelector:@selector(timeIntervalSinceNow)]) {
-       result = @"";
-    }
-    else {
-        result = [self stringForLifetime:(time_t)[(NSDate *)anObject timeIntervalSinceNow]];
+    if (anObject) {
+        if ([anObject respondsToSelector:@selector(timeIntervalSinceNow)]) {
+            result = [self stringForLifetime:(time_t)[(NSDate *)anObject timeIntervalSinceNow]];
+        }
+        else if ([anObject respondsToSelector:@selector(unsignedIntegerValue)]) {
+            result = [self stringForLifetime:(time_t)[(NSNumber *)anObject unsignedIntegerValue]];
+        }
     }
     
     return result;
index 2251d2773e95ff66c918cb5c18b8a16670321aef..9b78bd7b2b4073b89c95a4594b41bc7f4119d40d 100644 (file)
@@ -39,7 +39,6 @@
     IBOutlet NSTextField *explanationTextField;
     
     IBOutlet NSTableView *identityTableView;
-    IBOutlet NSTableColumn *identityTableColumn;
     IBOutlet NSButton *addIdentityButton;
     IBOutlet NSPopUpButton *actionPopupButton;
     IBOutlet NSButton *selectIdentityButton;
     Identities *identities;
     NSTimer *refreshTimer;
     
+    IBOutlet NSObjectController *glueController;
+    
     IBOutlet NSWindow *identityOptionsWindow;
     IBOutlet NSObjectController *identityOptionsController;
-    IBOutlet NSTextField *nameField;
-    IBOutlet NSTextField *realmField;
+    IBOutlet NSTextField *identityField;
+    IBOutlet NSTextField *staticIdentityField;
+
+    IBOutlet NSSlider *validLifetimeSlider;
+    IBOutlet NSSlider *renewableLifetimeSlider;
     
     IBOutlet NSButton *ticketOptionsOkButton;
 }
 
 @property (readwrite, retain) IPCClient *associatedClient;
 
+- (void) setContent: (NSMutableDictionary *) newContent;
+
 - (IBAction) newIdentity: (id) sender;
 - (IBAction) addToFavorites: (id) sender;
 - (IBAction) removeFromFavorites: (id) sender;
@@ -70,6 +76,7 @@
 - (IBAction) select: (id) sender;
 - (IBAction) cancel: (id) sender;
 
+- (IBAction) sliderDidChange: (id) sender;
 - (void)controlTextDidChange:(NSNotification *)aNotification;
 
 - (void) showOptions: (NSString *) contextInfo;
index 897e0dcc7630fd60ea948b958cac7627dd87ad55..eafd3d462591ea3b29a73c9fb753c3aa24d976c5 100644 (file)
 
 // ---------------------------------------------------------------------------
 
-- (id) initWithWindowNibName: (NSString *) windowNibName
-{
-    if ((self = [super initWithWindowNibName: windowNibName])) {
-    }
-    
-    return self;
-}
-
-// ---------------------------------------------------------------------------
-
 - (id) init
 {
     return [self initWithWindowNibName: @"SelectIdentity"];
                    associatedClient.name];
     }
     [headerTextField setStringValue:message];
+    [explanationTextField setStringValue:@"explanation!"];
 }
 
 // ---------------------------------------------------------------------------
 
+- (void) setContent: (NSMutableDictionary *) newContent
+{
+    [self window]; // wake up the nib connections
+//    [glueController setContent:newContent];
+}
+
+// ---------------------------------------------------------------------------
 
 - (IBAction) newIdentity: (id) sender
 {
     }
     selectedIdentity = [[identityArrayController selectedObjects] lastObject];
 
-    [associatedClient didSelectIdentity: selectedIdentity.principalString];
+    [associatedClient didSelectIdentity: selectedIdentity.principalString
+                                options: [identityOptionsController valueForKeyPath:@"content.options"]];
 }
 
 // ---------------------------------------------------------------------------
 - (IBAction) cancel: (id) sender
 {
     [associatedClient didCancel];
+    [self close];
 }
 
 // ---------------------------------------------------------------------------
 
 - (IBAction) doneOptions: (id) sender
 {
-    Identity *anIdentity = identityOptionsController.content;
+//    Identity *anIdentity = identityOptionsController.content;
     
-    [anIdentity setPrincipalComponents: [nameField stringValue] 
-                                 realm: [realmField stringValue]];
     
     [NSApp endSheet: identityOptionsWindow];
 }
 
+- (IBAction) sliderDidChange: (id) sender
+{
+    
+}
+
 - (void)controlTextDidChange:(NSNotification *)aNotification
 {
-    BOOL valid = [KIMUtilities validatePrincipalWithName:[nameField stringValue] 
-                                                   realm:[realmField stringValue]];
-    [ticketOptionsOkButton setEnabled:valid];
+//    BOOL valid = [KIMUtilities validateIdentity:];
+    [ticketOptionsOkButton setEnabled:false];
     [ticketOptionsOkButton setNeedsDisplay];
 }
 
 {
     Identity *anIdentity = identityOptionsController.content;
     
-    [nameField setStringValue:anIdentity.componentsString];
-    [realmField setStringValue:anIdentity.realmString];
+    [identityField setStringValue:anIdentity.principalString];
+    [staticIdentityField setStringValue:anIdentity.principalString];
+    
+    // use a copy of the current options
+    [identityOptionsController setContent:
+     [[[glueController valueForKeyPath:options_keypath] mutableCopy] autorelease]];
+    
+    [identityOptionsController setValue:[NSNumber numberWithInteger:[KIMUtilities minValidLifetime]]
+                           forKeyPath:min_valid_keypath];
+    [identityOptionsController setValue:[NSNumber numberWithInteger:[KIMUtilities maxValidLifetime]]
+                           forKeyPath:max_valid_keypath];
+    [identityOptionsController setValue:[NSNumber numberWithInteger:[KIMUtilities minRenewableLifetime]]
+                           forKeyPath:min_renewable_keypath];
+    [identityOptionsController setValue:[NSNumber numberWithInteger:[KIMUtilities maxRenewableLifetime]]
+                           forKeyPath:max_renewable_keypath];
+    
+    [validLifetimeSlider setIntegerValue:
+     [[identityOptionsController valueForKeyPath:valid_lifetime_keypath] integerValue]];
+    [renewableLifetimeSlider setIntegerValue:
+     [[identityOptionsController valueForKeyPath:renewal_lifetime_keypath] integerValue]];
+    [self sliderDidChange:validLifetimeSlider];
+    [self sliderDidChange:renewableLifetimeSlider];
     
     [NSApp beginSheet: identityOptionsWindow 
        modalForWindow: [self window] 
index ea1943592d731e006aa39761d303e46ebf51450f..51759801af8dd85cd0298ebcc4712eaf0c3ddb1f 100644 (file)
@@ -461,7 +461,7 @@ static int32_t kim_handle_request_handle_error (mach_port_t   in_client_port,
         /* Can be empty string "" if there is no identity */
         if (!err && !identity_string[0]) {
             k5_ipc_stream_free_string (identity_string);   
-            identity_string = KIM_IDENTITY_ANY;
+            identity_string = NULL;
         }
     }    
     
index 06056ee68a60aaa8fd2fdab631260c8f886c1eb8..e5273b70c6f18da0dc31a9b7effadf90e1f60427 100644 (file)
@@ -8,11 +8,7 @@
                <string key="IBDocument.HIToolboxVersion">352.00</string>
                <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
                        <bool key="EncodedWithXMLCoder">YES</bool>
-                       <integer value="20"/>
-                       <integer value="300314"/>
-                       <integer value="300193"/>
-                       <integer value="300175"/>
-                       <integer value="300274"/>
+                       <integer value="300157"/>
                        <integer value="300420"/>
                </object>
                <object class="NSArray" key="IBDocument.PluginDependencies">
@@ -59,6 +55,8 @@
                                        <string>max_renewal_lifetime</string>
                                        <string>max_valid_lifetime</string>
                                        <string>min_valid_lifetime</string>
+                                       <string>identity_string</string>
+                                       <string>favorite_identity_strings</string>
                                </object>
                                <bool key="NSEditable">YES</bool>
                                <object class="_NSManagedProxy" key="_NSManagedProxy"/>
@@ -86,7 +84,7 @@
                                        <object class="NSTextField" id="498665267">
                                                <reference key="NSNextResponder" ref="92892041"/>
                                                <int key="NSvFlags">264</int>
-                                               <string key="NSFrame">{{101, 126}, {382, 54}}</string>
+                                               <string key="NSFrame">{{101, 103}, {382, 54}}</string>
                                                <reference key="NSSuperview" ref="92892041"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="645367368">
                                                        </object>
                                                </object>
                                        </object>
-                                       <object class="NSTextField" id="409092758">
+                                       <object class="NSComboBox" id="529434335">
                                                <reference key="NSNextResponder" ref="92892041"/>
                                                <int key="NSvFlags">290</int>
-                                               <string key="NSFrame">{{104, 88}, {376, 22}}</string>
+                                               <string key="NSFrame">{{104, 59}, {379, 26}}</string>
                                                <reference key="NSSuperview" ref="92892041"/>
                                                <bool key="NSEnabled">YES</bool>
-                                               <object class="NSTextFieldCell" key="NSCell" id="951097344">
-                                                       <int key="NSCellFlags">-1804468671</int>
+                                               <object class="NSComboBoxCell" key="NSCell" id="100557652">
+                                                       <int key="NSCellFlags">343014976</int>
                                                        <int key="NSCellFlags2">272630784</int>
-                                                       <string key="NSContents"/>
+                                                       <object class="NSMutableString" key="NSContents" id="645290524">
+                                                               <characters key="NS.bytes"/>
+                                                       </object>
                                                        <reference key="NSSupport" ref="604532625"/>
-                                                       <reference key="NSControlView" ref="409092758"/>
+                                                       <reference key="NSControlView" ref="529434335"/>
                                                        <bool key="NSDrawsBackground">YES</bool>
                                                        <object class="NSColor" key="NSBackgroundColor" id="490771653">
                                                                <int key="NSColorSpace">6</int>
                                                                        <bytes key="NSWhite">MQA</bytes>
                                                                </object>
                                                        </object>
-                                                       <object class="NSColor" key="NSTextColor" id="955928389">
-                                                               <int key="NSColorSpace">6</int>
-                                                               <string key="NSCatalogName">System</string>
-                                                               <string key="NSColorName">textColor</string>
-                                                               <reference key="NSColor" ref="18538584"/>
-                                                       </object>
-                                               </object>
-                                       </object>
-                                       <object class="NSTextField" id="930407441">
-                                               <reference key="NSNextResponder" ref="92892041"/>
-                                               <int key="NSvFlags">292</int>
-                                               <string key="NSFrame">{{17, 90}, {82, 17}}</string>
-                                               <reference key="NSSuperview" ref="92892041"/>
-                                               <bool key="NSEnabled">YES</bool>
-                                               <object class="NSTextFieldCell" key="NSCell" id="990670119">
-                                                       <int key="NSCellFlags">67239424</int>
-                                                       <int key="NSCellFlags2">71303168</int>
-                                                       <string key="NSContents">Name:</string>
-                                                       <reference key="NSSupport" ref="604532625"/>
-                                                       <reference key="NSControlView" ref="930407441"/>
-                                                       <reference key="NSBackgroundColor" ref="876444531"/>
-                                                       <reference key="NSTextColor" ref="883746258"/>
-                                               </object>
-                                       </object>
-                                       <object class="NSComboBox" id="529434335">
-                                               <reference key="NSNextResponder" ref="92892041"/>
-                                               <int key="NSvFlags">290</int>
-                                               <string key="NSFrame">{{104, 56}, {379, 26}}</string>
-                                               <reference key="NSSuperview" ref="92892041"/>
-                                               <bool key="NSEnabled">YES</bool>
-                                               <object class="NSComboBoxCell" key="NSCell" id="100557652">
-                                                       <int key="NSCellFlags">343014976</int>
-                                                       <int key="NSCellFlags2">272630784</int>
-                                                       <object class="NSMutableString" key="NSContents" id="645290524">
-                                                               <characters key="NS.bytes"/>
-                                                       </object>
-                                                       <reference key="NSSupport" ref="604532625"/>
-                                                       <reference key="NSControlView" ref="529434335"/>
-                                                       <bool key="NSDrawsBackground">YES</bool>
-                                                       <reference key="NSBackgroundColor" ref="490771653"/>
                                                        <reference key="NSTextColor" ref="883746258"/>
                                                        <int key="NSVisibleItemCount">5</int>
                                                        <bool key="NSHasVerticalScroller">YES</bool>
+                                                       <bool key="NSCompletes">YES</bool>
                                                        <reference key="NSDelegate" ref="529434335"/>
                                                        <object class="NSComboTableView" key="NSTableView" id="474321365">
                                                                <reference key="NSNextResponder"/>
                                        <object class="NSTextField" id="238778309">
                                                <reference key="NSNextResponder" ref="92892041"/>
                                                <int key="NSvFlags">292</int>
-                                               <string key="NSFrame">{{17, 61}, {82, 17}}</string>
+                                               <string key="NSFrame">{{17, 64}, {82, 17}}</string>
                                                <reference key="NSSuperview" ref="92892041"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="1073582594">
                                                        <int key="NSCellFlags">67239424</int>
                                                        <int key="NSCellFlags2">71303168</int>
-                                                       <string key="NSContents">Realm:</string>
+                                                       <string key="NSContents">Identity:</string>
                                                        <reference key="NSSupport" ref="604532625"/>
                                                        <reference key="NSControlView" ref="238778309"/>
                                                        <reference key="NSBackgroundColor" ref="876444531"/>
                                        <object class="NSButton" id="207178735">
                                                <reference key="NSNextResponder" ref="92892041"/>
                                                <int key="NSvFlags">289</int>
-                                               <string key="NSFrame">{{388, 12}, {98, 32}}</string>
+                                               <string key="NSFrame">{{388, 15}, {98, 32}}</string>
                                                <reference key="NSSuperview" ref="92892041"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="563505192">
                                        <object class="NSButton" id="523041784">
                                                <reference key="NSNextResponder" ref="92892041"/>
                                                <int key="NSvFlags">289</int>
-                                               <string key="NSFrame">{{295, 12}, {93, 32}}</string>
+                                               <string key="NSFrame">{{295, 15}, {93, 32}}</string>
                                                <reference key="NSSuperview" ref="92892041"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="927675304">
                                        <object class="NSCustomView" id="1001544034">
                                                <reference key="NSNextResponder" ref="92892041"/>
                                                <int key="NSvFlags">268</int>
-                                               <string key="NSFrame">{{20, 126}, {64, 64}}</string>
+                                               <string key="NSFrame">{{20, 103}, {64, 64}}</string>
                                                <reference key="NSSuperview" ref="92892041"/>
                                                <string key="NSClassName">BadgedImageView</string>
                                        </object>
                                        <object class="NSPopUpButton" id="1016187493">
                                                <reference key="NSNextResponder" ref="92892041"/>
                                                <int key="NSvFlags">292</int>
-                                               <string key="NSFrame">{{20, 17}, {38, 26}}</string>
+                                               <string key="NSFrame">{{20, 20}, {38, 26}}</string>
                                                <reference key="NSSuperview" ref="92892041"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSPopUpButtonCell" key="NSCell" id="690863814">
                                                </object>
                                        </object>
                                </object>
-                               <string key="NSFrameSize">{500, 210}</string>
+                               <string key="NSFrameSize">{500, 187}</string>
                                <reference key="NSSuperview"/>
                                <string key="NSClassName">NSView</string>
                        </object>
                                                <int key="NSvFlags">266</int>
                                                <string key="NSFrame">{{104, 82}, {376, 22}}</string>
                                                <reference key="NSSuperview" ref="866582848"/>
+                                               <reference key="NSWindow"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="508869457">
                                                        <int key="NSCellFlags">-1804468671</int>
                                                        <reference key="NSControlView" ref="225475172"/>
                                                        <bool key="NSDrawsBackground">YES</bool>
                                                        <reference key="NSBackgroundColor" ref="490771653"/>
-                                                       <reference key="NSTextColor" ref="955928389"/>
+                                                       <object class="NSColor" key="NSTextColor" id="955928389">
+                                                               <int key="NSColorSpace">6</int>
+                                                               <string key="NSCatalogName">System</string>
+                                                               <string key="NSColorName">textColor</string>
+                                                               <reference key="NSColor" ref="18538584"/>
+                                                       </object>
                                                </object>
                                        </object>
                                        <object class="NSButton" id="133507311">
                                                <int key="NSvFlags">289</int>
                                                <string key="NSFrame">{{388, 12}, {98, 32}}</string>
                                                <reference key="NSSuperview" ref="866582848"/>
+                                               <reference key="NSWindow"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="200893597">
                                                        <int key="NSCellFlags">67239424</int>
                                                <int key="NSvFlags">289</int>
                                                <string key="NSFrame">{{295, 12}, {93, 32}}</string>
                                                <reference key="NSSuperview" ref="866582848"/>
+                                               <reference key="NSWindow"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="935364959">
                                                        <int key="NSCellFlags">67239424</int>
                                                <int key="NSvFlags">266</int>
                                                <string key="NSFrame">{{101, 126}, {382, 41}}</string>
                                                <reference key="NSSuperview" ref="866582848"/>
+                                               <reference key="NSWindow"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="999660494">
                                                        <int key="NSCellFlags">67239424</int>
                                                <int key="NSvFlags">268</int>
                                                <string key="NSFrame">{{17, 84}, {80, 17}}</string>
                                                <reference key="NSSuperview" ref="866582848"/>
+                                               <reference key="NSWindow"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="916263740">
                                                        <int key="NSCellFlags">68288064</int>
                                                <int key="NSvFlags">290</int>
                                                <string key="NSFrame">{{102, 58}, {380, 18}}</string>
                                                <reference key="NSSuperview" ref="866582848"/>
+                                               <reference key="NSWindow"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="883697888">
                                                        <int key="NSCellFlags">-2080244224</int>
                                                <int key="NSvFlags">268</int>
                                                <string key="NSFrame">{{20, 126}, {64, 64}}</string>
                                                <reference key="NSSuperview" ref="866582848"/>
+                                               <reference key="NSWindow"/>
                                                <string key="NSClassName">BadgedImageView</string>
                                        </object>
                                </object>
                                <string key="NSFrameSize">{500, 210}</string>
                                <reference key="NSSuperview"/>
+                               <reference key="NSWindow"/>
                                <string key="NSClassName">NSView</string>
                        </object>
                        <object class="NSCustomView" id="898191415">
-                               <reference key="NSNextResponder"/>
+                               <nil key="NSNextResponder"/>
                                <int key="NSvFlags">274</int>
                                <object class="NSMutableArray" key="NSSubviews">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                        </object>
                                </object>
                                <string key="NSFrameSize">{500, 210}</string>
-                               <reference key="NSSuperview"/>
                                <string key="NSClassName">NSView</string>
                        </object>
                        <object class="NSCustomView" id="60326189">
-                               <reference key="NSNextResponder"/>
+                               <nil key="NSNextResponder"/>
                                <int key="NSvFlags">286</int>
                                <object class="NSMutableArray" key="NSSubviews">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                        </object>
                                </object>
                                <string key="NSFrameSize">{500, 230}</string>
-                               <reference key="NSSuperview"/>
                                <string key="NSClassName">NSView</string>
                        </object>
                        <object class="NSCustomView" id="861423802">
                                <string key="NSWindowContentMaxSize">{600, 400}</string>
                                <string key="NSWindowContentMinSize">{484, 199}</string>
                                <object class="NSView" key="NSWindowView" id="632526042">
-                                       <reference key="NSNextResponder"/>
+                                       <nil key="NSNextResponder"/>
                                        <int key="NSvFlags">256</int>
                                        <string key="NSFrameSize">{500, 210}</string>
-                                       <reference key="NSSuperview"/>
                                </object>
                                <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
                                <string key="NSMinSize">{484, 221}</string>
                                <string key="NSMinSize">{430, 305}</string>
                                <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
                        </object>
+                       <object class="NSCustomObject" id="752049494">
+                               <string key="NSClassName">KerberosTimeFormatter</string>
+                       </object>
                </object>
                <object class="IBObjectContainer" key="IBDocument.Objects">
                        <object class="NSMutableArray" key="connectionRecords">
                                <bool key="EncodedWithXMLCoder">YES</bool>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBOutletConnection" key="connection">
-                                               <string key="label">nextKeyView</string>
-                                               <reference key="source" ref="409092758"/>
-                                               <reference key="destination" ref="529434335"/>
-                                       </object>
-                                       <int key="connectionID">300173</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBOutletConnection" key="connection">
-                                               <string key="label">nextKeyView</string>
-                                               <reference key="source" ref="529434335"/>
-                                               <reference key="destination" ref="409092758"/>
-                                       </object>
-                                       <int key="connectionID">300174</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBOutletConnection" key="connection">
                                                <string key="label">identityView</string>
                                        </object>
                                        <int key="connectionID">300339</int>
                                </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">contentValues: selection.realm_history</string>
-                                               <reference key="source" ref="529434335"/>
-                                               <reference key="destination" ref="57033499"/>
-                                               <object class="NSNibBindingConnector" key="connector" id="756729013">
-                                                       <reference key="NSSource" ref="529434335"/>
-                                                       <reference key="NSDestination" ref="57033499"/>
-                                                       <string key="NSLabel">contentValues: selection.realm_history</string>
-                                                       <string key="NSBinding">contentValues</string>
-                                                       <string key="NSKeyPath">selection.realm_history</string>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300342</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBBindingConnection" key="connection">
                                                <string key="label">value: selection.message</string>
                                        </object>
                                        <int key="connectionID">300348</int>
                                </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">value: selection.username</string>
-                                               <reference key="source" ref="409092758"/>
-                                               <reference key="destination" ref="57033499"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="409092758"/>
-                                                       <reference key="NSDestination" ref="57033499"/>
-                                                       <string key="NSLabel">value: selection.username</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">selection.username</string>
-                                                       <object class="NSDictionary" key="NSOptions">
-                                                               <string key="NS.key.0">NSContinuouslyUpdatesValue</string>
-                                                               <integer value="1" key="NS.object.0" id="9"/>
-                                                       </object>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300349</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">value: selection.realm</string>
-                                               <reference key="source" ref="529434335"/>
-                                               <reference key="destination" ref="57033499"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="529434335"/>
-                                                       <reference key="NSDestination" ref="57033499"/>
-                                                       <string key="NSLabel">value: selection.realm</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">selection.realm</string>
-                                                       <object class="NSDictionary" key="NSOptions">
-                                                               <string key="NS.key.0">NSContinuouslyUpdatesValue</string>
-                                                               <reference key="NS.object.0" ref="9"/>
-                                                       </object>
-                                                       <reference key="NSPreviousConnector" ref="756729013"/>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300350</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBBindingConnection" key="connection">
                                                <string key="label">enabled: selection.isPrincipalValid</string>
                                        </object>
                                        <int key="connectionID">300351</int>
                                </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBOutletConnection" key="connection">
-                                               <string key="label">usernameField</string>
-                                               <reference key="source" ref="262677138"/>
-                                               <reference key="destination" ref="409092758"/>
-                                       </object>
-                                       <int key="connectionID">300352</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBOutletConnection" key="connection">
                                                <string key="label">enterBadge</string>
                                                        <string key="NSKeyPath">selection.prompt_response</string>
                                                        <object class="NSDictionary" key="NSOptions">
                                                                <string key="NS.key.0">NSContinuouslyUpdatesValue</string>
-                                                               <reference key="NS.object.0" ref="9"/>
+                                                               <integer value="1" key="NS.object.0" id="9"/>
                                                        </object>
                                                        <int key="NSNibBindingConnectorVersion">2</int>
                                                </object>
                                        </object>
                                        <int key="connectionID">300497</int>
                                </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">value: selection.renewal_lifetime</string>
-                                               <reference key="source" ref="332956369"/>
-                                               <reference key="destination" ref="633725892"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="332956369"/>
-                                                       <reference key="NSDestination" ref="633725892"/>
-                                                       <string key="NSLabel">value: selection.renewal_lifetime</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">selection.renewal_lifetime</string>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300500</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">value: selection.valid_lifetime</string>
-                                               <reference key="source" ref="523287828"/>
-                                               <reference key="destination" ref="633725892"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="523287828"/>
-                                                       <reference key="NSDestination" ref="633725892"/>
-                                                       <string key="NSLabel">value: selection.valid_lifetime</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">selection.valid_lifetime</string>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300501</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBActionConnection" key="connection">
                                                <string key="label">showTicketOptions:</string>
                                        </object>
                                        <int key="connectionID">300509</int>
                                </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">formatter</string>
+                                               <reference key="source" ref="332956369"/>
+                                               <reference key="destination" ref="752049494"/>
+                                       </object>
+                                       <int key="connectionID">300511</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">identityField</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="529434335"/>
+                                       </object>
+                                       <int key="connectionID">300513</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">contentValues: selection.favorite_identity_strings</string>
+                                               <reference key="source" ref="529434335"/>
+                                               <reference key="destination" ref="57033499"/>
+                                               <object class="NSNibBindingConnector" key="connector" id="407856422">
+                                                       <reference key="NSSource" ref="529434335"/>
+                                                       <reference key="NSDestination" ref="57033499"/>
+                                                       <string key="NSLabel">contentValues: selection.favorite_identity_strings</string>
+                                                       <string key="NSBinding">contentValues</string>
+                                                       <string key="NSKeyPath">selection.favorite_identity_strings</string>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300515</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">value: selection.identity_string</string>
+                                               <reference key="source" ref="529434335"/>
+                                               <reference key="destination" ref="57033499"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="529434335"/>
+                                                       <reference key="NSDestination" ref="57033499"/>
+                                                       <string key="NSLabel">value: selection.identity_string</string>
+                                                       <string key="NSBinding">value</string>
+                                                       <string key="NSKeyPath">selection.identity_string</string>
+                                                       <object class="NSDictionary" key="NSOptions">
+                                                               <string key="NS.key.0">NSContinuouslyUpdatesValue</string>
+                                                               <integer value="1" key="NS.object.0" id="5"/>
+                                                       </object>
+                                                       <reference key="NSPreviousConnector" ref="407856422"/>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300516</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">value: selection.valid_lifetime</string>
+                                               <reference key="source" ref="523287828"/>
+                                               <reference key="destination" ref="633725892"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="523287828"/>
+                                                       <reference key="NSDestination" ref="633725892"/>
+                                                       <string key="NSLabel">value: selection.valid_lifetime</string>
+                                                       <string key="NSBinding">value</string>
+                                                       <string key="NSKeyPath">selection.valid_lifetime</string>
+                                                       <object class="NSDictionary" key="NSOptions">
+                                                               <string key="NS.key.0">NSContinuouslyUpdatesValue</string>
+                                                               <reference key="NS.object.0" ref="5"/>
+                                                       </object>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300517</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">value: selection.renewal_lifetime</string>
+                                               <reference key="source" ref="332956369"/>
+                                               <reference key="destination" ref="633725892"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="332956369"/>
+                                                       <reference key="NSDestination" ref="633725892"/>
+                                                       <string key="NSLabel">value: selection.renewal_lifetime</string>
+                                                       <string key="NSBinding">value</string>
+                                                       <string key="NSKeyPath">selection.renewal_lifetime</string>
+                                                       <object class="NSDictionary" key="NSOptions">
+                                                               <string key="NS.key.0">NSContinuouslyUpdatesValue</string>
+                                                               <reference key="NS.object.0" ref="5"/>
+                                                       </object>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300518</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">lifetimeFormatter</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="752049494"/>
+                                       </object>
+                                       <int key="connectionID">300519</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">formatter</string>
+                                               <reference key="source" ref="523287828"/>
+                                               <reference key="destination" ref="752049494"/>
+                                       </object>
+                                       <int key="connectionID">300520</int>
+                               </object>
                        </object>
                        <object class="IBMutableOrderedSet" key="objectRecords">
                                <object class="NSArray" key="orderedObjects">
                                                        <reference ref="523041784"/>
                                                        <reference ref="207178735"/>
                                                        <reference ref="238778309"/>
-                                                       <reference ref="409092758"/>
-                                                       <reference ref="930407441"/>
                                                        <reference ref="1001544034"/>
                                                        <reference ref="529434335"/>
                                                        <reference ref="498665267"/>
                                                </object>
                                                <reference key="parent" ref="92892041"/>
                                        </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300159</int>
-                                               <reference key="object" ref="409092758"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="951097344"/>
-                                               </object>
-                                               <reference key="parent" ref="92892041"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300160</int>
-                                               <reference key="object" ref="930407441"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="990670119"/>
-                                               </object>
-                                               <reference key="parent" ref="92892041"/>
-                                       </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">300165</int>
                                                <reference key="object" ref="1001544034"/>
                                                <reference key="object" ref="100557652"/>
                                                <reference key="parent" ref="529434335"/>
                                        </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300170</int>
-                                               <reference key="object" ref="990670119"/>
-                                               <reference key="parent" ref="930407441"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300171</int>
-                                               <reference key="object" ref="951097344"/>
-                                               <reference key="parent" ref="409092758"/>
-                                       </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">300168</int>
                                                <reference key="object" ref="1073582594"/>
                                                        <reference ref="964499406"/>
                                                        <reference ref="198913348"/>
                                                        <reference ref="594182616"/>
-                                                       <reference ref="523287828"/>
                                                        <reference ref="318596865"/>
                                                        <reference ref="486016405"/>
+                                                       <reference ref="523287828"/>
                                                </object>
                                                <reference key="parent" ref="102029948"/>
                                        </object>
                                                <reference key="object" ref="744766544"/>
                                                <reference key="parent" ref="594991555"/>
                                        </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300510</int>
+                                               <reference key="object" ref="752049494"/>
+                                               <reference key="parent" ref="0"/>
+                                       </object>
                                </object>
                        </object>
                        <object class="NSMutableDictionary" key="flattenedProperties">
                                        <string>300157.IBPluginDependency</string>
                                        <string>300158.IBPluginDependency</string>
                                        <string>300158.ImportedFromIB2</string>
-                                       <string>300159.IBPluginDependency</string>
-                                       <string>300159.ImportedFromIB2</string>
-                                       <string>300160.IBPluginDependency</string>
-                                       <string>300160.ImportedFromIB2</string>
                                        <string>300161.IBPluginDependency</string>
                                        <string>300161.ImportedFromIB2</string>
                                        <string>300162.IBPluginDependency</string>
                                        <string>300464.IBPluginDependency</string>
                                        <string>300469.IBPluginDependency</string>
                                        <string>300502.IBPluginDependency</string>
+                                       <string>300510.IBPluginDependency</string>
                                </object>
                                <object class="NSMutableArray" key="dict.values">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                        <string>{484, 199}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <reference ref="9"/>
-                                       <string>{{602, 432}, {500, 210}}</string>
+                                       <string>{{602, 455}, {500, 187}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <reference ref="9"/>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <reference ref="9"/>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <reference ref="9"/>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <reference ref="9"/>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>{{477, 611}, {500, 210}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>NSSecureTextField</string>
                                        <reference ref="9"/>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <reference ref="9"/>
-                                       <string>{{979, 209}, {430, 283}}</string>
+                                       <string>{{647, 412}, {430, 283}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>{{979, 209}, {430, 283}}</string>
+                                       <string>{{647, 412}, {430, 283}}</string>
                                        <reference ref="9"/>
                                        <reference ref="8"/>
                                        <reference ref="9"/>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                </object>
                        </object>
                        <object class="NSMutableDictionary" key="unlocalizedProperties">
                                </object>
                        </object>
                        <nil key="sourceID"/>
-                       <int key="maxID">300509</int>
+                       <int key="maxID">300520</int>
                </object>
                <object class="IBClassDescriber" key="IBDocument.Classes">
                        <object class="NSMutableArray" key="referencedPartialClassDescriptions">
                                                        <string>errorView</string>
                                                        <string>expiredPasswordView</string>
                                                        <string>glueController</string>
+                                                       <string>identityField</string>
                                                        <string>identityView</string>
+                                                       <string>lifetimeFormatter</string>
                                                        <string>oldPasswordField</string>
                                                        <string>passwordBadge</string>
                                                        <string>passwordField</string>
                                                        <string>samView</string>
                                                        <string>ticketOptionsController</string>
                                                        <string>ticketOptionsSheet</string>
-                                                       <string>usernameField</string>
                                                        <string>validLifetimeSlider</string>
                                                </object>
                                                <object class="NSMutableArray" key="dict.values">
                                                        <string>NSView</string>
                                                        <string>NSView</string>
                                                        <string>NSObjectController</string>
+                                                       <string>NSTextField</string>
                                                        <string>NSView</string>
+                                                       <string>KerberosTimeFormatter</string>
                                                        <string>NSTextField</string>
                                                        <string>BadgedImageView</string>
                                                        <string>NSTextField</string>
                                                        <string>NSView</string>
                                                        <string>NSObjectController</string>
                                                        <string>NSWindow</string>
-                                                       <string>NSTextField</string>
                                                        <string>NSSlider</string>
                                                </object>
                                        </object>
                                                <string key="minorKey"/>
                                        </object>
                                </object>
+                               <object class="IBPartialClassDescription">
+                                       <string key="className">KerberosTimeFormatter</string>
+                                       <string key="superclassName">NSFormatter</string>
+                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
+                                               <string key="majorKey">IBProjectSource</string>
+                                               <string key="minorKey">../Sources/kim/agent/mac/KerberosFormatters.h</string>
+                                       </object>
+                               </object>
                        </object>
                </object>
                <int key="IBDocument.localizationMode">0</int>
index 3a1fb160ef51828d08ae9e50cc801d19bdab6871..d38d944c9d53baebb0a41da877fc293b1050543a 100644 (file)
@@ -8,8 +8,8 @@
                <string key="IBDocument.HIToolboxVersion">352.00</string>
                <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
                        <bool key="EncodedWithXMLCoder">YES</bool>
-                       <integer value="300295"/>
                        <integer value="6"/>
+                       <integer value="300301"/>
                </object>
                <object class="NSArray" key="IBDocument.PluginDependencies">
                        <bool key="EncodedWithXMLCoder">YES</bool>
                        <object class="NSWindowTemplate" id="370461416">
                                <int key="NSWindowStyleMask">7</int>
                                <int key="NSWindowBacking">2</int>
-                               <string key="NSWindowRect">{{196, 132}, {427, 378}}</string>
+                               <string key="NSWindowRect">{{196, 162}, {427, 348}}</string>
                                <int key="NSWTFlags">603979776</int>
                                <string key="NSWindowTitle">Window</string>
                                <string key="NSWindowClass">NSWindow</string>
                                                <object class="NSTextField" id="485004197">
                                                        <reference key="NSNextResponder" ref="1019868804"/>
                                                        <int key="NSvFlags">266</int>
-                                                       <string key="NSFrame">{{69, 336}, {338, 22}}</string>
+                                                       <string key="NSFrame">{{78, 306}, {338, 22}}</string>
                                                        <reference key="NSSuperview" ref="1019868804"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSTextFieldCell" key="NSCell" id="1047482753">
                                                                        <string key="NSColorName">textBackgroundColor</string>
                                                                        <reference key="NSColor" ref="591379363"/>
                                                                </object>
-                                                               <object class="NSColor" key="NSTextColor" id="894652286">
+                                                               <object class="NSColor" key="NSTextColor">
                                                                        <int key="NSColorSpace">6</int>
                                                                        <string key="NSCatalogName">System</string>
                                                                        <string key="NSColorName">textColor</string>
                                                <object class="NSTextField" id="404880622">
                                                        <reference key="NSNextResponder" ref="1019868804"/>
                                                        <int key="NSvFlags">268</int>
-                                                       <string key="NSFrame">{{19, 338}, {45, 17}}</string>
+                                                       <string key="NSFrame">{{17, 308}, {60, 17}}</string>
                                                        <reference key="NSSuperview" ref="1019868804"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSTextFieldCell" key="NSCell" id="775341038">
                                                                <int key="NSCellFlags">68288064</int>
                                                                <int key="NSCellFlags2">71304192</int>
-                                                               <string key="NSContents">Name:</string>
+                                                               <string key="NSContents">Identity: </string>
                                                                <reference key="NSSupport" ref="604532625"/>
                                                                <reference key="NSControlView" ref="404880622"/>
                                                                <reference key="NSBackgroundColor" ref="876444531"/>
                                                                <reference key="NSTextColor" ref="883746258"/>
                                                        </object>
                                                </object>
-                                               <object class="NSTextField" id="623163777">
-                                                       <reference key="NSNextResponder" ref="1019868804"/>
-                                                       <int key="NSvFlags">266</int>
-                                                       <string key="NSFrame">{{69, 306}, {338, 22}}</string>
-                                                       <reference key="NSSuperview" ref="1019868804"/>
-                                                       <bool key="NSEnabled">YES</bool>
-                                                       <object class="NSTextFieldCell" key="NSCell" id="327568348">
-                                                               <int key="NSCellFlags">-1804468671</int>
-                                                               <int key="NSCellFlags2">272630784</int>
-                                                               <string key="NSContents"/>
-                                                               <reference key="NSSupport" ref="604532625"/>
-                                                               <string key="NSPlaceholderString">REALM.ORG</string>
-                                                               <reference key="NSControlView" ref="623163777"/>
-                                                               <bool key="NSDrawsBackground">YES</bool>
-                                                               <reference key="NSBackgroundColor" ref="830301085"/>
-                                                               <reference key="NSTextColor" ref="894652286"/>
-                                                       </object>
-                                               </object>
-                                               <object class="NSTextField" id="609534695">
-                                                       <reference key="NSNextResponder" ref="1019868804"/>
-                                                       <int key="NSvFlags">268</int>
-                                                       <string key="NSFrame">{{17, 308}, {47, 17}}</string>
-                                                       <reference key="NSSuperview" ref="1019868804"/>
-                                                       <bool key="NSEnabled">YES</bool>
-                                                       <object class="NSTextFieldCell" key="NSCell" id="424319976">
-                                                               <int key="NSCellFlags">68288064</int>
-                                                               <int key="NSCellFlags2">71304192</int>
-                                                               <string key="NSContents">Realm:</string>
-                                                               <reference key="NSSupport" ref="604532625"/>
-                                                               <reference key="NSControlView" ref="609534695"/>
-                                                               <reference key="NSBackgroundColor" ref="876444531"/>
-                                                               <reference key="NSTextColor" ref="883746258"/>
-                                                       </object>
-                                               </object>
                                                <object class="NSBox" id="282101470">
                                                        <reference key="NSNextResponder" ref="1019868804"/>
                                                        <int key="NSvFlags">266</int>
                                                <object class="NSTextField" id="958176038">
                                                        <reference key="NSNextResponder" ref="1019868804"/>
                                                        <int key="NSvFlags">-2147483380</int>
-                                                       <string key="NSFrame">{{66, 338}, {344, 17}}</string>
+                                                       <string key="NSFrame">{{75, 308}, {344, 17}}</string>
                                                        <reference key="NSSuperview" ref="1019868804"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSTextFieldCell" key="NSCell" id="196100637">
                                                                <reference key="NSTextColor" ref="883746258"/>
                                                        </object>
                                                </object>
-                                               <object class="NSTextField" id="546844125">
-                                                       <reference key="NSNextResponder" ref="1019868804"/>
-                                                       <int key="NSvFlags">-2147483380</int>
-                                                       <string key="NSFrame">{{66, 308}, {344, 17}}</string>
-                                                       <reference key="NSSuperview" ref="1019868804"/>
-                                                       <bool key="NSEnabled">YES</bool>
-                                                       <object class="NSTextFieldCell" key="NSCell" id="725579124">
-                                                               <int key="NSCellFlags">68288064</int>
-                                                               <int key="NSCellFlags2">272630784</int>
-                                                               <string key="NSContents">Label</string>
-                                                               <reference key="NSSupport" ref="604532625"/>
-                                                               <reference key="NSControlView" ref="546844125"/>
-                                                               <reference key="NSBackgroundColor" ref="876444531"/>
-                                                               <reference key="NSTextColor" ref="883746258"/>
-                                                       </object>
-                                               </object>
                                        </object>
-                                       <string key="NSFrameSize">{427, 378}</string>
+                                       <string key="NSFrameSize">{427, 348}</string>
                                        <reference key="NSSuperview"/>
                                </object>
                                <string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
                        <object class="NSObjectController" id="196152721">
                                <object class="NSMutableArray" key="NSDeclaredKeys">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
-                                       <string>realmString</string>
-                                       <string>isForwardable</string>
-                                       <string>isProxiable</string>
-                                       <string>isRenewable</string>
+                                       <string>forwardable</string>
+                                       <string>renewable</string>
                                        <string>renewableLifetime</string>
-                                       <string>componentsString</string>
+                                       <string>identityString</string>
                                        <string>favorite</string>
-                                       <string>isAddressless</string>
+                                       <string>addressless</string>
                                        <string>validLifetime</string>
                                        <string>renewableLifetimeString</string>
                                        <string>validLifetimeString</string>
                                        <string>hasCCache</string>
+                                       <string>minValidLifetime</string>
+                                       <string>maxValidLifetime</string>
+                                       <string>maxRenewableLifetime</string>
                                </object>
                                <string key="NSObjectClassName">Identity</string>
                                <bool key="NSEditable">YES</bool>
                                <object class="_NSManagedProxy" key="_NSManagedProxy"/>
                        </object>
+                       <object class="NSObjectController" id="252123121">
+                               <bool key="NSEditable">YES</bool>
+                               <object class="_NSManagedProxy" key="_NSManagedProxy"/>
+                       </object>
                        <object class="NSObjectController" id="1031761104">
                                <object class="NSMutableArray" key="NSDeclaredKeys">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                        <string>maximumRenewableLifetime</string>
                                        <string>favorite</string>
                                        <string>identities</string>
+                                       <string>minRenewableLifetime</string>
                                </object>
                                <string key="NSObjectClassName">Identities</string>
                                <object class="_NSManagedProxy" key="_NSManagedProxy"/>
                                        </object>
                                        <int key="connectionID">300369</int>
                                </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">maxValue: selection.maximumValidLifetime</string>
-                                               <reference key="source" ref="552234083"/>
-                                               <reference key="destination" ref="1031761104"/>
-                                               <object class="NSNibBindingConnector" key="connector" id="716397596">
-                                                       <reference key="NSSource" ref="552234083"/>
-                                                       <reference key="NSDestination" ref="1031761104"/>
-                                                       <string key="NSLabel">maxValue: selection.maximumValidLifetime</string>
-                                                       <string key="NSBinding">maxValue</string>
-                                                       <string key="NSKeyPath">selection.maximumValidLifetime</string>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300372</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">minValue: selection.minimumValidLifetime</string>
-                                               <reference key="source" ref="552234083"/>
-                                               <reference key="destination" ref="1031761104"/>
-                                               <object class="NSNibBindingConnector" key="connector" id="445222138">
-                                                       <reference key="NSSource" ref="552234083"/>
-                                                       <reference key="NSDestination" ref="1031761104"/>
-                                                       <string key="NSLabel">minValue: selection.minimumValidLifetime</string>
-                                                       <string key="NSBinding">minValue</string>
-                                                       <string key="NSKeyPath">selection.minimumValidLifetime</string>
-                                                       <reference key="NSPreviousConnector" ref="716397596"/>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300373</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">value: selection.validLifetime</string>
-                                               <reference key="source" ref="552234083"/>
-                                               <reference key="destination" ref="196152721"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="552234083"/>
-                                                       <reference key="NSDestination" ref="196152721"/>
-                                                       <string key="NSLabel">value: selection.validLifetime</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">selection.validLifetime</string>
-                                                       <reference key="NSPreviousConnector" ref="445222138"/>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300378</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBOutletConnection" key="connection">
                                                <string key="label">identitiesController</string>
                                        </object>
                                        <int key="connectionID">300380</int>
                                </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">maxValue: selection.maximumRenewableLifetime</string>
-                                               <reference key="source" ref="373804676"/>
-                                               <reference key="destination" ref="1031761104"/>
-                                               <object class="NSNibBindingConnector" key="connector" id="436583425">
-                                                       <reference key="NSSource" ref="373804676"/>
-                                                       <reference key="NSDestination" ref="1031761104"/>
-                                                       <string key="NSLabel">maxValue: selection.maximumRenewableLifetime</string>
-                                                       <string key="NSBinding">maxValue</string>
-                                                       <string key="NSKeyPath">selection.maximumRenewableLifetime</string>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300381</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">minValue: selection.minimumRenewableLifetime</string>
-                                               <reference key="source" ref="373804676"/>
-                                               <reference key="destination" ref="1031761104"/>
-                                               <object class="NSNibBindingConnector" key="connector" id="601981852">
-                                                       <reference key="NSSource" ref="373804676"/>
-                                                       <reference key="NSDestination" ref="1031761104"/>
-                                                       <string key="NSLabel">minValue: selection.minimumRenewableLifetime</string>
-                                                       <string key="NSBinding">minValue</string>
-                                                       <string key="NSKeyPath">selection.minimumRenewableLifetime</string>
-                                                       <reference key="NSPreviousConnector" ref="436583425"/>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300384</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">value: selection.renewableLifetime</string>
-                                               <reference key="source" ref="373804676"/>
-                                               <reference key="destination" ref="196152721"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="373804676"/>
-                                                       <reference key="NSDestination" ref="196152721"/>
-                                                       <string key="NSLabel">value: selection.renewableLifetime</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">selection.renewableLifetime</string>
-                                                       <reference key="NSPreviousConnector" ref="601981852"/>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300385</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBBindingConnection" key="connection">
                                                <string key="label">value: selection.renewableLifetimeString</string>
                                        </object>
                                        <int key="connectionID">300388</int>
                                </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBOutletConnection" key="connection">
-                                               <string key="label">nameField</string>
-                                               <reference key="source" ref="262677138"/>
-                                               <reference key="destination" ref="485004197"/>
-                                       </object>
-                                       <int key="connectionID">300396</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBOutletConnection" key="connection">
-                                               <string key="label">realmField</string>
-                                               <reference key="source" ref="262677138"/>
-                                               <reference key="destination" ref="623163777"/>
-                                       </object>
-                                       <int key="connectionID">300397</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBBindingConnection" key="connection">
                                                <string key="label">value: selection.componentsString</string>
                                        </object>
                                        <int key="connectionID">300404</int>
                                </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">value: selection.realmString</string>
-                                               <reference key="source" ref="546844125"/>
-                                               <reference key="destination" ref="196152721"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="546844125"/>
-                                                       <reference key="NSDestination" ref="196152721"/>
-                                                       <string key="NSLabel">value: selection.realmString</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">selection.realmString</string>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300411</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">hidden: selection.hasCCache</string>
-                                               <reference key="source" ref="623163777"/>
-                                               <reference key="destination" ref="196152721"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="623163777"/>
-                                                       <reference key="NSDestination" ref="196152721"/>
-                                                       <string key="NSLabel">hidden: selection.hasCCache</string>
-                                                       <string key="NSBinding">hidden</string>
-                                                       <string key="NSKeyPath">selection.hasCCache</string>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300419</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">hidden: selection.hasCCache</string>
-                                               <reference key="source" ref="546844125"/>
-                                               <reference key="destination" ref="196152721"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="546844125"/>
-                                                       <reference key="NSDestination" ref="196152721"/>
-                                                       <string key="NSLabel">hidden: selection.hasCCache</string>
-                                                       <string key="NSBinding">hidden</string>
-                                                       <string key="NSKeyPath">selection.hasCCache</string>
-                                                       <object class="NSDictionary" key="NSOptions">
-                                                               <string key="NS.key.0">NSValueTransformerName</string>
-                                                               <string key="NS.object.0">NSNegateBoolean</string>
-                                                       </object>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300420</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBBindingConnection" key="connection">
                                                <string key="label">hidden: selection.hasCCache</string>
                                <object class="IBConnectionRecord">
                                        <object class="IBOutletConnection" key="connection">
                                                <string key="label">delegate</string>
-                                               <reference key="source" ref="623163777"/>
+                                               <reference key="source" ref="485004197"/>
                                                <reference key="destination" ref="262677138"/>
                                        </object>
-                                       <int key="connectionID">300460</int>
+                                       <int key="connectionID">300461</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">maxValue: selection.maxValidLifetime</string>
+                                               <reference key="source" ref="552234083"/>
+                                               <reference key="destination" ref="196152721"/>
+                                               <object class="NSNibBindingConnector" key="connector" id="1045274898">
+                                                       <reference key="NSSource" ref="552234083"/>
+                                                       <reference key="NSDestination" ref="196152721"/>
+                                                       <string key="NSLabel">maxValue: selection.maxValidLifetime</string>
+                                                       <string key="NSBinding">maxValue</string>
+                                                       <string key="NSKeyPath">selection.maxValidLifetime</string>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300470</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">minValue: selection.minValidLifetime</string>
+                                               <reference key="source" ref="552234083"/>
+                                               <reference key="destination" ref="196152721"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="552234083"/>
+                                                       <reference key="NSDestination" ref="196152721"/>
+                                                       <string key="NSLabel">minValue: selection.minValidLifetime</string>
+                                                       <string key="NSBinding">minValue</string>
+                                                       <string key="NSKeyPath">selection.minValidLifetime</string>
+                                                       <reference key="NSPreviousConnector" ref="1045274898"/>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300471</int>
                                </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBOutletConnection" key="connection">
-                                               <string key="label">delegate</string>
-                                               <reference key="source" ref="485004197"/>
-                                               <reference key="destination" ref="262677138"/>
+                                               <string key="label">validLifetimeSlider</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="552234083"/>
                                        </object>
-                                       <int key="connectionID">300461</int>
+                                       <int key="connectionID">300473</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">renewableLifetimeSlider</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="373804676"/>
+                                       </object>
+                                       <int key="connectionID">300474</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBActionConnection" key="connection">
+                                               <string key="label">sliderDidChange:</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="552234083"/>
+                                       </object>
+                                       <int key="connectionID">300475</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBActionConnection" key="connection">
+                                               <string key="label">sliderDidChange:</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="373804676"/>
+                                       </object>
+                                       <int key="connectionID">300476</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">maxValue: selection.maxRenewableLifetime</string>
+                                               <reference key="source" ref="373804676"/>
+                                               <reference key="destination" ref="196152721"/>
+                                               <object class="NSNibBindingConnector" key="connector" id="992990082">
+                                                       <reference key="NSSource" ref="373804676"/>
+                                                       <reference key="NSDestination" ref="196152721"/>
+                                                       <string key="NSLabel">maxValue: selection.maxRenewableLifetime</string>
+                                                       <string key="NSBinding">maxValue</string>
+                                                       <string key="NSKeyPath">selection.maxRenewableLifetime</string>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300481</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">minValue: selection.minRenewableLifetime</string>
+                                               <reference key="source" ref="373804676"/>
+                                               <reference key="destination" ref="196152721"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="373804676"/>
+                                                       <reference key="NSDestination" ref="196152721"/>
+                                                       <string key="NSLabel">minValue: selection.minRenewableLifetime</string>
+                                                       <string key="NSBinding">minValue</string>
+                                                       <string key="NSKeyPath">selection.minRenewableLifetime</string>
+                                                       <reference key="NSPreviousConnector" ref="992990082"/>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300482</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">staticIdentityField</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="958176038"/>
+                                       </object>
+                                       <int key="connectionID">300483</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">identityField</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="485004197"/>
+                                       </object>
+                                       <int key="connectionID">300484</int>
                                </object>
                        </object>
                        <object class="IBMutableOrderedSet" key="objectRecords">
                                                <reference key="object" ref="1019868804"/>
                                                <object class="NSMutableArray" key="children">
                                                        <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="609534695"/>
-                                                       <reference ref="623163777"/>
-                                                       <reference ref="404880622"/>
-                                                       <reference ref="485004197"/>
                                                        <reference ref="932240937"/>
                                                        <reference ref="871834199"/>
                                                        <reference ref="282101470"/>
                                                        <reference ref="669516699"/>
                                                        <reference ref="958176038"/>
-                                                       <reference ref="546844125"/>
+                                                       <reference ref="485004197"/>
+                                                       <reference ref="404880622"/>
                                                </object>
                                                <reference key="parent" ref="370461416"/>
                                        </object>
                                                </object>
                                                <reference key="parent" ref="1019868804"/>
                                        </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300298</int>
-                                               <reference key="object" ref="609534695"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="424319976"/>
-                                               </object>
-                                               <reference key="parent" ref="1019868804"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300299</int>
-                                               <reference key="object" ref="623163777"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="327568348"/>
-                                               </object>
-                                               <reference key="parent" ref="1019868804"/>
-                                       </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">300300</int>
                                                <reference key="object" ref="404880622"/>
                                                <reference key="object" ref="775341038"/>
                                                <reference key="parent" ref="404880622"/>
                                        </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300304</int>
-                                               <reference key="object" ref="327568348"/>
-                                               <reference key="parent" ref="623163777"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300305</int>
-                                               <reference key="object" ref="424319976"/>
-                                               <reference key="parent" ref="609534695"/>
-                                       </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">300307</int>
                                                <reference key="object" ref="373804676"/>
                                                <reference key="parent" ref="0"/>
                                                <string key="objectName">Identities Controller</string>
                                        </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300402</int>
-                                               <reference key="object" ref="958176038"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="196100637"/>
-                                               </object>
-                                               <reference key="parent" ref="1019868804"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300403</int>
-                                               <reference key="object" ref="196100637"/>
-                                               <reference key="parent" ref="958176038"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300407</int>
-                                               <reference key="object" ref="546844125"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="725579124"/>
-                                               </object>
-                                               <reference key="parent" ref="1019868804"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300408</int>
-                                               <reference key="object" ref="725579124"/>
-                                               <reference key="parent" ref="546844125"/>
-                                       </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">300426</int>
                                                <reference key="object" ref="263312988"/>
                                                <reference key="object" ref="778570067"/>
                                                <reference key="parent" ref="600123164"/>
                                        </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300402</int>
+                                               <reference key="object" ref="958176038"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="196100637"/>
+                                               </object>
+                                               <reference key="parent" ref="1019868804"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300403</int>
+                                               <reference key="object" ref="196100637"/>
+                                               <reference key="parent" ref="958176038"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300462</int>
+                                               <reference key="object" ref="252123121"/>
+                                               <reference key="parent" ref="0"/>
+                                               <string key="objectName">Glue Controller</string>
+                                       </object>
                                </object>
                        </object>
                        <object class="NSMutableDictionary" key="flattenedProperties">
                                        <string>300295.IBPluginDependency</string>
                                        <string>300296.IBPluginDependency</string>
                                        <string>300296.ImportedFromIB2</string>
-                                       <string>300298.IBPluginDependency</string>
-                                       <string>300299.IBPluginDependency</string>
                                        <string>300300.IBPluginDependency</string>
                                        <string>300301.IBPluginDependency</string>
                                        <string>300302.IBPluginDependency</string>
                                        <string>300303.IBPluginDependency</string>
-                                       <string>300304.IBPluginDependency</string>
-                                       <string>300305.IBPluginDependency</string>
                                        <string>300307.IBPluginDependency</string>
                                        <string>300307.ImportedFromIB2</string>
                                        <string>300308.IBPluginDependency</string>
                                        <string>300370.IBPluginDependency</string>
                                        <string>300402.IBPluginDependency</string>
                                        <string>300403.IBPluginDependency</string>
-                                       <string>300407.IBPluginDependency</string>
-                                       <string>300408.IBPluginDependency</string>
                                        <string>300426.IBPluginDependency</string>
                                        <string>300427.IBPluginDependency</string>
                                        <string>300428.IBEditorWindowLastContentRect</string>
                                        <string>300430.IBPluginDependency</string>
                                        <string>300431.IBPluginDependency</string>
                                        <string>300432.IBPluginDependency</string>
+                                       <string>300462.IBPluginDependency</string>
                                        <string>5.IBEditorWindowLastContentRect</string>
                                        <string>5.IBPluginDependency</string>
                                        <string>5.IBWindowTemplateEditedContentRect</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>{{553, 305}, {427, 378}}</string>
+                                       <string>{{553, 335}, {427, 348}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>{{553, 305}, {427, 378}}</string>
+                                       <string>{{553, 335}, {427, 348}}</string>
                                        <reference ref="75542549"/>
                                        <reference ref="75542549"/>
                                        <string>{10000, 354}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <reference ref="9"/>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <reference ref="9"/>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>{{535, 102}, {198, 83}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>{{499, 142}, {491, 316}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>{{499, 142}, {491, 316}}</string>
                                </object>
                        </object>
                        <nil key="sourceID"/>
-                       <int key="maxID">300461</int>
+                       <int key="maxID">300484</int>
                </object>
                <object class="IBClassDescriber" key="IBDocument.Classes">
                        <object class="NSMutableArray" key="referencedPartialClassDescriptions">
                                                        <string>removeFromFavorites:</string>
                                                        <string>resetOptions:</string>
                                                        <string>select:</string>
+                                                       <string>sliderDidChange:</string>
                                                </object>
                                                <object class="NSMutableArray" key="dict.values">
                                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                        <string>id</string>
                                                        <string>id</string>
                                                        <string>id</string>
+                                                       <string>id</string>
                                                </object>
                                        </object>
                                        <object class="NSMutableDictionary" key="outlets">
                                                        <string>addIdentityButton</string>
                                                        <string>cancelButton</string>
                                                        <string>explanationTextField</string>
+                                                       <string>glueController</string>
                                                        <string>headerTextField</string>
                                                        <string>identitiesController</string>
                                                        <string>identityArrayController</string>
+                                                       <string>identityField</string>
                                                        <string>identityOptionsController</string>
                                                        <string>identityOptionsWindow</string>
-                                                       <string>identityTableColumn</string>
                                                        <string>identityTableView</string>
                                                        <string>kerberosIconImageView</string>
-                                                       <string>nameField</string>
-                                                       <string>realmField</string>
+                                                       <string>renewableLifetimeSlider</string>
                                                        <string>selectIdentityButton</string>
+                                                       <string>staticIdentityField</string>
                                                        <string>ticketOptionsOkButton</string>
+                                                       <string>validLifetimeSlider</string>
                                                </object>
                                                <object class="NSMutableArray" key="dict.values">
                                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                        <string>NSButton</string>
                                                        <string>NSButton</string>
                                                        <string>NSTextField</string>
+                                                       <string>NSObjectController</string>
                                                        <string>NSTextField</string>
                                                        <string>NSObjectController</string>
                                                        <string>NSArrayController</string>
+                                                       <string>NSTextField</string>
                                                        <string>NSObjectController</string>
                                                        <string>NSWindow</string>
-                                                       <string>NSTableColumn</string>
                                                        <string>NSTableView</string>
                                                        <string>BadgedImageView</string>
-                                                       <string>NSTextField</string>
-                                                       <string>NSTextField</string>
+                                                       <string>NSSlider</string>
                                                        <string>NSButton</string>
+                                                       <string>NSTextField</string>
                                                        <string>NSButton</string>
+                                                       <string>NSSlider</string>
                                                </object>
                                        </object>
                                        <object class="IBClassDescriptionSource" key="sourceIdentifier">