summaryrefslogtreecommitdiff
path: root/source3/winbindd/idmap.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-07-11 17:42:48 +0200
committerVolker Lendecke <vl@samba.org>2008-07-11 17:53:24 +0200
commitebb2d70a607cf33f3d2084d715c2d9d4329f2e7b (patch)
treeb13f99517ecd3f3b31cfa14a992c7251ac05456a /source3/winbindd/idmap.c
parent6c3c068716c9b7a3a7fe041fc605bcd00b376ec9 (diff)
downloadsamba-ebb2d70a607cf33f3d2084d715c2d9d4329f2e7b.tar.gz
samba-ebb2d70a607cf33f3d2084d715c2d9d4329f2e7b.tar.bz2
samba-ebb2d70a607cf33f3d2084d715c2d9d4329f2e7b.zip
Revert "Make use of ADD_TO_ARRAY"
This reverts commit 81f334bd6da601a040f754c46705cfa2fd4f8c45. (This used to be commit d4d106776af3f475d46a4dd78794b7b48a3572af)
Diffstat (limited to 'source3/winbindd/idmap.c')
-rw-r--r--source3/winbindd/idmap.c94
1 files changed, 73 insertions, 21 deletions
diff --git a/source3/winbindd/idmap.c b/source3/winbindd/idmap.c
index 504be22292..db17245b92 100644
--- a/source3/winbindd/idmap.c
+++ b/source3/winbindd/idmap.c
@@ -1177,8 +1177,7 @@ done:
return ret;
}
-static NTSTATUS idmap_backends_sids_to_unixids(struct id_map **ids, int
- num_ids)
+static NTSTATUS idmap_backends_sids_to_unixids(struct id_map **ids)
{
struct id_map ***dom_ids;
struct idmap_domain *dom;
@@ -1206,7 +1205,7 @@ static NTSTATUS idmap_backends_sids_to_unixids(struct id_map **ids, int
/* partition the requests by domain */
- for (i = 0; i < num_ids; i++) {
+ for (i = 0; ids[i]; i++) {
uint32 idx;
if ((dom = find_idmap_domain_from_sid(ids[i]->sid)) == NULL) {
@@ -1246,7 +1245,7 @@ static NTSTATUS idmap_backends_sids_to_unixids(struct id_map **ids, int
/* ok all the backends have been contacted at this point */
/* let's see if we have any unmapped SID left and act accordingly */
- for (i = 0; i < num_ids; i++) {
+ for (i = 0; ids[i]; i++) {
/* NOTE: this will NOT touch ID_EXPIRED entries that the backend
* was not able to confirm/deny (offline mode) */
if (ids[i]->status == ID_UNKNOWN ||
@@ -1279,7 +1278,7 @@ done:
idmap interface functions
**************************************************************************/
-NTSTATUS idmap_unixids_to_sids(struct id_map **ids, int n_ids)
+NTSTATUS idmap_unixids_to_sids(struct id_map **ids)
{
TALLOC_CTX *ctx;
NTSTATUS ret;
@@ -1307,7 +1306,7 @@ NTSTATUS idmap_unixids_to_sids(struct id_map **ids, int n_ids)
bids = NULL;
bi = 0;
- for (i = 0; i < n_ids; i++) {
+ for (i = 0; ids[i]; i++) {
bool found, mapped, expired;
@@ -1332,12 +1331,38 @@ NTSTATUS idmap_unixids_to_sids(struct id_map **ids, int n_ids)
* Need to ask the backend
*/
- ADD_TO_ARRAY(ctx, struct id_map *, ids[i], &bids, &bn);
- if (bids == NULL) {
- DEBUG(1, ("Out of memory!\n"));
- talloc_free(ctx);
- return NT_STATUS_NO_MEMORY;
+ if ( ! bids) {
+ /* alloc space for ids to be resolved by
+ * backends (realloc ten by ten) */
+ bids = TALLOC_ARRAY(ctx, struct id_map *, 10);
+ if ( ! bids) {
+ DEBUG(1, ("Out of memory!\n"));
+ talloc_free(ctx);
+ return NT_STATUS_NO_MEMORY;
+ }
+ bn = 10;
}
+
+ /* add this id to the ones to be retrieved
+ * from the backends */
+ bids[bi] = ids[i];
+ bi++;
+
+ /* check if we need to allocate new space
+ * on the rids array */
+ if (bi == bn) {
+ bn += 10;
+ bids = talloc_realloc(ctx, bids,
+ struct id_map *, bn);
+ if ( ! bids) {
+ DEBUG(1, ("Out of memory!\n"));
+ talloc_free(ctx);
+ return NT_STATUS_NO_MEMORY;
+ }
+ }
+
+ /* make sure the last element is NULL */
+ bids[bi] = NULL;
}
}
@@ -1383,12 +1408,12 @@ done:
return ret;
}
-NTSTATUS idmap_sids_to_unixids(struct id_map **ids, int n_ids)
+NTSTATUS idmap_sids_to_unixids(struct id_map **ids)
{
TALLOC_CTX *ctx;
NTSTATUS ret;
struct id_map **bids;
- int i;
+ int i, bi;
int bn = 0;
struct winbindd_domain *our_domain = find_our_domain();
@@ -1409,8 +1434,9 @@ NTSTATUS idmap_sids_to_unixids(struct id_map **ids, int n_ids)
/* no ids to be asked to the backends by default */
bids = NULL;
+ bi = 0;
- for (i = 0; i < n_ids; i++) {
+ for (i = 0; ids[i]; i++) {
bool found, mapped, expired;
@@ -1435,12 +1461,38 @@ NTSTATUS idmap_sids_to_unixids(struct id_map **ids, int n_ids)
* Need to ask the backends
*/
- ADD_TO_ARRAY(ctx, struct id_map *, ids[i], &bids, &bn);
- if (bids == NULL) {
- DEBUG(1, ("Out of memory!\n"));
- talloc_free(ctx);
- return NT_STATUS_NO_MEMORY;
+ if ( ! bids) {
+ /* alloc space for ids to be resolved
+ by backends (realloc ten by ten) */
+ bids = TALLOC_ARRAY(ctx, struct id_map *, 10);
+ if ( ! bids) {
+ DEBUG(1, ("Out of memory!\n"));
+ talloc_free(ctx);
+ return NT_STATUS_NO_MEMORY;
+ }
+ bn = 10;
+ }
+
+ /* add this id to the ones to be retrieved
+ * from the backends */
+ bids[bi] = ids[i];
+ bi++;
+
+ /* check if we need to allocate new space
+ * on the ids array */
+ if (bi == bn) {
+ bn += 10;
+ bids = talloc_realloc(ctx, bids,
+ struct id_map *, bn);
+ if ( ! bids) {
+ DEBUG(1, ("Out of memory!\n"));
+ talloc_free(ctx);
+ return NT_STATUS_NO_MEMORY;
+ }
}
+
+ /* make sure the last element is NULL */
+ bids[bi] = NULL;
}
}
@@ -1453,11 +1505,11 @@ NTSTATUS idmap_sids_to_unixids(struct id_map **ids, int n_ids)
goto done;
}
- ret = idmap_backends_sids_to_unixids(bids, bn);
+ ret = idmap_backends_sids_to_unixids(bids);
IDMAP_CHECK_RET(ret);
/* update the cache */
- for (i = 0; i < bn; i++) {
+ for (i = 0; bids[i]; i++) {
if (bids[i]->status == ID_MAPPED) {
ret = idmap_cache_set(bids[i]);
} else if (bids[i]->status == ID_EXPIRED) {