idmap tdb2: fix broken logic in tdb2_delete_bystring().
authorMichael Adam <obnox@samba.org>
Wed, 6 Aug 2008 20:43:27 +0000 (22:43 +0200)
committerMichael Adam <obnox@samba.org>
Wed, 13 Aug 2008 09:54:07 +0000 (11:54 +0200)
1. use the return value that idmap_tdb2_open_perm_db() gives us
2. don't delete frep the local db if deleting from the perm db failed.
3. fix wrong interpretation of return value of the local delete

Michael

source/winbindd/idmap_tdb2.c

index 172922b85f387afec93c7f988511c6c071b1a375..81553dc9c64ec4a292518ea3760104b9dece307a 100644 (file)
@@ -403,15 +403,18 @@ static NTSTATUS tdb2_store_bystring(const char *keystr, TDB_DATA data, int flags
 static NTSTATUS tdb2_delete_bystring(const char *keystr)
 {
        NTSTATUS ret;
-       NTSTATUS status = idmap_tdb2_open_perm_db();
-       if (!NT_STATUS_IS_OK(status)) {
-               return NT_STATUS_UNSUCCESSFUL;
+
+       ret = idmap_tdb2_open_perm_db();
+       if (!NT_STATUS_IS_OK(ret)) {
+               return ret;
        }
        ret = dbwrap_delete_bystring(idmap_tdb2_perm, keystr);
        if (!NT_STATUS_IS_OK(ret)) {
-               ret = tdb_delete_bystring(idmap_tdb2_tmp, keystr)  ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
+               return ret;
        }
-       return ret;
+       return (tdb_delete_bystring(idmap_tdb2_tmp, keystr) == 0)
+               ? NT_STATUS_OK
+               : NT_STATUS_UNSUCCESSFUL;
 }
 
 /*