summaryrefslogtreecommitdiffstats
path: root/nova/compute
diff options
context:
space:
mode:
Diffstat (limited to 'nova/compute')
-rw-r--r--nova/compute/api.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/nova/compute/api.py b/nova/compute/api.py
index cd3ffdf56..971540de1 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -21,6 +21,7 @@
"""Handles all requests relating to compute resources (e.g. guest VMs,
networking and storage of VMs, and compute hosts on which they run)."""
+import base64
import functools
import re
import string
@@ -58,6 +59,7 @@ LOG = logging.getLogger(__name__)
FLAGS = flags.FLAGS
flags.DECLARE('consoleauth_topic', 'nova.consoleauth')
+MAX_USERDATA_SIZE = 65535
QUOTAS = quota.QUOTAS
@@ -473,6 +475,19 @@ class API(base.Base):
'architecture': architecture,
'progress': 0}
+ if user_data:
+ l = len(user_data)
+ if l > MAX_USERDATA_SIZE:
+ # NOTE(mikal): user_data is stored in a text column, and the
+ # database might silently truncate if its over length.
+ raise exception.InstanceUserDataTooLarge(
+ length=l, maxsize=MAX_USERDATA_SIZE)
+
+ try:
+ base64.decodestring(user_data)
+ except base64.binascii.Error:
+ raise exception.InstanceUserDataMalformed()
+
options_from_image = self._inherit_properties_from_image(
image, auto_disk_config)