[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Sun Feb 20 13:41:01 MST 2011
The branch, master has been updated
via 367b35b s3: Fix pdb_ads_enum_aliasmem for empty aliases
via ff6c175 s3: Support SetGroupInfo in pdb_ads
via 9512603 s3: Fix a debug message
via 4c45078 s3: Fix pdb_ads_enum_group_members for empty groups
via 288b396 s3: Fix error returns in pdb_ads_mod_groupmem
from fd880fd s4-version: Fix version finding for bzr branches.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 367b35b1ffd353070b9dca4f00e3089f6788b266
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 20 19:55:01 2011 +0100
s3: Fix pdb_ads_enum_aliasmem for empty aliases
Autobuild-User: Volker Lendecke <vlendec at samba.org>
Autobuild-Date: Sun Feb 20 21:40:40 CET 2011 on sn-devel-104
commit ff6c175ae6cfb10d466db2920a9a7f9e67709ede
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 20 18:39:30 2011 +0100
s3: Support SetGroupInfo in pdb_ads
commit 95126034b02f0536b521a250a7935fd1472c77d2
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 20 18:39:09 2011 +0100
s3: Fix a debug message
commit 4c45078d8f8d7cde4ecb5e7b08d96b9abd538ea5
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 20 17:53:26 2011 +0100
s3: Fix pdb_ads_enum_group_members for empty groups
commit 288b396411bfe8f8eb7353193991a1910c97751e
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 20 17:41:22 2011 +0100
s3: Fix error returns in pdb_ads_mod_groupmem
-----------------------------------------------------------------------
Summary of changes:
source3/passdb/pdb_ads.c | 86 +++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 77 insertions(+), 9 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/passdb/pdb_ads.c b/source3/passdb/pdb_ads.c
index ad38256..f74fb12 100644
--- a/source3/passdb/pdb_ads.c
+++ b/source3/passdb/pdb_ads.c
@@ -744,7 +744,9 @@ static NTSTATUS pdb_ads_update_login_attempts(struct pdb_methods *m,
}
static NTSTATUS pdb_ads_getgrfilter(struct pdb_methods *m, GROUP_MAP *map,
- const char *filter)
+ const char *filter,
+ TALLOC_CTX *mem_ctx,
+ struct tldap_message **pmsg)
{
struct pdb_ads_state *state = talloc_get_type_abort(
m->private_data, struct pdb_ads_state);
@@ -764,7 +766,7 @@ static NTSTATUS pdb_ads_getgrfilter(struct pdb_methods *m, GROUP_MAP *map,
return NT_STATUS_LDAP(rc);
}
if (talloc_array_length(group) != 1) {
- DEBUG(10, ("Expected 1 user, got %d\n",
+ DEBUG(10, ("Expected 1 group, got %d\n",
(int)talloc_array_length(group)));
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
@@ -806,6 +808,9 @@ static NTSTATUS pdb_ads_getgrfilter(struct pdb_methods *m, GROUP_MAP *map,
map->comment[0] = '\0';
}
+ if (pmsg != NULL) {
+ *pmsg = talloc_move(mem_ctx, &group[0]);
+ }
TALLOC_FREE(group);
return NT_STATUS_OK;
}
@@ -823,7 +828,7 @@ static NTSTATUS pdb_ads_getgrsid(struct pdb_methods *m, GROUP_MAP *map,
return NT_STATUS_NO_MEMORY;
}
- status = pdb_ads_getgrfilter(m, map, filter);
+ status = pdb_ads_getgrfilter(m, map, filter, NULL, NULL);
TALLOC_FREE(filter);
return status;
}
@@ -849,7 +854,7 @@ static NTSTATUS pdb_ads_getgrnam(struct pdb_methods *m, GROUP_MAP *map,
return NT_STATUS_NO_MEMORY;
}
- status = pdb_ads_getgrfilter(m, map, filter);
+ status = pdb_ads_getgrfilter(m, map, filter, NULL, NULL);
TALLOC_FREE(filter);
return status;
}
@@ -1003,7 +1008,64 @@ static NTSTATUS pdb_ads_add_group_mapping_entry(struct pdb_methods *m,
static NTSTATUS pdb_ads_update_group_mapping_entry(struct pdb_methods *m,
GROUP_MAP *map)
{
- return NT_STATUS_NOT_IMPLEMENTED;
+ struct pdb_ads_state *state = talloc_get_type_abort(
+ m->private_data, struct pdb_ads_state);
+ struct tldap_context *ld;
+ struct tldap_mod *mods = NULL;
+ char *filter;
+ struct tldap_message *existing;
+ char *dn;
+ GROUP_MAP existing_map;
+ int rc, num_mods = 0;
+ bool ret;
+ NTSTATUS status;
+
+ ld = pdb_ads_ld(state);
+ if (ld == NULL) {
+ return NT_STATUS_LDAP(TLDAP_SERVER_DOWN);
+ }
+
+ filter = talloc_asprintf(talloc_tos(),
+ "(&(objectsid=%s)(objectclass=group))",
+ sid_string_talloc(talloc_tos(), &map->sid));
+ if (filter == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ status = pdb_ads_getgrfilter(m, &existing_map, filter,
+ talloc_tos(), &existing);
+ TALLOC_FREE(filter);
+
+ if (!tldap_entry_dn(existing, &dn)) {
+ return NT_STATUS_LDAP(TLDAP_DECODING_ERROR);
+ }
+
+ ret = true;
+
+ ret &= tldap_make_mod_fmt(
+ existing, talloc_tos(), &mods, &num_mods, "description",
+ "%s", map->comment);
+ ret &= tldap_make_mod_fmt(
+ existing, talloc_tos(), &mods, &num_mods, "samaccountname",
+ "%s", map->nt_name);
+
+ if (!ret) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ if (num_mods == 0) {
+ TALLOC_FREE(existing);
+ return NT_STATUS_OK;
+ }
+
+ rc = tldap_modify(ld, dn, mods, num_mods, NULL, 0, NULL, 0);
+ if (rc != TLDAP_SUCCESS) {
+ DEBUG(10, ("ldap_modify for %s failed: %s\n", dn,
+ tldap_errstr(talloc_tos(), ld, rc)));
+ TALLOC_FREE(existing);
+ return NT_STATUS_LDAP(rc);
+ }
+ TALLOC_FREE(existing);
+ return NT_STATUS_OK;
}
static NTSTATUS pdb_ads_delete_group_mapping_entry(struct pdb_methods *m,
@@ -1061,7 +1123,9 @@ static NTSTATUS pdb_ads_enum_group_members(struct pdb_methods *m,
}
if (!tldap_entry_values(msg[0], "member", &blobs, &num_members)) {
- return NT_STATUS_INTERNAL_DB_CORRUPTION;
+ *pmembers = NULL;
+ *pnum_members = 0;
+ return NT_STATUS_OK;
}
members = talloc_array(mem_ctx, uint32_t, num_members);
@@ -1214,10 +1278,12 @@ static NTSTATUS pdb_ads_mod_groupmem(struct pdb_methods *m,
if (rc != TLDAP_SUCCESS) {
DEBUG(10, ("ldap_modify failed: %s\n",
tldap_errstr(talloc_tos(), state->ld, rc)));
- if (rc == TLDAP_TYPE_OR_VALUE_EXISTS) {
+ if ((mod_op == TLDAP_MOD_ADD) &&
+ (rc == TLDAP_ALREADY_EXISTS)) {
return NT_STATUS_MEMBER_IN_GROUP;
}
- if (rc == TLDAP_NO_SUCH_ATTRIBUTE) {
+ if ((mod_op == TLDAP_MOD_DELETE) &&
+ (rc == TLDAP_UNWILLING_TO_PERFORM)) {
return NT_STATUS_MEMBER_NOT_IN_GROUP;
}
return NT_STATUS_LDAP(rc);
@@ -1644,7 +1710,9 @@ static NTSTATUS pdb_ads_enum_aliasmem(struct pdb_methods *m,
}
if (!tldap_entry_values(msg[0], "member", &blobs, &num_members)) {
- return NT_STATUS_INTERNAL_DB_CORRUPTION;
+ *pmembers = NULL;
+ *pnum_members = 0;
+ return NT_STATUS_OK;
}
members = talloc_array(mem_ctx, struct dom_sid, num_members);
--
Samba Shared Repository
More information about the samba-cvs
mailing list