# ipaserver.plugins.dns.dnsforwardzone

class ipaserver.plugins.dns.dnsforwardzone(api)

  Bases: `ipaserver.plugins.dns.DNSZoneBase`

  DNS Forward zone, container for resource records.

  Public Data Attributes:

  `object_name` |
  `object_name_plural` |
  `object_class` |
  `label` |
  `label_singular` |
  `default_forward_policy` |

  Inherited from `DNSZoneBase`

  `container_dn` |
  `object_class` |
  `possible_objectclasses` |
  `default_attributes` |
  `takes_params` |

  Inherited from `LDAPObject`

  `backend_name` |
  `parent_object` |
  `container_dn` |
  `object_name` |
  `object_name_plural` |
  `object_class` |
  `object_class_config` |
  `possible_objectclasses` |
  `limit_object_classes` |
  `disallow_object_classes` |
  `permission_filter_objectclasses` |
  `search_attributes` |
  `search_attributes_config` |
  `default_attributes` |
  `search_display_attributes` |
  `hidden_attributes` |
  `rdn_attribute` |
  `uuid_attribute` |
  `attribute_members` |
  `allow_rename` |
  `password_attributes` |
  `bindable` |
  `relationships` |
  `label` |
  `label_singular` |
  `managed_permissions` |
  `container_not_found_msg` |
  `parent_not_found_msg` |
  `object_not_found_msg` |
  `already_exists_msg` |
  `json_friendly_attributes` |

  Inherited from `Object`

  `backend_name` |
  `takes_params` |
  `json_friendly_attributes` |

  Inherited from `HasParam`

  `NO_CLI` |
  `context` |

  Inherited from `Plugin`

  `version` |
  `name` |
  `full_name` |
  `bases` |
  `doc` |
  `summary` |
  `api` | Return API instance passed to __init__().
  `env` |
  `Backend` |
  `Command` |

  Public Methods:

  Inherited from `DNSZoneBase`

  `get_dn`(*keys, **options) | Construct an LDAP DN.
  `permission_name`(zone) |
  `get_name_in_zone`(zone, hostname) | Get name of a record that is to be added to a new zone.

  Inherited from `LDAPObject`

  `get_dn`(*keys, **options) | Construct an LDAP DN.
  `get_dn_if_exists`(*keys, **kwargs) |
  `get_primary_key_from_dn`(dn) |
  `get_ancestor_primary_keys`() |
  `has_objectclass`(classes, objectclass) |
  `convert_attribute_members`(entry_attrs, ...) |
  `get_indirect_members`(entry_attrs, attrs_list) |
  `get_memberindirect`(group_entry) | Get indirect members
  `get_memberofindirect`(entry) |
  `get_password_attributes`(ldap, dn, entry_attrs) | Search on the entry to determine if it has a password or keytab set.
  `handle_not_found`(*keys) | Handle NotFound exception
  `handle_duplicate_entry`(*keys) |
  `__json__`() |

  Inherited from `Object`

  `backend` |
  `methods` |
  `params` |
  `primary_key` |
  `params_minus_pk` |
  `params_minus`(*names) | Yield all Param whose name is not in `names`.
  `get_dn`(*keys, **options) | Construct an LDAP DN.
  `get_params`() | This method gets called by HasParam._create_param_namespace().
  `__json__`() |

  Inherited from `Plugin`

  `__init__`(api) |
  `finalize`() | Finalize plugin initialization.
  `ensure_finalized`() | Finalize plugin initialization if it has not yet been finalized.
  `__repr__`() | Return 'module_name.class_name()' representation.

  Inherited from `ReadOnly`

  `__lock__`() | Put this instance into a read-only state.
  `__islocked__`() | Return True if instance is locked, otherwise False.
  `__setattr__`(name, value) | If unlocked, set attribute named `name` to `value`.
  `__delattr__`(name) | If unlocked, delete attribute named `name`.

  Private Data Attributes:

  Inherited from `ReadOnly`

  `_ReadOnly__locked` |

  Private Methods:

  `_warning_fw_zone_is_not_effective`(result, ...) |
  `_warning_if_forwarders_do_not_work`(result, ...) |

  Inherited from `DNSZoneBase`

  `_remove_permission`(zone) |
  `_make_zonename_absolute`(entry_attrs, **options) | Zone names can be relative in IPA < 4.0, make sure we always return absolute zone name from ldap

  Inherited from `Object`

  `_on_finalize`() | Do custom finalization.
  `_Object__get_attrs`(name) |

  Inherited from `HasParam`

  `_get_param_iterable`(name[, verb]) | Return an iterable of params defined by the attribute named `name`.
  `_filter_param_by_context`(name[, env]) | Filter params on attribute named `name` by environment `env`.
  `_create_param_namespace`(name[, env]) |

  Inherited from `Plugin`

  `_Plugin__name_getter`() |
  `_Plugin__full_name_getter`() |
  `_Plugin__bases_getter`() |
  `_Plugin__doc_getter`() |
  `_Plugin__summary_getter`() |
  `_on_finalize`() | Do custom finalization.

  property Backend
  property Command
  NO_CLI = False
  __annotations__ = {}
  __delattr__(name)

    If unlocked, delete attribute named `name`.

    If this instance is locked, an AttributeError will be raised.

    Parameters

      name – Name of attribute to delete.

  __dict__ = mappingproxy({'__module__': 'ipaserver.plugins.dns', '__doc__': '\n DNS Forward zone, container for resource records.\n ', 'object_name': Gettext('DNS forward zone', domain='ipa', localedir=None), 'object_name_plural': Gettext('DNS forward zones', domain='ipa', localedir=None), 'object_class': ['top', 'idnsforwardzone'], 'label': Gettext('DNS Forward Zones', domain='ipa', localedir=None), 'label_singular': Gettext('DNS Forward Zone', domain='ipa', localedir=None), 'default_forward_policy': 'first', '_warning_fw_zone_is_not_effective': <function dnsforwardzone._warning_fw_zone_is_not_effective>, '_warning_if_forwarders_do_not_work': <function dnsforwardzone._warning_if_forwarders_do_not_work>, '__annotations__': {}})
  __init__(api)
  __islocked__()

    Return True if instance is locked, otherwise False.

  __json__()
  __lock__()

    Put this instance into a read-only state.

    After the instance has been locked, attempting to set or delete an attribute will raise an AttributeError.

  __module__ = 'ipaserver.plugins.dns'
  __repr__()

    Return ‘module_name.class_name()’ representation.

    This representation could be used to instantiate this Plugin instance given the appropriate environment.

  __setattr__(name, value)

    If unlocked, set attribute named `name` to `value`.

    If this instance is locked, an AttributeError will be raised.

    Parameters

      - name – Name of attribute to set.

      - value – Value to assign to attribute.

  __weakref__

    list of weak references to the object (if defined)

  _create_param_namespace(name, env=None)
  _filter_param_by_context(name, env=None)

    Filter params on attribute named `name` by environment `env`.

    For example:

        >>> from ipalib.config import Env
        >>> class Example(HasParam):
        ...
        ...     takes_args = (
        ...         Str('foo_only', include=['foo']),
        ...         Str('not_bar', exclude=['bar']),
        ...         'both',
        ...     )
        ...
        ...     def get_args(self):
        ...         return self._get_param_iterable('args')
        ...
        ...
        >>> eg = Example()
        >>> foo = Env(context='foo')
        >>> bar = Env(context='bar')
        >>> another = Env(context='another')
        >>> (foo.context, bar.context, another.context)
        (u'foo', u'bar', u'another')
        >>> list(eg._filter_param_by_context('args', foo))
        [Str('foo_only', include=['foo']), Str('not_bar', exclude=['bar']), Str('both')]
        >>> list(eg._filter_param_by_context('args', bar))
        [Str('both')]
        >>> list(eg._filter_param_by_context('args', another))
        [Str('not_bar', exclude=['bar']), Str('both')]

  _get_param_iterable(name, verb='takes')

    Return an iterable of params defined by the attribute named `name`.

    A sequence of params can be defined one of three ways: as a `tuple`; as a callable that returns an iterable; or as a param spec (a Param or `str` instance). This method returns a uniform iterable regardless of how the param sequence was defined.

    For example, when defined with a tuple:

        >>> class ByTuple(HasParam):
        ...     takes_args = (Param('foo'), Param('bar'))
        ...
        >>> by_tuple = ByTuple()
        >>> list(by_tuple._get_param_iterable('args'))
        [Param('foo'), Param('bar')]

    Or you can define your param sequence with a callable when you need to reference attributes on your plugin instance (for validation rules, etc.). For example:

        >>> class ByCallable(HasParam):
        ...     def takes_args(self):
        ...         yield Param('foo', self.validate_foo)
        ...         yield Param('bar', self.validate_bar)
        ...
        ...     def validate_foo(self, _, value, **kw):
        ...         if value != 'Foo':
        ...             return _("must be 'Foo'")
        ...
        ...     def validate_bar(self, _, value, **kw):
        ...         if value != 'Bar':
        ...             return _("must be 'Bar'")
        ...
        >>> by_callable = ByCallable()
        >>> list(by_callable._get_param_iterable('args'))
        [Param('foo', validate_foo), Param('bar', validate_bar)]

    Lastly, as a convenience for when a param sequence contains a single param, your defining attribute may a param spec (either a Param or an `str` instance). For example:

        >>> class BySpec(HasParam):
        ...     takes_args = Param('foo')
        ...     takes_options = 'bar?'
        ...
        >>> by_spec = BySpec()
        >>> list(by_spec._get_param_iterable('args'))
        [Param('foo')]
        >>> list(by_spec._get_param_iterable('options'))
        ['bar?']

    For information on how an `str` param spec is interpreted, see the create_param() and parse_param_spec() functions in the ipalib.parameters module.

    Also see HasParam._filter_param_by_context().

  _make_zonename_absolute(entry_attrs, **options)

    Zone names can be relative in IPA < 4.0, make sure we always return absolute zone name from ldap

  _on_finalize()

    Do custom finalization.

    This method is called from finalize(). Subclasses can override this method in order to add custom finalization.

  _remove_permission(zone)
  _warning_fw_zone_is_not_effective(result, *keys, **options)
  _warning_if_forwarders_do_not_work(result, new_zone, *keys, **options)
  allow_rename = False
  already_exists_msg = Gettext('%(oname)s with name "%(pkey)s" already exists', domain='ipa', localedir=None)
  property api

    Return API instance passed to __init__().

  attribute_members = {}
  backend = None
  backend_name = 'ldap2'
  bases = (<class 'ipaserver.plugins.dns.DNSZoneBase'>,)
  bindable = False
  container_dn = ipapython.dn.DN('cn=dns')
  container_not_found_msg = Gettext('container entry (%(container)s) not found', domain='ipa', localedir=None)
  property context
  convert_attribute_members(entry_attrs, *keys, **options)
  default_attributes = ['idnsname', 'idnszoneactive', 'idnsforwarders', 'idnsforwardpolicy']
  default_forward_policy = 'first'
  disallow_object_classes = []
  doc = '\n DNS Forward zone, container for resource records.\n '
  ensure_finalized()

    Finalize plugin initialization if it has not yet been finalized.

  property env
  finalize()

    Finalize plugin initialization.

    This method calls _on_finalize() and locks the plugin object.

    Subclasses should not override this method. Custom finalization is done in _on_finalize().

  class finalize_attr(name, value=None)

    Bases: `object`

    Create a stub object for plugin attribute that isn’t set until the finalization of the plugin initialization.

    When the stub object is accessed, it calls ensure_finalized() to make sure the plugin initialization is finalized. The stub object is expected to be replaced with the actual attribute value during the finalization (preferably in _on_finalize()), otherwise an AttributeError is raised.

    This is used to implement on-demand finalization of plugin initialization.

    __annotations__ = {}
    __get__(obj, cls)
    __init__(name, value=None)
    __module__ = 'ipalib.plugable'
    __slots__ = ('name', 'value')
    name
    value
  full_name = 'dnsforwardzone/1'
  get_ancestor_primary_keys()
  get_dn(*keys, **options)

    Construct an LDAP DN.

  get_dn_if_exists(*keys, **kwargs)
  get_indirect_members(entry_attrs, attrs_list)
  get_memberindirect(group_entry)

    Get indirect members

  get_memberofindirect(entry)
  get_name_in_zone(zone, hostname)

    Get name of a record that is to be added to a new zone. I.e. when we want to add record “ipa.lab.example.com” in a zone “example.com”, this function should return “ipa.lab”. Returns None when record cannot be added to a zone. Returns ‘@’ when the hostname is the zone record.

  get_params()

    This method gets called by HasParam._create_param_namespace().

  get_password_attributes(ldap, dn, entry_attrs)

    Search on the entry to determine if it has a password or keytab set.

    A tuple is used to determine which attribute is set in entry_attrs. The value is set to True/False whether a given password type is set.

  get_primary_key_from_dn(dn)
  handle_duplicate_entry(*keys)
  handle_not_found(*keys)

    Handle NotFound exception

    Must raise errors.NotFound again.

  has_objectclass(classes, objectclass)
  hidden_attributes = ['objectclass', 'aci']
  json_friendly_attributes = ('parent_object', 'container_dn', 'object_name', 'object_name_plural', 'object_class', 'object_class_config', 'default_attributes', 'label', 'label_singular', 'hidden_attributes', 'uuid_attribute', 'attribute_members', 'name', 'takes_params', 'rdn_attribute', 'bindable', 'relationships')
  label = Gettext('DNS Forward Zones', domain='ipa', localedir=None)
  label_singular = Gettext('DNS Forward Zone', domain='ipa', localedir=None)
  limit_object_classes = []
  managed_permissions = {}
  methods = None
  name = 'dnsforwardzone'
  object_class = ['top', 'idnsforwardzone']
  object_class_config = None
  object_name = Gettext('DNS forward zone', domain='ipa', localedir=None)
  object_name_plural = Gettext('DNS forward zones', domain='ipa', localedir=None)
  object_not_found_msg = Gettext('%(pkey)s: %(oname)s not found', domain='ipa', localedir=None)
  params = None
  params_minus(*names)

    Yield all Param whose name is not in `names`.

  params_minus_pk = None
  parent_not_found_msg = Gettext('%(parent)s: %(oname)s not found', domain='ipa', localedir=None)
  parent_object = ''
  password_attributes = []
  permission_filter_objectclasses = None
  permission_name(zone)
  possible_objectclasses = ['ipadnszone']
  primary_key = None
  rdn_attribute = ''
  relationships = {'member': ('Member', '', 'no_'), 'memberindirect': ('Indirect Member', None, 'no_indirect_'), 'membermanager': ('Group membership managed by', 'membermanager_', 'not_membermanager_'), 'memberof': ('Member Of', 'in_', 'not_in_'), 'memberofindirect': ('Indirect Member Of', None, 'not_in_indirect_')}
  search_attributes = []
  search_attributes_config = None
  search_display_attributes = []
  summary = 'DNS Forward zone, container for resource records.'
  takes_params = (DNSNameParam('idnsname', _no_wildcard_validator, cli_name='name', default_from=DefaultFrom('name_from_ip'), doc=Gettext('Zone name (FQDN)', domain='ipa', localedir=None), label=Gettext('Zone name', domain='ipa', localedir=None), normalizer=_normalize_zone, only_absolute=True, primary_key=True), Str('name_from_ip?', _validate_ipnet, doc=Gettext('IP network to create reverse zone name from', domain='ipa', localedir=None), flags=[u'virtual_attribute'], label=Gettext('Reverse zone IP network', domain='ipa', localedir=None)), Bool('idnszoneactive?', attribute=True, cli_name='zone_active', doc=Gettext('Is zone active?', domain='ipa', localedir=None), flags=[u'no_create', u'no_update'], label=Gettext('Active zone', domain='ipa', localedir=None)), Str('idnsforwarders*', validate_bind_forwarder, cli_name='forwarder', doc=Gettext('Per-zone forwarders. A custom port can be specified for each forwarder using a standard format "IP_ADDRESS port PORT"', domain='ipa', localedir=None), label=Gettext('Zone forwarders', domain='ipa', localedir=None)), StrEnum('idnsforwardpolicy?', cli_metavar=u"['only', 'first', 'none']", cli_name='forward_policy', doc=Gettext('Per-zone conditional forwarding policy. Set to "none" to disable forwarding to global forwarder for this zone. In that case, conditional zone forwarders are disregarded.', domain='ipa', localedir=None), label=Gettext('Forward policy', domain='ipa', localedir=None), values=[u'only', u'first', u'none']), Str('managedby', flags=[u'no_update', u'no_create', u'no_search', u'virtual_attribute'], label=Gettext('Managedby permission', domain='ipa', localedir=None)))
  uuid_attribute = ''
  version = '1'