/*---------------------------------------------------------------------- Call the system to change the passwd It would be nice to talk to the passwd program via a pipe or ptty so the user interface could be consistent, but we can't count on the the prompts and responses from the passwd program to be regular so we just let the user type at the passwd program with some screen space, hope he doesn't scroll off the top and repaint when he's done. ----*/ void change_passwd(void) { #ifdef PASSWD_PROG char cmd_buf[100]; ClearLines(1, ps_global->ttyo->screen_rows - 1); MoveCursor(5, 0); fflush(stdout); PineRaw(0); strncpy(cmd_buf, PASSWD_PROG, sizeof(cmd_buf)); cmd_buf[sizeof(cmd_buf)-1] = '\0'; system(cmd_buf); sleep(3); PineRaw(1); #endif /* PASSWD_PROG */ }
/*---------------------------------------------------------------------- End use of the tty, put it back into it's normal mode (UNIX) Args: ps -- struct pine Result: tty driver mode change. ----------------------------------------------------------------------*/ void end_tty_driver(struct pine *ps) { ps = ps; /* get rid of unused parameter warning */ #ifdef MOUSE end_mouse(); #endif /* MOUSE */ fflush(stdout); dprint((2, "about to end_tty_driver\n")); tty_chmod(ps, 0, TMD_RESET); PineRaw(0); }
/*---------------------------------------------------------------------- Initialize the tty driver to do single char I/O and whatever else (UNIX) Args: struct pine Result: tty driver is put in raw mode so characters can be read one at a time. Returns -1 if unsuccessful, 0 if successful. Some file descriptor voodoo to allow for pipes across vforks. See open_mailer for details. ----------------------------------------------------------------------*/ int init_tty_driver(struct pine *ps) { #ifdef MOUSE if(F_ON(F_ENABLE_MOUSE, ps_global)) init_mouse(); #endif /* MOUSE */ /* turn off talk permission by default */ if(F_ON(F_ALLOW_TALK, ps)) allow_talk(ps); else disallow_talk(ps); return(PineRaw(1)); }
/*---------------------------------------------------------------------- Handle cleaning up mail streams and tty modes... Not much to do. Rely on periodic mail file check pointing. Don't try cleaning up screen or flushing output since stdout is likely already gone. To be safe, though, we'll at least restore the original tty mode. Also delete any remnant _DATAFILE_ from sending-filters. ----------------------------------------------------------------------*/ void fast_clean_up(void) { #if !defined(DOS) && !defined(OS2) int i; MAILSTREAM *m; #endif dprint((1, "fast_clean_up()\n")); if(ps_global->expunge_in_progress) { PineRaw(0); return; } /* * This gets rid of temporary cache files for remote addrbooks. */ completely_done_with_adrbks(); /* * This flushes out deferred changes and gets rid of temporary cache * files for remote config files. */ if(ps_global->prc) { if(ps_global->prc->outstanding_pinerc_changes) write_pinerc(ps_global, Main, cleanup_called_from_sig_handler ? WRP_NOUSER : WRP_NONE); if(ps_global->prc->rd) rd_close_remdata(&ps_global->prc->rd); free_pinerc_s(&ps_global->prc); } /* as does this */ if(ps_global->post_prc) { if(ps_global->post_prc->outstanding_pinerc_changes) write_pinerc(ps_global, Post, cleanup_called_from_sig_handler ? WRP_NOUSER : WRP_NONE); if(ps_global->post_prc->rd) rd_close_remdata(&ps_global->post_prc->rd); free_pinerc_s(&ps_global->post_prc); } /* * Can't figure out why this section is inside the ifdef, but no * harm leaving it that way, I guess. */ #if !defined(DOS) && !defined(OS2) for(i = 0; i < ps_global->s_pool.nstream; i++) { m = ps_global->s_pool.streams[i]; if(m && !m->lock) pine_mail_actually_close(m); } PineRaw(0); #endif /* !DOS */ imap_flush_passwd_cache(TRUE); dprint((1, "done with fast_clean_up\n")); }