On 31/10/17 04:03, Eli Schwartz wrote: > Additionally provide a separate error for the confusing if unlikely > event that the user tries to use an existing file as a package output > directory. > > This also means we now consistently try to create any nonexistent *DEST > directories as needed before aborting with E_FS_PERMISSIONS. Previously > only $BUILDDIR received that kindness. > > Fixes FS#43537 > > Signed-off-by: Eli Schwartz <[email protected]> > --- > > mkdir -p has a really bad error when a file exists that conflicts with > the path to be created. But I'm still not sure whether to include that > code in ensure_writable_dir > > scripts/libmakepkg/util/util.sh.in | 19 +++++++++++++++++++ > scripts/makepkg.sh.in | 19 ++++++------------- > 2 files changed, 25 insertions(+), 13 deletions(-) > > diff --git a/scripts/libmakepkg/util/util.sh.in > b/scripts/libmakepkg/util/util.sh.in > index d676249d..8a6149ed 100644 > --- a/scripts/libmakepkg/util/util.sh.in > +++ b/scripts/libmakepkg/util/util.sh.in > @@ -83,3 +83,22 @@ cd_safe() { > exit 1 > fi > } > + > +# Try to create directory if one does not yet exist. Fails if the directory > +# exists but has no write permissions, or if there is an existing file with > +# the same name. > +ensure_writable_dir() { > + local parent=$1 dirname=$1 > + > + until [[ -e $parent ]]; do > + parent="${parent%/*}" > + done > + if [[ -f $parent ]]; then > + error "$(gettext "Cannot create %s due to conflicting file.")" > "$parent" > + return 1 > + fi > + if ( [[ ! -d $dirname ]] && ! mkdir -p "$dirname" ) || [[ ! -w $dirname > ]]; then > + return 1 > + fi > + return 0 > +} > diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in > index 20cc22ad..35665f16 100644 > --- a/scripts/makepkg.sh.in > +++ b/scripts/makepkg.sh.in > @@ -1360,34 +1360,27 @@ else > fi > > > -if [[ ! -d $BUILDDIR ]]; then > - if ! mkdir -p "$BUILDDIR"; then > - error "$(gettext "You do not have write permission to create > packages in %s.")" "$BUILDDIR" > - plain "$(gettext "Aborting...")" > - exit 1 > - fi > - chmod a-s "$BUILDDIR"
As discussed on IRC, this chmod is important. If the build dir gets created with a sticky bit, that propagates through the package. A
