gpt4 book ai didi

java - UserAccountControl 属性中不存在 PASSWD_CANT_CHANGE 标志

转载 作者:行者123 更新时间:2023-12-02 10:25:58 26 4
gpt4 key购买 nike

我需要通过 LDAP 检查 ActiveDirectory 用户是否设置了 PASSWD_CANT_CHANGE 标志。我找到了 UserAccountControl 属性( https://learn.microsoft.com/it-it/windows/desktop/ADSchema/a-useraccountcontrol ):它适用于所有其他标志,但不适用于此标志。我只需要阅读,不需要编写。

我正在将 Java 与 UnboundID LDAP SDK ( https://ldap.com/unboundid-ldap-sdk-for-java/ ) 结合使用。

这是我的 JUnit 测试代码。

public static enum UACFlags {
SCRIPT(0x0001),
ACCOUNTDISABLE(0x0002),
HOMEDIR_REQUIRED(0x0008),
LOCKOUT(0x0010),
PASSWD_NOTREQD(0x0020),
PASSWD_CANT_CHANGE(0x0040),
ENCRYPTED_TEXT_PWD_ALLOWED(0x0080),
TEMP_DUPLICATE_ACCOUNT(0x0100),
NORMAL_ACCOUNT(0x0200),
INTERDOMAIN_TRUST_ACCOUNT(0x0800),
WORKSTATION_TRUST_ACCOUNT(0x1000),
SERVER_TRUST_ACCOUNT(0x2000),
DONT_EXPIRE_PASSWORD(0x10000),
MNS_LOGON_ACCOUNT(0x20000),
SMARTCARD_REQUIRED(0x40000),
TRUSTED_FOR_DELEGATION(0x80000),
NOT_DELEGATED(0x100000),
USE_DES_KEY_ONLY(0x200000),
DONT_REQ_PREAUTH(0x400000),
PASSWORD_EXPIRED(0x800000),
TRUSTED_TO_AUTH_FOR_DELEGATION(0x1000000);

private int flag;

private UACFlags(int flag) {
this.flag = flag;
}
}

@Test
public void testLDAP() throws LDAPException {
LDAPConnection connection = //GET CONNECTION

String username = "....";
String search = "(sAMAccountName=" + username + ")";

SearchRequest request = new SearchRequest("DC=....,DC=....", SearchScope.SUB, search, SearchRequest.ALL_USER_ATTRIBUTES);
SearchResult result = connection.search(request);
SearchResultEntry entry = result.getSearchEntries().get(0);

Attribute a = entry.getAttribute("userAccountControl");
int val = a.getValueAsInteger();
System.out.println(Integer.toHexString(val));

EnumSet<UACFlags> flags = EnumSet.noneOf(UACFlags.class);
for (UACFlags f : UACFlags.values()) {
if ((val & f.flag) == f.flag) {
flags.add(f);
}
}
System.out.println("FLAGS: " + flags);
}

我在 AD 用户和计算机上设置了标志,它按预期工作。我只想使用 Java 和 LDAP 以编程方式检查该标志。除了 UserAccountControl 属性之外的其他解决方案都可以!

谢谢!!

最佳答案

不幸的是,这是预料之中的。

Microsoft 使用ADS_USER_FLAG_ENUM在几个地方进行枚举:

  1. 使用 LDAP 时的 userAccountControl 属性,以及
  2. 使用 WinNT 提供程序时的 userFlags 属性。

ADS_UF_PASSWD_CANT_CHANGE 标志只能使用 when using the WinNT provider ,我不确定您是否可以通过 Java 做到这一点。

当您点击 AD 用户和计算机中的“用户无法更改密码”复选框时,它实际上不会更改 userAccountControl 属性。实际上,它为帐户添加了两个权限:

  1. 拒绝“所有人”更改密码
  2. 拒绝将密码更改为“SELF”

有关于如何查找这些权限的描述here ,但示例是用 C++ 和 VBScript 编写的。我不知道如何在Java中查看权限。 It seems difficult我找不到任何真实的例子。

关于java - UserAccountControl 属性中不存在 PASSWD_CANT_CHANGE 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53955848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com