mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
Make use of ADD_TO_ARRAY
This commit is contained in:
parent
0bf0434f22
commit
81f334bd6d
@ -10485,8 +10485,8 @@ NTSTATUS idmap_allocate_uid(struct unixid *id);
|
||||
NTSTATUS idmap_allocate_gid(struct unixid *id);
|
||||
NTSTATUS idmap_set_uid_hwm(struct unixid *id);
|
||||
NTSTATUS idmap_set_gid_hwm(struct unixid *id);
|
||||
NTSTATUS idmap_unixids_to_sids(struct id_map **ids);
|
||||
NTSTATUS idmap_sids_to_unixids(struct id_map **ids);
|
||||
NTSTATUS idmap_unixids_to_sids(struct id_map **ids, int n_ids);
|
||||
NTSTATUS idmap_sids_to_unixids(struct id_map **ids, int n_ids);
|
||||
NTSTATUS idmap_set_mapping(const struct id_map *id);
|
||||
char *idmap_fetch_secret(const char *backend, bool alloc,
|
||||
const char *domain, const char *identity);
|
||||
|
@ -1177,7 +1177,8 @@ done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static NTSTATUS idmap_backends_sids_to_unixids(struct id_map **ids)
|
||||
static NTSTATUS idmap_backends_sids_to_unixids(struct id_map **ids, int
|
||||
num_ids)
|
||||
{
|
||||
struct id_map ***dom_ids;
|
||||
struct idmap_domain *dom;
|
||||
@ -1205,7 +1206,7 @@ static NTSTATUS idmap_backends_sids_to_unixids(struct id_map **ids)
|
||||
|
||||
/* partition the requests by domain */
|
||||
|
||||
for (i = 0; ids[i]; i++) {
|
||||
for (i = 0; i < num_ids; i++) {
|
||||
uint32 idx;
|
||||
|
||||
if ((dom = find_idmap_domain_from_sid(ids[i]->sid)) == NULL) {
|
||||
@ -1245,7 +1246,7 @@ static NTSTATUS idmap_backends_sids_to_unixids(struct id_map **ids)
|
||||
/* 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; ids[i]; i++) {
|
||||
for (i = 0; i < num_ids; 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 ||
|
||||
@ -1278,7 +1279,7 @@ done:
|
||||
idmap interface functions
|
||||
**************************************************************************/
|
||||
|
||||
NTSTATUS idmap_unixids_to_sids(struct id_map **ids)
|
||||
NTSTATUS idmap_unixids_to_sids(struct id_map **ids, int n_ids)
|
||||
{
|
||||
TALLOC_CTX *ctx;
|
||||
NTSTATUS ret;
|
||||
@ -1306,7 +1307,7 @@ NTSTATUS idmap_unixids_to_sids(struct id_map **ids)
|
||||
bids = NULL;
|
||||
bi = 0;
|
||||
|
||||
for (i = 0; ids[i]; i++) {
|
||||
for (i = 0; i < n_ids; i++) {
|
||||
|
||||
bool found, mapped, expired;
|
||||
|
||||
@ -1331,38 +1332,12 @@ NTSTATUS idmap_unixids_to_sids(struct id_map **ids)
|
||||
* Need to ask the backend
|
||||
*/
|
||||
|
||||
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_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;
|
||||
}
|
||||
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1408,12 +1383,12 @@ done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
NTSTATUS idmap_sids_to_unixids(struct id_map **ids)
|
||||
NTSTATUS idmap_sids_to_unixids(struct id_map **ids, int n_ids)
|
||||
{
|
||||
TALLOC_CTX *ctx;
|
||||
NTSTATUS ret;
|
||||
struct id_map **bids;
|
||||
int i, bi;
|
||||
int i;
|
||||
int bn = 0;
|
||||
struct winbindd_domain *our_domain = find_our_domain();
|
||||
|
||||
@ -1434,9 +1409,8 @@ NTSTATUS idmap_sids_to_unixids(struct id_map **ids)
|
||||
|
||||
/* no ids to be asked to the backends by default */
|
||||
bids = NULL;
|
||||
bi = 0;
|
||||
|
||||
for (i = 0; ids[i]; i++) {
|
||||
for (i = 0; i < n_ids; i++) {
|
||||
|
||||
bool found, mapped, expired;
|
||||
|
||||
@ -1461,38 +1435,12 @@ NTSTATUS idmap_sids_to_unixids(struct id_map **ids)
|
||||
* Need to ask the backends
|
||||
*/
|
||||
|
||||
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_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;
|
||||
}
|
||||
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1505,11 +1453,11 @@ NTSTATUS idmap_sids_to_unixids(struct id_map **ids)
|
||||
goto done;
|
||||
}
|
||||
|
||||
ret = idmap_backends_sids_to_unixids(bids);
|
||||
ret = idmap_backends_sids_to_unixids(bids, bn);
|
||||
IDMAP_CHECK_RET(ret);
|
||||
|
||||
/* update the cache */
|
||||
for (i = 0; bids[i]; i++) {
|
||||
for (i = 0; i < bn; i++) {
|
||||
if (bids[i]->status == ID_MAPPED) {
|
||||
ret = idmap_cache_set(bids[i]);
|
||||
} else if (bids[i]->status == ID_EXPIRED) {
|
||||
|
@ -31,18 +31,16 @@ NTSTATUS idmap_uid_to_sid(DOM_SID *sid, uid_t uid)
|
||||
{
|
||||
NTSTATUS ret;
|
||||
struct id_map map;
|
||||
struct id_map *maps[2];
|
||||
struct id_map *maps;
|
||||
|
||||
DEBUG(10,("uid = [%lu]\n", (unsigned long)uid));
|
||||
|
||||
map.sid = sid;
|
||||
map.xid.type = ID_TYPE_UID;
|
||||
map.xid.id = uid;
|
||||
maps = ↦
|
||||
|
||||
maps[0] = ↦
|
||||
maps[1] = NULL;
|
||||
|
||||
ret = idmap_unixids_to_sids(maps);
|
||||
ret = idmap_unixids_to_sids(&maps, 1);
|
||||
if ( ! NT_STATUS_IS_OK(ret)) {
|
||||
DEBUG(10, ("error mapping uid [%lu]\n", (unsigned long)uid));
|
||||
return ret;
|
||||
@ -65,18 +63,16 @@ NTSTATUS idmap_gid_to_sid(DOM_SID *sid, gid_t gid)
|
||||
{
|
||||
NTSTATUS ret;
|
||||
struct id_map map;
|
||||
struct id_map *maps[2];
|
||||
struct id_map *maps;
|
||||
|
||||
DEBUG(10,("gid = [%lu]\n", (unsigned long)gid));
|
||||
|
||||
map.sid = sid;
|
||||
map.xid.type = ID_TYPE_GID;
|
||||
map.xid.id = gid;
|
||||
maps = ↦
|
||||
|
||||
maps[0] = ↦
|
||||
maps[1] = NULL;
|
||||
|
||||
ret = idmap_unixids_to_sids(maps);
|
||||
ret = idmap_unixids_to_sids(&maps, 1);
|
||||
if ( ! NT_STATUS_IS_OK(ret)) {
|
||||
DEBUG(10, ("error mapping gid [%lu]\n", (unsigned long)gid));
|
||||
return ret;
|
||||
@ -99,17 +95,15 @@ NTSTATUS idmap_sid_to_uid(DOM_SID *sid, uid_t *uid)
|
||||
{
|
||||
NTSTATUS ret;
|
||||
struct id_map map;
|
||||
struct id_map *maps[2];
|
||||
struct id_map *maps;
|
||||
|
||||
DEBUG(10,("idmap_sid_to_uid: sid = [%s]\n", sid_string_dbg(sid)));
|
||||
|
||||
map.sid = sid;
|
||||
map.xid.type = ID_TYPE_UID;
|
||||
map.xid.type = ID_TYPE_UID;
|
||||
maps = ↦
|
||||
|
||||
maps[0] = ↦
|
||||
maps[1] = NULL;
|
||||
|
||||
ret = idmap_sids_to_unixids(maps);
|
||||
ret = idmap_sids_to_unixids(&maps, 1);
|
||||
if ( ! NT_STATUS_IS_OK(ret)) {
|
||||
DEBUG(10, ("error mapping sid [%s] to uid\n",
|
||||
sid_string_dbg(sid)));
|
||||
@ -139,17 +133,15 @@ NTSTATUS idmap_sid_to_gid(DOM_SID *sid, gid_t *gid)
|
||||
{
|
||||
NTSTATUS ret;
|
||||
struct id_map map;
|
||||
struct id_map *maps[2];
|
||||
struct id_map *maps;
|
||||
|
||||
DEBUG(10,("idmap_sid_to_gid: sid = [%s]\n", sid_string_dbg(sid)));
|
||||
|
||||
map.sid = sid;
|
||||
map.xid.type = ID_TYPE_GID;
|
||||
maps = ↦
|
||||
|
||||
maps[0] = ↦
|
||||
maps[1] = NULL;
|
||||
|
||||
ret = idmap_sids_to_unixids(maps);
|
||||
ret = idmap_sids_to_unixids(&maps, 1);
|
||||
if ( ! NT_STATUS_IS_OK(ret)) {
|
||||
DEBUG(10, ("error mapping sid [%s] to gid\n",
|
||||
sid_string_dbg(sid)));
|
||||
|
@ -224,7 +224,7 @@ enum winbindd_result winbindd_dual_sids2xids(struct winbindd_domain *domain,
|
||||
sids = (DOM_SID *)state->request.extra_data.data;
|
||||
num = state->request.extra_len / sizeof(DOM_SID);
|
||||
|
||||
ids = TALLOC_ZERO_ARRAY(state->mem_ctx, struct id_map *, num + 1);
|
||||
ids = TALLOC_ARRAY(state->mem_ctx, struct id_map *, num);
|
||||
if ( ! ids) {
|
||||
DEBUG(0, ("Out of memory!\n"));
|
||||
return WINBINDD_ERROR;
|
||||
@ -239,7 +239,7 @@ enum winbindd_result winbindd_dual_sids2xids(struct winbindd_domain *domain,
|
||||
ids[i]->sid = &sids[i];
|
||||
}
|
||||
|
||||
result = idmap_sids_to_unixids(ids);
|
||||
result = idmap_sids_to_unixids(ids, num);
|
||||
|
||||
if (NT_STATUS_IS_OK(result)) {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user