mirror of
https://github.com/libssh2/libssh2.git
synced 2025-05-03 00:24:44 +03:00
Allow default permissions to be used in sftp_mkdir (#271)
Added constant LIBSSH2_SFTP_DEFAULT_MODE to use the server default permissions when making a new directory
This commit is contained in:
parent
b5b6673c28
commit
cf13c9925c
@ -79,6 +79,9 @@ typedef struct _LIBSSH2_SFTP_STATVFS LIBSSH2_SFTP_STATVFS;
|
|||||||
#define LIBSSH2_SFTP_READLINK 1
|
#define LIBSSH2_SFTP_READLINK 1
|
||||||
#define LIBSSH2_SFTP_REALPATH 2
|
#define LIBSSH2_SFTP_REALPATH 2
|
||||||
|
|
||||||
|
/* Flags for sftp_mkdir() */
|
||||||
|
#define LIBSSH2_SFTP_DEFAULT_MODE -1
|
||||||
|
|
||||||
/* SFTP attribute flag bits */
|
/* SFTP attribute flag bits */
|
||||||
#define LIBSSH2_SFTP_ATTR_SIZE 0x00000001
|
#define LIBSSH2_SFTP_ATTR_SIZE 0x00000001
|
||||||
#define LIBSSH2_SFTP_ATTR_UIDGID 0x00000002
|
#define LIBSSH2_SFTP_ATTR_UIDGID 0x00000002
|
||||||
|
15
src/sftp.c
15
src/sftp.c
@ -3009,16 +3009,23 @@ static int sftp_mkdir(LIBSSH2_SFTP *sftp, const char *path,
|
|||||||
LIBSSH2_CHANNEL *channel = sftp->channel;
|
LIBSSH2_CHANNEL *channel = sftp->channel;
|
||||||
LIBSSH2_SESSION *session = channel->session;
|
LIBSSH2_SESSION *session = channel->session;
|
||||||
LIBSSH2_SFTP_ATTRIBUTES attrs = {
|
LIBSSH2_SFTP_ATTRIBUTES attrs = {
|
||||||
LIBSSH2_SFTP_ATTR_PERMISSIONS, 0, 0, 0, 0, 0, 0
|
0, 0, 0, 0, 0, 0, 0
|
||||||
};
|
};
|
||||||
size_t data_len;
|
size_t data_len;
|
||||||
int retcode;
|
int retcode;
|
||||||
/* 13 = packet_len(4) + packet_type(1) + request_id(4) + path_len(4) */
|
ssize_t packet_len;
|
||||||
ssize_t packet_len = path_len + 13 +
|
|
||||||
sftp_attrsize(LIBSSH2_SFTP_ATTR_PERMISSIONS);
|
|
||||||
unsigned char *packet, *s, *data;
|
unsigned char *packet, *s, *data;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
if(mode != LIBSSH2_SFTP_DEFAULT_MODE) {
|
||||||
|
/* Filetype in SFTP 3 and earlier */
|
||||||
|
attrs.flags = LIBSSH2_SFTP_ATTR_PERMISSIONS;
|
||||||
|
attrs.permissions = mode | LIBSSH2_SFTP_ATTR_PFILETYPE_DIR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 13 = packet_len(4) + packet_type(1) + request_id(4) + path_len(4) */
|
||||||
|
packet_len = path_len + 13 + sftp_attrsize(attrs.flags);
|
||||||
|
|
||||||
if(sftp->mkdir_state == libssh2_NB_state_idle) {
|
if(sftp->mkdir_state == libssh2_NB_state_idle) {
|
||||||
_libssh2_debug(session, LIBSSH2_TRACE_SFTP,
|
_libssh2_debug(session, LIBSSH2_TRACE_SFTP,
|
||||||
"Creating directory %s with mode 0%lo", path, mode);
|
"Creating directory %s with mode 0%lo", path, mode);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user