1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-09 08:58:35 +03:00

This creates passdb backend files automatically when adding first account.

An extra message notifying that needed file didn't exist is displayed.
There's still a little catch with tdb backend, but it's better than it was,
from end-user's point of view.

This fixes #198


rafal
(This used to be commit b0be700605c289ce8e9dd3abe49d78ac77256911)
This commit is contained in:
Rafal Szczesniak 2003-07-20 21:43:41 +00:00
parent bbd4c98b06
commit b3064ac5d6
2 changed files with 38 additions and 3 deletions

View File

@ -179,8 +179,25 @@ static FILE *startsmbfilepwent(const char *pfile, enum pwf_access_type type, int
DEBUG(10, ("startsmbfilepwent_internal: opening file %s\n", pfile));
if((fp = sys_fopen(pfile, open_mode)) == NULL) {
DEBUG(0, ("startsmbfilepwent_internal: unable to open file %s. Error was %s\n", pfile, strerror(errno) ));
return NULL;
/*
* If smbpasswd file doesn't exist, then create new one. This helps to avoid
* confusing error msg when adding user account first time.
*/
if (errno == ENOENT) {
if ((fp = sys_fopen(pfile, "a+")) != NULL) {
DEBUG(0, ("startsmbfilepwent_internal: file %s did not exist. File successfully created.\n", pfile));
} else {
DEBUG(0, ("startsmbfilepwent_internal: file %s did not exist. Couldn't create new one. Error was: %s",
pfile, strerror(errno)));
return NULL;
}
} else {
DEBUG(0, ("startsmbfilepwent_internal: unable to open file %s. Error was: %s\n", pfile, strerror(errno)));
return NULL;
}
}
if (!pw_file_lock(fileno(fp), lock_type, 5, lock_depth)) {

View File

@ -180,6 +180,24 @@ static NTSTATUS tdbsam_getsampwnam (struct pdb_methods *my_methods, SAM_ACCOUNT
/* open the accounts TDB */
if (!(pwd_tdb = tdb_open_log(tdb_state->tdbsam_location, 0, TDB_DEFAULT, O_RDONLY, 0600))) {
if (errno == ENOENT) {
/*
* TDB file doesn't exist, so try to create new one. This is useful to avoid
* confusing error msg when adding user account first time
*/
if (!(pwd_tdb = tdb_open_log(tdb_state->tdbsam_location, 0, TDB_DEFAULT, O_CREAT, 0600))) {
DEBUG(0, ("pdb_getsampwnam: TDB passwd (%s) did not exist. File successfully created.\n",
tdb_state->tdbsam_location));
} else {
DEBUG(0, ("pdb_getsampwnam: TDB passwd (%s) does not exist. Couldn't create new one. Error was: %s\n",
tdb_state->tdbsam_location, strerror(errno)));
}
/* requested user isn't there anyway */
nt_status = NT_STATUS_NO_SUCH_USER;
return nt_status;
}
DEBUG(0, ("pdb_getsampwnam: Unable to open TDB passwd (%s)!\n", tdb_state->tdbsam_location));
return nt_status;
}
@ -423,7 +441,7 @@ done:
/***************************************************************************
Allocates a new RID and returns it to the caller as a domain sid
NOTE: Use carefullt, do not waste RIDs they are a limited resource!
NOTE: Use carefully, do not waste RIDs they are a limited resource!
- SSS
***************************************************************************/