summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Anderson <jander@mit.edu>2008-10-01 20:38:26 +0000
committerJustin Anderson <jander@mit.edu>2008-10-01 20:38:26 +0000
commit2d42fe9100d1f1565cb1876ebe01340e5280b7fa (patch)
tree1818f316c5b8c1f822a22ef88fb0906683a18d3e
parent00729527c88c65b8179b762a111bef16926d6a97 (diff)
Update enterIdentity handler to support passing and setting ticket options.
Readded ticket options sheet to Enter Identity dialog. Added helper methods to convert between kim_option and NSDictionary. ticket: 6055 git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20797 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/kim/agent/mac/AuthenticationController.h16
-rw-r--r--src/kim/agent/mac/AuthenticationController.m95
-rw-r--r--src/kim/agent/mac/IPCClient.h2
-rw-r--r--src/kim/agent/mac/IPCClient.m3
-rw-r--r--src/kim/agent/mac/Identities.m3
-rw-r--r--src/kim/agent/mac/KIMUtilities.h14
-rw-r--r--src/kim/agent/mac/KIMUtilities.m179
-rw-r--r--src/kim/agent/mac/KerberosAgentListener.h3
-rw-r--r--src/kim/agent/mac/KerberosAgentListener.m26
-rw-r--r--src/kim/agent/mac/ServerDemux.m4
-rw-r--r--src/kim/agent/mac/resources/English.lproj/Authentication.xib311
11 files changed, 522 insertions, 134 deletions
diff --git a/src/kim/agent/mac/AuthenticationController.h b/src/kim/agent/mac/AuthenticationController.h
index 5fcb612c0..ed5d9d79a 100644
--- a/src/kim/agent/mac/AuthenticationController.h
+++ b/src/kim/agent/mac/AuthenticationController.h
@@ -54,6 +54,12 @@
IBOutlet NSButton *rememberPasswordInKeychainCheckBox;
IBOutlet NSObjectController *glueController;
+
+ IBOutlet NSWindow *ticketOptionsSheet;
+ IBOutlet NSObjectController *ticketOptionsController;
+
+ IBOutlet NSSlider *validLifetimeSlider;
+ IBOutlet NSSlider *renewableLifetimeSlider;
}
@property (readwrite, retain) IPCClient *associatedClient;
@@ -73,4 +79,14 @@
- (IBAction) changePassword: (id) sender;
- (IBAction) showedError: (id) sender;
+- (IBAction) sliderDidChange: (id) sender;
+
+- (IBAction) showTicketOptions: (id) sender;
+- (IBAction) cancelTicketOptions: (id) sender;
+- (IBAction) saveTicketOptions: (id) sender;
+
+- (void) sheetDidEnd: (NSWindow *) sheet
+ returnCode: (int) returnCode
+ contextInfo: (void *) contextInfo;
+
@end
diff --git a/src/kim/agent/mac/AuthenticationController.m b/src/kim/agent/mac/AuthenticationController.m
index 6a9b668bb..1756e5aab 100644
--- a/src/kim/agent/mac/AuthenticationController.m
+++ b/src/kim/agent/mac/AuthenticationController.m
@@ -72,17 +72,18 @@
#define enable_prompt_ok_keypath @"content.isPromptValid"
#define change_password_ok_keypath @"content.isChangePasswordValid"
+#define options_keypath @"content.options"
+
#define valid_lifetime_keypath @"content.valid_lifetime"
#define renewal_lifetime_keypath @"content.renewal_lifetime"
#define renewable_keypath @"content.renewable"
#define addressless_keypath @"content.addressless"
#define forwardable_keypath @"content.forwardable"
-#define 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 min_valid_keypath @"content.minValidLifetime"
+#define max_valid_keypath @"content.maxValidLifetime"
+#define min_renewable_keypath @"content.minRenewableLifetime"
+#define max_renewable_keypath @"content.maxRenewableLifetime"
#define ACKVOContext @"authenticationController"
@@ -109,6 +110,10 @@
- (void) awakeFromNib
{
+ [[self window] center];
+ // We need to float over the loginwindow and SecurityAgent so use its hardcoded level.
+ [[self window] setLevel:2003];
+
[glueController addObserver:self
forKeyPath:username_keypath
options:NSKeyValueObservingOptionNew
@@ -134,9 +139,6 @@
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
@@ -336,6 +338,79 @@
[self showWindow:nil];
}
+- (IBAction) sliderDidChange: (id) sender
+{
+ NSInteger increment = 0;
+ NSInteger newValue = 0;
+ NSString *keyPath = nil;
+ if ([sender isEqual:validLifetimeSlider]) {
+ increment = VALID_LIFETIME_INCREMENT;
+ keyPath = valid_lifetime_keypath;
+ }
+ else if ([sender isEqual:renewableLifetimeSlider]) {
+ increment = RENEWABLE_LIFETIME_INCREMENT;
+ keyPath = renewal_lifetime_keypath;
+ }
+ if (increment > 0) {
+ newValue = ([sender integerValue] / increment) * increment;
+ [ticketOptionsController setValue:[NSNumber numberWithInteger:newValue]
+ forKeyPath:keyPath];
+ }
+}
+
+- (IBAction) showTicketOptions: (id) sender
+{
+ // use a copy of the current options
+ [ticketOptionsController setContent:
+ [[[glueController valueForKeyPath:options_keypath] mutableCopy] autorelease]];
+
+ [ticketOptionsController setValue:[NSNumber numberWithInteger:[KIMUtilities minValidLifetime]]
+ forKeyPath:min_valid_keypath];
+ [ticketOptionsController setValue:[NSNumber numberWithInteger:[KIMUtilities maxValidLifetime]]
+ forKeyPath:max_valid_keypath];
+ [ticketOptionsController setValue:[NSNumber numberWithInteger:[KIMUtilities minRenewableLifetime]]
+ forKeyPath:min_renewable_keypath];
+ [ticketOptionsController setValue:[NSNumber numberWithInteger:[KIMUtilities maxRenewableLifetime]]
+ forKeyPath:max_renewable_keypath];
+
+ [validLifetimeSlider setIntegerValue:
+ [[ticketOptionsController valueForKeyPath:valid_lifetime_keypath] integerValue]];
+ [renewableLifetimeSlider setIntegerValue:
+ [[ticketOptionsController valueForKeyPath:renewal_lifetime_keypath] integerValue]];
+ [self sliderDidChange:validLifetimeSlider];
+ [self sliderDidChange:renewableLifetimeSlider];
+
+ [NSApp beginSheet:ticketOptionsSheet
+ modalForWindow:[self window]
+ modalDelegate:self
+ didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
+ contextInfo:NULL];
+}
+
+- (IBAction) cancelTicketOptions: (id) sender
+{
+ [NSApp endSheet:ticketOptionsSheet returnCode:NSUserCancelledError];
+}
+
+- (IBAction) saveTicketOptions: (id) sender
+{
+ [NSApp endSheet:ticketOptionsSheet];
+}
+
+- (void) sheetDidEnd: (NSWindow *) sheet
+ returnCode: (int) returnCode
+ contextInfo: (void *) contextInfo
+{
+ if (returnCode == NSUserCancelledError) {
+ // discard new options
+ [ticketOptionsController setContent:nil];
+ } else {
+ // replace existing options with new
+ [glueController setValue:[ticketOptionsController content] forKeyPath:options_keypath];
+ }
+ [ticketOptionsSheet orderOut:nil];
+}
+
- (IBAction) cancel: (id) sender
{
[associatedClient didCancel];
@@ -347,9 +422,11 @@
NSString *usernameString = [glueController valueForKeyPath:username_keypath];
NSString *realmString = [glueController valueForKeyPath:realm_keypath];
NSString *identityString = [NSString stringWithFormat:@"%@@%@", usernameString, realmString];
+ NSDictionary *options = [glueController valueForKeyPath:options_keypath];
+ NSLog(@"%s options == %@", __FUNCTION__, options);
// the principal must already be valid to get this far
- [associatedClient didEnterIdentity:identityString];
+ [associatedClient didEnterIdentity:identityString options:options];
}
- (IBAction) answerAuthPrompt: (id) sender
diff --git a/src/kim/agent/mac/IPCClient.h b/src/kim/agent/mac/IPCClient.h
index 531f7cbe4..6a0654e98 100644
--- a/src/kim/agent/mac/IPCClient.h
+++ b/src/kim/agent/mac/IPCClient.h
@@ -41,7 +41,7 @@
- (void) didCancel;
- (void) didSelectIdentity: (NSString *) identityString;
-- (void) didEnterIdentity: (NSString *) identityString;
+- (void) didEnterIdentity: (NSString *) identityString options: (NSDictionary *) options;
- (void) didPromptForAuth: (NSString *) responseString saveResponse: (NSNumber *) saveResponse;
- (void) didChangePassword: (NSString *) oldPassword
newPassword: (NSString *) newPassword
diff --git a/src/kim/agent/mac/IPCClient.m b/src/kim/agent/mac/IPCClient.m
index 4cb10fc27..c49e35d04 100644
--- a/src/kim/agent/mac/IPCClient.m
+++ b/src/kim/agent/mac/IPCClient.m
@@ -124,9 +124,10 @@ enum krb_agent_client_state {
return 0;
}
-- (void) didEnterIdentity: (NSString *) identityString
+- (void) didEnterIdentity: (NSString *) identityString options: (NSDictionary *) options
{
[self.currentInfo setObject:identityString forKey:@"identity_string"];
+ [self.currentInfo setObject:options forKey:@"options"];
[KerberosAgentListener didEnterIdentity:self.currentInfo error:0];
}
diff --git a/src/kim/agent/mac/Identities.m b/src/kim/agent/mac/Identities.m
index 5dcd32939..2ead4e5e8 100644
--- a/src/kim/agent/mac/Identities.m
+++ b/src/kim/agent/mac/Identities.m
@@ -25,9 +25,6 @@
#import "Identities.h"
#import <Kerberos/Kerberos.h>
-#define VALID_LIFETIME_INCREMENT (5 * 60)
-#define RENEWABLE_LIFETIME_INCREMENT (15 * 60)
-
@interface Identity ()
- (NSString *)stringForLifetime:(NSUInteger)lifetime;
diff --git a/src/kim/agent/mac/KIMUtilities.h b/src/kim/agent/mac/KIMUtilities.h
index 9b735b3e2..49871d9e6 100644
--- a/src/kim/agent/mac/KIMUtilities.h
+++ b/src/kim/agent/mac/KIMUtilities.h
@@ -9,9 +9,12 @@
#import <Cocoa/Cocoa.h>
#import <Kerberos/kim.h>
+#define VALID_LIFETIME_INCREMENT (5 * 60)
+#define RENEWABLE_LIFETIME_INCREMENT (15 * 60)
+
#define log_kim_error_to_console(err)\
{\
-NSLog(@"%s got error %@", _cmd, [KIMUtilities stringForLastKIMError:err]);\
+NSLog(@"%s got error %@", __FUNCTION__, [KIMUtilities stringForLastKIMError:err]);\
} while (0);
@interface KIMUtilities : NSObject
@@ -21,4 +24,13 @@ NSLog(@"%s got error %@", _cmd, [KIMUtilities stringForLastKIMError:err]);\
+ (BOOL) validatePrincipalWithName: (NSString *) name
realm: (NSString *) realm;
++ (NSDictionary *) dictionaryForKimOptions: (kim_options) options;
+
++ (kim_options) kimOptionsForDictionary: (NSDictionary *) aDict;
+
++ (NSUInteger)minValidLifetime;
++ (NSUInteger)maxValidLifetime;
++ (NSUInteger)minRenewableLifetime;
++ (NSUInteger)maxRenewableLifetime;
+
@end
diff --git a/src/kim/agent/mac/KIMUtilities.m b/src/kim/agent/mac/KIMUtilities.m
index 1326c137f..9319e676a 100644
--- a/src/kim/agent/mac/KIMUtilities.m
+++ b/src/kim/agent/mac/KIMUtilities.m
@@ -48,4 +48,183 @@
return (err == KIM_NO_ERROR);
}
++ (NSDictionary *) dictionaryForKimOptions: (kim_options) options
+{
+ kim_error err = KIM_NO_ERROR;
+ NSMutableDictionary *newDict = [NSMutableDictionary dictionaryWithCapacity:8];
+ kim_boolean addressless = FALSE;
+ kim_boolean forwardable = FALSE;
+ kim_boolean proxiable = FALSE;
+ kim_boolean renewable = FALSE;
+ kim_lifetime valid_lifetime = 0;
+ kim_lifetime renewal_lifetime = 0;
+ kim_string service_name = NULL;
+ kim_time start_time = 0;
+
+ if (!err) {
+ err = kim_options_get_addressless(options, &addressless);
+ }
+ if (!err) {
+ [newDict setValue:[NSNumber numberWithBool:addressless]
+ forKey:@"addressless"];
+ }
+ if (!err) {
+ err = kim_options_get_forwardable(options, &forwardable);
+ }
+ if (!err) {
+ [newDict setValue:[NSNumber numberWithBool:forwardable]
+ forKey:@"forwardable"];
+ }
+ if (!err) {
+ err = kim_options_get_proxiable(options, &proxiable);
+ }
+ if (!err) {
+ [newDict setValue:[NSNumber numberWithBool:proxiable]
+ forKey:@"proxiable"];
+ }
+ if (!err) {
+ err = kim_options_get_renewable(options, &renewable);
+ }
+ if (!err) {
+ [newDict setValue:[NSNumber numberWithBool:renewable]
+ forKey:@"renewable"];
+ }
+ if (!err) {
+ err = kim_options_get_lifetime(options, &valid_lifetime);
+ }
+ if (!err) {
+ [newDict setValue:[NSNumber numberWithInteger:valid_lifetime]
+ forKey:@"valid_lifetime"];
+ }
+ if (!err) {
+ err = kim_options_get_renewal_lifetime(options, &renewal_lifetime);
+ }
+ if (!err) {
+ [newDict setValue:[NSNumber numberWithInteger:renewal_lifetime]
+ forKey:@"renewal_lifetime"];
+ }
+ if (!err) {
+ err = kim_options_get_service_name(options, &service_name);
+ }
+ if (!err) {
+ [newDict setValue:(service_name) ?
+ [NSString stringWithUTF8String:service_name] : @""
+ forKey:@"service_name"];
+ }
+ if (!err) {
+ err = kim_options_get_start_time(options, &start_time);
+ }
+ if (!err) {
+ [newDict setValue:[NSNumber numberWithInteger:start_time]
+ forKey:@"start_time"];
+ }
+
+ return newDict;
+}
+
++ (kim_options) kimOptionsForDictionary: (NSDictionary *) aDict
+{
+ kim_error err = KIM_NO_ERROR;
+ kim_options options = NULL;
+ kim_boolean addressless = [[aDict valueForKey:@"addressless"] boolValue];
+ kim_boolean forwardable = [[aDict valueForKey:@"forwardable"] boolValue];
+ kim_boolean proxiable = [[aDict valueForKey:@"proxiable"] boolValue];
+ kim_boolean renewable = [[aDict valueForKey:@"renewable"] boolValue];
+ kim_lifetime valid_lifetime = [[aDict valueForKey:@"valid_lifetime"] integerValue];
+ kim_lifetime renewal_lifetime = [[aDict valueForKey:@"renewal_lifetime"] integerValue];
+ kim_string service_name = ([[aDict valueForKey:@"service_name"] length] > 0) ?
+ [[aDict valueForKey:@"service_name"] UTF8String] : NULL;
+ kim_time start_time = [[aDict valueForKey:@"start_time"] integerValue];
+
+ if (!err) {
+ err = kim_options_create (&options);
+ }
+ if (!err) {
+ err = kim_options_set_addressless(options, addressless);
+ }
+ if (!err) {
+ err = kim_options_set_forwardable(options, forwardable);
+ }
+ if (!err) {
+ err = kim_options_set_proxiable(options, proxiable);
+ }
+ if (!err) {
+ err = kim_options_set_renewable(options, renewable);
+ }
+ if (!err) {
+ err = kim_options_set_lifetime(options, valid_lifetime);
+ }
+ if (!err) {
+ err = kim_options_set_renewal_lifetime(options, renewal_lifetime);
+ }
+ if (!err) {
+ err = kim_options_set_service_name(options, service_name);
+ }
+ if (!err) {
+ err = kim_options_set_start_time(options, start_time);
+ }
+
+ return options;
+}
+
++ (NSUInteger)minValidLifetime
+{
+ kim_error err = KIM_NO_ERROR;
+ kim_preferences prefs = NULL;
+ kim_lifetime value = 0;
+
+ err = kim_preferences_create(&prefs);
+
+ if (!err) {
+ kim_preferences_get_minimum_lifetime(prefs, &value);
+ }
+
+ return (NSUInteger) value;
+}
+
++ (NSUInteger)maxValidLifetime
+{
+ kim_error err = KIM_NO_ERROR;
+ kim_preferences prefs = NULL;
+ kim_lifetime value = 0;
+
+ err = kim_preferences_create(&prefs);
+
+ if (!err) {
+ kim_preferences_get_maximum_lifetime(prefs, &value);
+ }
+
+ return (NSUInteger) value;
+}
+
++ (NSUInteger)minRenewableLifetime
+{
+ kim_error err = KIM_NO_ERROR;
+ kim_preferences prefs = NULL;
+ kim_lifetime value = 0;
+
+ err = kim_preferences_create(&prefs);
+
+ if (!err) {
+ kim_preferences_get_minimum_renewal_lifetime(prefs, &value);
+ }
+
+ return (NSUInteger) value;
+}
+
++ (NSUInteger)maxRenewableLifetime
+{
+ kim_error err = KIM_NO_ERROR;
+ kim_preferences prefs = NULL;
+ kim_lifetime value = 0;
+
+ err = kim_preferences_create(&prefs);
+
+ if (!err) {
+ kim_preferences_get_maximum_renewal_lifetime(prefs, &value);
+ }
+
+ return (NSUInteger) value;
+}
+
@end
diff --git a/src/kim/agent/mac/KerberosAgentListener.h b/src/kim/agent/mac/KerberosAgentListener.h
index f58ce3324..3c0fc8ee3 100644
--- a/src/kim/agent/mac/KerberosAgentListener.h
+++ b/src/kim/agent/mac/KerberosAgentListener.h
@@ -33,7 +33,8 @@
error: (int32_t) error;
+ (void) enterIdentityWithClientPort: (mach_port_t) client_port
- replyPort: (mach_port_t) reply_port;
+ replyPort: (mach_port_t) reply_port
+ options: (kim_options) options;
// contains reply_port, kim_identity
+ (void) didEnterIdentity: (NSDictionary *) info
diff --git a/src/kim/agent/mac/KerberosAgentListener.m b/src/kim/agent/mac/KerberosAgentListener.m
index cc634e2cf..fb87c02c3 100644
--- a/src/kim/agent/mac/KerberosAgentListener.m
+++ b/src/kim/agent/mac/KerberosAgentListener.m
@@ -131,10 +131,12 @@ static KerberosAgentListener *sharedListener = nil;
+ (void) enterIdentityWithClientPort: (mach_port_t) client_port
replyPort: (mach_port_t) reply_port
+ options: (kim_options) options
{
NSDictionary *info = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInteger:client_port], @"client_port",
[NSNumber numberWithInteger:reply_port], @"reply_port",
+ [KIMUtilities dictionaryForKimOptions:options], @"options",
nil];
[[NSApp delegate] performSelectorOnMainThread:@selector(enterIdentity:)
withObject:info
@@ -149,16 +151,15 @@ static KerberosAgentListener *sharedListener = nil;
mach_port_t reply_port = [[info objectForKey:@"reply_port"] integerValue];
kim_identity identity = NULL;
kim_options options = NULL;
+ NSString *identityString = [info objectForKey:@"identity_string"];
- if (!err) {
- err = kim_identity_create_from_string (&identity, [[info objectForKey:@"identity_string"] UTF8String]);
+ if (identityString) {
+ err = kim_identity_create_from_string (&identity, [identityString UTF8String]);
}
if (!err) {
-#warning Placeholder for returning options
- err = kim_options_create (&options);
- }
-
+ options = [KIMUtilities kimOptionsForDictionary:[info objectForKey:@"options"]];
+ }
if (!err) {
err = kim_handle_reply_enter_identity(reply_port, identity, options, error);
}
@@ -198,13 +199,18 @@ static KerberosAgentListener *sharedListener = nil;
mach_port_t reply_port = [portNumber integerValue];
kim_identity identity = NULL;
kim_options options = NULL;
-
- err = kim_identity_create_from_string(&identity, (identityString) ? [identityString UTF8String] : "");
+ NSLog(@"%s", __FUNCTION__);
+
+ if (identityString) {
+ err = kim_identity_create_from_string(&identity, [identityString UTF8String]);
+ }
if (!err) {
-#warning Placeholder for returning options
- err = kim_options_create (&options);
+ options = [KIMUtilities kimOptionsForDictionary:[info objectForKey:@"options"]];
}
+
+ log_kim_error_to_console(err);
+ log_kim_error_to_console(error);
if (!err) {
err = kim_handle_reply_select_identity(reply_port, identity, options, error);
diff --git a/src/kim/agent/mac/ServerDemux.m b/src/kim/agent/mac/ServerDemux.m
index 3cda9be64..00b13c9c5 100644
--- a/src/kim/agent/mac/ServerDemux.m
+++ b/src/kim/agent/mac/ServerDemux.m
@@ -26,6 +26,7 @@
#import "kim_selection_hints_private.h"
#import "kim_options_private.h"
#import "KerberosAgentListener.h"
+#import "KIMUtilities.h"
// ---------------------------------------------------------------------------
@@ -149,7 +150,8 @@ static int32_t kim_handle_request_enter_identity (mach_port_t in_client_port,
if (!err) {
// performs selector on main thread
[KerberosAgentListener enterIdentityWithClientPort:in_client_port
- replyPort:in_reply_port];
+ replyPort:in_reply_port
+ options:options];
}
return err;
diff --git a/src/kim/agent/mac/resources/English.lproj/Authentication.xib b/src/kim/agent/mac/resources/English.lproj/Authentication.xib
index 6b2aad9cd..06056ee68 100644
--- a/src/kim/agent/mac/resources/English.lproj/Authentication.xib
+++ b/src/kim/agent/mac/resources/English.lproj/Authentication.xib
@@ -8,11 +8,12 @@
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
- <integer value="300157"/>
- <integer value="300274"/>
- <integer value="300193"/>
<integer value="20"/>
+ <integer value="300314"/>
+ <integer value="300193"/>
<integer value="300175"/>
+ <integer value="300274"/>
+ <integer value="300420"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -62,6 +63,21 @@
<bool key="NSEditable">YES</bool>
<object class="_NSManagedProxy" key="_NSManagedProxy"/>
</object>
+ <object class="NSObjectController" id="633725892">
+ <object class="NSMutableArray" key="NSDeclaredKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>maxValidLifetime</string>
+ <string>minValidLifetime</string>
+ <string>validLifetime</string>
+ <string>valid_lifetime</string>
+ <string>minRenewableLifetime</string>
+ <string>maxRenewableLifetime</string>
+ <string>renewa</string>
+ <string>renewal_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>
@@ -309,7 +325,7 @@
</object>
<object class="NSPopUpButton" id="1016187493">
<reference key="NSNextResponder" ref="92892041"/>
- <int key="NSvFlags">-2147483356</int>
+ <int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 17}, {38, 26}}</string>
<reference key="NSSuperview" ref="92892041"/>
<bool key="NSEnabled">YES</bool>
@@ -362,6 +378,16 @@
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="690863814"/>
</object>
+ <object class="NSMenuItem" id="744766544">
+ <reference key="NSMenu" ref="594991555"/>
+ <string type="base64-UTF8" key="NSTitle">Q2hhbmdlIFBhc3N3b3Jk4oCmA</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>
@@ -964,7 +990,7 @@
<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"/>
+ <reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -1178,6 +1204,7 @@
</object>
</object>
<string key="NSFrameSize">{430, 283}</string>
+ <reference key="NSSuperview"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
<string key="NSMinSize">{430, 305}</string>
@@ -1853,200 +1880,238 @@
<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 class="IBOutletConnection" key="connection">
+ <string key="label">ticketOptionsSheet</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="102029948"/>
</object>
- <int key="connectionID">300441</int>
+ <int key="connectionID">300468</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 class="IBOutletConnection" key="connection">
+ <string key="label">ticketOptionsController</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="633725892"/>
</object>
- <int key="connectionID">300442</int>
+ <int key="connectionID">300470</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 class="IBBindingConnection" key="connection">
+ <string key="label">maxValue: selection.maxValidLifetime</string>
+ <reference key="source" ref="486016405"/>
+ <reference key="destination" ref="633725892"/>
+ <object class="NSNibBindingConnector" key="connector" id="132072575">
+ <reference key="NSSource" ref="486016405"/>
+ <reference key="NSDestination" ref="633725892"/>
+ <string key="NSLabel">maxValue: selection.maxValidLifetime</string>
+ <string key="NSBinding">maxValue</string>
+ <string key="NSKeyPath">selection.maxValidLifetime</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
</object>
- <int key="connectionID">300443</int>
+ <int key="connectionID">300472</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 class="IBBindingConnection" key="connection">
+ <string key="label">minValue: selection.minValidLifetime</string>
+ <reference key="source" ref="486016405"/>
+ <reference key="destination" ref="633725892"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="486016405"/>
+ <reference key="NSDestination" ref="633725892"/>
+ <string key="NSLabel">minValue: selection.minValidLifetime</string>
+ <string key="NSBinding">minValue</string>
+ <string key="NSKeyPath">selection.minValidLifetime</string>
+ <reference key="NSPreviousConnector" ref="132072575"/>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
</object>
- <int key="connectionID">300444</int>
+ <int key="connectionID">300478</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"/>
+ <reference key="destination" ref="633725892"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="964499406"/>
- <reference key="NSDestination" ref="57033499"/>
+ <reference key="NSDestination" ref="633725892"/>
<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>
+ <int key="connectionID">300481</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"/>
+ <reference key="destination" ref="633725892"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="198913348"/>
- <reference key="NSDestination" ref="57033499"/>
+ <reference key="NSDestination" ref="633725892"/>
<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>
+ <int key="connectionID">300482</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"/>
+ <reference key="destination" ref="633725892"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="368169141"/>
- <reference key="NSDestination" ref="57033499"/>
+ <reference key="NSDestination" ref="633725892"/>
<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>
+ <int key="connectionID">300483</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
- <string key="label">enabled: selection.renewable</string>
+ <string key="label">maxValue: selection.maxRenewableLifetime</string>
<reference key="source" ref="594182616"/>
- <reference key="destination" ref="57033499"/>
- <object class="NSNibBindingConnector" key="connector">
+ <reference key="destination" ref="633725892"/>
+ <object class="NSNibBindingConnector" key="connector" id="728670834">
<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>
+ <reference key="NSDestination" ref="633725892"/>
+ <string key="NSLabel">maxValue: selection.maxRenewableLifetime</string>
+ <string key="NSBinding">maxValue</string>
+ <string key="NSKeyPath">selection.maxRenewableLifetime</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
- <int key="connectionID">300450</int>
+ <int key="connectionID">300494</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
- <string key="label">maxValue: selection.max_renewal_lifetime</string>
+ <string key="label">minValue: selection.minRenewableLifetime</string>
<reference key="source" ref="594182616"/>
- <reference key="destination" ref="57033499"/>
- <object class="NSNibBindingConnector" key="connector" id="970138044">
+ <reference key="destination" ref="633725892"/>
+ <object class="NSNibBindingConnector" key="connector">
<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>
+ <reference key="NSDestination" ref="633725892"/>
+ <string key="NSLabel">minValue: selection.minRenewableLifetime</string>
+ <string key="NSBinding">minValue</string>
+ <string key="NSKeyPath">selection.minRenewableLifetime</string>
+ <reference key="NSPreviousConnector" ref="728670834"/>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
- <int key="connectionID">300453</int>
+ <int key="connectionID">300495</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
- <string key="label">minValue: selection.min_renewal_lifetime</string>
+ <string key="label">enabled: selection.renewable</string>
<reference key="source" ref="594182616"/>
- <reference key="destination" ref="57033499"/>
- <object class="NSNibBindingConnector" key="connector" id="564091763">
+ <reference key="destination" ref="633725892"/>
+ <object class="NSNibBindingConnector" key="connector">
<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"/>
+ <reference key="NSDestination" ref="633725892"/>
+ <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">300454</int>
+ <int key="connectionID">300497</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">value: selection.renewal_lifetime</string>
- <reference key="source" ref="594182616"/>
- <reference key="destination" ref="57033499"/>
+ <reference key="source" ref="332956369"/>
+ <reference key="destination" ref="633725892"/>
<object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="594182616"/>
- <reference key="NSDestination" ref="57033499"/>
+ <reference key="NSSource" ref="332956369"/>
+ <reference key="NSDestination" ref="633725892"/>
<string key="NSLabel">value: selection.renewal_lifetime</string>
<string key="NSBinding">value</string>
<string key="NSKeyPath">selection.renewal_lifetime</string>
- <reference key="NSPreviousConnector" ref="564091763"/>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
- <int key="connectionID">300455</int>
+ <int key="connectionID">300500</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>
+ <string key="label">value: selection.valid_lifetime</string>
+ <reference key="source" ref="523287828"/>
+ <reference key="destination" ref="633725892"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="523287828"/>
+ <reference key="NSDestination" ref="633725892"/>
+ <string key="NSLabel">value: selection.valid_lifetime</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">selection.valid_lifetime</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
- <int key="connectionID">300456</int>
+ <int key="connectionID">300501</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 class="IBActionConnection" key="connection">
+ <string key="label">showTicketOptions:</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="452996455"/>
</object>
- <int key="connectionID">300458</int>
+ <int key="connectionID">300503</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 class="IBActionConnection" key="connection">
+ <string key="label">saveTicketOptions:</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="681646907"/>
+ </object>
+ <int key="connectionID">300504</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cancelTicketOptions:</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="284195308"/>
+ </object>
+ <int key="connectionID">300505</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">validLifetimeSlider</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="486016405"/>
+ </object>
+ <int key="connectionID">300506</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">renewableLifetimeSlider</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="594182616"/>
+ </object>
+ <int key="connectionID">300507</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">sliderDidChange:</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="594182616"/>
+ </object>
+ <int key="connectionID">300508</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">sliderDidChange:</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="486016405"/>
</object>
- <int key="connectionID">300459</int>
+ <int key="connectionID">300509</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
@@ -2573,6 +2638,7 @@
<reference ref="8728780"/>
<reference ref="917012637"/>
<reference ref="452996455"/>
+ <reference ref="744766544"/>
</object>
<reference key="parent" ref="690863814"/>
</object>
@@ -2876,6 +2942,17 @@
<reference key="object" ref="452996455"/>
<reference key="parent" ref="594991555"/>
</object>
+ <object class="IBObjectRecord">
+ <int key="objectID">300469</int>
+ <reference key="object" ref="633725892"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Ticket Options Controller</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">300502</int>
+ <reference key="object" ref="744766544"/>
+ <reference key="parent" ref="594991555"/>
+ </object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@@ -3019,6 +3096,8 @@
<string>300430.IBPluginDependency</string>
<string>300430.ImportedFromIB2</string>
<string>300464.IBPluginDependency</string>
+ <string>300469.IBPluginDependency</string>
+ <string>300502.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -3104,7 +3183,7 @@
<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>{{611, 382}, {189, 93}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3128,9 +3207,9 @@
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
- <string>{{579, 449}, {430, 283}}</string>
+ <string>{{979, 209}, {430, 283}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{579, 449}, {430, 283}}</string>
+ <string>{{979, 209}, {430, 283}}</string>
<reference ref="9"/>
<reference ref="8"/>
<reference ref="9"/>
@@ -3159,6 +3238,8 @@
<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>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
@@ -3181,7 +3262,7 @@
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">300467</int>
+ <int key="maxID">300509</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -3195,9 +3276,13 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<string>answerAuthPrompt:</string>
<string>cancel:</string>
+ <string>cancelTicketOptions:</string>
<string>changePassword:</string>
<string>enterIdentity:</string>
+ <string>saveTicketOptions:</string>
+ <string>showTicketOptions:</string>
<string>showedError:</string>
+ <string>sliderDidChange:</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -3206,6 +3291,10 @@
<string>id</string>
<string>id</string>
<string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
@@ -3226,10 +3315,14 @@
<string>passwordField</string>
<string>passwordView</string>
<string>rememberPasswordInKeychainCheckBox</string>
+ <string>renewableLifetimeSlider</string>
<string>samBadge</string>
<string>samPromptField</string>
<string>samView</string>
+ <string>ticketOptionsController</string>
+ <string>ticketOptionsSheet</string>
<string>usernameField</string>
+ <string>validLifetimeSlider</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -3247,10 +3340,14 @@
<string>NSTextField</string>
<string>NSView</string>
<string>NSButton</string>
+ <string>NSSlider</string>
<string>BadgedImageView</string>
<string>NSTextField</string>
<string>NSView</string>
+ <string>NSObjectController</string>
+ <string>NSWindow</string>
<string>NSTextField</string>
+ <string>NSSlider</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">