diff options
23 files changed, 3426 insertions, 777 deletions
diff --git a/src/kim/agent/mac/AuthenticationController.h b/src/kim/agent/mac/AuthenticationController.h new file mode 100644 index 0000000000..5fcb612c08 --- /dev/null +++ b/src/kim/agent/mac/AuthenticationController.h @@ -0,0 +1,76 @@ +/* + * Copyright 2008 Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#import <Cocoa/Cocoa.h> + +@class IPCClient; +@class BadgedImageView; + +@interface AuthenticationController : NSWindowController { + IPCClient *associatedClient; + + IBOutlet NSView *containerView; + IBOutlet NSView *identityView; + IBOutlet NSView *passwordView; + IBOutlet NSView *samView; + IBOutlet NSView *changePasswordView; + IBOutlet NSView *expiredPasswordView; + IBOutlet NSView *errorView; + + IBOutlet BadgedImageView *enterBadge; + IBOutlet BadgedImageView *passwordBadge; + IBOutlet BadgedImageView *samBadge; + IBOutlet BadgedImageView *changePasswordBadge; + IBOutlet BadgedImageView *errorBadge; + + // Controls that need to be made key + IBOutlet NSTextField *usernameField; + IBOutlet NSTextField *passwordField; + IBOutlet NSTextField *samPromptField; + IBOutlet NSTextField *oldPasswordField; + + // Other controls of interest + IBOutlet NSButton *rememberPasswordInKeychainCheckBox; + + IBOutlet NSObjectController *glueController; +} + +@property (readwrite, retain) IPCClient *associatedClient; + +- (void) setContent: (NSMutableDictionary *) newContent; + +- (void) showEnterIdentity; +- (void) showAuthPrompt; +- (void) showEnterPassword; +- (void) showSAM; +- (void) showChangePassword; +- (void) showError; + +- (IBAction) cancel: (id) sender; +- (IBAction) enterIdentity: (id) sender; +- (IBAction) answerAuthPrompt: (id) sender; +- (IBAction) changePassword: (id) sender; +- (IBAction) showedError: (id) sender; + +@end diff --git a/src/kim/agent/mac/AuthenticationController.m b/src/kim/agent/mac/AuthenticationController.m new file mode 100644 index 0000000000..6a9b668bb3 --- /dev/null +++ b/src/kim/agent/mac/AuthenticationController.m @@ -0,0 +1,383 @@ +/* + * Copyright 2008 Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#import "AuthenticationController.h" +#import "IPCClient.h" +#import "BadgedImageView.h" + +// to get kim_prompt_type enum +#import <Kerberos/kim_ui_plugin.h> + +/* + * glueController KVC mapping is as follows: + * name = client app name + * path = client app bundle path + * title = suggested label for prompt field + * message = desired large text message + * description = longer, detailed, small text message + * username = 'user' part of 'user@REALM.ORG' + * realm = 'REALM.ORG' part of 'user@REALM.ORG' + * realm_history = past realms the user has entered + * prompt_response = auth prompt response + * allow_save_password = whether or not to show the 'save password in keychain' checkbox + * should_save_password = whether or not to save the password in the keychain + * old_password = for change password dialog + * new_password = " + * verify_password = " + */ + +#define client_name_keypath @"content.name" +#define client_path_keypath @"content.path" + +#define identity_string_keypath @"content.identity_string" +#define title_keypath @"content.title" +#define message_keypath @"content.message" +#define description_keypath @"content.description" + +#define username_keypath @"content.username" +#define realm_keypath @"content.realm" +#define realm_history_keypath @"content.realm_history" + +#define prompt_response_keypath @"content.prompt_response" +#define allow_save_password_keypath @"content.allow_save" +#define should_save_password_keypath @"content.save_response" + +#define password_expired_keypath @"content.expired" +#define old_password_keypath @"content.old_password" +#define new_password_keypath @"content.new_password" +#define verify_password_keypath @"content.verify_password" + +#define enable_identity_ok_keypath @"content.isPrincipalValid" +#define enable_prompt_ok_keypath @"content.isPromptValid" +#define change_password_ok_keypath @"content.isChangePasswordValid" + +#define valid_lifetime_keypath @"content.valid_lifetime" +#define renewal_lifetime_keypath @"content.renewal_lifetime" +#define renewable_keypath @"content.renewable" +#define addressless_keypath @"content.addressless" +#define forwardable_keypath @"content.forwardable" + +#define max_valid_lifetime_keypath @"content.max_valid_lifetime" +#define min_valid_lifetime_keypath @"content.min_valid_lifetime" +#define max_renewal_lifetime_keypath @"content.max_renewal_lifetime" +#define min_renewal_lifetime_keypath @"content.min_renewal_lifetime" + + +#define ACKVOContext @"authenticationController" + +// localization keys and tables + +#define ACLocalizationTable @"AuthenticationController" + +#define ACAppPrincReqKey @"AuthControllerApplicationPrincipalRequest" +#define ACPrincReqKey @"AuthControllerPrincipalRequest" +#define ACAppPasswordReqKey @"AuthControllerApplicationPasswordRequest" +#define ACPasswordReqKey @"AuthControllerPasswordRequest" +#define ACPasswordChangeExpired @"ChangePasswordPasswordExpired" +#define ACPasswordChangeApp @"ChangePasswordApplicationRequest" +#define ACPasswordChangePrinc @"ChangePasswordPrincipalRequest" + +@implementation AuthenticationController + +@synthesize associatedClient; + +- (id) init +{ + return [self initWithWindowNibName: @"Authentication"]; +} + +- (void) awakeFromNib +{ + [glueController addObserver:self + forKeyPath:username_keypath + options:NSKeyValueObservingOptionNew + context:ACKVOContext]; + [glueController addObserver:self + forKeyPath:realm_keypath + options:NSKeyValueObservingOptionNew + context:ACKVOContext]; + [glueController addObserver:self + forKeyPath:prompt_response_keypath + options:NSKeyValueObservingOptionNew + context:ACKVOContext]; + [glueController addObserver:self + forKeyPath:old_password_keypath + options:NSKeyValueObservingOptionNew + context:ACKVOContext]; + [glueController addObserver:self + forKeyPath:new_password_keypath + options:NSKeyValueObservingOptionNew + context:ACKVOContext]; + [glueController addObserver:self + forKeyPath:verify_password_keypath + options:NSKeyValueObservingOptionNew + context:ACKVOContext]; + + [[self window] center]; + // We need to float over the loginwindow and SecurityAgent so use its hardcoded level. + [[self window] setLevel:2003]; +} + +- (void) dealloc +{ + [glueController removeObserver:self forKeyPath:username_keypath]; + [glueController removeObserver:self forKeyPath:realm_keypath]; + [glueController removeObserver:self forKeyPath:prompt_response_keypath]; + [super dealloc]; +} + +- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if ([(NSString *) context isEqualToString:ACKVOContext]) { + if ([keyPath isEqualToString:username_keypath] || [keyPath isEqualToString:realm_keypath]) { + BOOL valid = [KIMUtilities validatePrincipalWithName:[glueController valueForKeyPath:username_keypath] + realm:[glueController valueForKeyPath:realm_keypath]]; + [glueController setValue:[NSNumber numberWithBool:valid] + forKeyPath:enable_identity_ok_keypath]; + } + else if ([keyPath isEqualToString:prompt_response_keypath]) { + BOOL valid = ([[glueController valueForKeyPath:prompt_response_keypath] length] > 0); + [glueController setValue:[NSNumber numberWithBool:valid] + forKeyPath:enable_prompt_ok_keypath]; + } + else if ([keyPath isEqualToString:old_password_keypath] || + [keyPath isEqualToString:new_password_keypath] || + [keyPath isEqualToString:verify_password_keypath]) { + NSString *oldString = [glueController valueForKeyPath:old_password_keypath]; + NSString *newString = [glueController valueForKeyPath:new_password_keypath]; + NSString *verifyString = [glueController valueForKeyPath:verify_password_keypath]; + BOOL valid = ([oldString length] > 0 && + [newString length] > 0 && + [verifyString length] > 0 && + [newString isEqualToString:verifyString]); + [glueController setValue:[NSNumber numberWithBool:valid] + forKeyPath:change_password_ok_keypath]; + } + } + else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + +- (void) setContent: (NSMutableDictionary *) newContent +{ + [self window]; // wake up the nib connections + [glueController setContent:newContent]; +} + +- (void) showEnterIdentity +{ + NSString *key = (associatedClient.name) ? ACAppPrincReqKey : ACPrincReqKey; + NSString *message = [NSString stringWithFormat: + NSLocalizedStringFromTable(key, ACLocalizationTable, NULL), + associatedClient.name]; + + // 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]; + [self showWindow:nil]; + [[self window] makeFirstResponder:usernameField]; +} + +- (void) showAuthPrompt +{ + uint32_t type = [[glueController valueForKeyPath:@"content.prompt_type"] unsignedIntegerValue]; + + switch (type) { + case kim_prompt_type_password : + [self showEnterPassword]; break; + case kim_prompt_type_preauth : + default : + [self showSAM]; break; + } +} + +- (void) showEnterPassword +{ + CGFloat shrinkBy; + NSRect frame; + NSString *key = nil; + NSString *message = nil; + + [self window]; + + if ([associatedClient.name isEqualToString:[[NSBundle mainBundle] bundlePath]]) { + key = ACPasswordReqKey; + message = [NSString stringWithFormat: + NSLocalizedStringFromTable(key, ACLocalizationTable, NULL), + [glueController valueForKeyPath:identity_string_keypath]]; + } else { + key = ACAppPasswordReqKey; + message = [NSString stringWithFormat: + NSLocalizedStringFromTable(key, ACLocalizationTable, NULL), + associatedClient.name, + [glueController valueForKeyPath:identity_string_keypath]]; + } + [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]; + + // adjust for checkbox visibility + if (![[glueController valueForKeyPath:allow_save_password_keypath] boolValue]) { + 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]; + } + + [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]; + // set badge + [samBadge setBadgePath:associatedClient.path]; + + [glueController setValue:[NSNumber numberWithBool:NO] + forKeyPath:allow_save_password_keypath]; + + [self showWindow:nil]; + [[self window] makeFirstResponder:samPromptField]; +} + +- (void) showChangePassword +{ + NSString *key = ([glueController valueForKeyPath:password_expired_keypath]) ? ACAppPrincReqKey : ACPrincReqKey; + NSString *message = [NSString stringWithFormat: + NSLocalizedStringFromTable(key, ACLocalizationTable, NULL), + associatedClient.name]; + + + BOOL expired = [[glueController valueForKeyPath:password_expired_keypath] boolValue]; + BOOL calledBySelf = [associatedClient.path isEqualToString:[[NSBundle mainBundle] bundlePath]]; + + if (calledBySelf) { + key = ACPasswordChangePrinc; + message = [NSString stringWithFormat: + NSLocalizedStringFromTable(key, ACLocalizationTable, NULL), + [glueController valueForKeyPath:identity_string_keypath]]; + // Please change the Kerberos password for \"%@\" + } else if (!expired) { + key = ACPasswordChangeApp; + message = [NSString stringWithFormat: + NSLocalizedStringFromTable(key, ACLocalizationTable, NULL), + associatedClient.name, + [glueController valueForKeyPath:identity_string_keypath]]; + // %@ requires that you change the Kerberos password for \"%@\" + } else { + key = ACPasswordChangeExpired; + message = NSLocalizedStringFromTable(key, ACLocalizationTable, NULL); + // Your password has expired, would you like to change it? + } + [glueController setValue:message forKeyPath:message_keypath]; + + // 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:changePasswordView]; + // set badge + [changePasswordBadge setBadgePath:associatedClient.path]; + + [self showWindow:nil]; + [[self window] makeFirstResponder:oldPasswordField]; +} + +- (void) showError +{ + // 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:errorView]; + // set badge + [errorBadge setBadgePath:associatedClient.path]; + + [self showWindow:nil]; +} + +- (IBAction) cancel: (id) sender +{ + [associatedClient didCancel]; + [self close]; +} + +- (IBAction) enterIdentity: (id) sender +{ + NSString *usernameString = [glueController valueForKeyPath:username_keypath]; + NSString *realmString = [glueController valueForKeyPath:realm_keypath]; + NSString *identityString = [NSString stringWithFormat:@"%@@%@", usernameString, realmString]; + + // the principal must already be valid to get this far + [associatedClient didEnterIdentity:identityString]; +} + +- (IBAction) answerAuthPrompt: (id) sender +{ + NSString *responseString = [glueController valueForKeyPath:prompt_response_keypath]; + NSNumber *saveResponse = [glueController valueForKeyPath:should_save_password_keypath]; + + if (!saveResponse) { + saveResponse = [NSNumber numberWithBool:NO]; + } + [associatedClient didPromptForAuth:responseString + saveResponse:saveResponse]; +} + +- (IBAction) changePassword: (id) sender +{ + NSString *oldString = [glueController valueForKeyPath:old_password_keypath]; + NSString *newString = [glueController valueForKeyPath:new_password_keypath]; + NSString *verifyString = [glueController valueForKeyPath:verify_password_keypath]; + + [associatedClient didChangePassword:oldString + newPassword:newString + verifyPassword:verifyString]; +} + +- (IBAction) showedError: (id) sender +{ + [associatedClient didHandleError]; +} + +@end diff --git a/src/kim/agent/mac/BadgedImageView.h b/src/kim/agent/mac/BadgedImageView.h index 714c13ef5c..4fba86727c 100644 --- a/src/kim/agent/mac/BadgedImageView.h +++ b/src/kim/agent/mac/BadgedImageView.h @@ -33,6 +33,7 @@ - (id) initWithFrame: (NSRect) frameRect; - (void) dealloc; - (void) setBadgeImage: (NSImage *) image; +- (void) setBadgePath: (NSString *) path; - (void) drawRect: (NSRect) rect; @end diff --git a/src/kim/agent/mac/BadgedImageView.m b/src/kim/agent/mac/BadgedImageView.m index b408130e3e..167130aca3 100644 --- a/src/kim/agent/mac/BadgedImageView.m +++ b/src/kim/agent/mac/BadgedImageView.m @@ -60,6 +60,14 @@ // --------------------------------------------------------------------------- +- (void) setBadgePath: (NSString *) path +{ + NSImage *newImage = [[NSWorkspace sharedWorkspace] iconForFile: path]; + [self setBadgeImage: newImage]; +} + +// --------------------------------------------------------------------------- + - (void) drawRect: (NSRect) rect { float frameSize = [self frame].size.width; diff --git a/src/kim/agent/mac/IPCClient.h b/src/kim/agent/mac/IPCClient.h new file mode 100644 index 0000000000..531f7cbe4a --- /dev/null +++ b/src/kim/agent/mac/IPCClient.h @@ -0,0 +1,51 @@ +// +// IPCClient.h +// Kerberos5 +// +// Created by Justin Anderson on 9/28/08. +// Copyright 2008 MIT. All rights reserved. +// + +#import <Cocoa/Cocoa.h> +#import "KIMUtilities.h" + +@class SelectIdentityController; +@class AuthenticationController; + +@interface IPCClient : NSObject { + mach_port_t port; + NSString *name; + NSString *path; + NSInteger state; + NSMutableDictionary *currentInfo; + + SelectIdentityController *selectController; + AuthenticationController *authController; +} + +@property (assign) mach_port_t port; +@property (readwrite, retain) NSString *name; +@property (readwrite, retain) NSString *path; +@property (assign) NSInteger state; +@property (readwrite, retain) NSMutableDictionary *currentInfo; +@property (readonly, retain) SelectIdentityController *selectController; +@property (readonly, retain) AuthenticationController *authController; + +- (void) cleanup; + +- (kim_error) selectIdentity: (NSDictionary *) info; +- (kim_error) enterIdentity: (NSDictionary *) info; +- (kim_error) promptForAuth: (NSDictionary *) info; +- (kim_error) changePassword: (NSDictionary *) info; +- (kim_error) handleError: (NSDictionary *) info; + +- (void) didCancel; +- (void) didSelectIdentity: (NSString *) identityString; +- (void) didEnterIdentity: (NSString *) identityString; +- (void) didPromptForAuth: (NSString *) responseString saveResponse: (NSNumber *) saveResponse; +- (void) didChangePassword: (NSString *) oldPassword + newPassword: (NSString *) newPassword + verifyPassword: (NSString *) verifyPassword; +- (void) didHandleError; + +@end diff --git a/src/kim/agent/mac/IPCClient.m b/src/kim/agent/mac/IPCClient.m new file mode 100644 index 0000000000..4cb10fc274 --- /dev/null +++ b/src/kim/agent/mac/IPCClient.m @@ -0,0 +1,189 @@ +// +// IPCClient.m +// Kerberos5 +// +// Created by Justin Anderson on 9/28/08. +// Copyright 2008 MIT. All rights reserved. +// + +#import "IPCClient.h" +#import "SelectIdentityController.h" +#import "AuthenticationController.h" +#import "KerberosAgentListener.h" + +enum krb_agent_client_state { + ipc_client_state_idle, + ipc_client_state_init, + ipc_client_state_enter, + ipc_client_state_select, + ipc_client_state_auth_prompt, + ipc_client_state_change_password, + ipc_client_state_handle_error, + ipc_client_state_fini, +}; + +@interface IPCClient () + +@property (readwrite, retain) SelectIdentityController *selectController; +@property (readwrite, retain) AuthenticationController *authController; + +@end + + +@implementation IPCClient + +@synthesize port; +@synthesize name; +@synthesize path; +@synthesize state; +@synthesize currentInfo; +@synthesize selectController; +@synthesize authController; + +- (BOOL) isEqual: (IPCClient *) otherClient +{ + return (self.port == otherClient.port); +} + +- (NSUInteger) hash +{ + return self.port; +} + +- (id) init +{ + self = [super init]; + if (self != nil) { + self.state = ipc_client_state_init; + self.selectController = [[[SelectIdentityController alloc] init] autorelease]; + self.authController = [[[AuthenticationController alloc] init] autorelease]; + self.selectController.associatedClient = self; + self.authController.associatedClient = self; + } + return self; +} + +- (void) cleanup +{ + [self.selectController close]; + [self.authController close]; +} + +- (void) didCancel +{ + kim_error err = KIM_USER_CANCELED_ERR; + if (self.state == ipc_client_state_select) { + [KerberosAgentListener didSelectIdentity:self.currentInfo error:err]; + } + else if (self.state == ipc_client_state_enter) { + [KerberosAgentListener didEnterIdentity:self.currentInfo error:err]; + } + else if (self.state == ipc_client_state_select) { + [KerberosAgentListener didSelectIdentity:self.currentInfo error:err]; + } + else if (self.state == ipc_client_state_auth_prompt) { + [KerberosAgentListener didPromptForAuth:self.currentInfo error:err]; + } + else if (self.state == ipc_client_state_change_password) { + [KerberosAgentListener didChangePassword:self.currentInfo error:err]; + } + [self.selectController close]; + [self.authController close]; + self.state = ipc_client_state_idle; +} + +- (kim_error) selectIdentity: (NSDictionary *) info +{ + self.currentInfo = [[info mutableCopy] autorelease]; + self.state = ipc_client_state_select; + + [self.selectController showWindow:nil]; + + return 0; +} + +- (void) didSelectIdentity: (NSString *) identityString +{ + [self.currentInfo setObject:identityString forKey:@"identity_string"]; + + [KerberosAgentListener didSelectIdentity:self.currentInfo error:0]; + + // clean up state + self.currentInfo = nil; + self.state = ipc_client_state_idle; +} + +- (kim_error) enterIdentity: (NSDictionary *) info +{ + self.currentInfo = [[info mutableCopy] autorelease]; + self.state = ipc_client_state_enter; + + [self.authController setContent:self.currentInfo]; + [self.authController showEnterIdentity]; + + return 0; +} + +- (void) didEnterIdentity: (NSString *) identityString +{ + [self.currentInfo setObject:identityString forKey:@"identity_string"]; + [KerberosAgentListener didEnterIdentity:self.currentInfo error:0]; +} + +- (kim_error) promptForAuth: (NSDictionary *) info +{ + self.currentInfo = [[info mutableCopy] autorelease]; + self.state = ipc_client_state_auth_prompt; + + [self.authController setContent:self.currentInfo]; + [self.authController showAuthPrompt]; + + return 0; +} + +- (void) didPromptForAuth: (NSString *) responseString saveResponse: (NSNumber *) saveResponse +{ + [self.currentInfo setObject:responseString forKey:@"prompt_response"]; + [self.currentInfo setObject:saveResponse forKey:@"save_response"]; + [KerberosAgentListener didPromptForAuth:self.currentInfo error:0]; +} + +- (kim_error) changePassword: (NSDictionary *) info +{ + self.currentInfo = [[info mutableCopy] autorelease]; + self.state = ipc_client_state_change_password; + + [self.authController setContent:self.currentInfo]; + [self.authController showChangePassword]; + + return 0; +} + +- (void) didChangePassword: (NSString *) oldPassword + newPassword: (NSString *) newPassword + verifyPassword: (NSString *) verifyPassword +{ + [self.currentInfo setObject:oldPassword forKey:@"old_password"]; + [self.currentInfo setObject:newPassword forKey:@"new_password"]; + [self.currentInfo setObject:verifyPassword forKey:@"verify_password"]; + [KerberosAgentListener didChangePassword:self.currentInfo error:0]; +} + + +- (kim_error) handleError: (NSDictionary *) info +{ + self.currentInfo = [[info mutableCopy] autorelease]; + self.state = ipc_client_state_handle_error; + + [self.authController setContent:self.currentInfo]; + [self.authController showError]; + + return 0; +} + +- (void) didHandleError +{ + [KerberosAgentListener didHandleError:self.currentInfo error:0]; +} + +@end diff --git a/src/kim/agent/mac/Identities.m b/src/kim/agent/mac/Identities.m index 54a4947dcf..5dcd32939c 100644 --- a/src/kim/agent/mac/Identities.m +++ b/src/kim/agent/mac/Identities.m @@ -204,7 +204,7 @@ self.favorite = true; } else { kim_string_create_for_last_error(&error_string, err); - NSLog(@"%s failed with %s", _cmd, error_string); + NSLog(@"%s failed with %s", __FUNCTION__, error_string); } return (err != KIM_NO_ERROR); } @@ -237,7 +237,7 @@ self.favorite = false; } else { kim_string_create_for_last_error(&error_string, err); - NSLog(@"%s failed with %s", _cmd, error_string); + NSLog(@"%s failed with %s", __FUNCTION__, error_string); } return (err != KIM_NO_ERROR); } @@ -695,12 +695,13 @@ err = cc_context_wait_for_change (context); if (!err) { - NSLog (@"%s thread noticed update", __FUNCTION__); + // NSLog (@"%s thread noticed update", __FUNCTION__); } else { - NSLog (@"%s thread got error %d (%s)", __FUNCTION__, err, [NSString stringForLastKIMError:err]); + // NSLog (@"%s thread got error %d (%s)", __FUNCTION__, err, [KIMUtilities stringForLastKIMError:err]); err = 0; /* The server quit unexpectedly -- just try again */ } - + + //NSLog(@"waited %@", [[NSThread currentThread] description]); [(Identities *) [connection rootProxy] update]; sleep (1); } @@ -708,7 +709,7 @@ if (context) { cc_context_release (context); } } - NSLog (@"%s thread exiting", __FUNCTION__); +// NSLog (@"%s thread exiting", __FUNCTION__); [pool release]; } @@ -856,7 +857,7 @@ } // Build list of identities with existing ccaches - +// NSLog(@"updating %@", [[NSThread currentThread] description]); while (!err) { kim_ccache ccache = NULL; kim_identity kimIdentity = NULL; diff --git a/src/kim/agent/mac/KIMUtilities.h b/src/kim/agent/mac/KIMUtilities.h index 68774952cf..9b735b3e22 100644 --- a/src/kim/agent/mac/KIMUtilities.h +++ b/src/kim/agent/mac/KIMUtilities.h @@ -11,11 +11,14 @@ #define log_kim_error_to_console(err)\ {\ -NSLog(@"%s got error %@", _cmd, [NSString stringForLastKIMError:err]);\ +NSLog(@"%s got error %@", _cmd, [KIMUtilities stringForLastKIMError:err]);\ } while (0); -@interface NSString (KIMUtilities) +@interface KIMUtilities : NSObject + (NSString *) stringForLastKIMError: (kim_error) in_err; ++ (BOOL) validatePrincipalWithName: (NSString *) name + realm: (NSString *) realm; + @end diff --git a/src/kim/agent/mac/KIMUtilities.m b/src/kim/agent/mac/KIMUtilities.m index 07c85e8e82..1326c137fa 100644 --- a/src/kim/agent/mac/KIMUtilities.m +++ b/src/kim/agent/mac/KIMUtilities.m @@ -8,7 +8,7 @@ #import "KIMUtilities.h" -@implementation NSString (KIMUtilities) +@implementation KIMUtilities + (NSString *) stringForLastKIMError: (kim_error) in_err { @@ -25,4 +25,27 @@ return result; } ++ (BOOL) validatePrincipalWithName: (NSString *) name + realm: (NSString *) realm +{ + kim_error err = KIM_NO_ERROR; + kim_identity identity = NULL; + NSString *principal = nil; + + if (!name || !realm || [name length] == 0) { + err = KIM_BAD_PRINCIPAL_STRING_ERR; + } + if (!err) { + principal = [[NSString alloc] initWithFormat:@"%@@%@", name, realm]; + err = kim_identity_create_from_string(&identity, [principal UTF8String]); + [principal release]; + } + if (!identity) { + err = KIM_BAD_PRINCIPAL_STRING_ERR; + } + kim_identity_free(&identity); + + return (err == KIM_NO_ERROR); +} + @end diff --git a/src/kim/agent/mac/KerberosAgent-Info.plist b/src/kim/agent/mac/KerberosAgent-Info.plist index d3379ce0d6..6f851e91de 100644 --- a/src/kim/agent/mac/KerberosAgent-Info.plist +++ b/src/kim/agent/mac/KerberosAgent-Info.plist @@ -22,5 +22,7 @@ <string>MainMenu</string> <key>NSPrincipalClass</key> <string>NSApplication</string> + <key>LSUIElement</key> + <true/> </dict> </plist> diff --git a/src/kim/agent/mac/KerberosAgentController.h b/src/kim/agent/mac/KerberosAgentController.h index 42992dbf38..8769611634 100644 --- a/src/kim/agent/mac/KerberosAgentController.h +++ b/src/kim/agent/mac/KerberosAgentController.h @@ -24,9 +24,29 @@ #import <Cocoa/Cocoa.h> +@class IPCClient; +@class AuthenticationController; @interface KerberosAgentController : NSObject { - + NSMutableArray *clients; + NSTimer *autoQuitTimer; } +@property (readwrite, retain) NSMutableArray *clients; + +- (void) quitIfIdle: (NSTimer *) timer; + +- (IPCClient *)clientForPort:(mach_port_t)client_port; +- (IPCClient *)clientForInfo:(NSDictionary *)info; + +- (IBAction) fakeANewClient: (id) sender; + +- (void) addClient: (NSDictionary *) info; +- (void) enterIdentity: (NSDictionary *) info; +- (void) selectIdentity: (NSDictionary *) info; +- (void) promptForAuth: (NSDictionary *) info; +- (void) changePassword: (NSDictionary *) info; +- (void) handleError: (NSDictionary *) info; +- (void) removeClient: (NSDictionary *) info; + @end diff --git a/src/kim/agent/mac/KerberosAgentController.m b/src/kim/agent/mac/KerberosAgentController.m index 20b74015a3..5e973ea5e6 100644 --- a/src/kim/agent/mac/KerberosAgentController.m +++ b/src/kim/agent/mac/KerberosAgentController.m @@ -24,20 +24,206 @@ #import "KerberosAgentController.h" #import "SelectIdentityController.h" +#import "AuthenticationController.h" +#import "KerberosAgentListener.h" +#import "IPCClient.h" +#import "ServerDemux.h" +#define SECONDS_BEFORE_AUTO_QUIT_ON_START 5 +#define SECONDS_BEFORE_AUTO_QUIT_ON_NO_CLIENTS 1 @implementation KerberosAgentController +@synthesize clients; + // --------------------------------------------------------------------------- - (void) applicationDidFinishLaunching: (NSNotification *) notification { - SelectIdentityController *controller = [[SelectIdentityController alloc] init]; - int result = [controller runWindow]; - if (result != 0) { - NSLog(@"SelectIdentityController -runWindow result was %d", result); + self.clients = [NSMutableArray array]; + [KerberosAgentListener startListening]; + + [NSApp activateIgnoringOtherApps:YES]; + + autoQuitTimer = [NSTimer scheduledTimerWithTimeInterval:SECONDS_BEFORE_AUTO_QUIT_ON_START + target:self + selector:@selector(quitIfIdle:) + userInfo:nil + repeats:NO]; +} + +- (void) dealloc +{ + self.clients = nil; + [autoQuitTimer invalidate]; + [autoQuitTimer release]; + + [super dealloc]; +} + +- (void) quitIfIdle: (NSTimer *) timer +{ + if ([self.clients count] == 0) { + NSLog(@"No active clients. Terminating."); + [NSApp terminate:nil]; } + autoQuitTimer = nil; +} + +- (IPCClient *)clientForPort:(mach_port_t)client_port +{ + IPCClient *aClient = nil; + + for (aClient in self.clients) { + if (aClient.port == client_port) { + break; + } + } + + return aClient; +} +- (IPCClient *)clientForInfo:(NSDictionary *)info +{ + mach_port_t client_port = [[info objectForKey:@"client_port"] integerValue]; + return [self clientForPort:client_port]; +} + +- (IBAction) fakeANewClient: (id) sender +{ + IPCClient *aClient = [[IPCClient alloc] init]; + aClient.port = 1; + aClient.name = @"Barry"; + aClient.path = [[NSBundle mainBundle] bundlePath]; + [self.clients addObject:aClient]; + [aClient release]; +} + +#pragma mark Client actions + +// init +- (void) addClient: (NSDictionary *) info +{ + int32_t err = 0; + IPCClient *aClient = [self clientForInfo:info]; + + if (aClient) { + // already registered + err = KIM_IDENTITY_ALREADY_IN_LIST_ERR; + } else { + aClient = [[IPCClient alloc] init]; + aClient.port = [[info objectForKey:@"client_port"] integerValue]; + aClient.name = [info objectForKey:@"name"]; + aClient.path = [info objectForKey:@"path"]; + [self.clients addObject:aClient]; + [aClient release]; + } + + [autoQuitTimer invalidate]; + + [KerberosAgentListener didAddClient:info error:err]; + [info release]; +} + +// enter +- (void) enterIdentity: (NSDictionary *) info +{ + kim_error err = KIM_NO_ERROR; + IPCClient *aClient = nil; + + // get client object for matching info, creating if it doesn't exist + aClient = [self clientForInfo:info]; + if (!aClient) { err = KIM_IDENTITY_NOT_IN_LIST_ERR; } + else { + err = [aClient enterIdentity:info]; + } + if (err) { + [KerberosAgentListener didEnterIdentity:info error:err]; + } +} + +// select +- (void) selectIdentity: (NSDictionary *) info +{ + kim_error err = KIM_NO_ERROR; + IPCClient *aClient = nil; + + // get client object for matching info, creating if it doesn't exist + aClient = [self clientForInfo:info]; + if (!aClient) { err = KIM_IDENTITY_NOT_IN_LIST_ERR; } + else { + err = [aClient selectIdentity:info]; + } + if (err) { + [KerberosAgentListener didSelectIdentity:info error:err]; + } +} + +// auth +- (void) promptForAuth: (NSDictionary *) info +{ + kim_error err = KIM_NO_ERROR; + IPCClient *aClient = nil; + + aClient = [self clientForInfo:info]; + if (!aClient) { err = KIM_IDENTITY_NOT_IN_LIST_ERR; } + else { + err = [aClient promptForAuth:info]; + } +} + +// change password +- (void) changePassword: (NSDictionary *) info +{ + kim_error err = KIM_NO_ERROR; + IPCClient *aClient = nil; + + aClient = [self clientForInfo:info]; + if (!aClient) { err = KIM_IDENTITY_NOT_IN_LIST_ERR; } + else { + err = [aClient changePassword:info]; + } +} + +// error +- (void) handleError: (NSDictionary *) info +{ + kim_error err = KIM_NO_ERROR; + IPCClient *aClient = nil; + + aClient = [self clientForInfo:info]; + if (!aClient) { err = KIM_IDENTITY_NOT_IN_LIST_ERR; } + else { + err = [aClient handleError:info]; + } +} + +// fini +- (void) removeClient: (NSDictionary *) info +{ + kim_error err = KIM_NO_ERROR; + IPCClient *aClient = [self clientForInfo:info]; + + if (!aClient) { + err = KIM_IDENTITY_NOT_IN_LIST_ERR; + } else { + // close all windows associated with it + [aClient cleanup]; + [self.clients removeObject:aClient]; + if ([self.clients count] == 0) { + // the client removes itself after select identity, + // but might come back shortly afterward in need of an auth prompt + autoQuitTimer = [NSTimer scheduledTimerWithTimeInterval:SECONDS_BEFORE_AUTO_QUIT_ON_NO_CLIENTS + target:self + selector:@selector(quitIfIdle:) + userInfo:nil + repeats:NO]; + } + } + + // called after user finishes prompt + [KerberosAgentListener didRemoveClient:info error:err]; + [info release]; } @end diff --git a/src/kim/agent/mac/KerberosAgentListener.h b/src/kim/agent/mac/KerberosAgentListener.h new file mode 100644 index 0000000000..f58ce3324d --- /dev/null +++ b/src/kim/agent/mac/KerberosAgentListener.h @@ -0,0 +1,91 @@ +// +// KerberosAgentListener.h +// Kerberos5 +// +// Created by Justin Anderson on 9/28/08. +// Copyright 2008 MIT. All rights reserved. +// + +#import <Cocoa/Cocoa.h> +#import <Kerberos/kim.h> + +#define kCheckinMessage 100 + +@interface KerberosAgentListener : NSObject { + NSThread *thread; +} + +@property (readwrite, retain) NSThread *thread; + ++ (KerberosAgentListener *) sharedListener; + ++ (void) startListening; + +- (void) threadMain; + ++ (void) addClientWithPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port + name: (kim_string) name + path: (kim_string) path; + +// contains reply_port ++ (void) didAddClient: (NSDictionary *) info + error: (int32_t) error; + ++ (void) enterIdentityWithClientPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port; + +// contains reply_port, kim_identity ++ (void) didEnterIdentity: (NSDictionary *) info + error: (int32_t) error; + ++ (void) selectIdentityWithClientPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port + hints: (kim_selection_hints) hints; + +// contains reply_port, kim_identity ++ (void) didSelectIdentity: (NSDictionary *) info + error: (int32_t) error; + ++ (void) promptForAuthWithClientPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port + identity: (kim_string) identity_string + promptType: (uint32_t) prompt_type + allowSave: (kim_boolean) allow_save + hideReply: (kim_boolean) hide_reply + title: (kim_string) title + message: (kim_string) message + description: (kim_string) description; + +// contains reply_port, (string) prompt_response ++ (void) didPromptForAuth: (NSDictionary *) info + error: (int32_t) error; + ++ (void) changePasswordWithClientPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port + identity: (kim_string) identity_string + expired: (kim_boolean) expired; + +// contains reply_port, old password, new password, verify password ++ (void) didChangePassword: (NSDictionary *) info + error: (int32_t) error; + ++ (void) handleErrorWithClientPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port + identity: (kim_string) identity_string + error: (kim_error) error + message: (kim_string) message + description: (kim_string) description; + +// contains reply_port ++ (void) didHandleError: (NSDictionary *) info + error: (int32_t) error; + + ++ (void) removeClientMatchingPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port; + ++ (void) didRemoveClient: (NSDictionary *)info + error: (int32_t) error; + +@end diff --git a/src/kim/agent/mac/KerberosAgentListener.m b/src/kim/agent/mac/KerberosAgentListener.m new file mode 100644 index 0000000000..f765997269 --- /dev/null +++ b/src/kim/agent/mac/KerberosAgentListener.m @@ -0,0 +1,316 @@ +// +// KerberosAgentListener.m +// Kerberos5 +// +// Created by Justin Anderson on 9/28/08. +// Copyright 2008 MIT. All rights reserved. +// + +#import "KerberosAgentListener.h" +#import "KIMUtilities.h" +#import "ServerDemux.h" +#import "IPCClient.h" + +@implementation KerberosAgentListener + +@synthesize thread; + +- (id) init +{ + self = [super init]; + if (self != nil) { + self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadMain) object:nil]; + } + return self; +} + +static KerberosAgentListener *sharedListener = nil; + ++ (KerberosAgentListener *) sharedListener +{ + @synchronized(self) { + if (sharedListener == nil) { + [[self alloc] init]; // assignment not done here + } + } + return sharedListener; +} + ++ (id)allocWithZone:(NSZone *)zone +{ + @synchronized(self) { + if (sharedListener == nil) { + sharedListener = [super allocWithZone:zone]; + return sharedListener; // assignment and return on first allocation + } + } + return nil; //on subsequent allocation attempts return nil +} + +- (id)copyWithZone:(NSZone *)zone +{ + return self; +} + +- (id)retain +{ + return self; +} + +- (unsigned)retainCount +{ + return UINT_MAX; //denotes an object that cannot be released +} + +- (void)release +{ + //do nothing +} + +- (id)autorelease +{ + return self; +} + +#pragma mark Thread management + +// called from main thread to start listen thread ++ (void) startListening +{ +// NSLog(@"%s %@ thread", __FUNCTION__, ([NSThread isMainThread]) ? @"main" : @"not main"); + + [[KerberosAgentListener sharedListener].thread start]; +} + +- (void) threadMain +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + int32_t err = 0; + +// NSLog(@"%s starting up", __FUNCTION__); + + while (!err && ![self.thread isCancelled]) { + err = kim_agent_listen_loop(); + if (!err) { +// NSLog (@"%s loop resetting %@", __FUNCTION__, [[NSThread currentThread] description]); + } else { + NSLog (@"%s got error %d (%@) %@", __FUNCTION__, err, [KIMUtilities stringForLastKIMError:err], [[NSThread currentThread] description]); + err = 0; /* The server quit unexpectedly -- just try again */ + } + sleep(10); + } + + [pool release]; +} + +#pragma mark IPC handlers + ++ (void) addClientWithPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port + name: (kim_string) name + path: (kim_string) path +{ + NSDictionary *info = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSNumber numberWithInteger:client_port], @"client_port", + [NSNumber numberWithInteger:reply_port], @"reply_port", + [NSString stringWithUTF8String:name], @"name", + [NSString stringWithUTF8String:path], @"path", + nil]; + [[NSApp delegate] performSelectorOnMainThread:@selector(addClient:) + withObject:info + waitUntilDone:NO]; +} + ++ (void) didAddClient: (NSDictionary *) info + error: (kim_error) error +{ + kim_error err = KIM_NO_ERROR; + mach_port_t reply_port = [[info objectForKey:@"reply_port"] integerValue]; + err = kim_handle_reply_init(reply_port, error); +} + ++ (void) enterIdentityWithClientPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port +{ + NSDictionary *info = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSNumber numberWithInteger:client_port], @"client_port", + [NSNumber numberWithInteger:reply_port], @"reply_port", + nil]; + [[NSApp delegate] performSelectorOnMainThread:@selector(enterIdentity:) + withObject:info + waitUntilDone:NO]; +} + +// contains reply_port, identity_string ++ (void) didEnterIdentity: (NSDictionary *) info + error: (kim_error) error +{ + kim_error err = KIM_NO_ERROR; + mach_port_t reply_port = [[info objectForKey:@"reply_port"] integerValue]; + kim_identity identity = NULL; + + if (!err) { + err = kim_identity_create_from_string(&identity, [[info objectForKey:@"identity_string"] UTF8String]); + } + + err = kim_handle_reply_enter_identity(reply_port, identity, error); +} + ++ (void) selectIdentityWithClientPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port + hints: (kim_selection_hints) hints +{ + kim_error err = KIM_NO_ERROR; + kim_selection_hints new_hints = NULL; + NSDictionary *info = nil; + + // new hints will be freed by main thread + err = kim_selection_hints_copy(&new_hints, hints); + + info = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSNumber numberWithInteger:client_port], @"client_port", + [NSNumber numberWithInteger:reply_port], @"reply_port", + [NSValue valueWithPointer:new_hints], @"hints", + nil]; + + [[NSApp delegate] performSelectorOnMainThread:@selector(selectIdentity:) + withObject:info + waitUntilDone:NO]; +} + +// contains reply_port, identity_string ++ (void) didSelectIdentity: (NSDictionary *) info + error: (int32_t) error +{ + kim_error err = KIM_NO_ERROR; + NSNumber *portNumber = [info objectForKey:@"reply_port"]; + NSString *identityString = [info objectForKey:@"identity_string"]; + mach_port_t reply_port = [portNumber integerValue]; + kim_identity identity = NULL; + kim_identity_create_from_string(&identity, (identityString) ? [identityString UTF8String] : ""); + + err = kim_handle_reply_select_identity(reply_port, identity, error); +} + ++ (void) promptForAuthWithClientPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port + identity: (kim_string) identity_string + promptType: (uint32_t) prompt_type + allowSave: (kim_boolean) allow_save + hideReply: (kim_boolean) hide_reply + title: (kim_string) title + message: (kim_string) message + description: (kim_string) description +{ + NSDictionary *info = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSNumber numberWithInteger:client_port], @"client_port", + [NSNumber numberWithInteger:reply_port], @"reply_port", + [NSString stringWithUTF8String:identity_string], @"identity_string", + [NSNumber numberWithUnsignedInt:prompt_type], @"prompt_type", + [NSNumber numberWithBool:allow_save], @"allow_save", + [NSNumber numberWithBool:hide_reply], @"hide_reply", + [NSString stringWithUTF8String:title], @"title", + [NSString stringWithUTF8String:message], @"message", + [NSString stringWithUTF8String:description], @"description", + nil]; + [[NSApp delegate] performSelectorOnMainThread:@selector(promptForAuth:) + withObject:info + waitUntilDone:NO]; +} + +// contains reply_port, (string) prompt_response ++ (void) didPromptForAuth: (NSDictionary *) info + error: (int32_t) error +{ + kim_error err = KIM_NO_ERROR; + mach_port_t reply_port = [[info objectForKey:@"reply_port"] integerValue]; + kim_string prompt_response = [[info objectForKey:@"prompt_response"] UTF8String]; + kim_boolean save_response = [[info objectForKey:@"save_response"] boolValue]; + + err = kim_handle_reply_auth_prompt(reply_port, prompt_response, save_response, error); +} + ++ (void) changePasswordWithClientPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port + identity: (kim_string) identity_string + expired: (kim_boolean) expired +{ + NSDictionary *info = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSNumber numberWithInteger:client_port], @"client_port", + [NSNumber numberWithInteger:reply_port], @"reply_port", + [NSString stringWithUTF8String:identity_string], @"identity_string", + [NSNumber numberWithBool:expired], @"expired", + nil]; + [[NSApp delegate] performSelectorOnMainThread:@selector(changePassword:) + withObject:info + waitUntilDone:NO]; +} + +// contains reply_port, old password, new password, verify password ++ (void) didChangePassword: (NSDictionary *) info + error: (int32_t) error +{ + kim_error err = KIM_NO_ERROR; + mach_port_t reply_port = [[info objectForKey:@"reply_port"] integerValue]; + kim_string old_pw = [[info objectForKey:@"old_password"] UTF8String]; + kim_string new_pw = [[info objectForKey:@"new_password"] UTF8String]; + kim_string verify_pw = [[info objectForKey:@"verify_password"] UTF8String]; + + err = kim_handle_reply_change_password(reply_port, old_pw, new_pw, verify_pw, error); +} + ++ (void) handleErrorWithClientPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port + identity: (kim_string) identity_string + error: (kim_error) error + message: (kim_string) message + description: (kim_string) description +{ + NSDictionary *info = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSNumber numberWithInteger:client_port], @"client_port", + [NSNumber numberWithInteger:reply_port], @"reply_port", + [NSString stringWithUTF8String:identity_string], @"identity_string", + [NSNumber numberWithUnsignedInt:error], @"error", + [NSString stringWithUTF8String:message], @"message", + [NSString stringWithUTF8String:description], @"description", + nil]; + [[NSApp delegate] performSelectorOnMainThread:@selector(handleError:) + withObject:info + waitUntilDone:NO]; + +} + +// contains reply_port ++ (void) didHandleError: (NSDictionary *) info + error: (int32_t) error +{ + kim_error err = KIM_NO_ERROR; + mach_port_t reply_port = [[info objectForKey:@"reply_port"] integerValue]; + + err = kim_handle_reply_handle_error(reply_port, error); +} + ++ (void) removeClientMatchingPort: (mach_port_t) client_port + replyPort: (mach_port_t) reply_port +{ + NSDictionary *info = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSNumber numberWithInteger:client_port], @"client_port", + [NSNumber numberWithInteger:reply_port], @"reply_port", + nil]; + [[NSApp delegate] performSelectorOnMainThread:@selector(removeClient:) + withObject:info + waitUntilDone:NO]; +} + +// contains reply_port ++ (void) didRemoveClient: (NSDictionary *)info + error: (int32_t) error +{ + kim_error err = KIM_NO_ERROR; + mach_port_t reply_port = [[info objectForKey:@"reply_port"] integerValue]; + if (reply_port) { + err = kim_handle_reply_fini(reply_port, error); + } +} + +@end diff --git a/src/kim/agent/mac/SelectIdentityController.h b/src/kim/agent/mac/SelectIdentityController.h index 01bcd92287..2251d2773e 100644 --- a/src/kim/agent/mac/SelectIdentityController.h +++ b/src/kim/agent/mac/SelectIdentityController.h @@ -26,8 +26,11 @@ #import "BadgedImageView.h" #import "Identities.h" -@interface SelectIdentityController : NSWindowController { +@class IPCClient; +@interface SelectIdentityController : NSWindowController { + IPCClient *associatedClient; + IBOutlet NSObjectController *identitiesController; IBOutlet NSArrayController *identityArrayController; @@ -49,8 +52,12 @@ IBOutlet NSObjectController *identityOptionsController; IBOutlet NSTextField *nameField; IBOutlet NSTextField *realmField; + + IBOutlet NSButton *ticketOptionsOkButton; } +@property (readwrite, retain) IPCClient *associatedClient; + - (IBAction) newIdentity: (id) sender; - (IBAction) addToFavorites: (id) sender; - (IBAction) removeFromFavorites: (id) sender; @@ -63,14 +70,12 @@ - (IBAction) select: (id) sender; - (IBAction) cancel: (id) sender; -- (int) runWindow; +- (void)controlTextDidChange:(NSNotification *)aNotification; + - (void) showOptions: (NSString *) contextInfo; - (void) didEndSheet: (NSWindow *) sheet returnCode: (int) returnCode contextInfo: (void *) contextInfo; - (void) saveOptions; -- (void) reloadData; -- (void) refreshTable; - - (void) timedRefresh:(NSTimer *)timer; @end diff --git a/src/kim/agent/mac/SelectIdentityController.m b/src/kim/agent/mac/SelectIdentityController.m index e70189d68e..897e0dcc76 100644 --- a/src/kim/agent/mac/SelectIdentityController.m +++ b/src/kim/agent/mac/SelectIdentityController.m @@ -23,22 +23,19 @@ */ #import "SelectIdentityController.h" +#import "IPCClient.h" #define identities_key_path @"identities" @implementation SelectIdentityController +@synthesize associatedClient; + // --------------------------------------------------------------------------- - (id) initWithWindowNibName: (NSString *) windowNibName { if ((self = [super initWithWindowNibName: windowNibName])) { - identities = [[Identities alloc] init]; - [identities addObserver:self - forKeyPath:identities_key_path - options:NSKeyValueObservingOptionNew - context:@"selectIdentityController"]; - refreshTimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(timedRefresh:) userInfo:nil repeats:true]; } return self; @@ -56,7 +53,6 @@ - (void) dealloc { [refreshTimer release]; - [identities removeObserver:self forKeyPath:identities_key_path]; [identities release]; [super dealloc]; } @@ -65,20 +61,36 @@ - (void) awakeFromNib { - [headerTextField setStringValue: @"Some header text"]; - [identityTableView setDoubleAction:@selector(select:)]; -} + NSString *key = nil; + NSString *message = nil; -// --------------------------------------------------------------------------- + // We need to float over the loginwindow and SecurityAgent so use its hardcoded level. + [[self window] center]; + [[self window] setLevel:2003]; -- (void) windowDidLoad -{ - [explanationTextField setStringValue: @"Some explanation text"]; + [identityTableView setDoubleAction:@selector(select:)]; + identities = [[Identities alloc] init]; [identitiesController setContent:identities]; -} + refreshTimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(timedRefresh:) userInfo:nil repeats:true]; + + [kerberosIconImageView setBadgePath:associatedClient.path]; + + if ([associatedClient.name isEqualToString:[[NSBundle mainBundle] bundlePath]]) { + key = @"SelectIdentityRequest"; + message = NSLocalizedStringFromTable(key, @"SelectIdentity", NULL); + } + else { + key = @"SelectIdentityApplicationRequest"; + message = [NSString stringWithFormat: + NSLocalizedStringFromTable(key, @"SelectIdentity", NULL), + associatedClient.name]; + } + [headerTextField setStringValue:message]; +} // --------------------------------------------------------------------------- + - (IBAction) newIdentity: (id) sender { Identity *newIdentity = [[Identity alloc] init]; @@ -87,7 +99,6 @@ identityOptionsController.content = newIdentity; [newIdentity release]; - NSLog(@"New identity %@", [newIdentity description]); [self showOptions:@"new"]; } @@ -97,7 +108,7 @@ { Identity *anIdentity = [identityArrayController.selectedObjects lastObject]; identityOptionsController.content = nil; - NSLog(@"Add %@ to favorites", [anIdentity description]); + anIdentity.favorite = TRUE; [self saveOptions]; @@ -109,7 +120,7 @@ { Identity *anIdentity = [identityArrayController.selectedObjects lastObject]; identityOptionsController.content = anIdentity; - NSLog(@"Remove %@ from favorites", [anIdentity description]); + anIdentity.favorite = FALSE; [self saveOptions]; @@ -119,18 +130,22 @@ - (IBAction) select: (id) sender { + Identity *selectedIdentity = nil; + // ignore double-click on header if ([sender respondsToSelector:@selector(clickedRow)] && [sender clickedRow] < 0) { return; } - NSLog(@"Select identity: %@", identityArrayController.selectedObjects.description); + selectedIdentity = [[identityArrayController selectedObjects] lastObject]; + + [associatedClient didSelectIdentity: selectedIdentity.principalString]; } // --------------------------------------------------------------------------- - (IBAction) cancel: (id) sender { - NSLog(@"Cancel identity selection"); + [associatedClient didCancel]; } // --------------------------------------------------------------------------- @@ -176,21 +191,12 @@ [NSApp endSheet: identityOptionsWindow]; } -// --------------------------------------------------------------------------- - -- (int) runWindow +- (void)controlTextDidChange:(NSNotification *)aNotification { - //[[NSApp delegate] addActiveWindow: [self window]]; - //NSWindow *window = [self window]; - - //[window center]; - [self showWindow: self]; -// [NSApp run]; -// [self close]; - - //[[NSApp delegate] removeActiveWindow: [self window]]; - - return 0; + BOOL valid = [KIMUtilities validatePrincipalWithName:[nameField stringValue] + realm:[realmField stringValue]]; + [ticketOptionsOkButton setEnabled:valid]; + [ticketOptionsOkButton setNeedsDisplay]; } // --------------------------------------------------------------------------- @@ -219,9 +225,8 @@ Identity *newIdentity = identityOptionsController.content; err = [identities addIdentity:newIdentity]; -#warning Add validation to prevent the addition of existing principals and invalid principals if (err) { - NSLog(@"%s received error %@ trying to add identity %@", _cmd, [NSString stringForLastKIMError:err], [newIdentity description]); + NSLog(@"%s received error %@ trying to add identity %@", _cmd, [KIMUtilities stringForLastKIMError:err], [newIdentity description]); } [self saveOptions]; } @@ -258,52 +263,10 @@ // --------------------------------------------------------------------------- -- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if ([(NSString *) context isEqualToString:@"selectIdentityController"]) { - if ([keyPath isEqualToString:identities_key_path]) { -// [self reloadData]; - } - } - else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -// --------------------------------------------------------------------------- - -- (void) reloadData -{ - // Preserve selection - Identity *selectedIdentity = [[identityArrayController.selectedObjects lastObject] retain]; - NSUInteger a, b, c; - a = [identityArrayController selectionIndex]; - b = [[identityArrayController content] count]; - c = NSNotFound; - - NSLog(@"== updating table == %s", _cmd); - identityArrayController.content = identities.identities; - - c = [identityArrayController.content indexOfObject:selectedIdentity]; - if ([[identityArrayController content] count] >= a) - [identityArrayController setSelectionIndex:(c == NSNotFound) ? (a > b) ? b : a : c]; - - [selectedIdentity release]; -} - -// --------------------------------------------------------------------------- - -- (void) refreshTable -{ - [identityArrayController rearrangeObjects]; -} - -// --------------------------------------------------------------------------- - - (void) timedRefresh:(NSTimer *)timer { // refetch data to update expiration times - [self refreshTable]; + [identityArrayController rearrangeObjects]; } @end diff --git a/src/kim/agent/mac/ServerDemux.m b/src/kim/agent/mac/ServerDemux.m index ed4e73d1d6..b24011d74c 100644 --- a/src/kim/agent/mac/ServerDemux.m +++ b/src/kim/agent/mac/ServerDemux.m @@ -24,6 +24,7 @@ #import "ServerDemux.h" #import "kim_selection_hints_private.h" +#import "KerberosAgentListener.h" // --------------------------------------------------------------------------- @@ -91,10 +92,11 @@ static int32_t kim_handle_request_init (mach_port_t in_client_port, } if (!err) { -#warning Send init message to main thread with 2 ports, name and path - NSLog (@"Got init message with pid '%d', name '%s', path '%s'", - pid, name, path); - err = kim_handle_reply_init (in_reply_port, 0); + // performs selector on main thread + [KerberosAgentListener addClientWithPort:in_client_port + replyPort:in_reply_port + name:name + path:path]; } k5_ipc_stream_free_string (name); @@ -139,14 +141,9 @@ static int32_t kim_handle_request_enter_identity (mach_port_t in_client_port, int32_t err = 0; if (!err) { -#warning Send enter identity message to main thread with 2 ports - kim_identity identity = NULL; - NSLog (@"Got enter identity message"); - err = kim_identity_create_from_string (&identity, "nobody@TEST-KERBEROS-1.3.1"); - if (!err) { - err = kim_handle_reply_enter_identity (in_reply_port, identity, 0); - } - kim_identity_free (&identity); + // performs selector on main thread + [KerberosAgentListener enterIdentityWithClientPort:in_client_port + replyPort:in_reply_port]; } return err; @@ -162,7 +159,7 @@ int32_t kim_handle_reply_enter_identity (mach_port_t in_reply_port, k5_ipc_stream reply = NULL; kim_string identity_string = NULL; - if (!err) { + if (!err && !in_error) { err = kim_identity_get_string (in_identity, &identity_string); } @@ -198,21 +195,17 @@ static int32_t kim_handle_request_select_identity (mach_port_t in_client_port, { int32_t err = 0; kim_selection_hints hints = NULL; - + if (!err) { err = kim_selection_hints_create_from_stream (&hints, in_request_stream); } if (!err) { -#warning Send select identity message to main thread with 2 ports - kim_identity identity = NULL; - NSLog (@"Got select identity message"); - err = kim_identity_create_from_string (&identity, "nobody@TEST-KERBEROS-1.3.1"); - if (!err) { - err = kim_handle_reply_select_identity (in_reply_port, identity, 0); - } - kim_identity_free (&identity); + // performs selector on main thread + [KerberosAgentListener selectIdentityWithClientPort:in_client_port + replyPort:in_reply_port + hints:hints]; } kim_selection_hints_free (&hints); @@ -230,7 +223,7 @@ int32_t kim_handle_reply_select_identity (mach_port_t in_reply_port, k5_ipc_stream reply = NULL; kim_string identity_string = NULL; - if (!err) { + if (!err && !in_error) { err = kim_identity_get_string (in_identity, &identity_string); } @@ -302,10 +295,16 @@ static int32_t kim_handle_request_auth_prompt (mach_port_t in_client_port, } if (!err) { - NSLog (@"Got auth prompt with identity '%s', type '%d', allow_save_reply '%d', hide '%d', title '%s', message '%s', description '%s'", - identity_string, type, allow_save_reply, hide_reply, title, message, description); - err = kim_handle_reply_auth_prompt (in_reply_port, "ydobon", 0, 0); -#warning Send auth prompt message to main thread with 2 ports and arguments + // performs selector on main thread + [KerberosAgentListener promptForAuthWithClientPort:in_client_port + replyPort:in_reply_port + identity:identity_string + promptType:type + allowSave:allow_save_reply + hideReply:hide_reply + title:title + message:message + description:description]; } k5_ipc_stream_free_string (identity_string); @@ -373,13 +372,11 @@ static int32_t kim_handle_request_change_password (mach_port_t in_client_port, } if (!err) { -#warning Send change password message to main thread with 2 ports and arguments - NSLog (@"Got change password with identity '%s', old_password_expired '%d'", - identity_string, old_password_expired); - err = kim_handle_reply_change_password (in_reply_port, - "ydobon", - "foo", - "bar", 0); + // performs selector on main thread + [KerberosAgentListener changePasswordWithClientPort:in_client_port + replyPort:in_reply_port + identity:identity_string + expired:old_password_expired]; } k5_ipc_stream_free_string (identity_string); @@ -458,10 +455,13 @@ static int32_t kim_handle_request_handle_error (mach_port_t in_client_port, } if (!err) { -#warning Send handle error message to main thread with 2 ports and arguments - NSLog (@"Got handle error with identity '%s', error '%d', message '%s', description '%s'", - identity_string, error, message, description); - err = kim_handle_reply_handle_error (in_reply_port, 0); + // performs selector on main thread + [KerberosAgentListener handleErrorWithClientPort:in_client_port + replyPort:in_reply_port + identity:identity_string + error:error + message:message + description:description]; } k5_ipc_stream_free_string (identity_string); @@ -505,12 +505,8 @@ static int32_t kim_handle_request_fini (mach_port_t in_client_port, k5_ipc_stream in_request_stream) { int32_t err = 0; - - if (!err) { -#warning Send fini message to main thread with 2 ports - NSLog (@"Got fini message"); - err = kim_handle_reply_fini (in_reply_port, 0); - } + + [KerberosAgentListener removeClientMatchingPort:in_client_port replyPort:in_reply_port]; return err; } @@ -564,7 +560,7 @@ int32_t k5_ipc_server_remove_client (mach_port_t in_client_port) if (!err) { /* Client exited. Main thread should check for windows belonging to * in_client_port and close any it finds. */ -#warning Insert code to handle client death here + [KerberosAgentListener removeClientMatchingPort:in_client_port replyPort:0]; } return err; diff --git a/src/kim/agent/mac/main.m b/src/kim/agent/mac/main.m index dec6940932..1e887a0037 100644 --- a/src/kim/agent/mac/main.m +++ b/src/kim/agent/mac/main.m @@ -1,27 +1,6 @@ #import <Cocoa/Cocoa.h> -#import "ServerDemux.h" -#import "k5_mig_server.h" -#include <Kerberos/kipc_server.h> -#include <syslog.h> - - -int main(int argc, const char *argv[]) +int main(int argc, char *argv[]) { - int err = 0; - NSAutoreleasePool *pool = NULL; - - openlog (argv[0], LOG_CONS | LOG_PID, LOG_AUTH); - syslog (LOG_INFO, "Starting up."); - - pool = [[NSAutoreleasePool alloc] init]; - - [NSApplication sharedApplication]; - [NSBundle loadNibNamed: @"MainMenu" owner: NSApp]; - - err = k5_ipc_server_listen_loop (); - - syslog (LOG_NOTICE, "Exiting: %s (%d)", kipc_error_string (err), err); - - return err; + return NSApplicationMain(argc, (const char **) argv); } diff --git a/src/kim/agent/mac/resources/English.lproj/Authentication.xib b/src/kim/agent/mac/resources/English.lproj/Authentication.xib index 67d1b41a75..6b2aad9cd0 100644 --- a/src/kim/agent/mac/resources/English.lproj/Authentication.xib +++ b/src/kim/agent/mac/resources/English.lproj/Authentication.xib @@ -2,14 +2,17 @@ <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02"> <data> <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9E17</string> - <string key="IBDocument.InterfaceBuilderVersion">670</string> - <string key="IBDocument.AppKitVersion">949.33</string> + <string key="IBDocument.SystemVersion">9F33</string> + <string key="IBDocument.InterfaceBuilderVersion">672</string> + <string key="IBDocument.AppKitVersion">949.34</string> <string key="IBDocument.HIToolboxVersion">352.00</string> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="20"/> <integer value="300157"/> + <integer value="300274"/> + <integer value="300193"/> + <integer value="20"/> + <integer value="300175"/> </object> <object class="NSArray" key="IBDocument.PluginDependencies"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -18,7 +21,7 @@ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000842439"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="NSCustomObject" id="262677138"> - <string key="NSClassName">NSApplication</string> + <string key="NSClassName">AuthenticationController</string> </object> <object class="NSCustomObject" id="553445653"> <string key="NSClassName">FirstResponder</string> @@ -26,6 +29,39 @@ <object class="NSCustomObject" id="714830734"> <string key="NSClassName">NSApplication</string> </object> + <object class="NSObjectController" id="57033499"> + <object class="NSMutableArray" key="NSDeclaredKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>username</string> + <string>realm</string> + <string>old_password</string> + <string>new_password</string> + <string>verify_password</string> + <string>title</string> + <string>message</string> + <string>description</string> + <string>allow_save_password</string> + <string>realm_history</string> + <string>should_save_password</string> + <string>isPrincipalValid</string> + <string>prompt_response</string> + <string>isPromptValid</string> + <string>isChangePasswordValid</string> + <string>save_response</string> + <string>allow_save</string> + <string>forwardable</string> + <string>addressless</string> + <string>renewable</string> + <string>valid_lifetime</string> + <string>renewal_lifetime</string> + <string>min_renewal_lifetime</string> + <string>max_renewal_lifetime</string> + <string>max_valid_lifetime</string> + <string>min_valid_lifetime</string> + </object> + <bool key="NSEditable">YES</bool> + <object class="_NSManagedProxy" key="_NSManagedProxy"/> + </object> <object class="NSCustomView" id="92892041"> <reference key="NSNextResponder"/> <int key="NSvFlags">274</int> @@ -33,8 +69,8 @@ <bool key="EncodedWithXMLCoder">YES</bool> <object class="NSTextField" id="498665267"> <reference key="NSNextResponder" ref="92892041"/> - <int key="NSvFlags">282</int> - <string key="NSFrame">{{101, 126}, {382, 40}}</string> + <int key="NSvFlags">264</int> + <string key="NSFrame">{{101, 126}, {382, 54}}</string> <reference key="NSSuperview" ref="92892041"/> <bool key="NSEnabled">YES</bool> <object class="NSTextFieldCell" key="NSCell" id="645367368"> @@ -143,7 +179,7 @@ <object class="NSMutableArray" key="NSTableColumns"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="NSTableColumn"> - <integer value="0" key="NSIdentifier"/> + <integer value="0" key="NSIdentifier" id="8"/> <double key="NSWidth">1.200000e+01</double> <double key="NSMinWidth">1.000000e+01</double> <double key="NSMaxWidth">1.000000e+03</double> @@ -264,54 +300,112 @@ <int key="NSPeriodicInterval">25</int> </object> </object> - <object class="NSButton" id="980345926"> + <object class="NSCustomView" id="1001544034"> <reference key="NSNextResponder" ref="92892041"/> - <int key="NSvFlags">292</int> - <string key="NSFrame">{{18, 16}, {51, 27}}</string> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{20, 126}, {64, 64}}</string> + <reference key="NSSuperview" ref="92892041"/> + <string key="NSClassName">BadgedImageView</string> + </object> + <object class="NSPopUpButton" id="1016187493"> + <reference key="NSNextResponder" ref="92892041"/> + <int key="NSvFlags">-2147483356</int> + <string key="NSFrame">{{20, 17}, {38, 26}}</string> <reference key="NSSuperview" ref="92892041"/> <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="432989262"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents"/> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.000000e+01</double> - <int key="NSfFlags">16</int> - </object> - <reference key="NSControlView" ref="980345926"/> - <int key="NSButtonFlags">-2033434369</int> - <int key="NSButtonFlags2">2</int> - <object class="NSCustomResource" key="NSNormalImage"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">Gear</string> - </object> + <object class="NSPopUpButtonCell" key="NSCell" id="690863814"> + <int key="NSCellFlags">-2076049856</int> + <int key="NSCellFlags2">134219776</int> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="1016187493"/> + <int key="NSButtonFlags">-2030944001</int> + <int key="NSButtonFlags2">34</int> <string key="NSAlternateContents"/> <string key="NSKeyEquivalent"/> <int key="NSPeriodicDelay">400</int> <int key="NSPeriodicInterval">75</int> + <object class="NSMenuItem" key="NSMenuItem" id="1020091532"> + <reference key="NSMenu" ref="594991555"/> + <bool key="NSIsHidden">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <int key="NSState">1</int> + <object class="NSCustomResource" key="NSImage"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSActionTemplate</string> + </object> + <object class="NSCustomResource" key="NSOnImage" id="530784694"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuCheckmark</string> + </object> + <object class="NSCustomResource" key="NSMixedImage" id="790891323"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuMixedState</string> + </object> + <string key="NSAction">_popUpItemAction:</string> + <reference key="NSTarget" ref="690863814"/> + </object> + <bool key="NSMenuItemRespectAlignment">YES</bool> + <object class="NSMenu" key="NSMenu" id="594991555"> + <string key="NSTitle">OtherViews</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1020091532"/> + <object class="NSMenuItem" id="452996455"> + <reference key="NSMenu" ref="594991555"/> + <string type="base64-UTF8" key="NSTitle">VGlja2V0IE9wdGlvbnPigKY</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 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> + <bool key="NSPullDown">YES</bool> + <int key="NSPreferredEdge">1</int> + <bool key="NSUsesItemFromMenu">YES</bool> + <bool key="NSAltersState">YES</bool> + <int key="NSArrowPosition">2</int> </object> </object> - <object class="NSCustomView" id="1001544034"> - <reference key="NSNextResponder" ref="92892041"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 126}, {64, 64}}</string> - <reference key="NSSuperview" ref="92892041"/> - <string key="NSClassName">BadgedImageView</string> - </object> </object> <string key="NSFrameSize">{500, 210}</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> <object class="NSTextField" id="225475172"> <reference key="NSNextResponder" ref="866582848"/> - <int key="NSvFlags">290</int> + <int key="NSvFlags">266</int> <string key="NSFrame">{{104, 82}, {376, 22}}</string> <reference key="NSSuperview" ref="866582848"/> <bool key="NSEnabled">YES</bool> @@ -370,7 +464,7 @@ </object> <object class="NSTextField" id="464070473"> <reference key="NSNextResponder" ref="866582848"/> - <int key="NSvFlags">282</int> + <int key="NSvFlags">266</int> <string key="NSFrame">{{101, 126}, {382, 41}}</string> <reference key="NSSuperview" ref="866582848"/> <bool key="NSEnabled">YES</bool> @@ -386,7 +480,7 @@ </object> <object class="NSTextField" id="427167925"> <reference key="NSNextResponder" ref="866582848"/> - <int key="NSvFlags">292</int> + <int key="NSvFlags">268</int> <string key="NSFrame">{{17, 84}, {80, 17}}</string> <reference key="NSSuperview" ref="866582848"/> <bool key="NSEnabled">YES</bool> @@ -402,7 +496,7 @@ </object> <object class="NSButton" id="645528597"> <reference key="NSNextResponder" ref="866582848"/> - <int key="NSvFlags">294</int> + <int key="NSvFlags">290</int> <string key="NSFrame">{{102, 58}, {380, 18}}</string> <reference key="NSSuperview" ref="866582848"/> <bool key="NSEnabled">YES</bool> @@ -414,11 +508,11 @@ <reference key="NSControlView" ref="645528597"/> <int key="NSButtonFlags">1211912703</int> <int key="NSButtonFlags2">130</int> - <object class="NSCustomResource" key="NSNormalImage"> + <object class="NSCustomResource" key="NSNormalImage" id="375544883"> <string key="NSClassName">NSImage</string> <string key="NSResourceName">NSSwitch</string> </object> - <object class="NSButtonImageSource" key="NSAlternateImage"> + <object class="NSButtonImageSource" key="NSAlternateImage" id="875913500"> <string key="NSImageName">NSSwitch</string> </object> <string key="NSAlternateContents"/> @@ -436,10 +530,11 @@ </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> @@ -563,65 +658,25 @@ </object> </object> <string key="NSFrameSize">{500, 210}</string> + <reference key="NSSuperview"/> <string key="NSClassName">NSView</string> </object> <object class="NSCustomView" id="60326189"> - <nil key="NSNextResponder"/> - <int key="NSvFlags">268</int> + <reference key="NSNextResponder"/> + <int key="NSvFlags">286</int> <object class="NSMutableArray" key="NSSubviews"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="NSCustomView" id="1061510403"> <reference key="NSNextResponder" ref="60326189"/> <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 126}, {64, 64}}</string> + <string key="NSFrame">{{20, 146}, {64, 64}}</string> <reference key="NSSuperview" ref="60326189"/> <string key="NSClassName">BadgedImageView</string> </object> - <object class="NSButton" id="655431516"> - <reference key="NSNextResponder" ref="60326189"/> - <int key="NSvFlags">289</int> - <string key="NSFrame">{{404, 12}, {82, 32}}</string> - <reference key="NSSuperview" ref="60326189"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="544381563"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">Yes</string> - <reference key="NSSupport" ref="604532625"/> - <reference key="NSControlView" ref="655431516"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">1</int> - <reference key="NSAlternateImage" ref="604532625"/> - <string key="NSAlternateContents"/> - <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="331992464"> - <reference key="NSNextResponder" ref="60326189"/> - <int key="NSvFlags">289</int> - <string key="NSFrame">{{322, 12}, {82, 32}}</string> - <reference key="NSSuperview" ref="60326189"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="418342109"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">No</string> - <reference key="NSSupport" ref="604532625"/> - <reference key="NSControlView" ref="331992464"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> <object class="NSTextField" id="299103498"> <reference key="NSNextResponder" ref="60326189"/> <int key="NSvFlags">274</int> - <string key="NSFrame">{{101, 60}, {382, 76}}</string> + <string key="NSFrame">{{101, 146}, {382, 19}}</string> <reference key="NSSuperview" ref="60326189"/> <bool key="NSEnabled">YES</bool> <object class="NSTextFieldCell" key="NSCell" id="627916817"> @@ -640,7 +695,7 @@ <object class="NSTextField" id="1064523274"> <reference key="NSNextResponder" ref="60326189"/> <int key="NSvFlags">266</int> - <string key="NSFrame">{{101, 144}, {382, 17}}</string> + <string key="NSFrame">{{101, 173}, {382, 17}}</string> <reference key="NSSuperview" ref="60326189"/> <bool key="NSEnabled">YES</bool> <object class="NSTextFieldCell" key="NSCell" id="246958577"> @@ -653,8 +708,150 @@ <reference key="NSTextColor" ref="883746258"/> </object> </object> + <object class="NSTextField" id="441176528"> + <reference key="NSNextResponder" ref="60326189"/> + <int key="NSvFlags">290</int> + <string key="NSFrame">{{161, 116}, {319, 22}}</string> + <reference key="NSSuperview" ref="60326189"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="453153516"> + <int key="NSCellFlags">-1804468671</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="441176528"/> + <bool key="NSDrawsBackground">YES</bool> + <reference key="NSBackgroundColor" ref="490771653"/> + <reference key="NSTextColor" ref="955928389"/> + </object> + </object> + <object class="NSTextField" id="962648515"> + <reference key="NSNextResponder" ref="60326189"/> + <int key="NSvFlags">292</int> + <string key="NSFrame">{{62, 118}, {94, 17}}</string> + <reference key="NSSuperview" ref="60326189"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="678162638"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71304192</int> + <string key="NSContents">Old Password:</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="962648515"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSTextField" id="29184344"> + <reference key="NSNextResponder" ref="60326189"/> + <int key="NSvFlags">292</int> + <string key="NSFrame">{{57, 90}, {99, 17}}</string> + <reference key="NSSuperview" ref="60326189"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="698626122"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71304192</int> + <string key="NSContents">New Password:</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="29184344"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSTextField" id="255611063"> + <reference key="NSNextResponder" ref="60326189"/> + <int key="NSvFlags">292</int> + <string key="NSFrame">{{17, 62}, {139, 17}}</string> + <reference key="NSSuperview" ref="60326189"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="742145870"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71304192</int> + <string key="NSContents">Verify New Password:</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="255611063"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSTextField" id="158061"> + <reference key="NSNextResponder" ref="60326189"/> + <int key="NSvFlags">290</int> + <string key="NSFrame">{{161, 88}, {319, 22}}</string> + <reference key="NSSuperview" ref="60326189"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="899060580"> + <int key="NSCellFlags">-1804468671</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="158061"/> + <bool key="NSDrawsBackground">YES</bool> + <reference key="NSBackgroundColor" ref="490771653"/> + <reference key="NSTextColor" ref="955928389"/> + </object> + </object> + <object class="NSTextField" id="576133689"> + <reference key="NSNextResponder" ref="60326189"/> + <int key="NSvFlags">290</int> + <string key="NSFrame">{{161, 60}, {319, 22}}</string> + <reference key="NSSuperview" ref="60326189"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="696656312"> + <int key="NSCellFlags">-1804468671</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="576133689"/> + <bool key="NSDrawsBackground">YES</bool> + <reference key="NSBackgroundColor" ref="490771653"/> + <reference key="NSTextColor" ref="955928389"/> + </object> + </object> + <object class="NSButton" id="105446308"> + <reference key="NSNextResponder" ref="60326189"/> + <int key="NSvFlags">289</int> + <string key="NSFrame">{{388, 12}, {98, 32}}</string> + <reference key="NSSuperview" ref="60326189"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="676106072"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Continue</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="105446308"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">1</int> + <reference key="NSAlternateImage" ref="604532625"/> + <string key="NSAlternateContents"/> + <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSButton" id="288995352"> + <reference key="NSNextResponder" ref="60326189"/> + <int key="NSvFlags">289</int> + <string key="NSFrame">{{295, 12}, {93, 32}}</string> + <reference key="NSSuperview" ref="60326189"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="613041994"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Cancel</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="288995352"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">1</int> + <reference key="NSAlternateImage" ref="604532625"/> + <string key="NSAlternateContents"/> + <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> </object> - <string key="NSFrameSize">{500, 210}</string> + <string key="NSFrameSize">{500, 230}</string> + <reference key="NSSuperview"/> <string key="NSClassName">NSView</string> </object> <object class="NSCustomView" id="861423802"> @@ -725,32 +922,12 @@ <int key="NSPeriodicInterval">25</int> </object> </object> - <object class="NSButton" id="424661587"> - <reference key="NSNextResponder" ref="861423802"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{314, 12}, {90, 32}}</string> - <reference key="NSSuperview" ref="861423802"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="517774830"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">Cancel</string> - <reference key="NSSupport" ref="604532625"/> - <reference key="NSControlView" ref="424661587"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> </object> <string key="NSFrameSize">{500, 210}</string> <string key="NSClassName">NSView</string> </object> <object class="NSWindowTemplate" id="236877202"> - <int key="NSWindowStyleMask">13</int> + <int key="NSWindowStyleMask">5</int> <int key="NSWindowBacking">2</int> <string key="NSWindowRect">{{378, 236}, {500, 210}}</string> <int key="NSWTFlags">1886912512</int> @@ -774,56 +951,237 @@ <string key="NSMaxSize">{600, 422}</string> <string key="NSFrameAutosaveName"/> </object> - <object class="NSMenu" id="161772700"> - <string key="NSTitle">Menu</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="1064438280"> - <reference key="NSMenu" ref="161772700"/> - <string type="base64-UTF8" key="NSTitle">VGlja2V0IE9wdGlvbnPigKY</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <object class="NSCustomResource" key="NSOnImage" id="947702371"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSMenuCheckmark</string> - </object> - <object class="NSCustomResource" key="NSMixedImage" id="868037723"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSMenuMixedState</string> - </object> - </object> - <object class="NSMenuItem" id="466925177"> - <reference key="NSMenu" ref="161772700"/> - <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="947702371"/> - <reference key="NSMixedImage" ref="868037723"/> - </object> - <object class="NSMenuItem" id="278140056"> - <reference key="NSMenu" ref="161772700"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="947702371"/> - <reference key="NSMixedImage" ref="868037723"/> - </object> - <object class="NSMenuItem" id="738897734"> - <reference key="NSMenu" ref="161772700"/> - <string key="NSTitle">About Kerberos...</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="947702371"/> - <reference key="NSMixedImage" ref="868037723"/> - </object> - </object> - <string key="NSName"/> + <object class="NSWindowTemplate" id="102029948"> + <int key="NSWindowStyleMask">1</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{21, 50}, {430, 283}}</string> + <int key="NSWTFlags">1886912512</int> + <string key="NSWindowTitle">Kerberos Ticket Options</string> + <string key="NSWindowClass">NSWindow</string> + <object class="NSMutableString" key="NSViewClass"> + <characters key="NS.bytes">View</characters> + </object> + <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> + <string key="NSWindowContentMinSize">{430, 283}</string> + <object class="NSView" key="NSWindowView" id="389112266"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSSlider" id="486016405"> + <reference key="NSNextResponder" ref="389112266"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{38, 214}, {374, 25}}</string> + <reference key="NSSuperview" ref="389112266"/> + <bool key="NSEnabled">YES</bool> + <object class="NSSliderCell" key="NSCell" id="624979516"> + <int key="NSCellFlags">67501824</int> + <int key="NSCellFlags2">0</int> + <object class="NSMutableString" key="NSContents"> + <characters key="NS.bytes"/> + </object> + <object class="NSFont" key="NSSupport" id="784855171"> + <string key="NSName">Helvetica</string> + <double key="NSSize">1.200000e+01</double> + <int key="NSfFlags">16</int> + </object> + <reference key="NSControlView" ref="486016405"/> + <double key="NSMaxValue">1.000000e+02</double> + <double key="NSMinValue">0.000000e+00</double> + <double key="NSValue">0.000000e+00</double> + <double key="NSAltIncValue">0.000000e+00</double> + <int key="NSNumberOfTickMarks">11</int> + <int key="NSTickMarkPosition">0</int> + <bool key="NSAllowsTickMarkValuesOnly">NO</bool> + <bool key="NSVertical">NO</bool> + </object> + </object> + <object class="NSTextField" id="318596865"> + <reference key="NSNextResponder" ref="389112266"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{17, 246}, {396, 17}}</string> + <reference key="NSSuperview" ref="389112266"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="254246330"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">4194304</int> + <string key="NSContents">Get tickets that are valid for:</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="318596865"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSTextField" id="523287828"> + <reference key="NSNextResponder" ref="389112266"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{37, 192}, {376, 14}}</string> + <reference key="NSSuperview" ref="389112266"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="175033886"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">4325376</int> + <string key="NSContents">10 hours</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="523287828"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSSlider" id="594182616"> + <reference key="NSNextResponder" ref="389112266"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{37, 82}, {375, 25}}</string> + <reference key="NSSuperview" ref="389112266"/> + <bool key="NSEnabled">YES</bool> + <object class="NSSliderCell" key="NSCell" id="734223932"> + <int key="NSCellFlags">67501824</int> + <int key="NSCellFlags2">0</int> + <object class="NSMutableString" key="NSContents"> + <characters key="NS.bytes"/> + </object> + <reference key="NSSupport" ref="784855171"/> + <reference key="NSControlView" ref="594182616"/> + <double key="NSMaxValue">1.000000e+05</double> + <double key="NSMinValue">0.000000e+00</double> + <double key="NSValue">0.000000e+00</double> + <double key="NSAltIncValue">0.000000e+00</double> + <int key="NSNumberOfTickMarks">11</int> + <int key="NSTickMarkPosition">0</int> + <bool key="NSAllowsTickMarkValuesOnly">NO</bool> + <bool key="NSVertical">NO</bool> + </object> + </object> + <object class="NSButton" id="198913348"> + <reference key="NSNextResponder" ref="389112266"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{18, 134}, {394, 18}}</string> + <reference key="NSSuperview" ref="389112266"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="452074655"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Get tickets without IP addresses (NAT mode)</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="198913348"/> + <int key="NSButtonFlags">1211912703</int> + <int key="NSButtonFlags2">2</int> + <reference key="NSNormalImage" ref="375544883"/> + <reference key="NSAlternateImage" ref="875913500"/> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSButton" id="964499406"> + <reference key="NSNextResponder" ref="389112266"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{18, 156}, {394, 18}}</string> + <reference key="NSSuperview" ref="389112266"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="873232825"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Get tickets that can be forwarded to other computers</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="964499406"/> + <int key="NSButtonFlags">1211912703</int> + <int key="NSButtonFlags2">2</int> + <reference key="NSNormalImage" ref="375544883"/> + <reference key="NSAlternateImage" ref="875913500"/> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSButton" id="368169141"> + <reference key="NSNextResponder" ref="389112266"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{18, 112}, {394, 18}}</string> + <reference key="NSSuperview" ref="389112266"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="535311584"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Get tickets that can be renewed for:</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="368169141"/> + <int key="NSButtonFlags">1211912703</int> + <int key="NSButtonFlags2">2</int> + <reference key="NSNormalImage" ref="375544883"/> + <reference key="NSAlternateImage" ref="875913500"/> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSTextField" id="332956369"> + <reference key="NSNextResponder" ref="389112266"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{36, 60}, {377, 14}}</string> + <reference key="NSSuperview" ref="389112266"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="931635862"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">4325376</int> + <string key="NSContents">7 days</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="332956369"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSButton" id="681646907"> + <reference key="NSNextResponder" ref="389112266"/> + <int key="NSvFlags">256</int> + <string key="NSFrame">{{334, 12}, {82, 32}}</string> + <reference key="NSSuperview" ref="389112266"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="88378654"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">OK</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="681646907"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">1</int> + <reference key="NSAlternateImage" ref="604532625"/> + <string key="NSAlternateContents"/> + <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSButton" id="284195308"> + <reference key="NSNextResponder" ref="389112266"/> + <int key="NSvFlags">256</int> + <string key="NSFrame">{{252, 12}, {82, 32}}</string> + <reference key="NSSuperview" ref="389112266"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="12024755"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Cancel</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="284195308"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">1</int> + <reference key="NSAlternateImage" ref="604532625"/> + <string key="NSAlternateContents"/> + <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + </object> + <string key="NSFrameSize">{430, 283}</string> + </object> + <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string> + <string key="NSMinSize">{430, 305}</string> + <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> </object> </object> <object class="IBObjectContainer" key="IBDocument.Objects"> @@ -847,19 +1205,848 @@ </object> <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> - <string key="label">menu</string> - <reference key="source" ref="980345926"/> - <reference key="destination" ref="161772700"/> + <string key="label">identityView</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="92892041"/> + </object> + <int key="connectionID">300295</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">passwordView</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="866582848"/> + </object> + <int key="connectionID">300296</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">samView</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="898191415"/> + </object> + <int key="connectionID">300297</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">expiredPasswordView</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="60326189"/> + </object> + <int key="connectionID">300298</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.message</string> + <reference key="source" ref="464070473"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="464070473"/> + <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">300301</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.message</string> + <reference key="source" ref="1024084044"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="1024084044"/> + <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">300303</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.description</string> + <reference key="source" ref="860880966"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="860880966"/> + <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">300304</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">glueController</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="57033499"/> + </object> + <int key="connectionID">300326</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">window</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="236877202"/> + </object> + <int key="connectionID">300339</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">contentValues: selection.realm_history</string> + <reference key="source" ref="529434335"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector" id="756729013"> + <reference key="NSSource" ref="529434335"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">contentValues: selection.realm_history</string> + <string key="NSBinding">contentValues</string> + <string key="NSKeyPath">selection.realm_history</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300342</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.message</string> + <reference key="source" ref="498665267"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="498665267"/> + <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">300344</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">enterIdentity:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="207178735"/> + </object> + <int key="connectionID">300347</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">cancel:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="523041784"/> + </object> + <int key="connectionID">300348</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.username</string> + <reference key="source" ref="409092758"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="409092758"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.username</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.username</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSContinuouslyUpdatesValue</string> + <integer value="1" key="NS.object.0" id="9"/> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300349</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.realm</string> + <reference key="source" ref="529434335"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="529434335"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.realm</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.realm</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSContinuouslyUpdatesValue</string> + <reference key="NS.object.0" ref="9"/> + </object> + <reference key="NSPreviousConnector" ref="756729013"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300350</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">enabled: selection.isPrincipalValid</string> + <reference key="source" ref="207178735"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="207178735"/> + <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">300351</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">usernameField</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="409092758"/> + </object> + <int key="connectionID">300352</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">enterBadge</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="1001544034"/> + </object> + <int key="connectionID">300353</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">passwordField</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="225475172"/> + </object> + <int key="connectionID">300354</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">cancel:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="494687042"/> + </object> + <int key="connectionID">300359</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">passwordBadge</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="775546934"/> + </object> + <int key="connectionID">300360</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">answerAuthPrompt:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="133507311"/> + </object> + <int key="connectionID">300361</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">rememberPasswordInKeychainCheckBox</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="645528597"/> + </object> + <int key="connectionID">300364</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">enabled: selection.isPromptValid</string> + <reference key="source" ref="133507311"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="133507311"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">enabled: selection.isPromptValid</string> + <string key="NSBinding">enabled</string> + <string key="NSKeyPath">selection.isPromptValid</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300365</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.prompt_response</string> + <reference key="source" ref="225475172"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="225475172"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.prompt_response</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.prompt_response</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSContinuouslyUpdatesValue</string> + <reference key="NS.object.0" ref="9"/> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300368</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">samBadge</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="944021079"/> + </object> + <int key="connectionID">300369</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">samPromptField</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="270897371"/> + </object> + <int key="connectionID">300370</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">answerAuthPrompt:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="499090485"/> + </object> + <int key="connectionID">300371</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">cancel:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="907069022"/> + </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> + <reference key="source" ref="270897371"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="270897371"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.prompt_response</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.prompt_response</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSContinuouslyUpdatesValue</string> + <reference key="NS.object.0" ref="9"/> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300377</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">enabled: selection.isPromptValid</string> + <reference key="source" ref="499090485"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="499090485"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">enabled: selection.isPromptValid</string> + <string key="NSBinding">enabled</string> + <string key="NSKeyPath">selection.isPromptValid</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300378</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">errorView</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="861423802"/> + </object> + <int key="connectionID">300379</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">errorBadge</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="41252477"/> </object> - <int key="connectionID">300259</int> + <int key="connectionID">300380</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">showedError:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="432972501"/> + </object> + <int key="connectionID">300381</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">changePasswordView</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="60326189"/> + </object> + <int key="connectionID">300382</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">changePasswordBadge</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="1061510403"/> + </object> + <int key="connectionID">300383</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">changePassword:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="105446308"/> + </object> + <int key="connectionID">300403</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">cancel:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="288995352"/> + </object> + <int key="connectionID">300404</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.message</string> + <reference key="source" ref="1064523274"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="1064523274"/> + <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">300405</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.description</string> + <reference key="source" ref="299103498"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="299103498"/> + <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">300406</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">oldPasswordField</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="441176528"/> + </object> + <int key="connectionID">300407</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">nextKeyView</string> + <reference key="source" ref="441176528"/> + <reference key="destination" ref="158061"/> + </object> + <int key="connectionID">300408</int> </object> <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> - <string key="label">menu</string> - <reference key="source" ref="432989262"/> - <reference key="destination" ref="161772700"/> + <string key="label">nextKeyView</string> + <reference key="source" ref="158061"/> + <reference key="destination" ref="576133689"/> </object> - <int key="connectionID">300261</int> + <int key="connectionID">300409</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">nextKeyView</string> + <reference key="source" ref="576133689"/> + <reference key="destination" ref="441176528"/> + </object> + <int key="connectionID">300410</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">enabled: selection.isChangePasswordValid</string> + <reference key="source" ref="105446308"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="105446308"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">enabled: selection.isChangePasswordValid</string> + <string key="NSBinding">enabled</string> + <string key="NSKeyPath">selection.isChangePasswordValid</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300411</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.old_password</string> + <reference key="source" ref="441176528"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="441176528"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.old_password</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.old_password</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSContinuouslyUpdatesValue</string> + <reference key="NS.object.0" ref="9"/> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300412</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.new_password</string> + <reference key="source" ref="158061"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="158061"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.new_password</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.new_password</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSContinuouslyUpdatesValue</string> + <reference key="NS.object.0" ref="9"/> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300413</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.verify_password</string> + <reference key="source" ref="576133689"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="576133689"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.verify_password</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.verify_password</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSContinuouslyUpdatesValue</string> + <reference key="NS.object.0" ref="9"/> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300414</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">containerView</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="632526042"/> + </object> + <int key="connectionID">300415</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.save_response</string> + <reference key="source" ref="645528597"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="645528597"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.save_response</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.save_response</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300416</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">hidden: selection.allow_save</string> + <reference key="source" ref="645528597"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="645528597"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">hidden: selection.allow_save</string> + <string key="NSBinding">hidden</string> + <string key="NSKeyPath">selection.allow_save</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSValueTransformerName</string> + <string key="NS.object.0">NSNegateBoolean</string> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300417</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">takeObjectValueFrom:</string> + <reference key="source" ref="332956369"/> + <reference key="destination" ref="594182616"/> + </object> + <int key="connectionID">300441</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">takeObjectValueFrom:</string> + <reference key="source" ref="523287828"/> + <reference key="destination" ref="486016405"/> + </object> + <int key="connectionID">300442</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="523287828"/> + <reference key="destination" ref="486016405"/> + </object> + <int key="connectionID">300443</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="332956369"/> + <reference key="destination" ref="594182616"/> + </object> + <int key="connectionID">300444</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.forwardable</string> + <reference key="source" ref="964499406"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="964499406"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.forwardable</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.forwardable</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300445</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.addressless</string> + <reference key="source" ref="198913348"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="198913348"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.addressless</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.addressless</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300446</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.renewable</string> + <reference key="source" ref="368169141"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="368169141"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.renewable</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.renewable</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300447</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">enabled: selection.renewable</string> + <reference key="source" ref="594182616"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="594182616"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">enabled: selection.renewable</string> + <string key="NSBinding">enabled</string> + <string key="NSKeyPath">selection.renewable</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300450</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">maxValue: selection.max_renewal_lifetime</string> + <reference key="source" ref="594182616"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector" id="970138044"> + <reference key="NSSource" ref="594182616"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">maxValue: selection.max_renewal_lifetime</string> + <string key="NSBinding">maxValue</string> + <string key="NSKeyPath">selection.max_renewal_lifetime</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300453</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">minValue: selection.min_renewal_lifetime</string> + <reference key="source" ref="594182616"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector" id="564091763"> + <reference key="NSSource" ref="594182616"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">minValue: selection.min_renewal_lifetime</string> + <string key="NSBinding">minValue</string> + <string key="NSKeyPath">selection.min_renewal_lifetime</string> + <reference key="NSPreviousConnector" ref="970138044"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300454</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.renewal_lifetime</string> + <reference key="source" ref="594182616"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="594182616"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.renewal_lifetime</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.renewal_lifetime</string> + <reference key="NSPreviousConnector" ref="564091763"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300455</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">maxValue: selection.max_valid_lifetime</string> + <reference key="source" ref="486016405"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector" id="72846604"> + <reference key="NSSource" ref="486016405"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">maxValue: selection.max_valid_lifetime</string> + <string key="NSBinding">maxValue</string> + <string key="NSKeyPath">selection.max_valid_lifetime</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300456</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">minValue: selection.min_valid_lifetime</string> + <reference key="source" ref="486016405"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector" id="337570750"> + <reference key="NSSource" ref="486016405"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">minValue: selection.min_valid_lifetime</string> + <string key="NSBinding">minValue</string> + <string key="NSKeyPath">selection.min_valid_lifetime</string> + <reference key="NSPreviousConnector" ref="72846604"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300458</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.valid_lifetime</string> + <reference key="source" ref="486016405"/> + <reference key="destination" ref="57033499"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="486016405"/> + <reference key="NSDestination" ref="57033499"/> + <string key="NSLabel">value: selection.valid_lifetime</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.valid_lifetime</string> + <reference key="NSPreviousConnector" ref="337570750"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300459</int> </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> @@ -910,52 +2097,19 @@ <string key="objectName">Application</string> </object> <object class="IBObjectRecord"> - <int key="objectID">300030</int> - <reference key="object" ref="161772700"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="738897734"/> - <reference ref="278140056"/> - <reference ref="466925177"/> - <reference ref="1064438280"/> - </object> - <reference key="parent" ref="0"/> - <string key="objectName">GearMenu</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">300031</int> - <reference key="object" ref="738897734"/> - <reference key="parent" ref="161772700"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">300032</int> - <reference key="object" ref="278140056"/> - <reference key="parent" ref="161772700"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">300033</int> - <reference key="object" ref="466925177"/> - <reference key="parent" ref="161772700"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">300034</int> - <reference key="object" ref="1064438280"/> - <reference key="parent" ref="161772700"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">300157</int> <reference key="object" ref="92892041"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> <reference ref="523041784"/> <reference ref="207178735"/> - <reference ref="980345926"/> <reference ref="238778309"/> <reference ref="409092758"/> <reference ref="930407441"/> <reference ref="1001544034"/> <reference ref="529434335"/> <reference ref="498665267"/> + <reference ref="1016187493"/> </object> <reference key="parent" ref="0"/> <string key="objectName">Enter Identity</string> @@ -979,15 +2133,6 @@ <reference key="parent" ref="92892041"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300164</int> - <reference key="object" ref="980345926"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="432989262"/> - </object> - <reference key="parent" ref="92892041"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">300162</int> <reference key="object" ref="238778309"/> <object class="NSMutableArray" key="children"> @@ -1063,11 +2208,6 @@ <reference key="parent" ref="238778309"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300166</int> - <reference key="object" ref="432989262"/> - <reference key="parent" ref="980345926"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">300167</int> <reference key="object" ref="563505192"/> <reference key="parent" ref="207178735"/> @@ -1292,23 +2432,20 @@ <reference key="object" ref="60326189"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="655431516"/> <reference ref="1061510403"/> <reference ref="1064523274"/> <reference ref="299103498"/> - <reference ref="331992464"/> + <reference ref="255611063"/> + <reference ref="962648515"/> + <reference ref="29184344"/> + <reference ref="441176528"/> + <reference ref="158061"/> + <reference ref="576133689"/> + <reference ref="105446308"/> + <reference ref="288995352"/> </object> <reference key="parent" ref="0"/> - <string key="objectName">Expired Password</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">300278</int> - <reference key="object" ref="655431516"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="544381563"/> - </object> - <reference key="parent" ref="60326189"/> + <string key="objectName">Change Password</string> </object> <object class="IBObjectRecord"> <int key="objectID">300275</int> @@ -1334,20 +2471,6 @@ <reference key="parent" ref="60326189"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300284</int> - <reference key="object" ref="331992464"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="418342109"/> - </object> - <reference key="parent" ref="60326189"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">300285</int> - <reference key="object" ref="418342109"/> - <reference key="parent" ref="331992464"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">300287</int> <reference key="object" ref="627916817"/> <reference key="parent" ref="299103498"/> @@ -1358,17 +2481,11 @@ <reference key="parent" ref="1064523274"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300281</int> - <reference key="object" ref="544381563"/> - <reference key="parent" ref="655431516"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">300211</int> <reference key="object" ref="861423802"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> <reference ref="860880966"/> - <reference ref="424661587"/> <reference ref="41252477"/> <reference ref="432972501"/> <reference ref="1024084044"/> @@ -1386,15 +2503,6 @@ <reference key="parent" ref="861423802"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300290</int> - <reference key="object" ref="424661587"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="517774830"/> - </object> - <reference key="parent" ref="861423802"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">300212</int> <reference key="object" ref="41252477"/> <reference key="parent" ref="861423802"/> @@ -1428,15 +2536,346 @@ <reference key="parent" ref="432972501"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300291</int> - <reference key="object" ref="517774830"/> - <reference key="parent" ref="424661587"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">300216</int> <reference key="object" ref="1060905079"/> <reference key="parent" ref="860880966"/> </object> + <object class="IBObjectRecord"> + <int key="objectID">300300</int> + <reference key="object" ref="57033499"/> + <reference key="parent" ref="0"/> + <string key="objectName">Glue Controller</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300312</int> + <reference key="object" ref="1016187493"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="690863814"/> + </object> + <reference key="parent" ref="92892041"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300313</int> + <reference key="object" ref="690863814"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="594991555"/> + </object> + <reference key="parent" ref="1016187493"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300314</int> + <reference key="object" ref="594991555"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1020091532"/> + <reference ref="8728780"/> + <reference ref="917012637"/> + <reference ref="452996455"/> + </object> + <reference key="parent" ref="690863814"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300316</int> + <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"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="453153516"/> + </object> + <reference key="parent" ref="60326189"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300385</int> + <reference key="object" ref="962648515"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="678162638"/> + </object> + <reference key="parent" ref="60326189"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300386</int> + <reference key="object" ref="678162638"/> + <reference key="parent" ref="962648515"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300387</int> + <reference key="object" ref="453153516"/> + <reference key="parent" ref="441176528"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300388</int> + <reference key="object" ref="29184344"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="698626122"/> + </object> + <reference key="parent" ref="60326189"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300389</int> + <reference key="object" ref="698626122"/> + <reference key="parent" ref="29184344"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300390</int> + <reference key="object" ref="255611063"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="742145870"/> + </object> + <reference key="parent" ref="60326189"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300391</int> + <reference key="object" ref="742145870"/> + <reference key="parent" ref="255611063"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300392</int> + <reference key="object" ref="158061"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="899060580"/> + </object> + <reference key="parent" ref="60326189"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300393</int> + <reference key="object" ref="899060580"/> + <reference key="parent" ref="158061"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300394</int> + <reference key="object" ref="576133689"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="696656312"/> + </object> + <reference key="parent" ref="60326189"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300395</int> + <reference key="object" ref="696656312"/> + <reference key="parent" ref="576133689"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300396</int> + <reference key="object" ref="105446308"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="676106072"/> + </object> + <reference key="parent" ref="60326189"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300397</int> + <reference key="object" ref="288995352"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="613041994"/> + </object> + <reference key="parent" ref="60326189"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300398</int> + <reference key="object" ref="613041994"/> + <reference key="parent" ref="288995352"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300399</int> + <reference key="object" ref="676106072"/> + <reference key="parent" ref="105446308"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300419</int> + <reference key="object" ref="102029948"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="389112266"/> + </object> + <reference key="parent" ref="0"/> + <string key="objectName">Options</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300420</int> + <reference key="object" ref="389112266"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="284195308"/> + <reference ref="681646907"/> + <reference ref="332956369"/> + <reference ref="368169141"/> + <reference ref="964499406"/> + <reference ref="198913348"/> + <reference ref="594182616"/> + <reference ref="523287828"/> + <reference ref="318596865"/> + <reference ref="486016405"/> + </object> + <reference key="parent" ref="102029948"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300421</int> + <reference key="object" ref="284195308"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="12024755"/> + </object> + <reference key="parent" ref="389112266"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300422</int> + <reference key="object" ref="681646907"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="88378654"/> + </object> + <reference key="parent" ref="389112266"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300423</int> + <reference key="object" ref="332956369"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="931635862"/> + </object> + <reference key="parent" ref="389112266"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300424</int> + <reference key="object" ref="368169141"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="535311584"/> + </object> + <reference key="parent" ref="389112266"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300425</int> + <reference key="object" ref="964499406"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="873232825"/> + </object> + <reference key="parent" ref="389112266"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300426</int> + <reference key="object" ref="198913348"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="452074655"/> + </object> + <reference key="parent" ref="389112266"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300427</int> + <reference key="object" ref="594182616"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="734223932"/> + </object> + <reference key="parent" ref="389112266"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300428</int> + <reference key="object" ref="523287828"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="175033886"/> + </object> + <reference key="parent" ref="389112266"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300429</int> + <reference key="object" ref="318596865"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="254246330"/> + </object> + <reference key="parent" ref="389112266"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300430</int> + <reference key="object" ref="486016405"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="624979516"/> + </object> + <reference key="parent" ref="389112266"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300431</int> + <reference key="object" ref="624979516"/> + <reference key="parent" ref="486016405"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300432</int> + <reference key="object" ref="254246330"/> + <reference key="parent" ref="318596865"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300433</int> + <reference key="object" ref="175033886"/> + <reference key="parent" ref="523287828"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300434</int> + <reference key="object" ref="734223932"/> + <reference key="parent" ref="594182616"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300435</int> + <reference key="object" ref="452074655"/> + <reference key="parent" ref="198913348"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300436</int> + <reference key="object" ref="873232825"/> + <reference key="parent" ref="964499406"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300437</int> + <reference key="object" ref="535311584"/> + <reference key="parent" ref="368169141"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300438</int> + <reference key="object" ref="931635862"/> + <reference key="parent" ref="332956369"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300439</int> + <reference key="object" ref="88378654"/> + <reference key="parent" ref="681646907"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300440</int> + <reference key="object" ref="12024755"/> + <reference key="parent" ref="284195308"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300464</int> + <reference key="object" ref="452996455"/> + <reference key="parent" ref="594991555"/> + </object> </object> </object> <object class="NSMutableDictionary" key="flattenedProperties"> @@ -1457,17 +2896,6 @@ <string>19.windowTemplate.minSize</string> <string>20.IBPluginDependency</string> <string>20.ImportedFromIB2</string> - <string>300030.IBEditorWindowLastContentRect</string> - <string>300030.IBPluginDependency</string> - <string>300030.ImportedFromIB2</string> - <string>300031.IBPluginDependency</string> - <string>300031.ImportedFromIB2</string> - <string>300032.IBPluginDependency</string> - <string>300032.ImportedFromIB2</string> - <string>300033.IBPluginDependency</string> - <string>300033.ImportedFromIB2</string> - <string>300034.IBPluginDependency</string> - <string>300034.ImportedFromIB2</string> <string>300157.IBEditorWindowLastContentRect</string> <string>300157.IBPluginDependency</string> <string>300158.IBPluginDependency</string> @@ -1482,9 +2910,6 @@ <string>300162.ImportedFromIB2</string> <string>300163.IBPluginDependency</string> <string>300163.ImportedFromIB2</string> - <string>300164.CustomClassName</string> - <string>300164.IBPluginDependency</string> - <string>300164.ImportedFromIB2</string> <string>300165.IBPluginDependency</string> <string>300175.IBEditorWindowLastContentRect</string> <string>300175.IBPluginDependency</string> @@ -1532,117 +2957,207 @@ <string>300274.IBEditorWindowLastContentRect</string> <string>300274.IBPluginDependency</string> <string>300275.IBPluginDependency</string> - <string>300278.IBPluginDependency</string> - <string>300278.ImportedFromIB2</string> - <string>300284.IBPluginDependency</string> - <string>300285.IBPluginDependency</string> <string>300286.IBPluginDependency</string> <string>300286.ImportedFromIB2</string> <string>300288.IBPluginDependency</string> <string>300288.ImportedFromIB2</string> - <string>300290.IBPluginDependency</string> - <string>300291.IBPluginDependency</string> + <string>300300.IBPluginDependency</string> + <string>300312.IBPluginDependency</string> + <string>300313.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>300385.IBPluginDependency</string> + <string>300386.IBPluginDependency</string> + <string>300388.IBPluginDependency</string> + <string>300389.IBPluginDependency</string> + <string>300390.IBPluginDependency</string> + <string>300391.IBPluginDependency</string> + <string>300392.CustomClassName</string> + <string>300392.IBPluginDependency</string> + <string>300392.ImportedFromIB2</string> + <string>300394.CustomClassName</string> + <string>300394.IBPluginDependency</string> + <string>300394.ImportedFromIB2</string> + <string>300396.IBPluginDependency</string> + <string>300396.ImportedFromIB2</string> + <string>300397.IBPluginDependency</string> + <string>300397.ImportedFromIB2</string> + <string>300419.IBEditorWindowLastContentRect</string> + <string>300419.IBPluginDependency</string> + <string>300419.IBWindowTemplateEditedContentRect</string> + <string>300419.ImportedFromIB2</string> + <string>300419.windowTemplate.hasMaxSize</string> + <string>300419.windowTemplate.hasMinSize</string> + <string>300419.windowTemplate.maxSize</string> + <string>300419.windowTemplate.minSize</string> + <string>300420.IBPluginDependency</string> + <string>300420.ImportedFromIB2</string> + <string>300421.IBPluginDependency</string> + <string>300421.ImportedFromIB2</string> + <string>300422.IBPluginDependency</string> + <string>300422.ImportedFromIB2</string> + <string>300423.IBPluginDependency</string> + <string>300423.ImportedFromIB2</string> + <string>300424.IBPluginDependency</string> + <string>300424.ImportedFromIB2</string> + <string>300425.IBPluginDependency</string> + <string>300425.ImportedFromIB2</string> + <string>300426.IBPluginDependency</string> + <string>300426.ImportedFromIB2</string> + <string>300427.IBPluginDependency</string> + <string>300427.ImportedFromIB2</string> + <string>300428.IBPluginDependency</string> + <string>300428.ImportedFromIB2</string> + <string>300429.IBPluginDependency</string> + <string>300429.ImportedFromIB2</string> + <string>300430.IBPluginDependency</string> + <string>300430.ImportedFromIB2</string> + <string>300464.IBPluginDependency</string> </object> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{696, 646}, {500, 210}}</string> + <string>{{628, 646}, {500, 210}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{696, 646}, {500, 210}}</string> - <integer value="1" id="5"/> - <reference ref="5"/> + <string>{{628, 646}, {500, 210}}</string> + <reference ref="9"/> + <reference ref="9"/> <string>{{932, 664}, {484, 199}}</string> - <reference ref="5"/> - <reference ref="5"/> + <reference ref="9"/> + <reference ref="9"/> <string>{600, 400}</string> <string>{484, 199}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> - <string>{{557, 1049}, {203, 73}}</string> + <reference ref="9"/> + <string>{{602, 432}, {500, 210}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{477, 611}, {500, 210}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>NSSecureTextField</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> - <string>{{602, 364}, {500, 210}}</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> - <string>PopupButton</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <string>{{628, 163}, {500, 210}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{547, 453}, {500, 210}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> <string>NSSecureTextField</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <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>{{557, 743}, {500, 210}}</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>{{512, 496}, {500, 230}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{611, 402}, {176, 73}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> <string>NSSecureTextField</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>NSSecureTextField</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{546, 628}, {500, 210}}</string> + <reference ref="9"/> + <string>NSSecureTextField</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> + <string>{{579, 449}, {430, 283}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <string>{{579, 449}, {430, 283}}</string> + <reference ref="9"/> + <reference ref="8"/> + <reference ref="9"/> + <string>{3.40282e+38, 3.40282e+38}</string> + <string>{430, 283}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> - <string>{{619, 442}, {500, 210}}</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> </object> </object> @@ -1666,42 +3181,94 @@ </object> </object> <nil key="sourceID"/> - <int key="maxID">300293</int> + <int key="maxID">300467</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="IBPartialClassDescription"> - <string key="className">BadgedImageView</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">../Sources/kim/agent/mac/BadgedImageView.h</string> + <string key="className">AuthenticationController</string> + <string key="superclassName">NSWindowController</string> + <object class="NSMutableDictionary" key="actions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMutableArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>answerAuthPrompt:</string> + <string>cancel:</string> + <string>changePassword:</string> + <string>enterIdentity:</string> + <string>showedError:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + </object> + </object> + <object class="NSMutableDictionary" key="outlets"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMutableArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>changePasswordBadge</string> + <string>changePasswordView</string> + <string>containerView</string> + <string>enterBadge</string> + <string>errorBadge</string> + <string>errorView</string> + <string>expiredPasswordView</string> + <string>glueController</string> + <string>identityView</string> + <string>oldPasswordField</string> + <string>passwordBadge</string> + <string>passwordField</string> + <string>passwordView</string> + <string>rememberPasswordInKeychainCheckBox</string> + <string>samBadge</string> + <string>samPromptField</string> + <string>samView</string> + <string>usernameField</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>BadgedImageView</string> + <string>NSView</string> + <string>NSView</string> + <string>BadgedImageView</string> + <string>BadgedImageView</string> + <string>NSView</string> + <string>NSView</string> + <string>NSObjectController</string> + <string>NSView</string> + <string>NSTextField</string> + <string>BadgedImageView</string> + <string>NSTextField</string> + <string>NSView</string> + <string>NSButton</string> + <string>BadgedImageView</string> + <string>NSTextField</string> + <string>NSView</string> + <string>NSTextField</string> + </object> </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">FirstResponder</string> - <string key="superclassName">NSObject</string> <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBUserSource</string> - <string key="minorKey"/> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">../Sources/kim/agent/mac/AuthenticationController.h</string> </object> </object> <object class="IBPartialClassDescription"> - <string key="className">PopupButton</string> - <string key="superclassName">NSButton</string> + <string key="className">BadgedImageView</string> + <string key="superclassName">NSView</string> <object class="IBClassDescriptionSource" key="sourceIdentifier"> <string key="majorKey">IBProjectSource</string> - <string key="minorKey">../Sources/kim/agent/mac/PopupButton.h</string> + <string key="minorKey">../Sources/kim/agent/mac/BadgedImageView.h</string> </object> </object> <object class="IBPartialClassDescription"> - <string key="className">PopupButton</string> - <string key="superclassName">NSButton</string> - <object class="NSMutableDictionary" key="outlets"> - <string key="NS.key.0">popupMenu</string> - <string key="NS.object.0">NSMenu</string> - </object> + <string key="className">FirstResponder</string> + <string key="superclassName">NSObject</string> <object class="IBClassDescriptionSource" key="sourceIdentifier"> <string key="majorKey">IBUserSource</string> <string key="minorKey"/> diff --git a/src/kim/agent/mac/resources/English.lproj/AuthenticationController.strings b/src/kim/agent/mac/resources/English.lproj/AuthenticationController.strings Binary files differnew file mode 100644 index 0000000000..fc0f2f711a --- /dev/null +++ b/src/kim/agent/mac/resources/English.lproj/AuthenticationController.strings diff --git a/src/kim/agent/mac/resources/English.lproj/MainMenu.xib b/src/kim/agent/mac/resources/English.lproj/MainMenu.xib index da6d9efed3..f56ab63372 100644 --- a/src/kim/agent/mac/resources/English.lproj/MainMenu.xib +++ b/src/kim/agent/mac/resources/English.lproj/MainMenu.xib @@ -2,12 +2,13 @@ <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02"> <data> <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9E17</string> - <string key="IBDocument.InterfaceBuilderVersion">670</string> - <string key="IBDocument.AppKitVersion">949.33</string> + <string key="IBDocument.SystemVersion">9F33</string> + <string key="IBDocument.InterfaceBuilderVersion">672</string> + <string key="IBDocument.AppKitVersion">949.34</string> <string key="IBDocument.HIToolboxVersion">352.00</string> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> + <integer value="57"/> </object> <object class="NSArray" key="IBDocument.PluginDependencies"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -57,114 +58,6 @@ <reference key="NSOnImage" ref="42192827"/> <reference key="NSMixedImage" ref="708750045"/> </object> - <object class="NSMenuItem" id="941049996"> - <reference key="NSMenu" ref="980333367"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="42192827"/> - <reference key="NSMixedImage" ref="708750045"/> - </object> - <object class="NSMenuItem" id="885473566"> - <reference key="NSMenu" ref="980333367"/> - <string type="base64-UTF8" key="NSTitle">UHJlZmVyZW5jZXPigKY</string> - <string key="NSKeyEquiv">,</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="42192827"/> - <reference key="NSMixedImage" ref="708750045"/> - </object> - <object class="NSMenuItem" id="773057625"> - <reference key="NSMenu" ref="980333367"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="42192827"/> - <reference key="NSMixedImage" ref="708750045"/> - </object> - <object class="NSMenuItem" id="701559942"> - <reference key="NSMenu" ref="980333367"/> - <string key="NSTitle">Services</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="42192827"/> - <reference key="NSMixedImage" ref="708750045"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="297859549"> - <object class="NSMutableString" key="NSTitle"> - <characters key="NS.bytes">Services</characters> - </object> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <string key="NSName">_NSServicesMenu</string> - </object> - </object> - <object class="NSMenuItem" id="2694966"> - <reference key="NSMenu" ref="980333367"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="42192827"/> - <reference key="NSMixedImage" ref="708750045"/> - </object> - <object class="NSMenuItem" id="329699580"> - <reference key="NSMenu" ref="980333367"/> - <string key="NSTitle">Hide KerberosAgent</string> - <string key="NSKeyEquiv">h</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="42192827"/> - <reference key="NSMixedImage" ref="708750045"/> - </object> - <object class="NSMenuItem" id="844777333"> - <reference key="NSMenu" ref="980333367"/> - <string key="NSTitle">Hide Others</string> - <string key="NSKeyEquiv">h</string> - <int key="NSKeyEquivModMask">1572864</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="42192827"/> - <reference key="NSMixedImage" ref="708750045"/> - </object> - <object class="NSMenuItem" id="110892548"> - <reference key="NSMenu" ref="980333367"/> - <string key="NSTitle">Show All</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="42192827"/> - <reference key="NSMixedImage" ref="708750045"/> - </object> - <object class="NSMenuItem" id="354292100"> - <reference key="NSMenu" ref="980333367"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="42192827"/> - <reference key="NSMixedImage" ref="708750045"/> - </object> - <object class="NSMenuItem" id="10506244"> - <reference key="NSMenu" ref="980333367"/> - <string key="NSTitle">Quit KerberosAgent</string> - <string key="NSKeyEquiv">q</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="42192827"/> - <reference key="NSMixedImage" ref="708750045"/> - </object> </object> <string key="NSName">_NSAppleMenu</string> </object> @@ -389,14 +282,6 @@ </object> <object class="IBConnectionRecord"> <object class="IBActionConnection" key="connection"> - <string key="label">terminate:</string> - <reference key="source" ref="58791012"/> - <reference key="destination" ref="10506244"/> - </object> - <int key="connectionID">139</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> <string key="label">orderFrontStandardAboutPanel:</string> <reference key="source" ref="58791012"/> <reference key="destination" ref="104201360"/> @@ -405,30 +290,6 @@ </object> <object class="IBConnectionRecord"> <object class="IBActionConnection" key="connection"> - <string key="label">hideOtherApplications:</string> - <reference key="source" ref="58791012"/> - <reference key="destination" ref="844777333"/> - </object> - <int key="connectionID">146</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">hide:</string> - <reference key="source" ref="58791012"/> - <reference key="destination" ref="329699580"/> - </object> - <int key="connectionID">152</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">unhideAllApplications:</string> - <reference key="source" ref="58791012"/> - <reference key="destination" ref="110892548"/> - </object> - <int key="connectionID">153</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> <string key="label">cut:</string> <reference key="source" ref="506161835"/> <reference key="destination" ref="644214546"/> @@ -523,6 +384,14 @@ </object> <int key="connectionID">300448</int> </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="364998124"/> + <reference key="destination" ref="620802461"/> + </object> + <int key="connectionID">300468</int> + </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> <object class="NSArray" key="orderedObjects"> @@ -622,16 +491,6 @@ <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> <reference ref="104201360"/> - <reference ref="885473566"/> - <reference ref="701559942"/> - <reference ref="329699580"/> - <reference ref="10506244"/> - <reference ref="773057625"/> - <reference ref="2694966"/> - <reference ref="844777333"/> - <reference ref="354292100"/> - <reference ref="110892548"/> - <reference ref="941049996"/> </object> <reference key="parent" ref="946093663"/> </object> @@ -641,65 +500,6 @@ <reference key="parent" ref="980333367"/> </object> <object class="IBObjectRecord"> - <int key="objectID">129</int> - <reference key="object" ref="885473566"/> - <reference key="parent" ref="980333367"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">131</int> - <reference key="object" ref="701559942"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="297859549"/> - </object> - <reference key="parent" ref="980333367"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">130</int> - <reference key="object" ref="297859549"/> - <reference key="parent" ref="701559942"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">134</int> - <reference key="object" ref="329699580"/> - <reference key="parent" ref="980333367"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">136</int> - <reference key="object" ref="10506244"/> - <reference key="parent" ref="980333367"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">143</int> - <reference key="object" ref="773057625"/> - <reference key="parent" ref="980333367"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">144</int> - <reference key="object" ref="2694966"/> - <reference key="parent" ref="980333367"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">145</int> - <reference key="object" ref="844777333"/> - <reference key="parent" ref="980333367"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">149</int> - <reference key="object" ref="354292100"/> - <reference key="parent" ref="980333367"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">150</int> - <reference key="object" ref="110892548"/> - <reference key="parent" ref="980333367"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">202</int> - <reference key="object" ref="941049996"/> - <reference key="parent" ref="980333367"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">103</int> <reference key="object" ref="608222506"/> <object class="NSMutableArray" key="children"> @@ -819,26 +619,6 @@ <string>106.editorWindowContentRectSynchronizationRect</string> <string>111.IBPluginDependency</string> <string>111.ImportedFromIB2</string> - <string>129.IBPluginDependency</string> - <string>129.ImportedFromIB2</string> - <string>130.IBPluginDependency</string> - <string>130.ImportedFromIB2</string> - <string>131.IBPluginDependency</string> - <string>131.ImportedFromIB2</string> - <string>134.IBPluginDependency</string> - <string>134.ImportedFromIB2</string> - <string>136.IBPluginDependency</string> - <string>136.ImportedFromIB2</string> - <string>143.IBPluginDependency</string> - <string>143.ImportedFromIB2</string> - <string>144.IBPluginDependency</string> - <string>144.ImportedFromIB2</string> - <string>145.IBPluginDependency</string> - <string>145.ImportedFromIB2</string> - <string>149.IBPluginDependency</string> - <string>149.ImportedFromIB2</string> - <string>150.IBPluginDependency</string> - <string>150.ImportedFromIB2</string> <string>156.IBPluginDependency</string> <string>156.ImportedFromIB2</string> <string>157.IBPluginDependency</string> @@ -851,6 +631,7 @@ <string>163.ImportedFromIB2</string> <string>164.IBPluginDependency</string> <string>164.ImportedFromIB2</string> + <string>169.IBEditorWindowLastContentRect</string> <string>169.IBPluginDependency</string> <string>169.ImportedFromIB2</string> <string>169.editorWindowContentRectSynchronizationRect</string> @@ -862,8 +643,6 @@ <string>173.ImportedFromIB2</string> <string>19.IBPluginDependency</string> <string>19.ImportedFromIB2</string> - <string>202.IBPluginDependency</string> - <string>202.ImportedFromIB2</string> <string>203.IBPluginDependency</string> <string>203.ImportedFromIB2</string> <string>210.IBPluginDependency</string> @@ -886,6 +665,7 @@ <string>5.ImportedFromIB2</string> <string>56.IBPluginDependency</string> <string>56.ImportedFromIB2</string> + <string>57.IBEditorWindowLastContentRect</string> <string>57.IBPluginDependency</string> <string>57.ImportedFromIB2</string> <string>57.editorWindowContentRectSynchronizationRect</string> @@ -915,26 +695,7 @@ <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <string>{{630, 563}, {253, 173}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> <string>{{1022, 430}, {253, 173}}</string> @@ -958,10 +719,8 @@ <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> <string>{{1066, 510}, {197, 93}}</string> - <string>{{492, 1079}, {314, 20}}</string> + <string>{{492, 736}, {314, 20}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> <string>{{884, 603}, {314, 20}}</string> @@ -970,6 +729,7 @@ <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> + <string>{{504, 713}, {202, 23}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> <string>{{896, 420}, {240, 183}}</string> @@ -997,7 +757,7 @@ </object> </object> <nil key="sourceID"/> - <int key="maxID">300448</int> + <int key="maxID">300484</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> @@ -1013,6 +773,10 @@ <object class="IBPartialClassDescription"> <string key="className">KerberosAgentController</string> <string key="superclassName">NSObject</string> + <object class="NSMutableDictionary" key="actions"> + <string key="NS.key.0">fakeANewClient:</string> + <string key="NS.object.0">id</string> + </object> <object class="IBClassDescriptionSource" key="sourceIdentifier"> <string key="majorKey">IBProjectSource</string> <string key="minorKey">../Sources/kim/agent/mac/KerberosAgentController.h</string> diff --git a/src/kim/agent/mac/resources/English.lproj/SelectIdentity.strings b/src/kim/agent/mac/resources/English.lproj/SelectIdentity.strings Binary files differnew file mode 100644 index 0000000000..6eb2109b23 --- /dev/null +++ b/src/kim/agent/mac/resources/English.lproj/SelectIdentity.strings diff --git a/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib b/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib index bf65e894d4..3a1fb160ef 100644 --- a/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib +++ b/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib @@ -8,8 +8,8 @@ <string key="IBDocument.HIToolboxVersion">352.00</string> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="300428"/> <integer value="300295"/> + <integer value="6"/> </object> <object class="NSArray" key="IBDocument.PluginDependencies"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -464,7 +464,6 @@ </object> </object> </object> - <int key="NSSelectedIndex">1</int> <bool key="NSPullDown">YES</bool> <int key="NSPreferredEdge">2</int> <bool key="NSUsesItemFromMenu">YES</bool> @@ -818,7 +817,7 @@ <reference key="NSSuperview" ref="1019868804"/> <bool key="NSEnabled">YES</bool> <object class="NSButtonCell" key="NSCell" id="870649207"> - <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags">604110336</int> <int key="NSCellFlags2">134217728</int> <string key="NSContents">OK</string> <reference key="NSSupport" ref="604532625"/> @@ -1653,6 +1652,30 @@ </object> <int key="connectionID">300455</int> </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">ticketOptionsOkButton</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="932240937"/> + </object> + <int key="connectionID">300459</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="623163777"/> + <reference key="destination" ref="262677138"/> + </object> + <int key="connectionID">300460</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="485004197"/> + <reference key="destination" ref="262677138"/> + </object> + <int key="connectionID">300461</int> + </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> <object class="NSArray" key="orderedObjects"> @@ -2373,10 +2396,10 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{360, 291}, {427, 378}}</string> + <string>{{553, 305}, {427, 378}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{360, 291}, {427, 378}}</string> - <integer value="0"/> + <string>{{553, 305}, {427, 378}}</string> + <reference ref="75542549"/> <reference ref="75542549"/> <string>{10000, 354}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> @@ -2464,7 +2487,7 @@ </object> </object> <nil key="sourceID"/> - <int key="maxID">300455</int> + <int key="maxID">300461</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> @@ -2547,6 +2570,7 @@ <string>nameField</string> <string>realmField</string> <string>selectIdentityButton</string> + <string>ticketOptionsOkButton</string> </object> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -2565,6 +2589,7 @@ <string>NSTextField</string> <string>NSTextField</string> <string>NSButton</string> + <string>NSButton</string> </object> </object> <object class="IBClassDescriptionSource" key="sourceIdentifier"> |