# Unix SMB/CIFS implementation. # # Computer model. # # Copyright (C) Catalyst.Net Ltd. 2023 # # Written by Rob van der Linde # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # from ldb import Dn from samba.dsdb import DS_GUID_COMPUTERS_CONTAINER from .user import User class Computer(User): """A Computer is a type of User.""" @staticmethod def get_base_dn(ldb): """Return base Dn for Computers. :param ldb: Ldb connection :return: Dn to use for searching """ return ldb.get_wellknown_dn(ldb.get_default_basedn(), DS_GUID_COMPUTERS_CONTAINER) @staticmethod def get_object_class(): return "computer" @classmethod def find(cls, ldb, name): """Helper function to find a computer, first by Dn then username. If the Dn can't be parsed use sAMAccountName, automatically add the $. """ try: query = {"dn": Dn(ldb, name)} except ValueError: if name.endswith("$"): query = {"username": name} else: query = {"username": name + "$"} return cls.get(ldb, **query)