Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=fwsetup-ng.git;a=commitdiff;h=700118ccef6a8b21948c86570bc531f0b6d6bfd5
commit 700118ccef6a8b21948c86570bc531f0b6d6bfd5 Author: James Buren <[email protected]> Date: Fri Sep 7 00:40:28 2012 -0500 add initial function for root password entry window diff --git a/src/local.h b/src/local.h index 01c9bbb..5e7bfa6 100644 --- a/src/local.h +++ b/src/local.h @@ -32,7 +32,7 @@ struct install struct account { - char *name; + char *user; char *password; char *group; char *groups; @@ -49,7 +49,7 @@ struct module extern bool mkdir_recurse(const char *path); extern bool size_to_string(char *s,size_t n,long long size,bool pad); -extern int get_text_length(const char *s) +extern int get_text_length(const char *s); extern int get_text_screen_width(const char *s); extern bool get_text_screen_size(const char *text,int *width,int *height); extern bool get_button_screen_size(const char *text,int *width,int *height); @@ -60,6 +60,7 @@ extern int ui_main(int argc,char **argv); extern void ui_dialog_text(const char *title,const char *text); extern bool ui_dialog_yesno(const char *title,const char *text,bool defaultno); extern bool ui_dialog_progress(const char *title,const char *text,int percent); +extern bool ui_window_root(const char *title,const char *text,struct account *data); extern bool ui_window_install(const char *title,struct install *groups); extern FILE *logfile; extern int main(int argc,char **argv); diff --git a/src/text.h b/src/text.h index 8194472..f5d0872 100644 --- a/src/text.h +++ b/src/text.h @@ -7,11 +7,13 @@ #define NO_BUTTON_TEXT _("No") #define PREVIOUS_BUTTON_TEXT _("Previous") #define NEXT_BUTTON_TEXT _("Next") - -#define PROGRESS_DIALOG_CANCEL_TEXT _("Progress dialog callback canceled the operation.\n") -#define NEWT_INIT_FAILURE_TEXT _("Could not initialize the NEWT user interface.\n") -#define NEWT_TOO_SMALL_TEXT _("We require a terminal of 80x24 or greater to use the NEWT user interface.\n") -#define NEWT_WINDOW_FAILURE_TEXT _("Failed to open a NEWT window.\n") +#define PASSWORD_ENTER_TEXT _("Enter password:") +#define PASSWORD_CONFIRM_TEXT _("Confirm password:") +#define PASSWORD_LENGTH 6 +#define PASSWORD_SHORT_TITLE _("Passwords Too Short") +#define PASSWORD_SHORT_TEXT _("Your passwords must be at least 6 characters long.\n") +#define PASSWORD_MISMATCH_TITLE _("Passwords Do Not Match") +#define PASSWORD_MISMATCH_TEXT _("The passwords you have entered do not match.\n") #define INSTALL_TITLE_TEXT _("Package Group Selection") #define INSTALL_WINDOW_TEXT _( \ diff --git a/src/ui_newt.c b/src/ui_newt.c index cb0fbe7..c750ad9 100644 --- a/src/ui_newt.c +++ b/src/ui_newt.c @@ -21,7 +21,7 @@ extern int ui_main(int argc,char **argv) if(newtInit() != 0) { - fprintf(logfile,NEWT_INIT_FAILURE_TEXT); + fprintf(logfile,_("Could not initialize the NEWT user interface.\n")); return 1; } @@ -29,7 +29,7 @@ extern int ui_main(int argc,char **argv) if(w < 80 || h < 24) { - fprintf(logfile,NEWT_TOO_SMALL_TEXT); + fprintf(logfile,_("We require a terminal of 80x24 or greater to use the NEWT user interface.\n")); newtFinished(); return 1; } @@ -101,7 +101,7 @@ extern void ui_dialog_text(const char *title,const char *text) if(newtCenteredWindow(NEWT_WIDTH,NEWT_HEIGHT,title) != 0) { - fprintf(logfile,NEWT_WINDOW_FAILURE_TEXT); + fprintf(logfile,_("Failed to open a NEWT window.\n")); return; } @@ -163,7 +163,7 @@ extern bool ui_dialog_yesno(const char *title,const char *text,bool defaultno) if(newtCenteredWindow(NEWT_WIDTH,NEWT_HEIGHT,title) != 0) { - fprintf(logfile,NEWT_WINDOW_FAILURE_TEXT); + fprintf(logfile,_("Failed to open a NEWT window.\n")); return false; } @@ -234,7 +234,7 @@ extern bool ui_dialog_progress(const char *title,const char *text,int percent) { if(newtCenteredWindow(NEWT_WIDTH,3,title) != 0) { - fprintf(logfile,NEWT_WINDOW_FAILURE_TEXT); + fprintf(logfile,_("Failed to open a NEWT window.\n")); return false; } @@ -260,6 +260,121 @@ extern bool ui_dialog_progress(const char *title,const char *text,int percent) return true; } +extern bool ui_window_root(const char *title,const char *text,struct account *data) +{ + int textbox_width = 0; + int textbox_height = 0; + int label1_width = 0; + int label1_height = 0; + int label2_width = 0; + int label2_height = 0; + int entry1_width = 0; + int entry1_height = 0; + int entry2_width = 0; + int entry2_height = 0; + int next_width = 0; + int next_height = 0; + newtComponent textbox = 0; + newtComponent label1 = 0; + newtComponent entry1 = 0; + const char *password1 = 0; + newtComponent label2 = 0; + newtComponent entry2 = 0; + const char *password2 = 0; + newtComponent next = 0; + newtComponent form = 0; + struct newtExitStruct es = {0}; + + if(title == 0 || text == 0 || data == 0) + { + errno = EINVAL; + fprintf(logfile,"%s: %s\n",__func__,strerror(errno)); + return false; + } + + if(!get_text_screen_size(text,&textbox_width,&textbox_height)) + return false; + + if(!get_label_screen_size(PASSWORD_ENTER_TEXT,&label1_width,&label1_height)) + return false; + + if(!get_label_screen_size(PASSWORD_CONFIRM_TEXT,&label2_width,&label2_height)) + return false; + + entry1_width = NEWT_WIDTH - label1_width; + + entry1_height = label1_height; + + entry2_width = NEWT_WIDTH - label2_width; + + entry2_height = label2_height; + + if(!get_button_screen_size(NEXT_BUTTON_TEXT,&next_width,&next_height)) + return false; + + if(newtCenteredWindow(NEWT_WIDTH,NEWT_HEIGHT,title) != 0) + { + fprintf(logfile,_("Failed to open a NEWT window.\n")); + return false; + } + + textbox = newtTextbox(0,0,textbox_width,textbox_height,0); + + label1 = newtLabel(0,textbox_height,PASSWORD_ENTER_TEXT); + + entry1 = newtEntry(label1_width,textbox_height,"",entry1_width,&password1,NEWT_FLAG_PASSWORD); + + label2 = newtLabel(0,textbox_height+label1_height,PASSWORD_CONFIRM_TEXT); + + entry2 = newtEntry(label2_width,textbox_height+label1_height,"",entry2_width,&password2,NEWT_FLAG_PASSWORD); + + next = newtButton(NEWT_WIDTH-next_width,NEWT_HEIGHT-next_height,NEXT_BUTTON_TEXT); + + form = newtForm(0,0,NEWT_FLAG_NOF12); + + newtFormAddComponents(form,textbox,label1,entry1,label2,entry2,next,(void *) 0); + + while(true) + { + newtFormRun(form,&es); + + if(es.reason == NEWT_EXIT_COMPONENT && es.u.co == next) + { + if(get_text_length(password1) < PASSWORD_LENGTH || get_text_length(password2) < PASSWORD_LENGTH) + { + ui_dialog_text(PASSWORD_SHORT_TITLE,PASSWORD_SHORT_TEXT); + continue; + } + + if(strcmp(password1,password2) != 0) + { + ui_dialog_text(PASSWORD_MISMATCH_TITLE,PASSWORD_MISMATCH_TEXT); + continue; + } + + break; + } + } + + data->user = strdup("root"); + + data->password = strdup(password1); + + data->group = strdup("root"); + + data->groups = 0; + + data->home = strdup("/root"); + + data->shell = strdup("/bin/bash"); + + newtFormDestroy(form); + + newtPopWindow(); + + return true; +} + extern bool ui_window_install(const char *title,struct install *data) { int textbox_width = 0; @@ -289,7 +404,7 @@ extern bool ui_window_install(const char *title,struct install *data) if(newtCenteredWindow(NEWT_WIDTH,NEWT_HEIGHT,title) != 0) { - fprintf(logfile,NEWT_WINDOW_FAILURE_TEXT); + fprintf(logfile,_("Failed to open a NEWT window.\n")); return 0; } _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
