2 Unix SMB/CIFS implementation.
4 Modular shares configuration system
6 Copyright (C) Simo Sorce 2006
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "param/share.h"
24 #include "param/param.h"
26 const char *share_string_option(struct share_config
*scfg
, const char *opt_name
, const char *defval
)
28 return scfg
->ctx
->ops
->string_option(scfg
, opt_name
, defval
);
31 int share_int_option(struct share_config
*scfg
, const char *opt_name
, int defval
)
33 return scfg
->ctx
->ops
->int_option(scfg
, opt_name
, defval
);
36 bool share_bool_option(struct share_config
*scfg
, const char *opt_name
, bool defval
)
38 return scfg
->ctx
->ops
->bool_option(scfg
, opt_name
, defval
);
41 const char **share_string_list_option(TALLOC_CTX
*mem_ctx
, struct share_config
*scfg
, const char *opt_name
)
43 return scfg
->ctx
->ops
->string_list_option(mem_ctx
, scfg
, opt_name
);
46 NTSTATUS
share_list_all(TALLOC_CTX
*mem_ctx
, struct share_context
*sctx
, int *count
, const char ***names
)
48 return sctx
->ops
->list_all(mem_ctx
, sctx
, count
, names
);
51 NTSTATUS
share_get_config(TALLOC_CTX
*mem_ctx
, struct share_context
*sctx
, const char *name
, struct share_config
**scfg
)
53 return sctx
->ops
->get_config(mem_ctx
, sctx
, name
, scfg
);
56 NTSTATUS
share_create(struct share_context
*sctx
, const char *name
, struct share_info
*info
, int count
)
58 if (sctx
->ops
->create
) {
59 return sctx
->ops
->create(sctx
, name
, info
, count
);
61 return NT_STATUS_NOT_IMPLEMENTED
;
64 NTSTATUS
share_set(struct share_context
*sctx
, const char *name
, struct share_info
*info
, int count
)
67 return sctx
->ops
->set(sctx
, name
, info
, count
);
69 return NT_STATUS_NOT_IMPLEMENTED
;
72 NTSTATUS
share_remove(struct share_context
*sctx
, const char *name
)
74 if (sctx
->ops
->remove
) {
75 return sctx
->ops
->remove(sctx
, name
);
77 return NT_STATUS_NOT_IMPLEMENTED
;
80 /* List of currently available share backends */
81 static struct share_ops
**backends
= NULL
;
83 static const struct share_ops
*share_backend_by_name(const char *name
)
87 for (i
= 0; backends
&& backends
[i
]; i
++) {
88 if (strcmp(backends
[i
]->name
, name
) == 0) {
97 Register the share backend
99 NTSTATUS
share_register(const struct share_ops
*ops
)
103 if (share_backend_by_name(ops
->name
) != NULL
) {
104 DEBUG(0,("SHARE backend [%s] already registered\n", ops
->name
));
105 return NT_STATUS_OBJECT_NAME_COLLISION
;
109 while (backends
&& backends
[i
]) {
113 backends
= realloc_p(backends
, struct share_ops
*, i
+ 2);
115 smb_panic("out of memory in share_register");
118 backends
[i
] = (struct share_ops
*)smb_xmemdup(ops
, sizeof(*ops
));
119 backends
[i
]->name
= smb_xstrdup(ops
->name
);
121 backends
[i
+ 1] = NULL
;
123 DEBUG(3, ("SHARE backend [%s] registered.\n", ops
->name
));
128 NTSTATUS
share_get_context_by_name(TALLOC_CTX
*mem_ctx
, const char *backend_name
,
129 struct tevent_context
*event_ctx
,
130 struct loadparm_context
*lp_ctx
,
131 struct share_context
**ctx
)
133 const struct share_ops
*ops
;
135 ops
= share_backend_by_name(backend_name
);
137 DEBUG(0, ("share_init_connection: share backend [%s] not found!\n", backend_name
));
138 return NT_STATUS_INTERNAL_ERROR
;
141 return ops
->init(mem_ctx
, ops
, event_ctx
, lp_ctx
, ctx
);
145 initialise the SHARE subsystem
147 NTSTATUS
share_init(void)
149 extern NTSTATUS
share_ldb_init(void);
150 extern NTSTATUS
share_classic_init(void);
151 init_module_fn static_init
[] = { STATIC_share_MODULES
};
153 run_init_functions(static_init
);