Пример #1
0
    def run(self, smb):
        try:
            action = 'NONE'
            node = ConfigNode('service.smb', self.configstore)
            if smb.get('filemask'):
                smb['filemask'] = get_integer(smb['filemask'])
            if smb.get('dirmask'):
                smb['dirmask'] = get_integer(smb['dirmask'])
            node.update(smb)
            configure_params(node.__getstate__(), self.dispatcher.call_sync('service.smb.ad_enabled'))

            try:
                rpc = smbconf.SambaMessagingContext()
                rpc.reload_config()
            except OSError:
                action = 'RESTART'

            # XXX: Is restart to change netbios name/workgroup *really* needed?
            if 'netbiosname' in smb or 'workgroup' in smb:
                action = 'RESTART'

            self.dispatcher.dispatch_event('service.smb.changed', {
                'operation': 'updated',
                'ids': None,
            })
        except RpcException as e:
            raise TaskException(
                errno.ENXIO, 'Cannot reconfigure SMB: {0}'.format(str(e))
            )

        return action
Пример #2
0
    def run(self, smb):
        node = ConfigNode('service.smb', self.configstore).__getstate__()
        netbiosname = smb.get('netbiosname')
        if netbiosname is not None:
            for n in netbiosname:
                if not validate_netbios_name(n):
                    raise TaskException(errno.EINVAL, 'Invalid name {0}'.format(n))
        else:
            netbiosname = node['netbiosname']

        workgroup = smb.get('workgroup')
        if workgroup is not None:
            if not validate_netbios_name(workgroup):
                raise TaskException(errno.EINVAL, 'Invalid name')
        else:
            workgroup = node['workgroup']

        if workgroup.lower() in [i.lower() for i in netbiosname]:
            raise TaskException(errno.EINVAL, 'NetBIOS and Workgroup must be unique')

        if smb.get('guest_user'):
            if not self.dispatcher.call_sync('user.query', [('username', '=', smb['guest_user'])], {'single': True}):
                raise TaskException(errno.EINVAL, 'User: {0} does not exist'.format(smb['guest_user']))

        try:
            action = 'NONE'
            node = ConfigNode('service.smb', self.configstore)
            if smb.get('filemask'):
                smb['filemask'] = get_integer(smb['filemask'])

            if smb.get('dirmask'):
                smb['dirmask'] = get_integer(smb['dirmask'])

            node.update(smb)
            configure_params(node.__getstate__(), self.dispatcher.call_sync('service.smb.ad_enabled'))

            try:
                rpc = smbconf.SambaMessagingContext()
                rpc.reload_config()
            except OSError:
                action = 'RESTART'

            # XXX: Is restart to change netbios name/workgroup *really* needed?
            if 'netbiosname' in smb or 'workgroup' in smb:
                action = 'RESTART'

            self.dispatcher.dispatch_event('service.smb.changed', {
                'operation': 'updated',
                'ids': None,
            })
        except RpcException as e:
            raise TaskException(
                errno.ENXIO, 'Cannot reconfigure SMB: {0}'.format(str(e))
            )

        return action
Пример #3
0
    def run(self, smb):
        node = ConfigNode('service.smb', self.configstore).__getstate__()
        netbiosname = smb.get('netbiosname')
        if netbiosname is not None:
            for n in netbiosname:
                if not validate_netbios_name(n):
                    raise TaskException(errno.EINVAL, 'Invalid name {0}'.format(n))
        else:
            netbiosname = node['netbiosname']

        workgroup = smb.get('workgroup')
        if workgroup is not None:
            if not validate_netbios_name(workgroup):
                raise TaskException(errno.EINVAL, 'Invalid name')
        else:
            workgroup = node['workgroup']

        if workgroup.lower() in [i.lower() for i in netbiosname]:
            raise TaskException(errno.EINVAL, 'NetBIOS and Workgroup must be unique')

        try:
            action = 'NONE'
            node = ConfigNode('service.smb', self.configstore)
            if smb.get('filemask'):
                smb['filemask'] = get_integer(smb['filemask'])

            if smb.get('dirmask'):
                smb['dirmask'] = get_integer(smb['dirmask'])

            node.update(smb)
            configure_params(node.__getstate__(), self.dispatcher.call_sync('service.smb.ad_enabled'))

            try:
                rpc = smbconf.SambaMessagingContext()
                rpc.reload_config()
            except OSError:
                action = 'RESTART'

            # XXX: Is restart to change netbios name/workgroup *really* needed?
            if 'netbiosname' in smb or 'workgroup' in smb:
                action = 'RESTART'

            self.dispatcher.dispatch_event('service.smb.changed', {
                'operation': 'updated',
                'ids': None,
            })
        except RpcException as e:
            raise TaskException(
                errno.ENXIO, 'Cannot reconfigure SMB: {0}'.format(str(e))
            )

        return action
Пример #4
0
    def run(self, smb):
        node = ConfigNode("service.smb", self.configstore).__getstate__()
        netbiosname = smb.get("netbiosname")
        if netbiosname is not None:
            for n in netbiosname:
                if not validate_netbios_name(n):
                    raise TaskException(errno.EINVAL, "Invalid name {0}".format(n))
        else:
            netbiosname = node["netbiosname"]

        workgroup = smb.get("workgroup")
        if workgroup is not None:
            if not validate_netbios_name(workgroup):
                raise TaskException(errno.EINVAL, "Invalid name")
        else:
            workgroup = node["workgroup"]

        if workgroup.lower() in [i.lower() for i in netbiosname]:
            raise TaskException(errno.EINVAL, "NetBIOS and Workgroup must be unique")

        try:
            action = "NONE"
            node = ConfigNode("service.smb", self.configstore)
            if smb.get("filemask"):
                smb["filemask"] = get_integer(smb["filemask"])

            if smb.get("dirmask"):
                smb["dirmask"] = get_integer(smb["dirmask"])

            node.update(smb)
            configure_params(node.__getstate__(), self.dispatcher.call_sync("service.smb.ad_enabled"))

            try:
                rpc = smbconf.SambaMessagingContext()
                rpc.reload_config()
            except OSError:
                action = "RESTART"

            # XXX: Is restart to change netbios name/workgroup *really* needed?
            if "netbiosname" in smb or "workgroup" in smb:
                action = "RESTART"

            self.dispatcher.dispatch_event("service.smb.changed", {"operation": "updated", "ids": None})
        except RpcException as e:
            raise TaskException(errno.ENXIO, "Cannot reconfigure SMB: {0}".format(str(e)))

        return action
Пример #5
0
    def run(self, cifs):
        try:
            action = 'NONE'
            node = ConfigNode('service.cifs', self.configstore)
            node.update(cifs)
            configure_params(node.__getstate__())

            # XXX: Is restart to change netbios name/workgroup *really* needed?
            if 'netbiosname' in cifs or 'workgroup' in cifs:
                action = 'RESTART'

            self.dispatcher.dispatch_event('service.cifs.changed', {
                'operation': 'updated',
                'ids': None,
            })
        except RpcException as e:
            raise TaskException(
                errno.ENXIO, 'Cannot reconfigure CIFS: {0}'.format(str(e))
            )

        return action
Пример #6
0
def _init(dispatcher, plugin):
    def set_smb_sid():
        smb = dispatcher.call_sync('service.smb.get_config')
        if not smb['sid']:
            try:
                sid = system('/usr/local/bin/net', 'getlocalsid')[0]
                if ':' in sid:
                    sid = sid.split(':', 1)[1].strip(' ').strip('\n')
                    if sid:
                        dispatcher.configstore.set('service.smb.sid', sid)
                        smb['sid'] = sid
            except SubprocessException:
                logger.error('Failed to get local sid', exc_info=True)
        try:
            if smb['sid']:
                system('/usr/local/bin/net', 'setlocalsid', smb['sid'])
        except SubprocessException as err:
            logger.error('Failed to set local sid: {0}'.format(err.output))

    # Register schemas
    PROTOCOLS = [
        'CORE',
        'COREPLUS',
        'LANMAN1',
        'LANMAN2',
        'NT1',
        'SMB2',
        'SMB2_02',
        'SMB2_10',
        'SMB2_22',
        'SMB2_24',
        'SMB3',
        'SMB3_00',
    ]

    plugin.register_schema_definition(
        'ServiceSmb', {
            'type': 'object',
            'properties': {
                'type': {
                    'enum': ['ServiceSmb']
                },
                'enable': {
                    'type': 'boolean'
                },
                'netbiosname': {
                    'type': 'array',
                    'items': {
                        'type': 'string'
                    }
                },
                'workgroup': {
                    'type': 'string'
                },
                'description': {
                    'type': 'string'
                },
                'dos_charset': {
                    '$ref': 'ServiceSmbDoscharset'
                },
                'unix_charset': {
                    '$ref': 'ServiceSmbUnixcharset'
                },
                'log_level': {
                    '$ref': 'ServiceSmbLoglevel'
                },
                'local_master': {
                    'type': 'boolean'
                },
                'domain_logons': {
                    'type': 'boolean'
                },
                'time_server': {
                    'type': 'boolean'
                },
                'guest_user': {
                    'type': 'string'
                },
                'filemask': {
                    'oneOf': [{
                        '$ref': 'UnixPermissions'
                    }, {
                        'type': 'null'
                    }]
                },
                'dirmask': {
                    'oneOf': [{
                        '$ref': 'UnixPermissions'
                    }, {
                        'type': 'null'
                    }]
                },
                'empty_password': {
                    'type': 'boolean'
                },
                'unixext': {
                    'type': 'boolean'
                },
                'zeroconf': {
                    'type': 'boolean'
                },
                'hostlookup': {
                    'type': 'boolean'
                },
                'min_protocol': {
                    '$ref': 'ServiceSmbMinprotocol'
                },
                'max_protocol': {
                    '$ref': 'ServiceSmbMaxprotocol'
                },
                'execute_always': {
                    'type': 'boolean'
                },
                'obey_pam_restrictions': {
                    'type': 'boolean'
                },
                'bind_addresses': {
                    'type': ['array', 'null'],
                    'items': {
                        'type': 'string'
                    },
                },
                'auxiliary': {
                    'type': ['string', 'null']
                },
                'sid': {
                    'type': ['string', 'null']
                },
            },
            'additionalProperties': False,
        })

    plugin.register_schema_definition(
        'ServiceSmbDoscharset', {
            'type':
            'string',
            'enum': [
                'CP437', 'CP850', 'CP852', 'CP866', 'CP932', 'CP949', 'CP950',
                'CP1029', 'CP1251', 'ASCII'
            ]
        })

    plugin.register_schema_definition(
        'ServiceSmbUnixcharset', {
            'type':
            'string',
            'enum': [
                'UTF-8', 'iso-8859-1', 'iso-8859-15', 'gb2312', 'EUC-JP',
                'ASCII'
            ]
        })

    plugin.register_schema_definition('ServiceSmbLoglevel', {
        'type': 'string',
        'enum': list(LogLevel.__members__.keys())
    })

    plugin.register_schema_definition('ServiceSmbMinprotocol', {
        'type': 'string',
        'enum': PROTOCOLS
    })

    plugin.register_schema_definition('ServiceSmbMaxprotocol', {
        'type': 'string',
        'enum': PROTOCOLS
    })

    # Register providers
    plugin.register_provider("service.smb", SMBProvider)

    # Register tasks
    plugin.register_task_handler("service.smb.update", SMBConfigureTask)

    # Register debug hooks
    plugin.register_debug_hook(collect_debug)

    set_smb_sid()
    os.unlink('/var/db/samba4/registry.tdb')
    os.chmod('/var/db/samba4/private', 0o700)
    os.chmod('/var/db/samba4/private/msg.sock', 0o700)
    os.chmod('/var/db/samba4/winbindd_privileged', 0o750)

    node = ConfigNode('service.smb', dispatcher.configstore)
    configure_params(node.__getstate__(),
                     dispatcher.call_sync('service.smb.ad_enabled'))
Пример #7
0
def _init(dispatcher, plugin):

    def set_cifs_sid():
        cifs = dispatcher.call_sync('service.cifs.get_config')
        if not cifs['sid']:
            try:
                sid = system('/usr/local/bin/net', 'getlocalsid')[0]
                if ':' in sid:
                    sid = sid.split(':', 1)[1].strip(' ').strip('\n')
                    if sid:
                        dispatcher.configstore.set('service.cifs.sid', sid)
                        cifs['sid'] = sid
            except SubprocessException:
                logger.error('Failed to get local sid', exc_info=True)
        try:
            if cifs['sid']:
                system('/usr/local/bin/net', 'setlocalsid', cifs['sid'])
        except SubprocessException as err:
            logger.error('Failed to set local sid: {0}'.format(err.output))

    # Register schemas
    PROTOCOLS = [
        'CORE',
        'COREPLUS',
        'LANMAN1',
        'LANMAN2',
        'NT1',
        'SMB2',
        'SMB2_02',
        'SMB2_10',
        'SMB2_22',
        'SMB2_24',
        'SMB3',
        'SMB3_00',
    ]

    plugin.register_schema_definition('service-cifs', {
        'type': 'object',
        'properties': {
            'netbiosname': {
                'type': 'array',
                'items': {'type': 'string'}
            },
            'workgroup': {'type': 'string'},
            'description': {'type': 'string'},
            'dos_charset': {'type': 'string'},
            'unix_charset': {'type': 'string'},
            'log_level': {
                'type': 'string',
                'enum': list(LogLevel.__members__.keys())
            },
            'syslog': {'type': 'boolean'},
            'local_master': {'type': 'boolean'},
            'domain_logons': {'type': 'boolean'},
            'time_server': {'type': 'boolean'},
            'guest_user': {'type': 'string'},
            'filemask': {'type': ['string', 'null']},
            'dirmask': {'type': ['string', 'null']},
            'empty_password': {'type': 'boolean'},
            'unixext': {'type': 'boolean'},
            'zeroconf': {'type': 'boolean'},
            'hostlookup': {'type': 'boolean'},
            'min_protocol': {'type': ['string', 'null'], 'enum': [None] + PROTOCOLS},
            'max_protocol': {'type': 'string', 'enum': PROTOCOLS},
            'execute_always': {'type': 'boolean'},
            'obey_pam_restrictions': {'type': 'boolean'},
            'bind_addresses': {
                'type': ['array', 'null'],
                'items': {'type': 'string'},
            },
            'auxiliary': {'type': ['string', 'null']},
            'sid': {'type': ['string', 'null']},
        },
        'additionalProperties': False,
    })

    # Register providers
    plugin.register_provider("service.cifs", CIFSProvider)

    # Register tasks
    plugin.register_task_handler("service.cifs.configure", CIFSConfigureTask)

    set_cifs_sid()
    node = ConfigNode('service.cifs', dispatcher.configstore)
    configure_params(node.__getstate__())
Пример #8
0
def _init(dispatcher, plugin):

    def set_smb_sid():
        smb = dispatcher.call_sync('service.smb.get_config')
        if not smb['sid']:
            try:
                sid = system('/usr/local/bin/net', 'getlocalsid')[0]
                if ':' in sid:
                    sid = sid.split(':', 1)[1].strip(' ').strip('\n')
                    if sid:
                        dispatcher.configstore.set('service.smb.sid', sid)
                        smb['sid'] = sid
            except SubprocessException:
                logger.error('Failed to get local sid', exc_info=True)
        try:
            if smb['sid']:
                system('/usr/local/bin/net', 'setlocalsid', smb['sid'])
        except SubprocessException as err:
            logger.error('Failed to set local sid: {0}'.format(err.output))

    # Register schemas
    PROTOCOLS = [
        'CORE',
        'COREPLUS',
        'LANMAN1',
        'LANMAN2',
        'NT1',
        'SMB2',
        'SMB2_02',
        'SMB2_10',
        'SMB2_22',
        'SMB2_24',
        'SMB3',
        'SMB3_00',
    ]

    plugin.register_schema_definition('ServiceSmb', {
        'type': 'object',
        'properties': {
            'type': {'enum': ['ServiceSmb']},
            'enable': {'type': 'boolean'},
            'netbiosname': {
                'type': 'array',
                'items': {'type': 'string'}
            },
            'workgroup': {'type': 'string'},
            'description': {'type': 'string'},
            'dos_charset': {'$ref': 'ServiceSmbDoscharset'},
            'unix_charset': {'$ref': 'ServiceSmbUnixcharset'},
            'log_level': {'$ref': 'ServiceSmbLoglevel'},
            'local_master': {'type': 'boolean'},
            'domain_logons': {'type': 'boolean'},
            'time_server': {'type': 'boolean'},
            'guest_user': {'type': 'string'},
            'filemask': {
                'oneOf': [
                    {'$ref': 'UnixPermissions'},
                    {'type': 'null'}
                ]
            },
            'dirmask': {
                'oneOf': [
                    {'$ref': 'UnixPermissions'},
                    {'type': 'null'}
                ]
            },
            'empty_password': {'type': 'boolean'},
            'unixext': {'type': 'boolean'},
            'zeroconf': {'type': 'boolean'},
            'hostlookup': {'type': 'boolean'},
            'min_protocol': {'$ref': 'ServiceSmbMinprotocol'},
            'max_protocol': {'$ref': 'ServiceSmbMaxprotocol'},
            'execute_always': {'type': 'boolean'},
            'obey_pam_restrictions': {'type': 'boolean'},
            'bind_addresses': {
                'type': ['array', 'null'],
                'items': {'type': 'string'},
            },
            'auxiliary': {'type': ['string', 'null']},
            'sid': {'type': ['string', 'null']},
        },
        'additionalProperties': False,
    })

    plugin.register_schema_definition('ServiceSmbDoscharset', {
        'type': 'string',
        'enum': [
            'CP437', 'CP850', 'CP852', 'CP866', 'CP932', 'CP949',
            'CP950', 'CP1029', 'CP1251', 'ASCII'
        ]
    })

    plugin.register_schema_definition('ServiceSmbUnixcharset', {
        'type': 'string',
        'enum': ['UTF-8', 'iso-8859-1', 'iso-8859-15', 'gb2312', 'EUC-JP', 'ASCII']
    })

    plugin.register_schema_definition('ServiceSmbLoglevel', {
        'type': 'string',
        'enum': list(LogLevel.__members__.keys())
    })

    plugin.register_schema_definition('ServiceSmbMinprotocol', {
        'type': 'string',
        'enum': PROTOCOLS
    })

    plugin.register_schema_definition('ServiceSmbMaxprotocol', {
        'type': 'string',
        'enum': PROTOCOLS
    })

    # Register providers
    plugin.register_provider("service.smb", SMBProvider)

    # Register tasks
    plugin.register_task_handler("service.smb.update", SMBConfigureTask)

    # Register debug hooks
    plugin.register_debug_hook(collect_debug)

    set_smb_sid()
    os.unlink('/var/db/samba4/registry.tdb')

    node = ConfigNode('service.smb', dispatcher.configstore)
    configure_params(node.__getstate__(), dispatcher.call_sync('service.smb.ad_enabled'))
Пример #9
0
def _init(dispatcher, plugin):
    def set_smb_sid():
        smb = dispatcher.call_sync("service.smb.get_config")
        if not smb["sid"]:
            try:
                sid = system("/usr/local/bin/net", "getlocalsid")[0]
                if ":" in sid:
                    sid = sid.split(":", 1)[1].strip(" ").strip("\n")
                    if sid:
                        dispatcher.configstore.set("service.smb.sid", sid)
                        smb["sid"] = sid
            except SubprocessException:
                logger.error("Failed to get local sid", exc_info=True)
        try:
            if smb["sid"]:
                system("/usr/local/bin/net", "setlocalsid", smb["sid"])
        except SubprocessException as err:
            logger.error("Failed to set local sid: {0}".format(err.output))

    # Register schemas
    PROTOCOLS = [
        "CORE",
        "COREPLUS",
        "LANMAN1",
        "LANMAN2",
        "NT1",
        "SMB2",
        "SMB2_02",
        "SMB2_10",
        "SMB2_22",
        "SMB2_24",
        "SMB3",
        "SMB3_00",
    ]

    plugin.register_schema_definition(
        "service-smb",
        {
            "type": "object",
            "properties": {
                "type": {"enum": ["service-smb"]},
                "enable": {"type": "boolean"},
                "netbiosname": {"type": "array", "items": {"type": "string"}},
                "workgroup": {"type": "string"},
                "description": {"type": "string"},
                "dos_charset": {"$ref": "service-smb-doscharset"},
                "unix_charset": {"$ref": "service-smb-unixcharset"},
                "log_level": {"$ref": "service-smb-loglevel"},
                "syslog": {"type": "boolean"},
                "local_master": {"type": "boolean"},
                "domain_logons": {"type": "boolean"},
                "time_server": {"type": "boolean"},
                "guest_user": {"type": "string"},
                "filemask": {"oneOf": [{"$ref": "unix-permissions"}, {"type": "null"}]},
                "dirmask": {"oneOf": [{"$ref": "unix-permissions"}, {"type": "null"}]},
                "empty_password": {"type": "boolean"},
                "unixext": {"type": "boolean"},
                "zeroconf": {"type": "boolean"},
                "hostlookup": {"type": "boolean"},
                "min_protocol": {"$ref": "service-smb-minprotocol"},
                "max_protocol": {"$ref": "service-smb-maxprotocol"},
                "execute_always": {"type": "boolean"},
                "obey_pam_restrictions": {"type": "boolean"},
                "bind_addresses": {"type": ["array", "null"], "items": {"type": "string"}},
                "auxiliary": {"type": ["string", "null"]},
                "sid": {"type": ["string", "null"]},
            },
            "additionalProperties": False,
        },
    )

    plugin.register_schema_definition(
        "service-smb-doscharset",
        {
            "type": "string",
            "enum": ["CP437", "CP850", "CP852", "CP866", "CP932", "CP949", "CP950", "CP1029", "CP1251", "ASCII"],
        },
    )

    plugin.register_schema_definition(
        "service-smb-unixcharset",
        {"type": "string", "enum": ["UTF-8", "iso-8859-1", "iso-8859-15", "gb2312", "EUC-JP", "ASCII"]},
    )

    plugin.register_schema_definition(
        "service-smb-loglevel", {"type": "string", "enum": list(LogLevel.__members__.keys())}
    )

    plugin.register_schema_definition(
        "service-smb-minprotocol", {"type": ["string", "null"], "enum": [None] + PROTOCOLS}
    )

    plugin.register_schema_definition("service-smb-maxprotocol", {"type": "string", "enum": PROTOCOLS})

    # Register providers
    plugin.register_provider("service.smb", SMBProvider)

    # Register tasks
    plugin.register_task_handler("service.smb.update", SMBConfigureTask)

    # Register debug hooks
    plugin.register_debug_hook(collect_debug)

    set_smb_sid()
    os.unlink("/var/db/samba4/registry.tdb")

    node = ConfigNode("service.smb", dispatcher.configstore)
    configure_params(node.__getstate__(), dispatcher.call_sync("service.smb.ad_enabled"))