Line data Source code
1 : /*
2 : * Unix SMB/CIFS implementation.
3 : *
4 : * This program is free software; you can redistribute it and/or modify
5 : * it under the terms of the GNU General Public License as published by
6 : * the Free Software Foundation; either version 3 of the License, or
7 : * (at your option) any later version.
8 : *
9 : * This program is distributed in the hope that it will be useful,
10 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 : * GNU General Public License for more details.
13 : *
14 : * You should have received a copy of the GNU General Public License
15 : * along with this program; if not, see <http://www.gnu.org/licenses/>.
16 : */
17 :
18 : #include "includes.h"
19 : #include "rpc_worker.h"
20 : #include "lib/global_contexts.h"
21 : #include "librpc/gen_ndr/ndr_spoolss.h"
22 : #include "librpc/gen_ndr/ndr_spoolss_scompat.h"
23 : #include "source3/locking/share_mode_lock.h"
24 : #include "source3/printing/queue_process.h"
25 : #include "source3/include/messages.h"
26 : #include "source3/include/secrets.h"
27 : #include "source3/smbd/proto.h"
28 :
29 35 : static size_t spoolss_interfaces(
30 : const struct ndr_interface_table ***pifaces,
31 : void *private_data)
32 : {
33 : static const struct ndr_interface_table *ifaces[] = {
34 : &ndr_table_spoolss,
35 : };
36 35 : *pifaces = ifaces;
37 35 : return ARRAY_SIZE(ifaces);
38 : }
39 :
40 2 : static size_t spoolss_servers(
41 : struct dcesrv_context *dce_ctx,
42 : const struct dcesrv_endpoint_server ***_ep_servers,
43 : void *private_data)
44 : {
45 : static const struct dcesrv_endpoint_server *ep_servers[1] = { NULL };
46 2 : struct messaging_context *msg_ctx = global_messaging_context();
47 2 : struct tevent_context *ev_ctx = messaging_tevent_context(msg_ctx);
48 : bool ok;
49 :
50 2 : ep_servers[0] = spoolss_get_ep_server();
51 :
52 2 : ok = secrets_init();
53 2 : if (!ok) {
54 0 : DBG_ERR("secrets_init() failed\n");
55 0 : exit(1);
56 : }
57 :
58 2 : ok = locking_init();
59 2 : if (!ok) {
60 0 : DBG_ERR("locking_init() failed\n");
61 0 : exit(1);
62 : }
63 :
64 2 : lp_load_with_shares(get_dyn_CONFIGFILE());
65 :
66 2 : ok = printing_subsystem_init(ev_ctx, msg_ctx, dce_ctx);
67 2 : if (!ok) {
68 0 : DBG_WARNING("printing_subsystem_init() failed\n");
69 0 : exit(1);
70 : }
71 :
72 2 : mangle_reset_cache();
73 :
74 2 : *_ep_servers = ep_servers;
75 2 : return ARRAY_SIZE(ep_servers);
76 : }
77 :
78 37 : int main(int argc, const char *argv[])
79 : {
80 37 : return rpc_worker_main(
81 : argc,
82 : argv,
83 : "rpcd_spoolss",
84 : 5,
85 : 60,
86 : spoolss_interfaces,
87 : spoolss_servers,
88 : NULL);
89 : }
|