LCOV - code coverage report
Current view: top level - source3/rpc_server/dfs - srv_dfs_nt.c (source / functions) Hit Total Coverage
Test: coverage report for v4-17-test 1498b464 Lines: 0 314 0.0 %
Date: 2024-06-13 04:01:37 Functions: 0 27 0.0 %

          Line data    Source code
       1             : /*
       2             :  *  Unix SMB/CIFS implementation.
       3             :  *  RPC Pipe client / server routines for Dfs
       4             :  *  Copyright (C) Shirish Kalele        2000.
       5             :  *  Copyright (C) Jeremy Allison        2001-2007.
       6             :  *  Copyright (C) Jelmer Vernooij       2005-2006.
       7             :  *
       8             :  *  This program is free software; you can redistribute it and/or modify
       9             :  *  it under the terms of the GNU General Public License as published by
      10             :  *  the Free Software Foundation; either version 3 of the License, or
      11             :  *  (at your option) any later version.
      12             :  *
      13             :  *  This program is distributed in the hope that it will be useful,
      14             :  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
      15             :  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      16             :  *  GNU General Public License for more details.
      17             :  *
      18             :  *  You should have received a copy of the GNU General Public License
      19             :  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
      20             :  */
      21             : 
      22             : /* This is the implementation of the dfs pipe. */
      23             : 
      24             : #include "includes.h"
      25             : #include "ntdomain.h"
      26             : #include "librpc/rpc/dcesrv_core.h"
      27             : #include "librpc/gen_ndr/ndr_dfs.h"
      28             : #include "librpc/gen_ndr/ndr_dfs_scompat.h"
      29             : #include "msdfs.h"
      30             : #include "smbd/smbd.h"
      31             : #include "smbd/globals.h"
      32             : #include "auth.h"
      33             : 
      34             : #undef DBGC_CLASS
      35             : #define DBGC_CLASS DBGC_MSDFS
      36             : 
      37             : /* This function does not return a WERROR or NTSTATUS code but rather 1 if
      38             :    dfs exists, or 0 otherwise. */
      39             : 
      40           0 : void _dfs_GetManagerVersion(struct pipes_struct *p, struct dfs_GetManagerVersion *r)
      41             : {
      42           0 :         if (lp_host_msdfs()) {
      43           0 :                 *r->out.version = DFS_MANAGER_VERSION_NT4;
      44             :         } else {
      45           0 :                 *r->out.version = (enum dfs_ManagerVersion)0;
      46             :         }
      47           0 : }
      48             : 
      49           0 : WERROR _dfs_Add(struct pipes_struct *p, struct dfs_Add *r)
      50             : {
      51           0 :         struct dcesrv_call_state *dce_call = p->dce_call;
      52           0 :         struct dcesrv_connection *dcesrv_conn = dce_call->conn;
      53           0 :         const struct tsocket_address *local_address =
      54           0 :                 dcesrv_connection_get_local_address(dcesrv_conn);
      55           0 :         const struct tsocket_address *remote_address =
      56           0 :                 dcesrv_connection_get_remote_address(dcesrv_conn);
      57           0 :         struct auth_session_info *session_info =
      58           0 :                 dcesrv_call_session_info(dce_call);
      59           0 :         struct junction_map *jn = NULL;
      60           0 :         struct referral *old_referral_list = NULL;
      61           0 :         bool self_ref = False;
      62           0 :         size_t consumedcnt = 0;
      63           0 :         char *altpath = NULL;
      64             :         NTSTATUS status;
      65           0 :         TALLOC_CTX *ctx = talloc_tos();
      66             : 
      67           0 :         if (session_info->unix_token->uid != sec_initial_uid()) {
      68           0 :                 DEBUG(10,("_dfs_add: uid != 0. Access denied.\n"));
      69           0 :                 return WERR_ACCESS_DENIED;
      70             :         }
      71             : 
      72           0 :         jn = talloc_zero(ctx, struct junction_map);
      73           0 :         if (!jn) {
      74           0 :                 return WERR_NOT_ENOUGH_MEMORY;
      75             :         }
      76             : 
      77           0 :         DEBUG(5,("init_reply_dfs_add: Request to add %s -> %s\\%s.\n",
      78             :                 r->in.path, r->in.server, r->in.share));
      79             : 
      80           0 :         altpath = talloc_asprintf(ctx, "%s\\%s",
      81             :                         r->in.server,
      82             :                         r->in.share);
      83           0 :         if (!altpath) {
      84           0 :                 return WERR_NOT_ENOUGH_MEMORY;
      85             :         }
      86             : 
      87             :         /* The following call can change the cwd. */
      88           0 :         status = get_referred_path(ctx,
      89             :                                    session_info,
      90             :                                    r->in.path,
      91             :                                    remote_address,
      92             :                                    local_address,
      93             :                                    true, /*allow_broken_path */
      94             :                                    jn, &consumedcnt, &self_ref);
      95           0 :         if(!NT_STATUS_IS_OK(status)) {
      96           0 :                 return ntstatus_to_werror(status);
      97             :         }
      98             : 
      99           0 :         jn->referral_count += 1;
     100           0 :         old_referral_list = jn->referral_list;
     101             : 
     102           0 :         if (jn->referral_count < 1) {
     103           0 :                 return WERR_NOT_ENOUGH_MEMORY;
     104             :         }
     105             : 
     106           0 :         jn->referral_list = talloc_array(ctx, struct referral, jn->referral_count);
     107           0 :         if(jn->referral_list == NULL) {
     108           0 :                 DEBUG(0,("init_reply_dfs_add: talloc failed for referral list!\n"));
     109           0 :                 return WERR_NERR_DFSINTERNALERROR;
     110             :         }
     111             : 
     112           0 :         if(old_referral_list && jn->referral_list) {
     113           0 :                 memcpy(jn->referral_list, old_referral_list,
     114           0 :                                 sizeof(struct referral)*jn->referral_count-1);
     115             :         }
     116             : 
     117           0 :         jn->referral_list[jn->referral_count-1].proximity = 0;
     118           0 :         jn->referral_list[jn->referral_count-1].ttl = REFERRAL_TTL;
     119           0 :         jn->referral_list[jn->referral_count-1].alternate_path = altpath;
     120             : 
     121           0 :         if (!create_msdfs_link(jn, session_info)) {
     122           0 :                 return WERR_NERR_DFSCANTCREATEJUNCTIONPOINT;
     123             :         }
     124             : 
     125           0 :         return WERR_OK;
     126             : }
     127             : 
     128           0 : WERROR _dfs_Remove(struct pipes_struct *p, struct dfs_Remove *r)
     129             : {
     130           0 :         struct dcesrv_call_state *dce_call = p->dce_call;
     131           0 :         struct dcesrv_connection *dcesrv_conn = dce_call->conn;
     132           0 :         const struct tsocket_address *local_address =
     133           0 :                 dcesrv_connection_get_local_address(dcesrv_conn);
     134           0 :         const struct tsocket_address *remote_address =
     135           0 :                 dcesrv_connection_get_remote_address(dcesrv_conn);
     136           0 :         struct auth_session_info *session_info =
     137           0 :                 dcesrv_call_session_info(dce_call);
     138           0 :         struct junction_map *jn = NULL;
     139           0 :         bool self_ref = False;
     140           0 :         size_t consumedcnt = 0;
     141           0 :         bool found = False;
     142           0 :         TALLOC_CTX *ctx = talloc_tos();
     143           0 :         char *altpath = NULL;
     144             :         NTSTATUS status;
     145             : 
     146           0 :         if (session_info->unix_token->uid != sec_initial_uid()) {
     147           0 :                 DEBUG(10,("_dfs_remove: uid != 0. Access denied.\n"));
     148           0 :                 return WERR_ACCESS_DENIED;
     149             :         }
     150             : 
     151           0 :         jn = talloc_zero(ctx, struct junction_map);
     152           0 :         if (!jn) {
     153           0 :                 return WERR_NOT_ENOUGH_MEMORY;
     154             :         }
     155             : 
     156           0 :         if (r->in.servername && r->in.sharename) {
     157           0 :                 altpath = talloc_asprintf(ctx, "%s\\%s",
     158             :                         r->in.servername,
     159             :                         r->in.sharename);
     160           0 :                 if (!altpath) {
     161           0 :                         return WERR_NOT_ENOUGH_MEMORY;
     162             :                 }
     163           0 :                 if (!strlower_m(altpath)) {
     164           0 :                         return WERR_INVALID_PARAMETER;
     165             :                 }
     166           0 :                 DEBUG(5,("init_reply_dfs_remove: Request to remove %s -> %s\\%s.\n",
     167             :                         r->in.dfs_entry_path, r->in.servername, r->in.sharename));
     168             :         }
     169             : 
     170           0 :         status = get_referred_path(ctx,
     171             :                                    session_info,
     172             :                                    r->in.dfs_entry_path,
     173             :                                    remote_address,
     174             :                                    local_address,
     175             :                                    true, /*allow_broken_path */
     176             :                                    jn, &consumedcnt, &self_ref);
     177           0 :         if(!NT_STATUS_IS_OK(status)) {
     178           0 :                 return WERR_NERR_DFSNOSUCHVOLUME;
     179             :         }
     180             : 
     181             :         /* if no server-share pair given, remove the msdfs link completely */
     182           0 :         if(!r->in.servername && !r->in.sharename) {
     183           0 :                 if(!remove_msdfs_link(jn, session_info)) {
     184           0 :                         return WERR_NERR_DFSNOSUCHVOLUME;
     185             :                 }
     186             :         } else {
     187           0 :                 size_t i = 0;
     188             :                 /* compare each referral in the list with the one to remove */
     189           0 :                 DBG_DEBUG("altpath: .%s. refcnt: %zu\n",
     190             :                                 altpath,
     191             :                                 jn->referral_count);
     192           0 :                 for(i=0;i<jn->referral_count;i++) {
     193           0 :                         char *refpath = talloc_strdup(ctx,
     194           0 :                                         jn->referral_list[i].alternate_path);
     195           0 :                         if (!refpath) {
     196           0 :                                 return WERR_NOT_ENOUGH_MEMORY;
     197             :                         }
     198           0 :                         trim_char(refpath, '\\', '\\');
     199           0 :                         DEBUG(10,("_dfs_remove:  refpath: .%s.\n", refpath));
     200           0 :                         if(strequal(refpath, altpath)) {
     201           0 :                                 *(jn->referral_list[i].alternate_path)='\0';
     202           0 :                                 DEBUG(10,("_dfs_remove: Removal request matches referral %s\n",
     203             :                                         refpath));
     204           0 :                                 found = True;
     205             :                         }
     206             :                 }
     207             : 
     208           0 :                 if(!found) {
     209           0 :                         return WERR_NERR_DFSNOSUCHSHARE;
     210             :                 }
     211             : 
     212             :                 /* Only one referral, remove it */
     213           0 :                 if(jn->referral_count == 1) {
     214           0 :                         if(!remove_msdfs_link(jn, session_info)) {
     215           0 :                                 return WERR_NERR_DFSNOSUCHVOLUME;
     216             :                         }
     217             :                 } else {
     218           0 :                         if(!create_msdfs_link(jn, session_info)) {
     219           0 :                                 return WERR_NERR_DFSCANTCREATEJUNCTIONPOINT;
     220             :                         }
     221             :                 }
     222             :         }
     223             : 
     224           0 :         return WERR_OK;
     225             : }
     226             : 
     227           0 : static bool init_reply_dfs_info_1(TALLOC_CTX *mem_ctx, struct junction_map* j,struct dfs_Info1* dfs1)
     228             : {
     229           0 :         dfs1->path = talloc_asprintf(mem_ctx,
     230             :                                 "\\\\%s\\%s\\%s", lp_netbios_name(),
     231             :                                 j->service_name, j->volume_name);
     232           0 :         if (dfs1->path == NULL)
     233           0 :                 return False;
     234             : 
     235           0 :         DEBUG(5,("init_reply_dfs_info_1: initing entrypath: %s\n",dfs1->path));
     236           0 :         return True;
     237             : }
     238             : 
     239           0 : static bool init_reply_dfs_info_2(TALLOC_CTX *mem_ctx, struct junction_map* j, struct dfs_Info2* dfs2)
     240             : {
     241           0 :         dfs2->path = talloc_asprintf(mem_ctx,
     242             :                         "\\\\%s\\%s\\%s", lp_netbios_name(), j->service_name, j->volume_name);
     243           0 :         if (dfs2->path == NULL)
     244           0 :                 return False;
     245           0 :         dfs2->comment = talloc_strdup(mem_ctx, j->comment);
     246           0 :         dfs2->state = 1; /* set up state of dfs junction as OK */
     247           0 :         dfs2->num_stores = j->referral_count;
     248           0 :         return True;
     249             : }
     250             : 
     251           0 : static bool init_reply_dfs_info_3(TALLOC_CTX *mem_ctx, struct junction_map* j, struct dfs_Info3* dfs3)
     252             : {
     253             :         size_t ii;
     254           0 :         if (j->volume_name[0] == '\0')
     255           0 :                 dfs3->path = talloc_asprintf(mem_ctx, "\\\\%s\\%s",
     256             :                         lp_netbios_name(), j->service_name);
     257             :         else
     258           0 :                 dfs3->path = talloc_asprintf(mem_ctx, "\\\\%s\\%s\\%s", lp_netbios_name(),
     259             :                         j->service_name, j->volume_name);
     260             : 
     261           0 :         if (dfs3->path == NULL)
     262           0 :                 return False;
     263             : 
     264           0 :         dfs3->comment = talloc_strdup(mem_ctx, j->comment);
     265           0 :         dfs3->state = 1;
     266           0 :         dfs3->num_stores = j->referral_count;
     267             : 
     268             :         /* also enumerate the stores */
     269           0 :         if (j->referral_count) {
     270           0 :                 dfs3->stores = talloc_array(mem_ctx, struct dfs_StorageInfo, j->referral_count);
     271           0 :                 if (!dfs3->stores)
     272           0 :                         return False;
     273           0 :                 memset(dfs3->stores, '\0', j->referral_count * sizeof(struct dfs_StorageInfo));
     274             :         } else {
     275           0 :                 dfs3->stores = NULL;
     276             :         }
     277             : 
     278           0 :         for(ii=0;ii<j->referral_count;ii++) {
     279             :                 char* p;
     280           0 :                 char *path = NULL;
     281           0 :                 struct dfs_StorageInfo* stor = &(dfs3->stores[ii]);
     282           0 :                 struct referral* ref = &(j->referral_list[ii]);
     283             : 
     284           0 :                 path = talloc_strdup(mem_ctx, ref->alternate_path);
     285           0 :                 if (!path) {
     286           0 :                         return False;
     287             :                 }
     288           0 :                 trim_char(path,'\\','\0');
     289           0 :                 p = strrchr_m(path,'\\');
     290           0 :                 if(p==NULL) {
     291           0 :                         DEBUG(4,("init_reply_dfs_info_3: invalid path: no \\ found in %s\n",path));
     292           0 :                         continue;
     293             :                 }
     294           0 :                 *p = '\0';
     295           0 :                 DBG_INFO("storage %zu: %s.%s\n",ii,path,p+1);
     296           0 :                 stor->state = 2; /* set all stores as ONLINE */
     297           0 :                 stor->server = talloc_strdup(mem_ctx, path);
     298           0 :                 stor->share = talloc_strdup(mem_ctx, p+1);
     299             :         }
     300           0 :         return True;
     301             : }
     302             : 
     303           0 : static bool init_reply_dfs_info_100(TALLOC_CTX *mem_ctx, struct junction_map* j, struct dfs_Info100* dfs100)
     304             : {
     305           0 :         dfs100->comment = talloc_strdup(mem_ctx, j->comment);
     306           0 :         return True;
     307             : }
     308             : 
     309           0 : WERROR _dfs_Enum(struct pipes_struct *p, struct dfs_Enum *r)
     310             : {
     311           0 :         struct dcesrv_call_state *dce_call = p->dce_call;
     312           0 :         struct auth_session_info *session_info =
     313           0 :                 dcesrv_call_session_info(dce_call);
     314           0 :         struct junction_map *jn = NULL;
     315           0 :         size_t num_jn = 0;
     316             :         size_t i;
     317           0 :         TALLOC_CTX *ctx = talloc_tos();
     318             : 
     319           0 :         jn = enum_msdfs_links(ctx, session_info, &num_jn);
     320           0 :         if (!jn || num_jn == 0) {
     321           0 :                 num_jn = 0;
     322           0 :                 jn = NULL;
     323             :         }
     324             : 
     325           0 :         DEBUG(5,("_dfs_Enum: %u junctions found in Dfs, doing level %d\n",
     326             :                                 (unsigned int)num_jn, r->in.level));
     327             : 
     328           0 :         *r->out.total = num_jn;
     329             : 
     330             :         /* Create the return array */
     331           0 :         switch (r->in.level) {
     332           0 :         case 1:
     333           0 :                 if (num_jn) {
     334           0 :                         if ((r->out.info->e.info1->s = talloc_array(ctx, struct dfs_Info1, num_jn)) == NULL) {
     335           0 :                                 return WERR_NOT_ENOUGH_MEMORY;
     336             :                         }
     337             :                 } else {
     338           0 :                         r->out.info->e.info1->s = NULL;
     339             :                 }
     340           0 :                 r->out.info->e.info1->count = num_jn;
     341           0 :                 break;
     342           0 :         case 2:
     343           0 :                 if (num_jn) {
     344           0 :                         if ((r->out.info->e.info2->s = talloc_array(ctx, struct dfs_Info2, num_jn)) == NULL) {
     345           0 :                                 return WERR_NOT_ENOUGH_MEMORY;
     346             :                         }
     347             :                 } else {
     348           0 :                         r->out.info->e.info2->s = NULL;
     349             :                 }
     350           0 :                 r->out.info->e.info2->count = num_jn;
     351           0 :                 break;
     352           0 :         case 3:
     353           0 :                 if (num_jn) {
     354           0 :                         if ((r->out.info->e.info3->s = talloc_array(ctx, struct dfs_Info3, num_jn)) == NULL) {
     355           0 :                                 return WERR_NOT_ENOUGH_MEMORY;
     356             :                         }
     357             :                 } else {
     358           0 :                         r->out.info->e.info3->s = NULL;
     359             :                 }
     360           0 :                 r->out.info->e.info3->count = num_jn;
     361           0 :                 break;
     362           0 :         default:
     363           0 :                 return WERR_INVALID_PARAMETER;
     364             :         }
     365             : 
     366           0 :         for (i = 0; i < num_jn; i++) {
     367           0 :                 switch (r->in.level) {
     368           0 :                 case 1:
     369           0 :                         init_reply_dfs_info_1(ctx, &jn[i], &r->out.info->e.info1->s[i]);
     370           0 :                         break;
     371           0 :                 case 2:
     372           0 :                         init_reply_dfs_info_2(ctx, &jn[i], &r->out.info->e.info2->s[i]);
     373           0 :                         break;
     374           0 :                 case 3:
     375           0 :                         init_reply_dfs_info_3(ctx, &jn[i], &r->out.info->e.info3->s[i]);
     376           0 :                         break;
     377           0 :                 default:
     378           0 :                         return WERR_INVALID_PARAMETER;
     379             :                 }
     380             :         }
     381             : 
     382           0 :         return WERR_OK;
     383             : }
     384             : 
     385           0 : WERROR _dfs_GetInfo(struct pipes_struct *p, struct dfs_GetInfo *r)
     386             : {
     387           0 :         struct dcesrv_call_state *dce_call = p->dce_call;
     388           0 :         struct dcesrv_connection *dcesrv_conn = dce_call->conn;
     389           0 :         const struct tsocket_address *local_address =
     390           0 :                 dcesrv_connection_get_local_address(dcesrv_conn);
     391           0 :         const struct tsocket_address *remote_address =
     392           0 :                 dcesrv_connection_get_remote_address(dcesrv_conn);
     393           0 :         struct auth_session_info *session_info =
     394           0 :                 dcesrv_call_session_info(dce_call);
     395           0 :         size_t consumedcnt = strlen(r->in.dfs_entry_path);
     396           0 :         struct junction_map *jn = NULL;
     397           0 :         bool self_ref = False;
     398           0 :         TALLOC_CTX *ctx = talloc_tos();
     399             :         bool ret;
     400             :         NTSTATUS status;
     401             : 
     402           0 :         jn = talloc_zero(ctx, struct junction_map);
     403           0 :         if (!jn) {
     404           0 :                 return WERR_NOT_ENOUGH_MEMORY;
     405             :         }
     406             : 
     407           0 :         ret = create_junction(ctx, r->in.dfs_entry_path,
     408             :                               true, /* allow broken_path */
     409             :                               jn);
     410           0 :         if (!ret) {
     411           0 :                 return WERR_NERR_DFSNOSUCHSERVER;
     412             :         }
     413             : 
     414             :         /* The following call can change the cwd. */
     415           0 :         status = get_referred_path(ctx,
     416             :                                    session_info,
     417             :                                    r->in.dfs_entry_path,
     418             :                                    remote_address,
     419             :                                    local_address,
     420             :                                    true, /*allow_broken_path */
     421             :                                    jn, &consumedcnt, &self_ref);
     422           0 :         if(!NT_STATUS_IS_OK(status) ||
     423           0 :                         consumedcnt < strlen(r->in.dfs_entry_path)) {
     424           0 :                 return WERR_NERR_DFSNOSUCHVOLUME;
     425             :         }
     426             : 
     427           0 :         switch (r->in.level) {
     428           0 :                 case 1:
     429           0 :                         r->out.info->info1 = talloc_zero(ctx,struct dfs_Info1);
     430           0 :                         if (!r->out.info->info1) {
     431           0 :                                 return WERR_NOT_ENOUGH_MEMORY;
     432             :                         }
     433           0 :                         ret = init_reply_dfs_info_1(ctx, jn, r->out.info->info1);
     434           0 :                         break;
     435           0 :                 case 2:
     436           0 :                         r->out.info->info2 = talloc_zero(ctx,struct dfs_Info2);
     437           0 :                         if (!r->out.info->info2) {
     438           0 :                                 return WERR_NOT_ENOUGH_MEMORY;
     439             :                         }
     440           0 :                         ret = init_reply_dfs_info_2(ctx, jn, r->out.info->info2);
     441           0 :                         break;
     442           0 :                 case 3:
     443           0 :                         r->out.info->info3 = talloc_zero(ctx,struct dfs_Info3);
     444           0 :                         if (!r->out.info->info3) {
     445           0 :                                 return WERR_NOT_ENOUGH_MEMORY;
     446             :                         }
     447           0 :                         ret = init_reply_dfs_info_3(ctx, jn, r->out.info->info3);
     448           0 :                         break;
     449           0 :                 case 100:
     450           0 :                         r->out.info->info100 = talloc_zero(ctx,struct dfs_Info100);
     451           0 :                         if (!r->out.info->info100) {
     452           0 :                                 return WERR_NOT_ENOUGH_MEMORY;
     453             :                         }
     454           0 :                         ret = init_reply_dfs_info_100(ctx, jn, r->out.info->info100);
     455           0 :                         break;
     456           0 :                 default:
     457           0 :                         r->out.info->info1 = NULL;
     458           0 :                         return WERR_INVALID_PARAMETER;
     459             :         }
     460             : 
     461           0 :         if (!ret)
     462           0 :                 return WERR_INVALID_PARAMETER;
     463             : 
     464           0 :         return WERR_OK;
     465             : }
     466             : 
     467           0 : WERROR _dfs_SetInfo(struct pipes_struct *p, struct dfs_SetInfo *r)
     468             : {
     469             :         /* FIXME: Implement your code here */
     470           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     471           0 :         return WERR_NOT_SUPPORTED;
     472             : }
     473             : 
     474           0 : WERROR _dfs_Rename(struct pipes_struct *p, struct dfs_Rename *r)
     475             : {
     476             :         /* FIXME: Implement your code here */
     477           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     478           0 :         return WERR_NOT_SUPPORTED;
     479             : }
     480             : 
     481           0 : WERROR _dfs_Move(struct pipes_struct *p, struct dfs_Move *r)
     482             : {
     483             :         /* FIXME: Implement your code here */
     484           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     485           0 :         return WERR_NOT_SUPPORTED;
     486             : }
     487             : 
     488           0 : WERROR _dfs_ManagerGetConfigInfo(struct pipes_struct *p, struct dfs_ManagerGetConfigInfo *r)
     489             : {
     490             :         /* FIXME: Implement your code here */
     491           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     492           0 :         return WERR_NOT_SUPPORTED;
     493             : }
     494             : 
     495           0 : WERROR _dfs_ManagerSendSiteInfo(struct pipes_struct *p, struct dfs_ManagerSendSiteInfo *r)
     496             : {
     497             :         /* FIXME: Implement your code here */
     498           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     499           0 :         return WERR_NOT_SUPPORTED;
     500             : }
     501             : 
     502           0 : WERROR _dfs_AddFtRoot(struct pipes_struct *p, struct dfs_AddFtRoot *r)
     503             : {
     504             :         /* FIXME: Implement your code here */
     505           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     506           0 :         return WERR_NOT_SUPPORTED;
     507             : }
     508             : 
     509           0 : WERROR _dfs_RemoveFtRoot(struct pipes_struct *p, struct dfs_RemoveFtRoot *r)
     510             : {
     511             :         /* FIXME: Implement your code here */
     512           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     513           0 :         return WERR_NOT_SUPPORTED;
     514             : }
     515             : 
     516           0 : WERROR _dfs_AddStdRoot(struct pipes_struct *p, struct dfs_AddStdRoot *r)
     517             : {
     518             :         /* FIXME: Implement your code here */
     519           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     520           0 :         return WERR_NOT_SUPPORTED;
     521             : }
     522             : 
     523           0 : WERROR _dfs_RemoveStdRoot(struct pipes_struct *p, struct dfs_RemoveStdRoot *r)
     524             : {
     525             :         /* FIXME: Implement your code here */
     526           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     527           0 :         return WERR_NOT_SUPPORTED;
     528             : }
     529             : 
     530           0 : WERROR _dfs_ManagerInitialize(struct pipes_struct *p, struct dfs_ManagerInitialize *r)
     531             : {
     532             :         /* FIXME: Implement your code here */
     533           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     534           0 :         return WERR_NOT_SUPPORTED;
     535             : }
     536             : 
     537           0 : WERROR _dfs_AddStdRootForced(struct pipes_struct *p, struct dfs_AddStdRootForced *r)
     538             : {
     539             :         /* FIXME: Implement your code here */
     540           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     541           0 :         return WERR_NOT_SUPPORTED;
     542             : }
     543             : 
     544           0 : WERROR _dfs_GetDcAddress(struct pipes_struct *p, struct dfs_GetDcAddress *r)
     545             : {
     546             :         /* FIXME: Implement your code here */
     547           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     548           0 :         return WERR_NOT_SUPPORTED;
     549             : }
     550             : 
     551           0 : WERROR _dfs_SetDcAddress(struct pipes_struct *p, struct dfs_SetDcAddress *r)
     552             : {
     553             :         /* FIXME: Implement your code here */
     554           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     555           0 :         return WERR_NOT_SUPPORTED;
     556             : }
     557             : 
     558           0 : WERROR _dfs_FlushFtTable(struct pipes_struct *p, struct dfs_FlushFtTable *r)
     559             : {
     560             :         /* FIXME: Implement your code here */
     561           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     562           0 :         return WERR_NOT_SUPPORTED;
     563             : }
     564             : 
     565           0 : WERROR _dfs_Add2(struct pipes_struct *p, struct dfs_Add2 *r)
     566             : {
     567             :         /* FIXME: Implement your code here */
     568           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     569           0 :         return WERR_NOT_SUPPORTED;
     570             : }
     571             : 
     572           0 : WERROR _dfs_Remove2(struct pipes_struct *p, struct dfs_Remove2 *r)
     573             : {
     574             :         /* FIXME: Implement your code here */
     575           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     576           0 :         return WERR_NOT_SUPPORTED;
     577             : }
     578             : 
     579           0 : WERROR _dfs_EnumEx(struct pipes_struct *p, struct dfs_EnumEx *r)
     580             : {
     581             :         /* FIXME: Implement your code here */
     582           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     583           0 :         return WERR_NOT_SUPPORTED;
     584             : }
     585             : 
     586           0 : WERROR _dfs_SetInfo2(struct pipes_struct *p, struct dfs_SetInfo2 *r)
     587             : {
     588             :         /* FIXME: Implement your code here */
     589           0 :         p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
     590           0 :         return WERR_NOT_SUPPORTED;
     591             : }
     592             : 
     593             : /* include the generated boilerplate */
     594             : #include "librpc/gen_ndr/ndr_dfs_scompat.c"

Generated by: LCOV version 1.13