master #193

Merged
asmeron merged 28 commits from YanTheKaller/ubl-settings-usergroups:master into master 10 months ago

@ -74,8 +74,7 @@ int yon_load_proceed(YON_CONFIG_TYPE type){
} }
void yon_interface_update(main_window *widgets){ void yon_interface_update(main_window *widgets){
gtk_list_store_clear(widgets->UsersList); on_system_update(NULL,widgets);
gtk_list_store_clear(widgets->GroupsList);
int size; int size;
GtkTreeIter iter; GtkTreeIter iter;
char *def_groups = yon_config_get_by_key(USERGROUPS_parameter); 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]=""; if (parameters_size>1&&!strcmp(parameters[1],"x")) parameters[1]="";
char *pars=""; char *pars="";
if (parameters_size>4&&strcmp(parameters[4],"x")&&strcmp(parameters[4],"")){ if (parameters_size>4&&strcmp(parameters[4],"x")&&strcmp(parameters[4],"")){
if (!check_is_password_hash(parameters[4])&&parameters[4][0]!='%'&&parameters[4][1]!='%'){ if (!check_is_password_hash(parameters[4])&&parameters[4][0]!='%'&&parameters[4][1]!='%'){
pars = ENCRYPTED_LABEL; pars = ENCRYPTED_LABEL;
} else { } else {
@ -162,9 +160,9 @@ void yon_interface_update(main_window *widgets){
} }
gtk_list_store_set(widgets->GroupsList,&iter, gtk_list_store_set(widgets->GroupsList,&iter,
1,login, 1,login,
0,parameters_size>1?parameters[1]:"", 0,parameters_size>2?parameters[2]:"",
2,parameters_size>0?parameters[0]:"", 2,parameters_size>1?parameters[1]:"",
3,parameters_size>2?parameters[2]:"", 3,parameters_size>3?parameters[3]:"",
4,pars, 4,pars,
-1); -1);
if(parameters) if(parameters)
@ -215,10 +213,10 @@ if (main_config.sync_users){
int size; int size;
config_str parsed = yon_char_parse(main_config.sync_users[i],&size,":"); config_str parsed = yon_char_parse(main_config.sync_users[i],&size,":");
if (!yon_char_is_empty(parsed[1])){ if (!yon_char_is_empty(parsed[1])){
yon_launch (yon_debug_output("%s\n",samba_sync_password_command(parsed[0],parsed[1])));
if (system (samba_sync_password_command(parsed[0],parsed[1]))){};
} else { } 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); textdomain(LocaleName);
} }
void on_save_failed(main_window *, config_str , int ){
yon_samba_sync_proceed();
}
void on_config_save(GtkWidget *, main_window *){ void on_config_save(GtkWidget *, main_window *){
@ -714,6 +715,20 @@ yon_confirmation_window *yon_delete_confirmation_new(){
return window; 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){ void yon_delete_confirmation_open(main_window *widgets){
yon_confirmation_window *window = yon_delete_confirmation_new(); yon_confirmation_window *window = yon_delete_confirmation_new();
gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); 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){ void on_groups_clicked(GtkWidget *, GtkEntry *output_target){
ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); 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_window_set_title(GTK_WINDOW(window->GroupsWindow),MAIN_GROUP_TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(window->HeaderLabel),MAIN_GROUP_LABEL); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),MAIN_GROUP_TITLE_LABEL);
GtkTreeIter iter, itar,itor; GtkTreeIter iter, itar,itor;
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.groups_list),&iter); 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)){ 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)){ if (!check_is_password_hash(password)){
gtk_entry_set_text(GTK_ENTRY(window->PasswordHashEntry),password); gtk_entry_set_text(GTK_ENTRY(window->PasswordHashEntry),password);
} else { } 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_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck),1);
}
gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); 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,":"); 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); 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; 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<final_size;i++){ for (int i=0;i<final_size;i++){
int parsed_size; int parsed_size;
config_str parsed = yon_char_parse(final[i],&parsed_size,":"); config_str parsed = yon_char_parse(final[i],&parsed_size,":");
if (parsed_size>2&&minimum<atol(parsed[2])&&atol(parsed[2])<maximum){
if (atol(parsed[2])>=main_config.MINGID||gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))){ if (atol(parsed[2])>prev_busy){
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)
prev_busy=atol(parsed[2]); 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);
@ -1364,12 +1378,12 @@ void on_group_save(GtkWidget *self, dictionary *dict){
yon_ubl_status_highlight_incorrect(window->userUIDEntry); yon_ubl_status_highlight_incorrect(window->userUIDEntry);
return; return;
} }
}
if (strcmp(gid,window->last_gid)){
int config_size=0; int config_size=0;
int final_size=0; int final_size=0;
config_str config_users = yon_config_get_all_by_key(USERADD_SEARCH_macro,&config_size); config_str config_users = yon_config_get_all_by_key(GROUPADD_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); 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))){ if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck))){
int found=0; int found=0;
@ -1377,15 +1391,22 @@ void on_group_save(GtkWidget *self, dictionary *dict){
for (int i=0;i<final_size;i++){ for (int i=0;i<final_size;i++){
int parsed_size; int parsed_size;
config_str parsed = yon_char_parse(final[i],&parsed_size,":"); config_str parsed = yon_char_parse(final[i],&parsed_size,":");
if (parsed_size>1&&!strcmp(parsed[2],uid_string)&&strcmp(parsed[2],window->last_gid)) found = 1; if (parsed_size>2&&!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 (parsed_size) yon_char_parsed_free(parsed,parsed_size);
} }
if (found){ if (found){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GID_ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); 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); yon_ubl_status_highlight_incorrect(window->userUIDEntry);
return; return;
} }
} }
}
}
group_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); group_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry));
if (group_name[0]>'0'&&group_name[0]<'9'){ 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){ 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.groups = yon_file_open(groups_path,&main_config.groups_size);
main_config.users = yon_file_open(users_path,&main_config.users_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; int login_size;
config_str login_defs = yon_file_open(uid_path,&login_size); config_str login_defs = yon_file_open(uid_path,&login_size);
for (int i=0;i<login_size;i++){ for (int i=0;i<login_size;i++){
@ -1912,14 +1941,15 @@ void on_UID_update(GtkWidget *, ubl_settings_usergroups_user_window *window){
int parsed_size; int parsed_size;
config_str parsed = yon_char_parse(final[i],&parsed_size,":"); config_str parsed = yon_char_parse(final[i],&parsed_size,":");
if (atol(parsed[2])>=main_config.MINUID||gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck))){ int minimum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))?0:main_config.MINGID;
if (atol(parsed[2])>main_config.MAXUID||gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck))) int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))?68000:main_config.MAXGID;
break; for (int i=0;i<final_size;i++){
if (atol(parsed[2])==prev_busy+1) int parsed_size;
config_str parsed = yon_char_parse(final[i],&parsed_size,":");
if (minimum<atol(parsed[2])&&atol(parsed[2])<maximum){
if (atol(parsed[2])>prev_busy){
prev_busy=atol(parsed[2]); 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);
@ -1982,20 +2012,28 @@ 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); 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)); uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry));
if (strcmp(uid_string,window->last_uid)){
if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))){ if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))){
int found=0; int found=0;
for (int i=0;i<final_size;i++){ for (int i=0;i<final_size;i++){
int parsed_size; int parsed_size;
config_str parsed = yon_char_parse(final[i],&parsed_size,":"); config_str parsed = yon_char_parse(final[i],&parsed_size,":");
if (parsed_size>1&&!strcmp(parsed[2],uid_string)&&(!yon_char_is_empty(window->last_uid)&&strcmp(parsed[2],window->last_uid))) found = 1; if (parsed_size>2&&!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 (parsed_size) yon_char_parsed_free(parsed,parsed_size);
} }
if (found){ if (found){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),UID_ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); 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); yon_ubl_status_highlight_incorrect(window->userUIDEntry);
return; return;
} }
} }
}
if (yon_char_is_empty(uid_string)){ if (yon_char_is_empty(uid_string)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
@ -2110,7 +2148,7 @@ void on_user_save(GtkWidget *self, dictionary *dict){
if (user_shell_active>0){ if (user_shell_active>0){
char *shell_string = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)); char *shell_string = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo));
if (strcmp(shell_string,SET_LABEL)){ 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 { } else {
user_shell = yon_char_unite("--shell ",(char*)gtk_entry_get_text(GTK_ENTRY(window->userShellEntry)),NULL); 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_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck),0);
gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry), parsed_size>1?parameters[1]:""); 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 (parsed_size>2){
if (!strcmp(parameters[2],"x")) if (!strcmp(parameters[2],"x"))
@ -2597,8 +2637,6 @@ void on_main_edit(GtkWidget *, main_window *widgets){
else { else {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),0);
gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry), parsed_size>2?parameters[2]:""); 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){ if (parsed_size>3){
@ -2640,12 +2678,28 @@ void on_main_edit(GtkWidget *, main_window *widgets){
} }
} }
if (parsed_size>5){ 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]); window->old_password=yon_char_new(parameters[5]);
if (strcmp(parameters[5],"x")&&strcmp(parameters[5],"")){ if (strcmp(parameters[5],"x")&&strcmp(parameters[5],"")){
if (yon_check_password_blocked(parameters[5])){ if (yon_check_password_blocked(parameters[5])){
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck),1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck),1);
} }
if (!yon_char_is_empty(parameters[5])){ 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],"!*")){ 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),1);
} else { } else {
@ -2780,10 +2834,46 @@ void on_main_delete(GtkWidget *, main_window *widgets){
dialog_confirmation_data *data=malloc(sizeof(dialog_confirmation_data)); dialog_confirmation_data *data=malloc(sizeof(dialog_confirmation_data));
data->function=NULL; data->function=NULL;
data->data=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); yon_delete_confirmation_open(widgets);
} else { break;
case 1:
yon_group_delete_confirmation_open(widgets); 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 { } else {
on_config_local_load(NULL,widgets); 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){ void on_user_sync_with_config(GtkWidget *,main_window *widgets){
int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
switch (active){ switch (active){
case 2: case 2:{
GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1);
GtkTreeIter iter; GtkTreeIter iter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&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){ if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){
return; 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);
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:{
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)){
// int shadow_size; char *target;
// config_str shadow = yon_file_open(shadow_path,&shadow_size); 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;
} }
yon_interface_update((main_window*)widgets); char *group = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target);
break; char *group_shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target);
case 3: yon_char_remove_last_symbol(group,'\n');
break; 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.save_config=0;
main_config.groups = yon_file_open(groups_path,&main_config.groups_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.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.users_list=NULL;
main_config.groups_list=NULL; main_config.groups_list=NULL;
main_config.password_min_length=6; 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_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_load_proceed(YON_CONFIG_LOCAL);
yon_interface_update((main_window*)widgets); yon_interface_update((main_window*)widgets);
gtk_widget_realize(GTK_WIDGET(widgets->UsersTree)); 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)); 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)); 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;i<g_list_length(list);i++){ for (guint i=0;i<g_list_length(list);i++){
if (i!=1&&i!=2&&i!=3)
yon_gtk_tree_view_column_minimal_fixed_size_set(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,i)));
yon_window_config_add_listener((GtkWidget*)g_list_nth_data(list,i),yon_char_append("UserColumn",yon_char_from_int(i)),"fixed-width",YON_TYPE_INT); yon_window_config_add_listener((GtkWidget*)g_list_nth_data(list,i),yon_char_append("UserColumn",yon_char_from_int(i)),"fixed-width",YON_TYPE_INT);
} }
g_list_free(list); g_list_free(list);
list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->GroupsTree)); list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->GroupsTree));
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<g_list_length(list);i++){ for (guint i=0;i<g_list_length(list);i++){
if (i!=0&&i!=1)
yon_gtk_tree_view_column_minimal_fixed_size_set(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,i)));
yon_window_config_add_listener((GtkWidget*)g_list_nth_data(list,i),yon_char_append("GroupColumn",yon_char_from_int(i)),"fixed-width",YON_TYPE_INT); yon_window_config_add_listener((GtkWidget*)g_list_nth_data(list,i),yon_char_append("GroupColumn",yon_char_from_int(i)),"fixed-width",YON_TYPE_INT);
} }
g_list_free(list); g_list_free(list);
yon_save_window_set_postsave_function(on_save_done,widgets); yon_save_window_set_postsave_function(on_save_done,widgets);
yon_save_window_set_postsave_failure_function(on_save_failed,widgets);
return widgets; return widgets;
} }

@ -47,9 +47,18 @@
#define get_passwords_command "ubconfig --target global get [users] USERADD[*] GROUPADD[*]" #define get_passwords_command "ubconfig --target global get [users] USERADD[*] GROUPADD[*]"
#define check_is_password_hash(password) system(yon_char_unite("/lib/ublinux/functions is_hash_password '", password,"'",NULL)) #define check_is_password_hash(password) system(yon_char_unite("/lib/ublinux/functions is_hash_password '", password,"'",NULL))
#define get_system_user_command(target) yon_char_unite("/usr/lib/ublinux/functions get_conf_useradd_from_system ",target,NULL)
#define get_system_shadow_command(target) yon_char_unite("/usr/lib/ublinux/functions get_conf_usershadow_from_system ",target,NULL)
#define get_system_group_command(target) yon_char_unite("/usr/lib/ublinux/functions get_conf_groupadd_from_system ",target,NULL)
#define remove_user_from_system_command(target) yon_char_append("userdel ",target)
#define remove_user_and_homedir_from_system_command yon_char_append("userdel -r ",target)
#define remove_group_from_system_command yon_char_append("groupdel ",target)
#define groups_path "/etc/group" #define groups_path "/etc/group"
#define users_path "/etc/passwd" #define users_path "/etc/passwd"
#define shadow_path "/etc/shadow" #define shadow_path "/etc/shadow"
#define group_shadow_path "/etc/gshadow"
#define uid_path "/etc/login.defs" #define uid_path "/etc/login.defs"
#define password_limits_path "/etc/security/pwquiality.conf" #define password_limits_path "/etc/security/pwquiality.conf"
#define get_user_info_command(target) yon_char_unite("getent passwd \"",target,"\"",NULL) #define get_user_info_command(target) yon_char_unite("getent passwd \"",target,"\"",NULL)
@ -139,10 +148,16 @@ char *local;
typedef struct { typedef struct {
template_config_fields template_config_fields
config_str groups; config_str groups;
int groups_size; int groups_size;
config_str users; config_str users;
int users_size; int users_size;
config_str shadow;
int shadow_size;
config_str group_shadow;
int group_shadow_size;
GtkListStore *users_list; GtkListStore *users_list;
GtkListStore *groups_list; GtkListStore *groups_list;
@ -389,6 +404,7 @@ void yon_samba_sync_proceed();
void yon_accept_changes(); void yon_accept_changes();
void yon_hide_passwords(template_saving_window *window); void yon_hide_passwords(template_saving_window *window);
void on_save_done(main_window *widgets, config_str output, int size); void on_save_done(main_window *widgets, config_str output, int size);
void on_save_failed(main_window *, config_str , int );
void on_config_save(GtkWidget *self, main_window *widgets); void on_config_save(GtkWidget *self, main_window *widgets);
void on_config_global_save(GtkWidget *self, main_window *widgets); void on_config_global_save(GtkWidget *self, main_window *widgets);
void on_config_local_save(GtkWidget *self, main_window *widgets); void on_config_local_save(GtkWidget *self, main_window *widgets);
@ -403,6 +419,8 @@ void yon_delete_confirmation_save(GtkWidget *self, dictionary *dict);
void yon_group_delete_confirmation_save(GtkWidget *self, dictionary *dict); void yon_group_delete_confirmation_save(GtkWidget *self, dictionary *dict);
int yon_check_password_blocked(char *password); int yon_check_password_blocked(char *password);
yon_confirmation_window *yon_delete_confirmation_new(); yon_confirmation_window *yon_delete_confirmation_new();
void yon_system_delete_confirmation_open(main_window *widgets);
void yon_delete_confirmation_open(main_window *widgets); void yon_delete_confirmation_open(main_window *widgets);
void yon_group_delete_confirmation_open(main_window *widgets); void yon_group_delete_confirmation_open(main_window *widgets);
yon_savasettings_window *yon_saving_settings_new(); yon_savasettings_window *yon_saving_settings_new();

@ -51,8 +51,15 @@
#define UPDATE_LABEL _("Update users and groups") #define UPDATE_LABEL _("Update users and groups")
#define SAVING_CONFIGURATION_LABEL _("Additional saving configuration") #define SAVING_CONFIGURATION_LABEL _("Additional saving configuration")
#define SYSTEM_USER_ADD_CONFIRMATION_LABEL(target) yon_char_unite(_("This user doesn't exist in configuration. Are you sure want to add user")," ",target," ", _("to configuration?"),NULL) #define SYSTEM_USER_ADD_CONFIRMATION_LABEL(target) yon_char_unite(_("This user doesn't exist in configuration. Are you sure want to add user")," <b>",target,"</b> ", _("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_USER_SYNC_CONFIRMATION_LABEL(target) yon_char_unite(_("This user exists in configuration. Are you sure want to update user")," <b>",target,"</b> ", _("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")," <b>",target,"</b> ", _("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")," <b>",target,"</b> ", _("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")," <b>",target,"</b> ", _("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")," <b>",target,"</b> ", _("?"),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")," <b>",target,"</b> ", _("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")," <b>",target,"</b>", _("?"),NULL)
//ubl-settings-usergroups-additional-settings.glade //ubl-settings-usergroups-additional-settings.glade
@ -187,8 +194,10 @@
#define PASSWORD_NO_SET_LABEL _("Not specified") #define PASSWORD_NO_SET_LABEL _("Not specified")
#define UID_ALREADY_EXIST_LABEL _("UID already busy") #define UID_ALREADY_EXIST_CONFIG_LABEL _("UID already exists in configuration")
#define GID_ALREADY_EXIST_LABEL _("GID already busy") #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 //ubl-settings-usergroups-password.glade
#define PASSWORD_REPEAT_LABEL _("Repeat password:") #define PASSWORD_REPEAT_LABEL _("Repeat password:")

@ -199,8 +199,7 @@
<property name="resizable">True</property> <property name="resizable">True</property>
<property name="sizing">fixed</property> <property name="sizing">fixed</property>
<property name="min-width">50</property> <property name="min-width">50</property>
<property name="title" translatable="yes">Primary <property name="title" translatable="yes">Primary group</property>
group</property>
<property name="sort-column-id">4</property> <property name="sort-column-id">4</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkCellRendererText"/>

@ -1187,6 +1187,7 @@
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">False</property> <property name="receives-default">False</property>
<property name="halign">start</property> <property name="halign">start</property>
<property name="active">True</property>
<property name="draw-indicator">True</property> <property name="draw-indicator">True</property>
</object> </object>
<packing> <packing>
@ -1202,6 +1203,7 @@
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">False</property> <property name="receives-default">False</property>
<property name="halign">start</property> <property name="halign">start</property>
<property name="active">True</property>
<property name="draw-indicator">True</property> <property name="draw-indicator">True</property>
</object> </object>
<packing> <packing>

@ -374,7 +374,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<object class="GtkTreeViewColumn"> <object class="GtkTreeViewColumn">
<property name="resizable">True</property> <property name="resizable">True</property>
<property name="sizing">fixed</property> <property name="sizing">fixed</property>
<property name="fixed-width">10</property> <property name="fixed-width">50</property>
<property name="min-width">10</property> <property name="min-width">10</property>
<property name="title" translatable="yes">UID</property> <property name="title" translatable="yes">UID</property>
<property name="sort-column-id">1</property> <property name="sort-column-id">1</property>

@ -53,7 +53,7 @@ msgstr ""
msgid "UID" msgid "UID"
msgstr "" msgstr ""
#: source/ubl-strings.h:14 source/ubl-strings.h:102 #: source/ubl-strings.h:14 source/ubl-strings.h:107
msgid "Login" msgid "Login"
msgstr "" msgstr ""
@ -175,7 +175,7 @@ msgstr ""
msgid "Inspect users and groups in system" msgid "Inspect users and groups in system"
msgstr "" msgstr ""
#: source/ubl-strings.h:46 source/ubl-strings.h:56 #: source/ubl-strings.h:46 source/ubl-strings.h:61
msgid "Additional settings" msgid "Additional settings"
msgstr "" msgstr ""
@ -203,521 +203,554 @@ msgstr ""
msgid "Additional saving configuration" msgid "Additional saving configuration"
msgstr "" 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 #: 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" msgid "No password required"
msgstr "" msgstr ""
#: source/ubl-strings.h:58 #: source/ubl-strings.h:63
msgid "Set a password" msgid "Set a password"
msgstr "" msgstr ""
#: source/ubl-strings.h:59 source/ubl-strings.h:105 #: source/ubl-strings.h:64 source/ubl-strings.h:110
msgid "Encrypted" msgid "Encrypted"
msgstr "" msgstr ""
#: source/ubl-strings.h:60 #: source/ubl-strings.h:65
msgid "Unencrypted" msgid "Unencrypted"
msgstr "" msgstr ""
#: source/ubl-strings.h:73 #: source/ubl-strings.h:78
msgid "Accept" msgid "Accept"
msgstr "" msgstr ""
#: source/ubl-strings.h:74 #: source/ubl-strings.h:79
msgid "" msgid ""
"Are you sure want to encrypt all passwords?\n" "Are you sure want to encrypt all passwords?\n"
"This action can't be undone." "This action can't be undone."
msgstr "" msgstr ""
#: source/ubl-strings.h:75 #: source/ubl-strings.h:80
msgid "Encrypt all unencrypted passwords at global configuration" msgid "Encrypt all unencrypted passwords at global configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:76 #: source/ubl-strings.h:81
msgid "DES (Algorithm for Symmetric Encryption)" msgid "DES (Algorithm for Symmetric Encryption)"
msgstr "" msgstr ""
#: source/ubl-strings.h:77 #: source/ubl-strings.h:82
msgid "MD5 (128-bit hashing algorithm)" msgid "MD5 (128-bit hashing algorithm)"
msgstr "" msgstr ""
#: source/ubl-strings.h:78 #: source/ubl-strings.h:83
msgid "yescrypt (Cryptographic hash function)" msgid "yescrypt (Cryptographic hash function)"
msgstr "" msgstr ""
#: source/ubl-strings.h:79 #: source/ubl-strings.h:84
msgid "GOST-YESCRYPT (Design according to GOST R 34.11─2012)" msgid "GOST-YESCRYPT (Design according to GOST R 34.11─2012)"
msgstr "" msgstr ""
#: source/ubl-strings.h:80 #: source/ubl-strings.h:85
msgid "scrypt (Adaptive cryptographic key generation function)" msgid "scrypt (Adaptive cryptographic key generation function)"
msgstr "" msgstr ""
#: source/ubl-strings.h:81 #: source/ubl-strings.h:86
msgid "Blowfish (Symmetric Block Cipher Algorithm)" msgid "Blowfish (Symmetric Block Cipher Algorithm)"
msgstr "" msgstr ""
#: source/ubl-strings.h:82 #: source/ubl-strings.h:87
msgid "bcrypt (Adaptive hash function from the Blowfish family of algorithms)" msgid "bcrypt (Adaptive hash function from the Blowfish family of algorithms)"
msgstr "" msgstr ""
#: source/ubl-strings.h:83 #: source/ubl-strings.h:88
msgid "" msgid ""
"bcrypt-a (Adaptive hash function from the Blowfish family of algorithms)" "bcrypt-a (Adaptive hash function from the Blowfish family of algorithms)"
msgstr "" msgstr ""
#: source/ubl-strings.h:84 #: source/ubl-strings.h:89
msgid "SHA512 (Hash function from the SHA-2 family of algorithms)" msgid "SHA512 (Hash function from the SHA-2 family of algorithms)"
msgstr "" msgstr ""
#: source/ubl-strings.h:85 #: source/ubl-strings.h:90
msgid "SHA256 (Hash function from the SHA-2 family of algorithms)" msgid "SHA256 (Hash function from the SHA-2 family of algorithms)"
msgstr "" msgstr ""
#: source/ubl-strings.h:86 #: source/ubl-strings.h:91
msgid "Sun MD5 (Hash algorithm from Sun Microsystems)" msgid "Sun MD5 (Hash algorithm from Sun Microsystems)"
msgstr "" msgstr ""
#: source/ubl-strings.h:87 #: source/ubl-strings.h:92
msgid "MD5 Unix (Hash algorithm calls standard MD5 thousand times)" msgid "MD5 Unix (Hash algorithm calls standard MD5 thousand times)"
msgstr "" msgstr ""
#: source/ubl-strings.h:88 #: source/ubl-strings.h:93
msgid "" msgid ""
"Extended DES Crypt (Hash function from the BSDi family of DES algorithms)" "Extended DES Crypt (Hash function from the BSDi family of DES algorithms)"
msgstr "" msgstr ""
#: source/ubl-strings.h:89 #: source/ubl-strings.h:94
msgid "descrypt (Hash function from the DES family of algorithms)" msgid "descrypt (Hash function from the DES family of algorithms)"
msgstr "" msgstr ""
#: source/ubl-strings.h:90 #: source/ubl-strings.h:95
msgid "NTHash (Hash function from the NT Windows family of algorithms)" msgid "NTHash (Hash function from the NT Windows family of algorithms)"
msgstr "" msgstr ""
#: source/ubl-strings.h:92 #: source/ubl-strings.h:97
msgid "" msgid ""
"While booting the operating system, apply the settings of all users from the " "While booting the operating system, apply the settings of all users from the "
"configuration" "configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:93 #: source/ubl-strings.h:98
msgid "" msgid ""
"While shutdown, save the settings of all users with UID>=1000 to the " "While shutdown, save the settings of all users with UID>=1000 to the "
"configuration" "configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:96 #: source/ubl-strings.h:101
msgid "Configure group" msgid "Configure group"
msgstr "" msgstr ""
#: source/ubl-strings.h:97 #: source/ubl-strings.h:102
msgid "Add group" msgid "Add group"
msgstr "" msgstr ""
#: source/ubl-strings.h:98 #: source/ubl-strings.h:103
msgid "Group id:" msgid "Group id:"
msgstr "" msgstr ""
#: source/ubl-strings.h:99 #: source/ubl-strings.h:104
msgid "Group name:" msgid "Group name:"
msgstr "" msgstr ""
#: source/ubl-strings.h:100 #: source/ubl-strings.h:105
msgid "Group users:" msgid "Group users:"
msgstr "" msgstr ""
#: source/ubl-strings.h:101 #: source/ubl-strings.h:106
msgid "Automatically" msgid "Automatically"
msgstr "" msgstr ""
#: source/ubl-strings.h:103 #: source/ubl-strings.h:108
msgid "Create group with ununique GID" msgid "Create group with ununique GID"
msgstr "" msgstr ""
#: source/ubl-strings.h:104 #: source/ubl-strings.h:109
msgid "Create system group" msgid "Create system group"
msgstr "" msgstr ""
#: source/ubl-strings.h:106 #: source/ubl-strings.h:111
msgid "Additional configuration" msgid "Additional configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:107 #: source/ubl-strings.h:112
msgid "Group configuration synchronization" msgid "Group configuration synchronization"
msgstr "" msgstr ""
#: source/ubl-strings.h:108 #: source/ubl-strings.h:113
msgid "When shutting down the system, save the group into the configuration" msgid "When shutting down the system, save the group into the configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:109 #: source/ubl-strings.h:114
msgid "Group administrators:" msgid "Group administrators:"
msgstr "" msgstr ""
#: source/ubl-strings.h:110 #: source/ubl-strings.h:115
msgid "Group name must not start with digit" msgid "Group name must not start with digit"
msgstr "" msgstr ""
#: source/ubl-strings.h:113 #: source/ubl-strings.h:118
msgid "Default groups" msgid "Default groups"
msgstr "" msgstr ""
#: source/ubl-strings.h:114 #: source/ubl-strings.h:119
msgid "Main group" msgid "Main group"
msgstr "" msgstr ""
#: source/ubl-strings.h:115 #: source/ubl-strings.h:120
msgid "Additional groups" msgid "Additional groups"
msgstr "" msgstr ""
#: source/ubl-strings.h:116 #: source/ubl-strings.h:121
msgid "Choose groups" msgid "Choose groups"
msgstr "" msgstr ""
#: source/ubl-strings.h:117 #: source/ubl-strings.h:122
msgid "Choose users" msgid "Choose users"
msgstr "" msgstr ""
#: source/ubl-strings.h:120 #: source/ubl-strings.h:125
msgid "System users and groups" msgid "System users and groups"
msgstr "" msgstr ""
#: source/ubl-strings.h:121 #: source/ubl-strings.h:126
msgid "Locked" msgid "Locked"
msgstr "" msgstr ""
#: source/ubl-strings.h:122 #: source/ubl-strings.h:127
msgid "Username" msgid "Username"
msgstr "" msgstr ""
#: source/ubl-strings.h:123 #: source/ubl-strings.h:128
msgid "" msgid ""
"Primary\n" "Primary\n"
"group" "group"
msgstr "" msgstr ""
#: source/ubl-strings.h:124 #: source/ubl-strings.h:129
msgid "" msgid ""
"Home\n" "Home\n"
"directory" "directory"
msgstr "" msgstr ""
#: source/ubl-strings.h:125 source/ubl-strings.h:131 #: source/ubl-strings.h:130 source/ubl-strings.h:136
msgid "Group" msgid "Group"
msgstr "" msgstr ""
#: source/ubl-strings.h:126 #: source/ubl-strings.h:131
msgid "Update the system users and groups list" msgid "Update the system users and groups list"
msgstr "" msgstr ""
#: source/ubl-strings.h:127 #: source/ubl-strings.h:132
msgid "Toggle system groups and users" msgid "Toggle system groups and users"
msgstr "" msgstr ""
#: source/ubl-strings.h:129 #: source/ubl-strings.h:134
msgid "Password mismatch" msgid "Password mismatch"
msgstr "" msgstr ""
#: source/ubl-strings.h:130 #: source/ubl-strings.h:135
msgid "Password must be at least" msgid "Password must be at least"
msgstr "" msgstr ""
#: source/ubl-strings.h:130 #: source/ubl-strings.h:135
msgid "characters" msgid "characters"
msgstr "" msgstr ""
#: source/ubl-strings.h:132 #: source/ubl-strings.h:137
msgid "" msgid ""
"Days until\n" "Days until\n"
"warning" "warning"
msgstr "" msgstr ""
#: source/ubl-strings.h:133 #: source/ubl-strings.h:138
msgid "" msgid ""
"Days\n" "Days\n"
"without activity" "without activity"
msgstr "" msgstr ""
#: source/ubl-strings.h:134 #: source/ubl-strings.h:139
msgid "" msgid ""
"Shell\n" "Shell\n"
"path" "path"
msgstr "" msgstr ""
#: source/ubl-strings.h:135 #: source/ubl-strings.h:140
msgid "" msgid ""
"Password has\n" "Password has\n"
"been changed" "been changed"
msgstr "" msgstr ""
#: source/ubl-strings.h:136 #: source/ubl-strings.h:141
msgid "" msgid ""
"Expiration\n" "Expiration\n"
"date" "date"
msgstr "" msgstr ""
#: source/ubl-strings.h:137 #: source/ubl-strings.h:142
msgid "" msgid ""
"Password change\n" "Password change\n"
"interval (min)" "interval (min)"
msgstr "" msgstr ""
#: source/ubl-strings.h:138 #: source/ubl-strings.h:143
msgid "" msgid ""
"Password change\n" "Password change\n"
"interval (max)" "interval (max)"
msgstr "" msgstr ""
#: source/ubl-strings.h:141 #: source/ubl-strings.h:146
msgid "Add user" msgid "Add user"
msgstr "" msgstr ""
#: source/ubl-strings.h:142 #: source/ubl-strings.h:147
msgid "Configure user" msgid "Configure user"
msgstr "" msgstr ""
#: source/ubl-strings.h:143 #: source/ubl-strings.h:148
msgid "Set" msgid "Set"
msgstr "" msgstr ""
#: source/ubl-strings.h:144 #: source/ubl-strings.h:149
msgid "Empty important field" msgid "Empty important field"
msgstr "" msgstr ""
#: source/ubl-strings.h:145 #: source/ubl-strings.h:150
msgid "Login must not start with digit" msgid "Login must not start with digit"
msgstr "" msgstr ""
#: source/ubl-strings.h:146 #: source/ubl-strings.h:151
msgid "Loading has failed" msgid "Loading has failed"
msgstr "" msgstr ""
#: source/ubl-strings.h:147 #: source/ubl-strings.h:152
msgid "Login name" msgid "Login name"
msgstr "" msgstr ""
#: source/ubl-strings.h:148 #: source/ubl-strings.h:153
msgid "Additional groups:" msgid "Additional groups:"
msgstr "" msgstr ""
#: source/ubl-strings.h:149 #: source/ubl-strings.h:154
msgid "Password configuration" msgid "Password configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:150 #: source/ubl-strings.h:155
msgid "Password has been changed:" msgid "Password has been changed:"
msgstr "" msgstr ""
#: source/ubl-strings.h:151 #: source/ubl-strings.h:156
msgid "expiration date:" msgid "expiration date:"
msgstr "" msgstr ""
#: source/ubl-strings.h:152 #: source/ubl-strings.h:157
msgid "Password change interval: minimum" msgid "Password change interval: minimum"
msgstr "" msgstr ""
#: source/ubl-strings.h:153 #: source/ubl-strings.h:158
msgid "days, maximum" msgid "days, maximum"
msgstr "" msgstr ""
#: source/ubl-strings.h:154 #: source/ubl-strings.h:159
msgid "days" msgid "days"
msgstr "" msgstr ""
#: source/ubl-strings.h:155 #: source/ubl-strings.h:160
msgid "Days until warning:" msgid "Days until warning:"
msgstr "" msgstr ""
#: source/ubl-strings.h:156 #: source/ubl-strings.h:161
msgid "Days without activity:" msgid "Days without activity:"
msgstr "" msgstr ""
#: source/ubl-strings.h:157 #: source/ubl-strings.h:162
msgid "Force change at next login" msgid "Force change at next login"
msgstr "" msgstr ""
#: source/ubl-strings.h:158 #: source/ubl-strings.h:163
msgid "User shell:" msgid "User shell:"
msgstr "" msgstr ""
#: source/ubl-strings.h:159 #: source/ubl-strings.h:164
msgid "Home directory:" msgid "Home directory:"
msgstr "" msgstr ""
#: source/ubl-strings.h:160 #: source/ubl-strings.h:165
msgid "Don't set" msgid "Don't set"
msgstr "" msgstr ""
#: source/ubl-strings.h:161 #: source/ubl-strings.h:166
msgid "Create system user" msgid "Create system user"
msgstr "" msgstr ""
#: source/ubl-strings.h:162 #: source/ubl-strings.h:167
msgid "Create user with ununique (repeating) UID" msgid "Create user with ununique (repeating) UID"
msgstr "" msgstr ""
#: source/ubl-strings.h:163 #: source/ubl-strings.h:168
msgid "Do not check login for compliance with character rules" msgid "Do not check login for compliance with character rules"
msgstr "" msgstr ""
#: source/ubl-strings.h:164 #: source/ubl-strings.h:169
msgid "Temporary deactivation" msgid "Temporary deactivation"
msgstr "" msgstr ""
#: source/ubl-strings.h:165 #: source/ubl-strings.h:170
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: source/ubl-strings.h:166 #: source/ubl-strings.h:171
msgid "login_name" msgid "login_name"
msgstr "" msgstr ""
#: source/ubl-strings.h:167 #: source/ubl-strings.h:172
msgid "group_name" msgid "group_name"
msgstr "" msgstr ""
#: source/ubl-strings.h:168 #: source/ubl-strings.h:173
msgid "User name" msgid "User name"
msgstr "" msgstr ""
#: source/ubl-strings.h:169 #: source/ubl-strings.h:174
msgid "Sync user" msgid "Sync user"
msgstr "" msgstr ""
#: source/ubl-strings.h:170 #: source/ubl-strings.h:175
msgid "Sync user with password" msgid "Sync user with password"
msgstr "" msgstr ""
#: source/ubl-strings.h:171 #: source/ubl-strings.h:176
msgid "Encrypt all passwords" msgid "Encrypt all passwords"
msgstr "" msgstr ""
#: source/ubl-strings.h:173 #: source/ubl-strings.h:178
msgid "User configuration" msgid "User configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:174 #: source/ubl-strings.h:179
msgid "User configuration synchronization" msgid "User configuration synchronization"
msgstr "" msgstr ""
#: source/ubl-strings.h:175 #: source/ubl-strings.h:180
msgid "During system startup, load the user from the configuration" msgid "During system startup, load the user from the configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:176 #: source/ubl-strings.h:181
msgid "When shutting down the system, save the user into the configuration" msgid "When shutting down the system, save the user into the configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:177 #: source/ubl-strings.h:182
msgid "User password configuration syncronization" msgid "User password configuration syncronization"
msgstr "" msgstr ""
#: source/ubl-strings.h:178 #: source/ubl-strings.h:183
msgid "" msgid ""
"During system startup, load the user's parameters from the configuration" "During system startup, load the user's parameters from the configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:179 #: source/ubl-strings.h:184
msgid "" msgid ""
"When shutting down the system, save the user's parameters into the " "When shutting down the system, save the user's parameters into the "
"configuration" "configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:181 #: source/ubl-strings.h:186
msgid "Basic" msgid "Basic"
msgstr "" msgstr ""
#: source/ubl-strings.h:182 #: source/ubl-strings.h:187
msgid "Additional" msgid "Additional"
msgstr "" msgstr ""
#: source/ubl-strings.h:183 #: source/ubl-strings.h:188
msgid "Syncronization" msgid "Syncronization"
msgstr "" msgstr ""
#: source/ubl-strings.h:185 #: source/ubl-strings.h:190
msgid "Not specified" msgid "Not specified"
msgstr "" msgstr ""
#: source/ubl-strings.h:187 #: source/ubl-strings.h:192
msgid "UID already busy" msgid "UID already exists in configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:188 #: source/ubl-strings.h:193
msgid "GID already busy" msgid "UID already exists in system"
msgstr "" 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:" msgid "Repeat password:"
msgstr "" msgstr ""
#: source/ubl-strings.h:192 #: source/ubl-strings.h:199
msgid "Password hash:" msgid "Password hash:"
msgstr "" msgstr ""
#: source/ubl-strings.h:193 #: source/ubl-strings.h:200
msgid "Do not encrypt password" msgid "Do not encrypt password"
msgstr "" msgstr ""
#: source/ubl-strings.h:196 #: source/ubl-strings.h:203
msgid "Additional configuration of service parameter saving" msgid "Additional configuration of service parameter saving"
msgstr "" msgstr ""
#: source/ubl-strings.h:197 #: source/ubl-strings.h:204
msgid "" msgid ""
"At every system shutdown save changes of (root)/var/lib/samba\n" "At every system shutdown save changes of (root)/var/lib/samba\n"
"into (hd)/ublinux-data/rootcopy" "into (hd)/ublinux-data/rootcopy"
msgstr "" msgstr ""
#: source/ubl-strings.h:198 #: source/ubl-strings.h:205
msgid "For system save mode \"Sandbox\"" msgid "For system save mode \"Sandbox\""
msgstr "" msgstr ""
#: source/ubl-strings.h:201 #: source/ubl-strings.h:208
msgid "Group deletion" msgid "Group deletion"
msgstr "" msgstr ""
#: source/ubl-strings.h:202 #: source/ubl-strings.h:209
msgid "Confirm group(-s) deletion:" msgid "Confirm group(-s) deletion:"
msgstr "" msgstr ""
#: source/ubl-strings.h:204 #: source/ubl-strings.h:211
msgid "User deletion" msgid "User deletion"
msgstr "" msgstr ""
#: source/ubl-strings.h:205 #: source/ubl-strings.h:212
msgid "Confirm user(-s) deletion:" msgid "Confirm user(-s) deletion:"
msgstr "" msgstr ""
#: source/ubl-strings.h:206 #: source/ubl-strings.h:213
msgid "Chosen" msgid "Chosen"
msgstr "" msgstr ""
#: source/ubl-strings.h:207 #: source/ubl-strings.h:214
msgid "User" msgid "User"
msgstr "" msgstr ""
#: source/ubl-strings.h:208 #: source/ubl-strings.h:215
msgid "Home directory" msgid "Home directory"
msgstr "" msgstr ""
#: source/ubl-strings.h:209 #: source/ubl-strings.h:216
msgid "Delete home directory" msgid "Delete home directory"
msgstr "" msgstr ""
#: source/ubl-strings.h:211 #: source/ubl-strings.h:218
msgid "Configuration users" msgid "Configuration users"
msgstr "" msgstr ""
#: source/ubl-strings.h:212 #: source/ubl-strings.h:219
msgid "Configuration groups" msgid "Configuration groups"
msgstr "" msgstr ""
#: source/ubl-strings.h:213 #: source/ubl-strings.h:220
msgid "System users" msgid "System users"
msgstr "" msgstr ""
#: source/ubl-strings.h:214 #: source/ubl-strings.h:221
msgid "System groups" msgid "System groups"
msgstr "" msgstr ""

@ -53,7 +53,7 @@ msgstr "Алгоритм хэширования пароля:"
msgid "UID" msgid "UID"
msgstr "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" msgid "Login"
msgstr "Логин" msgstr "Логин"
@ -189,7 +189,7 @@ msgstr "Обзор файлов"
msgid "Inspect users and groups in system" msgid "Inspect users and groups in system"
msgstr "Просмотр пользователей и групп в системе" msgstr "Просмотр пользователей и групп в системе"
#: source/ubl-strings.h:46 source/ubl-strings.h:56 #: source/ubl-strings.h:46 source/ubl-strings.h:61
msgid "Additional settings" msgid "Additional settings"
msgstr "Дополнительные настройки" msgstr "Дополнительные настройки"
@ -217,27 +217,58 @@ msgstr "Обновить список пользователей и групп"
msgid "Additional saving configuration" msgid "Additional saving configuration"
msgstr "Дополнительные настройки сохранения" 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 #: 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" msgid "No password required"
msgstr "Пароль не требуется" msgstr "Пароль не требуется"
#: source/ubl-strings.h:58 #: source/ubl-strings.h:63
msgid "Set a password" msgid "Set a password"
msgstr "Задать пароль" msgstr "Задать пароль"
#: source/ubl-strings.h:59 source/ubl-strings.h:105 #: source/ubl-strings.h:64 source/ubl-strings.h:110
msgid "Encrypted" msgid "Encrypted"
msgstr "Зашифрован" msgstr "Зашифрован"
#: source/ubl-strings.h:60 #: source/ubl-strings.h:65
msgid "Unencrypted" msgid "Unencrypted"
msgstr "Незашифрован" msgstr "Не зашифрован"
#: source/ubl-strings.h:73 #: source/ubl-strings.h:78
msgid "Accept" msgid "Accept"
msgstr "Принять" msgstr "Принять"
#: source/ubl-strings.h:74 #: source/ubl-strings.h:79
msgid "" msgid ""
"Are you sure want to encrypt all passwords?\n" "Are you sure want to encrypt all passwords?\n"
"This action can't be undone." "This action can't be undone."
@ -245,73 +276,73 @@ msgstr ""
"Вы уверены что хотите зашифровать все пароли?\n" "Вы уверены что хотите зашифровать все пароли?\n"
"Это действие нельзя отменить." "Это действие нельзя отменить."
#: source/ubl-strings.h:75 #: source/ubl-strings.h:80
msgid "Encrypt all unencrypted passwords at global configuration" msgid "Encrypt all unencrypted passwords at global configuration"
msgstr "Зашифровать все незашифрованные пароли в глобальной конфигурации" msgstr "Зашифровать все незашифрованные пароли в глобальной конфигурации"
#: source/ubl-strings.h:76 #: source/ubl-strings.h:81
msgid "DES (Algorithm for Symmetric Encryption)" msgid "DES (Algorithm for Symmetric Encryption)"
msgstr "DES (Алгоритм для симметричного шифрования)" msgstr "DES (Алгоритм для симметричного шифрования)"
#: source/ubl-strings.h:77 #: source/ubl-strings.h:82
msgid "MD5 (128-bit hashing algorithm)" msgid "MD5 (128-bit hashing algorithm)"
msgstr "MD5 (128-битный алгоритм хеширования)" msgstr "MD5 (128-битный алгоритм хеширования)"
#: source/ubl-strings.h:78 #: source/ubl-strings.h:83
msgid "yescrypt (Cryptographic hash function)" msgid "yescrypt (Cryptographic hash function)"
msgstr "yescrypt (Криптографическая хэш-функция)" msgstr "yescrypt (Криптографическая хэш-функция)"
#: source/ubl-strings.h:79 #: source/ubl-strings.h:84
msgid "GOST-YESCRYPT (Design according to GOST R 34.11─2012)" msgid "GOST-YESCRYPT (Design according to GOST R 34.11─2012)"
msgstr "GOST-YESCRYPT (Конструкция согласно ГОСТ Р 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)" msgid "scrypt (Adaptive cryptographic key generation function)"
msgstr "scrypt (Адаптивная криптографическая функция формирования ключа)" msgstr "scrypt (Адаптивная криптографическая функция формирования ключа)"
#: source/ubl-strings.h:81 #: source/ubl-strings.h:86
msgid "Blowfish (Symmetric Block Cipher Algorithm)" msgid "Blowfish (Symmetric Block Cipher Algorithm)"
msgstr "Blowfish (Алгоритм блочного симметричного шифрования)" msgstr "Blowfish (Алгоритм блочного симметричного шифрования)"
#: source/ubl-strings.h:82 #: source/ubl-strings.h:87
msgid "bcrypt (Adaptive hash function from the Blowfish family of algorithms)" msgid "bcrypt (Adaptive hash function from the Blowfish family of algorithms)"
msgstr "bcrypt (Адаптивная хеш-функция из семейства алгоритмов Blowfish)" msgstr "bcrypt (Адаптивная хеш-функция из семейства алгоритмов Blowfish)"
#: source/ubl-strings.h:83 #: source/ubl-strings.h:88
msgid "" msgid ""
"bcrypt-a (Adaptive hash function from the Blowfish family of algorithms)" "bcrypt-a (Adaptive hash function from the Blowfish family of algorithms)"
msgstr "bcrypt-a (Адаптивная хеш-функция из семейства алгоритмов Blowfish)" 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)" msgid "SHA512 (Hash function from the SHA-2 family of algorithms)"
msgstr "SHA512 (Хеш-функция из семейства алгоритмов SHA-2)" 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)" msgid "SHA256 (Hash function from the SHA-2 family of algorithms)"
msgstr "SHA256 (Хеш-функция из семейства алгоритмов SHA-2)" msgstr "SHA256 (Хеш-функция из семейства алгоритмов SHA-2)"
#: source/ubl-strings.h:86 #: source/ubl-strings.h:91
msgid "Sun MD5 (Hash algorithm from Sun Microsystems)" msgid "Sun MD5 (Hash algorithm from Sun Microsystems)"
msgstr "Sun MD5 (Хеш-алгоритм от 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)" msgid "MD5 Unix (Hash algorithm calls standard MD5 thousand times)"
msgstr "MD5 Unix (Хэш-алгоритм вызывает тысячу раз стандартный MD5)" msgstr "MD5 Unix (Хэш-алгоритм вызывает тысячу раз стандартный MD5)"
#: source/ubl-strings.h:88 #: source/ubl-strings.h:93
msgid "" msgid ""
"Extended DES Crypt (Hash function from the BSDi family of DES algorithms)" "Extended DES Crypt (Hash function from the BSDi family of DES algorithms)"
msgstr "Extended DES Crypt (Хеш-функция из семейства алгоритмов DES от BSDi)" 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)" msgid "descrypt (Hash function from the DES family of algorithms)"
msgstr "descrypt (Хеш-функция из семейства алгоритмов DES)" msgstr "descrypt (Хеш-функция из семейства алгоритмов DES)"
#: source/ubl-strings.h:90 #: source/ubl-strings.h:95
msgid "NTHash (Hash function from the NT Windows family of algorithms)" msgid "NTHash (Hash function from the NT Windows family of algorithms)"
msgstr "NTHash (Хеш-функция из семейства алгоритмов NT Windows)" msgstr "NTHash (Хеш-функция из семейства алгоритмов NT Windows)"
#: source/ubl-strings.h:92 #: source/ubl-strings.h:97
msgid "" msgid ""
"While booting the operating system, apply the settings of all users from the " "While booting the operating system, apply the settings of all users from the "
"configuration" "configuration"
@ -319,7 +350,7 @@ msgstr ""
"При запуске операционной системы применять настройки всех пользователей из " "При запуске операционной системы применять настройки всех пользователей из "
"конфигурации" "конфигурации"
#: source/ubl-strings.h:93 #: source/ubl-strings.h:98
msgid "" msgid ""
"While shutdown, save the settings of all users with UID>=1000 to the " "While shutdown, save the settings of all users with UID>=1000 to the "
"configuration" "configuration"
@ -327,91 +358,91 @@ msgstr ""
"При завершении работы сохранить настройки пользователей с UID>=1000 в " "При завершении работы сохранить настройки пользователей с UID>=1000 в "
"конфигурацию" "конфигурацию"
#: source/ubl-strings.h:96 #: source/ubl-strings.h:101
msgid "Configure group" msgid "Configure group"
msgstr "Редактировать группу" msgstr "Редактировать группу"
#: source/ubl-strings.h:97 #: source/ubl-strings.h:102
msgid "Add group" msgid "Add group"
msgstr "Добавить группу" msgstr "Добавить группу"
#: source/ubl-strings.h:98 #: source/ubl-strings.h:103
msgid "Group id:" msgid "Group id:"
msgstr "Идентификатор группы (GID):" msgstr "Идентификатор группы (GID):"
#: source/ubl-strings.h:99 #: source/ubl-strings.h:104
msgid "Group name:" msgid "Group name:"
msgstr "Имя группы:" msgstr "Имя группы:"
#: source/ubl-strings.h:100 #: source/ubl-strings.h:105
msgid "Group users:" msgid "Group users:"
msgstr "Пользователи группы:" msgstr "Пользователи группы:"
#: source/ubl-strings.h:101 #: source/ubl-strings.h:106
msgid "Automatically" msgid "Automatically"
msgstr "Автоматически" msgstr "Автоматически"
#: source/ubl-strings.h:103 #: source/ubl-strings.h:108
msgid "Create group with ununique GID" msgid "Create group with ununique GID"
msgstr "Создать группу с повторяющимися (не уникальными) GID" msgstr "Создать группу с повторяющимися (не уникальными) GID"
#: source/ubl-strings.h:104 #: source/ubl-strings.h:109
msgid "Create system group" msgid "Create system group"
msgstr "Создать системную группу" msgstr "Создать системную группу"
#: source/ubl-strings.h:106 #: source/ubl-strings.h:111
msgid "Additional configuration" msgid "Additional configuration"
msgstr "Дополнительные настройки" msgstr "Дополнительные настройки"
#: source/ubl-strings.h:107 #: source/ubl-strings.h:112
msgid "Group configuration synchronization" msgid "Group configuration synchronization"
msgstr "Синхронизация настроек группы" msgstr "Синхронизация настроек группы"
#: source/ubl-strings.h:108 #: source/ubl-strings.h:113
msgid "When shutting down the system, save the group into the configuration" msgid "When shutting down the system, save the group into the configuration"
msgstr "При завершении работы системы сохранить группу в конфигурацию" msgstr "При завершении работы системы сохранить группу в конфигурацию"
#: source/ubl-strings.h:109 #: source/ubl-strings.h:114
msgid "Group administrators:" msgid "Group administrators:"
msgstr "Администраторы группы:" msgstr "Администраторы группы:"
#: source/ubl-strings.h:110 #: source/ubl-strings.h:115
msgid "Group name must not start with digit" msgid "Group name must not start with digit"
msgstr "Имя группы не должно начинаться с цифры" msgstr "Имя группы не должно начинаться с цифры"
#: source/ubl-strings.h:113 #: source/ubl-strings.h:118
msgid "Default groups" msgid "Default groups"
msgstr "Группы пользователей по умолчанию" msgstr "Группы пользователей по умолчанию"
#: source/ubl-strings.h:114 #: source/ubl-strings.h:119
msgid "Main group" msgid "Main group"
msgstr "Основная группа" msgstr "Основная группа"
#: source/ubl-strings.h:115 #: source/ubl-strings.h:120
msgid "Additional groups" msgid "Additional groups"
msgstr "Дополнительные группы" msgstr "Дополнительные группы"
#: source/ubl-strings.h:116 #: source/ubl-strings.h:121
msgid "Choose groups" msgid "Choose groups"
msgstr "Выбрать группы" msgstr "Выбрать группы"
#: source/ubl-strings.h:117 #: source/ubl-strings.h:122
msgid "Choose users" msgid "Choose users"
msgstr "Выбрать пользователей" msgstr "Выбрать пользователей"
#: source/ubl-strings.h:120 #: source/ubl-strings.h:125
msgid "System users and groups" msgid "System users and groups"
msgstr "Пользователи и группы в системе" msgstr "Пользователи и группы в системе"
#: source/ubl-strings.h:121 #: source/ubl-strings.h:126
msgid "Locked" msgid "Locked"
msgstr "Отключен" msgstr "Отключен"
#: source/ubl-strings.h:122 #: source/ubl-strings.h:127
msgid "Username" msgid "Username"
msgstr "Имя пользователя" msgstr "Имя пользователя"
#: source/ubl-strings.h:123 #: source/ubl-strings.h:128
msgid "" msgid ""
"Primary\n" "Primary\n"
"group" "group"
@ -419,7 +450,7 @@ msgstr ""
"Основная\n" "Основная\n"
"группа" "группа"
#: source/ubl-strings.h:124 #: source/ubl-strings.h:129
msgid "" msgid ""
"Home\n" "Home\n"
"directory" "directory"
@ -427,31 +458,31 @@ msgstr ""
"Домашний\n" "Домашний\n"
"каталог" "каталог"
#: source/ubl-strings.h:125 source/ubl-strings.h:131 #: source/ubl-strings.h:130 source/ubl-strings.h:136
msgid "Group" msgid "Group"
msgstr "Группа" msgstr "Группа"
#: source/ubl-strings.h:126 #: source/ubl-strings.h:131
msgid "Update the system users and groups list" msgid "Update the system users and groups list"
msgstr "Обновить список пользователей и групп системы" msgstr "Обновить список пользователей и групп системы"
#: source/ubl-strings.h:127 #: source/ubl-strings.h:132
msgid "Toggle system groups and users" msgid "Toggle system groups and users"
msgstr "Переключить видимость системных пользователей и групп" msgstr "Переключить видимость системных пользователей и групп"
#: source/ubl-strings.h:129 #: source/ubl-strings.h:134
msgid "Password mismatch" msgid "Password mismatch"
msgstr "Несовпадение паролей" msgstr "Несовпадение паролей"
#: source/ubl-strings.h:130 #: source/ubl-strings.h:135
msgid "Password must be at least" msgid "Password must be at least"
msgstr "Пароль должен состоять из как минимум" msgstr "Пароль должен состоять из как минимум"
#: source/ubl-strings.h:130 #: source/ubl-strings.h:135
msgid "characters" msgid "characters"
msgstr "символов" msgstr "символов"
#: source/ubl-strings.h:132 #: source/ubl-strings.h:137
msgid "" msgid ""
"Days until\n" "Days until\n"
"warning" "warning"
@ -459,7 +490,7 @@ msgstr ""
"Дней до\n" "Дней до\n"
"предупреждения" "предупреждения"
#: source/ubl-strings.h:133 #: source/ubl-strings.h:138
msgid "" msgid ""
"Days\n" "Days\n"
"without activity" "without activity"
@ -467,7 +498,7 @@ msgstr ""
"Дней без\n" "Дней без\n"
"активности" "активности"
#: source/ubl-strings.h:134 #: source/ubl-strings.h:139
msgid "" msgid ""
"Shell\n" "Shell\n"
"path" "path"
@ -475,7 +506,7 @@ msgstr ""
"Путь до\n" "Путь до\n"
"оболочки" "оболочки"
#: source/ubl-strings.h:135 #: source/ubl-strings.h:140
msgid "" msgid ""
"Password has\n" "Password has\n"
"been changed" "been changed"
@ -483,7 +514,7 @@ msgstr ""
"Пароль\n" "Пароль\n"
"изменён" "изменён"
#: source/ubl-strings.h:136 #: source/ubl-strings.h:141
msgid "" msgid ""
"Expiration\n" "Expiration\n"
"date" "date"
@ -491,7 +522,7 @@ msgstr ""
"Дата\n" "Дата\n"
"устаревания" "устаревания"
#: source/ubl-strings.h:137 #: source/ubl-strings.h:142
msgid "" msgid ""
"Password change\n" "Password change\n"
"interval (min)" "interval (min)"
@ -499,7 +530,7 @@ msgstr ""
"Интервал смены\n" "Интервал смены\n"
"пароля (мин.)" "пароля (мин.)"
#: source/ubl-strings.h:138 #: source/ubl-strings.h:143
msgid "" msgid ""
"Password change\n" "Password change\n"
"interval (max)" "interval (max)"
@ -507,207 +538,215 @@ msgstr ""
"Интервал смены\n" "Интервал смены\n"
"пароля (макс.)" "пароля (макс.)"
#: source/ubl-strings.h:141 #: source/ubl-strings.h:146
msgid "Add user" msgid "Add user"
msgstr "Добавить пользователя" msgstr "Добавить пользователя"
#: source/ubl-strings.h:142 #: source/ubl-strings.h:147
msgid "Configure user" msgid "Configure user"
msgstr "Редактировать пользователя" msgstr "Редактировать пользователя"
#: source/ubl-strings.h:143 #: source/ubl-strings.h:148
msgid "Set" msgid "Set"
msgstr "Задать" msgstr "Задать"
#: source/ubl-strings.h:144 #: source/ubl-strings.h:149
msgid "Empty important field" msgid "Empty important field"
msgstr "Пустое важное поле" msgstr "Пустое важное поле"
#: source/ubl-strings.h:145 #: source/ubl-strings.h:150
msgid "Login must not start with digit" msgid "Login must not start with digit"
msgstr "Логин не должен начинаться с цифры" msgstr "Логин не должен начинаться с цифры"
#: source/ubl-strings.h:146 #: source/ubl-strings.h:151
msgid "Loading has failed" msgid "Loading has failed"
msgstr "Ошибка загрузки" msgstr "Ошибка загрузки"
#: source/ubl-strings.h:147 #: source/ubl-strings.h:152
msgid "Login name" msgid "Login name"
msgstr "Имя логина" msgstr "Имя логина"
#: source/ubl-strings.h:148 #: source/ubl-strings.h:153
msgid "Additional groups:" msgid "Additional groups:"
msgstr "Дополнительные группы:" msgstr "Дополнительные группы:"
#: source/ubl-strings.h:149 #: source/ubl-strings.h:154
msgid "Password configuration" msgid "Password configuration"
msgstr "Конфигурация пароля" msgstr "Конфигурация пароля"
#: source/ubl-strings.h:150 #: source/ubl-strings.h:155
msgid "Password has been changed:" msgid "Password has been changed:"
msgstr "Пароль изменён:" msgstr "Пароль изменён:"
#: source/ubl-strings.h:151 #: source/ubl-strings.h:156
msgid "expiration date:" msgid "expiration date:"
msgstr "Дата устаревания:" msgstr "Дата устаревания:"
#: source/ubl-strings.h:152 #: source/ubl-strings.h:157
msgid "Password change interval: minimum" msgid "Password change interval: minimum"
msgstr "Интервал смены пароля: минимум" msgstr "Интервал смены пароля: минимум"
#: source/ubl-strings.h:153 #: source/ubl-strings.h:158
msgid "days, maximum" msgid "days, maximum"
msgstr "дней, максимум" msgstr "дней, максимум"
#: source/ubl-strings.h:154 #: source/ubl-strings.h:159
msgid "days" msgid "days"
msgstr "дней" msgstr "дней"
#: source/ubl-strings.h:155 #: source/ubl-strings.h:160
msgid "Days until warning:" msgid "Days until warning:"
msgstr "Дней до предупреждения:" msgstr "Дней до предупреждения:"
#: source/ubl-strings.h:156 #: source/ubl-strings.h:161
msgid "Days without activity:" msgid "Days without activity:"
msgstr "Дней без активности:" msgstr "Дней без активности:"
#: source/ubl-strings.h:157 #: source/ubl-strings.h:162
msgid "Force change at next login" msgid "Force change at next login"
msgstr "Принудительно сменить при следующем входе в систему" msgstr "Принудительно сменить при следующем входе в систему"
#: source/ubl-strings.h:158 #: source/ubl-strings.h:163
msgid "User shell:" msgid "User shell:"
msgstr "Оболочка пользователя:" msgstr "Оболочка пользователя:"
#: source/ubl-strings.h:159 #: source/ubl-strings.h:164
msgid "Home directory:" msgid "Home directory:"
msgstr "Домашний каталог:" msgstr "Домашний каталог:"
#: source/ubl-strings.h:160 #: source/ubl-strings.h:165
msgid "Don't set" msgid "Don't set"
msgstr "Не создавать" msgstr "Не создавать"
#: source/ubl-strings.h:161 #: source/ubl-strings.h:166
msgid "Create system user" msgid "Create system user"
msgstr "Создать системного пользователя" msgstr "Создать системного пользователя"
#: source/ubl-strings.h:162 #: source/ubl-strings.h:167
msgid "Create user with ununique (repeating) UID" msgid "Create user with ununique (repeating) UID"
msgstr "Создать пользователя с повторяющимися (не уникальными) UID" msgstr "Создать пользователя с повторяющимися (не уникальными) UID"
#: source/ubl-strings.h:163 #: source/ubl-strings.h:168
msgid "Do not check login for compliance with character rules" msgid "Do not check login for compliance with character rules"
msgstr "Не проверять логин на несоответствие правилам использования символов" msgstr "Не проверять логин на несоответствие правилам использования символов"
#: source/ubl-strings.h:164 #: source/ubl-strings.h:169
msgid "Temporary deactivation" msgid "Temporary deactivation"
msgstr "Временное отключение учётной записи" msgstr "Временное отключение учётной записи"
#: source/ubl-strings.h:165 #: source/ubl-strings.h:170
msgid "Save" msgid "Save"
msgstr "Сохранить" msgstr "Сохранить"
#: source/ubl-strings.h:166 #: source/ubl-strings.h:171
msgid "login_name" msgid "login_name"
msgstr "Имя_логина" msgstr "Имя_логина"
#: source/ubl-strings.h:167 #: source/ubl-strings.h:172
msgid "group_name" msgid "group_name"
msgstr "Имя_группы" msgstr "Имя_группы"
#: source/ubl-strings.h:168 #: source/ubl-strings.h:173
msgid "User name" msgid "User name"
msgstr "Имя пользователя" msgstr "Имя пользователя"
#: source/ubl-strings.h:169 #: source/ubl-strings.h:174
msgid "Sync user" msgid "Sync user"
msgstr "Синхронизировать пользователя" msgstr "Синхронизировать пользователя"
#: source/ubl-strings.h:170 #: source/ubl-strings.h:175
msgid "Sync user with password" msgid "Sync user with password"
msgstr "Синхронизировать пользователя с паролем" msgstr "Синхронизировать пользователя с паролем"
#: source/ubl-strings.h:171 #: source/ubl-strings.h:176
msgid "Encrypt all passwords" msgid "Encrypt all passwords"
msgstr "Зашифровать все пароли" msgstr "Зашифровать все пароли"
#: source/ubl-strings.h:173 #: source/ubl-strings.h:178
msgid "User configuration" msgid "User configuration"
msgstr "Настройка пользователя" msgstr "Настройка пользователя"
#: source/ubl-strings.h:174 #: source/ubl-strings.h:179
msgid "User configuration synchronization" msgid "User configuration synchronization"
msgstr "Синхронизация настроек пользователя" msgstr "Синхронизация настроек пользователя"
#: source/ubl-strings.h:175 #: source/ubl-strings.h:180
msgid "During system startup, load the user from the configuration" msgid "During system startup, load the user from the configuration"
msgstr "" msgstr ""
"При запуске операционной системы применять настройки пользователя из " "При запуске операционной системы применять настройки пользователя из "
"конфигурации" "конфигурации"
#: source/ubl-strings.h:176 #: source/ubl-strings.h:181
msgid "When shutting down the system, save the user into the configuration" msgid "When shutting down the system, save the user into the configuration"
msgstr "" msgstr ""
"При завершении работы операционной системы сохранить настройки пользователя " "При завершении работы операционной системы сохранить настройки пользователя "
"в конфигурацию" "в конфигурацию"
#: source/ubl-strings.h:177 #: source/ubl-strings.h:182
msgid "User password configuration syncronization" msgid "User password configuration syncronization"
msgstr "Синхронизация настроек пароля пользователя" msgstr "Синхронизация настроек пароля пользователя"
#: source/ubl-strings.h:178 #: source/ubl-strings.h:183
msgid "" msgid ""
"During system startup, load the user's parameters from the configuration" "During system startup, load the user's parameters from the configuration"
msgstr "При загрузке системы загрузить параметры пользователя из конфигурации" msgstr "При загрузке системы загрузить параметры пользователя из конфигурации"
#: source/ubl-strings.h:179 #: source/ubl-strings.h:184
msgid "" msgid ""
"When shutting down the system, save the user's parameters into the " "When shutting down the system, save the user's parameters into the "
"configuration" "configuration"
msgstr "" msgstr ""
"При завершении работы системы сохранить параметры пользователя в конфигурацию" "При завершении работы системы сохранить параметры пользователя в конфигурацию"
#: source/ubl-strings.h:181 #: source/ubl-strings.h:186
msgid "Basic" msgid "Basic"
msgstr "Основные" msgstr "Основные"
#: source/ubl-strings.h:182 #: source/ubl-strings.h:187
msgid "Additional" msgid "Additional"
msgstr "Дополнительные" msgstr "Дополнительные"
#: source/ubl-strings.h:183 #: source/ubl-strings.h:188
msgid "Syncronization" msgid "Syncronization"
msgstr "Синхронизация" msgstr "Синхронизация"
#: source/ubl-strings.h:185 #: source/ubl-strings.h:190
msgid "Not specified" msgid "Not specified"
msgstr "Не задан" msgstr "Не задан"
#: source/ubl-strings.h:187 #: source/ubl-strings.h:192
msgid "UID already busy" msgid "UID already exists in configuration"
msgstr "UID уже существует" msgstr "UID уже существует в конфигурации"
#: source/ubl-strings.h:188 #: source/ubl-strings.h:193
msgid "GID already busy" msgid "UID already exists in system"
msgstr "GID уже существует" 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:" msgid "Repeat password:"
msgstr "Подтверждение пароля:" msgstr "Подтверждение пароля:"
#: source/ubl-strings.h:192 #: source/ubl-strings.h:199
msgid "Password hash:" msgid "Password hash:"
msgstr "Хэш пароля:" msgstr "Хэш пароля:"
#: source/ubl-strings.h:193 #: source/ubl-strings.h:200
msgid "Do not encrypt password" msgid "Do not encrypt password"
msgstr "Не шифровать пароль" msgstr "Не шифровать пароль"
#: source/ubl-strings.h:196 #: source/ubl-strings.h:203
msgid "Additional configuration of service parameter saving" msgid "Additional configuration of service parameter saving"
msgstr "Дополнительные настройки сохранения параметров сервисов" msgstr "Дополнительные настройки сохранения параметров сервисов"
#: source/ubl-strings.h:197 #: source/ubl-strings.h:204
msgid "" msgid ""
"At every system shutdown save changes of (root)/var/lib/samba\n" "At every system shutdown save changes of (root)/var/lib/samba\n"
"into (hd)/ublinux-data/rootcopy" "into (hd)/ublinux-data/rootcopy"
@ -715,54 +754,54 @@ msgstr ""
"При каждом завершении работы ОС сохранять изменения (root)/var/lib/samba\n" "При каждом завершении работы ОС сохранять изменения (root)/var/lib/samba\n"
"в (hd)/ublinux-data/rootcopy/" "в (hd)/ublinux-data/rootcopy/"
#: source/ubl-strings.h:198 #: source/ubl-strings.h:205
msgid "For system save mode \"Sandbox\"" msgid "For system save mode \"Sandbox\""
msgstr "Для режима сохранения системы \"Песочница\"" msgstr "Для режима сохранения системы \"Песочница\""
#: source/ubl-strings.h:201 #: source/ubl-strings.h:208
msgid "Group deletion" msgid "Group deletion"
msgstr "Удаление групп(-ы)" msgstr "Удаление групп(-ы)"
#: source/ubl-strings.h:202 #: source/ubl-strings.h:209
msgid "Confirm group(-s) deletion:" msgid "Confirm group(-s) deletion:"
msgstr "Подтвердите удаление групп(-ы):" msgstr "Подтвердите удаление групп(-ы):"
#: source/ubl-strings.h:204 #: source/ubl-strings.h:211
msgid "User deletion" msgid "User deletion"
msgstr "Удаление пользователя(-ей)" msgstr "Удаление пользователя(-ей)"
#: source/ubl-strings.h:205 #: source/ubl-strings.h:212
msgid "Confirm user(-s) deletion:" msgid "Confirm user(-s) deletion:"
msgstr "Подтвердите удаление пользователя (-ей):" msgstr "Подтвердите удаление пользователя (-ей):"
#: source/ubl-strings.h:206 #: source/ubl-strings.h:213
msgid "Chosen" msgid "Chosen"
msgstr "Выбран" msgstr "Выбран"
#: source/ubl-strings.h:207 #: source/ubl-strings.h:214
msgid "User" msgid "User"
msgstr "Пользователь" msgstr "Пользователь"
#: source/ubl-strings.h:208 #: source/ubl-strings.h:215
msgid "Home directory" msgid "Home directory"
msgstr "Домашний каталог" msgstr "Домашний каталог"
#: source/ubl-strings.h:209 #: source/ubl-strings.h:216
msgid "Delete home directory" msgid "Delete home directory"
msgstr "Удалить домашний каталог" msgstr "Удалить домашний каталог"
#: source/ubl-strings.h:211 #: source/ubl-strings.h:218
msgid "Configuration users" msgid "Configuration users"
msgstr "Пользователи конфигурации" msgstr "Пользователи конфигурации"
#: source/ubl-strings.h:212 #: source/ubl-strings.h:219
msgid "Configuration groups" msgid "Configuration groups"
msgstr "Группы конфигурации" msgstr "Группы конфигурации"
#: source/ubl-strings.h:213 #: source/ubl-strings.h:220
msgid "System users" msgid "System users"
msgstr "Пользователи системы" msgstr "Пользователи системы"
#: source/ubl-strings.h:214 #: source/ubl-strings.h:221
msgid "System groups" msgid "System groups"
msgstr "Группы системы" msgstr "Группы системы"

Loading…
Cancel
Save