Example #1
0
kim_error kim_options_create (kim_options *out_options)
{
    kim_error err = KIM_NO_ERROR;
    kim_preferences preferences = NULL;
    kim_options options = KIM_OPTIONS_DEFAULT;
    
    if (!err && !out_options) { err = check_error (KIM_NULL_PARAMETER_ERR); }
    
    if (!err) {
        err = kim_preferences_create (&preferences);
    }
    
    if (!err) {
        err = kim_preferences_get_options (preferences, &options);
    }
    
    if (!err && !options) {
        err = kim_options_allocate (&options);
    }
    
    if (!err) {
        *out_options = options;
        options = NULL; /* caller takes ownership */
    }
    
    kim_options_free (&options);
    kim_preferences_free (&preferences);
    
    return check_error (err);
}
Example #2
0
kim_error kim_ui_cli_select_identity (kim_ui_context      *in_context,
                                      kim_selection_hints  io_hints,
                                      kim_identity        *out_identity,
                                      kim_boolean         *out_change_password)
{
    kim_error err = KIM_NO_ERROR;
    kim_options options = NULL;
    
    if (!err && !io_hints           ) { err = check_error (KIM_NULL_PARAMETER_ERR); }
    if (!err && !out_identity       ) { err = check_error (KIM_NULL_PARAMETER_ERR); }
    if (!err && !out_change_password) { err = check_error (KIM_NULL_PARAMETER_ERR); }
    
    if (!err) {
        err = kim_selection_hints_get_options (io_hints, &options);
    }
    
    if (!err) {
        err = kim_ui_cli_enter_identity (in_context, options, 
                                         out_identity,
                                         out_change_password);
    }
    
    if (!err) {
        err = kim_selection_hints_set_options (io_hints, options);
    }
    
    kim_options_free (&options);
    
    return check_error (err);
}
Example #3
0
kim_error kim_options_create_from_stream (kim_options   *out_options,
                                          k5_ipc_stream  io_stream) 
{
    kim_error err = KIM_NO_ERROR;
    kim_options options = NULL;
    
    if (!err && !out_options) { err = check_error (KIM_NULL_PARAMETER_ERR); }
    if (!err && !io_stream  ) { err = check_error (KIM_NULL_PARAMETER_ERR); }

    if (!err) {
        err = kim_options_allocate (&options);
    }

    if (!err) {
        kim_options_read_from_stream (options, io_stream);
    }
    
    if (!err) {
        *out_options = options;
        options = NULL;
    }
    
    kim_options_free (&options); 
    
    return check_error (err);
}
Example #4
0
kim_error kim_options_write_to_stream (kim_options   in_options,
                                       k5_ipc_stream io_stream)
{
    kim_error err = KIM_NO_ERROR;
    kim_options options = in_options;

    if (!err && !io_stream ) { err = check_error (KIM_NULL_PARAMETER_ERR); }
    
    if (!err && !in_options) {
        err = kim_options_create (&options);
    }
    
    if (!err) {
        err = k5_ipc_stream_write_int64 (io_stream, options->start_time);
    }
    
    if (!err) {
        err = k5_ipc_stream_write_int64 (io_stream, options->lifetime);
    }
    
    if (!err) {
        err = k5_ipc_stream_write_int32 (io_stream, options->renewable);
    }
    
    if (!err) {
        err = k5_ipc_stream_write_int64 (io_stream, 
                                         options->renewal_lifetime);
    }
    
    if (!err) {
        err = k5_ipc_stream_write_int32 (io_stream, options->forwardable);
    }
    
    if (!err) {
        err = k5_ipc_stream_write_int32 (io_stream, options->proxiable);
    }
    
    if (!err) {
        err = k5_ipc_stream_write_int32 (io_stream, options->addressless);
    }
    
    if (!err) {
        err = k5_ipc_stream_write_string (io_stream,  options->service_name);
    }
    
    if (options != in_options) { kim_options_free (&options); }
    
    return check_error (err);    
}
Example #5
0
static inline kim_error kim_options_allocate (kim_options *out_options)
{
    kim_error err = kim_library_init ();
    kim_options options = NULL;
    
    if (!err && !out_options) { err = check_error (KIM_NULL_PARAMETER_ERR); }
    
    if (!err) {
        options = malloc (sizeof (*options));
        if (!options) { err = KIM_OUT_OF_MEMORY_ERR; }
    }
    
    if (!err) {
        *options = kim_options_initializer;
        *out_options = options;
        options = NULL;
    }
    
    kim_options_free (&options);
    
    return check_error (err);    
}
Example #6
0
kim_error kim_options_copy (kim_options *out_options,
                            kim_options  in_options)
{
    kim_error err = KIM_NO_ERROR;
    kim_options options = KIM_OPTIONS_DEFAULT;
    
    if (!err && !out_options) { err = check_error (KIM_NULL_PARAMETER_ERR); }
    
    if (!err && in_options != KIM_OPTIONS_DEFAULT) {
        err = kim_options_allocate (&options);
        
        if (!err) {
            options->start_time = in_options->start_time;
            options->lifetime = in_options->lifetime;
            options->renewable = in_options->renewable;
            options->renewal_lifetime = in_options->renewal_lifetime;
            options->forwardable = in_options->forwardable;
            options->proxiable = in_options->proxiable;
            options->addressless = in_options->addressless;
            
            if (in_options->service_name) {
                err = kim_string_copy (&options->service_name, 
                                       in_options->service_name);
            }
        }
    }
    
    if (!err) {
        *out_options = options;
        options = NULL;
    }
    
    kim_options_free (&options);
    
    return check_error (err);
}
Example #7
0
/* ------------------------------------------------------------------------ */
kim_error kim_os_preferences_set_favorites_for_key (kim_preference_key in_key,
                                                    kim_favorites      in_favorites)
{
    kim_error err = KIM_NO_ERROR;
    kim_count count = 0;
    CFMutableArrayRef array = NULL;

    if (!err && !in_favorites) { err = check_error (KIM_NULL_PARAMETER_ERR); }

    if (!err) {
        err = kim_favorites_get_number_of_identities (in_favorites, &count);
    }

    if (!err) {
        array = CFArrayCreateMutable (kCFAllocatorDefault, count,
                                      &kCFTypeArrayCallBacks);
        if (!array) { err = KIM_OUT_OF_MEMORY_ERR; }
    }

    if (!err) {
        kim_count i;

        for (i = 0; !err && i < count; i++) {
            kim_identity identity = NULL;
            kim_options options = NULL;
            kim_string string = NULL;
            CFStringRef cfstring = NULL;
            CFMutableDictionaryRef dictionary = NULL;

            err = kim_favorites_get_identity_at_index (in_favorites, i,
                                                       &identity,
                                                       &options);

            if (!err) {
                err = kim_identity_get_string (identity, &string);
            }

            if (!err) {
                err = kim_os_string_get_cfstring (string, &cfstring);
            }

            if (!err) {
                dictionary = CFDictionaryCreateMutable (kCFAllocatorDefault, 0,
                                                        &kCFTypeDictionaryKeyCallBacks,
                                                        &kCFTypeDictionaryValueCallBacks);
                if (!dictionary) { err = check_error (KIM_OUT_OF_MEMORY_ERR); }
            }

            if (!err) {
                err = kim_os_preferences_set_value_for_dict_key (dictionary,
                                                                 kim_preference_key_client_identity,
                                                                 cfstring);
            }

            if (!err && options) {
                err = kim_os_preferences_options_to_dictionary (options,
                                                                dictionary);
            }

            if (!err) {
                CFArrayAppendValue (array, dictionary);
            }

            if (dictionary) { CFRelease (dictionary); }
            if (cfstring  ) { CFRelease (cfstring); }
            kim_string_free (&string);
            kim_options_free (&options);
            kim_identity_free (&identity);
        }
    }

    if (!err) {
        err = kim_os_preferences_set_value (in_key, array);
    }

    if (array) { CFRelease (array); }

    return check_error (err);
}
Example #8
0
kim_error kim_os_preferences_get_favorites_for_key (kim_preference_key in_key,
                                                    kim_favorites      io_favorites)
{
    kim_error err = KIM_NO_ERROR;
    CFArrayRef value = NULL;

    if (!err && !io_favorites) { err = check_error (KIM_NULL_PARAMETER_ERR); }

    if (!err) {
        err = kim_os_preferences_copy_value (in_key, CFArrayGetTypeID (),
                                             (CFPropertyListRef *) &value);
    }

    if (!err && value) {
        if (!value || CFArrayGetCount (value) < 1) {
            err =  kim_favorites_remove_all_identities (io_favorites);

        } else {
            CFIndex count = CFArrayGetCount (value);
            CFIndex i;

            for (i = 0; !err && i < count; i++) {
                CFDictionaryRef dictionary = NULL;
                CFStringRef cfstring = NULL;

                dictionary = (CFDictionaryRef) CFArrayGetValueAtIndex (value, i);
                if (!dictionary || CFGetTypeID (dictionary) != CFDictionaryGetTypeID ()) {
                    err = check_error (KIM_PREFERENCES_READ_ERR);
                }

                if (!err) {
                    err = kim_os_preferences_copy_value_for_dict_key (dictionary,
                                                                      kim_preference_key_client_identity,
                                                                      CFStringGetTypeID (),
                                                                      (CFPropertyListRef *) &cfstring);
                }

                if (!err && cfstring) {
                    kim_string string = NULL;
                    kim_identity identity = NULL;
                    kim_options options = KIM_OPTIONS_DEFAULT;

                    err = kim_os_string_create_from_cfstring (&string, cfstring);

                    if (!err) {
                        err = kim_identity_create_from_string (&identity, string);
                    }

                    if (!err && (CFDictionaryGetCount (dictionary) > 1)) {
                        err = kim_os_preferences_dictionary_to_options (dictionary,
                                                                        &options);
                    }

                    if (!err) {
                        err = kim_favorites_add_identity (io_favorites, identity,
                                                          options);
                    }

                    kim_string_free (&string);
                    kim_options_free (&options);
                    kim_identity_free (&identity);
                }
            }

            if (err) {
                kim_favorites_remove_all_identities (io_favorites);
            }
        }
    }

    if (value) { CFRelease (value); }

    return check_error (err);
}
Example #9
0
static kim_error kim_os_preferences_get_options_compat (kim_options *out_options)
{
    kim_error err = KIM_NO_ERROR;
    kim_options options = KIM_OPTIONS_DEFAULT;
    kim_boolean found_options = 0;

    if (!err && !out_options) { err = check_error (KIM_NULL_PARAMETER_ERR); }

    if (!err) {
        err = kim_options_create_empty (&options);
    }

    if (!err) {
        CFNumberRef value = NULL;
        SInt32 lifetime; // CFNumbers are signed so we need to cast

        err = kim_os_preferences_copy_value_compat (kim_preference_key_lifetime,
                                                    CFNumberGetTypeID (),
                                                    (CFPropertyListRef *) &value);

        if (!err && value && CFNumberGetValue (value, kCFNumberSInt32Type,
                                               &lifetime)) {
            found_options = 1;
            err = kim_options_set_lifetime (options, lifetime);
        }

        if (value) { CFRelease (value); }
    }

    if (!err) {
        CFBooleanRef value = NULL;

        err = kim_os_preferences_copy_value_compat (kim_preference_key_renewable,
                                                    CFBooleanGetTypeID (),
                                                    (CFPropertyListRef *) &value);

        if (!err && value) {
            found_options = 1;
            err = kim_options_set_renewable (options, CFBooleanGetValue (value));
        }

        if (value) { CFRelease (value); }
    }

    if (!err) {
        CFNumberRef value = NULL;
        SInt32 lifetime; // CFNumbers are signed so we need to cast

        err = kim_os_preferences_copy_value_compat (kim_preference_key_renewal_lifetime,
                                                    CFNumberGetTypeID (),
                                                    (CFPropertyListRef *) &value);

        if (!err && value && CFNumberGetValue (value, kCFNumberSInt32Type,
                                               &lifetime)) {
            found_options = 1;
            err = kim_options_set_renewal_lifetime (options, lifetime);
        }

        if (value) { CFRelease (value); }
    }

    if (!err) {
        CFBooleanRef value = NULL;

        err = kim_os_preferences_copy_value_compat (kim_preference_key_forwardable,
                                                    CFBooleanGetTypeID (),
                                                    (CFPropertyListRef *) &value);

        if (!err && value) {
            found_options = 1;
            err = kim_options_set_forwardable (options, CFBooleanGetValue (value));
        }

        if (value) { CFRelease (value); }
    }

    if (!err) {
        CFBooleanRef value = NULL;

        err = kim_os_preferences_copy_value_compat (kim_preference_key_proxiable,
                                                    CFBooleanGetTypeID (),
                                                    (CFPropertyListRef *) &value);

        if (!err && value) {
            found_options = 1;
            err = kim_options_set_proxiable (options, CFBooleanGetValue (value));
        }

        if (value) { CFRelease (value); }
    }

    if (!err) {
        CFBooleanRef value = NULL;

        err = kim_os_preferences_copy_value_compat (kim_preference_key_addressless,
                                                    CFBooleanGetTypeID (),
                                                    (CFPropertyListRef *) &value);

        if (!err && value) {
            found_options = 1;
            err = kim_options_set_addressless (options, CFBooleanGetValue (value));
        }

        if (value) { CFRelease (value); }
    }

    if (!err && !found_options) {
        kim_options_free (&options);
        options = KIM_OPTIONS_DEFAULT;
    }

    if (!err) {
        *out_options = options;
    }

    return check_error (err);
}