Coverage for airflow.security.utils: 27%

# Coverage for airflow.security.utils : 27%

## 37 statements 10 run 27 missing 0 excluded

Hot-keys on this page

r m x p toggle line displays

j k next/prev highlighted chunk

0 (zero) top of page

1 (one) first highlighted chunk

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #!/usr/bin/env python # Licensed to Cloudera, Inc. under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. Cloudera, Inc. licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import re import socket import airflow.configuration as conf # Pattern to replace with hostname HOSTNAME_PATTERN = '_HOST' def get_kerberos_principal(principal, host): components = get_components(principal) if not components or len(components) != 3 or components[1] != HOSTNAME_PATTERN: return principal else: if not host: raise IOError("Can't replace %s pattern since host is null." % HOSTNAME_PATTERN) return replace_hostname_pattern(components, host) def get_components(principal): """ get_components(principal) -> (short name, instance (FQDN), realm) ``principal`` is the kerberos principal to parse. """ if not principal: return None return re.split('[\/@]', str(principal)) def replace_hostname_pattern(components, host=None): fqdn = host if not fqdn or fqdn == '0.0.0.0': fqdn = get_localhost_name() return '%s/%s@%s' % (components[0], fqdn.lower(), components[2]) def get_localhost_name(): return socket.getfqdn() def get_fqdn(hostname_or_ip=None): # Get hostname try: if hostname_or_ip: fqdn = socket.gethostbyaddr(hostname_or_ip)[0] else: fqdn = get_localhost_name() except IOError: fqdn = hostname_or_ip if fqdn == 'localhost': fqdn = get_localhost_name() return fqdn def principal_from_username(username): realm = configuration.get("security", "default_realm") if '@' not in username and realm: username = "{}@{}".format(username, realm) return username