azureblob: fix permission error on SAS URL limited to container

Before this change, for some operations, eg rcat or copyto (of a file)
rclone would attempt to create the container when using a SAS URL
limited to a container.

After this change we assume the container does not need creating when
using a container SAS URL.

See: https://forum.rclone.org/t/rclone-rcat-azure-blob-container-sas-token-403-error/16286
This commit is contained in:
Nick Craig-Wood 2020-05-13 09:11:51 +01:00
parent e91b509578
commit d342f9f942

View file

@ -866,6 +866,10 @@ func (f *Fs) Mkdir(ctx context.Context, dir string) error {
// makeContainer creates the container if it doesn't exist // makeContainer creates the container if it doesn't exist
func (f *Fs) makeContainer(ctx context.Context, container string) error { func (f *Fs) makeContainer(ctx context.Context, container string) error {
return f.cache.Create(container, func() error { return f.cache.Create(container, func() error {
// If this is a SAS URL limited to a container then assume it is already created
if f.isLimited {
return nil
}
// now try to create the container // now try to create the container
return f.pacer.Call(func() (bool, error) { return f.pacer.Call(func() (bool, error) {
_, err := f.cntURL(container).Create(ctx, azblob.Metadata{}, azblob.PublicAccessNone) _, err := f.cntURL(container).Create(ctx, azblob.Metadata{}, azblob.PublicAccessNone)