summaryrefslogtreecommitdiff
path: root/source3/passdb
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2008-08-26 15:51:56 -0700
committerJeremy Allison <jra@samba.org>2008-08-26 15:51:56 -0700
commit95cc5ee395ab9d7f6f79d341ad20bc486c292a8d (patch)
treed49f4200a4fb8d0842b3863d9a3c61d58485d55b /source3/passdb
parentd2f223d83d6b96290fadefbe319c6bb0edf7a402 (diff)
downloadsamba-95cc5ee395ab9d7f6f79d341ad20bc486c292a8d.tar.gz
Fix the build :-(. Ask winbindd if we find a negative cache entry (or should
we just call the legacy function ?). Jeremy. (This used to be commit 566d3b6e76afeca8e862cb36202a5283b86920e4)
Diffstat (limited to 'source3/passdb')
-rw-r--r--source3/passdb/lookup_sid.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/source3/passdb/lookup_sid.c b/source3/passdb/lookup_sid.c
index 333b0a7555a..4b2edd5d59e 100644
--- a/source3/passdb/lookup_sid.c
+++ b/source3/passdb/lookup_sid.c
@@ -1287,13 +1287,16 @@ static bool legacy_sid_to_gid(const DOM_SID *psid, gid_t *pgid)
void uid_to_sid(DOM_SID *psid, uid_t uid)
{
bool expired = true;
+ bool ret;
ZERO_STRUCTP(psid);
if (fetch_sid_from_uid_cache(psid, uid))
return;
/* Check the winbindd cache directly. */
- if (!idmap_cache_find_uid2sid(uid, psid, &expired) || expired) {
+ ret = idmap_cache_find_uid2sid(uid, psid, &expired);
+
+ if (!ret || expired || (ret && is_null_sid(psid))) {
/* Not in cache. Ask winbindd. */
if (!winbind_uid_to_sid(psid, uid)) {
if (!winbind_ping()) {
@@ -1321,13 +1324,16 @@ void uid_to_sid(DOM_SID *psid, uid_t uid)
void gid_to_sid(DOM_SID *psid, gid_t gid)
{
bool expired = true;
+ bool ret;
ZERO_STRUCTP(psid);
if (fetch_sid_from_gid_cache(psid, gid))
return;
/* Check the winbindd cache directly. */
- if (!idmap_cache_find_gid2sid(gid, psid, &expired) || expired) {
+ ret = idmap_cache_find_gid2sid(gid, psid, &expired);
+
+ if (!ret || expired || (ret && is_null_sid(psid))) {
/* Not in cache. Ask winbindd. */
if (!winbind_gid_to_sid(psid, gid)) {
if (!winbind_ping()) {
@@ -1355,6 +1361,7 @@ void gid_to_sid(DOM_SID *psid, gid_t gid)
bool sid_to_uid(const DOM_SID *psid, uid_t *puid)
{
bool expired = true;
+ bool ret;
uint32 rid;
gid_t gid;
@@ -1378,7 +1385,9 @@ bool sid_to_uid(const DOM_SID *psid, uid_t *puid)
}
/* Check the winbindd cache directly. */
- if (!idmap_cache_find_sid2uid(psid, puid, &expired) || expired) {
+ ret = idmap_cache_find_sid2uid(psid, puid, &expired);
+
+ if (!ret || expired || (ret && (*puid == (uid_t)-1))) {
/* Not in cache. Ask winbindd. */
if (!winbind_sid_to_uid(puid, psid)) {
if (!winbind_ping()) {
@@ -1409,6 +1418,7 @@ bool sid_to_uid(const DOM_SID *psid, uid_t *puid)
bool sid_to_gid(const DOM_SID *psid, gid_t *pgid)
{
bool expired = true;
+ bool ret;
uint32 rid;
uid_t uid;
@@ -1431,8 +1441,10 @@ bool sid_to_gid(const DOM_SID *psid, gid_t *pgid)
}
/* Check the winbindd cache directly. */
- if (!idmap_cache_find_sid2gid(psid, pgid, &expired) || expired) {
- /* Not in cache. Ask winbindd. */
+ ret = idmap_cache_find_sid2gid(psid, pgid, &expired);
+
+ if (!ret || expired || (ret && (*pgid == (gid_t)-1))) {
+ /* Not in cache or negative. Ask winbindd. */
/* Ask winbindd if it can map this sid to a gid.
* (Idmap will check it is a valid SID and of the right type) */