diff --git a/source/ubl-settings-usergroups-additional-config.c b/source/ubl-settings-usergroups-additional-config.c index e99741d..b600f19 100644 --- a/source/ubl-settings-usergroups-additional-config.c +++ b/source/ubl-settings-usergroups-additional-config.c @@ -23,9 +23,28 @@ void on_additional_settings_clicked(GtkWidget *, GtkEntry *){ } -void on_passwords_encrypt(){ - int pid = fork(); - if (!pid){ - exit(system(encrypt_passwords_command)); +gboolean on_encrypt_update(dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + ubl_settings_usergroups_additional_settings_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_additional_settings_window*); + gtk_widget_destroy(window->Window); + yon_load_proceed((YON_CONFIG_TYPE)main_config.load_mode); + yon_interface_update(widgets); + return G_SOURCE_REMOVE; +} + +void *yon_passwords_encrypt(dictionary *dict){ + int exitstatus = system(encrypt_passwords_command); + if (!exitstatus){ + yon_ubl_status_box_render_thread(yon_char_get_localised_from_lib(SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + g_idle_add((GSourceFunc)on_encrypt_update,dict); + + } else { + yon_ubl_status_box_render_thread(yon_char_get_localised_from_lib(FAIL_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + } + g_thread_exit(NULL); +} + +void on_passwords_encrypt(GtkWidget*,dictionary *dict){ + g_thread_new("encrypt_all_passwords_thread",(GThreadFunc)yon_passwords_encrypt,dict); } \ No newline at end of file diff --git a/source/ubl-settings-usergroups-group.c b/source/ubl-settings-usergroups-group.c index 5f6a2da..182d78b 100644 --- a/source/ubl-settings-usergroups-group.c +++ b/source/ubl-settings-usergroups-group.c @@ -193,9 +193,11 @@ void on_group_save(GtkWidget *self, dictionary *dict){ int password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PasswordCombo)); - if (password_active == 1) { - password = "!*"; - } else if (password_active == 2){ + if (password_active == 0){ + password = ""; + } else if (password_active ==5){ + password = " "; + } else if (password_active == 1){ password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); if (yon_char_is_empty(password)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); @@ -203,8 +205,25 @@ void on_group_save(GtkWidget *self, dictionary *dict){ yon_ubl_status_highlight_incorrect(window->PasswordEntry); return; } - } else { - password=""; + } else if (password_active==2){ + password = "!*"; + } else if (password_active ==3){ + password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); + if (password[0]!='!') { + char *temp = yon_char_append("!",password); + password=temp; + } + } else if (password_active == 4){ + password = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry))); + if (yon_char_is_empty(password)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->PasswordEntry); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + return; + } + if (password[0]=='!'){ + free(yon_char_divide(password,0)); + } } final_string = yon_char_unite(yon_char_return_if_exist(group_users,""), ":",yon_char_return_if_exist(gid,"x"), diff --git a/source/ubl-settings-usergroups-password.c b/source/ubl-settings-usergroups-password.c index 8eef247..ebe7fb8 100644 --- a/source/ubl-settings-usergroups-password.c +++ b/source/ubl-settings-usergroups-password.c @@ -25,7 +25,7 @@ void on_password_change(GtkWidget *, dictionary *entry_dict){ dictionary *dict = NULL; char *password = (char*)gtk_entry_get_text(output_target); if (!yon_char_is_empty(password)){ - if (main_config.load_mode==0){ + if (main_config.load_mode==YON_CONFIG_GLOBAL){ password = yon_char_new(password); if (!check_is_password_hash(password)){ gtk_entry_set_text(GTK_ENTRY(window->PasswordHashEntry),password); @@ -105,6 +105,19 @@ void on_password_accept(GtkWidget *self, dictionary *dict){ on_subwindow_close(self); } +void on_password_hash_sensitiveness(GtkWidget *,ubl_settings_usergroups_password_window *window){ + if (!yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)))||!yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(window->RepeatPasswordEntry)))){ + gtk_widget_set_sensitive(window->HashBox,0); + gtk_widget_set_sensitive(window->PasswordBox,1); + } else if (!yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(window->PasswordHashEntry)))) { + gtk_widget_set_sensitive(window->HashBox,1); + gtk_widget_set_sensitive(window->PasswordBox,0); + } else { + gtk_widget_set_sensitive(window->HashBox,1); + gtk_widget_set_sensitive(window->PasswordBox,1); + } +} + ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_new(){ ubl_settings_usergroups_password_window *window = malloc(sizeof(ubl_settings_usergroups_password_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_password); @@ -123,6 +136,9 @@ ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_ne yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateGroupWindow),"PasswordWindow"); g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->PasswordEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); + g_signal_connect(G_OBJECT(window->PasswordEntry),"changed",G_CALLBACK(on_password_hash_sensitiveness),window); + g_signal_connect(G_OBJECT(window->RepeatPasswordEntry),"changed",G_CALLBACK(on_password_hash_sensitiveness),window); + g_signal_connect(G_OBJECT(window->PasswordHashEntry),"changed",G_CALLBACK(on_password_hash_sensitiveness),window); g_signal_connect(G_OBJECT(window->RepeatPasswordEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); g_signal_connect(G_OBJECT(window->PasswordHashEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),PASSWORD_TITLE_LABEL); @@ -130,22 +146,15 @@ ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_ne return window; } - int yon_check_password_blocked(char *password){ - if (!yon_char_is_empty(password)){ - if (!strcmp(password,"!*")){ - memset(password,0,strlen(password)); - return 1; - } else if (password[0]=='!'&&password[1]=='*'){ + if (!yon_char_is_empty(password)&&strlen(password)>0){ + if (password[0]=='!'&&password[1]!='*'){ char *copy = yon_char_new(password); - memcpy(copy,password+2,strlen(password+2)); + memcpy(copy,password+1,strlen(password+1)); memset(password,0,strlen(password)); memcpy(password,copy,strlen(copy)); free(copy); return 1; - } else if (password[0]=='!'||password[0]=='*'){ - free(yon_char_divide(password,0)); - return 1; } } return 0; diff --git a/source/ubl-settings-usergroups-settings.c b/source/ubl-settings-usergroups-settings.c index af0fe5d..e7d7d33 100644 --- a/source/ubl-settings-usergroups-settings.c +++ b/source/ubl-settings-usergroups-settings.c @@ -33,20 +33,33 @@ void on_additional_settings_changed(GtkWidget *self, ubl_settings_usergroups_add if (window->default_user_name) yon_config_remove_by_key(DEFAULTUSER_parameter); } - char *default_password = gtk_combo_box_get_active(GTK_COMBO_BOX(window->DefaultPasswordCombo))>1? (char*)gtk_entry_get_text(GTK_ENTRY(window->DefaultPasswordEntry)):NULL; + char *default_password = NULL; + int user_password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->DefaultPasswordCombo)); + if (user_password_active==1) + default_password=(char*)gtk_entry_get_text(GTK_ENTRY(window->DefaultPasswordEntry)); + else if (user_password_active==2) + default_password=" "; + else if (user_password_active==3){ + default_password="!*"; + } if (!yon_char_is_empty(default_password)){ - if (window->default_password) + // if (window->default_password) yon_config_register(DEFAULTPASSWD_parameter,DEFAULTPASSWD_parameter_command,default_password); } else { - if (window->default_password) + // if (window->default_password) yon_config_remove_by_key(DEFAULTPASSWD_parameter); } - char *root_password = gtk_combo_box_get_active(GTK_COMBO_BOX(window->RootPasswordCombo)) > 1 ? (char*)gtk_entry_get_text(GTK_ENTRY(window->RootPasswordEntry)) : NULL; + char *root_password = NULL; + int root_password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->RootPasswordCombo)); + if (root_password_active==1) + root_password=(char*)gtk_entry_get_text(GTK_ENTRY(window->RootPasswordEntry)); + else if (root_password_active==2) + root_password=" "; if (!yon_char_is_empty(root_password)){ - if (window->default_root_password) + // if (window->default_root_password) yon_config_register(DEFAULTROOTPASSWD_parameter,DEFAULTROOTPASSWD_parameter_command,root_password); } else { - if (window->default_root_password) + // if (window->default_root_password) yon_config_remove_by_key(DEFAULTROOTPASSWD_parameter); } int user_k_admin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultUserAdministratorCheck)); @@ -658,17 +671,30 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_ g_signal_connect(G_OBJECT(window->RootPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->RootPasswordButton); g_signal_connect(G_OBJECT(window->DefaultPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->DefaultPasswordButton); - char *default_password = yon_config_get_by_key(DEFAULTPASSWD_parameter); - if (!yon_char_is_empty(default_password)){ - gtk_entry_set_text(GTK_ENTRY(window->DefaultPasswordEntry),default_password); - if(!yon_config_check_ignore(DEFAULTPASSWD_parameter)) - gtk_combo_box_set_active(GTK_COMBO_BOX(window->DefaultPasswordCombo),2); + if (!yon_config_check_default(DEFAULTPASSWD_parameter)){ + char *default_password = yon_config_get_by_key(DEFAULTPASSWD_parameter); + if (!yon_char_is_empty(default_password)){ + if (!strcmp(default_password," ")){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->DefaultPasswordCombo),2); + } else if (!strcmp(default_password,"!*")){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->DefaultPasswordCombo),3); + + } else { + gtk_combo_box_set_active(GTK_COMBO_BOX(window->DefaultPasswordCombo),1); + gtk_entry_set_text(GTK_ENTRY(window->DefaultPasswordEntry),default_password); + } + } } + if (!yon_config_check_default(DEFAULTROOTPASSWD_parameter)){ char *root_password = yon_config_get_by_key(DEFAULTROOTPASSWD_parameter); - if (!yon_char_is_empty(root_password)){ - gtk_entry_set_text(GTK_ENTRY(window->RootPasswordEntry),root_password); - if(!yon_config_check_ignore(DEFAULTROOTPASSWD_parameter)) - gtk_combo_box_set_active(GTK_COMBO_BOX(window->RootPasswordCombo),2); + if (!yon_char_is_empty(root_password)){ + if (!strcmp(root_password," ")){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->RootPasswordCombo),2); + } else { + gtk_combo_box_set_active(GTK_COMBO_BOX(window->RootPasswordCombo),1); + gtk_entry_set_text(GTK_ENTRY(window->RootPasswordEntry),root_password); + } + } } char *is_k_admin = yon_config_get_by_key(ADDADM_parameter); if (!yon_char_is_empty(is_k_admin)) @@ -717,12 +743,7 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_ yon_dictionary_add_or_create_if_exists_with_data(root_dict,"entry",window->RootPasswordEntry); g_signal_connect(G_OBJECT(window->DefaultPasswordButton),"clicked",G_CALLBACK(on_password_change),default_dict); g_signal_connect(G_OBJECT(window->RootPasswordButton),"clicked",G_CALLBACK(on_password_change),root_dict); - dialog_confirmation_data *data=malloc(sizeof(dialog_confirmation_data)); - data->function=on_passwords_encrypt; - data->action_text = ENCRYPT_SURE_LABEL; - data->data=NULL; - g_signal_connect(G_OBJECT(window->EncryptAllPasswordsButton),"clicked",G_CALLBACK(yon_confirmation_dialog_call),data); g_signal_connect(G_OBJECT(window->PasswordHashCombo),"changed",G_CALLBACK(on_hash_changed),window); g_signal_connect(G_OBJECT(window->DefaultUserNameEntry),"changed",G_CALLBACK(on_additional_settings_changed),window); @@ -741,6 +762,17 @@ return window; void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *, main_window *widgets){ ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new(); + + dictionary *encrypt_data = NULL; + yon_dictionary_add_or_create_if_exists_with_data(encrypt_data,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(encrypt_data,"window",window); + dialog_confirmation_data *data=yon_confirmation_dialog_data_new(); + data->function=on_passwords_encrypt; + data->action_text = ENCRYPT_SURE_LABEL; + data->data=encrypt_data; + data->title = ENCRYPT_TITLE_LABEL; + + g_signal_connect(G_OBJECT(window->EncryptAllPasswordsButton),"clicked",G_CALLBACK(yon_confirmation_dialog_call),data); gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); gtk_widget_show(window->Window); diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c index fdaa763..3cd23fd 100644 --- a/source/ubl-settings-usergroups-user.c +++ b/source/ubl-settings-usergroups-user.c @@ -392,7 +392,11 @@ void on_user_save(GtkWidget *self, dictionary *dict){ } int password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userPasswordCombo)); - if (password_active > 1){ + if (password_active == 0){ + password = ""; + } else if (password_active ==5){ + password = " "; + } else if (password_active ==1){ password = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); if (yon_char_is_empty(password)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); @@ -400,10 +404,25 @@ void on_user_save(GtkWidget *self, dictionary *dict){ gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); return; } - } else if (password_active==1){ + } else if (password_active==2){ password = "!*"; - } else { - password=""; + } else if (password_active ==3){ + password = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); + if (password[0]!='!') { + char *temp = yon_char_append("!",password); + password=temp; + } + } else if (password_active == 4){ + password = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry))); + if (yon_char_is_empty(password)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userPasswordEntry); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + return; + } + if (password[0]=='!'){ + free(yon_char_divide(password,0)); + } } char *old_password = NULL; @@ -432,6 +451,7 @@ void on_user_save(GtkWidget *self, dictionary *dict){ if (strlen(password)>1&&password[0]=='%'&&password[1]=='%'){ char *temp = yon_char_replace(password,"%%","!!"); password = yon_char_replace(temp,"!!","%%!"); + } else if (!yon_char_is_empty(password)&&password[0]=='!'){ } else { password = yon_char_append("!",password); } diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 0c4a3d4..ed7e20c 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -110,8 +110,12 @@ void yon_interface_update(main_window *widgets){ if (!check_is_password_hash(parameters[5])&¶meters[5][0]!='%'&¶meters[5][1]!='%'){ pars = ENCRYPTED_LABEL; - } else if (!strcmp(parameters[5],"!*")){ + } else if (!strcmp(parameters[5]," ")){ pars = NO_PASSWORD_LABEL; + } else if (!strcmp(parameters[5],"!*")){ + pars = DENY_LOGIN_LABEL; + } else if (parameters[5][0]=='!'){ + pars = BLOCK_LOGIN_LABEL; } else { pars = UNENCRYPTED_LABEL; @@ -121,7 +125,7 @@ void yon_interface_update(main_window *widgets){ } gtk_list_store_set(widgets->UsersList,&iter, - 0,parameters_size>5?(parameters[5][0]=='!'||parameters[5][0]=='*')||(parameters[5][0]=='!'&¶meters[5][1]=='*'):0, + 0,parameters_size>5?(parameters[5][0]=='!'&¶meters[5][1]=='*')?check_checked_icon_name:(parameters[5][0]=='!'||parameters[5][0]=='*')?check_attention_icon_name:NULL:NULL, 2,login, 3,parameters_size>0?parameters[0]:"", 1,parameters_size>1&&!yon_char_is_empty(parameters[1])?parameters[1]:"", @@ -158,8 +162,12 @@ void yon_interface_update(main_window *widgets){ if (parameters_size>4&&strcmp(parameters[4],"x")&&strcmp(parameters[4],"")){ if (!check_is_password_hash(parameters[4])&¶meters[4][0]!='%'&¶meters[4][1]!='%'){ pars = ENCRYPTED_LABEL; - } else if (!strcmp(parameters[4],"!*")||!strcmp(parameters[4],"*")||!strcmp(parameters[4],"!")){ + } else if (!strcmp(parameters[4]," ")){ pars = NO_PASSWORD_LABEL; + } else if (!strcmp(parameters[4],"!*")){ + pars = DENY_LOGIN_LABEL; + } else if (parameters[4][0]=='!'){ + pars = BLOCK_LOGIN_LABEL; } else { pars = UNENCRYPTED_LABEL; @@ -226,7 +234,7 @@ void on_config_local_load(GtkWidget *, main_window *widgets){ textdomain(template_ui_LocaleName); yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); - main_config.load_mode=1; + main_config.load_mode=YON_CONFIG_LOCAL; yon_interface_update(widgets); } @@ -235,7 +243,7 @@ void on_config_global_load(GtkWidget *, main_window *widgets){ textdomain(template_ui_LocaleName); yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); - main_config.load_mode=0; + main_config.load_mode=YON_CONFIG_GLOBAL; yon_interface_update(widgets); } @@ -244,7 +252,7 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){ textdomain(template_ui_LocaleName); yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); - main_config.load_mode=3; + main_config.load_mode=YON_CONFIG_CUSTOM; yon_interface_update(widgets); } @@ -395,7 +403,7 @@ void yon_hide_passwords(template_saving_window *window){ free(yon_char_divide(new_value,1)); newv=new_value; } else if (!yon_char_is_empty(new_value)&&new_value[0]=='$') { - if (main_config.load_mode==1){ + if (main_config.load_mode==YON_CONFIG_LOCAL){ newv=new_value; } else { newv="*******"; @@ -404,7 +412,7 @@ void yon_hide_passwords(template_saving_window *window){ newv="*******"; } if (!yon_char_is_empty(old_value)){ - if (main_config.load_mode==1){ + if (main_config.load_mode==YON_CONFIG_LOCAL){ old = yon_char_new("*******"); } else { @@ -421,7 +429,7 @@ void yon_hide_passwords(template_saving_window *window){ free(yon_char_divide(new_value,1)); newv=new_value; } else if (!yon_char_is_empty(new_value)&&new_value[0]=='$') { - if (main_config.load_mode==1){ + if (main_config.load_mode==YON_CONFIG_LOCAL){ newv=new_value; } else { newv="*******"; @@ -430,7 +438,7 @@ void yon_hide_passwords(template_saving_window *window){ newv="*******"; } if (!yon_char_is_empty(old_value)){ - if (main_config.load_mode==1){ + if (main_config.load_mode==YON_CONFIG_LOCAL){ old = yon_char_new("*******"); } else { old = yon_char_unite("",old_value,"",NULL); @@ -451,7 +459,7 @@ void on_save_done(main_window *widgets, config_str output, int size){ } yon_char_parsed_free(output,size); on_config_update(NULL,widgets); - if (main_config.load_mode==1){ + if (main_config.load_mode==YON_CONFIG_LOCAL){ yon_accept_changes(); yon_samba_sync_proceed(); } @@ -593,62 +601,111 @@ void on_delete_confirmation_delete_check(GtkCellRenderer *, char *path, yon_conf } -void yon_delete_confirmation_save(GtkWidget *self, dictionary *dict){ - GtkTreeIter iter,itar; - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - yon_confirmation_window *window = yon_dictionary_get_data(dict->first->next,yon_confirmation_window*); - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->UsersList),&iter); - for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->UsersList),&iter)){ - char *name; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&name,-1); - int valid2 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itar); - for (;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){ - char *name_check; - int status,delete; - gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&delete,1,&name_check,3,&status,-1); - if (!strcmp(name,name_check)&&delete){ - // char *user = config(USERADD(name)); - // int size; - // config_str parsed = yon_char_parse(user,&size,":"); - // if (size>3&&(strcmp(parsed[3],name)&&strcmp(parsed[2],parsed[3]))){ - // yon_ubl_status_box_spawn_infinite(window->) - // } - gtk_list_store_remove(widgets->UsersList,&iter); - yon_config_remove_by_key(USERADD(name)); - yon_config_remove_by_key(USERSHADOW(name)); - yon_config_register(USERADD_SYNC(name),USERADD_SYNC_command(name),""); - yon_config_remove_by_key(USERADD_SYNC(name)); - yon_config_remove_by_key(USERSHADOW_SYNC(name)); - gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->UsersList),&iter); - if (status){ - if (yon_char_parsed_check_exist(main_config.remove_homes,main_config.homes_size,name)==-1){ - yon_char_parsed_add_or_create_if_exists(main_config.remove_homes,&main_config.homes_size,name); - } +char *yon_user_get_group_string(char *user){ + char *cur_user = config(USERADD(user)); + + int size; + config_str parsed = yon_char_parse(cur_user,&size,":"); + if (size>2&&!yon_char_is_empty(parsed[2])){ + char *current_group = parsed[2]; + size_t digits=0; + for (guint k=0;k2&&!strcmp(groups_parsed[2],current_group)){ + final_group_name=yon_char_new(groups_parsed[0]); + if (group_size) yon_char_parsed_free(groups_parsed,group_size); + break; } + if (group_size) yon_char_parsed_free(groups_parsed,group_size); } + } else { + final_group_name=yon_char_new(current_group); } + return final_group_name; + } else { + return user; } + return NULL; +} + +char *yon_user_check_groups(GtkListStore *list, char *target){ + char *final=""; + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(list); + for_iter(model,&iter){ char *name; - if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->UsersList),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&name,-1); - int valid2 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itar); - for (;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){ - char *name_check; - int status,delete; - gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&delete,1,&name_check,3,&status,-1); - if (!strcmp(name,name_check)&&delete){ - gtk_list_store_remove(widgets->UsersList,&iter); - yon_config_remove_by_key(USERADD(name)); - yon_config_remove_by_key(USERSHADOW(name)); - gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->UsersList),&iter); - if (status){ - if (yon_char_parsed_check_exist(main_config.remove_homes,main_config.homes_size,name)==-1){ - yon_char_parsed_add_or_create_if_exists(main_config.remove_homes,&main_config.homes_size,name); - } - } + char *group; + gtk_tree_model_get(model,&iter,1,&name,6,&group,-1); + if (!strcmp(group,target)&&strcmp(name,target)){ + char *temp = yon_char_unite(final,!yon_char_is_empty(final)?",":"",name,NULL); + if (!yon_char_is_empty(final)) free(final); + final = temp; + } + } + return !yon_char_is_empty(final)?final:NULL; +} + +void yon_delete_confirmation_save(GtkWidget *self, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + yon_confirmation_window *window = yon_dictionary_get_data(dict->first->next,yon_confirmation_window*); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(window->list); + char *single_target = NULL; + int founds = 0; + char *depends = NULL; + for_iter(model,&iter){ + int selected; + char *target; + char *group; + gtk_tree_model_get(model,&iter,0,&selected,1,&target,6,&group,-1); + if (selected&&!yon_char_is_empty(target)&&!yon_char_is_empty(group)){ + if ((!strcmp(target,group))){ + depends = yon_user_check_groups(window->list,target); + if (!yon_char_is_empty(depends)) { + single_target = target; + founds++; } } } + } + if (founds==1){ + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); + data->action_text = CONFIRMATION_GROUP_DEPENDS_SINGLE_LABEL(single_target,depends); + if(yon_confirmation_dialog_call(window->Window,data)!=GTK_RESPONSE_ACCEPT){ + return; + } + } else if (founds >1){ + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); + data->action_text = CONFIRMATION_GROUP_DEPENDS_MULTIPLE_LABEL; + if (yon_confirmation_dialog_call(window->Window,data)!=GTK_RESPONSE_ACCEPT){ + return; + } + } + + for_iter(model,&iter){ + int selected; + char *target; + gtk_tree_model_get(model,&iter,0,&selected,1,&target,-1); + if (selected){ + yon_config_remove_by_key(USERADD(target)); + yon_config_remove_by_key(USERSHADOW(target)); + yon_config_remove_by_key(USERADD_SYNC(target)); + yon_config_remove_by_key(USERSHADOW_SYNC(target)); + } + } + + yon_interface_update(widgets); + on_subwindow_close(self); } @@ -737,8 +794,8 @@ void yon_delete_confirmation_open(main_window *widgets){ } int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->UsersList),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->UsersList),&iter)){ - char *name,*username,*parameters,*homedir=NULL; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&name,3,&username,6,¶meters,-1); + char *name,*username,*parameters,*homedir=NULL, *group=NULL; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&name,3,&username,4,&group,6,¶meters,-1); int size; config_str home = yon_config_load(get_home_command(name),&size); if (size>0&&!yon_char_is_empty(home[0])){ @@ -751,7 +808,9 @@ void yon_delete_confirmation_open(main_window *widgets){ int status=0; if (homedir) status=1; gtk_list_store_append(window->list,&itar); - gtk_list_store_set(window->list,&itar,0,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1?1:0,1,name,2,homedir,3,0,4,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1&&status?1:0,5,username,-1); + group = yon_user_get_group_string(name); + + gtk_list_store_set(window->list,&itar,0,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1?1:0,1,name,2,homedir,3,0,4,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1&&status?1:0,5,username,6,group,-1); free(name); free(username); free(parameters); @@ -787,7 +846,20 @@ void on_saving_settings_open(GtkWidget *, main_window *widgets){ } void on_password_combo_changed(GtkComboBox *self, GtkWidget *target){ - gtk_widget_set_sensitive(target,gtk_combo_box_get_active(self)>1); + int active = gtk_combo_box_get_active(self); + switch(active){ + case 0: + case 2: + case 3: + case 5: + gtk_widget_set_sensitive(target,0); + break; + case 1: + case 4: + gtk_widget_set_sensitive(target,1); + break; + } + } @@ -1335,7 +1407,7 @@ void on_toggle_button_set_active_from_combo_box(GtkComboBox *self,ubl_settings_u void on_toggle_button_set_active_from_toggle_button_inversed(GtkToggleButton *, ubl_settings_usergroups_user_window *window){ char *passw = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); - if ((passw[0]!='$')&>k_combo_box_get_active(GTK_COMBO_BOX(window->userPasswordCombo))>1){ + if ((passw[0]!='$')&>k_combo_box_get_active(GTK_COMBO_BOX(window->userPasswordCombo))==1){ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck))){ gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBAPasswordCheck),0); } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck))){ @@ -1506,18 +1578,15 @@ void on_main_edit(GtkWidget *, main_window *widgets){ } } if (parsed_size>5){ - if (check_is_password_hash(parameters[5])){ - if (strcmp(parameters[5],"!*")&&!yon_char_check_begins_with(parameters[5],"%%")){ - char *temp = yon_char_append("%%",parameters[5]); - free(parameters[5]); - parameters[5]=temp; + if (strcmp(parameters[5]," ")&&!yon_char_check_begins_with(parameters[5],"!")&&!yon_char_check_begins_with(parameters[5],"*")&&!yon_char_check_begins_with(parameters[5],"%%")){ + if (check_is_password_hash(parameters[5])){ + char *temp = yon_char_append("%%",parameters[5]); + free(parameters[5]); + parameters[5]=temp; } } window->old_password=yon_char_new(parameters[5]); if (strcmp(parameters[5],"x")&&strcmp(parameters[5],"")){ - if (yon_check_password_blocked(parameters[5])){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck),1); - } if (!yon_char_is_empty(parameters[5])){ if (check_is_password_hash(parameters[5])){ if (yon_char_check_begins_with(parameters[5],"%%")==-1){ @@ -1529,10 +1598,18 @@ void on_main_edit(GtkWidget *, main_window *widgets){ g_signal_handlers_block_by_func(G_OBJECT(window->userSyncSAMBACheck),G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userSyncSAMBAPasswordCheck); } if (!strcmp(parameters[5],"!*")){ - gtk_combo_box_set_active(GTK_COMBO_BOX(window->userPasswordCombo),1); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->userPasswordCombo),2); + } else if (!strcmp(parameters[5]," ")) { + gtk_combo_box_set_active(GTK_COMBO_BOX(window->userPasswordCombo),5); + } else if (parameters[5][0]=='!'){ + char *password_or = yon_char_new(parameters[5]); + free(yon_char_divide(password_or,0)); + gtk_entry_set_text(GTK_ENTRY(window->userPasswordEntry),password_or); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->userPasswordCombo),3); + free(password_or); } else { gtk_entry_set_text(GTK_ENTRY(window->userPasswordEntry),parameters[5]); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->userPasswordCombo),2); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->userPasswordCombo),1); } } } @@ -1633,14 +1710,37 @@ void on_main_edit(GtkWidget *, main_window *widgets){ } } if (size>4){ - if (!yon_char_is_empty(parsed[4])){ - if (!strcmp(parsed[4],"!*")||!strcmp(parsed[4],"!")||!strcmp(parsed[4],"*")){ - gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),1); - gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),""); - } else if (strcmp(parsed[4],"x")){ - gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),parsed[4]); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),2); - + if (strcmp(parsed[4]," ")&&!yon_char_check_begins_with(parsed[4],"!")&&!yon_char_check_begins_with(parsed[4],"*")&&!yon_char_check_begins_with(parsed[4],"%%")){ + if (check_is_password_hash(parsed[4])){ + char *temp = yon_char_append("%%",parsed[4]); + free(parsed[4]); + parsed[4]=temp; + } + } + window->old_password=yon_char_new(parsed[4]); + if (strcmp(parsed[4],"x")&&strcmp(parsed[4],"")){ + if (!yon_char_is_empty(parsed[4])){ + if (check_is_password_hash(parsed[4])){ + if (yon_char_check_begins_with(parsed[4],"%%")==-1){ + char *temp = yon_char_append("%%",parsed[4]); + free(parsed[4]); + parsed[4]=temp; + } + } + if (!strcmp(parsed[4],"!*")){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),2); + } else if (!strcmp(parsed[4]," ")) { + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),5); + } else if (parsed[4][0]=='!'){ + char *password_or = yon_char_new(parsed[4]); + free(yon_char_divide(password_or,0)); + gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password_or); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),3); + free(password_or); + } else { + gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),parsed[4]); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),1); + } } } } else { @@ -1736,7 +1836,7 @@ void on_main_delete(GtkWidget *, main_window *widgets){ } void on_config_update(GtkWidget *, main_window *widgets){ - if (main_config.load_mode==0){ + if (main_config.load_mode==YON_CONFIG_GLOBAL){ on_config_global_load(NULL,widgets); } else { on_config_local_load(NULL,widgets); @@ -1767,7 +1867,7 @@ void config_init(){ main_config.lock_save_local=0; main_config.groups_size=0; main_config.users_size=0; - main_config.load_mode=1; + main_config.load_mode=YON_CONFIG_LOCAL; main_config.hash_default_id=-1; main_config.save_config=0; main_config.groups = yon_file_open(groups_path,&main_config.groups_size); diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index f58c439..c8fbb7c 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -87,6 +87,9 @@ #define GROUPADD_SYNC_parameter "GROUPADD_SYNC" #define GROUPADD_SYNC_parameter_command "ubconfig --source system get users USERADD_SYNC" +#define check_box_icon_name "com.ublinux.libublsettingsui-gtk3.checkbox-symbolic" +#define check_checked_icon_name "com.ublinux.libublsettingsui-gtk3.checkbox-checked-symbolic" +#define check_attention_icon_name "com.ublinux.libublsettingsui-gtk3.checkbox-attention-symbolic" #define add_icon_name "com.ublinux.ubl-settings-usergroups.increase-symbolic" #define edit_icon_name "com.ublinux.ubl-settings-usergroups.edit-symbolic" #define delete_icon_name "com.ublinux.ubl-settings-usergroups.trash-symbolic" @@ -304,6 +307,7 @@ typedef struct{ GtkWidget *MainNotebook; char *last_gid; + char *old_password; } ubl_settings_usergroups_group_creation_window; typedef struct{ @@ -566,4 +570,9 @@ void on_useradd_sync_changed(ubl_settings_usergroups_additional_settings_window void yon_gtk_login_block_symbols(GtkEntry *target); void on_login_insert_custom_restricted_check(GtkEditable *editable, const gchar *text, gint length, gint *position); void on_group_delete_toggled(GtkWidget *,gchar* path,yon_confirmation_window *window); +char *yon_user_check_groups(GtkListStore *list, char *target); +char *yon_user_get_group_string(char *user); +void on_password_hash_sensitiveness(GtkWidget *,ubl_settings_usergroups_password_window *window); +gboolean on_encrypt_update(dictionary *dict); +void *yon_passwords_encrypt(dictionary *dict); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index c6bed22..8a2518a 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -85,7 +85,8 @@ #define DESCTRYPT_LABEL "desctrypt" #define NT_LABEL "nt" #define ACCEPT_LABEL _("Accept") -#define ENCRYPT_SURE_LABEL _("Are you sure want to encrypt all passwords?\nThis action can't be undone.") +#define ENCRYPT_SURE_LABEL yon_char_unite("",_("Attention!")," ",_("All unencrypted password in configuration will be encrypted.\nAre you sure want to encrypt all passwords? This action can't be undone."),NULL) +#define ENCRYPT_TITLE_LABEL _("Encrypt all unencrypted passwords") #define ENCRYPT_TOOLTIP_LABEL _("Encrypt all unencrypted passwords at global configuration") #define DES_DESCRIPTION_LABEL _("DES (Algorithm for Symmetric Encryption)") #define MD5_DESCRIPTION_LABEL _("MD5 (128-bit hashing algorithm)") @@ -270,3 +271,10 @@ #define SHUTDOWN_MAXIMUM_UID_LABEL _("Maximum UID") #define SHUTDOWN_MINIMUM_GID_LABEL _("Minimum GID") #define SHUTDOWN_MAXIMUM_GID_LABEL _("Maximum GID") + +#define DENY_LOGIN_LABEL _("Deny login") +#define BLOCK_LOGIN_LABEL _("Block login with password") +#define UNBOCK_LOGIN_LABEL _("Unblock login with password") + +#define CONFIRMATION_GROUP_DEPENDS_SINGLE_LABEL(target,depends) yon_char_unite(_("User(-s)")," \"",depends,"\" ",_("is included into main group of users")," \"",target,"\", ",_("which will be deleted"),".\n",_("After reboot users")," ",depends," ",_("main group will be set to default group"),".",NULL) +#define CONFIRMATION_GROUP_DEPENDS_MULTIPLE_LABEL _("Some of users, chosen for deletion, are included as main group for other users. This users will get default main group after reboot") diff --git a/ubl-settings-usergroups-additional-settings.glade b/ubl-settings-usergroups-additional-settings.glade index e2a11e8..f475bcc 100644 --- a/ubl-settings-usergroups-additional-settings.glade +++ b/ubl-settings-usergroups-additional-settings.glade @@ -383,8 +383,9 @@ 0 Default - No password required Set a password + No password required + Deny login @@ -459,8 +460,8 @@ 0 Default - No password required Set a password + No password required diff --git a/ubl-settings-usergroups-confirmation.glade b/ubl-settings-usergroups-confirmation.glade index 30a228a..2c654b0 100644 --- a/ubl-settings-usergroups-confirmation.glade +++ b/ubl-settings-usergroups-confirmation.glade @@ -15,17 +15,19 @@ - + - + - + - + - + - + + + diff --git a/ubl-settings-usergroups-group-creation.glade b/ubl-settings-usergroups-group-creation.glade index d50bf79..e4b169b 100644 --- a/ubl-settings-usergroups-group-creation.glade +++ b/ubl-settings-usergroups-group-creation.glade @@ -1,5 +1,5 @@ - + @@ -353,8 +353,11 @@ 0 Default - No password required Set a password + Deny login + Block login with password + Unblock login with password + No password required diff --git a/ubl-settings-usergroups-password.glade b/ubl-settings-usergroups-password.glade index e5dbfc0..60ac200 100644 --- a/ubl-settings-usergroups-password.glade +++ b/ubl-settings-usergroups-password.glade @@ -94,7 +94,7 @@ True True - 1 + 0 @@ -136,47 +136,47 @@ True True - 2 + 1 - - - False - True - 1 - - - - - True - False - vertical - 5 - + + Do not encrypt password True - False + True + False + True False True - 0 + 2 - - Do not encrypt password + True - True - False - True + False False True - 1 + 3 + + + False + True + 1 + + + + + True + False + vertical + 5 True diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index dc453a6..a25b015 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -235,8 +235,11 @@ 0 Default - No password required Set a password + Deny login + Block login with password + Unblock login with password + No password required diff --git a/ubl-settings-usergroups.glade b/ubl-settings-usergroups.glade index 4ec95c8..8077571 100644 --- a/ubl-settings-usergroups.glade +++ b/ubl-settings-usergroups.glade @@ -1,5 +1,5 @@ - - + + @@ -363,9 +363,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Locked 0 - + - 0 + 0 diff --git a/ubl-settings-usergroups.pot b/ubl-settings-usergroups.pot index 0222b4d..46c57e8 100644 --- a/ubl-settings-usergroups.pot +++ b/ubl-settings-usergroups.pot @@ -286,10 +286,18 @@ msgstr "" msgid "Accept" msgstr "" +#: source/ubl-strings.h:87 +msgid "Attention!" +msgstr "" + #: source/ubl-strings.h:88 msgid "" -"Are you sure want to encrypt all passwords?\n" -"This action can't be undone." +"All unencrypted password in configuration will be encrypted.\n" +"Are you sure want to encrypt all passwords? This action can't be undone." +msgstr "" + +#: source/ubl-strings.h:89 +msgid "Encrypt all unencrypted passwords" msgstr "" #: source/ubl-strings.h:89 @@ -858,19 +866,19 @@ msgid "All system users" msgstr "" #: source/ubl-strings.h:253 source/ubl-strings.h:266 -msgid "Users GID range" +msgid "Users UID range" msgstr "" #: source/ubl-strings.h:254 source/ubl-strings.h:267 -msgid "User GID in system" +msgid "User UID in system" msgstr "" #: source/ubl-strings.h:255 -msgid "Users UID range" +msgid "Users GID range" msgstr "" #: source/ubl-strings.h:256 -msgid "User UID in system" +msgid "User GID in system" msgstr "" #: source/ubl-strings.h:258 @@ -912,3 +920,41 @@ msgstr "" #: source/ubl-strings.h:272 msgid "Maximum GID" msgstr "" + +#: source/ubl-strings.h:274 +msgid "Deny login" +msgstr "" + +#: source/ubl-strings.h:275 +msgid "Block login with password" +msgstr "" + +#: source/ubl-strings.h:276 +msgid "Unblock login with password" +msgstr "" + +#: source/ubl-strings.h:278 +msgid "User(-s)" +msgstr "" + +#: source/ubl-strings.h:278 +msgid "is included into main group of users" +msgstr "" + +#: source/ubl-strings.h:278 +msgid "which will be deleted" +msgstr "" + +#: source/ubl-strings.h:278 +msgid "After reboot users" +msgstr "" + +#: source/ubl-strings.h:278 +msgid "main group will be set to default group" +msgstr "" + +#: source/ubl-strings.h:279 +msgid "" +"Some of users, chosen for deletion, are included as main group for other " +"users. This users will get default main group after reboot" +msgstr "" diff --git a/ubl-settings-usergroups_ru.po b/ubl-settings-usergroups_ru.po index 1999d5c..cdd3e2b 100644 --- a/ubl-settings-usergroups_ru.po +++ b/ubl-settings-usergroups_ru.po @@ -300,7 +300,7 @@ msgstr "Пароль не требуется" #: source/ubl-strings.h:72 msgid "Set a password" -msgstr "Задать пароль" +msgstr "Установить пароль" #: source/ubl-strings.h:73 source/ubl-strings.h:124 msgid "Encrypted" @@ -314,13 +314,20 @@ msgstr "Не зашифрован" msgid "Accept" msgstr "Принять" +#: source/ubl-strings.h:87 +msgid "Attention!" +msgstr "Внимание!" + #: source/ubl-strings.h:88 msgid "" -"Are you sure want to encrypt all passwords?\n" -"This action can't be undone." -msgstr "" -"Вы уверены что хотите зашифровать все пароли?\n" -"Это действие нельзя отменить." +"All unencrypted password in configuration will be encrypted.\n" +"Are you sure want to encrypt all passwords? This action can't be undone." +msgstr "Все незашифрованные пароли, хранящиеся в конфигурации, будут зашифрованы.\n" +"Вы уверены, что хотите зашифровать все пароли? Это действие нельзя отменить." + +#: source/ubl-strings.h:89 +msgid "Encrypt all unencrypted passwords" +msgstr "Зашифровать все пароли" #: source/ubl-strings.h:89 msgid "Encrypt all unencrypted passwords at global configuration" @@ -425,8 +432,10 @@ msgid "" "- The name can consist of: lowercase Latin letters, numbers, underscores and " "hyphens;\n" "- Max name length: 32 symbols;" -msgstr "- Первым символом должна быть буква или подчёркивание\n" -"- Имя может состоять из: строчных латинских букв, цифр, подчеркивания и дефиса\n" +msgstr "" +"- Первым символом должна быть буква или подчёркивание\n" +"- Имя может состоять из: строчных латинских букв, цифр, подчеркивания и " +"дефиса\n" "- Максимальная длина имени: 32 символа" #: source/ubl-strings.h:114 @@ -978,3 +987,45 @@ msgstr "Минимальный GID" #: source/ubl-strings.h:272 msgid "Maximum GID" msgstr "Максимальный GID" + +#: source/ubl-strings.h:274 +msgid "Deny login" +msgstr "Запретить вход" + +#: source/ubl-strings.h:275 +msgid "Block login with password" +msgstr "Заблокировать вход по паролю" + +#: source/ubl-strings.h:276 +#, fuzzy +msgid "Unblock login with password" +msgstr "Разблокировать вход по паролю" + +#: source/ubl-strings.h:278 +msgid "User(-s)" +msgstr "Пользователь(-ли)" + +#: source/ubl-strings.h:278 +msgid "is included into main group of users" +msgstr "включен(-ы) в основную группу" + +#: source/ubl-strings.h:278 +msgid "which will be deleted" +msgstr "которая будет удалена" + +#: source/ubl-strings.h:278 +msgid "After reboot users" +msgstr "После перезагрузки пользователь(-ли)" + +#: source/ubl-strings.h:278 +msgid "main group will be set to default group" +msgstr "получит(-ат) основную группу по умолчанию" + +#: source/ubl-strings.h:279 +msgid "" +"Some of users, chosen for deletion, are included as main group for other " +"users. This users will get default main group after reboot" +msgstr "" +"Часть пользователей выбранных на удаление используются как основные группы " +"других пользователей. После перезагрузки эти пользователи получат основную " +"группу по умолчанию"