Skip to contentSkip to conversation

sanity.bbclass: check for validity of TMPDIR

PATCH Superseded [email protected] 1 participant 4 messages Nov 15, 2013 – Dec 11, 2013

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

v2 cover sanity.bbclass: check for validity of TMPDIR

From: Chen Qi <[email protected]>

Changes since V1:
1. Create the directory hierarchy for TMPDIR only if TMPDIR is valid
2. Handle ABI version change only if TMPDIR has been created.
3. If we had a valid TMPDIR for last build and this time the TMPDIR hasn't changed location, we don't check the validity for TMPDIR.

The following changes since commit ea92671d9823e3667d6ced7ac2af20f991da404d:

bitbake: cooker: replace "w" file opening mode with "a" mode (2013-11-12 17:01:37 +0000)

are available in the git repository at:

git://git.pokylinux.org/poky-contrib ChenQi/TMPDIR
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=ChenQi/TMPDIR

Chen Qi (1):
sanity.bbclass: check for validity of TMPDIR

 meta/classes/sanity.bbclass |   27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH v2 1/1 sanity.bbclass: check for validity of TMPDIR

From: Chen Qi <[email protected]>

TMPDIR must be an absolute path, otherwise, the build will fail. Special characters in TMPDIR will also cause build failures.

This patch enables checking for the validity of TMPDIR.

The logic in sanity.bbclass has also been changed a little bit. For now, we only create the directory hierarch for TMPDIR if TMPDIR is valid. And also, we only handle ABI version change only if the TMPDIR directory hierarchy has been created.

---
 meta/classes/sanity.bbclass |   27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)
meta/classes/sanity.bbclass +23 -4
index 83378b0..f6292f4 100644
@@ -659,6 +659,16 @@ def check_sanity_everybuild(status, d):
     if oeroot.find(' ') != -1:
         status.addresult("Error, you have a space in your COREBASE directory path. Please move the installation to a directory which doesn't include a space since autotools doesn't support this.")
 
+    # Function to check if TMPDIR contains invalid characters, and check if it is an absolute path
+    def is_tmpdir_valid(path):
+        import re
+        valid_tmpdir_regexp = "^/[a-zA-Z0-9\-_/.~]+$"
+        valid_pattern = re.compile(valid_tmpdir_regexp)
+        if valid_pattern.match(path):
+            return True
+        else:
+            return False
+
     # Check that TMPDIR hasn't changed location since the last time we were run
     tmpdir = d.getVar('TMPDIR', True)
     checkfile = os.path.join(tmpdir, "saved_tmpdir")
@@ -667,10 +677,16 @@ def check_sanity_everybuild(status, d):
             saved_tmpdir = f.read().strip()
             if (saved_tmpdir != tmpdir):
                 status.addresult("Error, TMPDIR has changed location. You need to either move it back to %s or rebuild\n" % saved_tmpdir)
+            if not is_tmpdir_valid(tmpdir):
+                status.addresult("Error, you have special characters in TMPDIR directory path or your TMPDIR is not an absolute path. The TMPDIR should match this regexp: ^/[a-zA-Z0-9\-_/.~]$")
     else:
-        bb.utils.mkdirhier(tmpdir)
-        with open(checkfile, "w") as f:
-            f.write(tmpdir)
+        if not is_tmpdir_valid(tmpdir):
+            status.addresult("Error, you have special characters in TMPDIR directory path or your TMPDIR is not an absolute path. The TMPDIR should match this regexp: ^/[a-zA-Z0-9\-_/.~]$")
+        else:
+            # Make directory hierarchy for TMPDIR only if TMPDIR is valid
+            bb.utils.mkdirhier(tmpdir)
+            with open(checkfile, "w") as f:
+                f.write(tmpdir)
 
 def check_sanity(sanity_data):
     import subprocess
@@ -722,7 +738,10 @@ def check_sanity(sanity_data):
             f.write("TMPDIR %s\n" % tmpdir) 
             f.write("SSTATE_DIR %s\n" % sstate_dir) 
 
-    sanity_handle_abichanges(status, sanity_data)
+    # Handle ABI version change only if TMPDIR hierarchy has been created
+    saved_tmpdir = os.path.join(tmpdir, "saved_tmpdir")
+    if os.path.exists(saved_tmpdir):
+        sanity_handle_abichanges(status, sanity_data)
 
     if status.messages != "":
         raise_sanity_error(sanity_data.expand(status.messages), sanity_data, status.network_error)
Signature · 1 line
1.7.9.5
author
#3 lore raw
In reply to [email protected]

ping

Quoted 23 lines · On 11/15/2013 10:46 AM, [email protected] wrote:

From: Chen Qi <[email protected]>

Changes since V1:
1. Create the directory hierarchy for TMPDIR only if TMPDIR is valid
2. Handle ABI version change only if TMPDIR has been created.
3. If we had a valid TMPDIR for last build and this time the TMPDIR hasn't changed location, we don't check the validity for TMPDIR.

The following changes since commit ea92671d9823e3667d6ced7ac2af20f991da404d:

bitbake: cooker: replace "w" file opening mode with "a" mode (2013-11-12 17:01:37 +0000)

are available in the git repository at:

git://git.pokylinux.org/poky-contrib ChenQi/TMPDIR
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=ChenQi/TMPDIR

Chen Qi (1):
sanity.bbclass: check for validity of TMPDIR

  meta/classes/sanity.bbclass |   27 +++++++++++++++++++++++----
  1 file changed, 23 insertions(+), 4 deletions(-)
author
#2 lore raw
In reply to [email protected]

Hi Richard,

What do you think of this one?

Best Regards,
Chen Qi

Quoted 70 lines · On 11/15/2013 10:46 AM, [email protected] wrote:

From: Chen Qi <[email protected]>

TMPDIR must be an absolute path, otherwise, the build will fail. Special characters in TMPDIR will also cause build failures.

This patch enables checking for the validity of TMPDIR.

The logic in sanity.bbclass has also been changed a little bit. For now, we only create the directory hierarch for TMPDIR if TMPDIR is valid. And also, we only handle ABI version change only if the TMPDIR directory hierarchy has been created.

---
  meta/classes/sanity.bbclass |   27 +++++++++++++++++++++++----
  1 file changed, 23 insertions(+), 4 deletions(-)
meta/classes/sanity.bbclass +23 -4
index 83378b0..f6292f4 100644
@@ -659,6 +659,16 @@ def check_sanity_everybuild(status, d):
      if oeroot.find(' ') != -1:
          status.addresult("Error, you have a space in your COREBASE directory path. Please move the installation to a directory which doesn't include a space since autotools doesn't support this.")
 
+    # Function to check if TMPDIR contains invalid characters, and check if it is an absolute path
+    def is_tmpdir_valid(path):
+        import re
+        valid_tmpdir_regexp = "^/[a-zA-Z0-9\-_/.~]+$"
+        valid_pattern = re.compile(valid_tmpdir_regexp)
+        if valid_pattern.match(path):
+            return True
+        else:
+            return False
+
      # Check that TMPDIR hasn't changed location since the last time we were run
      tmpdir = d.getVar('TMPDIR', True)
      checkfile = os.path.join(tmpdir, "saved_tmpdir")
@@ -667,10 +677,16 @@ def check_sanity_everybuild(status, d):
              saved_tmpdir = f.read().strip()
              if (saved_tmpdir != tmpdir):
                  status.addresult("Error, TMPDIR has changed location. You need to either move it back to %s or rebuild\n" % saved_tmpdir)
+            if not is_tmpdir_valid(tmpdir):
+                status.addresult("Error, you have special characters in TMPDIR directory path or your TMPDIR is not an absolute path. The TMPDIR should match this regexp: ^/[a-zA-Z0-9\-_/.~]$")
      else:
-        bb.utils.mkdirhier(tmpdir)
-        with open(checkfile, "w") as f:
-            f.write(tmpdir)
+        if not is_tmpdir_valid(tmpdir):
+            status.addresult("Error, you have special characters in TMPDIR directory path or your TMPDIR is not an absolute path. The TMPDIR should match this regexp: ^/[a-zA-Z0-9\-_/.~]$")
+        else:
+            # Make directory hierarchy for TMPDIR only if TMPDIR is valid
+            bb.utils.mkdirhier(tmpdir)
+            with open(checkfile, "w") as f:
+                f.write(tmpdir)
 
  def check_sanity(sanity_data):
      import subprocess
@@ -722,7 +738,10 @@ def check_sanity(sanity_data):
              f.write("TMPDIR %s\n" % tmpdir)
              f.write("SSTATE_DIR %s\n" % sstate_dir)
 
-    sanity_handle_abichanges(status, sanity_data)
+    # Handle ABI version change only if TMPDIR hierarchy has been created
+    saved_tmpdir = os.path.join(tmpdir, "saved_tmpdir")
+    if os.path.exists(saved_tmpdir):
+        sanity_handle_abichanges(status, sanity_data)
 
      if status.messages != "":
          raise_sanity_error(sanity_data.expand(status.messages), sanity_data, status.network_error)