diff options
Diffstat (limited to 'src/kadmin/passwd/xm_kpasswd.c')
-rw-r--r-- | src/kadmin/passwd/xm_kpasswd.c | 445 |
1 files changed, 0 insertions, 445 deletions
diff --git a/src/kadmin/passwd/xm_kpasswd.c b/src/kadmin/passwd/xm_kpasswd.c deleted file mode 100644 index 2f0bdf9..0000000 --- a/src/kadmin/passwd/xm_kpasswd.c +++ /dev/null @@ -1,445 +0,0 @@ -/* - * Copyright 1993-1994 OpenVision Technologies, Inc., All Rights Reserved. - * - * $Header$ - * - * - */ - -static char rcsid_2[] = "$Id$"; - -#include <kadm5/admin.h> -#include <krb5.h> - -#include "kpasswd_strings.h" -#define string_text error_message -#define initialize_kpasswd_strings initialize_kpws_error_table - -#include <stdio.h> -#include <pwd.h> -#include <string.h> - -char *whoami; - -#include <Xm/Xm.h> -#include <Xm/MessageB.h> -#include <Xm/ScrolledW.h> -#include <Xm/Form.h> -#include <Xm/Text.h> -#include <Xm/PushB.h> -#include <Xm/Label.h> -#include <Xm/Separator.h> -#include <X11/cursorfont.h> -#include <X11/Shell.h> - -Widget toplevel, scroll_text, prompt_text; -Widget quit_btn, help_btn, old_lbl, new_lbl, again_lbl, main_lbl; -XtAppContext app_con; -int looping; -int retval=0; - - -/*************************************************************************** - * - * A few utility functions for setting/unsetting the busy cursor - * (i.e. the watch cursor). - */ -static void -SetCursor(w,c) - Widget w; - Cursor c; -{ - while (XtIsSubclass(w, shellWidgetClass) != True) - w = XtParent(w); - - XDefineCursor(XtDisplay(w), XtWindow(w), c); - XFlush(XtDisplay(w)); -} - - -static void -SetStandardCursor() -{ - static Cursor ArrowCursor = (Cursor)NULL; - - if (ArrowCursor == (Cursor)NULL) - ArrowCursor = XCreateFontCursor(XtDisplay(toplevel), XC_top_left_arrow); - SetCursor(toplevel, ArrowCursor); -} - - -static void -SetWatchCursor() -{ - static Cursor WatchCursor = (Cursor)NULL; - - if (WatchCursor == (Cursor)NULL) - WatchCursor = XCreateFontCursor(XtDisplay(toplevel), XC_watch); - SetCursor(toplevel, WatchCursor); -} - - -/*************************************************************************** - * - * Set up a com_err hook, for displaying to a motif scrolling widget. - */ - -#include <stdarg.h> - -static void -#ifdef __STDC__ -motif_com_err (const char *whoami, long code, const char *fmt, va_list args) -#else -motif_com_err (whoami, code, fmt, args) - const char *whoami; - long code; - const char *fmt; - va_list args; -#endif -{ - XEvent event; - char buf[2048]; - - buf[0] = '\0'; - - if (whoami) - { - strncpy(buf, whoami, sizeof(buf) - 1); - buf[sizeof(buf) - 1] = '\0'; - strncat(buf, ": ", sizeof(buf) - 1 - strlen(buf)); - } - if (code) - { - buf[sizeof(buf) - 1] = '\0'; - strncat(buf, error_message(code), sizeof(buf) - 1 - strlen(buf)); - strncat(buf, " ", sizeof(buf) - 1 - strlen(buf)); - } - if (fmt) - { - vsnprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), fmt, args); - } - - XtVaSetValues(scroll_text, XmNvalue, buf, NULL); - - for (; XtAppPending(app_con); ) - { - XtAppNextEvent(app_con, &event); - XtDispatchEvent(&event); - } -} - - -/*************************************************************************** - * - * Function to display help widget. - */ -static void -help() -{ - static Widget help_dlg = NULL; - - if (!help_dlg) - { - help_dlg = XmCreateInformationDialog(toplevel, "help_dlg", NULL, - 0); - XtUnmanageChild(XmMessageBoxGetChild(help_dlg, XmDIALOG_CANCEL_BUTTON)); - XtUnmanageChild(XmMessageBoxGetChild(help_dlg, XmDIALOG_HELP_BUTTON)); - } - XtManageChild(help_dlg); -} - - -/*************************************************************************** - * - * Unset the global "looping" when we want to get out of reading a - * password. - */ -static void -unset_looping() -{ - looping = 0; -} - - -/*************************************************************************** - * - * Function to exit the gui. Callback on the "Exit" button. - */ -static void -quit() -{ - exit(retval); -} - - -/*************************************************************************** - * - * Set up motif widgets, callbacks, etc. - */ -static void -create_widgets(argc, argv) - int *argc; - char *argv[]; -{ - Widget form, lbl_form, - sep, - scroll_win; - Pixel bg; - - toplevel = XtAppInitialize(&app_con, "Kpasswd", NULL, 0, argc, argv, - NULL, NULL, 0); - form = XtCreateManagedWidget("form", xmFormWidgetClass, toplevel, NULL, 0); - quit_btn = XtVaCreateManagedWidget("Quit", xmPushButtonWidgetClass, - form, - XmNleftAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - NULL); - XtAddCallback(quit_btn, XmNactivateCallback, quit, 0); - help_btn = XtVaCreateManagedWidget("Help", xmPushButtonWidgetClass, - form, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - /* XmNshowAsDefault, TRUE, */ - NULL); - XtAddCallback(help_btn, XmNactivateCallback, help, 0); - sep = XtVaCreateManagedWidget("sep", xmSeparatorWidgetClass, - form, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_WIDGET, - XmNbottomWidget, quit_btn, - NULL); - lbl_form = XtVaCreateManagedWidget("lbl_form", xmFormWidgetClass, - form, - XmNspacing, 0, - XmNleftAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_WIDGET, - XmNbottomWidget, sep, - NULL); - old_lbl = XtVaCreateManagedWidget("old_lbl", xmLabelWidgetClass, - lbl_form, - XmNtopAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - NULL); - new_lbl = XtVaCreateManagedWidget("new_lbl", xmLabelWidgetClass, - lbl_form, - XmNtopAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - NULL); - again_lbl = XtVaCreateManagedWidget("again_lbl", xmLabelWidgetClass, - lbl_form, - XmNtopAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - NULL); - prompt_text = XtVaCreateManagedWidget("prompt_text", xmTextWidgetClass, - form, - XmNeditMode, XmSINGLE_LINE_EDIT, - XmNleftAttachment, XmATTACH_WIDGET, - XmNleftWidget, lbl_form, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_WIDGET, - XmNbottomWidget, sep, - NULL); - XtAddCallback(prompt_text, XmNactivateCallback, unset_looping, 0); - XtVaGetValues(prompt_text, XmNbackground, &bg, NULL); - XtVaSetValues(prompt_text, XmNforeground, bg, NULL); - - main_lbl = XtVaCreateWidget("main_lbl", xmLabelWidgetClass, - form, - XmNtopAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - NULL); - scroll_win = XtVaCreateManagedWidget("scroll_win", - xmScrolledWindowWidgetClass, - form, - XmNscrollingPolicy, XmAPPLICATION_DEFINED, - XmNscrollBarDisplayPolicy, XmSTATIC, - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, main_lbl, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_WIDGET, - XmNbottomWidget, prompt_text, - NULL); - scroll_text = XtVaCreateManagedWidget("scroll_text", xmTextWidgetClass, - scroll_win, - XmNeditMode, XmMULTI_LINE_EDIT, - XmNeditable, FALSE, - NULL); - XtRealizeWidget(toplevel); -} - - -/*************************************************************************** - * - * - */ -static long -read_password(password, pwsize) - char *password; - int *pwsize; -{ - XEvent event; - char *text_val; - - /* OK, this next part is gross... but this is due to the fact that */ - /* this is not your traditional X program, which would be event */ - /* driven. Instead, this program is more 'CLI' in nature, so we */ - /* handle the dialogs synchronously... */ - - XtVaSetValues(prompt_text, XmNmaxLength, *pwsize, XmNvalue, "", NULL); - for (looping=1; looping; ) - { - XtAppNextEvent(app_con, &event); - XtDispatchEvent(&event); - } - XtVaGetValues(prompt_text, XmNvalue, &text_val, NULL); - *pwsize = strlen(text_val); - strcpy(password, text_val); - memset(text_val, 0, *pwsize); - XtVaSetValues(prompt_text, XmNvalue, text_val, NULL); - return(0); -} - - -/*************************************************************************** - * - * - */ -void -display_intro_message(fmt_string, arg_string) - const char *fmt_string; - const char *arg_string; -{ - XmString xmstr; - char buf[1024]; - - snprintf(buf, sizeof(buf), fmt_string, arg_string); - - xmstr = XmStringCreateLtoR(buf, XmSTRING_DEFAULT_CHARSET); - XtVaSetValues(main_lbl, XmNlabelString, xmstr, NULL); - XmStringFree(xmstr); - XtManageChild(main_lbl); -} - - -long -read_old_password(context, password, pwsize) - krb5_context context; - char *password; - unsigned int *pwsize; -{ - long code; - - XtManageChild(old_lbl); - code = read_password(password, pwsize); - SetWatchCursor(); - return code; -} - -long -read_new_password(server_handle, password, pwsize, msg_ret, princ) - void *server_handle; - char *password; - unsigned int *pwsize; - char *msg_ret; - krb5_principal princ; -{ - char *password2 = (char *) malloc(*pwsize * sizeof(char)); - int pwsize2 = *pwsize; - - SetStandardCursor(); - - if (password2 == NULL) - { - strcpy(msg_ret, error_message(ENOMEM)); - SetWatchCursor(); - return(ENOMEM); - } - - XtManageChild(new_lbl); XtUnmanageChild(old_lbl); - read_password(password, pwsize); - XtManageChild(again_lbl); XtUnmanageChild(new_lbl); - read_password(password2, &pwsize2); - - if (strcmp(password, password2)) - { - memset(password, 0, *pwsize); - - memset(password2, 0, pwsize2); - free(password2); - - strcpy(msg_ret, string_text(CHPASS_UTIL_NEW_PASSWORD_MISMATCH)); - SetWatchCursor(); - return(KRB5_LIBOS_BADPWDMATCH); - } - - memset(password2, 0, pwsize2); - free(password2); - - SetWatchCursor(); - return (ovsec_kadm_chpass_principal_util(server_handle, princ, password, - NULL /* don't need new pw back */, - msg_ret)); -} - - -/*************************************************************************** - * - * - */ -void -main(argc, argv) - int argc; - char *argv[]; -{ - krb5_context context; - int code; - - initialize_kpasswd_strings(); - - whoami = (whoami = strrchr(argv[0], '/')) ? whoami + 1 : argv[0]; - - (void) set_com_err_hook(motif_com_err); - - create_widgets(&argc, argv); - XmProcessTraversal(prompt_text, XmTRAVERSE_CURRENT); - - if (retval = krb5_init_context(&context)) { - com_err(whoami, retval, "initializing krb5 context"); - exit(retval); - } - - while (1) - { - retval = kpasswd(context, argc, argv); - SetStandardCursor(); - - if (!retval) - com_err(0, 0, string_text(KPW_STR_PASSWORD_CHANGED)); - - if (retval == 0) /* 0 is success, so presumably the user */ - /* is done. */ - XmProcessTraversal(quit_btn, XmTRAVERSE_CURRENT); - - if ((retval == 1) || /* the rest are "fatal", so we should */ - (retval == 3) || /* "force" the user to quit... */ - (retval == 6) || - (retval == 7)) - { - XtSetSensitive(prompt_text, FALSE); - XmProcessTraversal(quit_btn, XmTRAVERSE_CURRENT); - XtAppMainLoop(app_con); - } - } - - /* NOTREACHED */ - exit(retval); -} |