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 "librpc/gen_ndr/ndr_lsa.h" 21 : #include "librpc/gen_ndr/ndr_lsa_scompat.h" 22 : #include "librpc/gen_ndr/ndr_samr.h" 23 : #include "librpc/gen_ndr/ndr_samr_scompat.h" 24 : #include "librpc/gen_ndr/ndr_netlogon.h" 25 : #include "librpc/gen_ndr/ndr_netlogon_scompat.h" 26 : #include "librpc/gen_ndr/ndr_dssetup.h" 27 : #include "librpc/gen_ndr/ndr_dssetup_scompat.h" 28 : #include "source3/include/auth.h" 29 : #include "source3/include/secrets.h" 30 : 31 35 : static size_t lsad_interfaces( 32 : const struct ndr_interface_table ***pifaces, 33 : void *private_data) 34 : { 35 : static const struct ndr_interface_table *ifaces[] = { 36 : &ndr_table_lsarpc, 37 : &ndr_table_samr, 38 : &ndr_table_dssetup, 39 : /* 40 : * This last item is truncated from the list by the 41 : * num_ifaces -= 1 below for the fileserver. Take 42 : * care when adding new services. 43 : */ 44 : &ndr_table_netlogon, 45 : }; 46 35 : size_t num_ifaces = ARRAY_SIZE(ifaces); 47 : 48 35 : switch(lp_server_role()) { 49 29 : case ROLE_STANDALONE: 50 : case ROLE_DOMAIN_MEMBER: 51 : /* no netlogon for non-dc */ 52 29 : num_ifaces -= 1; 53 29 : break; 54 4 : case ROLE_ACTIVE_DIRECTORY_DC: 55 : /* 56 : * All these services are provided by the 'samba' 57 : * binary from source4, not this code which is the 58 : * source3 / NT4-like "classic" DC implementation 59 : */ 60 4 : num_ifaces = 0; 61 4 : break; 62 2 : default: 63 2 : break; 64 : } 65 : 66 35 : *pifaces = ifaces; 67 35 : return num_ifaces; 68 : } 69 : 70 61 : static size_t lsad_servers( 71 : struct dcesrv_context *dce_ctx, 72 : const struct dcesrv_endpoint_server ***_ep_servers, 73 : void *private_data) 74 : { 75 : static const struct dcesrv_endpoint_server *ep_servers[4] = { NULL, }; 76 61 : size_t num_servers = ARRAY_SIZE(ep_servers); 77 : bool ok; 78 : 79 61 : ep_servers[0] = lsarpc_get_ep_server(); 80 61 : ep_servers[1] = samr_get_ep_server(); 81 61 : ep_servers[2] = dssetup_get_ep_server(); 82 61 : ep_servers[3] = netlogon_get_ep_server(); 83 : 84 61 : ok = secrets_init(); 85 61 : if (!ok) { 86 0 : DBG_ERR("secrets_init() failed\n"); 87 0 : exit(1); 88 : } 89 : 90 61 : switch(lp_server_role()) { 91 54 : case ROLE_STANDALONE: 92 : case ROLE_DOMAIN_MEMBER: 93 : /* no netlogon for non-dc */ 94 54 : num_servers -= 1; 95 54 : break; 96 0 : case ROLE_ACTIVE_DIRECTORY_DC: 97 : /* 98 : * All these services are provided by the 'samba' 99 : * binary from source4, not this code which is the 100 : * source3 / NT4-like "classic" DC implementation 101 : */ 102 0 : num_servers = 0; 103 0 : break; 104 7 : default: 105 7 : break; 106 : } 107 : 108 61 : *_ep_servers = ep_servers; 109 61 : return num_servers; 110 : } 111 : 112 96 : int main(int argc, const char *argv[]) 113 : { 114 96 : return rpc_worker_main( 115 : argc, 116 : argv, 117 : "rpcd_lsad", 118 : 5, 119 : 60, 120 : lsad_interfaces, 121 : lsad_servers, 122 : NULL); 123 : }