From 8d354b3bb20c8439a2d92bcd51b31a6006db072f Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Mon, 4 Mar 2024 11:58:23 +0100 Subject: [PATCH 1/3] VR: fix issue if userdata is binary data --- systemvm/debian/opt/cloud/bin/configure.py | 27 ++++++++++--------- systemvm/debian/opt/cloud/bin/vmdata.py | 31 +++++++++++++--------- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/systemvm/debian/opt/cloud/bin/configure.py b/systemvm/debian/opt/cloud/bin/configure.py index 9dcef7eeaa26..5215c2c6315f 100755 --- a/systemvm/debian/opt/cloud/bin/configure.py +++ b/systemvm/debian/opt/cloud/bin/configure.py @@ -630,31 +630,32 @@ def __deletefile(self, ip, folder, file): if os.path.exists(datafile): os.remove(datafile) + def __writefile(self, dest, data, mode): + fh = open(dest, mode) + self.__exflock(fh) + fh.write(data) + self.__unflock(fh) + fh.close() + os.chmod(dest, 0o644) + def __createfile(self, ip, folder, file, data): dest = "/var/www/html/" + folder + "/" + ip + "/" + file metamanifestdir = "/var/www/html/" + folder + "/" + ip metamanifest = metamanifestdir + "/meta-data" - # base64 decode userdata - if folder == "userdata" or folder == "user-data": - if data is not None: + if data is not None: + # base64 decode userdata + if folder == "userdata" or folder == "user-data": # need to pad data if it is not valid base 64 if len(data) % 4 != 0: data += (4 - (len(data) % 4)) * "=" data = base64.b64decode(data) - - fh = open(dest, "w") - self.__exflock(fh) - if data is not None: if isinstance(data, str): - fh.write(data) + self.__writefile(dest, data, "w") elif isinstance(data, bytes): - fh.write(data.decode()) + self.__writefile(dest, data, "wb") else: - fh.write("") - self.__unflock(fh) - fh.close() - os.chmod(dest, 0o644) + self.__writefile(dest, "", "w") if folder == "metadata" or folder == "meta-data": try: diff --git a/systemvm/debian/opt/cloud/bin/vmdata.py b/systemvm/debian/opt/cloud/bin/vmdata.py index 8a1636ca1b70..3adfa99b3093 100755 --- a/systemvm/debian/opt/cloud/bin/vmdata.py +++ b/systemvm/debian/opt/cloud/bin/vmdata.py @@ -81,28 +81,33 @@ def deletefile(ip, folder, file): os.remove(datafile) +def writefile(dest, data, mode): + fh = open(dest, mode) + exflock(fh) + fh.write(data) + unflock(fh) + fh.close() + os.chmod(dest, 0o644) + + def createfile(ip, folder, file, data): dest = "/var/www/html/" + folder + "/" + ip + "/" + file metamanifestdir = "/var/www/html/" + folder + "/" + ip metamanifest = metamanifestdir + "/meta-data" - # base64 decode userdata - if folder == "userdata" or folder == "user-data": - if data is not None: - data = base64.b64decode(data) - - fh = open(dest, "w") - exflock(fh) if data is not None: + # base64 decode userdata + if folder == "userdata" or folder == "user-data": + # need to pad data if it is not valid base 64 + if len(data) % 4 != 0: + data += (4 - (len(data) % 4)) * "=" + data = base64.b64decode(data) if isinstance(data, str): - fh.write(data) + writefile(dest, data, "w") elif isinstance(data, bytes): - fh.write(data.decode()) + writefile(dest, data, "wb") else: - fh.write("") - unflock(fh) - fh.close() - os.chmod(dest, 0o644) + writefile(dest, "", "w") if folder == "metadata" or folder == "meta-data": try: From 5c62bf9c4c2dced2451de59f3c1b4e5a5cbf8521 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Mon, 4 Mar 2024 12:00:37 +0100 Subject: [PATCH 2/3] VR: small changes with passwd_server_ip.py --- systemvm/debian/opt/cloud/bin/passwd_server_ip.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/systemvm/debian/opt/cloud/bin/passwd_server_ip.py b/systemvm/debian/opt/cloud/bin/passwd_server_ip.py index 4d296176aa39..7df4ec27763d 100755 --- a/systemvm/debian/opt/cloud/bin/passwd_server_ip.py +++ b/systemvm/debian/opt/cloud/bin/passwd_server_ip.py @@ -33,8 +33,8 @@ import threading import urllib.parse -from http.server import BaseHTTPRequestHandler, HTTPServer -from socketserver import ThreadingMixIn #, ForkingMixIn +from http.server import BaseHTTPRequestHandler, HTTPServer +from socketserver import ThreadingMixIn passMap = {} From ce2517b19eb1259df4fe2b772084092368d206df Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Mon, 11 Mar 2024 11:57:14 +0100 Subject: [PATCH 3/3] Update 8739: minor fix --- systemvm/debian/opt/cloud/bin/setup/patch.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/systemvm/debian/opt/cloud/bin/setup/patch.sh b/systemvm/debian/opt/cloud/bin/setup/patch.sh index fc0f7d35e6fa..01cc03cf5c71 100755 --- a/systemvm/debian/opt/cloud/bin/setup/patch.sh +++ b/systemvm/debian/opt/cloud/bin/setup/patch.sh @@ -87,14 +87,16 @@ install_package() { if [ "$os" == "" ]; then return fi + + local package=${package_properties["package_name"]} + local file=${package_properties["file_name"]} + local DEBIAN_RELEASE=$(lsb_release -rs) if [ "$os" != "$DEBIAN_RELEASE" ]; then log_it "Skipped the installation of package $package on Debian $DEBIAN_RELEASE as it can only be installed on Debian $os." return fi - local package=${package_properties["package_name"]} - local file=${package_properties["file_name"]} if [ -z "$package" ] || [ -z "$file" ]; then log_it "Skipped the installation due to empty package of file name (package name: $package, file name: $file)." return