*/
#include "includes.h"
-#include "lib/util/dlinklist.h"
-#include "build.h"
+#include "../lib/util/dlinklist.h"
#include "ntvfs/ntvfs.h"
#include "param/param.h"
+#include "lib/util/samba_module.h"
/* the list of currently registered NTVFS backends, note that there
* can be more than one backend with the same name, as long as they
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.
NTSTATUS ntvfs_init_connection(TALLOC_CTX *mem_ctx, struct share_config *scfg, enum ntvfs_type type,
enum protocol_types protocol,
uint64_t ntvfs_client_caps,
- struct event_context *ev, struct messaging_context *msg,
+ struct tevent_context *ev, struct imessaging_context *msg,
struct loadparm_context *lp_ctx,
struct server_id server_id, struct ntvfs_context **_ctx)
{
return NT_STATUS_OK;
}
+/*
+ adds the IPC$ share, needed for RPC calls
+ */
+static NTSTATUS ntvfs_add_ipc_share(struct loadparm_context *lp_ctx)
+{
+ struct loadparm_service *ipc;
+
+ if (lpcfg_service(lp_ctx, "IPC$")) {
+ /* it has already been defined in smb.conf or elsewhere */
+ return NT_STATUS_OK;
+ }
+
+ ipc = lpcfg_add_service(lp_ctx, NULL, "IPC$");
+ NT_STATUS_HAVE_NO_MEMORY(ipc);
+
+ lpcfg_do_service_parameter(lp_ctx, ipc, "comment", "IPC Service");
+ lpcfg_do_service_parameter(lp_ctx, ipc, "path", "/dev/null");
+ lpcfg_do_service_parameter(lp_ctx, ipc, "ntvfs handler", "default");
+ lpcfg_do_service_parameter(lp_ctx, ipc, "browseable", "No");
+ lpcfg_do_service_parameter(lp_ctx, ipc, "fstype", "IPC");
+
+ return NT_STATUS_OK;
+}
+
NTSTATUS ntvfs_init(struct loadparm_context *lp_ctx)
{
static bool initialized = false;
- init_module_fn static_init[] = { STATIC_ntvfs_MODULES };
- init_module_fn *shared_init;
+#define _MODULE_PROTO(init) extern NTSTATUS init(void);
+ STATIC_ntvfs_MODULES_PROTO;
+ samba_module_init_fn static_init[] = { STATIC_ntvfs_MODULES };
+ samba_module_init_fn *shared_init;
if (initialized) return NT_STATUS_OK;
initialized = true;
- shared_init = load_samba_modules(NULL, lp_ctx, "ntvfs");
+ shared_init = samba_modules_load(NULL, "ntvfs");
- run_init_functions(static_init);
- run_init_functions(shared_init);
+ samba_module_init_fns_run(static_init);
+ samba_module_init_fns_run(shared_init);
talloc_free(shared_init);
+
+ ntvfs_add_ipc_share(lp_ctx);
return NT_STATUS_OK;
}