[pacman-dev] [PATCH v2 2/2] makepkg: refactor checking for write permissions into a utility function
Allan McRae
allan at archlinux.org
Thu Dec 7 05:31:28 UTC 2017
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 <eschwartz at archlinux.org>
> ---
>
> 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
More information about the pacman-dev
mailing list