diff options
Diffstat (limited to 'source3/utils')
-rw-r--r-- | source3/utils/pdbedit.c | 92 |
1 files changed, 52 insertions, 40 deletions
diff --git a/source3/utils/pdbedit.c b/source3/utils/pdbedit.c index f09fd4f773..7025f38362 100644 --- a/source3/utils/pdbedit.c +++ b/source3/utils/pdbedit.c @@ -205,23 +205,25 @@ static int set_user_info (char *username, char *fullname, char *homedir, char *d **********************************************************/ static int new_user (char *username, char *fullname, char *homedir, char *drive, char *script, char *profile) { - SAM_ACCOUNT sam_pwent; + SAM_ACCOUNT *sam_pwent=NULL; struct passwd *pwd = NULL; - uchar new_p16[16]; - uchar new_nt_p16[16]; char *password1, *password2; ZERO_STRUCT(sam_pwent); - if (pdb_getsampwnam (&sam_pwent, username)) + pdb_init_sam (&sam_pwent); + + if (pdb_getsampwnam (sam_pwent, username)) { fprintf (stderr, "Username already exist in database!\n"); + pdb_free_sam (sam_pwent); return -1; } if (!(pwd = sys_getpwnam(username))) { fprintf (stderr, "User %s does not exist in system passwd!\n", username); + pdb_free_sam (sam_pwent); return -1; } @@ -230,32 +232,35 @@ static int new_user (char *username, char *fullname, char *homedir, char *drive, if (strcmp (password1, password2)) { fprintf (stderr, "Passwords does not match!\n"); + pdb_free_sam (sam_pwent); return -1; } - nt_lm_owf_gen (password1, new_nt_p16, new_p16); - - pdb_set_username(&sam_pwent, username); - if (fullname) pdb_set_fullname(&sam_pwent, fullname); - if (homedir) pdb_set_homedir (&sam_pwent, homedir); - if (drive) pdb_set_dir_drive (&sam_pwent, drive); - if (script) pdb_set_logon_script(&sam_pwent, script); - if (profile) pdb_set_profile_path (&sam_pwent, profile); + + pdb_set_plaintext_passwd(sam_pwent, password1); + + pdb_set_username(sam_pwent, username); + if (fullname) pdb_set_fullname(sam_pwent, fullname); + if (homedir) pdb_set_homedir (sam_pwent, homedir); + if (drive) pdb_set_dir_drive (sam_pwent, drive); + if (script) pdb_set_logon_script(sam_pwent, script); + if (profile) pdb_set_profile_path (sam_pwent, profile); /* TODO: Check uid not being in MACHINE UID range!! */ - sam_pwent.uid = pwd->pw_uid; - sam_pwent.gid = pwd->pw_gid; - sam_pwent.user_rid = pdb_uid_to_user_rid (pwd->pw_uid); - sam_pwent.group_rid = pdb_gid_to_group_rid (pwd->pw_gid); - sam_pwent.lm_pw = new_p16; - sam_pwent.nt_pw = new_nt_p16; - sam_pwent.acct_ctrl = ACB_NORMAL; - - if (pdb_add_sam_account (&sam_pwent)) print_user_info (username, True, False); - else - { + pdb_set_uid (sam_pwent, pwd->pw_uid); + pdb_set_gid (sam_pwent, pwd->pw_gid); + pdb_set_user_rid (sam_pwent, pdb_uid_to_user_rid (pwd->pw_uid)); + pdb_set_group_rid (sam_pwent, pdb_gid_to_group_rid (pwd->pw_gid)); + + pdb_set_acct_ctrl (sam_pwent, ACB_NORMAL); + + if (pdb_add_sam_account (sam_pwent)) { + print_user_info (username, True, False); + } else { fprintf (stderr, "Unable to add user!\n"); + pdb_free_sam (sam_pwent); return -1; } + pdb_free_sam (sam_pwent); return 0; } @@ -264,13 +269,13 @@ static int new_user (char *username, char *fullname, char *homedir, char *drive, **********************************************************/ static int new_machine (char *machinename) { - SAM_ACCOUNT sam_pwent; - SAM_ACCOUNT sam_trust; - uchar new_p16[16]; - uchar new_nt_p16[16]; + SAM_ACCOUNT *sam_pwent=NULL; + SAM_ACCOUNT *sam_trust=NULL; char name[16]; char *password = NULL; uid_t uid; + + pdb_init_sam (&sam_pwent); if (machinename[strlen (machinename) -1] == '$') machinename[strlen (machinename) -1] = '\0'; @@ -279,33 +284,40 @@ static int new_machine (char *machinename) string_set (&password, machinename); strlower(password); - nt_lm_owf_gen (password, new_nt_p16, new_p16); - pdb_set_username(&sam_pwent, name); + pdb_set_plaintext_passwd(sam_pwent, password); + + pdb_set_username(sam_pwent, name); - for (uid=BASE_MACHINE_UID; uid<=MAX_MACHINE_UID; uid++) - if (!(pdb_getsampwuid (&sam_trust, uid))) + for (uid=BASE_MACHINE_UID; uid<=MAX_MACHINE_UID; uid++) { + pdb_init_sam (&sam_trust); + if (pdb_getsampwuid (sam_trust, uid)) { + pdb_free_sam (sam_trust); + } else { break; + } + } if (uid>MAX_MACHINE_UID) { fprintf (stderr, "No more free UIDs available to Machine accounts!\n"); + pdb_free_sam(sam_pwent); return -1; } - sam_pwent.uid = uid; - sam_pwent.gid = BASE_MACHINE_UID; /* TODO: set there more appropriate value!! */ - sam_pwent.user_rid = pdb_uid_to_user_rid (uid); - sam_pwent.group_rid = pdb_gid_to_group_rid (BASE_MACHINE_UID); - sam_pwent.lm_pw = new_p16; - sam_pwent.nt_pw = new_nt_p16; - sam_pwent.acct_ctrl = ACB_WSTRUST; + pdb_set_uid(sam_pwent, uid); + pdb_set_gid(sam_pwent, BASE_MACHINE_UID); /* TODO: set there more appropriate value!! */ + pdb_set_user_rid (sam_pwent,pdb_uid_to_user_rid (uid)); + pdb_set_group_rid (sam_pwent, pdb_gid_to_group_rid (BASE_MACHINE_UID)); + pdb_set_acct_ctrl (sam_pwent, ACB_WSTRUST); - if (pdb_add_sam_account (&sam_pwent)) + if (pdb_add_sam_account (sam_pwent)) { print_user_info (name, True, False); - else { + } else { fprintf (stderr, "Unable to add machine!\n"); + pdb_free_sam (sam_pwent); return -1; } + pdb_free_sam (sam_pwent); return 0; } |