LCOV - code coverage report
Current view: top level - source3/rpc_server/dssetup - srv_dssetup_nt.c (source / functions) Hit Total Coverage
Test: coverage report for master 2f515e9b Lines: 37 82 45.1 %
Date: 2024-04-21 15:09:00 Functions: 2 12 16.7 %

          Line data    Source code
       1             : /*
       2             :  *  Unix SMB/CIFS implementation.
       3             :  *  RPC Pipe client / server routines
       4             :  *  Copyright (C) Andrew Tridgell               1992-1997.
       5             :  *  Copyright (C) Luke Kenneth Casson Leighton  1996-1997.
       6             :  *  Copyright (C) Paul Ashton                        1997.
       7             :  *  Copyright (C) Jeremy Allison                     2001.
       8             :  *  Copyright (C) Gerald Carter                      2002.
       9             :  *  Copyright (C) Guenther Deschner                  2008.
      10             :  *
      11             :  *  This program is free software; you can redistribute it and/or modify
      12             :  *  it under the terms of the GNU General Public License as published by
      13             :  *  the Free Software Foundation; either version 3 of the License, or
      14             :  *  (at your option) any later version.
      15             :  *
      16             :  *  This program is distributed in the hope that it will be useful,
      17             :  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
      18             :  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19             :  *  GNU General Public License for more details.
      20             :  *
      21             :  *  You should have received a copy of the GNU General Public License
      22             :  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
      23             :  */
      24             : 
      25             : #include "includes.h"
      26             : #include "ntdomain.h"
      27             : #include "librpc/gen_ndr/ndr_dssetup.h"
      28             : #include "librpc/gen_ndr/ndr_dssetup_scompat.h"
      29             : #include "secrets.h"
      30             : 
      31             : #undef DBGC_CLASS
      32             : #define DBGC_CLASS DBGC_RPC_SRV
      33             : 
      34             : /********************************************************************
      35             :  Fill in a dssetup_DsRolePrimaryDomInfoBasic structure
      36             :  ********************************************************************/
      37             : 
      38          24 : static WERROR fill_dsrole_dominfo_basic(TALLOC_CTX *ctx,
      39             :                                         struct dssetup_DsRolePrimaryDomInfoBasic **info)
      40             : {
      41          24 :         struct dssetup_DsRolePrimaryDomInfoBasic *basic = NULL;
      42          24 :         char *dnsdomain = NULL;
      43             : 
      44          24 :         DEBUG(10,("fill_dsrole_dominfo_basic: enter\n"));
      45             : 
      46          24 :         basic = talloc_zero(ctx, struct dssetup_DsRolePrimaryDomInfoBasic);
      47          24 :         if (!basic) {
      48           0 :                 DEBUG(0,("fill_dsrole_dominfo_basic: out of memory\n"));
      49           0 :                 return WERR_NOT_ENOUGH_MEMORY;
      50             :         }
      51             : 
      52          24 :         switch (lp_server_role()) {
      53           0 :                 case ROLE_STANDALONE:
      54           0 :                         basic->role = DS_ROLE_STANDALONE_SERVER;
      55           0 :                         basic->domain = get_global_sam_name();
      56           0 :                         break;
      57          21 :                 case ROLE_DOMAIN_MEMBER:
      58          21 :                         basic->role = DS_ROLE_MEMBER_SERVER;
      59          21 :                         basic->domain = lp_workgroup();
      60          21 :                         break;
      61           0 :                 case ROLE_DOMAIN_BDC:
      62           0 :                         basic->role = DS_ROLE_BACKUP_DC;
      63           0 :                         basic->domain = get_global_sam_name();
      64           0 :                         break;
      65           3 :                 case ROLE_DOMAIN_PDC:
      66             :                 case ROLE_IPA_DC:
      67           3 :                         basic->role = DS_ROLE_PRIMARY_DC;
      68           3 :                         basic->domain = get_global_sam_name();
      69           3 :                         break;
      70             :         }
      71             : 
      72          24 :         if (secrets_fetch_domain_guid(lp_workgroup(), &basic->domain_guid)) {
      73          15 :                 basic->flags |= DS_ROLE_PRIMARY_DOMAIN_GUID_PRESENT;
      74             :         }
      75             : 
      76             :         /* fill in some additional fields if we are a member of an AD domain */
      77             : 
      78          24 :         if (lp_security() == SEC_ADS) {
      79          18 :                 dnsdomain = talloc_strdup(ctx, lp_realm());
      80          18 :                 if (!dnsdomain) {
      81           0 :                         return WERR_NOT_ENOUGH_MEMORY;
      82             :                 }
      83          18 :                 if (!strlower_m(dnsdomain)) {
      84           0 :                         return WERR_INVALID_PARAMETER;
      85             :                 }
      86          18 :                 basic->dns_domain = dnsdomain;
      87             : 
      88             :                 /* FIXME!! We really should fill in the correct forest
      89             :                    name.  Should get this information from winbindd.  */
      90          18 :                 basic->forest = dnsdomain;
      91             :         } else {
      92             :                 /* security = domain should not fill in the dns or
      93             :                    forest name */
      94           6 :                 basic->dns_domain = NULL;
      95           6 :                 basic->forest = NULL;
      96             :         }
      97             : 
      98          24 :         *info = basic;
      99             : 
     100          24 :         return WERR_OK;
     101             : }
     102             : 
     103             : /********************************************************************
     104             :  Implement the _dssetup_DsRoleGetPrimaryDomainInformation() call
     105             :  ********************************************************************/
     106             : 
     107          24 : WERROR _dssetup_DsRoleGetPrimaryDomainInformation(struct pipes_struct *p,
     108             :                                                   struct dssetup_DsRoleGetPrimaryDomainInformation *r)
     109             : {
     110          24 :         WERROR werr = WERR_OK;
     111             : 
     112          24 :         switch (r->in.level) {
     113             : 
     114          24 :                 case DS_ROLE_BASIC_INFORMATION: {
     115          24 :                         struct dssetup_DsRolePrimaryDomInfoBasic *basic = NULL;
     116          24 :                         werr = fill_dsrole_dominfo_basic(p->mem_ctx, &basic);
     117          24 :                         if (W_ERROR_IS_OK(werr)) {
     118          24 :                                 r->out.info->basic = *basic;
     119             :                         }
     120          24 :                         break;
     121             :                 }
     122           0 :                 default:
     123           0 :                         DEBUG(0,("_dssetup_DsRoleGetPrimaryDomainInformation: "
     124             :                                 "Unknown info level [%d]!\n", r->in.level));
     125           0 :                         werr = WERR_INVALID_LEVEL;
     126             :         }
     127             : 
     128          24 :         return werr;
     129             : }
     130             : 
     131             : /****************************************************************
     132             : ****************************************************************/
     133             : 
     134           0 : WERROR _dssetup_DsRoleDnsNameToFlatName(struct pipes_struct *p,
     135             :                                         struct dssetup_DsRoleDnsNameToFlatName *r)
     136             : {
     137           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     138           0 :         return WERR_NOT_SUPPORTED;
     139             : }
     140             : 
     141             : /****************************************************************
     142             : ****************************************************************/
     143             : 
     144           0 : WERROR _dssetup_DsRoleDcAsDc(struct pipes_struct *p,
     145             :                              struct dssetup_DsRoleDcAsDc *r)
     146             : {
     147           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     148           0 :         return WERR_NOT_SUPPORTED;
     149             : }
     150             : 
     151             : /****************************************************************
     152             : ****************************************************************/
     153             : 
     154           0 : WERROR _dssetup_DsRoleDcAsReplica(struct pipes_struct *p,
     155             :                                   struct dssetup_DsRoleDcAsReplica *r)
     156             : {
     157           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     158           0 :         return WERR_NOT_SUPPORTED;
     159             : }
     160             : 
     161             : /****************************************************************
     162             : ****************************************************************/
     163             : 
     164           0 : WERROR _dssetup_DsRoleDemoteDc(struct pipes_struct *p,
     165             :                                struct dssetup_DsRoleDemoteDc *r)
     166             : {
     167           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     168           0 :         return WERR_NOT_SUPPORTED;
     169             : }
     170             : 
     171             : /****************************************************************
     172             : ****************************************************************/
     173             : 
     174           0 : WERROR _dssetup_DsRoleGetDcOperationProgress(struct pipes_struct *p,
     175             :                                              struct dssetup_DsRoleGetDcOperationProgress *r)
     176             : {
     177           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     178           0 :         return WERR_NOT_SUPPORTED;
     179             : }
     180             : 
     181             : /****************************************************************
     182             : ****************************************************************/
     183             : 
     184           0 : WERROR _dssetup_DsRoleGetDcOperationResults(struct pipes_struct *p,
     185             :                                             struct dssetup_DsRoleGetDcOperationResults *r)
     186             : {
     187           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     188           0 :         return WERR_NOT_SUPPORTED;
     189             : }
     190             : 
     191             : /****************************************************************
     192             : ****************************************************************/
     193             : 
     194           0 : WERROR _dssetup_DsRoleCancel(struct pipes_struct *p,
     195             :                              struct dssetup_DsRoleCancel *r)
     196             : {
     197           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     198           0 :         return WERR_NOT_SUPPORTED;
     199             : }
     200             : 
     201             : /****************************************************************
     202             : ****************************************************************/
     203             : 
     204           0 : WERROR _dssetup_DsRoleServerSaveStateForUpgrade(struct pipes_struct *p,
     205             :                                                 struct dssetup_DsRoleServerSaveStateForUpgrade *r)
     206             : {
     207           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     208           0 :         return WERR_NOT_SUPPORTED;
     209             : }
     210             : 
     211             : /****************************************************************
     212             : ****************************************************************/
     213             : 
     214           0 : WERROR _dssetup_DsRoleUpgradeDownlevelServer(struct pipes_struct *p,
     215             :                                              struct dssetup_DsRoleUpgradeDownlevelServer *r)
     216             : {
     217           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     218           0 :         return WERR_NOT_SUPPORTED;
     219             : }
     220             : 
     221             : /****************************************************************
     222             : ****************************************************************/
     223             : 
     224           0 : WERROR _dssetup_DsRoleAbortDownlevelServerUpgrade(struct pipes_struct *p,
     225             :                                                   struct dssetup_DsRoleAbortDownlevelServerUpgrade *r)
     226             : {
     227           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     228           0 :         return WERR_NOT_SUPPORTED;
     229             : }
     230             : 
     231             : /* include the generated boilerplate */
     232             : #include "librpc/gen_ndr/ndr_dssetup_scompat.c"

Generated by: LCOV version 1.14