*/
#include "includes.h"
-#include "lib/util/dlinklist.h"
-#include "build.h"
+#include "../lib/util/dlinklist.h"
#include "ntvfs/ntvfs.h"
#include "param/param.h"
The 'type' is used to specify whether this is for a disk, printer or IPC$ share
*/
-_PUBLIC_ NTSTATUS ntvfs_register(const struct ntvfs_ops *ops,
+NTSTATUS ntvfs_register(const struct ntvfs_ops *ops,
const struct ntvfs_critical_sizes *const sizes)
{
struct ntvfs_ops *new_ops;
/*
return the operations structure for a named backend of the specified type
*/
-_PUBLIC_ const struct ntvfs_ops *ntvfs_backend_byname(const char *name, enum ntvfs_type type)
+const struct ntvfs_ops *ntvfs_backend_byname(const char *name, enum ntvfs_type type)
{
int i;
static const NTVFS_CURRENT_CRITICAL_SIZES(critical_sizes);
-_PUBLIC_ const struct ntvfs_critical_sizes *ntvfs_interface_version(void)
+const struct ntvfs_critical_sizes *ntvfs_interface_version(void)
{
return &critical_sizes;
}
-_PUBLIC_ BOOL ntvfs_interface_differs(const struct ntvfs_critical_sizes *const iface)
+bool ntvfs_interface_differs(const struct ntvfs_critical_sizes *const iface)
{
/* The comparison would be easier with memcmp, but compiler-interset
* alignment padding is not guaranteed to be zeroed.
#define FIELD_DIFFERS(field) (iface->field != critical_sizes.field)
if (FIELD_DIFFERS(interface_version))
- return True;
+ return true;
if (FIELD_DIFFERS(sizeof_ntvfs_critical_sizes))
- return True;
+ return true;
if (FIELD_DIFFERS(sizeof_ntvfs_context))
- return True;
+ return true;
if (FIELD_DIFFERS(sizeof_ntvfs_module_context))
- return True;
+ return true;
if (FIELD_DIFFERS(sizeof_ntvfs_ops))
- return True;
+ return true;
if (FIELD_DIFFERS(sizeof_ntvfs_async_state))
- return True;
+ return true;
if (FIELD_DIFFERS(sizeof_ntvfs_request))
- return True;
+ return true;
/* Versions match. */
- return False;
+ return false;
#undef FIELD_DIFFERS
}
*/
NTSTATUS ntvfs_init_connection(TALLOC_CTX *mem_ctx, struct share_config *scfg, enum ntvfs_type type,
enum protocol_types protocol,
- struct event_context *ev, struct messaging_context *msg,
+ uint64_t ntvfs_client_caps,
+ struct tevent_context *ev, struct messaging_context *msg,
+ struct loadparm_context *lp_ctx,
struct server_id server_id, struct ntvfs_context **_ctx)
{
const char **handlers = share_string_list_option(mem_ctx, scfg, SHARE_NTVFS_HANDLER);
ctx = talloc_zero(mem_ctx, struct ntvfs_context);
NT_STATUS_HAVE_NO_MEMORY(ctx);
ctx->protocol = protocol;
+ ctx->client_caps = ntvfs_client_caps;
ctx->type = type;
ctx->config = talloc_steal(ctx, scfg);
ctx->event_ctx = ev;
ctx->msg_ctx = msg;
ctx->server_id = server_id;
+ ctx->lp_ctx = lp_ctx;
for (i=0; handlers[i]; i++) {
struct ntvfs_module_context *ntvfs;
return NT_STATUS_OK;
}
-NTSTATUS ntvfs_init(void)
+NTSTATUS ntvfs_init(struct loadparm_context *lp_ctx)
{
- init_module_fn static_init[] = STATIC_ntvfs_MODULES;
- init_module_fn *shared_init = load_samba_modules(NULL, global_loadparm, "ntvfs");
+ static bool initialized = false;
+#define _MODULE_PROTO(init) extern NTSTATUS init(void);
+ STATIC_ntvfs_MODULES_PROTO;
+ init_module_fn static_init[] = { STATIC_ntvfs_MODULES };
+ init_module_fn *shared_init;
+
+ if (initialized) return NT_STATUS_OK;
+ initialized = true;
+
+ shared_init = load_samba_modules(NULL, lp_ctx, "ntvfs");
run_init_functions(static_init);
run_init_functions(shared_init);