Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS AD2008-无法使用Perl Net::LDAPS和userAccountControl属性在下次登录时强制更改密码_Perl_Active Directory_Netldap - Fatal编程技术网

MS AD2008-无法使用Perl Net::LDAPS和userAccountControl属性在下次登录时强制更改密码

MS AD2008-无法使用Perl Net::LDAPS和userAccountControl属性在下次登录时强制更改密码,perl,active-directory,netldap,Perl,Active Directory,Netldap,我正在使用perl Net::LDAPS连接到Active Directory 2008域控制器,并试图设置“用户下次登录时必须更改密码”选项,但该选项不起作用 我可以创建、修改、删除和移动不同的对象,但我无法获得更改密码设置 这就是我试图做的,但它不起作用: 注意:我正在为Net::LDAPS使用一个自行编写的类包装器,下面的代码可以归结为我试图做的事情的基本内容 # Binding to LDAP Directory: $self->{LDAP_INSTANCE} = Net::LDAPS-

我正在使用perl Net::LDAPS连接到Active Directory 2008域控制器,并试图设置“用户下次登录时必须更改密码”选项,但该选项不起作用

我可以创建、修改、删除和移动不同的对象,但我无法获得更改密码设置

这就是我试图做的,但它不起作用:

注意:我正在为Net::LDAPS使用一个自行编写的类包装器,下面的代码可以归结为我试图做的事情的基本内容

# Binding to LDAP Directory: $self->{LDAP_INSTANCE} = Net::LDAPS->new($host); $self->{LDAP_INSTANCE}->bind(dn=>$dn, password=>$password, version=>3 ) my $rc =$self->{LDAP_INSTANCE}->modify( $DN_OF_USER_ACCOUNT, [ replace => [userAccountControl => 0x00800000] ] ); print $rc->error; # Results in an empty string / No error # Note: I have also tried: hex(800000) instead of 0x00800000 as well. 我正在与域管理员帐户绑定,并且我已验证用户帐户的$DN\u是否正确

userAccountControl属性是一个具有许多设置的位字段。将用户的值更改为0x00800000将非常有害,因为这将删除默认的0x200 ADS_UF_NORMAL_帐户

最重要的是:

0x00800000 ADS\u UF\u密码\u过期用户密码已过期。此标志由系统使用Pwd Last Set属性和域策略中的数据创建

如果我们看一下,我们会看到:

上次更改此帐户密码的日期和时间。[…]如果此值设置为0且用户帐户控制属性不包含UF_DONT_EXPIRE_PASSWD标志,则用户必须在下次登录时设置密码

因此,要使密码过期,我们需要将pwdLastSet设置为零。这一点可以通过VBScript中的执行者来证实

在Perl中:

# Binding to LDAP Directory:
$self->{LDAP_INSTANCE} = Net::LDAPS->new($host);
$self->{LDAP_INSTANCE}->bind(dn=>$dn, password=>$password, version=>3 )

my $rc =$self->{LDAP_INSTANCE}->modify(
    $DN_OF_USER_ACCOUNT, 
    [ replace => [pwdLastSet => 0] ]
);
print $rc->error;

非常好,感谢您的解释和正确的解决方案。