| 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 |  | 
|---|