• Steve Beattie's avatar
    Merge from trunk revision 1805: · 3186b090
    Steve Beattie authored
      Attached is a patch to make the initscript not fail if /tmp is full
      by converting the comm(1) usage on temporary files to an embedded
      awk script. On both Ubuntu and OpenSUSE, a version of awk (mawk in
      Ubuntu, gawk in OpenSUSE) is either a direct or indirect dependency
      on the minimal or base package set, and the original reporter also
      mentioned that an awk-based solution would be palatable in a way
      that converting to bash, or using perl or python here would not be.
    
      In the embedded awk script, I've tried to avoid gawk or mawk
      specific behaviors or extensions; e.g. this is the reason for the
      call to sort on the output of the awk script, rather than using
      gawk's asort(). But please let me know if you see anything that
      shouldn't be portable across awk implementations.
    
      An additional issue that is fixed in both scripts is handling
      child profiles (e.g. hats) during reload. If child profiles are
      filtered out (via grep -v '//') of the list to consider, then
      on reloading a profile where a child profile has been removed or
      renamed, that child profile will continue to stick around. However,
      if the profile containing child profiles is removed entirely,
      if the initscript attempts to unload the child profiles after the
      parent is removed, this will fail because they were unloaded when
      the parent was unloaded.  Thus I removed any filtering of child
      profiles out, but do a post-awk reverse sort which guarantees that
      any child profiles will be removed before their parent is. I also
      added the LC_COLLATE=C (based on the Ubuntu version) to the sort
      call to ensure a consistent sort order.
    
      To restate, the problem with the existing code is that it creates
      temporary files in $TMPDIR (by default /tmp) and if that partition
      is full, problems with the reload action ensue. Alternate solutions
      include switching the initscript to use bash and its <$() extension
      or setting TMPDIR to /dev/shm/. The former is unpalatable to some
      (particularly for an initscript), and for the latter, /dev/shm is
      only guaranteed to exist on GNU libc based systems (glibc apparently
      expects /dev/shm to exist for its POSIX shared memory implementation;
      see shm_overview(7)).  So to me, awk (sans GNU extensions) looks
      to be the least bad option here.
    Nominated-By: 's avatarSteve Beattie <sbeattie@ubuntu.com>
    Acked-By: 's avatarJohn Johansen <john.johansen@canonical.com>
    
    Bug: https://launchpad.net/bugs/775785
    3186b090
Name
Last commit
Last update
changehat Loading commit data...
common Loading commit data...
deprecated/management Loading commit data...
kernel-patches Loading commit data...
libraries/libapparmor Loading commit data...
parser Loading commit data...
profiles Loading commit data...
tests Loading commit data...
utils Loading commit data...
.bzrignore Loading commit data...
LICENSE Loading commit data...
Makefile Loading commit data...
README Loading commit data...