LCOV - code coverage report
Current view: top level - bin/default/librpc/gen_ndr - ndr_srvsvc_scompat.c (source / functions) Hit Total Coverage
Test: coverage report for abartlet/fix-coverage dd10fb34 Lines: 317 1097 28.9 %
Date: 2021-09-23 10:06:22 Functions: 12 14 85.7 %

          Line data    Source code
       1             : /* s3 compat server functions auto-generated by pidl */
       2             : #include "bin/default/librpc/gen_ndr/ndr_srvsvc.h"
       3             : #include "bin/default/librpc/gen_ndr/ndr_srvsvc_scompat.h"
       4             : #include <librpc/rpc/dcesrv_core.h>
       5             : #include <rpc_server/rpc_config.h>
       6             : #include <rpc_server/rpc_server.h>
       7             : #include <util/debug.h>
       8             : 
       9             : enum s3compat_rpc_dispatch {
      10             :         S3COMPAT_RPC_DISPATCH_EXTERNAL = 0x00000001,
      11             :         S3COMPAT_RPC_DISPATCH_INTERNAL = 0x00000002,
      12             : };
      13             : 
      14             : /* srvsvc - dcerpc server boilerplate generated by pidl */
      15         214 : static NTSTATUS srvsvc__op_bind(struct dcesrv_connection_context *context, const struct dcesrv_interface *iface)
      16             : {
      17         214 :         struct pipes_struct *p = NULL;
      18             : 
      19             :         /* Retrieve pipes struct */
      20         214 :         p = dcesrv_get_pipes_struct(context->conn);
      21         214 :         p->pipe_bound = true;
      22             : #ifdef DCESRV_INTERFACE_SRVSVC_BIND
      23             :         return DCESRV_INTERFACE_SRVSVC_BIND(context,iface);
      24             : #else
      25         214 :         return NT_STATUS_OK;
      26             : #endif
      27             : }
      28             : 
      29         214 : static void srvsvc__op_unbind(struct dcesrv_connection_context *context, const struct dcesrv_interface *iface)
      30             : {
      31             : #ifdef DCESRV_INTERFACE_SRVSVC_UNBIND
      32             :         DCESRV_INTERFACE_SRVSVC_UNBIND(context, iface);
      33             : #else
      34         214 :         return;
      35             : #endif
      36             : }
      37             : 
      38       12718 : NTSTATUS srvsvc__op_ndr_pull(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ndr_pull *pull, void **r)
      39             : {
      40             :         enum ndr_err_code ndr_err;
      41       12718 :         uint16_t opnum = dce_call->pkt.u.request.opnum;
      42             : 
      43       12718 :         dce_call->fault_code = 0;
      44             : 
      45       12718 :         if (opnum >= ndr_table_srvsvc.num_calls) {
      46           0 :                 dce_call->fault_code = DCERPC_FAULT_OP_RNG_ERROR;
      47           0 :                 return NT_STATUS_NET_WRITE_FAULT;
      48             :         }
      49             : 
      50       12718 :         *r = talloc_named(mem_ctx, ndr_table_srvsvc.calls[opnum].struct_size, "struct %s", ndr_table_srvsvc.calls[opnum].name);
      51       12718 :         NT_STATUS_HAVE_NO_MEMORY(*r);
      52             : 
      53             :         /* unravel the NDR for the packet */
      54       12718 :         ndr_err = ndr_table_srvsvc.calls[opnum].ndr_pull(pull, NDR_IN, *r);
      55       12718 :         if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
      56           0 :                 dce_call->fault_code = DCERPC_FAULT_NDR;
      57           0 :                 return NT_STATUS_NET_WRITE_FAULT;
      58             :         }
      59             : 
      60       12718 :         return NT_STATUS_OK;
      61             : }
      62             : 
      63       12718 : static NTSTATUS srvsvc__op_dispatch_internal(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, void *r, enum s3compat_rpc_dispatch dispatch)
      64             : {
      65       12718 :         uint16_t opnum = dce_call->pkt.u.request.opnum;
      66       12718 :         struct pipes_struct *p = NULL;
      67       12718 :         struct auth_session_info *pipe_session_info = NULL;
      68       12718 :         NTSTATUS status = NT_STATUS_OK;
      69       12718 :         bool impersonated = false;
      70             : 
      71             :         /* Retrieve pipes struct */
      72       12718 :         p = dcesrv_get_pipes_struct(dce_call->conn);
      73             :         /* Update pipes struct opnum */
      74       12718 :         p->opnum = opnum;
      75       12718 :         p->dce_call = dce_call;
      76       12718 :         p->mem_ctx = mem_ctx;
      77             :         /* Update pipes struct session info */
      78       12718 :         pipe_session_info = p->session_info;
      79       12718 :         p->session_info = dce_call->auth_state->session_info;
      80       12718 :         p->auth.auth_type = dce_call->auth_state->auth_type;
      81       12718 :         p->auth.auth_level = dce_call->auth_state->auth_level;
      82       12718 :         p->auth.auth_context_id = dce_call->auth_state->auth_context_id;
      83             :         /* Reset pipes struct fault state */
      84       12718 :         p->fault_state = 0;
      85             : 
      86             :         /* Impersonate */
      87       12718 :         if (dispatch == S3COMPAT_RPC_DISPATCH_EXTERNAL) {
      88       12686 :                 impersonated = become_authenticated_pipe_user(p->session_info);
      89       12686 :                 if (!impersonated) {
      90           0 :                         dce_call->fault_code = DCERPC_FAULT_ACCESS_DENIED;
      91           0 :                         status = NT_STATUS_NET_WRITE_FAULT;
      92           0 :                         goto fail;
      93             :                 }
      94             :         }
      95             : 
      96       12718 :         switch (opnum) {
      97           4 :         case 0: { /* srvsvc_NetCharDevEnum */
      98           4 :                 struct srvsvc_NetCharDevEnum *r2 = (struct srvsvc_NetCharDevEnum *)r;
      99           4 :                 if (DEBUGLEVEL >= 10) {
     100           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevEnum, NDR_IN, r2);
     101             :                 }
     102           4 :                 NDR_ZERO_STRUCT(r2->out);
     103           4 :                 r2->out.info_ctr = r2->in.info_ctr;
     104           4 :                 r2->out.resume_handle = r2->in.resume_handle;
     105           4 :                 r2->out.totalentries = talloc_zero(r2, uint32_t);
     106           4 :                 if (r2->out.totalentries == NULL) {
     107           0 :                         status = NT_STATUS_NO_MEMORY;
     108           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     109           0 :                         goto fail;
     110             :                 }
     111             : 
     112           4 :                 r2->out.result = _srvsvc_NetCharDevEnum(p, r2);
     113           4 :                 break;
     114             :         }
     115           0 :         case 1: { /* srvsvc_NetCharDevGetInfo */
     116           0 :                 struct srvsvc_NetCharDevGetInfo *r2 = (struct srvsvc_NetCharDevGetInfo *)r;
     117           0 :                 if (DEBUGLEVEL >= 10) {
     118           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevGetInfo, NDR_IN, r2);
     119             :                 }
     120           0 :                 NDR_ZERO_STRUCT(r2->out);
     121           0 :                 r2->out.info = talloc_zero(r2, union srvsvc_NetCharDevInfo);
     122           0 :                 if (r2->out.info == NULL) {
     123           0 :                         status = NT_STATUS_NO_MEMORY;
     124           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     125           0 :                         goto fail;
     126             :                 }
     127             : 
     128           0 :                 r2->out.result = _srvsvc_NetCharDevGetInfo(p, r2);
     129           0 :                 break;
     130             :         }
     131           0 :         case 2: { /* srvsvc_NetCharDevControl */
     132           0 :                 struct srvsvc_NetCharDevControl *r2 = (struct srvsvc_NetCharDevControl *)r;
     133           0 :                 if (DEBUGLEVEL >= 10) {
     134           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevControl, NDR_IN, r2);
     135             :                 }
     136           0 :                 r2->out.result = _srvsvc_NetCharDevControl(p, r2);
     137           0 :                 break;
     138             :         }
     139           4 :         case 3: { /* srvsvc_NetCharDevQEnum */
     140           4 :                 struct srvsvc_NetCharDevQEnum *r2 = (struct srvsvc_NetCharDevQEnum *)r;
     141           4 :                 if (DEBUGLEVEL >= 10) {
     142           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQEnum, NDR_IN, r2);
     143             :                 }
     144           4 :                 NDR_ZERO_STRUCT(r2->out);
     145           4 :                 r2->out.info_ctr = r2->in.info_ctr;
     146           4 :                 r2->out.resume_handle = r2->in.resume_handle;
     147           4 :                 r2->out.totalentries = talloc_zero(r2, uint32_t);
     148           4 :                 if (r2->out.totalentries == NULL) {
     149           0 :                         status = NT_STATUS_NO_MEMORY;
     150           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     151           0 :                         goto fail;
     152             :                 }
     153             : 
     154           4 :                 r2->out.result = _srvsvc_NetCharDevQEnum(p, r2);
     155           4 :                 break;
     156             :         }
     157           0 :         case 4: { /* srvsvc_NetCharDevQGetInfo */
     158           0 :                 struct srvsvc_NetCharDevQGetInfo *r2 = (struct srvsvc_NetCharDevQGetInfo *)r;
     159           0 :                 if (DEBUGLEVEL >= 10) {
     160           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQGetInfo, NDR_IN, r2);
     161             :                 }
     162           0 :                 NDR_ZERO_STRUCT(r2->out);
     163           0 :                 r2->out.info = talloc_zero(r2, union srvsvc_NetCharDevQInfo);
     164           0 :                 if (r2->out.info == NULL) {
     165           0 :                         status = NT_STATUS_NO_MEMORY;
     166           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     167           0 :                         goto fail;
     168             :                 }
     169             : 
     170           0 :                 r2->out.result = _srvsvc_NetCharDevQGetInfo(p, r2);
     171           0 :                 break;
     172             :         }
     173           0 :         case 5: { /* srvsvc_NetCharDevQSetInfo */
     174           0 :                 struct srvsvc_NetCharDevQSetInfo *r2 = (struct srvsvc_NetCharDevQSetInfo *)r;
     175           0 :                 if (DEBUGLEVEL >= 10) {
     176           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQSetInfo, NDR_IN, r2);
     177             :                 }
     178           0 :                 NDR_ZERO_STRUCT(r2->out);
     179           0 :                 r2->out.parm_error = r2->in.parm_error;
     180           0 :                 r2->out.result = _srvsvc_NetCharDevQSetInfo(p, r2);
     181           0 :                 break;
     182             :         }
     183           0 :         case 6: { /* srvsvc_NetCharDevQPurge */
     184           0 :                 struct srvsvc_NetCharDevQPurge *r2 = (struct srvsvc_NetCharDevQPurge *)r;
     185           0 :                 if (DEBUGLEVEL >= 10) {
     186           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQPurge, NDR_IN, r2);
     187             :                 }
     188           0 :                 r2->out.result = _srvsvc_NetCharDevQPurge(p, r2);
     189           0 :                 break;
     190             :         }
     191           0 :         case 7: { /* srvsvc_NetCharDevQPurgeSelf */
     192           0 :                 struct srvsvc_NetCharDevQPurgeSelf *r2 = (struct srvsvc_NetCharDevQPurgeSelf *)r;
     193           0 :                 if (DEBUGLEVEL >= 10) {
     194           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQPurgeSelf, NDR_IN, r2);
     195             :                 }
     196           0 :                 r2->out.result = _srvsvc_NetCharDevQPurgeSelf(p, r2);
     197           0 :                 break;
     198             :         }
     199           8 :         case 8: { /* srvsvc_NetConnEnum */
     200           8 :                 struct srvsvc_NetConnEnum *r2 = (struct srvsvc_NetConnEnum *)r;
     201           8 :                 if (DEBUGLEVEL >= 10) {
     202           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetConnEnum, NDR_IN, r2);
     203             :                 }
     204           8 :                 NDR_ZERO_STRUCT(r2->out);
     205           8 :                 r2->out.info_ctr = r2->in.info_ctr;
     206           8 :                 r2->out.resume_handle = r2->in.resume_handle;
     207           8 :                 r2->out.totalentries = talloc_zero(r2, uint32_t);
     208           8 :                 if (r2->out.totalentries == NULL) {
     209           0 :                         status = NT_STATUS_NO_MEMORY;
     210           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     211           0 :                         goto fail;
     212             :                 }
     213             : 
     214           8 :                 r2->out.result = _srvsvc_NetConnEnum(p, r2);
     215           8 :                 break;
     216             :         }
     217          10 :         case 9: { /* srvsvc_NetFileEnum */
     218          10 :                 struct srvsvc_NetFileEnum *r2 = (struct srvsvc_NetFileEnum *)r;
     219          10 :                 if (DEBUGLEVEL >= 10) {
     220           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileEnum, NDR_IN, r2);
     221             :                 }
     222          10 :                 NDR_ZERO_STRUCT(r2->out);
     223          10 :                 r2->out.info_ctr = r2->in.info_ctr;
     224          10 :                 r2->out.resume_handle = r2->in.resume_handle;
     225          10 :                 r2->out.totalentries = talloc_zero(r2, uint32_t);
     226          10 :                 if (r2->out.totalentries == NULL) {
     227           0 :                         status = NT_STATUS_NO_MEMORY;
     228           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     229           0 :                         goto fail;
     230             :                 }
     231             : 
     232          10 :                 r2->out.result = _srvsvc_NetFileEnum(p, r2);
     233          10 :                 break;
     234             :         }
     235           0 :         case 10: { /* srvsvc_NetFileGetInfo */
     236           0 :                 struct srvsvc_NetFileGetInfo *r2 = (struct srvsvc_NetFileGetInfo *)r;
     237           0 :                 if (DEBUGLEVEL >= 10) {
     238           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileGetInfo, NDR_IN, r2);
     239             :                 }
     240           0 :                 NDR_ZERO_STRUCT(r2->out);
     241           0 :                 r2->out.info = talloc_zero(r2, union srvsvc_NetFileInfo);
     242           0 :                 if (r2->out.info == NULL) {
     243           0 :                         status = NT_STATUS_NO_MEMORY;
     244           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     245           0 :                         goto fail;
     246             :                 }
     247             : 
     248           0 :                 r2->out.result = _srvsvc_NetFileGetInfo(p, r2);
     249           0 :                 break;
     250             :         }
     251           0 :         case 11: { /* srvsvc_NetFileClose */
     252           0 :                 struct srvsvc_NetFileClose *r2 = (struct srvsvc_NetFileClose *)r;
     253           0 :                 if (DEBUGLEVEL >= 10) {
     254           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileClose, NDR_IN, r2);
     255             :                 }
     256           0 :                 r2->out.result = _srvsvc_NetFileClose(p, r2);
     257           0 :                 break;
     258             :         }
     259          34 :         case 12: { /* srvsvc_NetSessEnum */
     260          34 :                 struct srvsvc_NetSessEnum *r2 = (struct srvsvc_NetSessEnum *)r;
     261          34 :                 if (DEBUGLEVEL >= 10) {
     262           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSessEnum, NDR_IN, r2);
     263             :                 }
     264          34 :                 NDR_ZERO_STRUCT(r2->out);
     265          34 :                 r2->out.info_ctr = r2->in.info_ctr;
     266          34 :                 r2->out.resume_handle = r2->in.resume_handle;
     267          34 :                 r2->out.totalentries = talloc_zero(r2, uint32_t);
     268          34 :                 if (r2->out.totalentries == NULL) {
     269           0 :                         status = NT_STATUS_NO_MEMORY;
     270           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     271           0 :                         goto fail;
     272             :                 }
     273             : 
     274          34 :                 r2->out.result = _srvsvc_NetSessEnum(p, r2);
     275          34 :                 break;
     276             :         }
     277           0 :         case 13: { /* srvsvc_NetSessDel */
     278           0 :                 struct srvsvc_NetSessDel *r2 = (struct srvsvc_NetSessDel *)r;
     279           0 :                 if (DEBUGLEVEL >= 10) {
     280           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSessDel, NDR_IN, r2);
     281             :                 }
     282           0 :                 r2->out.result = _srvsvc_NetSessDel(p, r2);
     283           0 :                 break;
     284             :         }
     285           4 :         case 14: { /* srvsvc_NetShareAdd */
     286           4 :                 struct srvsvc_NetShareAdd *r2 = (struct srvsvc_NetShareAdd *)r;
     287           4 :                 if (DEBUGLEVEL >= 10) {
     288           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareAdd, NDR_IN, r2);
     289             :                 }
     290           4 :                 NDR_ZERO_STRUCT(r2->out);
     291           4 :                 r2->out.parm_error = r2->in.parm_error;
     292           4 :                 r2->out.result = _srvsvc_NetShareAdd(p, r2);
     293           4 :                 break;
     294             :         }
     295         124 :         case 15: { /* srvsvc_NetShareEnumAll */
     296         124 :                 struct srvsvc_NetShareEnumAll *r2 = (struct srvsvc_NetShareEnumAll *)r;
     297         124 :                 if (DEBUGLEVEL >= 10) {
     298           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareEnumAll, NDR_IN, r2);
     299             :                 }
     300         124 :                 NDR_ZERO_STRUCT(r2->out);
     301         124 :                 r2->out.info_ctr = r2->in.info_ctr;
     302         124 :                 r2->out.resume_handle = r2->in.resume_handle;
     303         124 :                 r2->out.totalentries = talloc_zero(r2, uint32_t);
     304         124 :                 if (r2->out.totalentries == NULL) {
     305           0 :                         status = NT_STATUS_NO_MEMORY;
     306           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     307           0 :                         goto fail;
     308             :                 }
     309             : 
     310         124 :                 r2->out.result = _srvsvc_NetShareEnumAll(p, r2);
     311         124 :                 break;
     312             :         }
     313        1217 :         case 16: { /* srvsvc_NetShareGetInfo */
     314        1217 :                 struct srvsvc_NetShareGetInfo *r2 = (struct srvsvc_NetShareGetInfo *)r;
     315        1217 :                 if (DEBUGLEVEL >= 10) {
     316           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareGetInfo, NDR_IN, r2);
     317             :                 }
     318        1217 :                 NDR_ZERO_STRUCT(r2->out);
     319        1217 :                 r2->out.info = talloc_zero(r2, union srvsvc_NetShareInfo);
     320        1217 :                 if (r2->out.info == NULL) {
     321           0 :                         status = NT_STATUS_NO_MEMORY;
     322           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     323           0 :                         goto fail;
     324             :                 }
     325             : 
     326        1217 :                 r2->out.result = _srvsvc_NetShareGetInfo(p, r2);
     327        1217 :                 break;
     328             :         }
     329          33 :         case 17: { /* srvsvc_NetShareSetInfo */
     330          33 :                 struct srvsvc_NetShareSetInfo *r2 = (struct srvsvc_NetShareSetInfo *)r;
     331          33 :                 if (DEBUGLEVEL >= 10) {
     332           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareSetInfo, NDR_IN, r2);
     333             :                 }
     334          33 :                 NDR_ZERO_STRUCT(r2->out);
     335          33 :                 r2->out.parm_error = r2->in.parm_error;
     336          33 :                 r2->out.result = _srvsvc_NetShareSetInfo(p, r2);
     337          33 :                 break;
     338             :         }
     339           4 :         case 18: { /* srvsvc_NetShareDel */
     340           4 :                 struct srvsvc_NetShareDel *r2 = (struct srvsvc_NetShareDel *)r;
     341           4 :                 if (DEBUGLEVEL >= 10) {
     342           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDel, NDR_IN, r2);
     343             :                 }
     344           4 :                 r2->out.result = _srvsvc_NetShareDel(p, r2);
     345           4 :                 break;
     346             :         }
     347           0 :         case 19: { /* srvsvc_NetShareDelSticky */
     348           0 :                 struct srvsvc_NetShareDelSticky *r2 = (struct srvsvc_NetShareDelSticky *)r;
     349           0 :                 if (DEBUGLEVEL >= 10) {
     350           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelSticky, NDR_IN, r2);
     351             :                 }
     352           0 :                 r2->out.result = _srvsvc_NetShareDelSticky(p, r2);
     353           0 :                 break;
     354             :         }
     355           8 :         case 20: { /* srvsvc_NetShareCheck */
     356           8 :                 struct srvsvc_NetShareCheck *r2 = (struct srvsvc_NetShareCheck *)r;
     357           8 :                 if (DEBUGLEVEL >= 10) {
     358           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareCheck, NDR_IN, r2);
     359             :                 }
     360           8 :                 NDR_ZERO_STRUCT(r2->out);
     361           8 :                 r2->out.type = talloc_zero(r2, enum srvsvc_ShareType);
     362           8 :                 if (r2->out.type == NULL) {
     363           0 :                         status = NT_STATUS_NO_MEMORY;
     364           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     365           0 :                         goto fail;
     366             :                 }
     367             : 
     368           8 :                 r2->out.result = _srvsvc_NetShareCheck(p, r2);
     369           8 :                 break;
     370             :         }
     371          48 :         case 21: { /* srvsvc_NetSrvGetInfo */
     372          48 :                 struct srvsvc_NetSrvGetInfo *r2 = (struct srvsvc_NetSrvGetInfo *)r;
     373          48 :                 if (DEBUGLEVEL >= 10) {
     374           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSrvGetInfo, NDR_IN, r2);
     375             :                 }
     376          48 :                 NDR_ZERO_STRUCT(r2->out);
     377          48 :                 r2->out.info = talloc_zero(r2, union srvsvc_NetSrvInfo);
     378          48 :                 if (r2->out.info == NULL) {
     379           0 :                         status = NT_STATUS_NO_MEMORY;
     380           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     381           0 :                         goto fail;
     382             :                 }
     383             : 
     384          48 :                 r2->out.result = _srvsvc_NetSrvGetInfo(p, r2);
     385          48 :                 break;
     386             :         }
     387           0 :         case 22: { /* srvsvc_NetSrvSetInfo */
     388           0 :                 struct srvsvc_NetSrvSetInfo *r2 = (struct srvsvc_NetSrvSetInfo *)r;
     389           0 :                 if (DEBUGLEVEL >= 10) {
     390           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSrvSetInfo, NDR_IN, r2);
     391             :                 }
     392           0 :                 NDR_ZERO_STRUCT(r2->out);
     393           0 :                 r2->out.parm_error = r2->in.parm_error;
     394           0 :                 r2->out.result = _srvsvc_NetSrvSetInfo(p, r2);
     395           0 :                 break;
     396             :         }
     397           4 :         case 23: { /* srvsvc_NetDiskEnum */
     398           4 :                 struct srvsvc_NetDiskEnum *r2 = (struct srvsvc_NetDiskEnum *)r;
     399           4 :                 if (DEBUGLEVEL >= 10) {
     400           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetDiskEnum, NDR_IN, r2);
     401             :                 }
     402           4 :                 NDR_ZERO_STRUCT(r2->out);
     403           4 :                 r2->out.info = r2->in.info;
     404           4 :                 r2->out.resume_handle = r2->in.resume_handle;
     405           4 :                 r2->out.totalentries = talloc_zero(r2, uint32_t);
     406           4 :                 if (r2->out.totalentries == NULL) {
     407           0 :                         status = NT_STATUS_NO_MEMORY;
     408           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     409           0 :                         goto fail;
     410             :                 }
     411             : 
     412           4 :                 r2->out.result = _srvsvc_NetDiskEnum(p, r2);
     413           4 :                 break;
     414             :         }
     415           0 :         case 24: { /* srvsvc_NetServerStatisticsGet */
     416           0 :                 struct srvsvc_NetServerStatisticsGet *r2 = (struct srvsvc_NetServerStatisticsGet *)r;
     417           0 :                 if (DEBUGLEVEL >= 10) {
     418           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerStatisticsGet, NDR_IN, r2);
     419             :                 }
     420           0 :                 NDR_ZERO_STRUCT(r2->out);
     421           0 :                 r2->out.stats = talloc_zero(r2, struct srvsvc_Statistics *);
     422           0 :                 if (r2->out.stats == NULL) {
     423           0 :                         status = NT_STATUS_NO_MEMORY;
     424           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     425           0 :                         goto fail;
     426             :                 }
     427             : 
     428           0 :                 r2->out.result = _srvsvc_NetServerStatisticsGet(p, r2);
     429           0 :                 break;
     430             :         }
     431           0 :         case 25: { /* srvsvc_NetTransportAdd */
     432           0 :                 struct srvsvc_NetTransportAdd *r2 = (struct srvsvc_NetTransportAdd *)r;
     433           0 :                 if (DEBUGLEVEL >= 10) {
     434           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportAdd, NDR_IN, r2);
     435             :                 }
     436           0 :                 r2->out.result = _srvsvc_NetTransportAdd(p, r2);
     437           0 :                 break;
     438             :         }
     439           4 :         case 26: { /* srvsvc_NetTransportEnum */
     440           4 :                 struct srvsvc_NetTransportEnum *r2 = (struct srvsvc_NetTransportEnum *)r;
     441           4 :                 if (DEBUGLEVEL >= 10) {
     442           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportEnum, NDR_IN, r2);
     443             :                 }
     444           4 :                 NDR_ZERO_STRUCT(r2->out);
     445           4 :                 r2->out.transports = r2->in.transports;
     446           4 :                 r2->out.resume_handle = r2->in.resume_handle;
     447           4 :                 r2->out.totalentries = talloc_zero(r2, uint32_t);
     448           4 :                 if (r2->out.totalentries == NULL) {
     449           0 :                         status = NT_STATUS_NO_MEMORY;
     450           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     451           0 :                         goto fail;
     452             :                 }
     453             : 
     454           4 :                 r2->out.result = _srvsvc_NetTransportEnum(p, r2);
     455           4 :                 break;
     456             :         }
     457           0 :         case 27: { /* srvsvc_NetTransportDel */
     458           0 :                 struct srvsvc_NetTransportDel *r2 = (struct srvsvc_NetTransportDel *)r;
     459           0 :                 if (DEBUGLEVEL >= 10) {
     460           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportDel, NDR_IN, r2);
     461             :                 }
     462           0 :                 r2->out.result = _srvsvc_NetTransportDel(p, r2);
     463           0 :                 break;
     464             :         }
     465          16 :         case 28: { /* srvsvc_NetRemoteTOD */
     466          16 :                 struct srvsvc_NetRemoteTOD *r2 = (struct srvsvc_NetRemoteTOD *)r;
     467          16 :                 if (DEBUGLEVEL >= 10) {
     468           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetRemoteTOD, NDR_IN, r2);
     469             :                 }
     470          16 :                 NDR_ZERO_STRUCT(r2->out);
     471          16 :                 r2->out.info = talloc_zero(r2, struct srvsvc_NetRemoteTODInfo *);
     472          16 :                 if (r2->out.info == NULL) {
     473           0 :                         status = NT_STATUS_NO_MEMORY;
     474           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     475           0 :                         goto fail;
     476             :                 }
     477             : 
     478          16 :                 r2->out.result = _srvsvc_NetRemoteTOD(p, r2);
     479          16 :                 break;
     480             :         }
     481           0 :         case 29: { /* srvsvc_NetSetServiceBits */
     482           0 :                 struct srvsvc_NetSetServiceBits *r2 = (struct srvsvc_NetSetServiceBits *)r;
     483           0 :                 if (DEBUGLEVEL >= 10) {
     484           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSetServiceBits, NDR_IN, r2);
     485             :                 }
     486           0 :                 r2->out.result = _srvsvc_NetSetServiceBits(p, r2);
     487           0 :                 break;
     488             :         }
     489           0 :         case 30: { /* srvsvc_NetPathType */
     490           0 :                 struct srvsvc_NetPathType *r2 = (struct srvsvc_NetPathType *)r;
     491           0 :                 if (DEBUGLEVEL >= 10) {
     492           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathType, NDR_IN, r2);
     493             :                 }
     494           0 :                 NDR_ZERO_STRUCT(r2->out);
     495           0 :                 r2->out.pathtype = talloc_zero(r2, uint32_t);
     496           0 :                 if (r2->out.pathtype == NULL) {
     497           0 :                         status = NT_STATUS_NO_MEMORY;
     498           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     499           0 :                         goto fail;
     500             :                 }
     501             : 
     502           0 :                 r2->out.result = _srvsvc_NetPathType(p, r2);
     503           0 :                 break;
     504             :         }
     505           0 :         case 31: { /* srvsvc_NetPathCanonicalize */
     506           0 :                 struct srvsvc_NetPathCanonicalize *r2 = (struct srvsvc_NetPathCanonicalize *)r;
     507           0 :                 if (DEBUGLEVEL >= 10) {
     508           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathCanonicalize, NDR_IN, r2);
     509             :                 }
     510           0 :                 NDR_ZERO_STRUCT(r2->out);
     511           0 :                 r2->out.pathtype = r2->in.pathtype;
     512           0 :                 r2->out.can_path = talloc_zero_array(r2, uint8_t, r2->in.maxbuf);
     513           0 :                 if (r2->out.can_path == NULL) {
     514           0 :                         status = NT_STATUS_NO_MEMORY;
     515           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     516           0 :                         goto fail;
     517             :                 }
     518             : 
     519           0 :                 r2->out.result = _srvsvc_NetPathCanonicalize(p, r2);
     520           0 :                 break;
     521             :         }
     522           0 :         case 32: { /* srvsvc_NetPathCompare */
     523           0 :                 struct srvsvc_NetPathCompare *r2 = (struct srvsvc_NetPathCompare *)r;
     524           0 :                 if (DEBUGLEVEL >= 10) {
     525           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathCompare, NDR_IN, r2);
     526             :                 }
     527           0 :                 r2->out.result = _srvsvc_NetPathCompare(p, r2);
     528           0 :                 break;
     529             :         }
     530       11128 :         case 33: { /* srvsvc_NetNameValidate */
     531       11128 :                 struct srvsvc_NetNameValidate *r2 = (struct srvsvc_NetNameValidate *)r;
     532       11128 :                 if (DEBUGLEVEL >= 10) {
     533           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetNameValidate, NDR_IN, r2);
     534             :                 }
     535       11128 :                 r2->out.result = _srvsvc_NetNameValidate(p, r2);
     536       11128 :                 break;
     537             :         }
     538           0 :         case 34: { /* srvsvc_NETRPRNAMECANONICALIZE */
     539           0 :                 struct srvsvc_NETRPRNAMECANONICALIZE *r2 = (struct srvsvc_NETRPRNAMECANONICALIZE *)r;
     540           0 :                 if (DEBUGLEVEL >= 10) {
     541           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRPRNAMECANONICALIZE, NDR_IN, r2);
     542             :                 }
     543           0 :                 r2->out.result = _srvsvc_NETRPRNAMECANONICALIZE(p, r2);
     544           0 :                 break;
     545             :         }
     546           0 :         case 35: { /* srvsvc_NetPRNameCompare */
     547           0 :                 struct srvsvc_NetPRNameCompare *r2 = (struct srvsvc_NetPRNameCompare *)r;
     548           0 :                 if (DEBUGLEVEL >= 10) {
     549           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPRNameCompare, NDR_IN, r2);
     550             :                 }
     551           0 :                 r2->out.result = _srvsvc_NetPRNameCompare(p, r2);
     552           0 :                 break;
     553             :         }
     554          68 :         case 36: { /* srvsvc_NetShareEnum */
     555          68 :                 struct srvsvc_NetShareEnum *r2 = (struct srvsvc_NetShareEnum *)r;
     556          68 :                 if (DEBUGLEVEL >= 10) {
     557           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareEnum, NDR_IN, r2);
     558             :                 }
     559          68 :                 NDR_ZERO_STRUCT(r2->out);
     560          68 :                 r2->out.info_ctr = r2->in.info_ctr;
     561          68 :                 r2->out.resume_handle = r2->in.resume_handle;
     562          68 :                 r2->out.totalentries = talloc_zero(r2, uint32_t);
     563          68 :                 if (r2->out.totalentries == NULL) {
     564           0 :                         status = NT_STATUS_NO_MEMORY;
     565           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     566           0 :                         goto fail;
     567             :                 }
     568             : 
     569          68 :                 r2->out.result = _srvsvc_NetShareEnum(p, r2);
     570          68 :                 break;
     571             :         }
     572           0 :         case 37: { /* srvsvc_NetShareDelStart */
     573           0 :                 struct srvsvc_NetShareDelStart *r2 = (struct srvsvc_NetShareDelStart *)r;
     574           0 :                 if (DEBUGLEVEL >= 10) {
     575           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelStart, NDR_IN, r2);
     576             :                 }
     577           0 :                 NDR_ZERO_STRUCT(r2->out);
     578           0 :                 r2->out.hnd = talloc_zero(r2, struct policy_handle);
     579           0 :                 if (r2->out.hnd == NULL) {
     580           0 :                         status = NT_STATUS_NO_MEMORY;
     581           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     582           0 :                         goto fail;
     583             :                 }
     584             : 
     585           0 :                 r2->out.result = _srvsvc_NetShareDelStart(p, r2);
     586           0 :                 break;
     587             :         }
     588           0 :         case 38: { /* srvsvc_NetShareDelCommit */
     589           0 :                 struct srvsvc_NetShareDelCommit *r2 = (struct srvsvc_NetShareDelCommit *)r;
     590           0 :                 if (DEBUGLEVEL >= 10) {
     591           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelCommit, NDR_IN, r2);
     592             :                 }
     593           0 :                 NDR_ZERO_STRUCT(r2->out);
     594           0 :                 r2->out.hnd = r2->in.hnd;
     595           0 :                 r2->out.result = _srvsvc_NetShareDelCommit(p, r2);
     596           0 :                 break;
     597             :         }
     598           0 :         case 39: { /* srvsvc_NetGetFileSecurity */
     599           0 :                 struct srvsvc_NetGetFileSecurity *r2 = (struct srvsvc_NetGetFileSecurity *)r;
     600           0 :                 if (DEBUGLEVEL >= 10) {
     601           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetGetFileSecurity, NDR_IN, r2);
     602             :                 }
     603           0 :                 NDR_ZERO_STRUCT(r2->out);
     604           0 :                 r2->out.sd_buf = talloc_zero(r2, struct sec_desc_buf *);
     605           0 :                 if (r2->out.sd_buf == NULL) {
     606           0 :                         status = NT_STATUS_NO_MEMORY;
     607           0 :                         p->fault_state = DCERPC_FAULT_CANT_PERFORM;
     608           0 :                         goto fail;
     609             :                 }
     610             : 
     611           0 :                 r2->out.result = _srvsvc_NetGetFileSecurity(p, r2);
     612           0 :                 break;
     613             :         }
     614           0 :         case 40: { /* srvsvc_NetSetFileSecurity */
     615           0 :                 struct srvsvc_NetSetFileSecurity *r2 = (struct srvsvc_NetSetFileSecurity *)r;
     616           0 :                 if (DEBUGLEVEL >= 10) {
     617           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSetFileSecurity, NDR_IN, r2);
     618             :                 }
     619           0 :                 r2->out.result = _srvsvc_NetSetFileSecurity(p, r2);
     620           0 :                 break;
     621             :         }
     622           0 :         case 41: { /* srvsvc_NetServerTransportAddEx */
     623           0 :                 struct srvsvc_NetServerTransportAddEx *r2 = (struct srvsvc_NetServerTransportAddEx *)r;
     624           0 :                 if (DEBUGLEVEL >= 10) {
     625           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerTransportAddEx, NDR_IN, r2);
     626             :                 }
     627           0 :                 r2->out.result = _srvsvc_NetServerTransportAddEx(p, r2);
     628           0 :                 break;
     629             :         }
     630           0 :         case 42: { /* srvsvc_NetServerSetServiceBitsEx */
     631           0 :                 struct srvsvc_NetServerSetServiceBitsEx *r2 = (struct srvsvc_NetServerSetServiceBitsEx *)r;
     632           0 :                 if (DEBUGLEVEL >= 10) {
     633           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerSetServiceBitsEx, NDR_IN, r2);
     634             :                 }
     635           0 :                 r2->out.result = _srvsvc_NetServerSetServiceBitsEx(p, r2);
     636           0 :                 break;
     637             :         }
     638           0 :         case 43: { /* srvsvc_NETRDFSGETVERSION */
     639           0 :                 struct srvsvc_NETRDFSGETVERSION *r2 = (struct srvsvc_NETRDFSGETVERSION *)r;
     640           0 :                 if (DEBUGLEVEL >= 10) {
     641           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSGETVERSION, NDR_IN, r2);
     642             :                 }
     643           0 :                 r2->out.result = _srvsvc_NETRDFSGETVERSION(p, r2);
     644           0 :                 break;
     645             :         }
     646           0 :         case 44: { /* srvsvc_NETRDFSCREATELOCALPARTITION */
     647           0 :                 struct srvsvc_NETRDFSCREATELOCALPARTITION *r2 = (struct srvsvc_NETRDFSCREATELOCALPARTITION *)r;
     648           0 :                 if (DEBUGLEVEL >= 10) {
     649           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSCREATELOCALPARTITION, NDR_IN, r2);
     650             :                 }
     651           0 :                 r2->out.result = _srvsvc_NETRDFSCREATELOCALPARTITION(p, r2);
     652           0 :                 break;
     653             :         }
     654           0 :         case 45: { /* srvsvc_NETRDFSDELETELOCALPARTITION */
     655           0 :                 struct srvsvc_NETRDFSDELETELOCALPARTITION *r2 = (struct srvsvc_NETRDFSDELETELOCALPARTITION *)r;
     656           0 :                 if (DEBUGLEVEL >= 10) {
     657           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSDELETELOCALPARTITION, NDR_IN, r2);
     658             :                 }
     659           0 :                 r2->out.result = _srvsvc_NETRDFSDELETELOCALPARTITION(p, r2);
     660           0 :                 break;
     661             :         }
     662           0 :         case 46: { /* srvsvc_NETRDFSSETLOCALVOLUMESTATE */
     663           0 :                 struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r2 = (struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *)r;
     664           0 :                 if (DEBUGLEVEL >= 10) {
     665           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSSETLOCALVOLUMESTATE, NDR_IN, r2);
     666             :                 }
     667           0 :                 r2->out.result = _srvsvc_NETRDFSSETLOCALVOLUMESTATE(p, r2);
     668           0 :                 break;
     669             :         }
     670           0 :         case 47: { /* srvsvc_NETRDFSSETSERVERINFO */
     671           0 :                 struct srvsvc_NETRDFSSETSERVERINFO *r2 = (struct srvsvc_NETRDFSSETSERVERINFO *)r;
     672           0 :                 if (DEBUGLEVEL >= 10) {
     673           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSSETSERVERINFO, NDR_IN, r2);
     674             :                 }
     675           0 :                 r2->out.result = _srvsvc_NETRDFSSETSERVERINFO(p, r2);
     676           0 :                 break;
     677             :         }
     678           0 :         case 48: { /* srvsvc_NETRDFSCREATEEXITPOINT */
     679           0 :                 struct srvsvc_NETRDFSCREATEEXITPOINT *r2 = (struct srvsvc_NETRDFSCREATEEXITPOINT *)r;
     680           0 :                 if (DEBUGLEVEL >= 10) {
     681           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSCREATEEXITPOINT, NDR_IN, r2);
     682             :                 }
     683           0 :                 r2->out.result = _srvsvc_NETRDFSCREATEEXITPOINT(p, r2);
     684           0 :                 break;
     685             :         }
     686           0 :         case 49: { /* srvsvc_NETRDFSDELETEEXITPOINT */
     687           0 :                 struct srvsvc_NETRDFSDELETEEXITPOINT *r2 = (struct srvsvc_NETRDFSDELETEEXITPOINT *)r;
     688           0 :                 if (DEBUGLEVEL >= 10) {
     689           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSDELETEEXITPOINT, NDR_IN, r2);
     690             :                 }
     691           0 :                 r2->out.result = _srvsvc_NETRDFSDELETEEXITPOINT(p, r2);
     692           0 :                 break;
     693             :         }
     694           0 :         case 50: { /* srvsvc_NETRDFSMODIFYPREFIX */
     695           0 :                 struct srvsvc_NETRDFSMODIFYPREFIX *r2 = (struct srvsvc_NETRDFSMODIFYPREFIX *)r;
     696           0 :                 if (DEBUGLEVEL >= 10) {
     697           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSMODIFYPREFIX, NDR_IN, r2);
     698             :                 }
     699           0 :                 r2->out.result = _srvsvc_NETRDFSMODIFYPREFIX(p, r2);
     700           0 :                 break;
     701             :         }
     702           0 :         case 51: { /* srvsvc_NETRDFSFIXLOCALVOLUME */
     703           0 :                 struct srvsvc_NETRDFSFIXLOCALVOLUME *r2 = (struct srvsvc_NETRDFSFIXLOCALVOLUME *)r;
     704           0 :                 if (DEBUGLEVEL >= 10) {
     705           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSFIXLOCALVOLUME, NDR_IN, r2);
     706             :                 }
     707           0 :                 r2->out.result = _srvsvc_NETRDFSFIXLOCALVOLUME(p, r2);
     708           0 :                 break;
     709             :         }
     710           0 :         case 52: { /* srvsvc_NETRDFSMANAGERREPORTSITEINFO */
     711           0 :                 struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r2 = (struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *)r;
     712           0 :                 if (DEBUGLEVEL >= 10) {
     713           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSMANAGERREPORTSITEINFO, NDR_IN, r2);
     714             :                 }
     715           0 :                 r2->out.result = _srvsvc_NETRDFSMANAGERREPORTSITEINFO(p, r2);
     716           0 :                 break;
     717             :         }
     718           0 :         case 53: { /* srvsvc_NETRSERVERTRANSPORTDELEX */
     719           0 :                 struct srvsvc_NETRSERVERTRANSPORTDELEX *r2 = (struct srvsvc_NETRSERVERTRANSPORTDELEX *)r;
     720           0 :                 if (DEBUGLEVEL >= 10) {
     721           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRSERVERTRANSPORTDELEX, NDR_IN, r2);
     722             :                 }
     723           0 :                 r2->out.result = _srvsvc_NETRSERVERTRANSPORTDELEX(p, r2);
     724           0 :                 break;
     725             :         }
     726           0 :         default:
     727           0 :                 dce_call->fault_code = DCERPC_FAULT_OP_RNG_ERROR;
     728           0 :                 break;
     729             :         }
     730             : 
     731       12718 : fail:
     732             :         /* Unimpersonate */
     733       12718 :         if (impersonated) {
     734       12686 :                 unbecome_authenticated_pipe_user();
     735             :         }
     736             : 
     737       12718 :         p->dce_call = NULL;
     738       12718 :         p->mem_ctx = NULL;
     739             :         /* Restore session info */
     740       12718 :         p->session_info = pipe_session_info;
     741       12718 :         p->auth.auth_type = 0;
     742       12718 :         p->auth.auth_level = 0;
     743       12718 :         p->auth.auth_context_id = 0;
     744             :         /* Check pipes struct fault state */
     745       12718 :         if (p->fault_state != 0) {
     746          20 :                 dce_call->fault_code = p->fault_state;
     747             :         }
     748       12718 :         if (dce_call->fault_code != 0) {
     749          20 :                 status = NT_STATUS_NET_WRITE_FAULT;
     750             :         }
     751             : 
     752       12718 :         return status;
     753             : }
     754             : 
     755       12686 : NTSTATUS srvsvc__op_dispatch(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, void *r)
     756             : {
     757       12686 :         return srvsvc__op_dispatch_internal(dce_call, mem_ctx, r, S3COMPAT_RPC_DISPATCH_EXTERNAL);
     758             : }
     759             : 
     760       12698 : NTSTATUS srvsvc__op_reply(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, void *r)
     761             : {
     762       12698 :         uint16_t opnum = dce_call->pkt.u.request.opnum;
     763             : 
     764       12698 :         switch (opnum) {
     765           0 :         case 0: { /* srvsvc_NetCharDevEnum */
     766           0 :                 struct srvsvc_NetCharDevEnum *r2 = (struct srvsvc_NetCharDevEnum *)r;
     767           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     768           0 :                         DEBUG(5,("function srvsvc_NetCharDevEnum replied async\n"));
     769             :                 }
     770           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     771           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevEnum, NDR_OUT | NDR_SET_VALUES, r2);
     772             :                 }
     773           0 :                 if (dce_call->fault_code != 0) {
     774           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     775             :                 }
     776           0 :                 break;
     777             :         }
     778           0 :         case 1: { /* srvsvc_NetCharDevGetInfo */
     779           0 :                 struct srvsvc_NetCharDevGetInfo *r2 = (struct srvsvc_NetCharDevGetInfo *)r;
     780           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     781           0 :                         DEBUG(5,("function srvsvc_NetCharDevGetInfo replied async\n"));
     782             :                 }
     783           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     784           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevGetInfo, NDR_OUT | NDR_SET_VALUES, r2);
     785             :                 }
     786           0 :                 if (dce_call->fault_code != 0) {
     787           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevGetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     788             :                 }
     789           0 :                 break;
     790             :         }
     791           0 :         case 2: { /* srvsvc_NetCharDevControl */
     792           0 :                 struct srvsvc_NetCharDevControl *r2 = (struct srvsvc_NetCharDevControl *)r;
     793           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     794           0 :                         DEBUG(5,("function srvsvc_NetCharDevControl replied async\n"));
     795             :                 }
     796           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     797           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevControl, NDR_OUT | NDR_SET_VALUES, r2);
     798             :                 }
     799           0 :                 if (dce_call->fault_code != 0) {
     800           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevControl\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     801             :                 }
     802           0 :                 break;
     803             :         }
     804           0 :         case 3: { /* srvsvc_NetCharDevQEnum */
     805           0 :                 struct srvsvc_NetCharDevQEnum *r2 = (struct srvsvc_NetCharDevQEnum *)r;
     806           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     807           0 :                         DEBUG(5,("function srvsvc_NetCharDevQEnum replied async\n"));
     808             :                 }
     809           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     810           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQEnum, NDR_OUT | NDR_SET_VALUES, r2);
     811             :                 }
     812           0 :                 if (dce_call->fault_code != 0) {
     813           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevQEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     814             :                 }
     815           0 :                 break;
     816             :         }
     817           0 :         case 4: { /* srvsvc_NetCharDevQGetInfo */
     818           0 :                 struct srvsvc_NetCharDevQGetInfo *r2 = (struct srvsvc_NetCharDevQGetInfo *)r;
     819           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     820           0 :                         DEBUG(5,("function srvsvc_NetCharDevQGetInfo replied async\n"));
     821             :                 }
     822           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     823           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQGetInfo, NDR_OUT | NDR_SET_VALUES, r2);
     824             :                 }
     825           0 :                 if (dce_call->fault_code != 0) {
     826           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevQGetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     827             :                 }
     828           0 :                 break;
     829             :         }
     830           0 :         case 5: { /* srvsvc_NetCharDevQSetInfo */
     831           0 :                 struct srvsvc_NetCharDevQSetInfo *r2 = (struct srvsvc_NetCharDevQSetInfo *)r;
     832           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     833           0 :                         DEBUG(5,("function srvsvc_NetCharDevQSetInfo replied async\n"));
     834             :                 }
     835           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     836           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQSetInfo, NDR_OUT | NDR_SET_VALUES, r2);
     837             :                 }
     838           0 :                 if (dce_call->fault_code != 0) {
     839           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevQSetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     840             :                 }
     841           0 :                 break;
     842             :         }
     843           0 :         case 6: { /* srvsvc_NetCharDevQPurge */
     844           0 :                 struct srvsvc_NetCharDevQPurge *r2 = (struct srvsvc_NetCharDevQPurge *)r;
     845           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     846           0 :                         DEBUG(5,("function srvsvc_NetCharDevQPurge replied async\n"));
     847             :                 }
     848           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     849           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQPurge, NDR_OUT | NDR_SET_VALUES, r2);
     850             :                 }
     851           0 :                 if (dce_call->fault_code != 0) {
     852           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevQPurge\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     853             :                 }
     854           0 :                 break;
     855             :         }
     856           0 :         case 7: { /* srvsvc_NetCharDevQPurgeSelf */
     857           0 :                 struct srvsvc_NetCharDevQPurgeSelf *r2 = (struct srvsvc_NetCharDevQPurgeSelf *)r;
     858           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     859           0 :                         DEBUG(5,("function srvsvc_NetCharDevQPurgeSelf replied async\n"));
     860             :                 }
     861           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     862           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQPurgeSelf, NDR_OUT | NDR_SET_VALUES, r2);
     863             :                 }
     864           0 :                 if (dce_call->fault_code != 0) {
     865           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevQPurgeSelf\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     866             :                 }
     867           0 :                 break;
     868             :         }
     869           8 :         case 8: { /* srvsvc_NetConnEnum */
     870           8 :                 struct srvsvc_NetConnEnum *r2 = (struct srvsvc_NetConnEnum *)r;
     871           8 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     872           0 :                         DEBUG(5,("function srvsvc_NetConnEnum replied async\n"));
     873             :                 }
     874           8 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     875           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetConnEnum, NDR_OUT | NDR_SET_VALUES, r2);
     876             :                 }
     877           8 :                 if (dce_call->fault_code != 0) {
     878           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetConnEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     879             :                 }
     880           8 :                 break;
     881             :         }
     882          10 :         case 9: { /* srvsvc_NetFileEnum */
     883          10 :                 struct srvsvc_NetFileEnum *r2 = (struct srvsvc_NetFileEnum *)r;
     884          10 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     885           0 :                         DEBUG(5,("function srvsvc_NetFileEnum replied async\n"));
     886             :                 }
     887          10 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     888           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileEnum, NDR_OUT | NDR_SET_VALUES, r2);
     889             :                 }
     890          10 :                 if (dce_call->fault_code != 0) {
     891           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetFileEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     892             :                 }
     893          10 :                 break;
     894             :         }
     895           0 :         case 10: { /* srvsvc_NetFileGetInfo */
     896           0 :                 struct srvsvc_NetFileGetInfo *r2 = (struct srvsvc_NetFileGetInfo *)r;
     897           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     898           0 :                         DEBUG(5,("function srvsvc_NetFileGetInfo replied async\n"));
     899             :                 }
     900           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     901           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileGetInfo, NDR_OUT | NDR_SET_VALUES, r2);
     902             :                 }
     903           0 :                 if (dce_call->fault_code != 0) {
     904           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetFileGetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     905             :                 }
     906           0 :                 break;
     907             :         }
     908           0 :         case 11: { /* srvsvc_NetFileClose */
     909           0 :                 struct srvsvc_NetFileClose *r2 = (struct srvsvc_NetFileClose *)r;
     910           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     911           0 :                         DEBUG(5,("function srvsvc_NetFileClose replied async\n"));
     912             :                 }
     913           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     914           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileClose, NDR_OUT | NDR_SET_VALUES, r2);
     915             :                 }
     916           0 :                 if (dce_call->fault_code != 0) {
     917           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetFileClose\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     918             :                 }
     919           0 :                 break;
     920             :         }
     921          34 :         case 12: { /* srvsvc_NetSessEnum */
     922          34 :                 struct srvsvc_NetSessEnum *r2 = (struct srvsvc_NetSessEnum *)r;
     923          34 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     924           0 :                         DEBUG(5,("function srvsvc_NetSessEnum replied async\n"));
     925             :                 }
     926          34 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     927           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSessEnum, NDR_OUT | NDR_SET_VALUES, r2);
     928             :                 }
     929          34 :                 if (dce_call->fault_code != 0) {
     930           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetSessEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     931             :                 }
     932          34 :                 break;
     933             :         }
     934           0 :         case 13: { /* srvsvc_NetSessDel */
     935           0 :                 struct srvsvc_NetSessDel *r2 = (struct srvsvc_NetSessDel *)r;
     936           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     937           0 :                         DEBUG(5,("function srvsvc_NetSessDel replied async\n"));
     938             :                 }
     939           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     940           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSessDel, NDR_OUT | NDR_SET_VALUES, r2);
     941             :                 }
     942           0 :                 if (dce_call->fault_code != 0) {
     943           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetSessDel\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     944             :                 }
     945           0 :                 break;
     946             :         }
     947           4 :         case 14: { /* srvsvc_NetShareAdd */
     948           4 :                 struct srvsvc_NetShareAdd *r2 = (struct srvsvc_NetShareAdd *)r;
     949           4 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     950           0 :                         DEBUG(5,("function srvsvc_NetShareAdd replied async\n"));
     951             :                 }
     952           4 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     953           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareAdd, NDR_OUT | NDR_SET_VALUES, r2);
     954             :                 }
     955           4 :                 if (dce_call->fault_code != 0) {
     956           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareAdd\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     957             :                 }
     958           4 :                 break;
     959             :         }
     960         124 :         case 15: { /* srvsvc_NetShareEnumAll */
     961         124 :                 struct srvsvc_NetShareEnumAll *r2 = (struct srvsvc_NetShareEnumAll *)r;
     962         124 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     963           0 :                         DEBUG(5,("function srvsvc_NetShareEnumAll replied async\n"));
     964             :                 }
     965         124 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     966           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareEnumAll, NDR_OUT | NDR_SET_VALUES, r2);
     967             :                 }
     968         124 :                 if (dce_call->fault_code != 0) {
     969           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareEnumAll\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     970             :                 }
     971         124 :                 break;
     972             :         }
     973        1217 :         case 16: { /* srvsvc_NetShareGetInfo */
     974        1217 :                 struct srvsvc_NetShareGetInfo *r2 = (struct srvsvc_NetShareGetInfo *)r;
     975        1217 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     976           0 :                         DEBUG(5,("function srvsvc_NetShareGetInfo replied async\n"));
     977             :                 }
     978        1217 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     979           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareGetInfo, NDR_OUT | NDR_SET_VALUES, r2);
     980             :                 }
     981        1217 :                 if (dce_call->fault_code != 0) {
     982           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareGetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     983             :                 }
     984        1217 :                 break;
     985             :         }
     986          33 :         case 17: { /* srvsvc_NetShareSetInfo */
     987          33 :                 struct srvsvc_NetShareSetInfo *r2 = (struct srvsvc_NetShareSetInfo *)r;
     988          33 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
     989           0 :                         DEBUG(5,("function srvsvc_NetShareSetInfo replied async\n"));
     990             :                 }
     991          33 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
     992           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareSetInfo, NDR_OUT | NDR_SET_VALUES, r2);
     993             :                 }
     994          33 :                 if (dce_call->fault_code != 0) {
     995           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareSetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
     996             :                 }
     997          33 :                 break;
     998             :         }
     999           4 :         case 18: { /* srvsvc_NetShareDel */
    1000           4 :                 struct srvsvc_NetShareDel *r2 = (struct srvsvc_NetShareDel *)r;
    1001           4 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1002           0 :                         DEBUG(5,("function srvsvc_NetShareDel replied async\n"));
    1003             :                 }
    1004           4 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1005           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDel, NDR_OUT | NDR_SET_VALUES, r2);
    1006             :                 }
    1007           4 :                 if (dce_call->fault_code != 0) {
    1008           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareDel\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1009             :                 }
    1010           4 :                 break;
    1011             :         }
    1012           0 :         case 19: { /* srvsvc_NetShareDelSticky */
    1013           0 :                 struct srvsvc_NetShareDelSticky *r2 = (struct srvsvc_NetShareDelSticky *)r;
    1014           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1015           0 :                         DEBUG(5,("function srvsvc_NetShareDelSticky replied async\n"));
    1016             :                 }
    1017           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1018           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelSticky, NDR_OUT | NDR_SET_VALUES, r2);
    1019             :                 }
    1020           0 :                 if (dce_call->fault_code != 0) {
    1021           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareDelSticky\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1022             :                 }
    1023           0 :                 break;
    1024             :         }
    1025           0 :         case 20: { /* srvsvc_NetShareCheck */
    1026           0 :                 struct srvsvc_NetShareCheck *r2 = (struct srvsvc_NetShareCheck *)r;
    1027           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1028           0 :                         DEBUG(5,("function srvsvc_NetShareCheck replied async\n"));
    1029             :                 }
    1030           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1031           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareCheck, NDR_OUT | NDR_SET_VALUES, r2);
    1032             :                 }
    1033           0 :                 if (dce_call->fault_code != 0) {
    1034           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareCheck\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1035             :                 }
    1036           0 :                 break;
    1037             :         }
    1038          48 :         case 21: { /* srvsvc_NetSrvGetInfo */
    1039          48 :                 struct srvsvc_NetSrvGetInfo *r2 = (struct srvsvc_NetSrvGetInfo *)r;
    1040          48 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1041           0 :                         DEBUG(5,("function srvsvc_NetSrvGetInfo replied async\n"));
    1042             :                 }
    1043          48 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1044           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSrvGetInfo, NDR_OUT | NDR_SET_VALUES, r2);
    1045             :                 }
    1046          48 :                 if (dce_call->fault_code != 0) {
    1047           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetSrvGetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1048             :                 }
    1049          48 :                 break;
    1050             :         }
    1051           0 :         case 22: { /* srvsvc_NetSrvSetInfo */
    1052           0 :                 struct srvsvc_NetSrvSetInfo *r2 = (struct srvsvc_NetSrvSetInfo *)r;
    1053           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1054           0 :                         DEBUG(5,("function srvsvc_NetSrvSetInfo replied async\n"));
    1055             :                 }
    1056           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1057           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSrvSetInfo, NDR_OUT | NDR_SET_VALUES, r2);
    1058             :                 }
    1059           0 :                 if (dce_call->fault_code != 0) {
    1060           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetSrvSetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1061             :                 }
    1062           0 :                 break;
    1063             :         }
    1064           4 :         case 23: { /* srvsvc_NetDiskEnum */
    1065           4 :                 struct srvsvc_NetDiskEnum *r2 = (struct srvsvc_NetDiskEnum *)r;
    1066           4 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1067           0 :                         DEBUG(5,("function srvsvc_NetDiskEnum replied async\n"));
    1068             :                 }
    1069           4 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1070           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetDiskEnum, NDR_OUT | NDR_SET_VALUES, r2);
    1071             :                 }
    1072           4 :                 if (dce_call->fault_code != 0) {
    1073           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetDiskEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1074             :                 }
    1075           4 :                 break;
    1076             :         }
    1077           0 :         case 24: { /* srvsvc_NetServerStatisticsGet */
    1078           0 :                 struct srvsvc_NetServerStatisticsGet *r2 = (struct srvsvc_NetServerStatisticsGet *)r;
    1079           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1080           0 :                         DEBUG(5,("function srvsvc_NetServerStatisticsGet replied async\n"));
    1081             :                 }
    1082           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1083           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerStatisticsGet, NDR_OUT | NDR_SET_VALUES, r2);
    1084             :                 }
    1085           0 :                 if (dce_call->fault_code != 0) {
    1086           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetServerStatisticsGet\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1087             :                 }
    1088           0 :                 break;
    1089             :         }
    1090           0 :         case 25: { /* srvsvc_NetTransportAdd */
    1091           0 :                 struct srvsvc_NetTransportAdd *r2 = (struct srvsvc_NetTransportAdd *)r;
    1092           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1093           0 :                         DEBUG(5,("function srvsvc_NetTransportAdd replied async\n"));
    1094             :                 }
    1095           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1096           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportAdd, NDR_OUT | NDR_SET_VALUES, r2);
    1097             :                 }
    1098           0 :                 if (dce_call->fault_code != 0) {
    1099           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetTransportAdd\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1100             :                 }
    1101           0 :                 break;
    1102             :         }
    1103           0 :         case 26: { /* srvsvc_NetTransportEnum */
    1104           0 :                 struct srvsvc_NetTransportEnum *r2 = (struct srvsvc_NetTransportEnum *)r;
    1105           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1106           0 :                         DEBUG(5,("function srvsvc_NetTransportEnum replied async\n"));
    1107             :                 }
    1108           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1109           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportEnum, NDR_OUT | NDR_SET_VALUES, r2);
    1110             :                 }
    1111           0 :                 if (dce_call->fault_code != 0) {
    1112           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetTransportEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1113             :                 }
    1114           0 :                 break;
    1115             :         }
    1116           0 :         case 27: { /* srvsvc_NetTransportDel */
    1117           0 :                 struct srvsvc_NetTransportDel *r2 = (struct srvsvc_NetTransportDel *)r;
    1118           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1119           0 :                         DEBUG(5,("function srvsvc_NetTransportDel replied async\n"));
    1120             :                 }
    1121           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1122           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportDel, NDR_OUT | NDR_SET_VALUES, r2);
    1123             :                 }
    1124           0 :                 if (dce_call->fault_code != 0) {
    1125           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetTransportDel\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1126             :                 }
    1127           0 :                 break;
    1128             :         }
    1129          16 :         case 28: { /* srvsvc_NetRemoteTOD */
    1130          16 :                 struct srvsvc_NetRemoteTOD *r2 = (struct srvsvc_NetRemoteTOD *)r;
    1131          16 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1132           0 :                         DEBUG(5,("function srvsvc_NetRemoteTOD replied async\n"));
    1133             :                 }
    1134          16 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1135           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetRemoteTOD, NDR_OUT | NDR_SET_VALUES, r2);
    1136             :                 }
    1137          16 :                 if (dce_call->fault_code != 0) {
    1138           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetRemoteTOD\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1139             :                 }
    1140          16 :                 break;
    1141             :         }
    1142           0 :         case 29: { /* srvsvc_NetSetServiceBits */
    1143           0 :                 struct srvsvc_NetSetServiceBits *r2 = (struct srvsvc_NetSetServiceBits *)r;
    1144           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1145           0 :                         DEBUG(5,("function srvsvc_NetSetServiceBits replied async\n"));
    1146             :                 }
    1147           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1148           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSetServiceBits, NDR_OUT | NDR_SET_VALUES, r2);
    1149             :                 }
    1150           0 :                 if (dce_call->fault_code != 0) {
    1151           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetSetServiceBits\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1152             :                 }
    1153           0 :                 break;
    1154             :         }
    1155           0 :         case 30: { /* srvsvc_NetPathType */
    1156           0 :                 struct srvsvc_NetPathType *r2 = (struct srvsvc_NetPathType *)r;
    1157           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1158           0 :                         DEBUG(5,("function srvsvc_NetPathType replied async\n"));
    1159             :                 }
    1160           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1161           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathType, NDR_OUT | NDR_SET_VALUES, r2);
    1162             :                 }
    1163           0 :                 if (dce_call->fault_code != 0) {
    1164           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetPathType\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1165             :                 }
    1166           0 :                 break;
    1167             :         }
    1168           0 :         case 31: { /* srvsvc_NetPathCanonicalize */
    1169           0 :                 struct srvsvc_NetPathCanonicalize *r2 = (struct srvsvc_NetPathCanonicalize *)r;
    1170           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1171           0 :                         DEBUG(5,("function srvsvc_NetPathCanonicalize replied async\n"));
    1172             :                 }
    1173           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1174           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathCanonicalize, NDR_OUT | NDR_SET_VALUES, r2);
    1175             :                 }
    1176           0 :                 if (dce_call->fault_code != 0) {
    1177           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetPathCanonicalize\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1178             :                 }
    1179           0 :                 break;
    1180             :         }
    1181           0 :         case 32: { /* srvsvc_NetPathCompare */
    1182           0 :                 struct srvsvc_NetPathCompare *r2 = (struct srvsvc_NetPathCompare *)r;
    1183           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1184           0 :                         DEBUG(5,("function srvsvc_NetPathCompare replied async\n"));
    1185             :                 }
    1186           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1187           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathCompare, NDR_OUT | NDR_SET_VALUES, r2);
    1188             :                 }
    1189           0 :                 if (dce_call->fault_code != 0) {
    1190           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetPathCompare\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1191             :                 }
    1192           0 :                 break;
    1193             :         }
    1194       11128 :         case 33: { /* srvsvc_NetNameValidate */
    1195       11128 :                 struct srvsvc_NetNameValidate *r2 = (struct srvsvc_NetNameValidate *)r;
    1196       11128 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1197           0 :                         DEBUG(5,("function srvsvc_NetNameValidate replied async\n"));
    1198             :                 }
    1199       11128 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1200           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetNameValidate, NDR_OUT | NDR_SET_VALUES, r2);
    1201             :                 }
    1202       11128 :                 if (dce_call->fault_code != 0) {
    1203           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetNameValidate\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1204             :                 }
    1205       11128 :                 break;
    1206             :         }
    1207           0 :         case 34: { /* srvsvc_NETRPRNAMECANONICALIZE */
    1208           0 :                 struct srvsvc_NETRPRNAMECANONICALIZE *r2 = (struct srvsvc_NETRPRNAMECANONICALIZE *)r;
    1209           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1210           0 :                         DEBUG(5,("function srvsvc_NETRPRNAMECANONICALIZE replied async\n"));
    1211             :                 }
    1212           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1213           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRPRNAMECANONICALIZE, NDR_OUT | NDR_SET_VALUES, r2);
    1214             :                 }
    1215           0 :                 if (dce_call->fault_code != 0) {
    1216           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRPRNAMECANONICALIZE\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1217             :                 }
    1218           0 :                 break;
    1219             :         }
    1220           0 :         case 35: { /* srvsvc_NetPRNameCompare */
    1221           0 :                 struct srvsvc_NetPRNameCompare *r2 = (struct srvsvc_NetPRNameCompare *)r;
    1222           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1223           0 :                         DEBUG(5,("function srvsvc_NetPRNameCompare replied async\n"));
    1224             :                 }
    1225           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1226           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPRNameCompare, NDR_OUT | NDR_SET_VALUES, r2);
    1227             :                 }
    1228           0 :                 if (dce_call->fault_code != 0) {
    1229           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetPRNameCompare\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1230             :                 }
    1231           0 :                 break;
    1232             :         }
    1233          68 :         case 36: { /* srvsvc_NetShareEnum */
    1234          68 :                 struct srvsvc_NetShareEnum *r2 = (struct srvsvc_NetShareEnum *)r;
    1235          68 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1236           0 :                         DEBUG(5,("function srvsvc_NetShareEnum replied async\n"));
    1237             :                 }
    1238          68 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1239           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareEnum, NDR_OUT | NDR_SET_VALUES, r2);
    1240             :                 }
    1241          68 :                 if (dce_call->fault_code != 0) {
    1242           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1243             :                 }
    1244          68 :                 break;
    1245             :         }
    1246           0 :         case 37: { /* srvsvc_NetShareDelStart */
    1247           0 :                 struct srvsvc_NetShareDelStart *r2 = (struct srvsvc_NetShareDelStart *)r;
    1248           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1249           0 :                         DEBUG(5,("function srvsvc_NetShareDelStart replied async\n"));
    1250             :                 }
    1251           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1252           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelStart, NDR_OUT | NDR_SET_VALUES, r2);
    1253             :                 }
    1254           0 :                 if (dce_call->fault_code != 0) {
    1255           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareDelStart\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1256             :                 }
    1257           0 :                 break;
    1258             :         }
    1259           0 :         case 38: { /* srvsvc_NetShareDelCommit */
    1260           0 :                 struct srvsvc_NetShareDelCommit *r2 = (struct srvsvc_NetShareDelCommit *)r;
    1261           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1262           0 :                         DEBUG(5,("function srvsvc_NetShareDelCommit replied async\n"));
    1263             :                 }
    1264           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1265           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelCommit, NDR_OUT | NDR_SET_VALUES, r2);
    1266             :                 }
    1267           0 :                 if (dce_call->fault_code != 0) {
    1268           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareDelCommit\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1269             :                 }
    1270           0 :                 break;
    1271             :         }
    1272           0 :         case 39: { /* srvsvc_NetGetFileSecurity */
    1273           0 :                 struct srvsvc_NetGetFileSecurity *r2 = (struct srvsvc_NetGetFileSecurity *)r;
    1274           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1275           0 :                         DEBUG(5,("function srvsvc_NetGetFileSecurity replied async\n"));
    1276             :                 }
    1277           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1278           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetGetFileSecurity, NDR_OUT | NDR_SET_VALUES, r2);
    1279             :                 }
    1280           0 :                 if (dce_call->fault_code != 0) {
    1281           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetGetFileSecurity\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1282             :                 }
    1283           0 :                 break;
    1284             :         }
    1285           0 :         case 40: { /* srvsvc_NetSetFileSecurity */
    1286           0 :                 struct srvsvc_NetSetFileSecurity *r2 = (struct srvsvc_NetSetFileSecurity *)r;
    1287           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1288           0 :                         DEBUG(5,("function srvsvc_NetSetFileSecurity replied async\n"));
    1289             :                 }
    1290           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1291           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSetFileSecurity, NDR_OUT | NDR_SET_VALUES, r2);
    1292             :                 }
    1293           0 :                 if (dce_call->fault_code != 0) {
    1294           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetSetFileSecurity\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1295             :                 }
    1296           0 :                 break;
    1297             :         }
    1298           0 :         case 41: { /* srvsvc_NetServerTransportAddEx */
    1299           0 :                 struct srvsvc_NetServerTransportAddEx *r2 = (struct srvsvc_NetServerTransportAddEx *)r;
    1300           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1301           0 :                         DEBUG(5,("function srvsvc_NetServerTransportAddEx replied async\n"));
    1302             :                 }
    1303           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1304           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerTransportAddEx, NDR_OUT | NDR_SET_VALUES, r2);
    1305             :                 }
    1306           0 :                 if (dce_call->fault_code != 0) {
    1307           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetServerTransportAddEx\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1308             :                 }
    1309           0 :                 break;
    1310             :         }
    1311           0 :         case 42: { /* srvsvc_NetServerSetServiceBitsEx */
    1312           0 :                 struct srvsvc_NetServerSetServiceBitsEx *r2 = (struct srvsvc_NetServerSetServiceBitsEx *)r;
    1313           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1314           0 :                         DEBUG(5,("function srvsvc_NetServerSetServiceBitsEx replied async\n"));
    1315             :                 }
    1316           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1317           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerSetServiceBitsEx, NDR_OUT | NDR_SET_VALUES, r2);
    1318             :                 }
    1319           0 :                 if (dce_call->fault_code != 0) {
    1320           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NetServerSetServiceBitsEx\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1321             :                 }
    1322           0 :                 break;
    1323             :         }
    1324           0 :         case 43: { /* srvsvc_NETRDFSGETVERSION */
    1325           0 :                 struct srvsvc_NETRDFSGETVERSION *r2 = (struct srvsvc_NETRDFSGETVERSION *)r;
    1326           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1327           0 :                         DEBUG(5,("function srvsvc_NETRDFSGETVERSION replied async\n"));
    1328             :                 }
    1329           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1330           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSGETVERSION, NDR_OUT | NDR_SET_VALUES, r2);
    1331             :                 }
    1332           0 :                 if (dce_call->fault_code != 0) {
    1333           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSGETVERSION\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1334             :                 }
    1335           0 :                 break;
    1336             :         }
    1337           0 :         case 44: { /* srvsvc_NETRDFSCREATELOCALPARTITION */
    1338           0 :                 struct srvsvc_NETRDFSCREATELOCALPARTITION *r2 = (struct srvsvc_NETRDFSCREATELOCALPARTITION *)r;
    1339           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1340           0 :                         DEBUG(5,("function srvsvc_NETRDFSCREATELOCALPARTITION replied async\n"));
    1341             :                 }
    1342           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1343           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSCREATELOCALPARTITION, NDR_OUT | NDR_SET_VALUES, r2);
    1344             :                 }
    1345           0 :                 if (dce_call->fault_code != 0) {
    1346           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSCREATELOCALPARTITION\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1347             :                 }
    1348           0 :                 break;
    1349             :         }
    1350           0 :         case 45: { /* srvsvc_NETRDFSDELETELOCALPARTITION */
    1351           0 :                 struct srvsvc_NETRDFSDELETELOCALPARTITION *r2 = (struct srvsvc_NETRDFSDELETELOCALPARTITION *)r;
    1352           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1353           0 :                         DEBUG(5,("function srvsvc_NETRDFSDELETELOCALPARTITION replied async\n"));
    1354             :                 }
    1355           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1356           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSDELETELOCALPARTITION, NDR_OUT | NDR_SET_VALUES, r2);
    1357             :                 }
    1358           0 :                 if (dce_call->fault_code != 0) {
    1359           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSDELETELOCALPARTITION\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1360             :                 }
    1361           0 :                 break;
    1362             :         }
    1363           0 :         case 46: { /* srvsvc_NETRDFSSETLOCALVOLUMESTATE */
    1364           0 :                 struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r2 = (struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *)r;
    1365           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1366           0 :                         DEBUG(5,("function srvsvc_NETRDFSSETLOCALVOLUMESTATE replied async\n"));
    1367             :                 }
    1368           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1369           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSSETLOCALVOLUMESTATE, NDR_OUT | NDR_SET_VALUES, r2);
    1370             :                 }
    1371           0 :                 if (dce_call->fault_code != 0) {
    1372           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSSETLOCALVOLUMESTATE\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1373             :                 }
    1374           0 :                 break;
    1375             :         }
    1376           0 :         case 47: { /* srvsvc_NETRDFSSETSERVERINFO */
    1377           0 :                 struct srvsvc_NETRDFSSETSERVERINFO *r2 = (struct srvsvc_NETRDFSSETSERVERINFO *)r;
    1378           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1379           0 :                         DEBUG(5,("function srvsvc_NETRDFSSETSERVERINFO replied async\n"));
    1380             :                 }
    1381           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1382           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSSETSERVERINFO, NDR_OUT | NDR_SET_VALUES, r2);
    1383             :                 }
    1384           0 :                 if (dce_call->fault_code != 0) {
    1385           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSSETSERVERINFO\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1386             :                 }
    1387           0 :                 break;
    1388             :         }
    1389           0 :         case 48: { /* srvsvc_NETRDFSCREATEEXITPOINT */
    1390           0 :                 struct srvsvc_NETRDFSCREATEEXITPOINT *r2 = (struct srvsvc_NETRDFSCREATEEXITPOINT *)r;
    1391           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1392           0 :                         DEBUG(5,("function srvsvc_NETRDFSCREATEEXITPOINT replied async\n"));
    1393             :                 }
    1394           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1395           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSCREATEEXITPOINT, NDR_OUT | NDR_SET_VALUES, r2);
    1396             :                 }
    1397           0 :                 if (dce_call->fault_code != 0) {
    1398           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSCREATEEXITPOINT\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1399             :                 }
    1400           0 :                 break;
    1401             :         }
    1402           0 :         case 49: { /* srvsvc_NETRDFSDELETEEXITPOINT */
    1403           0 :                 struct srvsvc_NETRDFSDELETEEXITPOINT *r2 = (struct srvsvc_NETRDFSDELETEEXITPOINT *)r;
    1404           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1405           0 :                         DEBUG(5,("function srvsvc_NETRDFSDELETEEXITPOINT replied async\n"));
    1406             :                 }
    1407           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1408           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSDELETEEXITPOINT, NDR_OUT | NDR_SET_VALUES, r2);
    1409             :                 }
    1410           0 :                 if (dce_call->fault_code != 0) {
    1411           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSDELETEEXITPOINT\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1412             :                 }
    1413           0 :                 break;
    1414             :         }
    1415           0 :         case 50: { /* srvsvc_NETRDFSMODIFYPREFIX */
    1416           0 :                 struct srvsvc_NETRDFSMODIFYPREFIX *r2 = (struct srvsvc_NETRDFSMODIFYPREFIX *)r;
    1417           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1418           0 :                         DEBUG(5,("function srvsvc_NETRDFSMODIFYPREFIX replied async\n"));
    1419             :                 }
    1420           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1421           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSMODIFYPREFIX, NDR_OUT | NDR_SET_VALUES, r2);
    1422             :                 }
    1423           0 :                 if (dce_call->fault_code != 0) {
    1424           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSMODIFYPREFIX\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1425             :                 }
    1426           0 :                 break;
    1427             :         }
    1428           0 :         case 51: { /* srvsvc_NETRDFSFIXLOCALVOLUME */
    1429           0 :                 struct srvsvc_NETRDFSFIXLOCALVOLUME *r2 = (struct srvsvc_NETRDFSFIXLOCALVOLUME *)r;
    1430           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1431           0 :                         DEBUG(5,("function srvsvc_NETRDFSFIXLOCALVOLUME replied async\n"));
    1432             :                 }
    1433           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1434           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSFIXLOCALVOLUME, NDR_OUT | NDR_SET_VALUES, r2);
    1435             :                 }
    1436           0 :                 if (dce_call->fault_code != 0) {
    1437           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSFIXLOCALVOLUME\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1438             :                 }
    1439           0 :                 break;
    1440             :         }
    1441           0 :         case 52: { /* srvsvc_NETRDFSMANAGERREPORTSITEINFO */
    1442           0 :                 struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r2 = (struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *)r;
    1443           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1444           0 :                         DEBUG(5,("function srvsvc_NETRDFSMANAGERREPORTSITEINFO replied async\n"));
    1445             :                 }
    1446           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1447           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSMANAGERREPORTSITEINFO, NDR_OUT | NDR_SET_VALUES, r2);
    1448             :                 }
    1449           0 :                 if (dce_call->fault_code != 0) {
    1450           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSMANAGERREPORTSITEINFO\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1451             :                 }
    1452           0 :                 break;
    1453             :         }
    1454           0 :         case 53: { /* srvsvc_NETRSERVERTRANSPORTDELEX */
    1455           0 :                 struct srvsvc_NETRSERVERTRANSPORTDELEX *r2 = (struct srvsvc_NETRSERVERTRANSPORTDELEX *)r;
    1456           0 :                 if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
    1457           0 :                         DEBUG(5,("function srvsvc_NETRSERVERTRANSPORTDELEX replied async\n"));
    1458             :                 }
    1459           0 :                 if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
    1460           0 :                         NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRSERVERTRANSPORTDELEX, NDR_OUT | NDR_SET_VALUES, r2);
    1461             :                 }
    1462           0 :                 if (dce_call->fault_code != 0) {
    1463           0 :                         DBG_WARNING("dcerpc_fault %s in srvsvc_NETRSERVERTRANSPORTDELEX\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
    1464             :                 }
    1465           0 :                 break;
    1466             :         }
    1467           0 :         default:
    1468           0 :                 dce_call->fault_code = DCERPC_FAULT_OP_RNG_ERROR;
    1469           0 :                 break;
    1470             :         }
    1471             : 
    1472       12698 :         if (dce_call->fault_code != 0) {
    1473           0 :                 return NT_STATUS_NET_WRITE_FAULT;
    1474             :         }
    1475             : 
    1476       12698 :         return NT_STATUS_OK;
    1477             : }
    1478             : 
    1479       12698 : NTSTATUS srvsvc__op_ndr_push(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ndr_push *push, const void *r)
    1480             : {
    1481             :         enum ndr_err_code ndr_err;
    1482       12698 :         uint16_t opnum = dce_call->pkt.u.request.opnum;
    1483             : 
    1484       12698 :         ndr_err = ndr_table_srvsvc.calls[opnum].ndr_push(push, NDR_OUT, r);
    1485       12698 :         if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
    1486           0 :                 dce_call->fault_code = DCERPC_FAULT_NDR;
    1487           0 :                 return NT_STATUS_NET_WRITE_FAULT;
    1488             :         }
    1489             : 
    1490       12698 :         return NT_STATUS_OK;
    1491             : }
    1492             : 
    1493          32 : NTSTATUS srvsvc__op_local(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, void *r)
    1494             : {
    1495          32 :         return srvsvc__op_dispatch_internal(dce_call, mem_ctx, r, S3COMPAT_RPC_DISPATCH_INTERNAL);
    1496             : }
    1497             : 
    1498             : static const struct dcesrv_interface dcesrv_srvsvc_interface = {
    1499             :         .name      = "srvsvc",
    1500             :         .syntax_id = {{0x4b324fc8,0x1670,0x01d3,{0x12,0x78},{0x5a,0x47,0xbf,0x6e,0xe1,0x88}},3.0},
    1501             :         .bind      = srvsvc__op_bind,
    1502             :         .unbind    = srvsvc__op_unbind,
    1503             :         .ndr_pull  = srvsvc__op_ndr_pull,
    1504             :         .dispatch  = srvsvc__op_dispatch,
    1505             :         .reply     = srvsvc__op_reply,
    1506             :         .ndr_push  = srvsvc__op_ndr_push,
    1507             :         .local     = srvsvc__op_local,
    1508             : #ifdef DCESRV_INTERFACE_SRVSVC_FLAGS
    1509             :         .flags     = DCESRV_INTERFACE_SRVSVC_FLAGS
    1510             : #else
    1511             :         .flags     = 0
    1512             : #endif
    1513             : };
    1514             : 
    1515         180 : static NTSTATUS srvsvc__check_register_in_endpoint(const char *name, struct dcerpc_binding *binding) {
    1516         180 :         enum dcerpc_transport_t transport = dcerpc_binding_get_transport(binding);
    1517             :         NTSTATUS status;
    1518             : 
    1519             :         /* If service is disabled, do not register */
    1520         180 :         if (rpc_service_mode(name) == RPC_SERVICE_MODE_DISABLED) {
    1521           0 :                 return NT_STATUS_NOT_IMPLEMENTED;
    1522             :         }
    1523             : 
    1524             :         /* If service is embedded, register only for ncacn_np
    1525             :          * see 8466b3c85e4b835e57e41776853093f4a0edc8b8
    1526             :          */
    1527         180 :         if (rpc_service_mode(name) == RPC_SERVICE_MODE_EMBEDDED && (transport != NCACN_NP && transport != NCALRPC)) {
    1528          60 :                 DBG_INFO("Interface 'srvsvc' not registered in endpoint '%s' as service is embedded\n", name);
    1529          60 :                 return NT_STATUS_NOT_SUPPORTED;
    1530             :         }
    1531             : 
    1532             :         /*
    1533             :          * If rpc service is external then change the default ncalrpc endpoint,
    1534             :          * otherwise if the rpc daemon running this service is configured in
    1535             :          * fork mode the forked process will race with main smbd to accept the
    1536             :          * connections in the default ncalrpc socket, and the forked process
    1537             :          * may not have the requested interface registered.
    1538             :          * For example, in the ad_member test environment:
    1539             :          *
    1540             :          *   rpc_server:lsarpc = external
    1541             :          *   rpc_server:samr = external
    1542             :          *   rpc_server:netlogon = disabled
    1543             :          *   rpc_daemon:lsasd = fork
    1544             :          *
    1545             :          * With these settings both, the main smbd and all the preforked lsasd
    1546             :          * processes would be listening in the default ncalrpc socket if it is
    1547             :          * not changed. If a client connection is accepted by one of the lsasd
    1548             :          * worker processes and the client asks for an interface not registered
    1549             :          * in these processes (winreg for example) it will get an error.
    1550             :          */
    1551         120 :         if (rpc_service_mode(name) == RPC_SERVICE_MODE_EXTERNAL && transport == NCALRPC) {
    1552           0 :                 status = dcerpc_binding_set_string_option(binding, "endpoint", "SRVSVC");
    1553           0 :                 if (!NT_STATUS_IS_OK(status)) {
    1554           0 :                         return status;
    1555             :                 }
    1556             :         }
    1557             : 
    1558         120 :         return NT_STATUS_OK;
    1559             : }
    1560             : 
    1561          60 : static NTSTATUS srvsvc__op_init_server(struct dcesrv_context *dce_ctx, const struct dcesrv_endpoint_server *ep_server)
    1562             : {
    1563             :         uint32_t i;
    1564             :         NTSTATUS ret;
    1565             :         struct dcerpc_binding *binding;
    1566          60 :         struct dcerpc_binding *binding2 = NULL;
    1567             : 
    1568             : #ifdef DCESRV_INTERFACE_SRVSVC_NCACN_NP_SECONDARY_ENDPOINT
    1569             :         const char *ncacn_np_secondary_endpoint = DCESRV_INTERFACE_SRVSVC_NCACN_NP_SECONDARY_ENDPOINT;
    1570             : #else
    1571          60 :         const char *ncacn_np_secondary_endpoint = NULL;
    1572             : #endif
    1573             : 
    1574         240 :         for (i=0;i<ndr_table_srvsvc.endpoints->count;i++) {
    1575         180 :                 const char *name = ndr_table_srvsvc.endpoints->names[i];
    1576             : 
    1577         180 :                 ret = dcerpc_parse_binding(dce_ctx, name, &binding);
    1578         180 :                 if (NT_STATUS_IS_ERR(ret)) {
    1579           0 :                         DBG_ERR("Failed to parse binding string '%s'\n", name);
    1580           0 :                         return ret;
    1581             :                 }
    1582             : 
    1583         180 :                 ret = srvsvc__check_register_in_endpoint("srvsvc", binding);
    1584         180 :                 if (NT_STATUS_IS_ERR(ret)) {
    1585          60 :                         talloc_free(binding);
    1586          60 :                         continue;
    1587             :                 }
    1588             : 
    1589         116 :                 if (ncacn_np_secondary_endpoint != NULL) {
    1590           0 :                         ret = dcerpc_parse_binding(dce_ctx, ncacn_np_secondary_endpoint, &binding2);
    1591           0 :                         if (NT_STATUS_IS_ERR(ret)) {
    1592           0 :                                 DBG_ERR("Failed to parse 2nd binding string '%s'\n", ncacn_np_secondary_endpoint);
    1593           0 :                                 TALLOC_FREE(binding);
    1594           0 :                                 return ret;
    1595             :                         }
    1596             :                 }
    1597             : 
    1598         120 :                 ret = dcesrv_interface_register_b(dce_ctx, binding, binding2, &dcesrv_srvsvc_interface, NULL);
    1599         120 :                 TALLOC_FREE(binding);
    1600         116 :                 TALLOC_FREE(binding2);
    1601         120 :                 if (!NT_STATUS_IS_OK(ret)) {
    1602           0 :                         DBG_ERR("Failed to register endpoint '%s'\n",name);
    1603           0 :                         return ret;
    1604             :                 }
    1605             :         }
    1606             : 
    1607          60 :         return NT_STATUS_OK;
    1608             : }
    1609             : 
    1610          19 : static NTSTATUS srvsvc__op_shutdown_server(struct dcesrv_context *dce_ctx, const struct dcesrv_endpoint_server *ep_server)
    1611             : {
    1612          19 :         return NT_STATUS_OK;
    1613             : }
    1614             : 
    1615           0 : static bool srvsvc__op_interface_by_uuid(struct dcesrv_interface *iface, const struct GUID *uuid, uint32_t if_version)
    1616             : {
    1617           0 :         if (dcesrv_srvsvc_interface.syntax_id.if_version == if_version && GUID_equal(&dcesrv_srvsvc_interface.syntax_id.uuid, uuid)) {
    1618           0 :                 memcpy(iface,&dcesrv_srvsvc_interface, sizeof(*iface));
    1619           0 :                 return true;
    1620             :         }
    1621             : 
    1622           0 :         return false;
    1623             : }
    1624             : 
    1625           0 : static bool srvsvc__op_interface_by_name(struct dcesrv_interface *iface, const char *name)
    1626             : {
    1627           0 :         if (strcmp(dcesrv_srvsvc_interface.name, name)==0) {
    1628           0 :                 memcpy(iface, &dcesrv_srvsvc_interface, sizeof(*iface));
    1629           0 :                 return true;
    1630             :         }
    1631             : 
    1632           0 :         return false;
    1633             : }
    1634             : 
    1635             : static const struct dcesrv_endpoint_server srvsvc_ep_server = {
    1636             :         /* fill in our name */
    1637             :         .name = "srvsvc",
    1638             : 
    1639             :         /* Initialization flag */
    1640             :         .initialized = false,
    1641             : 
    1642             :         /* fill in all the operations */
    1643             : #ifdef DCESRV_INTERFACE_SRVSVC_INIT_SERVER
    1644             :         .init_server = DCESRV_INTERFACE_SRVSVC_INIT_SERVER,
    1645             : #else
    1646             :         .init_server = srvsvc__op_init_server,
    1647             : #endif
    1648             : #ifdef DCESRV_INTERFACE_SRVSVC_SHUTDOWN_SERVER
    1649             :         .shutdown_server = DCESRV_INTERFACE_SRVSVC_SHUTDOWN_SERVER,
    1650             : #else
    1651             :         .shutdown_server = srvsvc__op_shutdown_server,
    1652             : #endif
    1653             :         .interface_by_uuid = srvsvc__op_interface_by_uuid,
    1654             :         .interface_by_name = srvsvc__op_interface_by_name
    1655             : };
    1656             : 
    1657          60 : const struct dcesrv_endpoint_server *srvsvc_get_ep_server(void)
    1658             : {
    1659          60 :         return &srvsvc_ep_server;
    1660             : }

Generated by: LCOV version 1.13