- Work done on UserAccountControl

This commit is contained in:
Dave Mc Nicoll 2025-09-17 20:28:57 +00:00
parent ed1265232b
commit 131853104d
6 changed files with 57 additions and 4 deletions

View File

@ -12,7 +12,7 @@ use Ulmus\Ldap\Attribute\Obj\ObjectClass;
#[ObjectClass("user")] #[ObjectClass("user")]
class User implements EntityInterface class User implements EntityInterface
{ {
use \Ulmus\Ldap\EntityTrait; use \Ulmus\Ldap\EntityTrait, UserAccountControlTrait;
#[Field] #[Field]
public string $samaccountname; public string $samaccountname;

View File

@ -0,0 +1,28 @@
<?php
namespace Ulmus\Ldap\Entity;
enum UserAccountControlEnum : int
{
case SCRIPT = 1;
case ACCOUNTDISABLE = 2;
case HOMEDIR_REQUIRED = 8;
case LOCKOUT = 16;
case PASSWD_NOTREQD = 32;
case ENCRYPTED_TEXT_PWD_ALLOWED = 128;
case TEMP_DUPLICATE_ACCOUNT = 256;
case NORMAL_ACCOUNT = 512;
case INTERDOMAIN_TRUST_ACCOUNT = 2048;
case WORKSTATION_TRUST_ACCOUNT = 4096;
case SERVER_TRUST_ACCOUNT = 8192;
case DONT_EXPIRE_PASSWORD = 65536;
case MNS_LOGON_ACCOUNT = 131072;
case SMARTCARD_REQUIRED = 262144;
case TRUSTED_FOR_DELEGATION = 524288;
case NOT_DELEGATED = 1048576;
case USE_DES_KEY_ONLY = 2097152;
case DONT_REQ_PREAUTH = 4194304;
case PASSWORD_EXPIRED = 8388608;
case TRUSTED_TO_AUTH_FOR_DELEGATION = 16777216;
case PARTIAL_SECRETS_ACCOUNT = 67108864;
}

View File

@ -0,0 +1,16 @@
<?php
namespace Ulmus\Ldap\Entity;
trait UserAccountControlTrait
{
public function matchAccountControl(UserAccountControlEnum $userAccountControl) : bool
{
return ($this->userAccountControl & $userAccountControl->value) === $userAccountControl->value;
}
public function isDisabled() : bool
{
return $this->matchAccountControl(UserAccountControlEnum::ACCOUNTDISABLE);
}
}

View File

@ -105,6 +105,10 @@ class Filter extends Fragment {
$this->operator === Filter::OPERATOR_LIKE ? str_replace('%', '*', $this->value) : $value, $this->operator === Filter::OPERATOR_LIKE ? str_replace('%', '*', $this->value) : $value,
])); ]));
if ($this->not) {
$return = "!($return)";
}
return $this->applyOperator($return, ""); return $this->applyOperator($return, "");
} }
@ -129,6 +133,11 @@ class Filter extends Fragment {
return "(" . implode(", ", $stack) . ")"; return "(" . implode(", ", $stack) . ")";
} }
if ($this->operator === '=' && $this->value === "") {
$this->value = "*";
$this->not = true;
}
return $this->filterValue($this->value); return $this->filterValue($this->value);
} }

View File

@ -180,9 +180,9 @@ class QueryBuilder implements Ulmus\QueryBuilder\QueryBuilderInterface
return $this; return $this;
} }
public function notWhere($field, $value, string $operator = Ulmus\Query\Where::CONDITION_AND) : self public function notWhere($field, $value, string $operator = Ulmus\Query\Where::OPERATOR_EQUAL, string $condition = Ulmus\Query\Where::CONDITION_AND) : self
{ {
return $this->where($field, $value, $operator, true); return $this->where($field, $value, $operator, $condition, true);
} }
public function limit(int $value) : self public function limit(int $value) : self

View File

@ -15,7 +15,7 @@ class Repository extends \Ulmus\Repository
public array $events = []; public array $events = [];
public readonly \Ulmus\QueryBuilder\QueryBuilderInterface $queryBuilder; # public readonly \Ulmus\QueryBuilder\QueryBuilderInterface $queryBuilder;
public function __construct(string $entity, string $alias = self::DEFAULT_ALIAS, ConnectionAdapter $adapter = null) { public function __construct(string $entity, string $alias = self::DEFAULT_ALIAS, ConnectionAdapter $adapter = null) {
# $this->queryBuilder = new QueryBuilder(); # $this->queryBuilder = new QueryBuilder();