summaryrefslogtreecommitdiffstats
path: root/nova/auth
diff options
context:
space:
mode:
authorMasanori Itoh <itoumsn@nttdata.co.jp>2011-04-22 01:26:59 +0900
committerMasanori Itoh <itoumsn@nttdata.co.jp>2011-04-22 01:26:59 +0900
commit891eb82afacc10795e4ac05a0c8f817645db85c2 (patch)
tree9628fde3da56293ca8a39d0cd8ce120c489e8e4b /nova/auth
parentbc061d052f0faec69329dca80e5ef41954fbf171 (diff)
Utility method reworked, etc.
Diffstat (limited to 'nova/auth')
-rw-r--r--nova/auth/authutils.py48
-rw-r--r--nova/auth/manager.py4
2 files changed, 51 insertions, 1 deletions
diff --git a/nova/auth/authutils.py b/nova/auth/authutils.py
new file mode 100644
index 000000000..429e86ef9
--- /dev/null
+++ b/nova/auth/authutils.py
@@ -0,0 +1,48 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 NTT DATA CORPORATION.
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+# Licensed 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.
+
+"""
+Auth module specific utilities and helper functions.
+"""
+
+import netaddr
+import string
+
+
+def get_host_only_server_string(server_str):
+ """
+ Returns host part only of the given server_string if it's a combination
+ of host part and port. Otherwise, return null string.
+ """
+
+ # First of all, exclude pure IPv6 address (w/o port).
+ if netaddr.valid_ipv6(server_str):
+ return ''
+
+ # Next, check if this is IPv6 address with port number combination.
+ if server_str.find("]:") != -1:
+ [address, sep, port] = server_str.replace('[', '', 1).partition(']:')
+ return address
+
+ # Third, check if this is a combination of general address and port
+ if server_str.find(':') == -1:
+ return ''
+
+ # This must be a combination of host part and port
+ (address, port) = server_str.split(':')
+ return address
diff --git a/nova/auth/manager.py b/nova/auth/manager.py
index 06def220a..775b38af1 100644
--- a/nova/auth/manager.py
+++ b/nova/auth/manager.py
@@ -35,6 +35,7 @@ from nova import flags
from nova import log as logging
from nova import utils
from nova.auth import signer
+from nova.auth import authutils
FLAGS = flags.FLAGS
@@ -315,7 +316,8 @@ class AuthManager(object):
LOG.debug(_('expected_signature: %s'), expected_signature)
LOG.debug(_('signature: %s'), signature)
if signature != expected_signature:
- host_only = utils.get_host_only_server_string(server_string)
+ host_only = authutils.get_host_only_server_string(
+ server_string)
# If the given server_string contains port num, try without it.
if host_only != '':
host_only_signature = signer.Signer(