2000-03-09 01:14:30 +03:00
/*
2002-07-15 14:35:28 +04:00
Unix SMB / Netbios implementation .
Version 3.0
2000-03-09 01:14:30 +03:00
MSDfs services for Samba
Copyright ( C ) Shirish Kalele 2000
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
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
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 .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
2002-07-15 14:35:28 +04:00
2000-03-09 01:14:30 +03:00
*/
# ifndef _MSDFS_H
# define _MSDFS_H
# define REFERRAL_TTL 600
/* Flags used in trans2 Get Referral reply */
# define DFSREF_REFERRAL_SERVER 0x1
# define DFSREF_STORAGE_SERVER 0x2
2000-05-16 05:13:16 +04:00
/* Referral sizes */
# define VERSION2_REFERRAL_SIZE 0x16
# define VERSION3_REFERRAL_SIZE 0x22
# define REFERRAL_HEADER_SIZE 0x08
/* Maximum number of referrals for each Dfs volume */
# define MAX_REFERRAL_COUNT 256
2005-06-28 23:25:48 +04:00
# define MAX_MSDFS_JUNCTIONS 256
2000-03-09 01:14:30 +03:00
2005-02-23 20:29:28 +03:00
typedef struct _client_referral {
uint32 proximity ;
uint32 ttl ;
pstring dfspath ;
} CLIENT_DFS_REFERRAL ;
2005-08-03 03:24:32 +04:00
struct referral {
2000-05-18 22:43:53 +04:00
pstring alternate_path ; /* contains the path referred */
2000-03-09 01:14:30 +03:00
uint32 proximity ;
uint32 ttl ; /* how long should client cache referral */
} ;
2005-08-03 03:24:32 +04:00
struct junction_map {
pstring service_name ;
pstring volume_name ;
2006-08-08 15:00:16 +04:00
pstring comment ;
2005-08-03 03:24:32 +04:00
int referral_count ;
struct referral * referral_list ;
2000-03-09 01:14:30 +03:00
} ;
2005-08-03 03:24:32 +04:00
struct dfs_path {
2002-07-15 14:35:28 +04:00
pstring hostname ;
pstring servicename ;
pstring reqpath ;
2000-03-10 00:45:16 +03:00
} ;
2002-07-15 14:35:28 +04:00
# define RESOLVE_DFSPATH(name, conn, inbuf, outbuf) \
{ if ( ( SVAL ( inbuf , smb_flg2 ) & FLAGS2_DFS_PATHNAMES ) & & \
lp_host_msdfs ( ) & & lp_msdfs_root ( SNUM ( conn ) ) & & \
2005-04-08 02:37:03 +04:00
dfs_redirect ( name , conn , False ) ) \
2005-04-07 23:43:19 +04:00
return ERROR_BOTH ( NT_STATUS_PATH_NOT_COVERED , \
ERRSRV , ERRbadpath ) ; ; }
# define RESOLVE_DFSPATH_WCARD(name, conn, inbuf, outbuf) \
{ if ( ( SVAL ( inbuf , smb_flg2 ) & FLAGS2_DFS_PATHNAMES ) & & \
lp_host_msdfs ( ) & & lp_msdfs_root ( SNUM ( conn ) ) & & \
2005-04-08 02:37:03 +04:00
dfs_redirect ( name , conn , True ) ) \
2005-03-25 03:58:15 +03:00
return ERROR_BOTH ( NT_STATUS_PATH_NOT_COVERED , \
ERRSRV , ERRbadpath ) ; ; }
2002-07-15 14:35:28 +04:00
# define init_dfsroot(conn, inbuf, outbuf) \
{ if ( lp_msdfs_root ( SNUM ( conn ) ) & & lp_host_msdfs ( ) ) { \
DEBUG ( 2 , ( " Serving %s as a Dfs root \n " , \
lp_servicename ( SNUM ( conn ) ) ) ) ; \
SSVAL ( outbuf , smb_vwv2 , SMB_SHARE_IN_DFS \
| SVAL ( outbuf , smb_vwv2 ) ) ; \
} }
2000-03-09 01:14:30 +03:00
# endif /* _MSDFS_H */