2007-09-11 22:31:29 +04:00
/*
2002-01-30 09:08:46 +03:00
* Unix SMB / CIFS implementation .
2001-02-27 21:22:39 +03:00
* RPC Pipe client / server routines for Dfs
2006-02-04 01:19:41 +03:00
* Copyright ( C ) Shirish Kalele 2000.
2007-09-11 22:31:29 +04:00
* Copyright ( C ) Jeremy Allison 2001 - 2007.
2006-09-13 20:28:25 +04:00
* Copyright ( C ) Jelmer Vernooij 2005 - 2006.
2007-09-11 22:31:29 +04:00
*
2001-02-27 21:22:39 +03:00
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2007-07-09 23:25:36 +04:00
* the Free Software Foundation ; either version 3 of the License , or
2001-02-27 21:22:39 +03:00
* ( at your option ) any later version .
2007-09-11 22:31:29 +04:00
*
2001-02-27 21:22:39 +03:00
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2007-09-11 22:31:29 +04:00
*
2001-02-27 21:22:39 +03:00
* You should have received a copy of the GNU General Public License
2007-07-10 09:23:25 +04:00
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
2001-02-27 21:22:39 +03:00
*/
/* This is the implementation of the dfs pipe. */
# include "includes.h"
2009-11-26 20:21:28 +03:00
# include "../librpc/gen_ndr/srv_dfs.h"
2001-02-27 21:22:39 +03:00
2002-07-15 14:35:28 +04:00
# undef DBGC_CLASS
2005-06-28 23:25:48 +04:00
# define DBGC_CLASS DBGC_MSDFS
2001-02-27 21:22:39 +03:00
2001-09-12 05:14:03 +04:00
/* This function does not return a WERROR or NTSTATUS code but rather 1 if
dfs exists , or 0 otherwise . */
2007-01-18 13:18:59 +03:00
void _dfs_GetManagerVersion ( pipes_struct * p , struct dfs_GetManagerVersion * r )
2001-02-27 21:22:39 +03:00
{
2007-06-27 13:23:50 +04:00
if ( lp_host_msdfs ( ) ) {
* r - > out . version = DFS_MANAGER_VERSION_NT4 ;
} else {
2007-12-21 00:17:16 +03:00
* r - > out . version = ( enum dfs_ManagerVersion ) 0 ;
2007-06-27 13:23:50 +04:00
}
2001-02-27 21:22:39 +03:00
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_Add ( pipes_struct * p , struct dfs_Add * r )
2001-02-27 21:22:39 +03:00
{
2007-09-11 22:31:29 +04:00
struct junction_map * jn = NULL ;
struct referral * old_referral_list = NULL ;
2007-10-19 04:40:25 +04:00
bool self_ref = False ;
2007-03-12 20:55:24 +03:00
int consumedcnt = 0 ;
2007-09-11 22:31:29 +04:00
char * altpath = NULL ;
NTSTATUS status ;
TALLOC_CTX * ctx = talloc_tos ( ) ;
2004-03-10 04:32:26 +03:00
2008-11-24 01:48:17 +03:00
if ( p - > server_info - > utok . uid ! = sec_initial_uid ( ) ) {
2004-03-10 04:32:26 +03:00
DEBUG ( 10 , ( " _dfs_add: uid != 0. Access denied. \n " ) ) ;
return WERR_ACCESS_DENIED ;
}
2007-09-11 22:31:29 +04:00
jn = TALLOC_ZERO_P ( ctx , struct junction_map ) ;
if ( ! jn ) {
return WERR_NOMEM ;
}
2004-03-10 04:32:26 +03:00
DEBUG ( 5 , ( " init_reply_dfs_add: Request to add %s -> %s \\ %s. \n " ,
2007-01-18 13:18:59 +03:00
r - > in . path , r - > in . server , r - > in . share ) ) ;
2004-03-10 04:32:26 +03:00
2007-09-11 22:31:29 +04:00
altpath = talloc_asprintf ( ctx , " %s \\ %s " ,
r - > in . server ,
r - > in . share ) ;
if ( ! altpath ) {
return WERR_NOMEM ;
}
2004-03-10 04:32:26 +03:00
/* The following call can change the cwd. */
2007-09-11 22:31:29 +04:00
status = get_referred_path ( ctx , r - > in . path , jn ,
& consumedcnt , & self_ref ) ;
if ( ! NT_STATUS_IS_OK ( status ) ) {
return ntstatus_to_werror ( status ) ;
2004-03-10 04:32:26 +03:00
}
2007-09-11 22:31:29 +04:00
jn - > referral_count + = 1 ;
old_referral_list = jn - > referral_list ;
if ( jn - > referral_count < 1 ) {
return WERR_NOMEM ;
}
jn - > referral_list = TALLOC_ARRAY ( ctx , struct referral , jn - > referral_count ) ;
if ( jn - > referral_list = = NULL ) {
2004-03-10 04:32:26 +03:00
DEBUG ( 0 , ( " init_reply_dfs_add: talloc failed for referral list! \n " ) ) ;
return WERR_DFS_INTERNAL_ERROR ;
}
2007-09-11 22:31:29 +04:00
if ( old_referral_list & & jn - > referral_list ) {
memcpy ( jn - > referral_list , old_referral_list ,
sizeof ( struct referral ) * jn - > referral_count - 1 ) ;
2004-03-10 04:32:26 +03:00
}
2001-02-27 21:22:39 +03:00
2007-09-11 22:31:29 +04:00
jn - > referral_list [ jn - > referral_count - 1 ] . proximity = 0 ;
jn - > referral_list [ jn - > referral_count - 1 ] . ttl = REFERRAL_TTL ;
jn - > referral_list [ jn - > referral_count - 1 ] . alternate_path = altpath ;
2008-06-22 22:33:28 +04:00
if ( ! create_msdfs_link ( jn ) ) {
2004-03-10 04:32:26 +03:00
return WERR_DFS_CANT_CREATE_JUNCT ;
}
2001-02-27 21:22:39 +03:00
2004-03-10 04:32:26 +03:00
return WERR_OK ;
2001-02-27 21:22:39 +03:00
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_Remove ( pipes_struct * p , struct dfs_Remove * r )
2001-02-27 21:22:39 +03:00
{
2007-09-11 22:31:29 +04:00
struct junction_map * jn = NULL ;
2007-10-19 04:40:25 +04:00
bool self_ref = False ;
2007-03-12 20:55:24 +03:00
int consumedcnt = 0 ;
2007-10-19 04:40:25 +04:00
bool found = False ;
2007-09-11 22:31:29 +04:00
TALLOC_CTX * ctx = talloc_tos ( ) ;
char * altpath = NULL ;
2004-03-10 04:32:26 +03:00
2008-11-24 01:48:17 +03:00
if ( p - > server_info - > utok . uid ! = sec_initial_uid ( ) ) {
2004-03-10 04:32:26 +03:00
DEBUG ( 10 , ( " _dfs_remove: uid != 0. Access denied. \n " ) ) ;
return WERR_ACCESS_DENIED ;
2001-02-27 21:22:39 +03:00
}
2004-03-10 04:32:26 +03:00
2007-09-11 22:31:29 +04:00
jn = TALLOC_ZERO_P ( ctx , struct junction_map ) ;
if ( ! jn ) {
return WERR_NOMEM ;
}
2007-06-27 13:23:50 +04:00
if ( r - > in . servername & & r - > in . sharename ) {
2007-09-11 22:31:29 +04:00
altpath = talloc_asprintf ( ctx , " %s \\ %s " ,
r - > in . servername ,
r - > in . sharename ) ;
if ( ! altpath ) {
return WERR_NOMEM ;
}
2008-01-12 09:47:25 +03:00
strlower_m ( altpath ) ;
2007-09-11 22:31:29 +04:00
DEBUG ( 5 , ( " init_reply_dfs_remove: Request to remove %s -> %s \\ %s. \n " ,
r - > in . dfs_entry_path , r - > in . servername , r - > in . sharename ) ) ;
2004-03-10 04:32:26 +03:00
}
2007-09-11 22:31:29 +04:00
if ( ! NT_STATUS_IS_OK ( get_referred_path ( ctx , r - > in . dfs_entry_path , jn ,
& consumedcnt , & self_ref ) ) ) {
2004-03-10 04:32:26 +03:00
return WERR_DFS_NO_SUCH_VOL ;
2001-02-27 21:22:39 +03:00
}
2004-03-10 04:32:26 +03:00
/* if no server-share pair given, remove the msdfs link completely */
2007-06-27 13:23:50 +04:00
if ( ! r - > in . servername & & ! r - > in . sharename ) {
2007-09-11 22:31:29 +04:00
if ( ! remove_msdfs_link ( jn ) ) {
2004-03-10 04:32:26 +03:00
return WERR_DFS_NO_SUCH_VOL ;
}
} else {
int i = 0 ;
/* compare each referral in the list with the one to remove */
2007-09-11 22:31:29 +04:00
DEBUG ( 10 , ( " altpath: .%s. refcnt: %d \n " , altpath , jn - > referral_count ) ) ;
for ( i = 0 ; i < jn - > referral_count ; i + + ) {
char * refpath = talloc_strdup ( ctx ,
jn - > referral_list [ i ] . alternate_path ) ;
if ( ! refpath ) {
return WERR_NOMEM ;
}
2004-03-10 04:32:26 +03:00
trim_char ( refpath , ' \\ ' , ' \\ ' ) ;
DEBUG ( 10 , ( " _dfs_remove: refpath: .%s. \n " , refpath ) ) ;
if ( strequal ( refpath , altpath ) ) {
2007-09-11 22:31:29 +04:00
* ( jn - > referral_list [ i ] . alternate_path ) = ' \0 ' ;
2004-03-10 04:32:26 +03:00
DEBUG ( 10 , ( " _dfs_remove: Removal request matches referral %s \n " ,
refpath ) ) ;
found = True ;
}
}
if ( ! found ) {
return WERR_DFS_NO_SUCH_SHARE ;
}
/* Only one referral, remove it */
2007-09-11 22:31:29 +04:00
if ( jn - > referral_count = = 1 ) {
if ( ! remove_msdfs_link ( jn ) ) {
2004-03-10 04:32:26 +03:00
return WERR_DFS_NO_SUCH_VOL ;
}
} else {
2008-06-22 22:33:28 +04:00
if ( ! create_msdfs_link ( jn ) ) {
2004-03-10 04:32:26 +03:00
return WERR_DFS_CANT_CREATE_JUNCT ;
}
}
2001-02-27 21:22:39 +03:00
}
2004-03-10 04:32:26 +03:00
return WERR_OK ;
2001-02-27 21:22:39 +03:00
}
2007-10-19 04:40:25 +04:00
static bool init_reply_dfs_info_1 ( TALLOC_CTX * mem_ctx , struct junction_map * j , struct dfs_Info1 * dfs1 )
2001-02-27 21:22:39 +03:00
{
2007-09-11 22:31:29 +04:00
dfs1 - > path = talloc_asprintf ( mem_ctx ,
" \\ \\ %s \\ %s \\ %s " , global_myname ( ) ,
2006-09-13 20:28:25 +04:00
j - > service_name , j - > volume_name ) ;
2006-09-13 21:39:21 +04:00
if ( dfs1 - > path = = NULL )
return False ;
2006-09-13 20:28:25 +04:00
DEBUG ( 5 , ( " init_reply_dfs_info_1: initing entrypath: %s \n " , dfs1 - > path ) ) ;
2004-03-10 04:32:26 +03:00
return True ;
2001-02-27 21:22:39 +03:00
}
2007-10-19 04:40:25 +04:00
static bool init_reply_dfs_info_2 ( TALLOC_CTX * mem_ctx , struct junction_map * j , struct dfs_Info2 * dfs2 )
2001-02-27 21:22:39 +03:00
{
2007-09-11 22:31:29 +04:00
dfs2 - > path = talloc_asprintf ( mem_ctx ,
2006-09-13 20:28:25 +04:00
" \\ \\ %s \\ %s \\ %s " , global_myname ( ) , j - > service_name , j - > volume_name ) ;
2006-09-13 21:39:21 +04:00
if ( dfs2 - > path = = NULL )
return False ;
2006-09-13 20:28:25 +04:00
dfs2 - > comment = talloc_strdup ( mem_ctx , j - > comment ) ;
2006-02-04 01:19:41 +03:00
dfs2 - > state = 1 ; /* set up state of dfs junction as OK */
dfs2 - > num_stores = j - > referral_count ;
2004-03-10 04:32:26 +03:00
return True ;
2001-02-27 21:22:39 +03:00
}
2007-10-19 04:40:25 +04:00
static bool init_reply_dfs_info_3 ( TALLOC_CTX * mem_ctx , struct junction_map * j , struct dfs_Info3 * dfs3 )
2001-02-27 21:22:39 +03:00
{
2006-02-04 01:19:41 +03:00
int ii ;
if ( j - > volume_name [ 0 ] = = ' \0 ' )
2006-09-13 20:28:25 +04:00
dfs3 - > path = talloc_asprintf ( mem_ctx , " \\ \\ %s \\ %s " ,
2006-02-04 01:19:41 +03:00
global_myname ( ) , j - > service_name ) ;
else
2006-09-13 20:28:25 +04:00
dfs3 - > path = talloc_asprintf ( mem_ctx , " \\ \\ %s \\ %s \\ %s " , global_myname ( ) ,
2006-02-04 01:19:41 +03:00
j - > service_name , j - > volume_name ) ;
2006-09-13 21:39:21 +04:00
if ( dfs3 - > path = = NULL )
return False ;
2006-09-13 20:28:25 +04:00
dfs3 - > comment = talloc_strdup ( mem_ctx , j - > comment ) ;
2006-02-04 01:19:41 +03:00
dfs3 - > state = 1 ;
2006-09-13 20:28:25 +04:00
dfs3 - > num_stores = j - > referral_count ;
2007-09-11 22:31:29 +04:00
2006-02-04 01:19:41 +03:00
/* also enumerate the stores */
2007-04-29 23:54:26 +04:00
if ( j - > referral_count ) {
dfs3 - > stores = TALLOC_ARRAY ( mem_ctx , struct dfs_StorageInfo , j - > referral_count ) ;
if ( ! dfs3 - > stores )
return False ;
memset ( dfs3 - > stores , ' \0 ' , j - > referral_count * sizeof ( struct dfs_StorageInfo ) ) ;
} else {
dfs3 - > stores = NULL ;
}
2006-02-04 01:19:41 +03:00
for ( ii = 0 ; ii < j - > referral_count ; ii + + ) {
2007-09-11 22:31:29 +04:00
char * p ;
char * path = NULL ;
struct dfs_StorageInfo * stor = & ( dfs3 - > stores [ ii ] ) ;
2006-02-04 01:19:41 +03:00
struct referral * ref = & ( j - > referral_list [ ii ] ) ;
2007-09-11 22:31:29 +04:00
path = talloc_strdup ( mem_ctx , ref - > alternate_path ) ;
if ( ! path ) {
return False ;
}
2006-02-04 01:19:41 +03:00
trim_char ( path , ' \\ ' , ' \0 ' ) ;
p = strrchr_m ( path , ' \\ ' ) ;
if ( p = = NULL ) {
DEBUG ( 4 , ( " init_reply_dfs_info_3: invalid path: no \\ found in %s \n " , path ) ) ;
continue ;
2004-03-10 04:32:26 +03:00
}
2006-02-04 01:19:41 +03:00
* p = ' \0 ' ;
DEBUG ( 5 , ( " storage %d: %s.%s \n " , ii , path , p + 1 ) ) ;
stor - > state = 2 ; /* set all stores as ONLINE */
2006-09-13 20:28:25 +04:00
stor - > server = talloc_strdup ( mem_ctx , path ) ;
stor - > share = talloc_strdup ( mem_ctx , p + 1 ) ;
2001-02-27 21:22:39 +03:00
}
2004-03-10 04:32:26 +03:00
return True ;
2001-02-27 21:22:39 +03:00
}
2007-10-19 04:40:25 +04:00
static bool init_reply_dfs_info_100 ( TALLOC_CTX * mem_ctx , struct junction_map * j , struct dfs_Info100 * dfs100 )
2006-08-08 15:00:16 +04:00
{
2006-09-13 20:28:25 +04:00
dfs100 - > comment = talloc_strdup ( mem_ctx , j - > comment ) ;
2006-08-08 15:00:16 +04:00
return True ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_Enum ( pipes_struct * p , struct dfs_Enum * r )
2001-02-27 21:22:39 +03:00
{
2007-09-11 22:31:29 +04:00
struct junction_map * jn = NULL ;
size_t num_jn = 0 ;
size_t i ;
TALLOC_CTX * ctx = talloc_tos ( ) ;
jn = enum_msdfs_links ( ctx , & num_jn ) ;
if ( ! jn | | num_jn = = 0 ) {
num_jn = 0 ;
jn = NULL ;
}
2007-09-13 04:29:25 +04:00
DEBUG ( 5 , ( " _dfs_Enum: %u junctions found in Dfs, doing level %d \n " ,
( unsigned int ) num_jn , r - > in . level ) ) ;
2006-02-04 01:19:41 +03:00
2007-01-18 13:18:59 +03:00
* r - > out . total = num_jn ;
2006-02-04 01:19:41 +03:00
/* Create the return array */
2007-01-18 13:18:59 +03:00
switch ( r - > in . level ) {
2004-03-10 04:32:26 +03:00
case 1 :
2007-04-29 23:54:26 +04:00
if ( num_jn ) {
2007-09-11 22:31:29 +04:00
if ( ( r - > out . info - > e . info1 - > s = TALLOC_ARRAY ( ctx , struct dfs_Info1 , num_jn ) ) = = NULL ) {
2007-04-29 23:54:26 +04:00
return WERR_NOMEM ;
}
} else {
r - > out . info - > e . info1 - > s = NULL ;
2004-03-10 04:32:26 +03:00
}
2007-01-18 13:18:59 +03:00
r - > out . info - > e . info1 - > count = num_jn ;
2006-02-04 01:19:41 +03:00
break ;
2004-03-10 04:32:26 +03:00
case 2 :
2007-04-29 23:54:26 +04:00
if ( num_jn ) {
2007-09-11 22:31:29 +04:00
if ( ( r - > out . info - > e . info2 - > s = TALLOC_ARRAY ( ctx , struct dfs_Info2 , num_jn ) ) = = NULL ) {
2007-04-29 23:54:26 +04:00
return WERR_NOMEM ;
}
} else {
r - > out . info - > e . info2 - > s = NULL ;
2004-03-10 04:32:26 +03:00
}
2007-01-18 13:18:59 +03:00
r - > out . info - > e . info2 - > count = num_jn ;
2006-02-04 01:19:41 +03:00
break ;
2004-03-10 04:32:26 +03:00
case 3 :
2007-04-29 23:54:26 +04:00
if ( num_jn ) {
2007-09-11 22:31:29 +04:00
if ( ( r - > out . info - > e . info3 - > s = TALLOC_ARRAY ( ctx , struct dfs_Info3 , num_jn ) ) = = NULL ) {
2007-04-29 23:54:26 +04:00
return WERR_NOMEM ;
}
} else {
r - > out . info - > e . info3 - > s = NULL ;
2006-02-04 01:19:41 +03:00
}
2007-01-18 13:18:59 +03:00
r - > out . info - > e . info3 - > count = num_jn ;
2004-03-10 04:32:26 +03:00
break ;
2001-02-27 21:22:39 +03:00
default :
2001-09-12 05:14:03 +04:00
return WERR_INVALID_PARAM ;
2004-03-10 04:32:26 +03:00
}
2006-02-04 01:19:41 +03:00
for ( i = 0 ; i < num_jn ; i + + ) {
2007-01-18 13:18:59 +03:00
switch ( r - > in . level ) {
2007-09-11 22:31:29 +04:00
case 1 :
init_reply_dfs_info_1 ( ctx , & jn [ i ] , & r - > out . info - > e . info1 - > s [ i ] ) ;
2006-02-04 01:19:41 +03:00
break ;
case 2 :
2007-09-11 22:31:29 +04:00
init_reply_dfs_info_2 ( ctx , & jn [ i ] , & r - > out . info - > e . info2 - > s [ i ] ) ;
2006-02-04 01:19:41 +03:00
break ;
case 3 :
2007-09-11 22:31:29 +04:00
init_reply_dfs_info_3 ( ctx , & jn [ i ] , & r - > out . info - > e . info3 - > s [ i ] ) ;
2006-02-04 01:19:41 +03:00
break ;
default :
return WERR_INVALID_PARAM ;
}
}
2007-09-11 22:31:29 +04:00
2006-09-13 20:28:25 +04:00
return WERR_OK ;
2001-02-27 21:22:39 +03:00
}
2007-04-29 23:54:26 +04:00
2007-01-18 13:18:59 +03:00
WERROR _dfs_GetInfo ( pipes_struct * p , struct dfs_GetInfo * r )
2001-02-27 21:22:39 +03:00
{
2007-09-11 22:31:29 +04:00
int consumedcnt = strlen ( r - > in . dfs_entry_path ) ;
struct junction_map * jn = NULL ;
2007-10-19 04:40:25 +04:00
bool self_ref = False ;
2007-09-11 22:31:29 +04:00
TALLOC_CTX * ctx = talloc_tos ( ) ;
2007-10-19 04:40:25 +04:00
bool ret ;
2003-10-28 03:51:21 +03:00
2007-09-11 22:31:29 +04:00
jn = TALLOC_ZERO_P ( ctx , struct junction_map ) ;
if ( ! jn ) {
return WERR_NOMEM ;
}
if ( ! create_junction ( ctx , r - > in . dfs_entry_path , jn ) ) {
2003-10-28 03:51:21 +03:00
return WERR_DFS_NO_SUCH_SERVER ;
2007-09-11 22:31:29 +04:00
}
2003-10-28 03:51:21 +03:00
/* The following call can change the cwd. */
2007-09-11 22:31:29 +04:00
if ( ! NT_STATUS_IS_OK ( get_referred_path ( ctx , r - > in . dfs_entry_path ,
jn , & consumedcnt , & self_ref ) ) | |
consumedcnt < strlen ( r - > in . dfs_entry_path ) ) {
2003-10-28 03:51:21 +03:00
return WERR_DFS_NO_SUCH_VOL ;
}
2001-02-27 21:22:39 +03:00
2007-01-18 13:18:59 +03:00
switch ( r - > in . level ) {
2007-09-28 02:55:11 +04:00
case 1 :
r - > out . info - > info1 = TALLOC_ZERO_P ( ctx , struct dfs_Info1 ) ;
if ( ! r - > out . info - > info1 ) {
return WERR_NOMEM ;
}
ret = init_reply_dfs_info_1 ( ctx , jn , r - > out . info - > info1 ) ;
break ;
case 2 :
r - > out . info - > info2 = TALLOC_ZERO_P ( ctx , struct dfs_Info2 ) ;
if ( ! r - > out . info - > info2 ) {
return WERR_NOMEM ;
}
ret = init_reply_dfs_info_2 ( ctx , jn , r - > out . info - > info2 ) ;
break ;
case 3 :
r - > out . info - > info3 = TALLOC_ZERO_P ( ctx , struct dfs_Info3 ) ;
if ( ! r - > out . info - > info3 ) {
return WERR_NOMEM ;
}
ret = init_reply_dfs_info_3 ( ctx , jn , r - > out . info - > info3 ) ;
break ;
case 100 :
r - > out . info - > info100 = TALLOC_ZERO_P ( ctx , struct dfs_Info100 ) ;
if ( ! r - > out . info - > info100 ) {
return WERR_NOMEM ;
}
ret = init_reply_dfs_info_100 ( ctx , jn , r - > out . info - > info100 ) ;
break ;
2006-02-04 01:19:41 +03:00
default :
2007-01-18 13:18:59 +03:00
r - > out . info - > info1 = NULL ;
2006-09-13 20:28:25 +04:00
return WERR_INVALID_PARAM ;
2006-02-04 01:19:41 +03:00
}
2007-09-11 22:31:29 +04:00
if ( ! ret )
2006-09-13 20:28:25 +04:00
return WERR_INVALID_PARAM ;
2007-09-11 22:31:29 +04:00
2006-09-13 20:28:25 +04:00
return WERR_OK ;
2001-02-27 21:22:39 +03:00
}
2006-02-04 01:19:41 +03:00
2007-01-18 13:18:59 +03:00
WERROR _dfs_SetInfo ( pipes_struct * p , struct dfs_SetInfo * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_Rename ( pipes_struct * p , struct dfs_Rename * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_Move ( pipes_struct * p , struct dfs_Move * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_ManagerGetConfigInfo ( pipes_struct * p , struct dfs_ManagerGetConfigInfo * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_ManagerSendSiteInfo ( pipes_struct * p , struct dfs_ManagerSendSiteInfo * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_AddFtRoot ( pipes_struct * p , struct dfs_AddFtRoot * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_RemoveFtRoot ( pipes_struct * p , struct dfs_RemoveFtRoot * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_AddStdRoot ( pipes_struct * p , struct dfs_AddStdRoot * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_RemoveStdRoot ( pipes_struct * p , struct dfs_RemoveStdRoot * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_ManagerInitialize ( pipes_struct * p , struct dfs_ManagerInitialize * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_AddStdRootForced ( pipes_struct * p , struct dfs_AddStdRootForced * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_GetDcAddress ( pipes_struct * p , struct dfs_GetDcAddress * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_SetDcAddress ( pipes_struct * p , struct dfs_SetDcAddress * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_FlushFtTable ( pipes_struct * p , struct dfs_FlushFtTable * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_Add2 ( pipes_struct * p , struct dfs_Add2 * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_Remove2 ( pipes_struct * p , struct dfs_Remove2 * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_EnumEx ( pipes_struct * p , struct dfs_EnumEx * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}
2007-01-18 13:18:59 +03:00
WERROR _dfs_SetInfo2 ( pipes_struct * p , struct dfs_SetInfo2 * r )
2006-02-04 01:19:41 +03:00
{
/* FIXME: Implement your code here */
2006-10-10 12:39:11 +04:00
p - > rng_fault_state = True ;
2006-02-04 01:19:41 +03:00
return WERR_NOT_SUPPORTED ;
}