/* authenticate.c */ #include "ml.h" Menu login_menu[] = { { NULL, "login_done", NUL_TERM, login_done, NULL, 0, NULL, NULL, 0 }, { NULL, "login_abort", NUL_TERM, login_abort, NULL, 0, NULL, NULL, 0 }, { NULL, "login_HELP", NUL_TERM, login_help, NULL, 0, NULL, NULL, 0 }, }; #ifdef __STDC__ Remote_Auth *new_remote_auth(void) #else Remote_Auth *new_remote_auth() #endif { Remote_Auth *remote_auth = (Remote_Auth *) fs_get(sizeof(Remote_Auth)); remote_auth->config = NULL; remote_auth->hostname = NULL; remote_auth->authtype = NULL; remote_auth->username = NULL; remote_auth->password = NULL; remote_auth->workspace = NULL; remote_auth->done = 0; remote_auth->timer = (XtIntervalId) 0; remote_auth->next = NULL; return(remote_auth); } #ifdef __STDC__ void free_remote_auth(Remote_Auth *remote_auth) #else void free_remote_auth(remote_auth) Remote_Auth *remote_auth; #endif { if(remote_auth) { if(remote_auth->password) { wipeout(remote_auth->password); fs_give((void **) &remote_auth->password); } if(remote_auth->workspace) fs_give((void **) &remote_auth->workspace); if(remote_auth->username) fs_give((void **) &remote_auth->username); if(remote_auth->hostname) fs_give((void **) &remote_auth->hostname); if(remote_auth->authtype) fs_give((void **) &remote_auth->authtype); fs_give((void **) &remote_auth); } return; } #ifdef __STDC__ Remote_Auth * login(Widget w, Server_Config *config, char *where, char *type, char *defuser, char *defpass) #else Remote_Auth * login(w, config, where, type, defuser, defpass) Widget w; Server_Config *config; char *where; char *type; char *defuser; char *defpass; #endif { Arg args[ARGLISTSIZE]; char buff[FILEBUFFLEN]; XtTranslations translations; int n = 0; int i; char *unknown = MLGetLocalized(XtNstrUnknown,StrUnknown); Widget form, menubar, label1, label2, label3; XmString xstr = NULL; Remote_Auth *remote_auth = new_remote_auth(); remote_auth->config = config; remote_auth->hostname = cpystr((where) ? where : unknown); remote_auth->workspace = (char *) fs_get(FILEBUFFLEN + 1); remote_auth->workspace[0] = NUL_TERM; remote_auth->authtype = cpystr((type) ? type : EMPTYSTR ); if(preferences.autoPlace == TRUE) { XtSetArg(args[n], XtNx, -1000); n ++; XtSetArg(args[n], XtNy, -1000); n ++; } XtSetArg (args[n], XmNdeleteResponse, XmDO_NOTHING); n ++; remote_auth->shell = XtCreatePopupShell("authenticate", topLevelShellWidgetClass, w, args, n); AddDestroyCallback (remote_auth->shell); n = 0; setup_editres(remote_auth->shell); if(pirate_icon != (Pixmap) None) XtVaSetValues(remote_auth->shell, XmNiconPixmap,pirate_icon, NULL); form = XmCreateForm(remote_auth->shell, "authenticate_form", args, n); n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n ++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n ++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n ++; menubar = XmCreateMenuBar(form,"authenticate_menubar", args, n); n = 0; XtManageChild(menubar); create_buttons(NULL, menubar, login_menu, XtNumber(login_menu), BTN_ON, (XtPointer) remote_auth, ROOTMENULEVEL); XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n ++; XtSetArg(args[n], XmNtopWidget, menubar); n ++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n ++; XtSetArg(args[n], XmNborderWidth, 0); n ++; sprintf(buff, MLGetLocalized(XtNmsgAuthenticateTo,MsgAuthenticateTo), (where) ? where : unknown); xstr = XmStringCreateSimple(buff); XtSetArg(args[n], XmNlabelString,xstr); n ++; label1 = XmCreateLabel(form,"authenticate_where_lbl",args,n); n = 0; XtManageChild(label1); XmStringFree(xstr); XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n ++; XtSetArg(args[n], XmNtopWidget, label1); n ++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n ++; XtSetArg(args[n], XmNborderWidth, 0); n ++; label2 = XmCreateLabel(form,"authenticate_name_lbl", args, n); n = 0; XtManageChild(label2); XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n ++; XtSetArg(args[n], XmNtopWidget, label1); n ++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n ++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n ++; XtSetArg(args[n], XmNleftWidget,label2); n ++; remote_auth->name = XmCreateTextField(form,"authenticate_name_textfld", args, n); n = 0; XtManageChild(remote_auth->name); if(defuser) AppendText(remote_auth->name,defuser); translations = XtParseTranslationTable(GLOBAL_text_field_translations); XtOverrideTranslations(remote_auth->name,translations); translations = XtParseTranslationTable(GLOBAL_nonterminal_text_field_translations); XtOverrideTranslations(remote_auth->name,translations); XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n ++; XtSetArg(args[n], XmNtopWidget, remote_auth->name); n ++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n ++; XtSetArg(args[n], XmNborderWidth, 0); n ++; label3 = XmCreateLabel(form,"authenticate_pass_lbl", args, n); n = 0; XtManageChild(label3); XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n ++; XtSetArg(args[n], XmNtopWidget, remote_auth->name); n ++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n ++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n ++; XtSetArg(args[n], XmNleftWidget,label3); n ++; remote_auth->pass = XmCreateTextField(form,"authenticate_pass_textfld", args, n); n = 0; XtManageChild(remote_auth->pass); if(defpass) { strcpy(remote_auth->workspace,defpass); for(i = 0; i < (int) strlen(remote_auth->workspace); i ++) AppendText(remote_auth->pass,PASSWD_STR); } XtAddCallback(remote_auth->pass, XmNactivateCallback, (XtCallbackProc) login_done, remote_auth); XtAddCallback(remote_auth->pass, XmNmodifyVerifyCallback, (XtCallbackProc) passwd_edit, remote_auth); translations = XtParseTranslationTable(GLOBAL_text_field_translations); XtOverrideTranslations(remote_auth->pass,translations); translations = XtParseTranslationTable(GLOBAL_terminal_text_field_translations); XtOverrideTranslations(remote_auth->pass,translations); XtAddCallback(remote_auth->shell, XmNpopdownCallback, (XtCallbackProc) auth_destroy, remote_auth); XtManageChild(form); XtManageChild(remote_auth->shell); XmProcessTraversal(remote_auth->pass, XmTRAVERSE_CURRENT); XtPopup(remote_auth->shell,XtGrabExclusive); position_popup_widget(remote_auth->shell, TRUE); remote_auth->timer = XtAppAddTimeOut(context, LOGINREFRESH, (XtTimerCallbackProc)auth_refresh, remote_auth); push_cursor(PIRATE_CURSOR); modal_main_loop(&remote_auth->done); XtRemoveTimeOut(remote_auth->timer); remote_auth->timer = (XtIntervalId) 0; XtPopdown(remote_auth->shell); XtDestroyWidget(remote_auth->shell); pop_cursor(); return(remote_auth); } #ifdef __STDC__ void login_done(Widget w, Remote_Auth *remote_auth, XtPointer xp) #else void login_done(w,remote_auth,xp) Widget w; Remote_Auth *remote_auth; XtPointer xp; #endif { remote_auth->username = XmTextGetString(remote_auth->name); remote_auth->password = scramble(remote_auth->workspace); wipeout(remote_auth->workspace); fs_give((void **) &remote_auth->workspace); remote_auth->done = MODAL_LOOP_DONE; return; } #ifdef __STDC__ void auth_refresh(Remote_Auth *remote_auth, XtIntervalId *id) #else void auth_refresh(remote_auth,id) Remote_Auth *remote_auth; XtIntervalId *id; #endif { de_iconify(remote_auth->shell); remote_auth->timer = XtAppAddTimeOut(context, LOGINREFRESH, (XtTimerCallbackProc) auth_refresh, remote_auth); return; } #ifdef __STDC__ void auth_destroy(Widget w, Remote_Auth *remote_auth, XtPointer xp) #else void auth_destroy(w,remote_auth,xp) Widget w; Remote_Auth *remote_auth; XtPointer xp; #endif { remote_auth->done = MODAL_LOOP_DONE; return; } #ifdef __STDC__ void login_abort(Widget w, Remote_Auth *remote_auth, XtPointer xp) #else void login_abort(w, remote_auth, xp) Widget w; Remote_Auth *remote_auth; XtPointer xp; #endif { remote_auth->username = NULL; remote_auth->password = NULL; wipeout(remote_auth->workspace); fs_give((void **) &remote_auth->workspace); remote_auth->done = MODAL_LOOP_DONE; return; } #ifdef __STDC__ void login_help(Widget w, Remote_Auth *remote_auth, XtPointer xp) #else void login_help(w,remote_auth, xp) Widget w; Remote_Auth *remote_auth; XtPointer xp; #endif { help(remote_auth->shell, AUTHENTICATEHELPFILE); return; }