diff options
Diffstat (limited to 'src/kim/lib/kim_ui.c')
-rw-r--r-- | src/kim/lib/kim_ui.c | 230 |
1 files changed, 115 insertions, 115 deletions
diff --git a/src/kim/lib/kim_ui.c b/src/kim/lib/kim_ui.c index 0bac3d8190..b0e93f0943 100644 --- a/src/kim/lib/kim_ui.c +++ b/src/kim/lib/kim_ui.c @@ -33,7 +33,7 @@ static kim_prompt_type kim_ui_ptype2ktype (krb5_prompt_type type) { if (type == KRB5_PROMPT_TYPE_PASSWORD) { return kim_prompt_type_password; - + } else if (type == KRB5_PROMPT_TYPE_PREAUTH) { return kim_prompt_type_preauth; } @@ -47,42 +47,42 @@ static kim_prompt_type kim_ui_ptype2ktype (krb5_prompt_type type) static kim_error kim_ui_init_lazy (kim_ui_context *io_context) { kim_error err = KIM_NO_ERROR; - + if (!err && !io_context) { err = check_error (KIM_NULL_PARAMETER_ERR); } - + if (!err && !io_context->initialized) { #ifdef KIM_BUILTIN_UI kim_ui_environment environment = kim_library_ui_environment (); - + if (environment == KIM_UI_ENVIRONMENT_GUI) { #endif /* KIM_BUILTIN_UI */ io_context->type = kim_ui_type_gui_plugin; - + err = kim_ui_plugin_init (io_context); -#ifdef KIM_BUILTIN_UI - if (err) { +#ifdef KIM_BUILTIN_UI + if (err) { io_context->type = kim_ui_type_gui_builtin; - + err = kim_os_ui_gui_init (io_context); } - + } else if (environment == KIM_UI_ENVIRONMENT_CLI) { io_context->type = kim_ui_type_cli; - - err = kim_ui_cli_init (io_context); - + + err = kim_ui_cli_init (io_context); + } else { io_context->type = kim_ui_type_none; - + err = check_error (KIM_NO_UI_ERR); } #endif /* KIM_BUILTIN_UI */ if (!err) { io_context->initialized = 1; - } + } } - + return check_error (err); } @@ -93,9 +93,9 @@ static kim_error kim_ui_init_lazy (kim_ui_context *io_context) kim_error kim_ui_init (kim_ui_context *io_context) { kim_error err = KIM_NO_ERROR; - + if (!err && !io_context) { err = check_error (KIM_NULL_PARAMETER_ERR); } - + if (!err) { /* Lazy initialization so we only actually initialize if a prompt * gets called. This is important because krb5_get_init_creds_* @@ -105,7 +105,7 @@ kim_error kim_ui_init (kim_ui_context *io_context) io_context->prompt_count = 0; io_context->password_to_save = NULL; } - + return check_error (err); } @@ -117,42 +117,42 @@ kim_error kim_ui_enter_identity (kim_ui_context *in_context, kim_boolean *out_change_password) { kim_error err = KIM_NO_ERROR; - + if (!err && !in_context ) { 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_ui_init_lazy (in_context); } - + if (!err) { if (in_context->type == kim_ui_type_gui_plugin) { - err = kim_ui_plugin_enter_identity (in_context, + err = kim_ui_plugin_enter_identity (in_context, io_options, out_identity, out_change_password); - + #ifdef KIM_BUILTIN_UI } else if (in_context->type == kim_ui_type_gui_builtin) { - err = kim_os_ui_gui_enter_identity (in_context, + err = kim_os_ui_gui_enter_identity (in_context, io_options, out_identity, out_change_password); - + } else if (in_context->type == kim_ui_type_cli) { - err = kim_ui_cli_enter_identity (in_context, + err = kim_ui_cli_enter_identity (in_context, io_options, out_identity, out_change_password); - + #endif /* KIM_BUILTIN_UI */ - + } else { err = check_error (KIM_NO_UI_ERR); } } - + return check_error (err); } @@ -164,43 +164,43 @@ kim_error kim_ui_select_identity (kim_ui_context *in_context, kim_boolean *out_change_password) { kim_error err = KIM_NO_ERROR; - + if (!err && !in_context ) { err = check_error (KIM_NULL_PARAMETER_ERR); } 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_ui_init_lazy (in_context); } - + if (!err) { if (in_context->type == kim_ui_type_gui_plugin) { - err = kim_ui_plugin_select_identity (in_context, + err = kim_ui_plugin_select_identity (in_context, io_hints, out_identity, out_change_password); - + #ifdef KIM_BUILTIN_UI } else if (in_context->type == kim_ui_type_gui_builtin) { - err = kim_os_ui_gui_select_identity (in_context, + err = kim_os_ui_gui_select_identity (in_context, io_hints, out_identity, out_change_password); - + } else if (in_context->type == kim_ui_type_cli) { - err = kim_ui_cli_select_identity (in_context, + err = kim_ui_cli_select_identity (in_context, io_hints, out_identity, out_change_password); - + #endif /* KIM_BUILTIN_UI */ - + } else { err = check_error (KIM_NO_UI_ERR); } } - + return check_error (err); } @@ -218,42 +218,42 @@ krb5_error_code kim_ui_prompter (krb5_context in_krb5_context, krb5_prompt_type *types = NULL; kim_ui_context *context = (kim_ui_context *) in_context; int i; - + if (!err && !in_krb5_context) { err = check_error (KIM_NULL_PARAMETER_ERR); } if (!err && !in_context ) { err = check_error (KIM_NULL_PARAMETER_ERR); } if (!err && !in_prompts ) { err = check_error (KIM_NULL_PARAMETER_ERR); } - + if (!err) { types = krb5_get_prompt_types (in_krb5_context); if (!types) { err = check_error (KIM_NULL_PARAMETER_ERR); } } - + for (i = 0; !err && i < in_num_prompts; i++) { char *reply = NULL; kim_prompt_type type = kim_ui_ptype2ktype (types[i]); kim_boolean got_saved_password = 0; - + if (type == kim_prompt_type_password) { /* Check for saved password on OSes that support it */ kim_error terr = KIM_NO_ERROR; - - terr = kim_os_identity_get_saved_password (context->identity, + + terr = kim_os_identity_get_saved_password (context->identity, (kim_string *) &reply); if (!terr && reply) { got_saved_password = 1; } } - + if (!got_saved_password) { kim_boolean save_reply = FALSE; kim_boolean allow_save_password = kim_os_identity_allow_save_password (); - + context->prompt_count++; err = kim_ui_init_lazy (in_context); if (!err) { if (context->type == kim_ui_type_gui_plugin) { - err = kim_ui_plugin_auth_prompt (context, - context->identity, + err = kim_ui_plugin_auth_prompt (context, + context->identity, type, allow_save_password, in_prompts[i].hidden, @@ -262,11 +262,11 @@ krb5_error_code kim_ui_prompter (krb5_context in_krb5_context, in_prompts[i].prompt, &reply, &save_reply); - + #ifdef KIM_BUILTIN_UI } else if (context->type == kim_ui_type_gui_builtin) { - err = kim_os_ui_gui_auth_prompt (context, - context->identity, + err = kim_os_ui_gui_auth_prompt (context, + context->identity, type, allow_save_password, in_prompts[i].hidden, @@ -275,10 +275,10 @@ krb5_error_code kim_ui_prompter (krb5_context in_krb5_context, in_prompts[i].prompt, &reply, &save_reply); - + } else if (context->type == kim_ui_type_cli) { - err = kim_ui_cli_auth_prompt (context, - context->identity, + err = kim_ui_cli_auth_prompt (context, + context->identity, type, allow_save_password, in_prompts[i].hidden, @@ -288,12 +288,12 @@ krb5_error_code kim_ui_prompter (krb5_context in_krb5_context, &reply, &save_reply); #endif /* KIM_BUILTIN_UI */ - + } else { err = check_error (KIM_NO_UI_ERR); } } - + if (!err && type == kim_prompt_type_password) { kim_string_free (&context->password_to_save); @@ -302,21 +302,21 @@ krb5_error_code kim_ui_prompter (krb5_context in_krb5_context, } } } - + if (!err) { uint32_t reply_len = strlen (reply); - + if ((reply_len + 1) > in_prompts[i].reply->length) { kim_debug_printf ("%s(): reply %d is too long (is %d, should be %d)\n", - __FUNCTION__, i, + __FUNCTION__, i, reply_len, in_prompts[i].reply->length); reply_len = in_prompts[i].reply->length; } - + memmove (in_prompts[i].reply->data, reply, reply_len + 1); in_prompts[i].reply->length = reply_len; } - + /* Clean up reply buffer. Saved passwords are allocated by KIM. */ if (reply) { if (got_saved_password) { @@ -327,7 +327,7 @@ krb5_error_code kim_ui_prompter (krb5_context in_krb5_context, } } } - + return check_error (err); } @@ -341,49 +341,49 @@ kim_error kim_ui_change_password (kim_ui_context *in_context, char **out_verify_password) { kim_error err = KIM_NO_ERROR; - + if (!err && !in_context ) { err = check_error (KIM_NULL_PARAMETER_ERR); } if (!err && !in_identity ) { err = check_error (KIM_NULL_PARAMETER_ERR); } if (!err && !out_old_password ) { err = check_error (KIM_NULL_PARAMETER_ERR); } if (!err && !out_new_password ) { err = check_error (KIM_NULL_PARAMETER_ERR); } if (!err && !out_verify_password) { err = check_error (KIM_NULL_PARAMETER_ERR); } - + if (!err) { err = kim_ui_init_lazy (in_context); } if (!err) { if (in_context->type == kim_ui_type_gui_plugin) { - err = kim_ui_plugin_change_password (in_context, - in_identity, + err = kim_ui_plugin_change_password (in_context, + in_identity, in_old_password_expired, out_old_password, out_new_password, out_verify_password); - + #ifdef KIM_BUILTIN_UI } else if (in_context->type == kim_ui_type_gui_builtin) { - err = kim_os_ui_gui_change_password (in_context, - in_identity, + err = kim_os_ui_gui_change_password (in_context, + in_identity, in_old_password_expired, out_old_password, out_new_password, out_verify_password); - + } else if (in_context->type == kim_ui_type_cli) { err = kim_ui_cli_change_password (in_context, - in_identity, + in_identity, in_old_password_expired, out_old_password, out_new_password, out_verify_password); #endif /* KIM_BUILTIN_UI */ - + } else { err = check_error (KIM_NO_UI_ERR); } } - + return check_error (err); } @@ -396,44 +396,44 @@ kim_error kim_ui_handle_error (kim_ui_context *in_context, kim_string in_error_description) { kim_error err = KIM_NO_ERROR; - + if (!err && !in_context ) { err = check_error (KIM_NULL_PARAMETER_ERR); } if (!err && !in_error_message ) { err = check_error (KIM_NULL_PARAMETER_ERR); } if (!err && !in_error_description) { err = check_error (KIM_NULL_PARAMETER_ERR); } - + if (!err) { err = kim_ui_init_lazy (in_context); } - + if (!err) { if (in_context->type == kim_ui_type_gui_plugin) { - err = kim_ui_plugin_handle_error (in_context, - in_identity, + err = kim_ui_plugin_handle_error (in_context, + in_identity, in_error, in_error_message, in_error_description); - + #ifdef KIM_BUILTIN_UI } else if (in_context->type == kim_ui_type_gui_builtin) { - err = kim_os_ui_gui_handle_error (in_context, - in_identity, + err = kim_os_ui_gui_handle_error (in_context, + in_identity, in_error, in_error_message, in_error_description); - + } else if (in_context->type == kim_ui_type_cli) { - err = kim_ui_cli_handle_error (in_context, - in_identity, + err = kim_ui_cli_handle_error (in_context, + in_identity, in_error, in_error_message, in_error_description); -#endif /* KIM_BUILTIN_UI */ - +#endif /* KIM_BUILTIN_UI */ + } else { err = check_error (KIM_NO_UI_ERR); } } - + return check_error (err); } @@ -443,24 +443,24 @@ void kim_ui_free_string (kim_ui_context *in_context, char **io_string) { kim_error err = kim_ui_init_lazy (in_context); - + if (!err && in_context && io_string && *io_string) { /* most ui strings are auth information so zero before freeing */ memset (*io_string, '\0', strlen (*io_string)); - + if (in_context->type == kim_ui_type_gui_plugin) { - kim_ui_plugin_free_string (in_context, + kim_ui_plugin_free_string (in_context, io_string); - + #ifdef KIM_BUILTIN_UI } else if (in_context->type == kim_ui_type_gui_builtin) { - kim_os_ui_gui_free_string (in_context, + kim_os_ui_gui_free_string (in_context, io_string); - + } else if (in_context->type == kim_ui_type_cli) { - kim_ui_cli_free_string (in_context, + kim_ui_cli_free_string (in_context, io_string); -#endif /* KIM_BUILTIN_UI */ +#endif /* KIM_BUILTIN_UI */ } } } @@ -470,28 +470,28 @@ void kim_ui_free_string (kim_ui_context *in_context, kim_error kim_ui_fini (kim_ui_context *io_context) { kim_error err = KIM_NO_ERROR; - + if (!err && !io_context) { err = check_error (KIM_NULL_PARAMETER_ERR); } - + if (!err && io_context->initialized) { if (io_context->type == kim_ui_type_gui_plugin) { err = kim_ui_plugin_fini (io_context); - + #ifdef KIM_BUILTIN_UI } else if (io_context->type == kim_ui_type_gui_builtin) { err = kim_os_ui_gui_fini (io_context); - + } else if (io_context->type == kim_ui_type_cli) { err = kim_ui_cli_fini (io_context); #endif /* KIM_BUILTIN_UI */ - + } else { err = check_error (KIM_NO_UI_ERR); } - + kim_string_free (&io_context->password_to_save); } - + return check_error (err); } @@ -508,43 +508,43 @@ kim_error kim_ui_handle_kim_error (kim_ui_context *in_context, kim_error err = KIM_NO_ERROR; kim_string message = NULL; kim_string description = NULL; - + if (!err) { /* Do this first so last error doesn't get overwritten */ err = kim_string_create_for_last_error (&description, in_error); } - + if (!err && !in_context) { err = check_error (KIM_NULL_PARAMETER_ERR); } - + if (!err) { kim_string key = NULL; - + switch (in_type) { case kim_ui_error_type_authentication: key = "Kerberos Login Failed:"; break; - + case kim_ui_error_type_change_password: key = "Kerberos Change Password Failed:"; break; - + case kim_ui_error_type_selection: case kim_ui_error_type_generic: default: key = "Kerberos Operation Failed:"; break; } - + err = kim_os_string_create_localized (&message, key); } - + if (!err) { err = kim_ui_handle_error (in_context, in_identity, - in_error, message, description); + in_error, message, description); } - + kim_string_free (&description); kim_string_free (&message); - + return check_error (err); } |