#include #include #include "samba.h" #include "internal.h" #include "samba.m" #include #include static SAMBA_HELP_FILE help_passwd ("passwd"); void samba_userpasswd() { USERS users; (MSG_U(T_USERACCT,"User accounts"),"",help_passwd); newf_head (MSG_U(H_USERACCT,"User ID\tName\tGroup")); sortable(); sortpolicy ("aaa"); for (int i=0; igetgid(); struct group *g = getgrgid(gid); char tmpgroup[10]; const char *group; if (g != NULL){ group = g->gr_name; }else{ group = tmpgroup; sprintf (tmpgroup,"%u",gid); } new_menuitemf (u->getname(),"%s\t%s",u->getgecos(),group); } USER *u = glocal.users.getitem(no); const char *user = u->getname(); SSTRING tmp; tmp.setfromf (MSG_U(I_NEWPASSWD,"Changing Samba password for user %s"),user); DIALOG dia; dia.settype (DIATYPE_POPUP); SSTRING pass1,pass2; dia.newf_pass (MSG_U(F_PASSWD1,"New password"),pass1); dia.newf_pass (MSG_U(F_RETYPE,"New password (repeat)"),pass2); dia.setbutinfo (MENU_USR1,MSG_U(B_DISABLE,"Disable"),MSG_R(B_DISABLE)); int nof = 0; while (1){ MENU_STATUS code = dia.edit (MSG_U(T_NEWPASSWD,"New password") ,tmp.get(),help_passwd,nof ,MENUBUT_CANCEL|MENUBUT_ACCEPT|MENUBUT_USR1); if (code == MENU_ESCAPE || code == MENU_CANCEL){ break; }else if (pass1.cmp(pass2) != 0){ xconf_error (MSG_U(E_DIFPPASSWD,"The passwd differ, try again")); }else if (code == MENU_USR1){ samba_setpassword (user,NULL); break; }else{ samba_setpassword (user,pass1.get()); break; } } }