mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
r23772: Add ads_find_samaccount() helper function.
Guenther
(This used to be commit 6fafa64bea
)
This commit is contained in:
parent
3438f7d533
commit
221d06d6f3
@ -3272,4 +3272,64 @@ ADS_STATUS ads_leave_realm(ADS_STRUCT *ads, const char *hostname)
|
||||
return ADS_ERROR_LDAP(LDAP_SUCCESS);
|
||||
}
|
||||
|
||||
ADS_STATUS ads_find_samaccount(ADS_STRUCT *ads,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
const char *samaccountname,
|
||||
uint32 *uac_ret,
|
||||
const char **dn_ret)
|
||||
{
|
||||
ADS_STATUS status;
|
||||
const char *attrs[] = { "userAccountControl", NULL };
|
||||
const char *filter;
|
||||
LDAPMessage *res = NULL;
|
||||
char *dn = NULL;
|
||||
uint32 uac = 0;
|
||||
|
||||
filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))",
|
||||
samaccountname);
|
||||
if (filter == NULL) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
status = ads_do_search_all(ads, ads->config.bind_path,
|
||||
LDAP_SCOPE_SUBTREE,
|
||||
filter, attrs, &res);
|
||||
|
||||
if (!ADS_ERR_OK(status)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (ads_count_replies(ads, res) != 1) {
|
||||
printf("no result\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
dn = ads_get_dn(ads, res);
|
||||
if (dn == NULL) {
|
||||
status = ADS_ERROR(LDAP_NO_MEMORY);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
|
||||
status = ADS_ERROR(LDAP_NO_SUCH_ATTRIBUTE);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (uac_ret) {
|
||||
*uac_ret = uac;
|
||||
}
|
||||
|
||||
if (dn_ret) {
|
||||
*dn_ret = talloc_strdup(mem_ctx, dn);
|
||||
if (!*dn_ret) {
|
||||
status = ADS_ERROR(LDAP_NO_MEMORY);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
out:
|
||||
ads_memfree(ads, dn);
|
||||
ads_msgfree(ads, res);
|
||||
|
||||
return status;
|
||||
}
|
||||
#endif
|
||||
|
@ -46,10 +46,7 @@ static int net_ads_gpo_refresh(int argc, const char **argv)
|
||||
TALLOC_CTX *mem_ctx;
|
||||
ADS_STRUCT *ads;
|
||||
ADS_STATUS status;
|
||||
const char *attrs[] = { "userAccountControl", NULL };
|
||||
LDAPMessage *res = NULL;
|
||||
const char *filter;
|
||||
char *dn = NULL;
|
||||
const char *dn = NULL;
|
||||
struct GROUP_POLICY_OBJECT *gpo_list = NULL;
|
||||
uint32 uac = 0;
|
||||
uint32 flags = 0;
|
||||
@ -66,35 +63,14 @@ static int net_ads_gpo_refresh(int argc, const char **argv)
|
||||
return -1;
|
||||
}
|
||||
|
||||
filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))", argv[0]);
|
||||
if (filter == NULL) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
status = ads_startup(False, &ads);
|
||||
if (!ADS_ERR_OK(status)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
status = ads_do_search_all(ads, ads->config.bind_path,
|
||||
LDAP_SCOPE_SUBTREE,
|
||||
filter, attrs, &res);
|
||||
|
||||
status = ads_find_samaccount(ads, mem_ctx, argv[0], &uac, &dn);
|
||||
if (!ADS_ERR_OK(status)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (ads_count_replies(ads, res) != 1) {
|
||||
printf("no result\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
dn = ads_get_dn(ads, res);
|
||||
if (dn == NULL) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
|
||||
printf("failed to find samaccount for %s\n", argv[0]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -139,9 +115,6 @@ static int net_ads_gpo_refresh(int argc, const char **argv)
|
||||
}
|
||||
|
||||
out:
|
||||
ads_memfree(ads, dn);
|
||||
ads_msgfree(ads, res);
|
||||
|
||||
ads_destroy(&ads);
|
||||
talloc_destroy(mem_ctx);
|
||||
return 0;
|
||||
@ -225,10 +198,7 @@ static int net_ads_gpo_apply(int argc, const char **argv)
|
||||
TALLOC_CTX *mem_ctx;
|
||||
ADS_STRUCT *ads;
|
||||
ADS_STATUS status;
|
||||
const char *attrs[] = {"distinguishedName", "userAccountControl", NULL};
|
||||
LDAPMessage *res = NULL;
|
||||
const char *filter;
|
||||
char *dn = NULL;
|
||||
const char *dn = NULL;
|
||||
struct GROUP_POLICY_OBJECT *gpo_list;
|
||||
uint32 uac = 0;
|
||||
uint32 flags = 0;
|
||||
@ -243,38 +213,16 @@ static int net_ads_gpo_apply(int argc, const char **argv)
|
||||
goto out;
|
||||
}
|
||||
|
||||
filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))", argv[0]);
|
||||
if (filter == NULL) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
status = ads_startup(False, &ads);
|
||||
if (!ADS_ERR_OK(status)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
status = ads_do_search_all(ads, ads->config.bind_path,
|
||||
LDAP_SCOPE_SUBTREE,
|
||||
filter, attrs, &res);
|
||||
|
||||
status = ads_find_samaccount(ads, mem_ctx, argv[0], &uac, &dn);
|
||||
if (!ADS_ERR_OK(status)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (ads_count_replies(ads, res) != 1) {
|
||||
printf("no result\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
dn = ads_get_dn(ads, res);
|
||||
if (dn == NULL) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (uac & UF_WORKSTATION_TRUST_ACCOUNT) {
|
||||
flags |= GPO_LIST_FLAG_MACHINE;
|
||||
}
|
||||
@ -289,15 +237,12 @@ static int net_ads_gpo_apply(int argc, const char **argv)
|
||||
}
|
||||
|
||||
/* FIXME: allow to process just a single extension */
|
||||
status = gpo_process_gpo_list(ads, mem_ctx, &gpo_list, NULL, flags);
|
||||
status = gpo_process_gpo_list(ads, mem_ctx, gpo_list, NULL, flags);
|
||||
if (!ADS_ERR_OK(status)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
ads_memfree(ads, dn);
|
||||
ads_msgfree(ads, res);
|
||||
|
||||
ads_destroy(&ads);
|
||||
talloc_destroy(mem_ctx);
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user