curl: add --create-file-mode [mode]

This option sets the (octal) mode to use for the remote file when one is
created, using the SFTP, SCP or FILE protocols. When not set, the
default is 0644.

Closes #6244
This commit is contained in:
Daniel Stenberg 2020-12-20 18:44:20 +01:00
Родитель e1a4647a42
Коммит a7696c7343
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 5CC908FDB71E12C2
10 изменённых файлов: 49 добавлений и 4 удалений

Просмотреть файл

@ -40,6 +40,7 @@ DPAGES = \
cookie-jar.d \
cookie.d \
create-dirs.d \
create-file-mode.d \
crlf.d crlfile.d \
curves.d \
data-ascii.d \

Просмотреть файл

@ -0,0 +1,12 @@
Long: create-file-mode
Help: File mode for created files
Protocols: SFTP SCP FILE
Category: sftp scp file upload
See-also: ftp-create-dirs
Added: 7.75.0
---
When curl is used to create files remotely using one of the supported
protocols, this option allows the user to set which 'mode' to set on the file
at creation time, instead of the default 0644.
This options takes an octal number as argument.

Просмотреть файл

@ -30,6 +30,7 @@
--cookie (-b) 4.9
--cookie-jar (-c) 7.9
--create-dirs 7.10.3
--create-file-mode 7.75.0
--crlf 5.7
--crlfile 7.19.7
--curves 7.73.0

Просмотреть файл

@ -193,6 +193,7 @@ struct OperationConfig {
long ssl_version_max;
long proxy_ssl_version;
long ip_version;
long create_file_mode; /* CURLOPT_NEW_FILE_PERMS */
curl_TimeCond timecond;
curl_off_t condtime;
struct curl_slist *headers;

Просмотреть файл

@ -108,6 +108,7 @@ static const struct LongShort aliases[]= {
#endif
{"*q", "ftp-create-dirs", ARG_BOOL},
{"*r", "create-dirs", ARG_BOOL},
{"*R", "create-file-mode", ARG_STRING},
{"*s", "max-redirs", ARG_STRING},
{"*t", "proxy-ntlm", ARG_BOOL},
{"*u", "crlf", ARG_BOOL},
@ -774,6 +775,12 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
config->create_dirs = toggle;
break;
case 'R': /* --create-file-mode */
err = oct2nummax(&config->create_file_mode, nextarg, 0777);
if(err)
return err;
break;
case 's': /* --max-redirs */
/* specified max no of redirects (http(s)), this accepts -1 as a
special condition */

Просмотреть файл

@ -181,6 +181,9 @@ static const struct helptxt helptext[] = {
{" --create-dirs",
"Create necessary local directory hierarchy",
CURLHELP_CURL},
{" --create-file-mode",
"File mode for created files",
CURLHELP_SFTP | CURLHELP_SCP | CURLHELP_FILE},
{" --crlf",
"Convert LF to CRLF in upload",
CURLHELP_FTP | CURLHELP_SMTP},

Просмотреть файл

@ -129,14 +129,13 @@ void cleanarg(char *str)
* getparameter a lot, we must check it for NULL before accessing the str
* data.
*/
ParameterError str2num(long *val, const char *str)
static ParameterError getnum(long *val, const char *str, int base)
{
if(str) {
char *endptr = NULL;
long num;
errno = 0;
num = strtol(str, &endptr, 10);
num = strtol(str, &endptr, base);
if(errno == ERANGE)
return PARAM_NUMBER_TOO_LARGE;
if((endptr != str) && (endptr == str + strlen(str))) {
@ -147,6 +146,24 @@ ParameterError str2num(long *val, const char *str)
return PARAM_BAD_NUMERIC; /* badness */
}
ParameterError str2num(long *val, const char *str)
{
return getnum(val, str, 10);
}
ParameterError oct2nummax(long *val, const char *str, long max)
{
ParameterError result = getnum(val, str, 8);
if(result != PARAM_OK)
return result;
else if(*val > max)
return PARAM_NUMBER_TOO_LARGE;
else if(*val < 0)
return PARAM_NEGATIVE_NUMERIC;
return PARAM_OK;
}
/*
* Parse the string and write the long in the given address. Return PARAM_OK
* on success, otherwise a parameter error enum. ONLY ACCEPTS POSITIVE NUMBERS!
@ -158,7 +175,7 @@ ParameterError str2num(long *val, const char *str)
ParameterError str2unum(long *val, const char *str)
{
ParameterError result = str2num(val, str);
ParameterError result = getnum(val, str, 10);
if(result != PARAM_OK)
return result;
if(*val < 0)

Просмотреть файл

@ -33,6 +33,7 @@ void cleanarg(char *str);
ParameterError str2num(long *val, const char *str);
ParameterError str2unum(long *val, const char *str);
ParameterError oct2nummax(long *val, const char *str, long max);
ParameterError str2unummax(long *val, const char *str, long max);
ParameterError str2udouble(double *val, const char *str, long max);

Просмотреть файл

@ -37,6 +37,7 @@ curl file category --help
<stdout mode="text">
Usage: curl [options...] <url>
file: FILE protocol options
--create-file-mode File mode for created files
-I, --head Show document info only
-r, --range <range> Retrieve only the bytes within RANGE
</stdout>

Просмотреть файл

@ -37,6 +37,7 @@ curl file category --help with lower/upper mix
<stdout mode="text">
Usage: curl [options...] <url>
file: FILE protocol options
--create-file-mode File mode for created files
-I, --head Show document info only
-r, --range <range> Retrieve only the bytes within RANGE
</stdout>