diff options
Diffstat (limited to 'source3/passdb')
-rw-r--r-- | source3/passdb/lookup_sid.c | 12 | ||||
-rw-r--r-- | source3/passdb/passdb.c | 5 | ||||
-rw-r--r-- | source3/passdb/pdb_smbpasswd.c | 18 |
3 files changed, 30 insertions, 5 deletions
diff --git a/source3/passdb/lookup_sid.c b/source3/passdb/lookup_sid.c index 9f66eb934e..4341bc02cc 100644 --- a/source3/passdb/lookup_sid.c +++ b/source3/passdb/lookup_sid.c @@ -548,10 +548,16 @@ static bool lookup_rids(TALLOC_CTX *mem_ctx, const DOM_SID *domain_sid, if (*domain_name == NULL) { *domain_name = talloc_strdup( mem_ctx, unix_users_domain_name()); + if (*domain_name == NULL) { + return false; + } } for (i=0; i<num_rids; i++) { (*names)[i] = talloc_strdup( (*names), uidtoname(rids[i])); + if ((*names)[i] == NULL) { + return false; + } (*types)[i] = SID_NAME_USER; } return true; @@ -561,10 +567,16 @@ static bool lookup_rids(TALLOC_CTX *mem_ctx, const DOM_SID *domain_sid, if (*domain_name == NULL) { *domain_name = talloc_strdup( mem_ctx, unix_groups_domain_name()); + if (*domain_name == NULL) { + return false; + } } for (i=0; i<num_rids; i++) { (*names)[i] = talloc_strdup( (*names), gidtoname(rids[i])); + if ((*names)[i] == NULL) { + return false; + } (*types)[i] = SID_NAME_DOM_GRP; } return true; diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c index 4228f6c32f..b6a4126df1 100644 --- a/source3/passdb/passdb.c +++ b/source3/passdb/passdb.c @@ -443,10 +443,7 @@ bool pdb_gethexhours(const char *p, unsigned char *hours) int algorithmic_rid_base(void) { - static int rid_offset = 0; - - if (rid_offset != 0) - return rid_offset; + int rid_offset; rid_offset = lp_algorithmic_rid_base(); diff --git a/source3/passdb/pdb_smbpasswd.c b/source3/passdb/pdb_smbpasswd.c index 6cf54fbdf6..70944a9596 100644 --- a/source3/passdb/pdb_smbpasswd.c +++ b/source3/passdb/pdb_smbpasswd.c @@ -1559,8 +1559,24 @@ static bool smbpasswd_search_next_entry(struct pdb_search *search, return false; } - *entry = state->entries[state->current++]; + entry->idx = state->entries[state->current].idx; + entry->rid = state->entries[state->current].rid; + entry->acct_flags = state->entries[state->current].acct_flags; + + entry->account_name = talloc_strdup( + search->mem_ctx, state->entries[state->current].account_name); + entry->fullname = talloc_strdup( + search->mem_ctx, state->entries[state->current].fullname); + entry->description = talloc_strdup( + search->mem_ctx, state->entries[state->current].description); + + if ((entry->account_name == NULL) || (entry->fullname == NULL) + || (entry->description == NULL)) { + DEBUG(0, ("talloc_strdup failed\n")); + return false; + } + state->current += 1; return true; } |