root/source3/include/MacExtensions.h

/* [<][>][^][v][top][bottom][index][help] */
   1 /* 
   2    Unix SMB/CIFS implementation.
   3    SMB parameters and setup
   4    Copyright (C) Andrew Tridgell 1992-1998
   5    Copyright (C) John H Terpstra 1996-1998
   6    Copyright (C) Luke Kenneth Casson Leighton 1996-1998
   7    Copyright (C) Paul Ashton 1998
   8     
   9    This program is free software; you can redistribute it and/or modify
  10    it under the terms of the GNU General Public License as published by
  11    the Free Software Foundation; either version 3 of the License, or
  12    (at your option) any later version.
  13    
  14    This program is distributed in the hope that it will be useful,
  15    but WITHOUT ANY WARRANTY; without even the implied warranty of
  16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17    GNU General Public License for more details.
  18    
  19    You should have received a copy of the GNU General Public License
  20    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  21 */
  22 #ifndef _MAC_EXTENSIONS_H
  23 #define _MAC_EXTENSIONS_H
  24 
  25 /* Folder that holds the stream info */
  26 #define STREAM_FOLDER                                   ".streams"
  27 #define STREAM_FOLDER_SLASH                     ".streams/"
  28 
  29 /* Common Streams Names*/
  30 #define DefaultStreamTestLen    6
  31 #define DefaultStreamTest               ":$DATA"
  32 #define AFPDATA_STREAM                  "::$DATA"
  33 #define AFPINFO_STREAM                  ":AFP_AfpInfo:$DATA"
  34 #define AFPRESOURCE_STREAM              ":AFP_Resource:$DATA"
  35 #define AFPCOMMENTS_STREAM              ":Comments:$DATA"
  36 #define AFPDESKTOP_STREAM               ":AFP_DeskTop:$DATA"
  37 #define AFPIDINDEX_STREAM               ":AFP_IdIndex:$DATA"
  38 
  39 /*
  40 ** NT's AFP_AfpInfo stream structure
  41 */
  42 #define APF_INFO_SIZE           0x3c            
  43 #define AFP_Signature           0x41465000 
  44 #define AFP_Version                     0x00000100
  45 #define AFP_BackupTime          0x00000080
  46 #define AFP_FinderSize          32
  47 /*
  48 ** Orginal AFP_AfpInfo stream used by NT 
  49 ** We needed a way to store the create date so SAMBA
  50 ** AFP_AfpInfo adds for bytes to this structrure
  51 ** and call's it _SambaAfpInfo
  52 */
  53 typedef struct _AfpInfo
  54 {
  55          uint32         afpi_Signature;                 /* Must be *(PDWORD)"AFP" */
  56          uint32         afpi_Version;                   /* Must be 0x00010000 */
  57          uint32         afpi_Reserved1;
  58          uint32         afpi_BackupTime;                /* Backup time for the file/dir */
  59          unsigned char  afpi_FinderInfo[AFP_FinderSize];        /* Finder Info (32 bytes) */
  60          unsigned char  afpi_ProDosInfo[6];     /* ProDos Info (6 bytes) # */
  61          unsigned char  afpi_Reserved2[6];
  62 } AfpInfo;
  63 
  64 typedef struct _SambaAfpInfo
  65 {
  66          AfpInfo        afp; 
  67          unsigned long  createtime;
  68 } SambaAfpInfo;
  69 
  70 /*
  71 ** On SAMBA this structrue is followed by 4 bytes that store the create
  72 ** date of the file or folder asociated with it.
  73 */
  74 
  75 /*
  76 ** These extentions are only supported with the NT LM 0.12 Dialect. These extentions
  77 ** will be process on a share by share bases.
  78 */
  79 
  80 /*
  81 ** Trans2_Query_FS_Information Call is used by the MacCIFS extentions for three reasons.
  82 ** First to see if the remote server share supports the basic Macintosh CIFS extentions.
  83 ** Second to return some basic need information about the share to the Macintosh.
  84 ** Third to see if this share support any other Macintosh extentions.
  85 **
  86 ** We will be using infromation levels that are betwwen 0x300 and 0x399 for all Macintosh
  87 ** extentions calls. The first of these will be the SMB_MAC_QUERY_FS_INFO level which
  88 ** will allow the server to return the MacQueryFSInfo structure. All fields are Little
  89 ** Endian unless other wise specified.
  90 */
  91 #define SMB_MAC_QUERY_FS_INFO 0x301
  92 
  93 
  94 
  95 /* 
  96 ** The server will return folder access control in the Trans2_Find_First2 
  97 ** and Trans2_Find_Next2 message described later in this document. 
  98 */
  99 #define SUPPORT_MAC_ACCESS_CNTRL        0x0010
 100 /*
 101 ** The server supports setting/getting comments using the mechanism in this 
 102 ** document instead of using the NTFS format described in the Introduction. 
 103 */
 104 #define SUPPORT_MAC_GETSETCOMMENTS      0x0020
 105 /*
 106 ** The Server supports setting and getting Macintosh desktop database information
 107 ** using the mechanism in this document. 
 108 */
 109 #define SUPPORT_MAC_DESKTOPDB_CALLS     0x0040
 110 /*
 111 ** The server will return a unique id for files and directories in the 
 112 ** Trans2_Find_First2 and Trans2_Find_Next2 message described later in this document. 
 113 */
 114 #define SUPPORT_MAC_UNIQUE_IDS          0x0080
 115 /*
 116 ** The server will return this flag telling the client that the server does
 117 ** not support streams or the Macintosh extensions. The rest of this message
 118 ** will be ignored by the client. 
 119 */
 120 #define NO_STREAMS_OR_MAC_SUPPORT       0x0100
 121 
 122 /*
 123 ** We will be adding a new info level to the Trans2_Find_First2 and Trans2_Find_Next2.
 124 ** This info level will be SMB_MAC_FIND_BOTH_HFS_INFO and will support the server
 125 ** return additional information need by the Macintosh. All fields are Little
 126 ** Endian unless other wise specified.
 127 */
 128 
 129 #define SMB_MAC_FIND_BOTH_HFS_INFO        0x302
 130 
 131 enum {
 132         ownerRead       = 0x0400,
 133         ownerWrite      = 0x0200,
 134         ownerSearch     = 0x0100,
 135         groupRead       = 0x0040,
 136         groupWrite      = 0x0020,
 137         groupSearch     = 0x0010,
 138         otherRead       = 0x0004,
 139         otherWrite      = 0x0002,
 140         otherSearch     = 0x0001,
 141         Owner           = 0x0800
 142 };
 143         
 144 
 145 /*
 146 ** We will be adding a new info level to the Trans2_Set_Path_Information.
 147 ** This info level will be SMB_MAC_SET_FINDER_INFO and will support the client
 148 ** setting information on the server need by the Macintosh. All fields are Little
 149 ** Endian unless other wise specified.
 150 */
 151 
 152 #define SMB_MAC_SET_FINDER_INFO   0x303
 153 
 154 enum {
 155         SetCreateDate   = 0x01,                 /* If this is set then set the create date of the file/folder */
 156         SetModDate              = 0x02,                 /* If this is set then set the modify date of the file/folder */
 157         SetFLAttrib             = 0x04,                 /* If this is set then set the Macintosh lock bit of the file/folder */
 158         FndrInfo1               = 0x08,                 /* If this is set then set the first 16 bytes of finder info */
 159         FndrInfo2               = 0x10,                 /* If this is set then set the second 16 bytes of finder info */
 160         SetHidden               = 0x20                  /* We are either setting or unsetting the hidden bit */
 161 };
 162 
 163 
 164 /*
 165 ** We will be adding some new info level to the Trans2_Set_Path_Information and Trans2_Query_Path_Information.
 166 ** These info levels will allow the client to add, get, and remove desktop inforamtion from the
 167 ** server. How the server stores this information is up to them.
 168 */
 169 
 170 /*
 171 ** We need to be able to store an application name and its creator in a database. We send a 
 172 ** Trans2_Set_Path_Information call with the full path of the application in the path field. 
 173 ** We will send an info level that represents adding an application name and creator to the database.
 174 ** We will pass the File Creator in the data message. 
 175 **
 176 ** The server should just respond  with no error or an error.
 177 */
 178 #define SMB_MAC_DT_ADD_APPL       0x304
 179 
 180 /*
 181 ** We need to be able to remove an application name and its creator from a database. We send a 
 182 ** Trans2_Set_Path_Information call with the full path of the application in the path field. 
 183 ** We will send an info level that represents removing an application name and creator from the database.
 184 ** We will pass the File Creator in the data message. 
 185 **
 186 ** The server should just respond  with no error or an error.
 187 */
 188 #define SMB_MAC_DT_REMOVE_APPL    0x305
 189 
 190 
 191 /*
 192 ** We need to be able to get an application name and its creator from a database. We send a 
 193 ** Trans2_Query_Path_Information call in which the name field is just ignore. 
 194 ** We will send an info level that represents getting an application name with a structure that 
 195 ** contains the File Creator and index. Were index has the following meaning.
 196 **              Index = 0; Get the application path from the database with the most current date.
 197 **              Index > 0; Use the index to find the application path from the database.
 198 **                              e.g.    index of 5 means get the fifth entry of this application name in the database.
 199 **                                              if not entry return an error.
 200 **
 201 ** The server returns with a structure that contains the full path to the appication and
 202 ** its creator's date.
 203 */
 204 #define SMB_MAC_DT_GET_APPL       0x306
 205 
 206 
 207 /*
 208 ** We need to be able to get an icon from a database. We send a Trans2_Query_Path_Information call in 
 209 ** which the path name is ignore. We will send an info level that represents getting an icon with a structure
 210 ** that contains the Requested size of the icon, the Icon type, File Creator, and File Type.
 211 **
 212 ** The server returns with a structure that contains the actual size of the icon 
 213 ** (must be less than requested length) and the icon bit map. 
 214 */
 215 #define SMB_MAC_DT_GET_ICON       0x307
 216 
 217 
 218 /*
 219 ** We need to be able to get an icon from a database. We send a Trans2_Query_Path_Information call in 
 220 ** which the path name is ignore. We will send an info level that represents getting an icon with a structure
 221 ** that contains the index and File Creator. The index allows the client to make repeated calls to the server
 222 ** gathering all icon stored by this file creator.
 223 **              
 224 **
 225 ** The server returns with a structure that contains the actual size of the icon 
 226 ** (must be less than requested length) and the icon bit map, File Type, and Icon Type. 
 227 */
 228 #define SMB_MAC_DT_GET_ICON_INFO          0x308
 229 
 230 
 231 
 232 /*
 233 ** We need to be able to add an icon to a database. We send a Trans2_Set_Path_Information call in 
 234 ** which the path name is ignore. We will send an info level that represents setting an icon with a structure
 235 ** that contains the icon data, icon size, icon type, the file type, and file creator.
 236 **              
 237 **
 238 ** The server returns only that the call was successful or not.
 239 */
 240 #define SMB_MAC_DT_ADD_ICON       0x309
 241 
 242 #endif /* _MAC_EXTENSIONS_H */
 243 
 244 /* _MAC_EXTENSIONS_H */
 245 

/* [<][>][^][v][top][bottom][index][help] */