diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 9d41bc1..167591a 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -74,8 +74,7 @@ int yon_load_proceed(YON_CONFIG_TYPE type){ } void yon_interface_update(main_window *widgets){ - gtk_list_store_clear(widgets->UsersList); - gtk_list_store_clear(widgets->GroupsList); + on_system_update(NULL,widgets); int size; GtkTreeIter iter; char *def_groups = yon_config_get_by_key(USERGROUPS_parameter); @@ -149,7 +148,6 @@ void yon_interface_update(main_window *widgets){ if (parameters_size>1&&!strcmp(parameters[1],"x")) parameters[1]=""; char *pars=""; 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 { @@ -162,9 +160,9 @@ void yon_interface_update(main_window *widgets){ } gtk_list_store_set(widgets->GroupsList,&iter, 1,login, - 0,parameters_size>1?parameters[1]:"", - 2,parameters_size>0?parameters[0]:"", - 3,parameters_size>2?parameters[2]:"", + 0,parameters_size>2?parameters[2]:"", + 2,parameters_size>1?parameters[1]:"", + 3,parameters_size>3?parameters[3]:"", 4,pars, -1); if(parameters) @@ -215,10 +213,10 @@ if (main_config.sync_users){ int size; config_str parsed = yon_char_parse(main_config.sync_users[i],&size,":"); if (!yon_char_is_empty(parsed[1])){ - - if (system (samba_sync_password_command(parsed[0],parsed[1]))){}; + yon_launch (yon_debug_output("%s\n",samba_sync_password_command(parsed[0],parsed[1]))); + } else { - if (system ( samba_sync_command(parsed[0]))){}; + yon_launch (yon_debug_output("%s\n",samba_sync_command(parsed[0]))); } @@ -412,6 +410,9 @@ void on_save_done(main_window *widgets, config_str output, int size){ textdomain(LocaleName); } +void on_save_failed(main_window *, config_str , int ){ + yon_samba_sync_proceed(); +} void on_config_save(GtkWidget *, main_window *){ @@ -714,6 +715,20 @@ yon_confirmation_window *yon_delete_confirmation_new(){ return window; } +void yon_system_delete_confirmation_open(main_window *widgets){ + yon_confirmation_window *window = yon_delete_confirmation_new(); + gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); + GtkTreeIter iter; + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(yon_delete_confirmation_save),dict); + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ + // gtk_tree_model_get(model,&iter,1,,2,,) + } +} + void yon_delete_confirmation_open(main_window *widgets){ yon_confirmation_window *window = yon_delete_confirmation_new(); gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); @@ -850,8 +865,8 @@ void on_groups_save(GtkWidget *self, dictionary *dict){ void on_groups_clicked(GtkWidget *, GtkEntry *output_target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); - gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),MAIN_GROUP_LABEL); - gtk_label_set_text(GTK_LABEL(window->HeaderLabel),MAIN_GROUP_LABEL); + gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),MAIN_GROUP_TITLE_LABEL); + gtk_label_set_text(GTK_LABEL(window->HeaderLabel),MAIN_GROUP_TITLE_LABEL); GtkTreeIter iter, itar,itor; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.groups_list),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.groups_list),&iter)){ @@ -1003,8 +1018,10 @@ void on_password_change(GtkWidget *, dictionary *entry_dict){ if (!check_is_password_hash(password)){ gtk_entry_set_text(GTK_ENTRY(window->PasswordHashEntry),password); } else { - if (password[0]=='%'&&password[1]=='%') + if (password[0]=='%'&&password[1]=='%'){ + free(yon_char_divide(password,1)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck),1); + } gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); } } @@ -1320,18 +1337,15 @@ void on_GID_update(GtkWidget *, ubl_settings_usergroups_group_creation_window *w yon_char_parsed_prepend_strings(config_groups,config_size,":"); config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_groups,config_size,&final_size); long prev_busy=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; + + int minimum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; + int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?68000:main_config.MAXGID; for (int i=0;i=main_config.MINGID||gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))){ - if (atol(parsed[2])>main_config.MAXGID||gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))) - break; - if (atol(parsed[2])==prev_busy+1) + if (parsed_size>2&&minimumprev_busy){ prev_busy=atol(parsed[2]); - else { - yon_char_parsed_free(parsed, parsed_size); - break; } } yon_char_parsed_free(parsed, parsed_size); @@ -1364,28 +1378,35 @@ void on_group_save(GtkWidget *self, dictionary *dict){ yon_ubl_status_highlight_incorrect(window->userUIDEntry); return; } - } - int config_size=0; - int final_size=0; - config_str config_users = yon_config_get_all_by_key(USERADD_SEARCH_macro,&config_size); - yon_char_parsed_prepend_strings(config_users,config_size,":"); - config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_users,config_size,&final_size); - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck))){ - int found=0; - char *uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); - for (int i=0;i1&&!strcmp(parsed[2],uid_string)&&strcmp(parsed[2],window->last_gid)) found = 1; - if (parsed_size) yon_char_parsed_free(parsed,parsed_size); - } - if (found){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GID_ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userUIDEntry); - return; + + if (strcmp(gid,window->last_gid)){ + int config_size=0; + int final_size=0; + config_str config_users = yon_config_get_all_by_key(GROUPADD_SEARCH_macro,&config_size); + config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_users,config_size,&final_size); + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck))){ + int found=0; + char *uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); + for (int i=0;i2&&!strcmp(parsed[2],uid_string)){ + if (yon_char_is_empty(window->last_gid)||(!yon_char_is_empty(window->last_gid)&&strcmp(parsed[2],window->last_gid))){ + found = yon_char_parsed_check_exist(config_users,config_size,final[i])>-1?1:2; + break; + } + } + if (parsed_size) yon_char_parsed_free(parsed,parsed_size); + } + if (found){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),found==1?GID_ALREADY_EXIST_CONFIG_LABEL:GID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userUIDEntry); + return; + } } } + } group_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); if (group_name[0]>'0'&&group_name[0]<'9'){ @@ -1819,8 +1840,16 @@ void yon_system_load(main_window *window){ void on_system_update(GtkWidget *, main_window *window){ + gtk_list_store_clear(window->UsersList); + gtk_list_store_clear(window->GroupsList); + if (main_config.groups_size) yon_char_parsed_free(main_config.groups,main_config.groups_size); + if (main_config.users_size) yon_char_parsed_free(main_config.users,main_config.users_size); + if (main_config.shadow_size) yon_char_parsed_free(main_config.shadow,main_config.shadow_size); + if (main_config.group_shadow_size) yon_char_parsed_free(main_config.group_shadow,main_config.group_shadow_size); main_config.groups = yon_file_open(groups_path,&main_config.groups_size); main_config.users = yon_file_open(users_path,&main_config.users_size); + main_config.shadow = yon_file_open(shadow_path,&main_config.shadow_size); + main_config.group_shadow = yon_file_open(group_shadow_path,&main_config.group_shadow_size); int login_size; config_str login_defs = yon_file_open(uid_path,&login_size); for (int i=0;i=main_config.MINUID||gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck))){ - if (atol(parsed[2])>main_config.MAXUID||gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck))) - break; - if (atol(parsed[2])==prev_busy+1) + int minimum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))?0:main_config.MINGID; + int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))?68000:main_config.MAXGID; + for (int i=0;iprev_busy){ prev_busy=atol(parsed[2]); - else { - yon_char_parsed_free(parsed, parsed_size); - break; } } - yon_char_parsed_free(parsed, parsed_size); + } + yon_char_parsed_free(parsed, parsed_size); } gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),yon_char_from_long(prev_busy+1)); } @@ -1982,18 +2012,26 @@ void on_user_save(GtkWidget *self, dictionary *dict){ config_str final = yon_char_parsed_merge(main_config.users,main_config.users_size,config_users,config_size,&final_size); uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))){ - int found=0; - for (int i=0;i1&&!strcmp(parsed[2],uid_string)&&(!yon_char_is_empty(window->last_uid)&&strcmp(parsed[2],window->last_uid))) found = 1; - if (parsed_size) yon_char_parsed_free(parsed,parsed_size); - } - if (found){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),UID_ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userUIDEntry); - return; + if (strcmp(uid_string,window->last_uid)){ + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))){ + int found=0; + for (int i=0;i2&&!strcmp(parsed[2],uid_string)){ + if (yon_char_is_empty(window->last_uid)||(!yon_char_is_empty(window->last_uid)&&strcmp(parsed[2],window->last_uid))){ + found = yon_char_parsed_check_exist(config_users,config_size,final[i])>-1?1:2; + break; + } + } + + if (parsed_size) yon_char_parsed_free(parsed,parsed_size); + } + if (found){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),found==1?UID_ALREADY_EXIST_CONFIG_LABEL:UID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userUIDEntry); + return; + } } } @@ -2110,7 +2148,7 @@ void on_user_save(GtkWidget *self, dictionary *dict){ if (user_shell_active>0){ char *shell_string = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)); if (strcmp(shell_string,SET_LABEL)){ - user_shell = yon_char_unite("--shell ",shell_string,NULL); + user_shell = yon_char_unite("--shell ",shell_string," ",NULL); } else { user_shell = yon_char_unite("--shell ",(char*)gtk_entry_get_text(GTK_ENTRY(window->userShellEntry)),NULL); } @@ -2590,6 +2628,8 @@ void on_main_edit(GtkWidget *, main_window *widgets){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck),0); gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry), parsed_size>1?parameters[1]:""); } + if (!yon_char_is_empty(parameters[1])) + window->last_uid=yon_char_new(parameters[1]); } if (parsed_size>2){ if (!strcmp(parameters[2],"x")) @@ -2597,8 +2637,6 @@ void on_main_edit(GtkWidget *, main_window *widgets){ else { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),0); gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry), parsed_size>2?parameters[2]:""); - if (!yon_char_is_empty(parameters[2])) - window->last_uid=yon_char_new(parameters[2]); } } if (parsed_size>3){ @@ -2640,12 +2678,28 @@ 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; + } + } 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){ + char *temp = yon_char_append("%%",parameters[5]); + free(parameters[5]); + parameters[5]=temp; + } + gtk_widget_set_sensitive(window->userSyncSAMBAPasswordCheck,0); + 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); } else { @@ -2780,10 +2834,46 @@ void on_main_delete(GtkWidget *, main_window *widgets){ dialog_confirmation_data *data=malloc(sizeof(dialog_confirmation_data)); data->function=NULL; data->data=NULL; - if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); + switch(active){ + case 0: + yon_delete_confirmation_open(widgets); - } else { + break; + case 1: yon_group_delete_confirmation_open(widgets); + break; + case 2:{ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ + char *target; + gtk_tree_model_get(model,&iter,2,&target,-1); + dialog_confirmation_data data; + int found = !!config(USERADD(target)); + if (found){ + data.action_text = SYSTEM_USER_CONFIG_REMOVE_CONFIRMATION_LABEL(target); + data.function=NULL; + data.data=NULL; + } else { + data.action_text = SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target); + data.function=NULL; + data.data=NULL; + + } + if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ + return; + } + if (found){ + yon_delete_confirmation_open(widgets); + } else { + yon_system_delete_confirmation_open(widgets); + } + } + }break; + case 3:{ + + }break; } } @@ -2793,14 +2883,14 @@ void on_config_update(GtkWidget *, main_window *widgets){ } else { on_config_local_load(NULL,widgets); } - on_system_update(NULL,widgets); + // on_system_update(NULL,widgets); } void on_user_sync_with_config(GtkWidget *,main_window *widgets){ int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); switch (active){ - case 2: + case 2:{ GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ @@ -2819,40 +2909,79 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){ if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ return; } - int size; - config_str passwd_users = yon_file_open(users_path,&size); - int active_usr = yon_char_parsed_strstr(passwd_users,size,target); - int cur_size; - if (size){ - yon_char_remove_last_symbol(passwd_users[active_usr],'\n'); - config_str cur_user = yon_char_parse(passwd_users[active_usr],&cur_size,":"); - int final_size=0; - config_str final_user_parsed = NULL; - yon_char_parsed_add_or_create_if_exists(final_user_parsed,&final_size,cur_user[4]); - yon_char_parsed_add_or_create_if_exists(final_user_parsed,&final_size,cur_user[3]); - yon_char_parsed_add_or_create_if_exists(final_user_parsed,&final_size,"x"); - char *extra_groups = yon_char_unite(!yon_char_is_empty(cur_user[6])?"--shell ":"",!yon_char_is_empty(cur_user[6])?cur_user[6]:"",!yon_char_is_empty(cur_user[6])?" ":"",!yon_char_is_empty(cur_user[5])?"--home-dir ":"",!yon_char_is_empty(cur_user[5])?cur_user[5]:"",NULL); - yon_char_parsed_add_or_create_if_exists(final_user_parsed,&final_size,extra_groups); - yon_char_parsed_add_or_create_if_exists(final_user_parsed,&final_size,cur_user[1]); - char *final_user = yon_char_parsed_to_string(final_user_parsed,final_size,":"); - if (config(USERADD(target))){ - char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD_SYNC(target)); - yon_config_register(USERADD_SYNC(target),final_command,final_user); - - } else { - char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(target)); - yon_config_register(USERADD(target),final_command,final_user); - - } - - // int shadow_size; - // config_str shadow = yon_file_open(shadow_path,&shadow_size); + + char *user = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target); + char *shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target); + yon_char_remove_last_symbol(user,'\n'); + yon_char_remove_last_symbol(shadow,'\n'); + int user_size=0; + int shadow_size=0; + config_str parsed = yon_char_parse(user,&user_size,":"); + config_str parsed_shadow = yon_char_parse(shadow,&shadow_size,":"); + + char *optionals = yon_char_unite(user_size>5? parsed[5]:"",user_size>5?" ":"",user_size>6?parsed[6]:"",NULL); + char *config_user = yon_char_unite(parsed[0],":", + user_size>4?parsed[4]:"",":", + user_size>2?parsed[2]:"",":", + user_size>3?parsed[3]:"",":", + !yon_char_is_empty(optionals)?optionals:"",":", + user_size>1&&strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""),NULL); + char *config_shadow = yon_char_unite(yon_char_return_if_exist(parsed[2],""),":", + user_size>3?parsed[3]:"",":", + user_size>4?parsed[4]:"",":", + user_size>5?parsed[5]:"",":", + user_size>6?parsed[6]:"",":", + user_size>7?parsed[7]:"",":",NULL); + + if (!yon_char_is_empty(config_user)){ + char *user_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(target)); + yon_config_register(USERADD(target),user_command,config_user); } + if (!yon_char_is_empty(config_shadow)){ + char *shadow_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(target)); + yon_config_register(USERSHADOW(target),shadow_command,config_shadow); + } + yon_interface_update(widgets); } yon_interface_update((main_window*)widgets); - break; - case 3: - break; + }break; + case 3:{ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ + + char *target; + gtk_tree_model_get(model,&iter,1,&target,-1); + dialog_confirmation_data data; + if (config(GROUPADD(target))){ + data.action_text = SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target); + data.data=NULL; + data.function=NULL; + } else { + data.action_text = SYSTEM_GROUP_SYNC_CONFIRMATION_LABEL(target); + data.data=NULL; + data.function=NULL; + } + if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ + return; + } + char *group = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target); + char *group_shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target); + yon_char_remove_last_symbol(group,'\n'); + yon_char_remove_last_symbol(group_shadow,'\n'); + int group_size=0; + int group_shadow_size=0; + config_str parsed = yon_char_parse(group,&group_size,":"); + config_str parsed_shadow = yon_char_parse(group_shadow,&group_shadow_size,":"); + char *config_group = yon_char_unite(parsed[0],":",parsed[3],":",parsed[2],"::",parsed_shadow[2],":",strcmp(parsed[1],"x")?parsed[1]:parsed_shadow[1],NULL); + + if (!yon_char_is_empty(config_group)){ + char *group_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD(target)); + yon_config_register(GROUPADD(target),group_command,config_group); + yon_interface_update(widgets); + } + } + }break; } } @@ -2882,6 +3011,8 @@ void config_init(){ main_config.save_config=0; main_config.groups = yon_file_open(groups_path,&main_config.groups_size); main_config.users = yon_file_open(users_path,&main_config.users_size); + main_config.shadow = yon_file_open(shadow_path,&main_config.shadow_size); + main_config.group_shadow = yon_file_open(group_shadow_path,&main_config.group_shadow_size); main_config.users_list=NULL; main_config.groups_list=NULL; main_config.password_min_length=6; @@ -3076,25 +3207,32 @@ main_window *yon_main_window_complete(main_window *widgets){ yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); - yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->UsersTree)); - yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->GroupsTree)); yon_load_proceed(YON_CONFIG_LOCAL); yon_interface_update((main_window*)widgets); gtk_widget_realize(GTK_WIDGET(widgets->UsersTree)); - yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->UsersTree)); gtk_widget_realize(GTK_WIDGET(widgets->GroupsTree)); - yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->GroupsTree)); + GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->UsersTree)); + gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,1)),50); + gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,2)),175); + gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,3)),175); for (guint i=0;iGroupsTree)); + gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,0)),50); + gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,1)),175); for (guint i=0;i",target," ", _("to configuration?"),NULL) +#define SYSTEM_USER_SYNC_CONFIRMATION_LABEL(target) yon_char_unite(_("This user exists in configuration. Are you sure want to update user")," ",target," ", _("data at configuration?"),NULL) +#define SYSTEM_GROUP_SYNC_CONFIRMATION_LABEL(target) yon_char_unite(_("This group doesn't exist in configuration. Are you sure want to add group")," ",target," ", _("to configuration?"),NULL) +#define SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target) yon_char_unite(_("This group exists in configuration. Are you sure want to update group")," ",target," ", _("data at configuration?"),NULL) + +#define SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This user doesn't exist in configuration and will be removed from the system. Are you sure want to remove user")," ",target," ", _("from the system??"),NULL) +#define SYSTEM_USER_CONFIG_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This user exists in configuration. Are you sure want to remove user")," ",target," ", _("?"),NULL) +#define SYSTEM_GROUP_SYSTEM_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This group doesn't exist in configuration and will be removed from the system. Are you sure want to remove group")," ",target," ", _("from the system?"),NULL) +#define SYSTEM_GROUP_CONFIG_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This group exists in configuration. Are you sure want to remove group")," ",target,"", _("?"),NULL) //ubl-settings-usergroups-additional-settings.glade @@ -187,8 +194,10 @@ #define PASSWORD_NO_SET_LABEL _("Not specified") -#define UID_ALREADY_EXIST_LABEL _("UID already busy") -#define GID_ALREADY_EXIST_LABEL _("GID already busy") +#define UID_ALREADY_EXIST_CONFIG_LABEL _("UID already exists in configuration") +#define UID_ALREADY_EXIST_SYSTEM_LABEL _("UID already exists in system") +#define GID_ALREADY_EXIST_CONFIG_LABEL _("GID already exists in configuration") +#define GID_ALREADY_EXIST_SYSTEM_LABEL _("GID already exists in system") //ubl-settings-usergroups-password.glade #define PASSWORD_REPEAT_LABEL _("Repeat password:") diff --git a/ubl-settings-usergroups-system.glade b/ubl-settings-usergroups-system.glade index c9aedfb..9f9f569 100644 --- a/ubl-settings-usergroups-system.glade +++ b/ubl-settings-usergroups-system.glade @@ -199,8 +199,7 @@ True fixed 50 - Primary -group + Primary group 4 diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index cd0c784..8e0cda4 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -1187,6 +1187,7 @@ True False start + True True @@ -1202,6 +1203,7 @@ True False start + True True diff --git a/ubl-settings-usergroups.glade b/ubl-settings-usergroups.glade index 3943708..c5eabe9 100644 --- a/ubl-settings-usergroups.glade +++ b/ubl-settings-usergroups.glade @@ -374,7 +374,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True fixed - 10 + 50 10 UID 1 diff --git a/ubl-settings-usergroups.pot b/ubl-settings-usergroups.pot index b081fc8..cd450ad 100644 --- a/ubl-settings-usergroups.pot +++ b/ubl-settings-usergroups.pot @@ -53,7 +53,7 @@ msgstr "" msgid "UID" msgstr "" -#: source/ubl-strings.h:14 source/ubl-strings.h:102 +#: source/ubl-strings.h:14 source/ubl-strings.h:107 msgid "Login" msgstr "" @@ -175,7 +175,7 @@ msgstr "" msgid "Inspect users and groups in system" msgstr "" -#: source/ubl-strings.h:46 source/ubl-strings.h:56 +#: source/ubl-strings.h:46 source/ubl-strings.h:61 msgid "Additional settings" msgstr "" @@ -203,521 +203,554 @@ msgstr "" msgid "Additional saving configuration" msgstr "" +#: source/ubl-strings.h:54 +msgid "This user doesn't exist in configuration. Are you sure want to add user" +msgstr "" + +#: source/ubl-strings.h:54 source/ubl-strings.h:56 +msgid "to configuration?" +msgstr "" + +#: source/ubl-strings.h:55 +msgid "This user exists in configuration. Are you sure want to update user" +msgstr "" + +#: source/ubl-strings.h:55 source/ubl-strings.h:57 +msgid "data at configuration?" +msgstr "" + +#: source/ubl-strings.h:56 +msgid "" +"This group doesn't exist in configuration. Are you sure want to add group" +msgstr "" + #: source/ubl-strings.h:57 +msgid "This group exists in configuration. Are you sure want to update group" +msgstr "" + +#: source/ubl-strings.h:62 msgid "No password required" msgstr "" -#: source/ubl-strings.h:58 +#: source/ubl-strings.h:63 msgid "Set a password" msgstr "" -#: source/ubl-strings.h:59 source/ubl-strings.h:105 +#: source/ubl-strings.h:64 source/ubl-strings.h:110 msgid "Encrypted" msgstr "" -#: source/ubl-strings.h:60 +#: source/ubl-strings.h:65 msgid "Unencrypted" msgstr "" -#: source/ubl-strings.h:73 +#: source/ubl-strings.h:78 msgid "Accept" msgstr "" -#: source/ubl-strings.h:74 +#: source/ubl-strings.h:79 msgid "" "Are you sure want to encrypt all passwords?\n" "This action can't be undone." msgstr "" -#: source/ubl-strings.h:75 +#: source/ubl-strings.h:80 msgid "Encrypt all unencrypted passwords at global configuration" msgstr "" -#: source/ubl-strings.h:76 +#: source/ubl-strings.h:81 msgid "DES (Algorithm for Symmetric Encryption)" msgstr "" -#: source/ubl-strings.h:77 +#: source/ubl-strings.h:82 msgid "MD5 (128-bit hashing algorithm)" msgstr "" -#: source/ubl-strings.h:78 +#: source/ubl-strings.h:83 msgid "yescrypt (Cryptographic hash function)" msgstr "" -#: source/ubl-strings.h:79 +#: source/ubl-strings.h:84 msgid "GOST-YESCRYPT (Design according to GOST R 34.11─2012)" msgstr "" -#: source/ubl-strings.h:80 +#: source/ubl-strings.h:85 msgid "scrypt (Adaptive cryptographic key generation function)" msgstr "" -#: source/ubl-strings.h:81 +#: source/ubl-strings.h:86 msgid "Blowfish (Symmetric Block Cipher Algorithm)" msgstr "" -#: source/ubl-strings.h:82 +#: source/ubl-strings.h:87 msgid "bcrypt (Adaptive hash function from the Blowfish family of algorithms)" msgstr "" -#: source/ubl-strings.h:83 +#: source/ubl-strings.h:88 msgid "" "bcrypt-a (Adaptive hash function from the Blowfish family of algorithms)" msgstr "" -#: source/ubl-strings.h:84 +#: source/ubl-strings.h:89 msgid "SHA512 (Hash function from the SHA-2 family of algorithms)" msgstr "" -#: source/ubl-strings.h:85 +#: source/ubl-strings.h:90 msgid "SHA256 (Hash function from the SHA-2 family of algorithms)" msgstr "" -#: source/ubl-strings.h:86 +#: source/ubl-strings.h:91 msgid "Sun MD5 (Hash algorithm from Sun Microsystems)" msgstr "" -#: source/ubl-strings.h:87 +#: source/ubl-strings.h:92 msgid "MD5 Unix (Hash algorithm calls standard MD5 thousand times)" msgstr "" -#: source/ubl-strings.h:88 +#: source/ubl-strings.h:93 msgid "" "Extended DES Crypt (Hash function from the BSDi family of DES algorithms)" msgstr "" -#: source/ubl-strings.h:89 +#: source/ubl-strings.h:94 msgid "descrypt (Hash function from the DES family of algorithms)" msgstr "" -#: source/ubl-strings.h:90 +#: source/ubl-strings.h:95 msgid "NTHash (Hash function from the NT Windows family of algorithms)" msgstr "" -#: source/ubl-strings.h:92 +#: source/ubl-strings.h:97 msgid "" "While booting the operating system, apply the settings of all users from the " "configuration" msgstr "" -#: source/ubl-strings.h:93 +#: source/ubl-strings.h:98 msgid "" "While shutdown, save the settings of all users with UID>=1000 to the " "configuration" msgstr "" -#: source/ubl-strings.h:96 +#: source/ubl-strings.h:101 msgid "Configure group" msgstr "" -#: source/ubl-strings.h:97 +#: source/ubl-strings.h:102 msgid "Add group" msgstr "" -#: source/ubl-strings.h:98 +#: source/ubl-strings.h:103 msgid "Group id:" msgstr "" -#: source/ubl-strings.h:99 +#: source/ubl-strings.h:104 msgid "Group name:" msgstr "" -#: source/ubl-strings.h:100 +#: source/ubl-strings.h:105 msgid "Group users:" msgstr "" -#: source/ubl-strings.h:101 +#: source/ubl-strings.h:106 msgid "Automatically" msgstr "" -#: source/ubl-strings.h:103 +#: source/ubl-strings.h:108 msgid "Create group with ununique GID" msgstr "" -#: source/ubl-strings.h:104 +#: source/ubl-strings.h:109 msgid "Create system group" msgstr "" -#: source/ubl-strings.h:106 +#: source/ubl-strings.h:111 msgid "Additional configuration" msgstr "" -#: source/ubl-strings.h:107 +#: source/ubl-strings.h:112 msgid "Group configuration synchronization" msgstr "" -#: source/ubl-strings.h:108 +#: source/ubl-strings.h:113 msgid "When shutting down the system, save the group into the configuration" msgstr "" -#: source/ubl-strings.h:109 +#: source/ubl-strings.h:114 msgid "Group administrators:" msgstr "" -#: source/ubl-strings.h:110 +#: source/ubl-strings.h:115 msgid "Group name must not start with digit" msgstr "" -#: source/ubl-strings.h:113 +#: source/ubl-strings.h:118 msgid "Default groups" msgstr "" -#: source/ubl-strings.h:114 +#: source/ubl-strings.h:119 msgid "Main group" msgstr "" -#: source/ubl-strings.h:115 +#: source/ubl-strings.h:120 msgid "Additional groups" msgstr "" -#: source/ubl-strings.h:116 +#: source/ubl-strings.h:121 msgid "Choose groups" msgstr "" -#: source/ubl-strings.h:117 +#: source/ubl-strings.h:122 msgid "Choose users" msgstr "" -#: source/ubl-strings.h:120 +#: source/ubl-strings.h:125 msgid "System users and groups" msgstr "" -#: source/ubl-strings.h:121 +#: source/ubl-strings.h:126 msgid "Locked" msgstr "" -#: source/ubl-strings.h:122 +#: source/ubl-strings.h:127 msgid "Username" msgstr "" -#: source/ubl-strings.h:123 +#: source/ubl-strings.h:128 msgid "" "Primary\n" "group" msgstr "" -#: source/ubl-strings.h:124 +#: source/ubl-strings.h:129 msgid "" "Home\n" "directory" msgstr "" -#: source/ubl-strings.h:125 source/ubl-strings.h:131 +#: source/ubl-strings.h:130 source/ubl-strings.h:136 msgid "Group" msgstr "" -#: source/ubl-strings.h:126 +#: source/ubl-strings.h:131 msgid "Update the system users and groups list" msgstr "" -#: source/ubl-strings.h:127 +#: source/ubl-strings.h:132 msgid "Toggle system groups and users" msgstr "" -#: source/ubl-strings.h:129 +#: source/ubl-strings.h:134 msgid "Password mismatch" msgstr "" -#: source/ubl-strings.h:130 +#: source/ubl-strings.h:135 msgid "Password must be at least" msgstr "" -#: source/ubl-strings.h:130 +#: source/ubl-strings.h:135 msgid "characters" msgstr "" -#: source/ubl-strings.h:132 +#: source/ubl-strings.h:137 msgid "" "Days until\n" "warning" msgstr "" -#: source/ubl-strings.h:133 +#: source/ubl-strings.h:138 msgid "" "Days\n" "without activity" msgstr "" -#: source/ubl-strings.h:134 +#: source/ubl-strings.h:139 msgid "" "Shell\n" "path" msgstr "" -#: source/ubl-strings.h:135 +#: source/ubl-strings.h:140 msgid "" "Password has\n" "been changed" msgstr "" -#: source/ubl-strings.h:136 +#: source/ubl-strings.h:141 msgid "" "Expiration\n" "date" msgstr "" -#: source/ubl-strings.h:137 +#: source/ubl-strings.h:142 msgid "" "Password change\n" "interval (min)" msgstr "" -#: source/ubl-strings.h:138 +#: source/ubl-strings.h:143 msgid "" "Password change\n" "interval (max)" msgstr "" -#: source/ubl-strings.h:141 +#: source/ubl-strings.h:146 msgid "Add user" msgstr "" -#: source/ubl-strings.h:142 +#: source/ubl-strings.h:147 msgid "Configure user" msgstr "" -#: source/ubl-strings.h:143 +#: source/ubl-strings.h:148 msgid "Set" msgstr "" -#: source/ubl-strings.h:144 +#: source/ubl-strings.h:149 msgid "Empty important field" msgstr "" -#: source/ubl-strings.h:145 +#: source/ubl-strings.h:150 msgid "Login must not start with digit" msgstr "" -#: source/ubl-strings.h:146 +#: source/ubl-strings.h:151 msgid "Loading has failed" msgstr "" -#: source/ubl-strings.h:147 +#: source/ubl-strings.h:152 msgid "Login name" msgstr "" -#: source/ubl-strings.h:148 +#: source/ubl-strings.h:153 msgid "Additional groups:" msgstr "" -#: source/ubl-strings.h:149 +#: source/ubl-strings.h:154 msgid "Password configuration" msgstr "" -#: source/ubl-strings.h:150 +#: source/ubl-strings.h:155 msgid "Password has been changed:" msgstr "" -#: source/ubl-strings.h:151 +#: source/ubl-strings.h:156 msgid "expiration date:" msgstr "" -#: source/ubl-strings.h:152 +#: source/ubl-strings.h:157 msgid "Password change interval: minimum" msgstr "" -#: source/ubl-strings.h:153 +#: source/ubl-strings.h:158 msgid "days, maximum" msgstr "" -#: source/ubl-strings.h:154 +#: source/ubl-strings.h:159 msgid "days" msgstr "" -#: source/ubl-strings.h:155 +#: source/ubl-strings.h:160 msgid "Days until warning:" msgstr "" -#: source/ubl-strings.h:156 +#: source/ubl-strings.h:161 msgid "Days without activity:" msgstr "" -#: source/ubl-strings.h:157 +#: source/ubl-strings.h:162 msgid "Force change at next login" msgstr "" -#: source/ubl-strings.h:158 +#: source/ubl-strings.h:163 msgid "User shell:" msgstr "" -#: source/ubl-strings.h:159 +#: source/ubl-strings.h:164 msgid "Home directory:" msgstr "" -#: source/ubl-strings.h:160 +#: source/ubl-strings.h:165 msgid "Don't set" msgstr "" -#: source/ubl-strings.h:161 +#: source/ubl-strings.h:166 msgid "Create system user" msgstr "" -#: source/ubl-strings.h:162 +#: source/ubl-strings.h:167 msgid "Create user with ununique (repeating) UID" msgstr "" -#: source/ubl-strings.h:163 +#: source/ubl-strings.h:168 msgid "Do not check login for compliance with character rules" msgstr "" -#: source/ubl-strings.h:164 +#: source/ubl-strings.h:169 msgid "Temporary deactivation" msgstr "" -#: source/ubl-strings.h:165 +#: source/ubl-strings.h:170 msgid "Save" msgstr "" -#: source/ubl-strings.h:166 +#: source/ubl-strings.h:171 msgid "login_name" msgstr "" -#: source/ubl-strings.h:167 +#: source/ubl-strings.h:172 msgid "group_name" msgstr "" -#: source/ubl-strings.h:168 +#: source/ubl-strings.h:173 msgid "User name" msgstr "" -#: source/ubl-strings.h:169 +#: source/ubl-strings.h:174 msgid "Sync user" msgstr "" -#: source/ubl-strings.h:170 +#: source/ubl-strings.h:175 msgid "Sync user with password" msgstr "" -#: source/ubl-strings.h:171 +#: source/ubl-strings.h:176 msgid "Encrypt all passwords" msgstr "" -#: source/ubl-strings.h:173 +#: source/ubl-strings.h:178 msgid "User configuration" msgstr "" -#: source/ubl-strings.h:174 +#: source/ubl-strings.h:179 msgid "User configuration synchronization" msgstr "" -#: source/ubl-strings.h:175 +#: source/ubl-strings.h:180 msgid "During system startup, load the user from the configuration" msgstr "" -#: source/ubl-strings.h:176 +#: source/ubl-strings.h:181 msgid "When shutting down the system, save the user into the configuration" msgstr "" -#: source/ubl-strings.h:177 +#: source/ubl-strings.h:182 msgid "User password configuration syncronization" msgstr "" -#: source/ubl-strings.h:178 +#: source/ubl-strings.h:183 msgid "" "During system startup, load the user's parameters from the configuration" msgstr "" -#: source/ubl-strings.h:179 +#: source/ubl-strings.h:184 msgid "" "When shutting down the system, save the user's parameters into the " "configuration" msgstr "" -#: source/ubl-strings.h:181 +#: source/ubl-strings.h:186 msgid "Basic" msgstr "" -#: source/ubl-strings.h:182 +#: source/ubl-strings.h:187 msgid "Additional" msgstr "" -#: source/ubl-strings.h:183 +#: source/ubl-strings.h:188 msgid "Syncronization" msgstr "" -#: source/ubl-strings.h:185 +#: source/ubl-strings.h:190 msgid "Not specified" msgstr "" -#: source/ubl-strings.h:187 -msgid "UID already busy" +#: source/ubl-strings.h:192 +msgid "UID already exists in configuration" msgstr "" -#: source/ubl-strings.h:188 -msgid "GID already busy" +#: source/ubl-strings.h:193 +msgid "UID already exists in system" msgstr "" -#: source/ubl-strings.h:191 +#: source/ubl-strings.h:194 +msgid "GID already exists in configuration" +msgstr "" + +#: source/ubl-strings.h:195 +msgid "GID already exists in system" +msgstr "" + +#: source/ubl-strings.h:198 msgid "Repeat password:" msgstr "" -#: source/ubl-strings.h:192 +#: source/ubl-strings.h:199 msgid "Password hash:" msgstr "" -#: source/ubl-strings.h:193 +#: source/ubl-strings.h:200 msgid "Do not encrypt password" msgstr "" -#: source/ubl-strings.h:196 +#: source/ubl-strings.h:203 msgid "Additional configuration of service parameter saving" msgstr "" -#: source/ubl-strings.h:197 +#: source/ubl-strings.h:204 msgid "" "At every system shutdown save changes of (root)/var/lib/samba\n" "into (hd)/ublinux-data/rootcopy" msgstr "" -#: source/ubl-strings.h:198 +#: source/ubl-strings.h:205 msgid "For system save mode \"Sandbox\"" msgstr "" -#: source/ubl-strings.h:201 +#: source/ubl-strings.h:208 msgid "Group deletion" msgstr "" -#: source/ubl-strings.h:202 +#: source/ubl-strings.h:209 msgid "Confirm group(-s) deletion:" msgstr "" -#: source/ubl-strings.h:204 +#: source/ubl-strings.h:211 msgid "User deletion" msgstr "" -#: source/ubl-strings.h:205 +#: source/ubl-strings.h:212 msgid "Confirm user(-s) deletion:" msgstr "" -#: source/ubl-strings.h:206 +#: source/ubl-strings.h:213 msgid "Chosen" msgstr "" -#: source/ubl-strings.h:207 +#: source/ubl-strings.h:214 msgid "User" msgstr "" -#: source/ubl-strings.h:208 +#: source/ubl-strings.h:215 msgid "Home directory" msgstr "" -#: source/ubl-strings.h:209 +#: source/ubl-strings.h:216 msgid "Delete home directory" msgstr "" -#: source/ubl-strings.h:211 +#: source/ubl-strings.h:218 msgid "Configuration users" msgstr "" -#: source/ubl-strings.h:212 +#: source/ubl-strings.h:219 msgid "Configuration groups" msgstr "" -#: source/ubl-strings.h:213 +#: source/ubl-strings.h:220 msgid "System users" msgstr "" -#: source/ubl-strings.h:214 +#: source/ubl-strings.h:221 msgid "System groups" msgstr "" diff --git a/ubl-settings-usergroups_ru.po b/ubl-settings-usergroups_ru.po index 489075a..8c73536 100644 --- a/ubl-settings-usergroups_ru.po +++ b/ubl-settings-usergroups_ru.po @@ -53,7 +53,7 @@ msgstr "Алгоритм хэширования пароля:" msgid "UID" msgstr "UID" -#: source/ubl-strings.h:14 source/ubl-strings.h:102 +#: source/ubl-strings.h:14 source/ubl-strings.h:107 msgid "Login" msgstr "Логин" @@ -189,7 +189,7 @@ msgstr "Обзор файлов" msgid "Inspect users and groups in system" msgstr "Просмотр пользователей и групп в системе" -#: source/ubl-strings.h:46 source/ubl-strings.h:56 +#: source/ubl-strings.h:46 source/ubl-strings.h:61 msgid "Additional settings" msgstr "Дополнительные настройки" @@ -217,27 +217,58 @@ msgstr "Обновить список пользователей и групп" msgid "Additional saving configuration" msgstr "Дополнительные настройки сохранения" +#: source/ubl-strings.h:54 +msgid "This user doesn't exist in configuration. Are you sure want to add user" +msgstr "" +"Пользователь в конфигурации отсутствует, но его можно добавить. Вы " +"действительно хотите добавить пользователя" + +#: source/ubl-strings.h:54 source/ubl-strings.h:56 +msgid "to configuration?" +msgstr "в конфигурацию?" + +#: source/ubl-strings.h:55 +msgid "This user exists in configuration. Are you sure want to update user" +msgstr "" +"Пользователь уже присутствует в конфигурации. Хотите обновить данные " +"пользователя" + +#: source/ubl-strings.h:55 source/ubl-strings.h:57 +msgid "data at configuration?" +msgstr "в конфигурации?" + +#: source/ubl-strings.h:56 +msgid "" +"This group doesn't exist in configuration. Are you sure want to add group" +msgstr "" +"Группа в конфигурации отсутствует, но её можно добавить. Вы действительно " +"хотите добавить группу" + #: source/ubl-strings.h:57 +msgid "This group exists in configuration. Are you sure want to update group" +msgstr "Группа уже присутствует в конфигурации. Хотите обновить данные группы" + +#: source/ubl-strings.h:62 msgid "No password required" msgstr "Пароль не требуется" -#: source/ubl-strings.h:58 +#: source/ubl-strings.h:63 msgid "Set a password" msgstr "Задать пароль" -#: source/ubl-strings.h:59 source/ubl-strings.h:105 +#: source/ubl-strings.h:64 source/ubl-strings.h:110 msgid "Encrypted" msgstr "Зашифрован" -#: source/ubl-strings.h:60 +#: source/ubl-strings.h:65 msgid "Unencrypted" -msgstr "Незашифрован" +msgstr "Не зашифрован" -#: source/ubl-strings.h:73 +#: source/ubl-strings.h:78 msgid "Accept" msgstr "Принять" -#: source/ubl-strings.h:74 +#: source/ubl-strings.h:79 msgid "" "Are you sure want to encrypt all passwords?\n" "This action can't be undone." @@ -245,73 +276,73 @@ msgstr "" "Вы уверены что хотите зашифровать все пароли?\n" "Это действие нельзя отменить." -#: source/ubl-strings.h:75 +#: source/ubl-strings.h:80 msgid "Encrypt all unencrypted passwords at global configuration" msgstr "Зашифровать все незашифрованные пароли в глобальной конфигурации" -#: source/ubl-strings.h:76 +#: source/ubl-strings.h:81 msgid "DES (Algorithm for Symmetric Encryption)" msgstr "DES (Алгоритм для симметричного шифрования)" -#: source/ubl-strings.h:77 +#: source/ubl-strings.h:82 msgid "MD5 (128-bit hashing algorithm)" msgstr "MD5 (128-битный алгоритм хеширования)" -#: source/ubl-strings.h:78 +#: source/ubl-strings.h:83 msgid "yescrypt (Cryptographic hash function)" msgstr "yescrypt (Криптографическая хэш-функция)" -#: source/ubl-strings.h:79 +#: source/ubl-strings.h:84 msgid "GOST-YESCRYPT (Design according to GOST R 34.11─2012)" msgstr "GOST-YESCRYPT (Конструкция согласно ГОСТ Р 34.11─2012)" -#: source/ubl-strings.h:80 +#: source/ubl-strings.h:85 msgid "scrypt (Adaptive cryptographic key generation function)" msgstr "scrypt (Адаптивная криптографическая функция формирования ключа)" -#: source/ubl-strings.h:81 +#: source/ubl-strings.h:86 msgid "Blowfish (Symmetric Block Cipher Algorithm)" msgstr "Blowfish (Алгоритм блочного симметричного шифрования)" -#: source/ubl-strings.h:82 +#: source/ubl-strings.h:87 msgid "bcrypt (Adaptive hash function from the Blowfish family of algorithms)" msgstr "bcrypt (Адаптивная хеш-функция из семейства алгоритмов Blowfish)" -#: source/ubl-strings.h:83 +#: source/ubl-strings.h:88 msgid "" "bcrypt-a (Adaptive hash function from the Blowfish family of algorithms)" msgstr "bcrypt-a (Адаптивная хеш-функция из семейства алгоритмов Blowfish)" -#: source/ubl-strings.h:84 +#: source/ubl-strings.h:89 msgid "SHA512 (Hash function from the SHA-2 family of algorithms)" msgstr "SHA512 (Хеш-функция из семейства алгоритмов SHA-2)" -#: source/ubl-strings.h:85 +#: source/ubl-strings.h:90 msgid "SHA256 (Hash function from the SHA-2 family of algorithms)" msgstr "SHA256 (Хеш-функция из семейства алгоритмов SHA-2)" -#: source/ubl-strings.h:86 +#: source/ubl-strings.h:91 msgid "Sun MD5 (Hash algorithm from Sun Microsystems)" msgstr "Sun MD5 (Хеш-алгоритм от Sun Microsystems)" -#: source/ubl-strings.h:87 +#: source/ubl-strings.h:92 msgid "MD5 Unix (Hash algorithm calls standard MD5 thousand times)" msgstr "MD5 Unix (Хэш-алгоритм вызывает тысячу раз стандартный MD5)" -#: source/ubl-strings.h:88 +#: source/ubl-strings.h:93 msgid "" "Extended DES Crypt (Hash function from the BSDi family of DES algorithms)" msgstr "Extended DES Crypt (Хеш-функция из семейства алгоритмов DES от BSDi)" -#: source/ubl-strings.h:89 +#: source/ubl-strings.h:94 msgid "descrypt (Hash function from the DES family of algorithms)" msgstr "descrypt (Хеш-функция из семейства алгоритмов DES)" -#: source/ubl-strings.h:90 +#: source/ubl-strings.h:95 msgid "NTHash (Hash function from the NT Windows family of algorithms)" msgstr "NTHash (Хеш-функция из семейства алгоритмов NT Windows)" -#: source/ubl-strings.h:92 +#: source/ubl-strings.h:97 msgid "" "While booting the operating system, apply the settings of all users from the " "configuration" @@ -319,7 +350,7 @@ msgstr "" "При запуске операционной системы применять настройки всех пользователей из " "конфигурации" -#: source/ubl-strings.h:93 +#: source/ubl-strings.h:98 msgid "" "While shutdown, save the settings of all users with UID>=1000 to the " "configuration" @@ -327,91 +358,91 @@ msgstr "" "При завершении работы сохранить настройки пользователей с UID>=1000 в " "конфигурацию" -#: source/ubl-strings.h:96 +#: source/ubl-strings.h:101 msgid "Configure group" msgstr "Редактировать группу" -#: source/ubl-strings.h:97 +#: source/ubl-strings.h:102 msgid "Add group" msgstr "Добавить группу" -#: source/ubl-strings.h:98 +#: source/ubl-strings.h:103 msgid "Group id:" msgstr "Идентификатор группы (GID):" -#: source/ubl-strings.h:99 +#: source/ubl-strings.h:104 msgid "Group name:" msgstr "Имя группы:" -#: source/ubl-strings.h:100 +#: source/ubl-strings.h:105 msgid "Group users:" msgstr "Пользователи группы:" -#: source/ubl-strings.h:101 +#: source/ubl-strings.h:106 msgid "Automatically" msgstr "Автоматически" -#: source/ubl-strings.h:103 +#: source/ubl-strings.h:108 msgid "Create group with ununique GID" msgstr "Создать группу с повторяющимися (не уникальными) GID" -#: source/ubl-strings.h:104 +#: source/ubl-strings.h:109 msgid "Create system group" msgstr "Создать системную группу" -#: source/ubl-strings.h:106 +#: source/ubl-strings.h:111 msgid "Additional configuration" msgstr "Дополнительные настройки" -#: source/ubl-strings.h:107 +#: source/ubl-strings.h:112 msgid "Group configuration synchronization" msgstr "Синхронизация настроек группы" -#: source/ubl-strings.h:108 +#: source/ubl-strings.h:113 msgid "When shutting down the system, save the group into the configuration" msgstr "При завершении работы системы сохранить группу в конфигурацию" -#: source/ubl-strings.h:109 +#: source/ubl-strings.h:114 msgid "Group administrators:" msgstr "Администраторы группы:" -#: source/ubl-strings.h:110 +#: source/ubl-strings.h:115 msgid "Group name must not start with digit" msgstr "Имя группы не должно начинаться с цифры" -#: source/ubl-strings.h:113 +#: source/ubl-strings.h:118 msgid "Default groups" msgstr "Группы пользователей по умолчанию" -#: source/ubl-strings.h:114 +#: source/ubl-strings.h:119 msgid "Main group" msgstr "Основная группа" -#: source/ubl-strings.h:115 +#: source/ubl-strings.h:120 msgid "Additional groups" msgstr "Дополнительные группы" -#: source/ubl-strings.h:116 +#: source/ubl-strings.h:121 msgid "Choose groups" msgstr "Выбрать группы" -#: source/ubl-strings.h:117 +#: source/ubl-strings.h:122 msgid "Choose users" msgstr "Выбрать пользователей" -#: source/ubl-strings.h:120 +#: source/ubl-strings.h:125 msgid "System users and groups" msgstr "Пользователи и группы в системе" -#: source/ubl-strings.h:121 +#: source/ubl-strings.h:126 msgid "Locked" msgstr "Отключен" -#: source/ubl-strings.h:122 +#: source/ubl-strings.h:127 msgid "Username" msgstr "Имя пользователя" -#: source/ubl-strings.h:123 +#: source/ubl-strings.h:128 msgid "" "Primary\n" "group" @@ -419,7 +450,7 @@ msgstr "" "Основная\n" "группа" -#: source/ubl-strings.h:124 +#: source/ubl-strings.h:129 msgid "" "Home\n" "directory" @@ -427,31 +458,31 @@ msgstr "" "Домашний\n" "каталог" -#: source/ubl-strings.h:125 source/ubl-strings.h:131 +#: source/ubl-strings.h:130 source/ubl-strings.h:136 msgid "Group" msgstr "Группа" -#: source/ubl-strings.h:126 +#: source/ubl-strings.h:131 msgid "Update the system users and groups list" msgstr "Обновить список пользователей и групп системы" -#: source/ubl-strings.h:127 +#: source/ubl-strings.h:132 msgid "Toggle system groups and users" msgstr "Переключить видимость системных пользователей и групп" -#: source/ubl-strings.h:129 +#: source/ubl-strings.h:134 msgid "Password mismatch" msgstr "Несовпадение паролей" -#: source/ubl-strings.h:130 +#: source/ubl-strings.h:135 msgid "Password must be at least" msgstr "Пароль должен состоять из как минимум" -#: source/ubl-strings.h:130 +#: source/ubl-strings.h:135 msgid "characters" msgstr "символов" -#: source/ubl-strings.h:132 +#: source/ubl-strings.h:137 msgid "" "Days until\n" "warning" @@ -459,7 +490,7 @@ msgstr "" "Дней до\n" "предупреждения" -#: source/ubl-strings.h:133 +#: source/ubl-strings.h:138 msgid "" "Days\n" "without activity" @@ -467,7 +498,7 @@ msgstr "" "Дней без\n" "активности" -#: source/ubl-strings.h:134 +#: source/ubl-strings.h:139 msgid "" "Shell\n" "path" @@ -475,7 +506,7 @@ msgstr "" "Путь до\n" "оболочки" -#: source/ubl-strings.h:135 +#: source/ubl-strings.h:140 msgid "" "Password has\n" "been changed" @@ -483,7 +514,7 @@ msgstr "" "Пароль\n" "изменён" -#: source/ubl-strings.h:136 +#: source/ubl-strings.h:141 msgid "" "Expiration\n" "date" @@ -491,7 +522,7 @@ msgstr "" "Дата\n" "устаревания" -#: source/ubl-strings.h:137 +#: source/ubl-strings.h:142 msgid "" "Password change\n" "interval (min)" @@ -499,7 +530,7 @@ msgstr "" "Интервал смены\n" "пароля (мин.)" -#: source/ubl-strings.h:138 +#: source/ubl-strings.h:143 msgid "" "Password change\n" "interval (max)" @@ -507,207 +538,215 @@ msgstr "" "Интервал смены\n" "пароля (макс.)" -#: source/ubl-strings.h:141 +#: source/ubl-strings.h:146 msgid "Add user" msgstr "Добавить пользователя" -#: source/ubl-strings.h:142 +#: source/ubl-strings.h:147 msgid "Configure user" msgstr "Редактировать пользователя" -#: source/ubl-strings.h:143 +#: source/ubl-strings.h:148 msgid "Set" msgstr "Задать" -#: source/ubl-strings.h:144 +#: source/ubl-strings.h:149 msgid "Empty important field" msgstr "Пустое важное поле" -#: source/ubl-strings.h:145 +#: source/ubl-strings.h:150 msgid "Login must not start with digit" msgstr "Логин не должен начинаться с цифры" -#: source/ubl-strings.h:146 +#: source/ubl-strings.h:151 msgid "Loading has failed" msgstr "Ошибка загрузки" -#: source/ubl-strings.h:147 +#: source/ubl-strings.h:152 msgid "Login name" msgstr "Имя логина" -#: source/ubl-strings.h:148 +#: source/ubl-strings.h:153 msgid "Additional groups:" msgstr "Дополнительные группы:" -#: source/ubl-strings.h:149 +#: source/ubl-strings.h:154 msgid "Password configuration" msgstr "Конфигурация пароля" -#: source/ubl-strings.h:150 +#: source/ubl-strings.h:155 msgid "Password has been changed:" msgstr "Пароль изменён:" -#: source/ubl-strings.h:151 +#: source/ubl-strings.h:156 msgid "expiration date:" msgstr "Дата устаревания:" -#: source/ubl-strings.h:152 +#: source/ubl-strings.h:157 msgid "Password change interval: minimum" msgstr "Интервал смены пароля: минимум" -#: source/ubl-strings.h:153 +#: source/ubl-strings.h:158 msgid "days, maximum" msgstr "дней, максимум" -#: source/ubl-strings.h:154 +#: source/ubl-strings.h:159 msgid "days" msgstr "дней" -#: source/ubl-strings.h:155 +#: source/ubl-strings.h:160 msgid "Days until warning:" msgstr "Дней до предупреждения:" -#: source/ubl-strings.h:156 +#: source/ubl-strings.h:161 msgid "Days without activity:" msgstr "Дней без активности:" -#: source/ubl-strings.h:157 +#: source/ubl-strings.h:162 msgid "Force change at next login" msgstr "Принудительно сменить при следующем входе в систему" -#: source/ubl-strings.h:158 +#: source/ubl-strings.h:163 msgid "User shell:" msgstr "Оболочка пользователя:" -#: source/ubl-strings.h:159 +#: source/ubl-strings.h:164 msgid "Home directory:" msgstr "Домашний каталог:" -#: source/ubl-strings.h:160 +#: source/ubl-strings.h:165 msgid "Don't set" msgstr "Не создавать" -#: source/ubl-strings.h:161 +#: source/ubl-strings.h:166 msgid "Create system user" msgstr "Создать системного пользователя" -#: source/ubl-strings.h:162 +#: source/ubl-strings.h:167 msgid "Create user with ununique (repeating) UID" msgstr "Создать пользователя с повторяющимися (не уникальными) UID" -#: source/ubl-strings.h:163 +#: source/ubl-strings.h:168 msgid "Do not check login for compliance with character rules" msgstr "Не проверять логин на несоответствие правилам использования символов" -#: source/ubl-strings.h:164 +#: source/ubl-strings.h:169 msgid "Temporary deactivation" msgstr "Временное отключение учётной записи" -#: source/ubl-strings.h:165 +#: source/ubl-strings.h:170 msgid "Save" msgstr "Сохранить" -#: source/ubl-strings.h:166 +#: source/ubl-strings.h:171 msgid "login_name" msgstr "Имя_логина" -#: source/ubl-strings.h:167 +#: source/ubl-strings.h:172 msgid "group_name" msgstr "Имя_группы" -#: source/ubl-strings.h:168 +#: source/ubl-strings.h:173 msgid "User name" msgstr "Имя пользователя" -#: source/ubl-strings.h:169 +#: source/ubl-strings.h:174 msgid "Sync user" msgstr "Синхронизировать пользователя" -#: source/ubl-strings.h:170 +#: source/ubl-strings.h:175 msgid "Sync user with password" msgstr "Синхронизировать пользователя с паролем" -#: source/ubl-strings.h:171 +#: source/ubl-strings.h:176 msgid "Encrypt all passwords" msgstr "Зашифровать все пароли" -#: source/ubl-strings.h:173 +#: source/ubl-strings.h:178 msgid "User configuration" msgstr "Настройка пользователя" -#: source/ubl-strings.h:174 +#: source/ubl-strings.h:179 msgid "User configuration synchronization" msgstr "Синхронизация настроек пользователя" -#: source/ubl-strings.h:175 +#: source/ubl-strings.h:180 msgid "During system startup, load the user from the configuration" msgstr "" "При запуске операционной системы применять настройки пользователя из " "конфигурации" -#: source/ubl-strings.h:176 +#: source/ubl-strings.h:181 msgid "When shutting down the system, save the user into the configuration" msgstr "" "При завершении работы операционной системы сохранить настройки пользователя " "в конфигурацию" -#: source/ubl-strings.h:177 +#: source/ubl-strings.h:182 msgid "User password configuration syncronization" msgstr "Синхронизация настроек пароля пользователя" -#: source/ubl-strings.h:178 +#: source/ubl-strings.h:183 msgid "" "During system startup, load the user's parameters from the configuration" msgstr "При загрузке системы загрузить параметры пользователя из конфигурации" -#: source/ubl-strings.h:179 +#: source/ubl-strings.h:184 msgid "" "When shutting down the system, save the user's parameters into the " "configuration" msgstr "" "При завершении работы системы сохранить параметры пользователя в конфигурацию" -#: source/ubl-strings.h:181 +#: source/ubl-strings.h:186 msgid "Basic" msgstr "Основные" -#: source/ubl-strings.h:182 +#: source/ubl-strings.h:187 msgid "Additional" msgstr "Дополнительные" -#: source/ubl-strings.h:183 +#: source/ubl-strings.h:188 msgid "Syncronization" msgstr "Синхронизация" -#: source/ubl-strings.h:185 +#: source/ubl-strings.h:190 msgid "Not specified" msgstr "Не задан" -#: source/ubl-strings.h:187 -msgid "UID already busy" -msgstr "UID уже существует" +#: source/ubl-strings.h:192 +msgid "UID already exists in configuration" +msgstr "UID уже существует в конфигурации" -#: source/ubl-strings.h:188 -msgid "GID already busy" -msgstr "GID уже существует" +#: source/ubl-strings.h:193 +msgid "UID already exists in system" +msgstr "UID уже существует в системе" + +#: source/ubl-strings.h:194 +msgid "GID already exists in configuration" +msgstr "GID уже существует в конфигурации" + +#: source/ubl-strings.h:195 +msgid "GID already exists in system" +msgstr "GID уже существует в системе" -#: source/ubl-strings.h:191 +#: source/ubl-strings.h:198 msgid "Repeat password:" msgstr "Подтверждение пароля:" -#: source/ubl-strings.h:192 +#: source/ubl-strings.h:199 msgid "Password hash:" msgstr "Хэш пароля:" -#: source/ubl-strings.h:193 +#: source/ubl-strings.h:200 msgid "Do not encrypt password" msgstr "Не шифровать пароль" -#: source/ubl-strings.h:196 +#: source/ubl-strings.h:203 msgid "Additional configuration of service parameter saving" msgstr "Дополнительные настройки сохранения параметров сервисов" -#: source/ubl-strings.h:197 +#: source/ubl-strings.h:204 msgid "" "At every system shutdown save changes of (root)/var/lib/samba\n" "into (hd)/ublinux-data/rootcopy" @@ -715,54 +754,54 @@ msgstr "" "При каждом завершении работы ОС сохранять изменения (root)/var/lib/samba\n" "в (hd)/ublinux-data/rootcopy/" -#: source/ubl-strings.h:198 +#: source/ubl-strings.h:205 msgid "For system save mode \"Sandbox\"" msgstr "Для режима сохранения системы \"Песочница\"" -#: source/ubl-strings.h:201 +#: source/ubl-strings.h:208 msgid "Group deletion" msgstr "Удаление групп(-ы)" -#: source/ubl-strings.h:202 +#: source/ubl-strings.h:209 msgid "Confirm group(-s) deletion:" msgstr "Подтвердите удаление групп(-ы):" -#: source/ubl-strings.h:204 +#: source/ubl-strings.h:211 msgid "User deletion" msgstr "Удаление пользователя(-ей)" -#: source/ubl-strings.h:205 +#: source/ubl-strings.h:212 msgid "Confirm user(-s) deletion:" msgstr "Подтвердите удаление пользователя (-ей):" -#: source/ubl-strings.h:206 +#: source/ubl-strings.h:213 msgid "Chosen" msgstr "Выбран" -#: source/ubl-strings.h:207 +#: source/ubl-strings.h:214 msgid "User" msgstr "Пользователь" -#: source/ubl-strings.h:208 +#: source/ubl-strings.h:215 msgid "Home directory" msgstr "Домашний каталог" -#: source/ubl-strings.h:209 +#: source/ubl-strings.h:216 msgid "Delete home directory" msgstr "Удалить домашний каталог" -#: source/ubl-strings.h:211 +#: source/ubl-strings.h:218 msgid "Configuration users" msgstr "Пользователи конфигурации" -#: source/ubl-strings.h:212 +#: source/ubl-strings.h:219 msgid "Configuration groups" msgstr "Группы конфигурации" -#: source/ubl-strings.h:213 +#: source/ubl-strings.h:220 msgid "System users" msgstr "Пользователи системы" -#: source/ubl-strings.h:214 +#: source/ubl-strings.h:221 msgid "System groups" msgstr "Группы системы"