void *parms;
};
-#define SETUP_PID private->tree->session->pid = req->smbpid
+NTSTATUS ntvfs_cifs_init(void);
+
+#define CHECK_UPSTREAM_OPEN do { \
+ if (! p->transport->socket->sock) { \
+ req->async_states->state|=NTVFS_ASYNC_STATE_CLOSE; \
+ return NT_STATUS_CONNECTION_DISCONNECTED; \
+ } \
+} while(0)
+
+#define SETUP_PID do { \
+ p->tree->session->pid = req->smbpid; \
+ CHECK_UPSTREAM_OPEN; \
+} while(0)
#define SETUP_FILE_HERE(f) do { \
f = ntvfs_handle_get_backend_data(io->generic.in.file.ntvfs, ntvfs); \
#define CIFS_DOMAIN "cifs:domain"
#define CIFS_SHARE "cifs:share"
#define CIFS_USE_MACHINE_ACCT "cifs:use-machine-account"
+#define CIFS_USE_S4U2PROXY "cifs:use-s4u2proxy"
#define CIFS_MAP_GENERIC "cifs:map-generic"
#define CIFS_MAP_TRANS2 "cifs:map-trans2"
#define CIFS_USE_MACHINE_ACCT_DEFAULT false
+#define CIFS_USE_S4U2PROXY_DEFAULT false
#define CIFS_MAP_GENERIC_DEFAULT false
#define CIFS_MAP_TRANS2_DEFAULT true
*/
static bool oplock_handler(struct smbcli_transport *transport, uint16_t tid, uint16_t fnum, uint8_t level, void *p_private)
{
- struct cvfs_private *private = p_private;
+ struct cvfs_private *p = p_private;
NTSTATUS status;
struct ntvfs_handle *h = NULL;
struct cvfs_file *f;
- for (f=private->files; f; f=f->next) {
+ for (f=p->files; f; f=f->next) {
if (f->fnum != fnum) continue;
h = f->h;
break;
}
DEBUG(5,("vfs_cifs: sending oplock break level %d for fnum %d\n", level, fnum));
- status = ntvfs_send_oplock_break(private->ntvfs, h, level);
+ status = ntvfs_send_oplock_break(p->ntvfs, h, level);
if (!NT_STATUS_IS_OK(status)) return false;
return true;
}
connect to a share - used when a tree_connect operation comes in.
*/
static NTSTATUS cvfs_connect(struct ntvfs_module_context *ntvfs,
- struct ntvfs_request *req, const char *sharename)
+ struct ntvfs_request *req,
+ union smb_tcon *tcon)
{
NTSTATUS status;
- struct cvfs_private *private;
+ struct cvfs_private *p;
const char *host, *user, *pass, *domain, *remote_share;
struct smb_composite_connect io;
struct composite_context *creq;
struct cli_credentials *credentials;
bool machine_account;
+ bool s4u2proxy;
+ const char* sharename;
+
+ switch (tcon->generic.level) {
+ case RAW_TCON_TCON:
+ sharename = tcon->tcon.in.service;
+ break;
+ case RAW_TCON_TCONX:
+ sharename = tcon->tconx.in.path;
+ break;
+ case RAW_TCON_SMB2:
+ sharename = tcon->smb2.in.path;
+ break;
+ default:
+ return NT_STATUS_INVALID_LEVEL;
+ }
+
+ if (strncmp(sharename, "\\\\", 2) == 0) {
+ char *str = strchr(sharename+2, '\\');
+ if (str) {
+ sharename = str + 1;
+ }
+ }
/* Here we need to determine which server to connect to.
* For now we use parametric options, type cifs.
}
machine_account = share_bool_option(scfg, CIFS_USE_MACHINE_ACCT, CIFS_USE_MACHINE_ACCT_DEFAULT);
+ s4u2proxy = share_bool_option(scfg, CIFS_USE_S4U2PROXY, CIFS_USE_S4U2PROXY_DEFAULT);
- private = talloc_zero(ntvfs, struct cvfs_private);
- if (!private) {
+ p = talloc_zero(ntvfs, struct cvfs_private);
+ if (!p) {
return NT_STATUS_NO_MEMORY;
}
- ntvfs->private_data = private;
+ ntvfs->private_data = p;
if (!host) {
DEBUG(1,("CIFS backend: You must supply server\n"));
if (user && pass) {
DEBUG(5, ("CIFS backend: Using specified password\n"));
- credentials = cli_credentials_init(private);
+ credentials = cli_credentials_init(p);
if (!credentials) {
return NT_STATUS_NO_MEMORY;
}
cli_credentials_set_password(credentials, pass, CRED_SPECIFIED);
} else if (machine_account) {
DEBUG(5, ("CIFS backend: Using machine account\n"));
- credentials = cli_credentials_init(private);
+ credentials = cli_credentials_init(p);
cli_credentials_set_conf(credentials, ntvfs->ctx->lp_ctx);
if (domain) {
cli_credentials_set_domain(credentials, domain, CRED_SPECIFIED);
} else if (req->session_info->credentials) {
DEBUG(5, ("CIFS backend: Using delegated credentials\n"));
credentials = req->session_info->credentials;
+ } else if (s4u2proxy) {
+ struct ccache_container *ccc = NULL;
+ const char *err_str = NULL;
+ int ret;
+ char *impersonate_principal;
+ char *self_service;
+ char *target_service;
+
+ impersonate_principal = talloc_asprintf(req, "%s@%s",
+ req->session_info->info->account_name,
+ req->session_info->info->domain_name);
+
+ self_service = talloc_asprintf(req, "cifs/%s",
+ lpcfg_netbios_name(ntvfs->ctx->lp_ctx));
+
+ target_service = talloc_asprintf(req, "cifs/%s", host);
+
+ DEBUG(5, ("CIFS backend: Using S4U2Proxy credentials\n"));
+
+ credentials = cli_credentials_init(p);
+ cli_credentials_set_conf(credentials, ntvfs->ctx->lp_ctx);
+ if (domain) {
+ cli_credentials_set_domain(credentials, domain, CRED_SPECIFIED);
+ }
+ status = cli_credentials_set_machine_account(credentials, ntvfs->ctx->lp_ctx);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+ cli_credentials_invalidate_ccache(credentials, CRED_SPECIFIED);
+ cli_credentials_set_impersonate_principal(credentials,
+ impersonate_principal,
+ self_service);
+ cli_credentials_set_target_service(credentials, target_service);
+ ret = cli_credentials_get_ccache(credentials,
+ ntvfs->ctx->event_ctx,
+ ntvfs->ctx->lp_ctx,
+ &ccc,
+ &err_str);
+ if (ret != 0) {
+ status = NT_STATUS_CROSSREALM_DELEGATION_FAILURE;
+ DEBUG(1,("S4U2Proxy: cli_credentials_get_ccache() gave: ret[%d] str[%s] - %s\n",
+ ret, err_str, nt_errstr(status)));
+ return status;
+ }
+
} else {
DEBUG(1,("CIFS backend: NO delegated credentials found: You must supply server, user and password or the client must supply delegated credentials\n"));
- return NT_STATUS_INVALID_PARAMETER;
+ return NT_STATUS_INTERNAL_ERROR;
}
/* connect to the server, using the smbd event context */
io.in.dest_host = host;
- io.in.dest_ports = lp_smb_ports(ntvfs->ctx->lp_ctx);
- io.in.socket_options = lp_socket_options(ntvfs->ctx->lp_ctx);
+ io.in.dest_ports = lpcfg_smb_ports(ntvfs->ctx->lp_ctx);
+ io.in.socket_options = lpcfg_socket_options(ntvfs->ctx->lp_ctx);
io.in.called_name = host;
io.in.credentials = credentials;
io.in.fallback_to_anonymous = false;
- io.in.workgroup = lp_workgroup(ntvfs->ctx->lp_ctx);
+ io.in.workgroup = lpcfg_workgroup(ntvfs->ctx->lp_ctx);
io.in.service = remote_share;
io.in.service_type = "?????";
- io.in.iconv_convenience = lp_iconv_convenience(ntvfs->ctx->lp_ctx);
- io.in.gensec_settings = lp_gensec_settings(private, ntvfs->ctx->lp_ctx);
- lp_smbcli_options(ntvfs->ctx->lp_ctx, &io.in.options);
- lp_smbcli_session_options(ntvfs->ctx->lp_ctx, &io.in.session_options);
+ io.in.gensec_settings = lpcfg_gensec_settings(p, ntvfs->ctx->lp_ctx);
+ lpcfg_smbcli_options(ntvfs->ctx->lp_ctx, &io.in.options);
+ lpcfg_smbcli_session_options(ntvfs->ctx->lp_ctx, &io.in.session_options);
if (!(ntvfs->ctx->client_caps & NTVFS_CLIENT_CAP_LEVEL_II_OPLOCKS)) {
io.in.options.use_level2_oplocks = false;
}
- creq = smb_composite_connect_send(&io, private,
- lp_resolve_context(ntvfs->ctx->lp_ctx),
+ creq = smb_composite_connect_send(&io, p,
+ lpcfg_resolve_context(ntvfs->ctx->lp_ctx),
ntvfs->ctx->event_ctx);
- status = smb_composite_connect_recv(creq, private);
+ status = smb_composite_connect_recv(creq, p);
NT_STATUS_NOT_OK_RETURN(status);
- private->tree = io.out.tree;
+ p->tree = io.out.tree;
- private->transport = private->tree->session->transport;
+ p->transport = p->tree->session->transport;
SETUP_PID;
- private->ntvfs = ntvfs;
+ p->ntvfs = ntvfs;
ntvfs->ctx->fs_type = talloc_strdup(ntvfs->ctx, "NTFS");
NT_STATUS_HAVE_NO_MEMORY(ntvfs->ctx->fs_type);
ntvfs->ctx->dev_type = talloc_strdup(ntvfs->ctx, "A:");
NT_STATUS_HAVE_NO_MEMORY(ntvfs->ctx->dev_type);
+ if (tcon->generic.level == RAW_TCON_TCONX) {
+ tcon->tconx.out.fs_type = ntvfs->ctx->fs_type;
+ tcon->tconx.out.dev_type = ntvfs->ctx->dev_type;
+ }
+
/* we need to receive oplock break requests from the server */
- smbcli_oplock_handler(private->transport, oplock_handler, private);
+ smbcli_oplock_handler(p->transport, oplock_handler, p);
- private->map_generic = share_bool_option(scfg, CIFS_MAP_GENERIC, CIFS_MAP_GENERIC_DEFAULT);
+ p->map_generic = share_bool_option(scfg, CIFS_MAP_GENERIC, CIFS_MAP_GENERIC_DEFAULT);
- private->map_trans2 = share_bool_option(scfg, CIFS_MAP_TRANS2, CIFS_MAP_TRANS2_DEFAULT);
+ p->map_trans2 = share_bool_option(scfg, CIFS_MAP_TRANS2, CIFS_MAP_TRANS2_DEFAULT);
return NT_STATUS_OK;
}
*/
static NTSTATUS cvfs_disconnect(struct ntvfs_module_context *ntvfs)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct async_info *a, *an;
/* first cleanup pending requests */
- for (a=private->pending; a; a = an) {
+ for (a=p->pending; a; a = an) {
an = a->next;
smbcli_request_destroy(a->c_req);
talloc_free(a);
}
- talloc_free(private);
+ talloc_free(p);
ntvfs->private_data = NULL;
return NT_STATUS_OK;
*/
static void async_simple(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct ntvfs_request *req = async->req;
req->async_states->status = smbcli_request_simple_recv(c_req);
talloc_free(async);
async->parms = io; \
async->req = req; \
async->f = file; \
- async->cvfs = private; \
+ async->cvfs = p; \
async->c_req = c_req; \
- DLIST_ADD(private->pending, async); \
- c_req->async.private = async; \
+ DLIST_ADD(p->pending, async); \
+ c_req->async.private_data = async; \
talloc_set_destructor(async, async_info_destructor); \
} \
c_req->async.fn = async_fn; \
static NTSTATUS cvfs_unlink(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_unlink *unl)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
/* see if the front end will allow us to perform this
function asynchronously. */
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_unlink(private->tree, unl);
+ return smb_raw_unlink(p->tree, unl);
}
- c_req = smb_raw_unlink_send(private->tree, unl);
+ c_req = smb_raw_unlink_send(p->tree, unl);
SIMPLE_ASYNC_TAIL;
}
*/
static void async_ioctl(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct ntvfs_request *req = async->req;
req->async_states->status = smb_raw_ioctl_recv(c_req, req, async->parms);
talloc_free(async);
static NTSTATUS cvfs_ioctl(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_ioctl *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID_AND_FILE;
/* see if the front end will allow us to perform this
function asynchronously. */
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_ioctl(private->tree, req, io);
+ return smb_raw_ioctl(p->tree, req, io);
}
- c_req = smb_raw_ioctl_send(private->tree, io);
+ c_req = smb_raw_ioctl_send(p->tree, io);
ASYNC_RECV_TAIL(io, async_ioctl);
}
static NTSTATUS cvfs_chkpath(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_chkpath *cp)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_chkpath(private->tree, cp);
+ return smb_raw_chkpath(p->tree, cp);
}
- c_req = smb_raw_chkpath_send(private->tree, cp);
+ c_req = smb_raw_chkpath_send(p->tree, cp);
SIMPLE_ASYNC_TAIL;
}
*/
static void async_qpathinfo(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct ntvfs_request *req = async->req;
req->async_states->status = smb_raw_pathinfo_recv(c_req, req, async->parms);
talloc_free(async);
static NTSTATUS cvfs_qpathinfo(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_fileinfo *info)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_pathinfo(private->tree, req, info);
+ return smb_raw_pathinfo(p->tree, req, info);
}
- c_req = smb_raw_pathinfo_send(private->tree, info);
+ c_req = smb_raw_pathinfo_send(p->tree, info);
ASYNC_RECV_TAIL(info, async_qpathinfo);
}
*/
static void async_qfileinfo(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct ntvfs_request *req = async->req;
req->async_states->status = smb_raw_fileinfo_recv(c_req, req, async->parms);
talloc_free(async);
static NTSTATUS cvfs_qfileinfo(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_fileinfo *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID_AND_FILE;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_fileinfo(private->tree, req, io);
+ return smb_raw_fileinfo(p->tree, req, io);
}
- c_req = smb_raw_fileinfo_send(private->tree, io);
+ c_req = smb_raw_fileinfo_send(p->tree, io);
ASYNC_RECV_TAIL(io, async_qfileinfo);
}
static NTSTATUS cvfs_setpathinfo(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_setfileinfo *st)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_setpathinfo(private->tree, st);
+ return smb_raw_setpathinfo(p->tree, st);
}
- c_req = smb_raw_setpathinfo_send(private->tree, st);
+ c_req = smb_raw_setpathinfo_send(p->tree, st);
SIMPLE_ASYNC_TAIL;
}
*/
static void async_open(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct cvfs_private *cvfs = async->cvfs;
struct ntvfs_request *req = async->req;
struct cvfs_file *f = async->f;
static NTSTATUS cvfs_open(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_open *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
struct ntvfs_handle *h;
struct cvfs_file *f;
SETUP_PID;
if (io->generic.level != RAW_OPEN_GENERIC &&
- private->map_generic) {
+ p->map_generic) {
return ntvfs_map_open(ntvfs, req, io);
}
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
union smb_handle *file;
- status = smb_raw_open(private->tree, req, io);
+ status = smb_raw_open(p->tree, req, io);
NT_STATUS_NOT_OK_RETURN(status);
SMB_OPEN_OUT_FILE(io, file);
f->fnum = file->fnum;
file->ntvfs = NULL;
- status = ntvfs_handle_set_backend_data(f->h, private->ntvfs, f);
+ status = ntvfs_handle_set_backend_data(f->h, p->ntvfs, f);
NT_STATUS_NOT_OK_RETURN(status);
file->ntvfs = f->h;
- DLIST_ADD(private->files, f);
+ DLIST_ADD(p->files, f);
return NT_STATUS_OK;
}
- c_req = smb_raw_open_send(private->tree, io);
+ c_req = smb_raw_open_send(p->tree, io);
ASYNC_RECV_TAIL_F(io, async_open, f);
}
static NTSTATUS cvfs_mkdir(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_mkdir *md)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_mkdir(private->tree, md);
+ return smb_raw_mkdir(p->tree, md);
}
- c_req = smb_raw_mkdir_send(private->tree, md);
+ c_req = smb_raw_mkdir_send(p->tree, md);
SIMPLE_ASYNC_TAIL;
}
static NTSTATUS cvfs_rmdir(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, struct smb_rmdir *rd)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_rmdir(private->tree, rd);
+ return smb_raw_rmdir(p->tree, rd);
}
- c_req = smb_raw_rmdir_send(private->tree, rd);
+ c_req = smb_raw_rmdir_send(p->tree, rd);
SIMPLE_ASYNC_TAIL;
}
static NTSTATUS cvfs_rename(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_rename *ren)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
}
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_rename(private->tree, ren);
+ return smb_raw_rename(p->tree, ren);
}
- c_req = smb_raw_rename_send(private->tree, ren);
+ c_req = smb_raw_rename_send(p->tree, ren);
SIMPLE_ASYNC_TAIL;
}
*/
static void async_read(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct ntvfs_request *req = async->req;
req->async_states->status = smb_raw_read_recv(c_req, async->parms);
talloc_free(async);
static NTSTATUS cvfs_read(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_read *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
if (io->generic.level != RAW_READ_GENERIC &&
- private->map_generic) {
+ p->map_generic) {
return ntvfs_map_read(ntvfs, req, io);
}
SETUP_FILE;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_read(private->tree, io);
+ return smb_raw_read(p->tree, io);
}
- c_req = smb_raw_read_send(private->tree, io);
+ c_req = smb_raw_read_send(p->tree, io);
ASYNC_RECV_TAIL(io, async_read);
}
*/
static void async_write(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct ntvfs_request *req = async->req;
req->async_states->status = smb_raw_write_recv(c_req, async->parms);
talloc_free(async);
static NTSTATUS cvfs_write(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_write *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
if (io->generic.level != RAW_WRITE_GENERIC &&
- private->map_generic) {
+ p->map_generic) {
return ntvfs_map_write(ntvfs, req, io);
}
SETUP_FILE;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_write(private->tree, io);
+ return smb_raw_write(p->tree, io);
}
- c_req = smb_raw_write_send(private->tree, io);
+ c_req = smb_raw_write_send(p->tree, io);
ASYNC_RECV_TAIL(io, async_write);
}
*/
static void async_seek(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct ntvfs_request *req = async->req;
req->async_states->status = smb_raw_seek_recv(c_req, async->parms);
talloc_free(async);
struct ntvfs_request *req,
union smb_seek *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID_AND_FILE;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_seek(private->tree, io);
+ return smb_raw_seek(p->tree, io);
}
- c_req = smb_raw_seek_send(private->tree, io);
+ c_req = smb_raw_seek_send(p->tree, io);
ASYNC_RECV_TAIL(io, async_seek);
}
struct ntvfs_request *req,
union smb_flush *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
}
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_flush(private->tree, io);
+ return smb_raw_flush(p->tree, io);
}
- c_req = smb_raw_flush_send(private->tree, io);
+ c_req = smb_raw_flush_send(p->tree, io);
SIMPLE_ASYNC_TAIL;
}
static NTSTATUS cvfs_close(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_close *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
struct cvfs_file *f;
union smb_close io2;
SETUP_PID;
if (io->generic.level != RAW_CLOSE_GENERIC &&
- private->map_generic) {
+ p->map_generic) {
return ntvfs_map_close(ntvfs, req, io);
}
even if file-close fails, we'll remove it from the list,
what else would we do? Maybe we should not remove until
after the proxied call completes? */
- DLIST_REMOVE(private->files, f);
+ DLIST_REMOVE(p->files, f);
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_close(private->tree, io);
+ return smb_raw_close(p->tree, io);
}
- c_req = smb_raw_close_send(private->tree, io);
+ c_req = smb_raw_close_send(p->tree, io);
SIMPLE_ASYNC_TAIL;
}
static NTSTATUS cvfs_exit(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_exit(private->tree->session);
+ return smb_raw_exit(p->tree->session);
}
- c_req = smb_raw_exit_send(private->tree->session);
+ c_req = smb_raw_exit_send(p->tree->session);
SIMPLE_ASYNC_TAIL;
}
*/
static NTSTATUS cvfs_async_setup(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req,
- void *private)
+ void *private_data)
{
return NT_STATUS_OK;
}
static NTSTATUS cvfs_cancel(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct async_info *a;
/* find the matching request */
- for (a=private->pending;a;a=a->next) {
+ for (a=p->pending;a;a=a->next) {
if (a->req == req) {
break;
}
static NTSTATUS cvfs_lock(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_lock *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
if (io->generic.level != RAW_LOCK_GENERIC &&
- private->map_generic) {
+ p->map_generic) {
return ntvfs_map_lock(ntvfs, req, io);
}
SETUP_FILE;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_lock(private->tree, io);
+ return smb_raw_lock(p->tree, io);
}
- c_req = smb_raw_lock_send(private->tree, io);
+ c_req = smb_raw_lock_send(p->tree, io);
SIMPLE_ASYNC_TAIL;
}
struct ntvfs_request *req,
union smb_setfileinfo *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID_AND_FILE;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_setfileinfo(private->tree, io);
+ return smb_raw_setfileinfo(p->tree, io);
}
- c_req = smb_raw_setfileinfo_send(private->tree, io);
+ c_req = smb_raw_setfileinfo_send(p->tree, io);
SIMPLE_ASYNC_TAIL;
}
*/
static void async_fsinfo(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct ntvfs_request *req = async->req;
req->async_states->status = smb_raw_fsinfo_recv(c_req, req, async->parms);
talloc_free(async);
static NTSTATUS cvfs_fsinfo(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_fsinfo *fs)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
SETUP_PID;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_fsinfo(private->tree, req, fs);
+ return smb_raw_fsinfo(p->tree, req, fs);
}
- c_req = smb_raw_fsinfo_send(private->tree, req, fs);
+ c_req = smb_raw_fsinfo_send(p->tree, req, fs);
ASYNC_RECV_TAIL(fs, async_fsinfo);
}
void *search_private,
bool (*callback)(void *, const union smb_search_data *))
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
SETUP_PID;
- return smb_raw_search_first(private->tree, req, io, search_private, callback);
+ return smb_raw_search_first(p->tree, req, io, search_private, callback);
}
/* continue a search */
void *search_private,
bool (*callback)(void *, const union smb_search_data *))
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
SETUP_PID;
- return smb_raw_search_next(private->tree, req, io, search_private, callback);
+ return smb_raw_search_next(p->tree, req, io, search_private, callback);
}
/* close a search */
static NTSTATUS cvfs_search_close(struct ntvfs_module_context *ntvfs,
struct ntvfs_request *req, union smb_search_close *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
SETUP_PID;
- return smb_raw_search_close(private->tree, io);
+ return smb_raw_search_close(p->tree, io);
}
/*
*/
static void async_trans2(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct ntvfs_request *req = async->req;
req->async_states->status = smb_raw_trans2_recv(c_req, req, async->parms);
talloc_free(async);
struct ntvfs_request *req,
struct smb_trans2 *trans2)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
- if (private->map_trans2) {
+ if (p->map_trans2) {
return NT_STATUS_NOT_IMPLEMENTED;
}
SETUP_PID;
if (!(req->async_states->state & NTVFS_ASYNC_STATE_MAY_ASYNC)) {
- return smb_raw_trans2(private->tree, req, trans2);
+ return smb_raw_trans2(p->tree, req, trans2);
}
- c_req = smb_raw_trans2_send(private->tree, trans2);
+ c_req = smb_raw_trans2_send(p->tree, trans2);
ASYNC_RECV_TAIL(trans2, async_trans2);
}
*/
static void async_changenotify(struct smbcli_request *c_req)
{
- struct async_info *async = c_req->async.private;
+ struct async_info *async = c_req->async.private_data;
struct ntvfs_request *req = async->req;
req->async_states->status = smb_raw_changenotify_recv(c_req, req, async->parms);
talloc_free(async);
struct ntvfs_request *req,
union smb_notify *io)
{
- struct cvfs_private *private = ntvfs->private_data;
+ struct cvfs_private *p = ntvfs->private_data;
struct smbcli_request *c_req;
- int saved_timeout = private->transport->options.request_timeout;
+ int saved_timeout = p->transport->options.request_timeout;
struct cvfs_file *f;
if (io->nttrans.level != RAW_NOTIFY_NTTRANS) {
/* we must not timeout on notify requests - they wait
forever */
- private->transport->options.request_timeout = 0;
+ p->transport->options.request_timeout = 0;
- c_req = smb_raw_changenotify_send(private->tree, io);
+ c_req = smb_raw_changenotify_send(p->tree, io);
- private->transport->options.request_timeout = saved_timeout;
+ p->transport->options.request_timeout = saved_timeout;
ASYNC_RECV_TAIL(io, async_changenotify);
}