Changeset 751 for trunk/server/source3/auth/server_info.c
- Timestamp:
- Nov 29, 2012, 1:59:04 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server/source3/auth/server_info.c
r745 r751 274 274 ok = sid_peek_check_rid(domain_sid, &sids[i], &rid); 275 275 if (ok) { 276 277 /* if it is the primary gid, skip it, we278 * obviously already have it */279 if (info3->base.primary_gid == rid) continue;280 281 276 /* store domain group rid */ 282 groups->rids[ i].rid = rid;283 groups->rids[ i].attributes = attributes;277 groups->rids[groups->count].rid = rid; 278 groups->rids[groups->count].attributes = attributes; 284 279 groups->count++; 285 280 continue; … … 439 434 info3->base.bad_password_count = pdb_get_bad_password_count(samu); 440 435 436 info3->base.domain.string = talloc_strdup(info3, 437 pdb_get_domain(samu)); 438 RET_NOMEM(info3->base.domain.string); 439 440 info3->base.domain_sid = dom_sid_dup(info3, &domain_sid); 441 RET_NOMEM(info3->base.domain_sid); 442 441 443 status = pdb_enum_group_memberships(mem_ctx, samu, 442 444 &group_sids, &gids, … … 468 470 RET_NOMEM(info3->base.logon_server.string); 469 471 } 470 471 info3->base.domain.string = talloc_strdup(info3,472 pdb_get_domain(samu));473 RET_NOMEM(info3->base.domain.string);474 475 info3->base.domain_sid = dom_sid_dup(info3, &domain_sid);476 RET_NOMEM(info3->base.domain_sid);477 472 478 473 info3->base.acct_flags = pdb_get_acct_ctrl(samu); … … 530 525 size_t num_sids) 531 526 { 532 unsigned int i ;527 unsigned int i, j = 0; 533 528 bool ok; 534 529 … … 543 538 ok = sid_peek_check_rid(domain_sid, 544 539 (const struct dom_sid *)&sids[i].sid, 545 &groups->rids[ i].rid);540 &groups->rids[j].rid); 546 541 if (!ok) continue; 547 542 548 groups->rids[ i].attributes = SE_GROUP_MANDATORY |543 groups->rids[j].attributes = SE_GROUP_MANDATORY | 549 544 SE_GROUP_ENABLED_BY_DEFAULT | 550 545 SE_GROUP_ENABLED; 551 groups->count++; 552 } 553 546 j++; 547 } 548 549 groups->count = j; 550 return NT_STATUS_OK; 551 } 552 553 static NTSTATUS wbcsids_to_netr_SidAttrArray( 554 const struct dom_sid *domain_sid, 555 const struct wbcSidWithAttr *sids, 556 size_t num_sids, 557 TALLOC_CTX *mem_ctx, 558 struct netr_SidAttr **_info3_sids, 559 uint32_t *info3_num_sids) 560 { 561 unsigned int i, j = 0; 562 struct netr_SidAttr *info3_sids; 563 564 info3_sids = talloc_array(mem_ctx, struct netr_SidAttr, num_sids); 565 if (info3_sids == NULL) { 566 return NT_STATUS_NO_MEMORY; 567 } 568 569 /* a wbcDomainSid is the same as a dom_sid */ 570 for (i = 0; i < num_sids; i++) { 571 const struct dom_sid *sid; 572 573 sid = (const struct dom_sid *)&sids[i].sid; 574 575 if (dom_sid_in_domain(domain_sid, sid)) { 576 continue; 577 } 578 579 info3_sids[j].sid = dom_sid_dup(info3_sids, sid); 580 if (info3_sids[j].sid == NULL) { 581 talloc_free(info3_sids); 582 return NT_STATUS_NO_MEMORY; 583 } 584 info3_sids[j].attributes = SE_GROUP_MANDATORY | 585 SE_GROUP_ENABLED_BY_DEFAULT | 586 SE_GROUP_ENABLED; 587 j++; 588 } 589 590 *info3_num_sids = j; 591 *_info3_sids = info3_sids; 554 592 return NT_STATUS_OK; 555 593 } … … 637 675 } 638 676 677 status = wbcsids_to_netr_SidAttrArray(&domain_sid, 678 &info->sids[1], 679 info->num_sids - 1, 680 info3, 681 &info3->sids, 682 &info3->sidcount); 683 if (!NT_STATUS_IS_OK(status)) { 684 TALLOC_FREE(info3); 685 return NULL; 686 } 687 639 688 info3->base.user_flags = info->user_flags; 640 689 memcpy(info3->base.key.key, info->user_session_key, 16);
Note:
See TracChangeset
for help on using the changeset viewer.