Resize dialogs better, added progress indicator to show KerberosAgent is working...
authorJustin Anderson <jander@mit.edu>
Thu, 2 Oct 2008 17:34:17 +0000 (17:34 +0000)
committerJustin Anderson <jander@mit.edu>
Thu, 2 Oct 2008 17:34:17 +0000 (17:34 +0000)
Make Identity and Identities classes use NSDictionary representations of kim_options like the rest of KerberosAgent.

ticket: 6055

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

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.h
src/kim/agent/mac/Identities.m
src/kim/agent/mac/KIMUtilities.h
src/kim/agent/mac/SelectIdentityController.h
src/kim/agent/mac/SelectIdentityController.m
src/kim/agent/mac/resources/English.lproj/Authentication.xib
src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib

index c62611db7088f9ec8413267cf9eae7423db361c6..f6f5bd2b212a6ddc1e4b83bc9287c0317e3eddb8 100644 (file)
     IBOutlet BadgedImageView *changePasswordBadge;
     IBOutlet BadgedImageView *errorBadge;
     
+    IBOutlet NSProgressIndicator *enterSpinny;
+    IBOutlet NSProgressIndicator *passwordSpinny;
+    IBOutlet NSProgressIndicator *samSpinny;
+    IBOutlet NSProgressIndicator *changePasswordSpinny;
+    
     // Controls that need to be made key
     IBOutlet NSTextField *identityField;
     IBOutlet NSTextField *passwordField;
          contextInfo: (void *) contextInfo;
 
 - (IBAction) changePasswordGearAction: (id) sender;
-- (void) changePasswordThread: (NSString *) identityString;
 
 @end
index 34e7662d22af7792e715a10fa5a3816c4fcc08ee..8880cb8094c59c1e3b1fdd2162f71edd27dd8f5e 100644 (file)
     }
 }
 
+- (IBAction) showWindow: (id) sender
+{
+    [[self window] center];
+    [super showWindow:sender];
+}
+
 - (void) setContent: (NSMutableDictionary *) newContent
 {
     [self window]; // wake up the nib connections
 - (void) showEnterIdentity
 {
     kim_error err = KIM_NO_ERROR;
+    NSWindow *theWindow = [self window];
     NSString *key = (associatedClient.name) ? ACAppPrincReqKey : ACPrincReqKey;
     NSString *message = [NSString stringWithFormat:
                          NSLocalizedStringFromTable(key, ACLocalizationTable, NULL),
     // wake up the nib connections and adjust window size
     [self window];
     // set up controls with info from associatedClient
-    [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
-    [containerView addSubview:identityView];
     [enterBadge setBadgePath:associatedClient.path];
     [glueController setValue:message
                   forKeyPath:message_keypath];
+
+    [theWindow setFrame:[theWindow frameRectForContentRect:[identityView frame]] display:NO];
+    [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
+    [containerView addSubview:identityView];
+
+    [enterSpinny stopAnimation:nil];
+    
+    [theWindow makeFirstResponder:identityField];
     [self showWindow:nil];
-    [[self window] makeFirstResponder:identityField];
 }
 
 - (void) showAuthPrompt
 {
     uint32_t type = [[glueController valueForKeyPath:@"content.prompt_type"] unsignedIntegerValue];
     
+    [passwordSpinny stopAnimation:nil];
+    [samSpinny stopAnimation:nil];
+
     switch (type) {
         case kim_prompt_type_password :
             [self showEnterPassword]; break;
     NSRect frame;
     NSString *key = nil;
     NSString *message = nil;
-    
-    [self window];
+    NSWindow *theWindow = [self window];
 
     if ([associatedClient.name isEqualToString:[[NSBundle mainBundle] bundlePath]]) {
         key = ACPasswordReqKey;
     [glueController setValue:message
                   forKeyPath:message_keypath];
 
-    // wake up the nib connections and adjust window size
-    // set up controls with info from associatedClient
-    [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
-    [containerView addSubview:passwordView];
     // set badge
     [passwordBadge setBadgePath:associatedClient.path];
-    
+
+    frame = [passwordView frame];
+    [theWindow setFrame:[theWindow frameRectForContentRect:frame] display:NO];
+    [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
+    [containerView addSubview:passwordView];
+
     // adjust for checkbox visibility
     if (![[glueController valueForKeyPath:allow_save_password_keypath] boolValue]) {
+        frame = [theWindow frame];
         shrinkBy = ([passwordField frame].origin.y - 
                     [rememberPasswordInKeychainCheckBox frame].origin.y);
-        frame = [[self window] frame];
         frame.origin.y += shrinkBy;
         frame.size.height -= shrinkBy;
-        [[self window] setFrame:frame display:NO animate:NO];
+        [theWindow setFrame:frame display:NO];
     }
     
+    [theWindow makeFirstResponder:passwordField];
     [self showWindow:nil];
-    [[self window] makeFirstResponder:passwordField];
 }
 
 - (void) showSAM
 {
-    // wake up the nib connections and adjust window size
-    [self window];
-    // set up controls with info from associatedClient
-    [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
-    [containerView addSubview:samView];
+    NSWindow *theWindow = [self window];
+
     // set badge
     [samBadge setBadgePath:associatedClient.path];
 
     [glueController setValue:[NSNumber numberWithBool:NO]
                    forKeyPath:allow_save_password_keypath];
     
+    [theWindow setFrame:[theWindow frameRectForContentRect:[samView frame]] display:NO];
+    [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
+    [containerView addSubview:samView];
+    
     [self showWindow:nil];
     [[self window] makeFirstResponder:samPromptField];
 }
     NSString *message = [NSString stringWithFormat:
                          NSLocalizedStringFromTable(key, ACLocalizationTable, NULL),
                          associatedClient.name];
+    NSWindow *theWindow = [self window];
 
                      
     BOOL expired = [[glueController valueForKeyPath:password_expired_keypath] boolValue];
     [glueController setValue:message forKeyPath:message_keypath];
                      
     // wake up the nib connections and adjust window size
-    [self window];
+    [theWindow setFrame:[theWindow frameRectForContentRect:[changePasswordView frame]] display:NO];
     // set up controls with info from associatedClient
     [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
     [containerView addSubview:changePasswordView];
     // set badge
     [changePasswordBadge setBadgePath:associatedClient.path];
     
+    [changePasswordSpinny stopAnimation:nil];
+    
     [self showWindow:nil];
-    [[self window] makeFirstResponder:oldPasswordField];
+    [theWindow makeFirstResponder:oldPasswordField];
 }
 
 - (void) showError
 - (IBAction) changePasswordGearAction: (id) sender
 {
     NSString *expandedString = [KIMUtilities expandedIdentity:[identityField stringValue]];
-    NSLog(@"%s", __FUNCTION__);
-    if (expandedString && [expandedString length] > 0) {
-        [expandedString retain];
-        [NSThread detachNewThreadSelector:@selector(changePasswordThread:)
-                                 toTarget:self 
-                               withObject:expandedString];
-    }
-}
-
-- (void) changePasswordThread: (NSString *) identityString
-{
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    kim_error err = KIM_NO_ERROR;
-    kim_identity identity = NULL;
+    NSDictionary *options = [favoriteOptions objectForKey:expandedString];
     
-    NSLog(@"%s %@", __FUNCTION__, identityString);
-    if (!err) {
-        err = kim_identity_create_from_string(&identity, [identityString UTF8String]);
-    }
-    if (!err) {
-        err = kim_identity_change_password(identity);
+    if (!options) {
+        options = [glueController valueForKeyPath:options_keypath];
     }
-
-    NSLog(@"%s %d", __FUNCTION__, err);
-
-    kim_identity_free(&identity);
     
-    [identityString release];
-    [pool release];
+    [enterSpinny startAnimation:nil];
+    
+    // the principal must already be valid to get this far
+    [associatedClient didEnterIdentity:expandedString options:options wantsChangePassword:YES];
 }
 
 - (IBAction) cancel: (id) sender
 - (IBAction) enterIdentity: (id) sender
 {
     NSString *expandedString = [KIMUtilities expandedIdentity:[identityField stringValue]];
-    NSDictionary *options = [favoriteOptions objectForKey:expandedString];   
-    
+    NSDictionary *options = [favoriteOptions objectForKey:expandedString];
+
     if (!options) {
         options = [glueController valueForKeyPath:options_keypath];
     }
+    
+    [enterSpinny startAnimation:nil];
+
     // the principal must already be valid to get this far
-    [associatedClient didEnterIdentity:expandedString options:options];
+    [associatedClient didEnterIdentity:expandedString options:options wantsChangePassword:NO];
 }
 
 - (IBAction) answerAuthPrompt: (id) sender
     if (!saveResponse) {
         saveResponse = [NSNumber numberWithBool:NO];
     }
+    [passwordSpinny startAnimation:nil];
+    [samSpinny startAnimation:nil];
     [associatedClient didPromptForAuth:responseString
                           saveResponse:saveResponse];
 }
     NSString *newString = [glueController valueForKeyPath:new_password_keypath];
     NSString *verifyString = [glueController valueForKeyPath:verify_password_keypath];
     
+    [changePasswordSpinny startAnimation:nil];
+    
     [associatedClient didChangePassword:oldString
                             newPassword:newString
                          verifyPassword:verifyString];
index 172d79374ff3e5899da31cd40e0a9e113eff4bcb..361c4283aadc6961bd13990eb1c0745b12da6a12 100644 (file)
 - (kim_error) handleError: (NSDictionary *) info;
 
 - (void) didCancel;
-- (void) didSelectIdentity: (NSString *) identityString options: (NSDictionary *) options;
-- (void) didEnterIdentity: (NSString *) identityString options: (NSDictionary *) options;
+- (void) didSelectIdentity: (NSString *) identityString 
+                   options: (NSDictionary *) options 
+       wantsChangePassword: (BOOL) wantsChangePassword;
+- (void) didEnterIdentity: (NSString *) identityString 
+                  options: (NSDictionary *) options 
+      wantsChangePassword: (BOOL) wantsChangePassword;
 - (void) didPromptForAuth: (NSString *) responseString saveResponse: (NSNumber *) saveResponse;
 - (void) didChangePassword: (NSString *) oldPassword
                newPassword: (NSString *) newPassword
index 814e1480f5c991bd2b011e7b88bc47a88e5c74ad..62b6dd0f8365d43e9c8583b3558b5386c2ff032e 100644 (file)
@@ -119,11 +119,23 @@ enum krb_agent_client_state {
     return 0;
 }
 
-- (void) didSelectIdentity: (NSString *) identityString options: (NSDictionary *) options
+- (void) didSelectIdentity: (NSString *) identityString 
+                   options: (NSDictionary *) options 
+       wantsChangePassword: (BOOL) wantsChangePassword
 {
+    NSLog(@"%s %@ %@", __FUNCTION__, identityString, options);
     [self.currentInfo setObject:identityString forKey:@"identity_string"];
-    [self.currentInfo setObject:options forKey:@"options"];
-    
+    // if the user set custom options, use those
+    if (options) {
+        [self.currentInfo setObject:options forKey:@"options"];
+    }
+    // else use the options in the hints
+    else {
+        [self.currentInfo setObject:[self.currentInfo valueForKeyPath:@"hints.options"]
+                             forKey:@"options"];
+    }
+    [self.currentInfo setObject:[NSNumber numberWithBool:wantsChangePassword] forKey:@"wants_change_password"];
+
     [KerberosAgentListener didSelectIdentity:self.currentInfo error:0];
     
     // clean up state
@@ -142,10 +154,13 @@ enum krb_agent_client_state {
     return 0;
 }
 
-- (void) didEnterIdentity: (NSString *) identityString options: (NSDictionary *) options
+- (void) didEnterIdentity: (NSString *) identityString 
+                  options: (NSDictionary *) options
+      wantsChangePassword: (BOOL) wantsChangePassword
 {
     [self.currentInfo setObject:identityString forKey:@"identity_string"];
     [self.currentInfo setObject:options forKey:@"options"];
+    [self.currentInfo setObject:[NSNumber numberWithBool:wantsChangePassword] forKey:@"wants_change_password"];
     [KerberosAgentListener didEnterIdentity:self.currentInfo error:0];
 }
 
index cdb3167ace5f34c0e87d80fbf3e892c56b3d9043..712abb31cb35638462dddbc01c390e713d84ab95 100644 (file)
 #import "KIMUtilities.h"
 
 @interface Identity : NSObject {
-    kim_identity kimIdentity;
-    kim_options kimOptions;
+    NSString *identity;
+    NSDictionary *options;
     kim_credential_state state;
-    cc_time_t expiration_time;
+    NSDate *expirationDate;
     BOOL favorite;
 }
 
-@property          kim_identity         kimIdentity;
-@property          kim_options          kimOptions;
-@property           kim_credential_state state;
-@property           BOOL                favorite;
-@property           cc_time_t           expiration_time;
+@property (readwrite, retain) NSString *identity;
+@property (readwrite, retain) NSDictionary *options;
+@property (assign) kim_credential_state state;
+@property (assign) BOOL favorite;
+@property (readwrite, retain) NSDate *expirationDate;
 
 // derived properties
-@property(readonly) NSString    *principalString;
-@property(readonly) NSString    *componentsString;
-@property(readonly) NSString    *realmString;
-@property(readonly) NSDate      *expirationDate;
-@property(readonly) NSString    *expirationString;
-@property(readonly) NSString    *validLifetimeString;
-@property(readonly) NSString    *renewableLifetimeString;
-@property(readonly) BOOL        hasCCache;
-@property(readwrite) BOOL       isRenewable;
-@property(readwrite) BOOL       isForwardable;
-@property(readwrite) BOOL       isAddressless;
-@property(readwrite) BOOL       isProxiable;
-@property(readwrite) NSUInteger validLifetime;
-@property(readwrite) NSUInteger renewableLifetime;
+@property (readonly) kim_identity kimIdentity;
+@property (readonly) kim_options kimOptions;
+@property (readonly) NSString    *expirationString;
+@property (readonly) NSString    *validLifetimeString;
+@property (readonly) NSString    *renewableLifetimeString;
+@property (readonly) BOOL        hasCCache;
+@property (readwrite) BOOL       isRenewable;
+@property (readwrite) BOOL       isForwardable;
+@property (readwrite) BOOL       isAddressless;
+@property (readwrite) BOOL       isProxiable;
+@property (readwrite) NSUInteger validLifetime;
+@property (readwrite) NSUInteger renewableLifetime;
 
-- (id) initWithIdentity: (kim_identity) identity options: (kim_options) options;
-- (id) initWithFavoriteIdentity: (kim_identity) identity options: (kim_options) options;
+- (id) initWithKimIdentity: (kim_identity) an_identity kimOptions: (kim_options) some_options;
+- (id) initWithFavoriteIdentity: (kim_identity) an_identity options: (kim_options) some_options;
+- (id) initWithIdentity: (NSString *) anIdentity options: (NSDictionary *) someOptions;
 
 - (BOOL) isEqualToKIMIdentity: (kim_identity) identity;
 - (BOOL) isEqual: (Identity *)otherIdentity;
 
-- (kim_error) setPrincipalComponents: (NSString *) componentsString realm: (NSString *) realmString;
-
 - (void) resetOptions;
 - (void) toggleFavorite;
 - (BOOL) addToFavorites;
 
 
 @interface Identities : NSObject {
-    NSArray *favoriteIdentities;
-    NSArray *identities;
+    NSMutableArray *favoriteIdentities;
+    NSMutableArray *identities;
     NSConnection *threadConnection;
 }
 
-@property(readonly, retain) NSArray *identities;
+@property(readonly, retain) NSMutableArray *identities;
 @property(readonly) NSUInteger minimumValidLifetime;
 @property(readonly) NSUInteger maximumValidLifetime;
 @property(readonly) NSUInteger minimumRenewableLifetime;
index 4d9aeb71c56813303ed3cf16c413bbe8f4b2b3bc..c388de46faddecfcd39516e2a64be42a09d7421a 100644 (file)
 
 @implementation Identity
 
+@synthesize identity;
+@synthesize options;
+@synthesize expirationDate;
 @synthesize state;
-@synthesize expiration_time;
 @synthesize favorite;
 
 #pragma mark Initialization & Comparison
     NSMutableSet *result = [[super keyPathsForValuesAffectingValueForKey:key] mutableCopy];
     NSSet *otherKeys = nil;
     
-    if ([key isEqualToString:@"principalString"]) {
-        otherKeys = [NSSet setWithObjects:@"kimIdentity", nil];
-    } 
-    else if ([key isEqualToString:@"expirationDate"]) {
-        otherKeys = [NSSet setWithObjects:@"kimOptions", @"state", @"expirationTime", nil];
-    } 
-    else if ([key isEqualToString:@"expirationString"]) {
-        otherKeys = [NSSet setWithObjects:@"kimOptions", @"state", @"expirationTime", nil];
-    }
-    else if ([key isEqualToString:@"isProxiable"]) {
-        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
-    }
-    else if ([key isEqualToString:@"isForwardable"]) {
-        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
-    }
-    else if ([key isEqualToString:@"isAddressless"]) {
-        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
-    }
-    else if ([key isEqualToString:@"isRenewable"]) {
-        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
-    }
-    else if ([key isEqualToString:@"validLifetime"]) {
-        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
-    }
-    else if ([key isEqualToString:@"renewableLifetime"]) {
-        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
-    }
-    else if ([key isEqualToString:@"validLifetimeString"]) {
-        otherKeys = [NSSet setWithObjects:@"kimOptions", @"validLifetime", nil];
-    }
-    else if ([key isEqualToString:@"renewableLifetimeString"]) {
-        otherKeys = [NSSet setWithObjects:@"kimOptions", @"renewableLifetime", nil];
-    }
+//    if ([key isEqualToString:@"principalString"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimIdentity", nil];
+//    } 
+//    else if ([key isEqualToString:@"expirationDate"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimOptions", @"state", @"expirationTime", nil];
+//    } 
+//    else if ([key isEqualToString:@"expirationString"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimOptions", @"state", @"expirationTime", nil];
+//    }
+//    else if ([key isEqualToString:@"isProxiable"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+//    }
+//    else if ([key isEqualToString:@"isForwardable"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+//    }
+//    else if ([key isEqualToString:@"isAddressless"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+//    }
+//    else if ([key isEqualToString:@"isRenewable"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+//    }
+//    else if ([key isEqualToString:@"validLifetime"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+//    }
+//    else if ([key isEqualToString:@"renewableLifetime"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+//    }
+//    else if ([key isEqualToString:@"validLifetimeString"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimOptions", @"validLifetime", nil];
+//    }
+//    else if ([key isEqualToString:@"renewableLifetimeString"]) {
+//        otherKeys = [NSSet setWithObjects:@"kimOptions", @"renewableLifetime", nil];
+//    }
     
     [result unionSet:otherKeys];
     
 
 - (id) init
 {
-    return [self initWithIdentity: NULL options: NULL];
+    return [self initWithIdentity: @"" options: [NSDictionary dictionary]];
 }
 
 // ---------------------------------------------------------------------------
 
-- (id) initWithIdentity: (kim_identity) identity options: (kim_options) options
+- (id) initWithKimIdentity: (kim_identity) an_identity kimOptions: (kim_options) some_options
 {
-    if ((self = [super init])) {
-        self.kimIdentity = identity;
-        self.kimOptions = options;
-        self.state = kim_credentials_state_not_yet_valid;
-        self.expiration_time = 0;
-        self.favorite = FALSE;
-    }
+    kim_error err = KIM_NO_ERROR;
+    kim_string identity_string = NULL;
     
-    return self;
+    if (!err) {
+        err = kim_identity_get_display_string(an_identity, &identity_string);
+    }
+    return [self initWithIdentity:[NSString stringWithUTF8String:identity_string] 
+                          options:[KIMUtilities dictionaryForKimOptions:some_options]];
 }
 
 // ---------------------------------------------------------------------------
 
-- (id) initWithFavoriteIdentity: (kim_identity) identity options: (kim_options) options
+- (id) initWithFavoriteIdentity: (kim_identity) an_identity options: (kim_options) some_options
 {
-    if ((self = [self initWithIdentity: identity options: options])) {
+    if ((self = [self initWithKimIdentity: an_identity kimOptions: some_options])) {
         self.favorite = TRUE;
     }
     
 
 // ---------------------------------------------------------------------------
 
-- (BOOL) isEqualToKIMIdentity: (kim_identity) identity
+- (id) initWithIdentity: (NSString *) anIdentity options: (NSDictionary *) someOptions
+{
+    self = [super init];
+    if (self != nil) {
+        self.identity = anIdentity;
+        self.options = someOptions;
+        self.state = kim_credentials_state_not_yet_valid;
+        self.expirationDate = [NSDate dateWithTimeIntervalSince1970:0];
+        self.favorite = NO;
+    }
+    return self;
+}
+
+// ---------------------------------------------------------------------------
+
+- (BOOL) isEqualToKIMIdentity: (kim_identity) comparison_identity
 {
     kim_error err = KIM_NO_ERROR;
     kim_comparison comparison;
+    kim_identity an_identity = self.kimIdentity;
     
-    err = kim_identity_compare (kimIdentity, identity, &comparison);
+    err = kim_identity_compare (an_identity, comparison_identity, &comparison);
+
+    kim_identity_free(&an_identity);
     
     return (!err && kim_comparison_is_equal_to (comparison));
 }
 
 - (NSUInteger)hash
 {
-    return [self.principalString hash];
+    return [self.identity hash];
 }
 
 // ---------------------------------------------------------------------------
 
 - (NSComparisonResult) compare: (Identity *)otherIdentity
 {
-    return ([self.principalString compare:otherIdentity.principalString]);
+    return ([self.identity compare:otherIdentity.identity]);
 }
 
 #pragma mark Actions
 - (void) resetOptions
 {
     // property setter converts NULL into actual kim_options with default settings
-    self.kimOptions = NULL;
+    kim_error err = KIM_NO_ERROR;
+    kim_options some_options = NULL;
+    
+    err = kim_options_create(&some_options);
+    
+    if (!err) {
+        self.options = [KIMUtilities dictionaryForKimOptions:some_options];
+    }
+    
+    log_kim_error_to_console(err);
+    
+    kim_options_free(&some_options);
 }
 
 // ---------------------------------------------------------------------------
 {
     kim_error err = KIM_NO_ERROR;
     kim_preferences preferences = NULL;
-    kim_options options = NULL;
-    kim_string error_string = NULL;
-    err = kim_preferences_create(&preferences);
+    kim_identity an_identity = self.kimIdentity;
+    kim_options some_options = self.kimOptions;
     
-    if (!err) {
-       err = kim_options_create(&options);
-    }
+    err = kim_preferences_create(&preferences);
     
     if (!err) {
-       err = kim_preferences_add_favorite_identity(preferences, self.kimIdentity, options);
+       err = kim_preferences_add_favorite_identity(preferences, an_identity, some_options);
     }
     if (!err) {
        err = kim_preferences_synchronize(preferences);
     }
-    if (options) {
-       kim_options_free(&options);
-    }
-    kim_preferences_free(&preferences);
+
     if (!err) {
        self.favorite = true;
     } else {
-       kim_string_create_for_last_error(&error_string, err);
-       NSLog(@"%s failed with %s", __FUNCTION__, error_string);
+        log_kim_error_to_console(err);
     }
+
+    kim_preferences_free(&preferences);
+    kim_identity_free(&an_identity);
+    kim_options_free(&some_options);
+    
     return (err != KIM_NO_ERROR);
 }
 
 {
     kim_error err = KIM_NO_ERROR;
     kim_preferences preferences = NULL;
-    kim_options options = NULL;
-    kim_string error_string = NULL;
+    kim_identity an_identity = self.kimIdentity;
+
     err = kim_preferences_create(&preferences);
     
     if (!err) {
-       err = kim_options_create(&options);
-    }
-    
-    if (!err) {
-       err = kim_preferences_remove_favorite_identity(preferences, self.kimIdentity);
+       err = kim_preferences_remove_favorite_identity(preferences, an_identity);
     }
     if (!err) {
        err = kim_preferences_synchronize(preferences);
     }
-    if (options) {
-       kim_options_free(&options);
-    }
-    kim_preferences_free(&preferences);
     if (!err) {
        self.favorite = false;
     } else {
-       kim_string_create_for_last_error(&error_string, err);
-       NSLog(@"%s failed with %s", __FUNCTION__, error_string);
+        log_kim_error_to_console(err);
     }
+
+    kim_preferences_free(&preferences);
+    kim_identity_free(&an_identity);
+    
     return (err != KIM_NO_ERROR);
 }
 
 
 // ---------------------------------------------------------------------------
 
-- (NSDate *) expirationDate
-{
-    return [NSDate dateWithTimeIntervalSince1970:expiration_time];
-}
-
-// ---------------------------------------------------------------------------
-
 - (BOOL) hasCCache
 {
     kim_error err = KIM_NO_ERROR;
 // ---------------------------------------------------------------------------
 
 - (kim_identity) kimIdentity
-{
-    return kimIdentity;
-}
-
-// ---------------------------------------------------------------------------
-
-- (void) setKimIdentity:(kim_identity)newKimIdentity
 {
     kim_error err = KIM_NO_ERROR;
-    kim_string string = NULL;
-
-    if (!kimIdentity || kimIdentity != newKimIdentity) {
-        [self willChangeValueForKey:@"kimOptions"];
-
-        kim_identity_free(&kimIdentity);
-        kimIdentity = NULL;
-        if (newKimIdentity != NULL) {
-            kim_identity_get_display_string(newKimIdentity, &string);
-            err = kim_identity_copy(&kimIdentity, newKimIdentity);
-        }
-        
-        [self didChangeValueForKey:@"kimOptions"];
-    }
-    
-    if (err) {
-        log_kim_error_to_console(err);
-    }
+    kim_identity an_identity = NULL;
+    err = kim_identity_create_from_string(&an_identity, [self.identity UTF8String]);
+    return an_identity;
 }
 
 // ---------------------------------------------------------------------------
 
 - (kim_options) kimOptions
 {
-    return kimOptions;
-}
-
-// ---------------------------------------------------------------------------
-
-- (void) setKimOptions:(kim_options)newKimOptions
-{
-    // Passing NULL resets to default options
-    kim_error err = KIM_NO_ERROR;
-    
-    if (!kimOptions || kimOptions != newKimOptions) {
-        [self willChangeValueForKey:@"kimOptions"];
-        
-        kim_options_free(&kimOptions);
-        kimOptions = NULL;
-
-        if (newKimOptions == NULL) {
-            err = kim_options_create(&kimOptions);
-        } else {
-            err = kim_options_copy(&kimOptions, newKimOptions);
-        }
-
-        [self didChangeValueForKey:@"kimOptions"];
-    }
+    return [KIMUtilities kimOptionsForDictionary:self.options];
 }
 
 // ---------------------------------------------------------------------------
 
 - (BOOL) isRenewable
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_boolean result = FALSE;
-    kim_options options = self.kimOptions;
-    
-    err = kim_options_get_renewable(options, &result);
-    
-    return (result != 0);
+    return [[self.options valueForKey:@"renewable"] boolValue];
 }
 
 // ---------------------------------------------------------------------------
 
 - (void) setIsRenewable: (BOOL) value
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_options options = self.kimOptions;
-    
-    err = kim_options_set_renewable(options, value);
+    [self.options setValue:[NSNumber numberWithBool:value]
+                    forKey:@"renewable"];
 }
 
 // ---------------------------------------------------------------------------
 
 - (BOOL) isForwardable
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_boolean result = FALSE;
-    kim_options options = self.kimOptions;
-    
-    err = kim_options_get_forwardable(options, &result);
-    
-    return (result != 0);
+    return [[self.options valueForKey:@"forwardable"] boolValue];
 }
 
 // ---------------------------------------------------------------------------
 
 - (void) setIsForwardable: (BOOL) value
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_options options = self.kimOptions;
-    
-    err = kim_options_set_forwardable(options, value);
+    [self.options setValue:[NSNumber numberWithBool:value]
+                    forKey:@"forwardable"];
 }
 
 // ---------------------------------------------------------------------------
 
 - (BOOL) isAddressless
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_boolean result = FALSE;
-    kim_options options = self.kimOptions;
-    
-    err = kim_options_get_addressless(options, &result);
-    
-    return (result != 0);
+    return [[self.options valueForKey:@"addressless"] boolValue];
 }
 
 // ---------------------------------------------------------------------------
 
 - (void) setIsAddressless: (BOOL) value
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_options options = self.kimOptions;
-    
-    err = kim_options_set_addressless(options, value);
+    [self.options setValue:[NSNumber numberWithBool:value]
+                    forKey:@"addressless"];
 }
 
 // ---------------------------------------------------------------------------
 
 - (BOOL) isProxiable
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_boolean result = FALSE;
-    kim_options options = self.kimOptions;
-    
-    err = kim_options_get_proxiable(options, &result);
-    
-    return (result != 0);
+    return [[self.options valueForKey:@"proxiable"] boolValue];
 }
 
 // ---------------------------------------------------------------------------
 
 - (void) setIsProxiable: (BOOL) value
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_options options = self.kimOptions;
-    
-    err = kim_options_set_proxiable(options, value);
+    [self.options setValue:[NSNumber numberWithBool:value]
+                    forKey:@"proxiable"];
 }
 
 // ---------------------------------------------------------------------------
 
 - (NSUInteger) validLifetime
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_lifetime value = 0;
-    kim_options options = self.kimOptions;
-
-    err = kim_options_get_lifetime(options, &value);
-    
-    return (NSUInteger) value;
+    return [[self.options valueForKey:@"valid_lifetime"] unsignedIntegerValue];
 }
 
 // ---------------------------------------------------------------------------
 
 - (void) setValidLifetime: (NSUInteger) newLifetime
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_options options = self.kimOptions;
-    
-    // round to nearest five minutes
-    newLifetime = (newLifetime / VALID_LIFETIME_INCREMENT) * VALID_LIFETIME_INCREMENT;
-    
-    err = kim_options_set_lifetime(options, (kim_lifetime) newLifetime);
+    [self.options setValue:[NSNumber numberWithUnsignedInteger:newLifetime]
+                    forKey:@"valid_lifetime"];
 }
 
 // ---------------------------------------------------------------------------
 
 - (NSUInteger) renewableLifetime
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_lifetime value = 0;
-    kim_options options = self.kimOptions;
-    
-    err = kim_options_get_renewal_lifetime(options, &value);
-
-    return (NSUInteger) value;
+    return [[self.options valueForKey:@"renewable_lifetime"] unsignedIntegerValue];
 }
 
 // ---------------------------------------------------------------------------
 
 - (void) setRenewableLifetime: (NSUInteger) newLifetime
 {
-    kim_error err = KIM_NO_ERROR;
-    kim_options options = self.kimOptions;
-
-    // round to nearest five minutes
-    newLifetime = (newLifetime / RENEWABLE_LIFETIME_INCREMENT) * RENEWABLE_LIFETIME_INCREMENT;
-    
-    err = kim_options_set_renewal_lifetime(options, (kim_lifetime) newLifetime);
+    [self.options setValue:[NSNumber numberWithUnsignedInteger:newLifetime]
+                    forKey:@"renewable_lifetime"];
 }
 
 #pragma mark String representations
 
 // ---------------------------------------------------------------------------
 
-- (NSString *) principalString
-{
-    kim_error err = KIM_NO_ERROR;
-    kim_string display_string = NULL;
-    NSString *result = nil;
-    
-    if (self.kimIdentity) {
-        err = kim_identity_get_display_string(self.kimIdentity, &display_string);
-    }
-    
-    if (!err && display_string) {
-        result = [NSString stringWithUTF8String:display_string];
-    }
-    else {
-        result = @"-";
-    }
-    
-    if (err) {
-        log_kim_error_to_console(err);
-    }
-    
-    kim_string_free(&display_string);
-    
-    return result;
-}
-
-// ---------------------------------------------------------------------------
-
-- (NSString *) componentsString
-{
-    kim_error err = KIM_NO_ERROR;
-    kim_string display_string = NULL;
-    NSString *result = @"";
-    
-    if (self.kimIdentity) {
-        err = kim_identity_get_components_string(self.kimIdentity, &display_string);
-    }
-
-    if (!err && display_string) {
-        result = [NSString stringWithUTF8String:display_string];
-    }
-    
-    if (err) {
-        log_kim_error_to_console(err);
-    }
-    
-    kim_string_free(&display_string);
-    
-    return result;
-}
-
-// ---------------------------------------------------------------------------
-
-- (NSString *) realmString
-{
-    kim_error err = KIM_NO_ERROR;
-    kim_string display_string = NULL;
-    NSString *result = @"";
-    
-    if (self.kimIdentity) {
-        err = kim_identity_get_realm(self.kimIdentity, &display_string);
-    }
-    
-    if (!err && display_string) {
-        result = [NSString stringWithUTF8String:display_string];
-    }
-    
-    if (err) {
-        log_kim_error_to_console(err);
-    }
-    
-    kim_string_free(&display_string);
-    
-    return result;
-}
-
-// ---------------------------------------------------------------------------
-
-- (kim_error) setPrincipalComponents: (NSString *) componentsString realm: (NSString *) realmString
-{
-    kim_error err = KIM_NO_ERROR;
-    kim_identity new_identity = NULL;
-    char *principal_string = NULL;
-    
-    asprintf(&principal_string, "%s@%s", 
-             [componentsString UTF8String], [realmString UTF8String]);
-    
-    if (principal_string) {
-        err = kim_identity_create_from_string(&new_identity, principal_string);
-    }
-        
-    self.kimIdentity = new_identity;
-    
-    kim_identity_free(&new_identity);
-    if (principal_string) {
-        free(principal_string);
-    }
-    
-    return err;
-}
-
-// ---------------------------------------------------------------------------
-
 - (NSString *) expirationString
 {
     NSString *result = nil;
-    
-    if (expiration_time > 0) {
-       time_t now = time(NULL);
-       time_t lifetime = expiration_time - now;
-       time_t seconds  = (lifetime % 60);
-       time_t minutes  = (lifetime / 60 % 60);
-       time_t hours    = (lifetime / 3600 % 24);
-       time_t days     = (lifetime / 86400);
+    NSTimeInterval lifetime = [self.expirationDate timeIntervalSinceNow];
+    if (lifetime > 0) {
+       NSTimeInterval seconds  = fmod(lifetime, 60);
+       NSTimeInterval minutes  = fmod(lifetime, 60 % 60);
+       NSTimeInterval hours    = fmod(lifetime, 3600 % 24);
+       NSTimeInterval days     = fmod(lifetime, 86400);
        
        if (seconds >  0) { seconds = 0; minutes++; }
        if (minutes > 59) { minutes = 0; hours++; }
 
 - (NSString *) description
 {
-    return [NSString stringWithFormat:@"%@ (%@) %@", self.principalString, self.expirationString, super.description];
+    return [NSString stringWithFormat:@"%@ (%@) %@", self.identity, self.expirationString, [super description]];
 }
 
 @end
 
 @interface Identities ()
 
-@property(readwrite, retain) NSArray *favoriteIdentities;
-@property(readwrite, retain) NSArray *identities;
+@property(readwrite, retain) NSMutableArray *favoriteIdentities;
+@property(readwrite, retain) NSMutableArray *identities;
 
 @end
 
 //    NSLog(@"updating %@", [[NSThread currentThread] description]);
     while (!err) {
         kim_ccache ccache = NULL;
-        kim_identity kimIdentity = NULL;
-        kim_options kimOptions = NULL;
+        kim_identity an_identity = NULL;
+        kim_options some_options = NULL;
         kim_credential_state state = kim_credentials_state_valid;
-        kim_time expirationTime = 0;
-        kim_lifetime lifetime = 0;
+        kim_time expiration_time = 0;
         
         err = kim_ccache_iterator_next (iterator, &ccache);
         if (!err && !ccache) { break; }
         
         if (!err) {
-            err = kim_ccache_get_client_identity (ccache, &kimIdentity);
+            err = kim_ccache_get_client_identity (ccache, &an_identity);
         }
         
         if (!err) {
         }
         
         if (!err && state == kim_credentials_state_valid) {
-            err = kim_ccache_get_expiration_time (ccache, &expirationTime);
+            err = kim_ccache_get_expiration_time (ccache, &expiration_time);
         }
         
         if (!err) { 
-            err = kim_ccache_get_options(ccache, &kimOptions);
-        }
-        
-        if (!err) {
-            err = kim_options_get_lifetime(kimOptions, &lifetime);
+            err = kim_ccache_get_options(ccache, &some_options);
         }
         
         if (!err) {
-            Identity *identity = [[Identity alloc] initWithIdentity: kimIdentity options: kimOptions];
+            Identity *identity = [[Identity alloc] initWithKimIdentity:an_identity kimOptions:some_options];
             if (!identity) { err = ENOMEM; }
             
             if (!err) {
-                kimIdentity = NULL; /* take ownership */ 
-                identity.kimOptions = kimOptions;
                 identity.state = state;
-                identity.expiration_time = expirationTime;
+                identity.expirationDate = [NSDate dateWithTimeIntervalSince1970:expiration_time];
                 [newIdentities addObject: identity];
             }
             
-            if (identity) {
-                [identity release];
-                identity = nil;
-            }
+            [identity release];
+            identity = nil;
         }
         
         if (err == KIM_NO_CREDENTIALS_ERR) {
             log_kim_error_to_console(err);
         }
         
-        kim_options_free (&kimOptions);
-        kim_identity_free (&kimIdentity);
+        kim_options_free (&some_options);
+        kim_identity_free (&an_identity);
         kim_ccache_free (&ccache);
     }
     
         Identity *matchingIdentity = [newIdentities member:identity];
         if (matchingIdentity) {
             identity.state = matchingIdentity.state;
-            identity.expiration_time = matchingIdentity.expiration_time;
+            identity.expirationDate = matchingIdentity.expirationDate;
             [newIdentities removeObject:matchingIdentity];
         } else {
             identity.state = kim_credentials_state_expired;
-            identity.expiration_time = 0;
+            identity.expirationDate = [NSDate distantPast];
         }
     }
         
     [newIdentities unionSet:[NSSet setWithArray:self.favoriteIdentities]];
     
     if (!err) {
-        /* Use @property setter to trigger KVO notifications */
-        self.identities = [[newIdentities allObjects] sortedArrayUsingSelector:@selector(compare:)];
+        [self.identities removeAllObjects];
+        [self.identities addObjectsFromArray:[newIdentities allObjects]];
+        [self.identities sortUsingSelector:@selector(compare:)];
+
         if (!identities) { err = ENOMEM; }            
     } else {
         log_kim_error_to_console(err);
 - (kim_error) addIdentity: (Identity *) anIdentity
 {
     kim_error err = KIM_NO_ERROR;
-    NSMutableArray *newIdentities = nil;
-    
+
     if (![self.identities containsObject:anIdentity]) {
-        newIdentities = [self.identities mutableCopy];
-        [newIdentities addObject:anIdentity];
-        self.identities = newIdentities;
-        [newIdentities release];        
+        [self.identities addObject:anIdentity];
     } else {
         err = KIM_IDENTITY_ALREADY_IN_LIST_ERR;
     }
index 516e8effebffba91f5601e81498843c9e717ba16..b3b201456ab73af8bac315a29822097b7229e2d3 100644 (file)
@@ -64,6 +64,8 @@
 #define min_renewable_keypath        @"content.minRenewableLifetime"
 #define max_renewable_keypath        @"content.maxRenewableLifetime"
 
+#define wants_change_password_keypath @"content.wants_change_password"
+
 #define ACKVOContext                 @"authenticationController"
 
 
index 9b78bd7b2b4073b89c95a4594b41bc7f4119d40d..494d79913579dac103876964929e0da95aad675a 100644 (file)
@@ -73,6 +73,8 @@
 - (IBAction) cancelOptions: (id) sender;
 - (IBAction) doneOptions: (id) sender;
 
+- (IBAction) changePassword: (id) sender;
+
 - (IBAction) select: (id) sender;
 - (IBAction) cancel: (id) sender;
 
index eafd3d462591ea3b29a73c9fb753c3aa24d976c5..f6f891ab38ed4f019e2e38c0ea5e4d599c3a173b 100644 (file)
 
 // ---------------------------------------------------------------------------
 
+- (IBAction) changePassword: (id) sender
+{
+    
+}
+
+// ---------------------------------------------------------------------------
+
 - (IBAction) select: (id) sender
 {
     Identity *selectedIdentity = nil;
     }
     selectedIdentity = [[identityArrayController selectedObjects] lastObject];
 
-    [associatedClient didSelectIdentity: selectedIdentity.principalString
-                                options: [identityOptionsController valueForKeyPath:@"content.options"]];
+    [associatedClient didSelectIdentity: selectedIdentity.identity
+                                options: [identityOptionsController valueForKeyPath:@"content.options"]
+                    wantsChangePassword: NO];
 }
 
 // ---------------------------------------------------------------------------
 
 - (void) showOptions: (NSString *) contextInfo
 {
-    Identity *anIdentity = identityOptionsController.content;
-    
-    [identityField setStringValue:anIdentity.principalString];
-    [staticIdentityField setStringValue:anIdentity.principalString];
-    
+    Identity *anIdentity = [[identityArrayController selectedObjects] lastObject];
     // use a copy of the current options
+    [identityOptionsController setContent:
+     [[[glueController valueForKeyPath:options_keypath] mutableCopy] autorelease]];
+
+    [identityField setStringValue:anIdentity.identity];
+    [staticIdentityField setStringValue:anIdentity.identity];
+    
     [identityOptionsController setContent:
      [[[glueController valueForKeyPath:options_keypath] mutableCopy] autorelease]];
     
index d665e878dc89e1097fa90168d1de4c6a2c0379c9..e9745bd2a1c843d3ab0b7e4d513370c6fe3c4e36 100644 (file)
@@ -8,8 +8,12 @@
                <string key="IBDocument.HIToolboxVersion">352.00</string>
                <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
                        <bool key="EncodedWithXMLCoder">YES</bool>
-                       <integer value="300157"/>
+                       <integer value="300175"/>
+                       <integer value="300314"/>
+                       <integer value="19"/>
+                       <integer value="300274"/>
                        <integer value="300420"/>
+                       <integer value="300193"/>
                </object>
                <object class="NSArray" key="IBDocument.PluginDependencies">
                        <bool key="EncodedWithXMLCoder">YES</bool>
@@ -57,6 +61,7 @@
                                        <string>min_valid_lifetime</string>
                                        <string>identity_string</string>
                                        <string>favorite_identity_strings</string>
+                                       <string>isBusy</string>
                                </object>
                                <bool key="NSEditable">YES</bool>
                                <object class="_NSManagedProxy" key="_NSManagedProxy"/>
@@ -83,7 +88,7 @@
                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                        <object class="NSTextField" id="498665267">
                                                <reference key="NSNextResponder" ref="92892041"/>
-                                               <int key="NSvFlags">264</int>
+                                               <int key="NSvFlags">266</int>
                                                <string key="NSFrame">{{101, 103}, {382, 54}}</string>
                                                <reference key="NSSuperview" ref="92892041"/>
                                                <bool key="NSEnabled">YES</bool>
                                                                        </object>
                                                                        <object class="NSMenuItem" id="744766544">
                                                                                <reference key="NSMenu" ref="594991555"/>
-                                                                               <bool key="NSIsHidden">YES</bool>
                                                                                <string type="base64-UTF8" key="NSTitle">Q2hhbmdlIFBhc3N3b3Jk4oCmA</string>
                                                                                <string key="NSKeyEquiv"/>
                                                                                <int key="NSMnemonicLoc">2147483647</int>
                                                                                <string key="NSAction">_popUpItemAction:</string>
                                                                                <reference key="NSTarget" ref="690863814"/>
                                                                        </object>
-                                                                       <object class="NSMenuItem" id="917012637">
-                                                                               <reference key="NSMenu" ref="594991555"/>
-                                                                               <bool key="NSIsDisabled">YES</bool>
-                                                                               <bool key="NSIsSeparator">YES</bool>
-                                                                               <string key="NSTitle"/>
-                                                                               <string key="NSKeyEquiv"/>
-                                                                               <int key="NSMnemonicLoc">2147483647</int>
-                                                                               <reference key="NSOnImage" ref="530784694"/>
-                                                                               <reference key="NSMixedImage" ref="790891323"/>
-                                                                               <string key="NSAction">_popUpItemAction:</string>
-                                                                               <reference key="NSTarget" ref="690863814"/>
-                                                                       </object>
-                                                                       <object class="NSMenuItem" id="8728780">
-                                                                               <reference key="NSMenu" ref="594991555"/>
-                                                                               <string type="base64-UTF8" key="NSTitle">QWJvdXQgS2VyYmVyb3PigKY</string>
-                                                                               <string key="NSKeyEquiv"/>
-                                                                               <int key="NSMnemonicLoc">2147483647</int>
-                                                                               <reference key="NSOnImage" ref="530784694"/>
-                                                                               <reference key="NSMixedImage" ref="790891323"/>
-                                                                               <string key="NSAction">_popUpItemAction:</string>
-                                                                               <reference key="NSTarget" ref="690863814"/>
-                                                                       </object>
                                                                </object>
                                                        </object>
                                                        <int key="NSSelectedIndex">2</int>
                                                        <int key="NSArrowPosition">2</int>
                                                </object>
                                        </object>
+                                       <object class="NSProgressIndicator" id="186678160">
+                                               <reference key="NSNextResponder" ref="92892041"/>
+                                               <int key="NSvFlags">1292</int>
+                                               <object class="NSPSMatrix" key="NSDrawMatrix"/>
+                                               <string key="NSFrame">{{66, 25}, {16, 16}}</string>
+                                               <reference key="NSSuperview" ref="92892041"/>
+                                               <int key="NSpiFlags">28938</int>
+                                               <double key="NSMinValue">1.600000e+01</double>
+                                               <double key="NSMaxValue">1.000000e+02</double>
+                                       </object>
                                </object>
                                <string key="NSFrameSize">{500, 187}</string>
                                <reference key="NSSuperview"/>
                                <string key="NSClassName">NSView</string>
                        </object>
                        <object class="NSCustomView" id="866582848">
-                               <nil key="NSNextResponder"/>
+                               <reference key="NSNextResponder"/>
                                <int key="NSvFlags">274</int>
                                <object class="NSMutableArray" key="NSSubviews">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                <reference key="NSSuperview" ref="866582848"/>
                                                <string key="NSClassName">BadgedImageView</string>
                                        </object>
+                                       <object class="NSProgressIndicator" id="524728083">
+                                               <reference key="NSNextResponder" ref="866582848"/>
+                                               <int key="NSvFlags">1292</int>
+                                               <object class="NSPSMatrix" key="NSDrawMatrix"/>
+                                               <string key="NSFrame">{{19, 22}, {16, 16}}</string>
+                                               <reference key="NSSuperview" ref="866582848"/>
+                                               <int key="NSpiFlags">28938</int>
+                                               <double key="NSMinValue">1.600000e+01</double>
+                                               <double key="NSMaxValue">1.000000e+02</double>
+                                       </object>
                                </object>
                                <string key="NSFrameSize">{500, 210}</string>
+                               <reference key="NSSuperview"/>
                                <string key="NSClassName">NSView</string>
                        </object>
                        <object class="NSCustomView" id="898191415">
-                               <nil key="NSNextResponder"/>
+                               <reference key="NSNextResponder"/>
                                <int key="NSvFlags">274</int>
                                <object class="NSMutableArray" key="NSSubviews">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                        <object class="NSTextField" id="1018438662">
                                                <reference key="NSNextResponder" ref="898191415"/>
                                                <int key="NSvFlags">266</int>
-                                               <string key="NSFrame">{{101, 149}, {382, 17}}</string>
+                                               <string key="NSFrame">{{101, 140}, {382, 17}}</string>
                                                <reference key="NSSuperview" ref="898191415"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="169380754">
                                        <object class="NSTextField" id="270897371">
                                                <reference key="NSNextResponder" ref="898191415"/>
                                                <int key="NSvFlags">290</int>
-                                               <string key="NSFrame">{{226, 62}, {254, 22}}</string>
+                                               <string key="NSFrame">{{202, 62}, {278, 22}}</string>
                                                <reference key="NSSuperview" ref="898191415"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="572127639">
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
                                        </object>
-                                       <object class="NSTextField" id="1041175973">
-                                               <reference key="NSNextResponder" ref="898191415"/>
-                                               <int key="NSvFlags">292</int>
-                                               <string key="NSFrame">{{17, 64}, {204, 17}}</string>
-                                               <reference key="NSSuperview" ref="898191415"/>
-                                               <bool key="NSEnabled">YES</bool>
-                                               <object class="NSTextFieldCell" key="NSCell" id="628540900">
-                                                       <int key="NSCellFlags">68288064</int>
-                                                       <int key="NSCellFlags2">71304192</int>
-                                                       <string key="NSContents">%@:</string>
-                                                       <reference key="NSSupport" ref="604532625"/>
-                                                       <reference key="NSControlView" ref="1041175973"/>
-                                                       <reference key="NSBackgroundColor" ref="876444531"/>
-                                                       <reference key="NSTextColor" ref="883746258"/>
-                                               </object>
-                                       </object>
                                        <object class="NSTextField" id="798767897">
                                                <reference key="NSNextResponder" ref="898191415"/>
                                                <int key="NSvFlags">274</int>
-                                               <string key="NSFrame">{{101, 92}, {382, 49}}</string>
+                                               <string key="NSFrame">{{101, 104}, {382, 28}}</string>
                                                <reference key="NSSuperview" ref="898191415"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="840858923">
                                                        <int key="NSCellFlags">67239424</int>
                                                        <int key="NSCellFlags2">272629760</int>
-                                                       <string key="NSContents">%@</string>
+                                                       <string type="base64-UTF8" key="NSContents">b25lIGxpbmUKdHdvIGxpbmVzA</string>
                                                        <object class="NSFont" key="NSSupport" id="26">
                                                                <string key="NSName">LucidaGrande</string>
                                                                <double key="NSSize">1.100000e+01</double>
                                        <object class="NSCustomView" id="944021079">
                                                <reference key="NSNextResponder" ref="898191415"/>
                                                <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="898191415"/>
                                                <string key="NSClassName">BadgedImageView</string>
                                        </object>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
                                        </object>
+                                       <object class="NSTextField" id="1022812428">
+                                               <reference key="NSNextResponder" ref="898191415"/>
+                                               <int key="NSvFlags">292</int>
+                                               <string key="NSFrame">{{17, 20}, {180, 61}}</string>
+                                               <reference key="NSSuperview" ref="898191415"/>
+                                               <bool key="NSEnabled">YES</bool>
+                                               <object class="NSTextFieldCell" key="NSCell" id="370337827">
+                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags2">71303168</int>
+                                                       <string key="NSContents">I am a really big prompt label:</string>
+                                                       <object class="NSFont" key="NSSupport">
+                                                               <string key="NSName">LucidaGrande</string>
+                                                               <double key="NSSize">1.300000e+01</double>
+                                                               <int key="NSfFlags">16</int>
+                                                       </object>
+                                                       <reference key="NSControlView" ref="1022812428"/>
+                                                       <reference key="NSBackgroundColor" ref="876444531"/>
+                                                       <reference key="NSTextColor" ref="883746258"/>
+                                               </object>
+                                       </object>
+                                       <object class="NSProgressIndicator" id="188143209">
+                                               <reference key="NSNextResponder" ref="898191415"/>
+                                               <int key="NSvFlags">1292</int>
+                                               <object class="NSPSMatrix" key="NSDrawMatrix"/>
+                                               <string key="NSFrame">{{20, 22}, {16, 16}}</string>
+                                               <reference key="NSSuperview" ref="898191415"/>
+                                               <int key="NSpiFlags">28938</int>
+                                               <double key="NSMinValue">1.600000e+01</double>
+                                               <double key="NSMaxValue">1.000000e+02</double>
+                                       </object>
                                </object>
-                               <string key="NSFrameSize">{500, 210}</string>
+                               <string key="NSFrameSize">{500, 187}</string>
+                               <reference key="NSSuperview"/>
                                <string key="NSClassName">NSView</string>
                        </object>
                        <object class="NSCustomView" id="60326189">
-                               <nil key="NSNextResponder"/>
+                               <reference key="NSNextResponder"/>
                                <int key="NSvFlags">286</int>
                                <object class="NSMutableArray" key="NSSubviews">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
                                        </object>
+                                       <object class="NSProgressIndicator" id="314932147">
+                                               <reference key="NSNextResponder" ref="60326189"/>
+                                               <int key="NSvFlags">1292</int>
+                                               <object class="NSPSMatrix" key="NSDrawMatrix"/>
+                                               <string key="NSFrame">{{20, 22}, {16, 16}}</string>
+                                               <reference key="NSSuperview" ref="60326189"/>
+                                               <int key="NSpiFlags">28938</int>
+                                               <double key="NSMinValue">1.600000e+01</double>
+                                               <double key="NSMaxValue">1.000000e+02</double>
+                                       </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">
-                                       <nil key="NSNextResponder"/>
+                                       <reference 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>
                                        </object>
                                        <int key="connectionID">300372</int>
                                </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">value: selection.title</string>
-                                               <reference key="source" ref="1041175973"/>
-                                               <reference key="destination" ref="57033499"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="1041175973"/>
-                                                       <reference key="NSDestination" ref="57033499"/>
-                                                       <string key="NSLabel">value: selection.title</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">selection.title</string>
-                                                       <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.message</string>
-                                               <reference key="source" ref="1018438662"/>
-                                               <reference key="destination" ref="57033499"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="1018438662"/>
-                                                       <reference key="NSDestination" ref="57033499"/>
-                                                       <string key="NSLabel">value: selection.message</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">selection.message</string>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300374</int>
-                               </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">value: selection.description</string>
-                                               <reference key="source" ref="798767897"/>
-                                               <reference key="destination" ref="57033499"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="798767897"/>
-                                                       <reference key="NSDestination" ref="57033499"/>
-                                                       <string key="NSLabel">value: selection.description</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">selection.description</string>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">300375</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBBindingConnection" key="connection">
                                                <string key="label">value: selection.prompt_response</string>
                                        </object>
                                        <int key="connectionID">300522</int>
                                </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">value: selection.message</string>
+                                               <reference key="source" ref="798767897"/>
+                                               <reference key="destination" ref="57033499"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="798767897"/>
+                                                       <reference key="NSDestination" ref="57033499"/>
+                                                       <string key="NSLabel">value: selection.message</string>
+                                                       <string key="NSBinding">value</string>
+                                                       <string key="NSKeyPath">selection.message</string>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300524</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">value: selection.title</string>
+                                               <reference key="source" ref="1018438662"/>
+                                               <reference key="destination" ref="57033499"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="1018438662"/>
+                                                       <reference key="NSDestination" ref="57033499"/>
+                                                       <string key="NSLabel">value: selection.title</string>
+                                                       <string key="NSBinding">value</string>
+                                                       <string key="NSKeyPath">selection.title</string>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300525</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">displayPatternValue1: selection.description</string>
+                                               <reference key="source" ref="1022812428"/>
+                                               <reference key="destination" ref="57033499"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="1022812428"/>
+                                                       <reference key="NSDestination" ref="57033499"/>
+                                                       <string key="NSLabel">displayPatternValue1: selection.description</string>
+                                                       <string key="NSBinding">displayPatternValue1</string>
+                                                       <string key="NSKeyPath">selection.description</string>
+                                                       <object class="NSDictionary" key="NSOptions">
+                                                               <string key="NS.key.0">NSDisplayPattern</string>
+                                                               <string key="NS.object.0">%{value1}@:</string>
+                                                       </object>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300529</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">samSpinny</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="188143209"/>
+                                       </object>
+                                       <int key="connectionID">300532</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">changePasswordSpinny</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="314932147"/>
+                                       </object>
+                                       <int key="connectionID">300537</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">enterSpinny</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="186678160"/>
+                                       </object>
+                                       <int key="connectionID">300538</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">passwordSpinny</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="524728083"/>
+                                       </object>
+                                       <int key="connectionID">300539</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBBindingConnection" key="connection">
+                                               <string key="label">enabled: selection.isPrincipalValid</string>
+                                               <reference key="source" ref="744766544"/>
+                                               <reference key="destination" ref="57033499"/>
+                                               <object class="NSNibBindingConnector" key="connector">
+                                                       <reference key="NSSource" ref="744766544"/>
+                                                       <reference key="NSDestination" ref="57033499"/>
+                                                       <string key="NSLabel">enabled: selection.isPrincipalValid</string>
+                                                       <string key="NSBinding">enabled</string>
+                                                       <string key="NSKeyPath">selection.isPrincipalValid</string>
+                                                       <int key="NSNibBindingConnectorVersion">2</int>
+                                               </object>
+                                       </object>
+                                       <int key="connectionID">300540</int>
+                               </object>
                        </object>
                        <object class="IBMutableOrderedSet" key="objectRecords">
                                <object class="NSArray" key="orderedObjects">
                                                        <reference ref="529434335"/>
                                                        <reference ref="498665267"/>
                                                        <reference ref="1016187493"/>
+                                                       <reference ref="186678160"/>
                                                </object>
                                                <reference key="parent" ref="0"/>
                                                <string key="objectName">Enter Identity</string>
                                                        <reference ref="645528597"/>
                                                        <reference ref="464070473"/>
                                                        <reference ref="225475172"/>
+                                                       <reference ref="524728083"/>
                                                </object>
                                                <reference key="parent" ref="0"/>
                                                <string key="objectName">Enter Password</string>
                                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                        <reference ref="944021079"/>
                                                        <reference ref="798767897"/>
-                                                       <reference ref="1018438662"/>
                                                        <reference ref="270897371"/>
-                                                       <reference ref="1041175973"/>
                                                        <reference ref="907069022"/>
                                                        <reference ref="499090485"/>
+                                                       <reference ref="1018438662"/>
+                                                       <reference ref="1022812428"/>
+                                                       <reference ref="188143209"/>
                                                </object>
                                                <reference key="parent" ref="0"/>
                                                <string key="objectName">SAM Authentication</string>
                                                </object>
                                                <reference key="parent" ref="898191415"/>
                                        </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300200</int>
-                                               <reference key="object" ref="1041175973"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="628540900"/>
-                                               </object>
-                                               <reference key="parent" ref="898191415"/>
-                                       </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">300223</int>
                                                <reference key="object" ref="907069022"/>
                                                <reference key="object" ref="119720976"/>
                                                <reference key="parent" ref="907069022"/>
                                        </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300203</int>
-                                               <reference key="object" ref="628540900"/>
-                                               <reference key="parent" ref="1041175973"/>
-                                       </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">300207</int>
                                                <reference key="object" ref="572127639"/>
                                                        <reference ref="576133689"/>
                                                        <reference ref="105446308"/>
                                                        <reference ref="288995352"/>
+                                                       <reference ref="314932147"/>
                                                </object>
                                                <reference key="parent" ref="0"/>
                                                <string key="objectName">Change Password</string>
                                                <object class="NSMutableArray" key="children">
                                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                        <reference ref="1020091532"/>
-                                                       <reference ref="8728780"/>
-                                                       <reference ref="917012637"/>
                                                        <reference ref="452996455"/>
                                                        <reference ref="744766544"/>
                                                </object>
                                                <reference key="object" ref="1020091532"/>
                                                <reference key="parent" ref="594991555"/>
                                        </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300317</int>
-                                               <reference key="object" ref="8728780"/>
-                                               <reference key="parent" ref="594991555"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">300320</int>
-                                               <reference key="object" ref="917012637"/>
-                                               <reference key="parent" ref="594991555"/>
-                                       </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">300384</int>
                                                <reference key="object" ref="441176528"/>
                                                <reference key="object" ref="752049494"/>
                                                <reference key="parent" ref="0"/>
                                        </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300526</int>
+                                               <reference key="object" ref="1022812428"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="370337827"/>
+                                               </object>
+                                               <reference key="parent" ref="898191415"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300527</int>
+                                               <reference key="object" ref="370337827"/>
+                                               <reference key="parent" ref="1022812428"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300530</int>
+                                               <reference key="object" ref="188143209"/>
+                                               <reference key="parent" ref="898191415"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300533</int>
+                                               <reference key="object" ref="186678160"/>
+                                               <reference key="parent" ref="92892041"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300534</int>
+                                               <reference key="object" ref="524728083"/>
+                                               <reference key="parent" ref="866582848"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300536</int>
+                                               <reference key="object" ref="314932147"/>
+                                               <reference key="parent" ref="60326189"/>
+                                       </object>
                                </object>
                        </object>
                        <object class="NSMutableDictionary" key="flattenedProperties">
                                        <string>300196.ImportedFromIB2</string>
                                        <string>300197.IBPluginDependency</string>
                                        <string>300197.ImportedFromIB2</string>
-                                       <string>300200.IBPluginDependency</string>
                                        <string>300201.IBPluginDependency</string>
                                        <string>300201.ImportedFromIB2</string>
-                                       <string>300203.IBPluginDependency</string>
                                        <string>300210.IBPluginDependency</string>
                                        <string>300211.IBEditorWindowLastContentRect</string>
                                        <string>300211.IBPluginDependency</string>
                                        <string>300314.IBEditorWindowLastContentRect</string>
                                        <string>300314.IBPluginDependency</string>
                                        <string>300316.IBPluginDependency</string>
-                                       <string>300317.IBPluginDependency</string>
-                                       <string>300320.IBPluginDependency</string>
                                        <string>300384.CustomClassName</string>
                                        <string>300384.IBPluginDependency</string>
                                        <string>300384.ImportedFromIB2</string>
                                        <string>300469.IBPluginDependency</string>
                                        <string>300502.IBPluginDependency</string>
                                        <string>300510.IBPluginDependency</string>
+                                       <string>300526.IBPluginDependency</string>
+                                       <string>300527.IBPluginDependency</string>
+                                       <string>300530.IBPluginDependency</string>
+                                       <string>300533.IBPluginDependency</string>
+                                       <string>300534.IBPluginDependency</string>
+                                       <string>300536.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, 455}, {500, 187}}</string>
+                                       <string>{{338, 521}, {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>
-                                       <string>{{477, 611}, {500, 210}}</string>
+                                       <string>{{790, 237}, {500, 210}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>NSSecureTextField</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>{{628, 163}, {500, 210}}</string>
+                                       <string>{{597, 343}, {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>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <reference ref="9"/>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>{{553, 638}, {500, 210}}</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>{{611, 408}, {189, 93}}</string>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>{{347, 504}, {189, 63}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>NSSecureTextField</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>
+                                       <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">300522</int>
+                       <int key="maxID">300540</int>
                </object>
                <object class="IBClassDescriber" key="IBDocument.Classes">
                        <object class="NSMutableArray" key="referencedPartialClassDescriptions">
                                                <object class="NSMutableArray" key="dict.sortedKeys">
                                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                        <string>changePasswordBadge</string>
+                                                       <string>changePasswordSpinny</string>
                                                        <string>changePasswordView</string>
                                                        <string>containerView</string>
                                                        <string>enterBadge</string>
+                                                       <string>enterSpinny</string>
                                                        <string>errorBadge</string>
                                                        <string>errorView</string>
                                                        <string>expiredPasswordView</string>
                                                        <string>oldPasswordField</string>
                                                        <string>passwordBadge</string>
                                                        <string>passwordField</string>
+                                                       <string>passwordSpinny</string>
                                                        <string>passwordView</string>
                                                        <string>rememberPasswordInKeychainCheckBox</string>
                                                        <string>renewableLifetimeSlider</string>
                                                        <string>samBadge</string>
                                                        <string>samPromptField</string>
+                                                       <string>samSpinny</string>
                                                        <string>samView</string>
                                                        <string>ticketOptionsController</string>
                                                        <string>ticketOptionsSheet</string>
                                                <object class="NSMutableArray" key="dict.values">
                                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                        <string>BadgedImageView</string>
+                                                       <string>NSProgressIndicator</string>
                                                        <string>NSView</string>
                                                        <string>NSView</string>
                                                        <string>BadgedImageView</string>
+                                                       <string>NSProgressIndicator</string>
                                                        <string>BadgedImageView</string>
                                                        <string>NSView</string>
                                                        <string>NSView</string>
                                                        <string>NSTextField</string>
                                                        <string>BadgedImageView</string>
                                                        <string>NSTextField</string>
+                                                       <string>NSProgressIndicator</string>
                                                        <string>NSView</string>
                                                        <string>NSButton</string>
                                                        <string>NSSlider</string>
                                                        <string>BadgedImageView</string>
                                                        <string>NSTextField</string>
+                                                       <string>NSProgressIndicator</string>
                                                        <string>NSView</string>
                                                        <string>NSObjectController</string>
                                                        <string>NSWindow</string>
index d38d944c9d53baebb0a41da877fc293b1050543a..8953d97dbc29e6ccbdb1d40acfc271eebb4e7d09 100644 (file)
@@ -9,7 +9,6 @@
                <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
                        <bool key="EncodedWithXMLCoder">YES</bool>
                        <integer value="6"/>
-                       <integer value="300301"/>
                </object>
                <object class="NSArray" key="IBDocument.PluginDependencies">
                        <bool key="EncodedWithXMLCoder">YES</bool>
@@ -29,7 +28,7 @@
                        <object class="NSWindowTemplate" id="224590347">
                                <int key="NSWindowStyleMask">13</int>
                                <int key="NSWindowBacking">2</int>
-                               <string key="NSWindowRect">{{279, 512}, {491, 316}}</string>
+                               <string key="NSWindowRect">{{279, 568}, {398, 260}}</string>
                                <int key="NSWTFlags">1886913536</int>
                                <string key="NSWindowTitle">Select a Kerberos Identity</string>
                                <object class="NSMutableString" key="NSWindowClass">
@@ -39,7 +38,6 @@
                                        <characters key="NS.bytes">View</characters>
                                </object>
                                <string key="NSWindowContentMaxSize">{600, 600}</string>
-                               <string key="NSWindowContentMinSize">{419, 298}</string>
                                <object class="NSView" key="NSWindowView" id="928852707">
                                        <reference key="NSNextResponder"/>
                                        <int key="NSvFlags">256</int>
@@ -48,7 +46,7 @@
                                                <object class="NSTextField" id="499468804">
                                                        <reference key="NSNextResponder" ref="928852707"/>
                                                        <int key="NSvFlags">266</int>
-                                                       <string key="NSFrame">{{101, 265}, {373, 17}}</string>
+                                                       <string key="NSFrame">{{101, 213}, {280, 17}}</string>
                                                        <reference key="NSSuperview" ref="928852707"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSTextFieldCell" key="NSCell" id="82820472">
@@ -84,7 +82,7 @@
                                                <object class="NSTextField" id="675887072">
                                                        <reference key="NSNextResponder" ref="928852707"/>
                                                        <int key="NSvFlags">266</int>
-                                                       <string key="NSFrame">{{101, 220}, {373, 37}}</string>
+                                                       <string key="NSFrame">{{101, 168}, {280, 37}}</string>
                                                        <reference key="NSSuperview" ref="928852707"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSTextFieldCell" key="NSCell" id="542766611">
                                                <object class="NSButton" id="426244837">
                                                        <reference key="NSNextResponder" ref="928852707"/>
                                                        <int key="NSvFlags">289</int>
-                                                       <string key="NSFrame">{{390, 13}, {87, 32}}</string>
+                                                       <string key="NSFrame">{{297, 12}, {87, 32}}</string>
                                                        <reference key="NSSuperview" ref="928852707"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSButtonCell" key="NSCell" id="686991406">
                                                <object class="NSButton" id="505388869">
                                                        <reference key="NSNextResponder" ref="928852707"/>
                                                        <int key="NSvFlags">289</int>
-                                                       <string key="NSFrame">{{308, 13}, {82, 32}}</string>
+                                                       <string key="NSFrame">{{215, 12}, {82, 32}}</string>
                                                        <reference key="NSSuperview" ref="928852707"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSButtonCell" key="NSCell" id="720384657">
                                                <object class="NSCustomView" id="700535463">
                                                        <reference key="NSNextResponder" ref="928852707"/>
                                                        <int key="NSvFlags">268</int>
-                                                       <string key="NSFrame">{{20, 232}, {64, 64}}</string>
+                                                       <string key="NSFrame">{{20, 176}, {64, 64}}</string>
                                                        <reference key="NSSuperview" ref="928852707"/>
                                                        <string key="NSClassName">BadgedImageView</string>
                                                </object>
                                                <object class="NSButton" id="949861041">
                                                        <reference key="NSNextResponder" ref="928852707"/>
                                                        <int key="NSvFlags">292</int>
-                                                       <string key="NSFrame">{{20, 19}, {28, 24}}</string>
+                                                       <string key="NSFrame">{{20, 18}, {28, 24}}</string>
                                                        <reference key="NSSuperview" ref="928852707"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSButtonCell" key="NSCell" id="871232847">
                                                                                <object class="NSTableView" id="631507655">
                                                                                        <reference key="NSNextResponder" ref="568659409"/>
                                                                                        <int key="NSvFlags">256</int>
-                                                                                       <string key="NSFrameSize">{449, 133}</string>
+                                                                                       <string key="NSFrameSize">{356, 83}</string>
                                                                                        <reference key="NSSuperview" ref="568659409"/>
                                                                                        <bool key="NSEnabled">YES</bool>
                                                                                        <object class="NSTableHeaderView" key="NSHeaderView" id="282626403">
                                                                                                <reference key="NSNextResponder" ref="71614719"/>
                                                                                                <int key="NSvFlags">256</int>
-                                                                                               <string key="NSFrameSize">{449, 17}</string>
+                                                                                               <string key="NSFrameSize">{356, 17}</string>
                                                                                                <reference key="NSSuperview" ref="71614719"/>
                                                                                                <reference key="NSTableView" ref="631507655"/>
                                                                                        </object>
                                                                                                <bool key="EncodedWithXMLCoder">YES</bool>
                                                                                                <object class="NSTableColumn" id="1025403577">
                                                                                                        <string key="NSIdentifier">identityColumn</string>
-                                                                                                       <double key="NSWidth">2.670000e+02</double>
+                                                                                                       <double key="NSWidth">1.740000e+02</double>
                                                                                                        <double key="NSMinWidth">4.000000e+01</double>
                                                                                                        <double key="NSMaxWidth">1.000000e+03</double>
                                                                                                        <object class="NSTableHeaderCell" key="NSHeaderCell">
                                                                                        <bool key="NSAllowsTypeSelect">YES</bool>
                                                                                </object>
                                                                        </object>
-                                                                       <string key="NSFrame">{{1, 17}, {449, 133}}</string>
+                                                                       <string key="NSFrame">{{1, 17}, {356, 83}}</string>
                                                                        <reference key="NSSuperview" ref="616284695"/>
                                                                        <reference key="NSNextKeyView" ref="631507655"/>
                                                                        <reference key="NSDocView" ref="631507655"/>
                                                                                <bool key="EncodedWithXMLCoder">YES</bool>
                                                                                <reference ref="282626403"/>
                                                                        </object>
-                                                                       <string key="NSFrame">{{1, 0}, {449, 17}}</string>
+                                                                       <string key="NSFrame">{{1, 0}, {356, 17}}</string>
                                                                        <reference key="NSSuperview" ref="616284695"/>
                                                                        <reference key="NSNextKeyView" ref="282626403"/>
                                                                        <reference key="NSDocView" ref="282626403"/>
                                                                </object>
                                                                <reference ref="865861000"/>
                                                        </object>
-                                                       <string key="NSFrame">{{20, 61}, {451, 151}}</string>
+                                                       <string key="NSFrame">{{20, 59}, {358, 101}}</string>
                                                        <reference key="NSSuperview" ref="928852707"/>
                                                        <reference key="NSNextKeyView" ref="568659409"/>
                                                        <int key="NSsFlags">530</int>
                                                <object class="NSPopUpButton" id="263312988">
                                                        <reference key="NSNextResponder" ref="928852707"/>
                                                        <int key="NSvFlags">292</int>
-                                                       <string key="NSFrame">{{47, 19}, {54, 24}}</string>
+                                                       <string key="NSFrame">{{47, 18}, {54, 24}}</string>
                                                        <reference key="NSSuperview" ref="928852707"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSPopUpButtonCell" key="NSCell" id="659813048">
                                                                                <reference ref="354283131"/>
                                                                                <object class="NSMenuItem" id="136217401">
                                                                                        <reference key="NSMenu" ref="600123164"/>
-                                                                                       <bool key="NSIsHidden">YES</bool>
                                                                                        <string key="NSTitle">Remember Identity</string>
                                                                                        <string key="NSKeyEquiv"/>
                                                                                        <int key="NSKeyEquivModMask">1048576</int>
                                                                                        <string key="NSAction">_popUpItemAction:</string>
                                                                                        <reference key="NSTarget" ref="659813048"/>
                                                                                </object>
+                                                                               <object class="NSMenuItem" id="963135554">
+                                                                                       <reference key="NSMenu" ref="600123164"/>
+                                                                                       <string type="base64-UTF8" key="NSTitle">Q2hhbmdlIFBhc3N3b3Jk4oCmA</string>
+                                                                                       <string key="NSKeyEquiv"/>
+                                                                                       <int key="NSKeyEquivModMask">1048576</int>
+                                                                                       <int key="NSMnemonicLoc">2147483647</int>
+                                                                                       <reference key="NSOnImage" ref="514331248"/>
+                                                                                       <reference key="NSMixedImage" ref="572887887"/>
+                                                                                       <string key="NSAction">_popUpItemAction:</string>
+                                                                                       <reference key="NSTarget" ref="659813048"/>
+                                                                               </object>
                                                                        </object>
                                                                </object>
+                                                               <int key="NSSelectedIndex">4</int>
                                                                <bool key="NSPullDown">YES</bool>
                                                                <int key="NSPreferredEdge">2</int>
                                                                <bool key="NSUsesItemFromMenu">YES</bool>
                                                        </object>
                                                </object>
                                        </object>
-                                       <string key="NSFrameSize">{491, 316}</string>
+                                       <string key="NSFrameSize">{398, 260}</string>
                                        <reference key="NSSuperview"/>
                                </object>
                                <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
-                               <string key="NSMinSize">{419, 320}</string>
                                <string key="NSMaxSize">{600, 622}</string>
-                               <string key="NSFrameAutosaveName">SelectIdentityWindow</string>
+                               <string key="NSFrameAutosaveName"/>
                        </object>
                        <object class="NSArrayController" id="333357907">
                                <object class="NSMutableArray" key="NSDeclaredKeys">
                                <nil key="NSViewClass"/>
                                <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
                                <object class="NSView" key="NSWindowView" id="1019868804">
-                                       <reference key="NSNextResponder"/>
+                                       <nil key="NSNextResponder"/>
                                        <int key="NSvFlags">258</int>
                                        <object class="NSMutableArray" key="NSSubviews">
                                                <bool key="EncodedWithXMLCoder">YES</bool>
                                                </object>
                                        </object>
                                        <string key="NSFrameSize">{427, 348}</string>
-                                       <reference key="NSSuperview"/>
                                </object>
                                <string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
                                <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
                                        </object>
                                        <int key="connectionID">300484</int>
                                </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBActionConnection" key="connection">
+                                               <string key="label">changePassword:</string>
+                                               <reference key="source" ref="262677138"/>
+                                               <reference key="destination" ref="963135554"/>
+                                       </object>
+                                       <int key="connectionID">300486</int>
+                               </object>
                        </object>
                        <object class="IBMutableOrderedSet" key="objectRecords">
                                <object class="NSArray" key="orderedObjects">
                                                        <reference ref="136217401"/>
                                                        <reference ref="553755370"/>
                                                        <reference ref="778570067"/>
+                                                       <reference ref="963135554"/>
                                                </object>
                                                <reference key="parent" ref="659813048"/>
                                        </object>
                                                <reference key="parent" ref="0"/>
                                                <string key="objectName">Glue Controller</string>
                                        </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">300485</int>
+                                               <reference key="object" ref="963135554"/>
+                                               <reference key="parent" ref="600123164"/>
+                                       </object>
                                </object>
                        </object>
                        <object class="NSMutableDictionary" key="flattenedProperties">
                                        <string>300431.IBPluginDependency</string>
                                        <string>300432.IBPluginDependency</string>
                                        <string>300462.IBPluginDependency</string>
+                                       <string>300485.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>{{535, 102}, {198, 83}}</string>
+                                       <string>{{535, 82}, {203, 103}}</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>
-                                       <string>{{499, 142}, {491, 316}}</string>
+                                       <string>{{508, 407}, {398, 260}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>{{499, 142}, {491, 316}}</string>
+                                       <string>{{508, 407}, {398, 260}}</string>
                                        <reference ref="9"/>
                                        <reference ref="9"/>
                                        <string>{{503, 256}, {419, 465}}</string>
                                        <reference ref="9"/>
-                                       <reference ref="9"/>
+                                       <integer value="0"/>
                                        <string>{600, 600}</string>
                                        <string>{419, 298}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                </object>
                        </object>
                        <nil key="sourceID"/>
-                       <int key="maxID">300484</int>
+                       <int key="maxID">300486</int>
                </object>
                <object class="IBClassDescriber" key="IBDocument.Classes">
                        <object class="NSMutableArray" key="referencedPartialClassDescriptions">
                                                        <string>addToFavorites:</string>
                                                        <string>cancel:</string>
                                                        <string>cancelOptions:</string>
+                                                       <string>changePassword:</string>
                                                        <string>doneOptions:</string>
                                                        <string>editOptions:</string>
                                                        <string>newIdentity:</string>
                                                        <string>id</string>
                                                        <string>id</string>
                                                        <string>id</string>
+                                                       <string>id</string>
                                                </object>
                                        </object>
                                        <object class="NSMutableDictionary" key="outlets">