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(-) |