|
Lines 1642-1650
static int samldb_prim_group_change(struct samldb_ctx *ac)
Link Here
|
| 1642 |
struct ldb_result *res, *group_res; |
1642 |
struct ldb_result *res, *group_res; |
| 1643 |
struct ldb_message_element *el; |
1643 |
struct ldb_message_element *el; |
| 1644 |
struct ldb_message *msg; |
1644 |
struct ldb_message *msg; |
|
|
1645 |
uint32_t search_flags = |
| 1646 |
DSDB_FLAG_NEXT_MODULE | DSDB_SEARCH_SHOW_EXTENDED_DN; |
| 1645 |
uint32_t prev_rid, new_rid, uac; |
1647 |
uint32_t prev_rid, new_rid, uac; |
| 1646 |
struct dom_sid *prev_sid, *new_sid; |
1648 |
struct dom_sid *prev_sid, *new_sid; |
| 1647 |
struct ldb_dn *prev_prim_group_dn, *new_prim_group_dn; |
1649 |
struct ldb_dn *prev_prim_group_dn, *new_prim_group_dn; |
|
|
1650 |
const char *new_prim_group_dn_ext_str = NULL; |
| 1651 |
struct ldb_dn *user_dn = NULL; |
| 1652 |
const char *user_dn_ext_str = NULL; |
| 1648 |
int ret; |
1653 |
int ret; |
| 1649 |
const char * const noattrs[] = { NULL }; |
1654 |
const char * const noattrs[] = { NULL }; |
| 1650 |
|
1655 |
|
|
Lines 1658-1667
static int samldb_prim_group_change(struct samldb_ctx *ac)
Link Here
|
| 1658 |
/* Fetch information from the existing object */ |
1663 |
/* Fetch information from the existing object */ |
| 1659 |
|
1664 |
|
| 1660 |
ret = dsdb_module_search_dn(ac->module, ac, &res, ac->msg->dn, attrs, |
1665 |
ret = dsdb_module_search_dn(ac->module, ac, &res, ac->msg->dn, attrs, |
| 1661 |
DSDB_FLAG_NEXT_MODULE, ac->req); |
1666 |
search_flags, ac->req); |
| 1662 |
if (ret != LDB_SUCCESS) { |
1667 |
if (ret != LDB_SUCCESS) { |
| 1663 |
return ret; |
1668 |
return ret; |
| 1664 |
} |
1669 |
} |
|
|
1670 |
user_dn = res->msgs[0]->dn; |
| 1671 |
user_dn_ext_str = ldb_dn_get_extended_linearized(ac, user_dn, 1); |
| 1672 |
if (user_dn_ext_str == NULL) { |
| 1673 |
return ldb_operr(ldb); |
| 1674 |
} |
| 1665 |
|
1675 |
|
| 1666 |
uac = ldb_msg_find_attr_as_uint(res->msgs[0], "userAccountControl", 0); |
1676 |
uac = ldb_msg_find_attr_as_uint(res->msgs[0], "userAccountControl", 0); |
| 1667 |
|
1677 |
|
|
Lines 1725-1731
static int samldb_prim_group_change(struct samldb_ctx *ac)
Link Here
|
| 1725 |
ret = dsdb_module_search(ac->module, ac, &group_res, |
1735 |
ret = dsdb_module_search(ac->module, ac, &group_res, |
| 1726 |
ldb_get_default_basedn(ldb), |
1736 |
ldb_get_default_basedn(ldb), |
| 1727 |
LDB_SCOPE_SUBTREE, |
1737 |
LDB_SCOPE_SUBTREE, |
| 1728 |
noattrs, DSDB_FLAG_NEXT_MODULE, |
1738 |
noattrs, search_flags, |
| 1729 |
ac->req, |
1739 |
ac->req, |
| 1730 |
"(objectSid=%s)", |
1740 |
"(objectSid=%s)", |
| 1731 |
ldap_encode_ndr_dom_sid(ac, prev_sid)); |
1741 |
ldap_encode_ndr_dom_sid(ac, prev_sid)); |
|
Lines 1745-1751
static int samldb_prim_group_change(struct samldb_ctx *ac)
Link Here
|
| 1745 |
ret = dsdb_module_search(ac->module, ac, &group_res, |
1755 |
ret = dsdb_module_search(ac->module, ac, &group_res, |
| 1746 |
ldb_get_default_basedn(ldb), |
1756 |
ldb_get_default_basedn(ldb), |
| 1747 |
LDB_SCOPE_SUBTREE, |
1757 |
LDB_SCOPE_SUBTREE, |
| 1748 |
noattrs, DSDB_FLAG_NEXT_MODULE, |
1758 |
noattrs, search_flags, |
| 1749 |
ac->req, |
1759 |
ac->req, |
| 1750 |
"(objectSid=%s)", |
1760 |
"(objectSid=%s)", |
| 1751 |
ldap_encode_ndr_dom_sid(ac, new_sid)); |
1761 |
ldap_encode_ndr_dom_sid(ac, new_sid)); |
|
Lines 1758-1768
static int samldb_prim_group_change(struct samldb_ctx *ac)
Link Here
|
| 1758 |
return LDB_ERR_UNWILLING_TO_PERFORM; |
1768 |
return LDB_ERR_UNWILLING_TO_PERFORM; |
| 1759 |
} |
1769 |
} |
| 1760 |
new_prim_group_dn = group_res->msgs[0]->dn; |
1770 |
new_prim_group_dn = group_res->msgs[0]->dn; |
|
|
1771 |
new_prim_group_dn_ext_str = ldb_dn_get_extended_linearized(ac, |
| 1772 |
new_prim_group_dn, 1); |
| 1773 |
if (new_prim_group_dn_ext_str == NULL) { |
| 1774 |
return ldb_operr(ldb); |
| 1775 |
} |
| 1761 |
|
1776 |
|
| 1762 |
/* We need to be already a normal member of the new primary |
1777 |
/* We need to be already a normal member of the new primary |
| 1763 |
* group in order to be successful. */ |
1778 |
* group in order to be successful. */ |
| 1764 |
el = samdb_find_attribute(ldb, res->msgs[0], "memberOf", |
1779 |
el = samdb_find_attribute(ldb, res->msgs[0], "memberOf", |
| 1765 |
ldb_dn_get_linearized(new_prim_group_dn)); |
1780 |
new_prim_group_dn_ext_str); |
| 1766 |
if (el == NULL) { |
1781 |
if (el == NULL) { |
| 1767 |
return LDB_ERR_UNWILLING_TO_PERFORM; |
1782 |
return LDB_ERR_UNWILLING_TO_PERFORM; |
| 1768 |
} |
1783 |
} |
|
Lines 1774-1781
static int samldb_prim_group_change(struct samldb_ctx *ac)
Link Here
|
| 1774 |
} |
1789 |
} |
| 1775 |
msg->dn = new_prim_group_dn; |
1790 |
msg->dn = new_prim_group_dn; |
| 1776 |
|
1791 |
|
| 1777 |
ret = samdb_msg_add_delval(ldb, msg, msg, "member", |
1792 |
ret = samdb_msg_add_delval(ldb, msg, msg, "member", user_dn_ext_str); |
| 1778 |
ldb_dn_get_linearized(ac->msg->dn)); |
|
|
| 1779 |
if (ret != LDB_SUCCESS) { |
1793 |
if (ret != LDB_SUCCESS) { |
| 1780 |
return ret; |
1794 |
return ret; |
| 1781 |
} |
1795 |
} |
|
Lines 1793-1800
static int samldb_prim_group_change(struct samldb_ctx *ac)
Link Here
|
| 1793 |
} |
1807 |
} |
| 1794 |
msg->dn = prev_prim_group_dn; |
1808 |
msg->dn = prev_prim_group_dn; |
| 1795 |
|
1809 |
|
| 1796 |
ret = samdb_msg_add_addval(ldb, msg, msg, "member", |
1810 |
ret = samdb_msg_add_addval(ldb, msg, msg, "member", user_dn_ext_str); |
| 1797 |
ldb_dn_get_linearized(ac->msg->dn)); |
|
|
| 1798 |
if (ret != LDB_SUCCESS) { |
1811 |
if (ret != LDB_SUCCESS) { |
| 1799 |
return ret; |
1812 |
return ret; |
| 1800 |
} |
1813 |
} |
| 1801 |
- |
|
|
| 1802 |
current backlink behaviour |
1814 |
current backlink behaviour |
| 1803 |
-- |
|
|
| 1804 |
.../samdb/ldb_modules/linked_attributes.c | 18 +++++++++++++- |
1815 |
.../samdb/ldb_modules/linked_attributes.c | 18 +++++++++++++- |
| 1805 |
.../dsdb/samdb/ldb_modules/repl_meta_data.c | 24 ++++++++++++++----- |
1816 |
.../dsdb/samdb/ldb_modules/repl_meta_data.c | 24 ++++++++++++++----- |
| 1806 |
testprogs/blackbox/test_primary_group.sh | 6 ++++- |
1817 |
testprogs/blackbox/test_primary_group.sh | 6 ++++- |
| 1807 |
3 files changed, 40 insertions(+), 8 deletions(-) |
1818 |
3 files changed, 40 insertions(+), 8 deletions(-) |