1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

cliquota: support setting file system quota via SMB2

Signed-off-by: Uri Simchoni <uri@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Uri Simchoni 2016-09-22 01:03:41 +03:00 committed by Jeremy Allison
parent d82f0e99b0
commit f596bbff30
3 changed files with 51 additions and 0 deletions

View File

@ -2608,6 +2608,50 @@ cleanup:
return status;
}
NTSTATUS cli_smb2_set_fs_quota_info(struct cli_state *cli,
int quota_fnum,
SMB_NTQUOTA_STRUCT *pqt)
{
NTSTATUS status;
DATA_BLOB inbuf = data_blob_null;
struct smb2_hnd *ph = NULL;
TALLOC_CTX *frame = talloc_stackframe();
if (smbXcli_conn_has_async_calls(cli->conn)) {
/*
* Can't use sync call while an async call is in flight
*/
status = NT_STATUS_INVALID_PARAMETER;
goto cleanup;
}
if (smbXcli_conn_protocol(cli->conn) < PROTOCOL_SMB2_02) {
status = NT_STATUS_INVALID_PARAMETER;
goto cleanup;
}
status = map_fnum_to_smb2_handle(cli, quota_fnum, &ph);
if (!NT_STATUS_IS_OK(status)) {
goto cleanup;
}
status = build_fs_quota_buffer(talloc_tos(), pqt, &inbuf, 0);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
status = smb2cli_set_info(
cli->conn, cli->timeout, cli->smb2.session, cli->smb2.tcon,
2, /* in_info_type */
SMB_FS_QUOTA_INFORMATION - 1000, /* in_file_info_class */
&inbuf, /* in_input_buffer */
0, /* in_additional_info */
ph->fid_persistent, ph->fid_volatile);
cleanup:
TALLOC_FREE(frame);
return status;
}
struct cli_smb2_read_state {
struct tevent_context *ev;
struct cli_state *cli;

View File

@ -163,6 +163,9 @@ NTSTATUS cli_smb2_get_fs_quota_info(struct cli_state *cli,
NTSTATUS cli_smb2_set_user_quota(struct cli_state *cli,
int quota_fnum,
SMB_NTQUOTA_LIST *qtl);
NTSTATUS cli_smb2_set_fs_quota_info(struct cli_state *cli,
int quota_fnum,
SMB_NTQUOTA_STRUCT *pqt);
struct tevent_req *cli_smb2_read_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct cli_state *cli,

View File

@ -619,6 +619,10 @@ NTSTATUS cli_set_fs_quota_info(struct cli_state *cli, int quota_fnum,
smb_panic("cli_set_fs_quota_info() called with NULL Pointer!");
}
if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
return cli_smb2_set_fs_quota_info(cli, quota_fnum, pqt);
}
status = build_fs_quota_buffer(talloc_tos(), pqt, &data, 0);
if (!NT_STATUS_IS_OK(status)) {
return status;