r23779: Change from v2 or later to v3 or later.
[ira/wip.git] / source3 / include / rap.h
1 /* 
2    Samba Unix/Linux SMB client library 
3    RAP (SMB Remote Procedure Calls) defines and structures
4    Copyright (C) Steve French 2001  (sfrench@us.ibm.com)
5    Copyright (C) Jim McDonough 2001 (jmcd@us.ibm.com)
6    
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11    
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16    
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22 #ifndef _RAP_H_
23 #define _RAP_H_
24
25 /*****************************************************/
26 /*                                                   */
27 /*   Additional RAP functionality                    */
28 /*                                                   */
29 /*   RAP is the original SMB RPC, documented         */
30 /*   by Microsoft and X/Open in the 1990s and        */
31 /*   supported by most SMB/CIFS servers although     */
32 /*   it is unlikely that any one implementation      */
33 /*   supports all RAP command codes since some       */
34 /*   are quite obsolete and a few are specific       */
35 /*   to a particular network operating system        */
36 /*                                                   */ 
37 /*   Although it has largely been replaced           */ 
38 /*   for complex remote admistration and management  */
39 /*   (of servers) by the relatively newer            */
40 /*   DCE/RPC based remote API (which better handles  */
41 /*   large >64K data structures), there are many     */
42 /*   important administrative and resource location  */
43 /*   tasks and user tasks (e.g. password change)     */
44 /*   that are performed via RAP.                     */
45 /*                                                   */
46 /*   Although a few of the RAP calls are implemented */
47 /*   in the Samba client library already (clirap.c)  */
48 /*   the new ones are in clirap2.c for easy patching */
49 /*   and integration and a corresponding header      */
50 /*   file, rap.h, has been created.                  */
51 /*                                                   */
52 /*   This is based on data from the CIFS spec        */
53 /*   and the LAN Server and LAN Manager              */
54 /*   Programming Reference books and published       */
55 /*   RAP document and CIFS forum postings and        */
56 /*   lots of trial and error.  Additional            */
57 /*   background information is available from the    */
58 /*   X/Open reference book in their PC Interworking  */
59 /*   series "IPC for SMB" and also from the          */
60 /*   interoperability documentation in               */
61 /*   ftp://ftp.microsoft.com/developr/drg/cifs       */
62 /*                                                   */
63 /*   Function names changed from API_ (as they are   */
64 /*   in the CIFS specification to RAP_ in order      */
65 /*   to avoid confusion with other API calls         */
66 /*   sent via DCE RPC                                */
67 /*                                                   */
68 /*****************************************************/
69
70 /*****************************************************/
71 /*                                                   */
72 /* Although without pound defines (of this header)   */
73 /* cifsrap.c already includes support for:           */
74 /*                                                   */
75 /* WshareEnum (API number 0, level 1)                */
76 /* NetServerEnum2 (API num 104, level 1)             */
77 /* WWkstaUserLogon (132)                             */
78 /* SamOEMchgPasswordUser2_P (214)                    */
79 /*                                                   */
80 /* and cifsprint.c already includes support for:     */
81 /*                                                   */
82 /* WPrintJobEnum (API num 76, level 2)               */
83 /* WPrintJobDel  (API num 81)                        */
84 /*                                                   */
85 /*****************************************************/ 
86
87 #define RAP_WshareEnum                          0
88 #define RAP_WshareGetInfo                       1
89 #define RAP_WshareSetInfo                       2
90 #define RAP_WshareAdd                           3
91 #define RAP_WshareDel                           4
92 #define RAP_NetShareCheck                       5
93 #define RAP_WsessionEnum                        6
94 #define RAP_WsessionGetInfo                     7
95 #define RAP_WsessionDel                         8
96 #define RAP_WconnectionEnum                     9
97 #define RAP_WfileEnum                           10
98 #define RAP_WfileGetInfo                        11
99 #define RAP_WfileClose                          12
100 #define RAP_WserverGetInfo                      13
101 #define RAP_WserverSetInfo                      14
102 #define RAP_WserverDiskEnum                     15
103 #define RAP_WserverAdminCommand                 16
104 #define RAP_NetAuditOpen                        17
105 #define RAP_WauditClear                         18
106 #define RAP_NetErrorLogOpen                     19
107 #define RAP_WerrorLogClear                      20
108 #define RAP_NetCharDevEnum                      21
109 #define RAP_NetCharDevGetInfo                   22
110 #define RAP_WCharDevControl                     23
111 #define RAP_NetCharDevQEnum                     24
112 #define RAP_NetCharDevQGetInfo                  25
113 #define RAP_WCharDevQSetInfo                    26
114 #define RAP_WCharDevQPurge                      27
115 #define RAP_WCharDevQPurgeSelf                  28
116 #define RAP_WMessageNameEnum                    29
117 #define RAP_WMessageNameGetInfo                 30
118 #define RAP_WMessageNameAdd                     31
119 #define RAP_WMessageNameDel                     32
120 #define RAP_WMessageNameFwd                     33
121 #define RAP_WMessageNameUnFwd                   34
122 #define RAP_WMessageBufferSend                  35
123 #define RAP_WMessageFileSend                    36
124 #define RAP_WMessageLogFileSet                  37
125 #define RAP_WMessageLogFileGet                  38
126 #define RAP_WServiceEnum                        39
127 #define RAP_WServiceInstall                     40
128 #define RAP_WServiceControl                     41
129 #define RAP_WAccessEnum                         42
130 #define RAP_WAccessGetInfo                      43
131 #define RAP_WAccessSetInfo                      44
132 #define RAP_WAccessAdd                          45
133 #define RAP_WAccessDel                          46
134 #define RAP_WGroupEnum                          47
135 #define RAP_WGroupAdd                           48
136 #define RAP_WGroupDel                           49
137 #define RAP_WGroupAddUser                       50
138 #define RAP_WGroupDelUser                       51
139 #define RAP_WGroupGetUsers                      52
140 #define RAP_WUserEnum                           53
141 #define RAP_WUserAdd                            54
142 #define RAP_WUserDel                            55
143 #define RAP_WUserGetInfo                        56
144 #define RAP_WUserSetInfo                        57
145 #define RAP_WUserPasswordSet                    58
146 #define RAP_WUserGetGroups                      59
147 #define RAP_WWkstaSetUID                        62
148 #define RAP_WWkstaGetInfo                       63
149 #define RAP_WWkstaSetInfo                       64
150 #define RAP_WUseEnum                            65
151 #define RAP_WUseAdd                             66
152 #define RAP_WUseDel                             67
153 #define RAP_WUseGetInfo                         68
154 #define RAP_WPrintQEnum                         69
155 #define RAP_WPrintQGetInfo                      70
156 #define RAP_WPrintQSetInfo                      71
157 #define RAP_WPrintQAdd                          72
158 #define RAP_WPrintQDel                          73
159 #define RAP_WPrintQPause                        74
160 #define RAP_WPrintQContinue                     75
161 #define RAP_WPrintJobEnum                       76
162 #define RAP_WPrintJobGetInfo                    77
163 #define RAP_WPrintJobSetInfo_OLD                78
164 #define RAP_WPrintJobDel                        81
165 #define RAP_WPrintJobPause                      82
166 #define RAP_WPrintJobContinue                   83
167 #define RAP_WPrintDestEnum                      84
168 #define RAP_WPrintDestGetInfo                   85
169 #define RAP_WPrintDestControl                   86
170 #define RAP_WProfileSave                        87
171 #define RAP_WProfileLoad                        88
172 #define RAP_WStatisticsGet                      89
173 #define RAP_WStatisticsClear                    90
174 #define RAP_NetRemoteTOD                        91
175 #define RAP_WNetBiosEnum                        92
176 #define RAP_WNetBiosGetInfo                     93
177 #define RAP_NetServerEnum                       94
178 #define RAP_I_NetServerEnum                     95
179 #define RAP_WServiceGetInfo                     96
180 #define RAP_WPrintQPurge                        103
181 #define RAP_NetServerEnum2                      104
182 #define RAP_WAccessGetUserPerms                 105
183 #define RAP_WGroupGetInfo                       106
184 #define RAP_WGroupSetInfo                       107
185 #define RAP_WGroupSetUsers                      108
186 #define RAP_WUserSetGroups                      109
187 #define RAP_WUserModalsGet                      110
188 #define RAP_WUserModalsSet                      111
189 #define RAP_WFileEnum2                          112
190 #define RAP_WUserAdd2                           113
191 #define RAP_WUserSetInfo2                       114
192 #define RAP_WUserPasswordSet2                   115
193 #define RAP_I_NetServerEnum2                    116
194 #define RAP_WConfigGet2                         117
195 #define RAP_WConfigGetAll2                      118
196 #define RAP_WGetDCName                          119
197 #define RAP_NetHandleGetInfo                    120
198 #define RAP_NetHandleSetInfo                    121
199 #define RAP_WStatisticsGet2                     122
200 #define RAP_WBuildGetInfo                       123
201 #define RAP_WFileGetInfo2                       124
202 #define RAP_WFileClose2                         125
203 #define RAP_WNetServerReqChallenge              126
204 #define RAP_WNetServerAuthenticate              127
205 #define RAP_WNetServerPasswordSet               128
206 #define RAP_WNetAccountDeltas                   129
207 #define RAP_WNetAccountSync                     130
208 #define RAP_WUserEnum2                          131
209 #define RAP_WWkstaUserLogon                     132
210 #define RAP_WWkstaUserLogoff                    133
211 #define RAP_WLogonEnum                          134
212 #define RAP_WErrorLogRead                       135
213 #define RAP_NetPathType                         136
214 #define RAP_NetPathCanonicalize                 137
215 #define RAP_NetPathCompare                      138
216 #define RAP_NetNameValidate                     139
217 #define RAP_NetNameCanonicalize                 140
218 #define RAP_NetNameCompare                      141
219 #define RAP_WAuditRead                          142
220 #define RAP_WPrintDestAdd                       143
221 #define RAP_WPrintDestSetInfo                   144
222 #define RAP_WPrintDestDel                       145
223 #define RAP_WUserValidate2                      146
224 #define RAP_WPrintJobSetInfo                    147
225 #define RAP_TI_NetServerDiskEnum                148
226 #define RAP_TI_NetServerDiskGetInfo             149
227 #define RAP_TI_FTVerifyMirror                   150
228 #define RAP_TI_FTAbortVerify                    151
229 #define RAP_TI_FTGetInfo                        152
230 #define RAP_TI_FTSetInfo                        153
231 #define RAP_TI_FTLockDisk                       154
232 #define RAP_TI_FTFixError                       155
233 #define RAP_TI_FTAbortFix                       156
234 #define RAP_TI_FTDiagnoseError                  157
235 #define RAP_TI_FTGetDriveStats                  158
236 #define RAP_TI_FTErrorGetInfo                   160
237 #define RAP_NetAccessCheck                      163
238 #define RAP_NetAlertRaise                       164
239 #define RAP_NetAlertStart                       165
240 #define RAP_NetAlertStop                        166
241 #define RAP_NetAuditWrite                       167
242 #define RAP_NetIRemoteAPI                       168
243 #define RAP_NetServiceStatus                    169
244 #define RAP_NetServerRegister                   170
245 #define RAP_NetServerDeregister                 171
246 #define RAP_NetSessionEntryMake                 172
247 #define RAP_NetSessionEntryClear                173
248 #define RAP_NetSessionEntryGetInfo              174
249 #define RAP_NetSessionEntrySetInfo              175
250 #define RAP_NetConnectionEntryMake              176
251 #define RAP_NetConnectionEntryClear             177
252 #define RAP_NetConnectionEntrySetInfo           178
253 #define RAP_NetConnectionEntryGetInfo           179
254 #define RAP_NetFileEntryMake                    180
255 #define RAP_NetFileEntryClear                   181
256 #define RAP_NetFileEntrySetInfo                 182
257 #define RAP_NetFileEntryGetInfo                 183
258 #define RAP_AltSrvMessageBufferSend             184
259 #define RAP_AltSrvMessageFileSend               185
260 #define RAP_wI_NetRplWkstaEnum                  186
261 #define RAP_wI_NetRplWkstaGetInfo               187
262 #define RAP_wI_NetRplWkstaSetInfo               188
263 #define RAP_wI_NetRplWkstaAdd                   189
264 #define RAP_wI_NetRplWkstaDel                   190
265 #define RAP_wI_NetRplProfileEnum                191
266 #define RAP_wI_NetRplProfileGetInfo             192
267 #define RAP_wI_NetRplProfileSetInfo             193
268 #define RAP_wI_NetRplProfileAdd                 194
269 #define RAP_wI_NetRplProfileDel                 195
270 #define RAP_wI_NetRplProfileClone               196
271 #define RAP_wI_NetRplBaseProfileEnum            197
272 #define RAP_WIServerSetInfo                     201
273 #define RAP_WPrintDriverEnum                    205
274 #define RAP_WPrintQProcessorEnum                206
275 #define RAP_WPrintPortEnum                      207
276 #define RAP_WNetWriteUpdateLog                  208
277 #define RAP_WNetAccountUpdate                   209
278 #define RAP_WNetAccountConfirmUpdate            210
279 #define RAP_WConfigSet                          211
280 #define RAP_WAccountsReplicate                  212                      
281 #define RAP_SamOEMChgPasswordUser2_P            214
282 #define RAP_NetServerEnum3                      215
283 #define RAP_WprintDriverGetInfo                 250
284 #define RAP_WprintDriverSetInfo                 251
285 #define RAP_WaliasAdd                           252
286 #define RAP_WaliasDel                           253
287 #define RAP_WaliasGetInfo                       254
288 #define RAP_WaliasSetInfo                       255
289 #define RAP_WaliasEnum                          256
290 #define RAP_WuserGetLogonAsn                    257
291 #define RAP_WuserSetLogonAsn                    258
292 #define RAP_WuserGetAppSel                      259
293 #define RAP_WuserSetAppSel                      260
294 #define RAP_WappAdd                             261
295 #define RAP_WappDel                             262
296 #define RAP_WappGetInfo                         263
297 #define RAP_WappSetInfo                         264
298 #define RAP_WappEnum                            265
299 #define RAP_WUserDCDBInit                       266
300 #define RAP_WDASDAdd                            267
301 #define RAP_WDASDDel                            268
302 #define RAP_WDASDGetInfo                        269
303 #define RAP_WDASDSetInfo                        270
304 #define RAP_WDASDEnum                           271
305 #define RAP_WDASDCheck                          272
306 #define RAP_WDASDCtl                            273
307 #define RAP_WuserRemoteLogonCheck               274
308 #define RAP_WUserPasswordSet3                   275
309 #define RAP_WCreateRIPLMachine                  276
310 #define RAP_WDeleteRIPLMachine                  277
311 #define RAP_WGetRIPLMachineInfo                 278
312 #define RAP_WSetRIPLMachineInfo                 279
313 #define RAP_WEnumRIPLMachine                    280
314 #define RAP_I_ShareAdd                          281
315 #define RAP_AliasEnum                           282
316 #define RAP_WaccessApply                        283
317 #define RAP_WPrt16Query                         284
318 #define RAP_WPrt16Set                           285
319 #define RAP_WUserDel100                         286
320 #define RAP_WUserRemoteLogonCheck2              287
321 #define RAP_WRemoteTODSet                       294
322 #define RAP_WprintJobMoveAll                    295
323 #define RAP_W16AppParmAdd                       296
324 #define RAP_W16AppParmDel                       297
325 #define RAP_W16AppParmGet                       298
326 #define RAP_W16AppParmSet                       299
327 #define RAP_W16RIPLMachineCreate                300
328 #define RAP_W16RIPLMachineGetInfo               301
329 #define RAP_W16RIPLMachineSetInfo               302
330 #define RAP_W16RIPLMachineEnum                  303
331 #define RAP_W16RIPLMachineListParmEnum          304
332 #define RAP_W16RIPLMachClassGetInfo             305
333 #define RAP_W16RIPLMachClassEnum                306
334 #define RAP_W16RIPLMachClassCreate              307
335 #define RAP_W16RIPLMachClassSetInfo             308
336 #define RAP_W16RIPLMachClassDelete              309
337 #define RAP_W16RIPLMachClassLPEnum              310
338 #define RAP_W16RIPLMachineDelete                311
339 #define RAP_W16WSLevelGetInfo                   312
340 #define RAP_WserverNameAdd                      313
341 #define RAP_WserverNameDel                      314
342 #define RAP_WserverNameEnum                     315
343 #define RAP_I_WDASDEnum                         316
344 #define RAP_WDASDEnumTerminate                  317
345 #define RAP_WDASDSetInfo2                       318
346 #define MAX_API                                 318
347
348
349 /* Parameter description strings for RAP calls   */
350 /* Names are defined name for RAP call with _REQ */
351 /* appended to end.                              */
352
353 #define RAP_WFileEnum2_REQ      "zzWrLehb8g8"
354 #define RAP_WFileGetInfo2_REQ   "DWrLh"
355 #define RAP_WFileClose2_REQ     "D"     
356
357 #define RAP_NetGroupEnum_REQ    "WrLeh"
358 #define RAP_NetGroupAdd_REQ     "WsT"
359 #define RAP_NetGroupDel_REQ     "z"
360 #define RAP_NetGroupAddUser_REQ "zz"
361 #define RAP_NetGroupDelUser_REQ "zz"
362 #define RAP_NetGroupGetUsers_REQ "zWrLeh"
363 #define RAP_NetGroupSetUsers_REQ "zWsTW"
364
365 #define RAP_NetUserAdd2_REQ       "WsTWW"
366 #define RAP_NetUserEnum_REQ       "WrLeh"
367 #define RAP_NetUserEnum2_REQ      "WrLDieh"
368 #define RAP_NetUserGetGroups_REQ  "zWrLeh"
369 #define RAP_NetUserSetGroups_REQ  "zWsTW"
370 #define RAP_NetUserPasswordSet_REQ "zb16b16w"
371 #define RAP_NetUserPasswordSet2_REQ "zb16b16WW"
372 #define RAP_SAMOEMChgPasswordUser2_REQ "B516B16"
373 #define RAP_NetUserValidate2_REQ    "Wb62WWrLhWW"
374
375 #define RAP_NetServerEnum2_REQ  "WrLehDz"
376 #define RAP_WserverGetInfo_REQ  "WrLh"
377 #define RAP_NetWkstatGetInfo    "WrLh"
378
379 #define RAP_WShareAdd_REQ       "WsT"
380 #define RAP_WShareEnum_REQ      "WrLeh"
381 #define RAP_WShareDel_REQ       "zW"
382 #define RAP_WWkstaGetInfo_REQ   "WrLh"
383
384 #define RAP_NetPrintQEnum_REQ   "WrLeh"
385 #define RAP_NetPrintQGetInfo_REQ "zWrLh"
386
387 #define RAP_NetServerAdminCommand_REQ "zhrLeh"
388 #define RAP_NetServiceEnum_REQ  "WrLeh"
389 #define RAP_NetServiceControl_REQ "zWWrL"
390 #define RAP_NetServiceInstall_REQ "zF88sg88T"
391 #define RAP_NetServiceGetInfo_REQ "zWrLh"
392 #define RAP_NetSessionEnum_REQ  "WrLeh"
393 #define RAP_NetSessionGetInfo_REQ "zWrLh"
394 #define RAP_NetSessionDel_REQ   "zW"
395
396 #define RAP_NetConnectionEnum_REQ "zWrLeh"
397
398 #define RAP_NetWkstaUserLogoff_REQ "zzWb38WrLh"
399
400 /* Description strings for returned data in RAP calls */
401 /* I use all caps here in part to avoid accidental    */
402 /* name collisions */
403
404 #define RAP_FILE_INFO_L2        "D"
405 #define RAP_FILE_INFO_L3        "DWWzz"
406
407 #define RAP_GROUP_INFO_L0       "B21"
408 #define RAP_GROUP_INFO_L1       "B21Bz"
409 #define RAP_GROUP_USERS_INFO_0  "B21"
410 #define RAP_GROUP_USERS_INFO_1  "B21BN"
411
412 #define RAP_USER_INFO_L0        "B21"
413 #define RAP_USER_INFO_L1        "B21BB16DWzzWz"
414
415 #define RAP_SERVER_INFO_L0      "B16"
416 #define RAP_SERVER_INFO_L1      "B16BBDz"
417 #define RAP_SERVER_INFO_L2 "B16BBDzDDDWWzWWWWWWWB21BzWWWWWWWWWWWWWWWWWWWWWWz"
418 #define RAP_SERVER_INFO_L3 "B16BBDzDDDWWzWWWWWWWB21BzWWWWWWWWWWWWWWWWWWWWWWzDWz"
419 #define RAP_SERVICE_INFO_L0     "B16"
420 #define RAP_SERVICE_INFO_L2     "B16WDWB64"
421 #define RAP_SHARE_INFO_L0       "B13"
422 #define RAP_SHARE_INFO_L1       "B13BWz"
423 #define RAP_SHARE_INFO_L2       "B13BWzWWWzB9B"
424
425 #define RAP_PRINTQ_INFO_L2      "B13BWWWzzzzzWN"
426 #define RAP_SMB_PRINT_JOB_L1    "WB21BB16B10zWWzDDz"
427
428 #define RAP_SESSION_INFO_L2      "zzWWWDDDz"
429 #define RAP_CONNECTION_INFO_L1   "WWWWDzz"
430
431 #define RAP_USER_LOGOFF_INFO_L1     "WDW"
432
433 #define RAP_WKSTA_INFO_L1       "WDzzzzBBDWDWWWWWWWWWWWWWWWWWWWzzWzzW"
434 #define RAP_WKSTA_INFO_L10      "zzzBBzz"
435
436 /* BB explicit packing would help in structs below */
437
438 /* sizes of fixed-length fields, including null terminator */
439 #define RAP_GROUPNAME_LEN 21
440 #define RAP_USERNAME_LEN 21
441 #define RAP_SHARENAME_LEN 13
442 #define RAP_UPASSWD_LEN 16 /* user password */
443 #define RAP_SPASSWD_LEN 9 /* share password */
444 #define RAP_MACHNAME_LEN 16
445 #define RAP_SRVCNAME_LEN 16
446 #define RAP_SRVCCMNT_LEN 64
447 #define RAP_DATATYPE_LEN 10
448
449
450 typedef struct rap_group_info_1
451 {
452     char   group_name[RAP_GROUPNAME_LEN];
453     char   reserved1;
454     char * comment;
455 } RAP_GROUP_INFO_1;
456
457 typedef struct rap_user_info_1
458 {
459     char   user_name[RAP_USERNAME_LEN];
460     char   reserved1;
461     char   passwrd[RAP_UPASSWD_LEN];
462     uint32 pwage;
463     uint16 priv;
464     char * home_dir;
465     char * comment;
466     uint16 userflags;
467     char * logon_script;
468 } RAP_USER_INFO_1;
469
470 typedef struct rap_service_info_2
471 {
472     char   service_name[RAP_SRVCNAME_LEN];
473     uint16 status;
474     uint32 installcode;
475     uint16 process_num;
476     char * comment;
477 } RAP_SERVICE_INFO_2;
478
479
480 typedef struct rap_share_info_0
481 {
482     char   share_name[RAP_SHARENAME_LEN];
483 } RAP_SHARE_INFO_0;
484
485 typedef struct rap_share_info_1
486 {
487     char   share_name[RAP_SHARENAME_LEN];
488     char   reserved1;
489     uint16 share_type;
490     char * comment;
491 } RAP_SHARE_INFO_1;
492
493 typedef struct rap_share_info_2
494 {
495     char   share_name[RAP_SHARENAME_LEN];
496     char   reserved1;
497     uint16 share_type;
498     char * comment;
499     uint16 perms;
500     uint16 maximum_users;
501     uint16 active_users;
502     char * path;
503     char   password[RAP_SPASSWD_LEN];
504     char   reserved2;
505 } RAP_SHARE_INFO_2;
506
507 #endif /* _RAP_H_ */