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 2 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 450typedef 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 457typedef 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 470typedef 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 480typedef struct rap_share_info_0 481{ 482 char share_name[RAP_SHARENAME_LEN]; 483} RAP_SHARE_INFO_0; 484 485typedef 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 493typedef 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_ */ 508