This commit was manufactured by cvs2svn to create branch 'SAMBA_3_0'.
[tprouty/samba.git] / source / include / msdfs.h
1 /* 
2    Unix SMB/CIFS implementation.
3    MSDfs services for Samba
4    Copyright (C) Shirish Kalele 2000
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10    
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15    
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21 #ifndef _MSDFS_H
22 #define _MSDFS_H
23
24 #define REFERRAL_TTL 600
25
26 /* Flags used in trans2 Get Referral reply */
27 #define DFSREF_REFERRAL_SERVER 0x1
28 #define DFSREF_STORAGE_SERVER  0x2
29
30 /* Referral sizes */
31 #define VERSION2_REFERRAL_SIZE 0x16
32 #define VERSION3_REFERRAL_SIZE 0x22
33 #define REFERRAL_HEADER_SIZE 0x08
34
35 /* Maximum number of referrals for each Dfs volume */
36 #define MAX_REFERRAL_COUNT   256
37
38 struct referral
39 {
40         pstring alternate_path; /* contains the path referred */
41         uint32 proximity;
42         uint32 ttl; /* how long should client cache referral */
43 };
44
45 struct junction_map
46 {
47   pstring service_name;
48   pstring volume_name;
49   int referral_count;
50   struct referral* referral_list;
51 };
52
53 struct dfs_path
54 {
55   pstring hostname;
56   pstring servicename;
57   pstring volumename;
58   pstring restofthepath;
59 };
60
61 #define RESOLVE_DFSPATH(name, conn, inbuf, outbuf) \
62 { if(((SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES)) && \
63      dfs_redirect(name,conn)) \
64      return ERROR_NT(NT_STATUS_PATH_NOT_COVERED); }
65
66 #define RESOLVE_FINDFIRST_DFSPATH(name, conn, inbuf, outbuf) \
67 { if((SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES) || \
68      get_remote_arch()==RA_WIN95) \
69       if(dfs_findfirst_redirect(directory,conn)) \
70          return ERROR_NT(NT_STATUS_PATH_NOT_COVERED); }
71  
72 #define init_dfsroot(conn, inbuf, outbuf) \
73 { if(lp_msdfs_root(SNUM(conn)) && lp_host_msdfs())  \
74         SSVAL(outbuf, smb_vwv2, SMB_SHARE_IN_DFS | SMB_SUPPORT_SEARCH_BITS); \
75 }
76
77 #endif /* _MSDFS_H */