00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "includes.h"
00029
00030 #undef DBGC_CLASS
00031 #define DBGC_CLASS DBGC_RPC_SRV
00032
00033
00034
00035
00036
00037 static BOOL api_srv_net_srv_get_info(pipes_struct *p)
00038 {
00039 SRV_Q_NET_SRV_GET_INFO q_u;
00040 SRV_R_NET_SRV_GET_INFO r_u;
00041 prs_struct *data = &p->in_data.data;
00042 prs_struct *rdata = &p->out_data.rdata;
00043
00044 ZERO_STRUCT(q_u);
00045 ZERO_STRUCT(r_u);
00046
00047
00048 if (!srv_io_q_net_srv_get_info("", &q_u, data, 0))
00049 return False;
00050
00051 r_u.status = _srv_net_srv_get_info(p, &q_u, &r_u);
00052
00053
00054 if (!srv_io_r_net_srv_get_info("", &r_u, rdata, 0))
00055 return False;
00056
00057 return True;
00058 }
00059
00060
00061
00062
00063
00064 static BOOL api_srv_net_srv_set_info(pipes_struct *p)
00065 {
00066 SRV_Q_NET_SRV_SET_INFO q_u;
00067 SRV_R_NET_SRV_SET_INFO r_u;
00068 prs_struct *data = &p->in_data.data;
00069 prs_struct *rdata = &p->out_data.rdata;
00070
00071 ZERO_STRUCT(q_u);
00072 ZERO_STRUCT(r_u);
00073
00074
00075 if (!srv_io_q_net_srv_set_info("", &q_u, data, 0))
00076 return False;
00077
00078 r_u.status = _srv_net_srv_set_info(p, &q_u, &r_u);
00079
00080
00081 if (!srv_io_r_net_srv_set_info("", &r_u, rdata, 0))
00082 return False;
00083
00084 return True;
00085 }
00086
00087
00088
00089
00090
00091 static BOOL api_srv_net_file_enum(pipes_struct *p)
00092 {
00093 SRV_Q_NET_FILE_ENUM q_u;
00094 SRV_R_NET_FILE_ENUM r_u;
00095 prs_struct *data = &p->in_data.data;
00096 prs_struct *rdata = &p->out_data.rdata;
00097
00098 ZERO_STRUCT(q_u);
00099 ZERO_STRUCT(r_u);
00100
00101
00102 if (!srv_io_q_net_file_enum("", &q_u, data, 0))
00103 return False;
00104
00105 r_u.status = _srv_net_file_enum(p, &q_u, &r_u);
00106
00107
00108 if(!srv_io_r_net_file_enum("", &r_u, rdata, 0))
00109 return False;
00110
00111 return True;
00112 }
00113
00114
00115
00116
00117
00118 static BOOL api_srv_net_conn_enum(pipes_struct *p)
00119 {
00120 SRV_Q_NET_CONN_ENUM q_u;
00121 SRV_R_NET_CONN_ENUM r_u;
00122 prs_struct *data = &p->in_data.data;
00123 prs_struct *rdata = &p->out_data.rdata;
00124
00125 ZERO_STRUCT(q_u);
00126 ZERO_STRUCT(r_u);
00127
00128
00129 if (!srv_io_q_net_conn_enum("", &q_u, data, 0))
00130 return False;
00131
00132 r_u.status = _srv_net_conn_enum(p, &q_u, &r_u);
00133
00134
00135 if (!srv_io_r_net_conn_enum("", &r_u, rdata, 0))
00136 return False;
00137
00138 return True;
00139 }
00140
00141
00142
00143
00144
00145 static BOOL api_srv_net_sess_enum(pipes_struct *p)
00146 {
00147 SRV_Q_NET_SESS_ENUM q_u;
00148 SRV_R_NET_SESS_ENUM r_u;
00149 prs_struct *data = &p->in_data.data;
00150 prs_struct *rdata = &p->out_data.rdata;
00151
00152 ZERO_STRUCT(q_u);
00153 ZERO_STRUCT(r_u);
00154
00155
00156 if (!srv_io_q_net_sess_enum("", &q_u, data, 0))
00157 return False;
00158
00159
00160 r_u.status = _srv_net_sess_enum(p, &q_u, &r_u);
00161
00162
00163 if (!srv_io_r_net_sess_enum("", &r_u, rdata, 0))
00164 return False;
00165
00166 return True;
00167 }
00168
00169
00170
00171
00172
00173 static BOOL api_srv_net_sess_del(pipes_struct *p)
00174 {
00175 SRV_Q_NET_SESS_DEL q_u;
00176 SRV_R_NET_SESS_DEL r_u;
00177 prs_struct *data = &p->in_data.data;
00178 prs_struct *rdata = &p->out_data.rdata;
00179
00180 ZERO_STRUCT(q_u);
00181 ZERO_STRUCT(r_u);
00182
00183
00184 if (!srv_io_q_net_sess_del("", &q_u, data, 0))
00185 return False;
00186
00187
00188 r_u.status = _srv_net_sess_del(p, &q_u, &r_u);
00189
00190
00191 if (!srv_io_r_net_sess_del("", &r_u, rdata, 0))
00192 return False;
00193
00194 return True;
00195 }
00196
00197
00198
00199
00200
00201 static BOOL api_srv_net_share_enum_all(pipes_struct *p)
00202 {
00203 SRV_Q_NET_SHARE_ENUM q_u;
00204 SRV_R_NET_SHARE_ENUM r_u;
00205 prs_struct *data = &p->in_data.data;
00206 prs_struct *rdata = &p->out_data.rdata;
00207
00208 ZERO_STRUCT(q_u);
00209 ZERO_STRUCT(r_u);
00210
00211
00212 if(!srv_io_q_net_share_enum("", &q_u, data, 0)) {
00213 DEBUG(0,("api_srv_net_share_enum_all: Failed to unmarshall SRV_Q_NET_SHARE_ENUM.\n"));
00214 return False;
00215 }
00216
00217 r_u.status = _srv_net_share_enum_all(p, &q_u, &r_u);
00218
00219 if (!srv_io_r_net_share_enum("", &r_u, rdata, 0)) {
00220 DEBUG(0,("api_srv_net_share_enum_all: Failed to marshall SRV_R_NET_SHARE_ENUM.\n"));
00221 return False;
00222 }
00223
00224 return True;
00225 }
00226
00227
00228
00229
00230
00231 static BOOL api_srv_net_share_enum(pipes_struct *p)
00232 {
00233 SRV_Q_NET_SHARE_ENUM q_u;
00234 SRV_R_NET_SHARE_ENUM r_u;
00235 prs_struct *data = &p->in_data.data;
00236 prs_struct *rdata = &p->out_data.rdata;
00237
00238 ZERO_STRUCT(q_u);
00239 ZERO_STRUCT(r_u);
00240
00241
00242 if(!srv_io_q_net_share_enum("", &q_u, data, 0)) {
00243 DEBUG(0,("api_srv_net_share_enum: Failed to unmarshall SRV_Q_NET_SHARE_ENUM.\n"));
00244 return False;
00245 }
00246
00247 r_u.status = _srv_net_share_enum(p, &q_u, &r_u);
00248
00249 if (!srv_io_r_net_share_enum("", &r_u, rdata, 0)) {
00250 DEBUG(0,("api_srv_net_share_enum: Failed to marshall SRV_R_NET_SHARE_ENUM.\n"));
00251 return False;
00252 }
00253
00254 return True;
00255 }
00256
00257
00258
00259
00260
00261 static BOOL api_srv_net_share_get_info(pipes_struct *p)
00262 {
00263 SRV_Q_NET_SHARE_GET_INFO q_u;
00264 SRV_R_NET_SHARE_GET_INFO r_u;
00265 prs_struct *data = &p->in_data.data;
00266 prs_struct *rdata = &p->out_data.rdata;
00267
00268 ZERO_STRUCT(q_u);
00269 ZERO_STRUCT(r_u);
00270
00271
00272 if(!srv_io_q_net_share_get_info("", &q_u, data, 0)) {
00273 DEBUG(0,("api_srv_net_share_get_info: Failed to unmarshall SRV_Q_NET_SHARE_GET_INFO.\n"));
00274 return False;
00275 }
00276
00277 r_u.status = _srv_net_share_get_info(p, &q_u, &r_u);
00278
00279 if(!srv_io_r_net_share_get_info("", &r_u, rdata, 0)) {
00280 DEBUG(0,("api_srv_net_share_get_info: Failed to marshall SRV_R_NET_SHARE_GET_INFO.\n"));
00281 return False;
00282 }
00283
00284 return True;
00285 }
00286
00287
00288
00289
00290
00291 static BOOL api_srv_net_share_set_info(pipes_struct *p)
00292 {
00293 SRV_Q_NET_SHARE_SET_INFO q_u;
00294 SRV_R_NET_SHARE_SET_INFO r_u;
00295 prs_struct *data = &p->in_data.data;
00296 prs_struct *rdata = &p->out_data.rdata;
00297
00298 ZERO_STRUCT(q_u);
00299 ZERO_STRUCT(r_u);
00300
00301
00302 if(!srv_io_q_net_share_set_info("", &q_u, data, 0)) {
00303 DEBUG(0,("api_srv_net_share_set_info: Failed to unmarshall SRV_Q_NET_SHARE_SET_INFO.\n"));
00304 return False;
00305 }
00306
00307 r_u.status = _srv_net_share_set_info(p, &q_u, &r_u);
00308
00309 if(!srv_io_r_net_share_set_info("", &r_u, rdata, 0)) {
00310 DEBUG(0,("api_srv_net_share_set_info: Failed to marshall SRV_R_NET_SHARE_SET_INFO.\n"));
00311 return False;
00312 }
00313
00314 return True;
00315 }
00316
00317
00318
00319
00320
00321 static BOOL api_srv_net_share_add(pipes_struct *p)
00322 {
00323 SRV_Q_NET_SHARE_ADD q_u;
00324 SRV_R_NET_SHARE_ADD r_u;
00325 prs_struct *data = &p->in_data.data;
00326 prs_struct *rdata = &p->out_data.rdata;
00327
00328 ZERO_STRUCT(q_u);
00329 ZERO_STRUCT(r_u);
00330
00331
00332 if(!srv_io_q_net_share_add("", &q_u, data, 0)) {
00333 DEBUG(0,("api_srv_net_share_add: Failed to unmarshall SRV_Q_NET_SHARE_ADD.\n"));
00334 return False;
00335 }
00336
00337 r_u.status = _srv_net_share_add(p, &q_u, &r_u);
00338
00339 if(!srv_io_r_net_share_add("", &r_u, rdata, 0)) {
00340 DEBUG(0,("api_srv_net_share_add: Failed to marshall SRV_R_NET_SHARE_ADD.\n"));
00341 return False;
00342 }
00343
00344 return True;
00345 }
00346
00347
00348
00349
00350
00351 static BOOL api_srv_net_share_del(pipes_struct *p)
00352 {
00353 SRV_Q_NET_SHARE_DEL q_u;
00354 SRV_R_NET_SHARE_DEL r_u;
00355 prs_struct *data = &p->in_data.data;
00356 prs_struct *rdata = &p->out_data.rdata;
00357
00358 ZERO_STRUCT(q_u);
00359 ZERO_STRUCT(r_u);
00360
00361
00362 if(!srv_io_q_net_share_del("", &q_u, data, 0)) {
00363 DEBUG(0,("api_srv_net_share_del: Failed to unmarshall SRV_Q_NET_SHARE_DEL.\n"));
00364 return False;
00365 }
00366
00367 r_u.status = _srv_net_share_del(p, &q_u, &r_u);
00368
00369 if(!srv_io_r_net_share_del("", &r_u, rdata, 0)) {
00370 DEBUG(0,("api_srv_net_share_del: Failed to marshall SRV_R_NET_SHARE_DEL.\n"));
00371 return False;
00372 }
00373
00374 return True;
00375 }
00376
00377
00378
00379
00380
00381 static BOOL api_srv_net_share_del_sticky(pipes_struct *p)
00382 {
00383 SRV_Q_NET_SHARE_DEL q_u;
00384 SRV_R_NET_SHARE_DEL r_u;
00385 prs_struct *data = &p->in_data.data;
00386 prs_struct *rdata = &p->out_data.rdata;
00387
00388 ZERO_STRUCT(q_u);
00389 ZERO_STRUCT(r_u);
00390
00391
00392 if(!srv_io_q_net_share_del("", &q_u, data, 0)) {
00393 DEBUG(0,("api_srv_net_share_del_sticky: Failed to unmarshall SRV_Q_NET_SHARE_DEL.\n"));
00394 return False;
00395 }
00396
00397 r_u.status = _srv_net_share_del_sticky(p, &q_u, &r_u);
00398
00399 if(!srv_io_r_net_share_del("", &r_u, rdata, 0)) {
00400 DEBUG(0,("api_srv_net_share_del_sticky: Failed to marshall SRV_R_NET_SHARE_DEL.\n"));
00401 return False;
00402 }
00403
00404 return True;
00405 }
00406
00407
00408
00409
00410
00411 static BOOL api_srv_net_remote_tod(pipes_struct *p)
00412 {
00413 SRV_Q_NET_REMOTE_TOD q_u;
00414 SRV_R_NET_REMOTE_TOD r_u;
00415 prs_struct *data = &p->in_data.data;
00416 prs_struct *rdata = &p->out_data.rdata;
00417
00418 ZERO_STRUCT(q_u);
00419 ZERO_STRUCT(r_u);
00420
00421
00422 if(!srv_io_q_net_remote_tod("", &q_u, data, 0))
00423 return False;
00424
00425 r_u.status = _srv_net_remote_tod(p, &q_u, &r_u);
00426
00427
00428 if(!srv_io_r_net_remote_tod("", &r_u, rdata, 0))
00429 return False;
00430
00431 return True;
00432 }
00433
00434
00435
00436
00437
00438 static BOOL api_srv_net_disk_enum(pipes_struct *p)
00439 {
00440 SRV_Q_NET_DISK_ENUM q_u;
00441 SRV_R_NET_DISK_ENUM r_u;
00442 prs_struct *data = &p->in_data.data;
00443 prs_struct *rdata = &p->out_data.rdata;
00444
00445 ZERO_STRUCT(q_u);
00446 ZERO_STRUCT(r_u);
00447
00448
00449 if(!srv_io_q_net_disk_enum("", &q_u, data, 0)) {
00450 DEBUG(0,("api_srv_net_disk_enum: Failed to unmarshall SRV_Q_NET_DISK_ENUM.\n"));
00451 return False;
00452 }
00453
00454 r_u.status = _srv_net_disk_enum(p, &q_u, &r_u);
00455
00456 if(!srv_io_r_net_disk_enum("", &r_u, rdata, 0)) {
00457 DEBUG(0,("api_srv_net_disk_enum: Failed to marshall SRV_R_NET_DISK_ENUM.\n"));
00458 return False;
00459 }
00460
00461 return True;
00462 }
00463
00464
00465
00466
00467
00468 static BOOL api_srv_net_name_validate(pipes_struct *p)
00469 {
00470 SRV_Q_NET_NAME_VALIDATE q_u;
00471 SRV_R_NET_NAME_VALIDATE r_u;
00472 prs_struct *data = &p->in_data.data;
00473 prs_struct *rdata = &p->out_data.rdata;
00474
00475 ZERO_STRUCT(q_u);
00476 ZERO_STRUCT(r_u);
00477
00478
00479 if(!srv_io_q_net_name_validate("", &q_u, data, 0)) {
00480 DEBUG(0,("api_srv_net_name_validate: Failed to unmarshall SRV_Q_NET_NAME_VALIDATE.\n"));
00481 return False;
00482 }
00483
00484 r_u.status = _srv_net_name_validate(p, &q_u, &r_u);
00485
00486 if(!srv_io_r_net_name_validate("", &r_u, rdata, 0)) {
00487 DEBUG(0,("api_srv_net_name_validate: Failed to marshall SRV_R_NET_NAME_VALIDATE.\n"));
00488 return False;
00489 }
00490
00491 return True;
00492 }
00493
00494
00495
00496
00497
00498 static BOOL api_srv_net_file_query_secdesc(pipes_struct *p)
00499 {
00500 SRV_Q_NET_FILE_QUERY_SECDESC q_u;
00501 SRV_R_NET_FILE_QUERY_SECDESC r_u;
00502 prs_struct *data = &p->in_data.data;
00503 prs_struct *rdata = &p->out_data.rdata;
00504
00505 ZERO_STRUCT(q_u);
00506 ZERO_STRUCT(r_u);
00507
00508
00509 if(!srv_io_q_net_file_query_secdesc("", &q_u, data, 0)) {
00510 DEBUG(0,("api_srv_net_file_query_secdesc: Failed to unmarshall SRV_Q_NET_FILE_QUERY_SECDESC.\n"));
00511 return False;
00512 }
00513
00514 r_u.status = _srv_net_file_query_secdesc(p, &q_u, &r_u);
00515
00516 if(!srv_io_r_net_file_query_secdesc("", &r_u, rdata, 0)) {
00517 DEBUG(0,("api_srv_net_file_query_secdesc: Failed to marshall SRV_R_NET_FILE_QUERY_SECDESC.\n"));
00518 return False;
00519 }
00520
00521 return True;
00522 }
00523
00524
00525
00526
00527
00528 static BOOL api_srv_net_file_set_secdesc(pipes_struct *p)
00529 {
00530 SRV_Q_NET_FILE_SET_SECDESC q_u;
00531 SRV_R_NET_FILE_SET_SECDESC r_u;
00532 prs_struct *data = &p->in_data.data;
00533 prs_struct *rdata = &p->out_data.rdata;
00534
00535 ZERO_STRUCT(q_u);
00536 ZERO_STRUCT(r_u);
00537
00538
00539 if(!srv_io_q_net_file_set_secdesc("", &q_u, data, 0)) {
00540 DEBUG(0,("api_srv_net_file_set_secdesc: Failed to unmarshall SRV_Q_NET_FILE_SET_SECDESC.\n"));
00541 return False;
00542 }
00543
00544 r_u.status = _srv_net_file_set_secdesc(p, &q_u, &r_u);
00545
00546 if(!srv_io_r_net_file_set_secdesc("", &r_u, rdata, 0)) {
00547 DEBUG(0,("api_srv_net_file_set_secdesc: Failed to marshall SRV_R_NET_FILE_SET_SECDESC.\n"));
00548 return False;
00549 }
00550
00551 return True;
00552 }
00553
00554
00555
00556
00557 static BOOL api_srv_net_file_close(pipes_struct *p)
00558 {
00559 SRV_Q_NET_FILE_CLOSE q_u;
00560 SRV_R_NET_FILE_CLOSE r_u;
00561 prs_struct *data = &p->in_data.data;
00562 prs_struct *rdata = &p->out_data.rdata;
00563
00564 ZERO_STRUCT(q_u);
00565 ZERO_STRUCT(r_u);
00566
00567
00568 if(!srv_io_q_net_file_close("", &q_u, data, 0)) {
00569 DEBUG(0,("api_srv_net_file_close: Failed to unmarshall SRV_Q_NET_FILE_SET_SECDESC.\n"));
00570 return False;
00571 }
00572
00573 r_u.status = _srv_net_file_close(p, &q_u, &r_u);
00574
00575 if(!srv_io_r_net_file_close("", &r_u, rdata, 0)) {
00576 DEBUG(0,("api_srv_net_file_close: Failed to marshall SRV_R_NET_FILE_SET_SECDESC.\n"));
00577 return False;
00578 }
00579
00580 return True;
00581 }
00582
00583
00584
00585
00586
00587 static struct api_struct api_srv_cmds[] =
00588 {
00589 { "SRV_NET_CONN_ENUM" , SRV_NET_CONN_ENUM , api_srv_net_conn_enum },
00590 { "SRV_NET_SESS_ENUM" , SRV_NET_SESS_ENUM , api_srv_net_sess_enum },
00591 { "SRV_NET_SESS_DEL" , SRV_NET_SESS_DEL , api_srv_net_sess_del },
00592 { "SRV_NET_SHARE_ENUM_ALL" , SRV_NET_SHARE_ENUM_ALL , api_srv_net_share_enum_all },
00593 { "SRV_NET_SHARE_ENUM" , SRV_NET_SHARE_ENUM , api_srv_net_share_enum },
00594 { "SRV_NET_SHARE_ADD" , SRV_NET_SHARE_ADD , api_srv_net_share_add },
00595 { "SRV_NET_SHARE_DEL" , SRV_NET_SHARE_DEL , api_srv_net_share_del },
00596 { "SRV_NET_SHARE_DEL_STICKY" , SRV_NET_SHARE_DEL_STICKY , api_srv_net_share_del_sticky },
00597 { "SRV_NET_SHARE_GET_INFO" , SRV_NET_SHARE_GET_INFO , api_srv_net_share_get_info },
00598 { "SRV_NET_SHARE_SET_INFO" , SRV_NET_SHARE_SET_INFO , api_srv_net_share_set_info },
00599 { "SRV_NET_FILE_ENUM" , SRV_NET_FILE_ENUM , api_srv_net_file_enum },
00600 { "SRV_NET_SRV_GET_INFO" , SRV_NET_SRV_GET_INFO , api_srv_net_srv_get_info },
00601 { "SRV_NET_SRV_SET_INFO" , SRV_NET_SRV_SET_INFO , api_srv_net_srv_set_info },
00602 { "SRV_NET_REMOTE_TOD" , SRV_NET_REMOTE_TOD , api_srv_net_remote_tod },
00603 { "SRV_NET_DISK_ENUM" , SRV_NET_DISK_ENUM , api_srv_net_disk_enum },
00604 { "SRV_NET_NAME_VALIDATE" , SRV_NET_NAME_VALIDATE , api_srv_net_name_validate },
00605 { "SRV_NET_FILE_QUERY_SECDESC", SRV_NET_FILE_QUERY_SECDESC, api_srv_net_file_query_secdesc },
00606 { "SRV_NET_FILE_SET_SECDESC" , SRV_NET_FILE_SET_SECDESC , api_srv_net_file_set_secdesc },
00607 { "SRV_NET_FILE_CLOSE" , SRV_NET_FILE_CLOSE , api_srv_net_file_close }
00608 };
00609
00610 void srvsvc_get_pipe_fns( struct api_struct **fns, int *n_fns )
00611 {
00612 *fns = api_srv_cmds;
00613 *n_fns = sizeof(api_srv_cmds) / sizeof(struct api_struct);
00614 }
00615
00616
00617 NTSTATUS rpc_srv_init(void)
00618 {
00619 return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "srvsvc", "ntsvcs", api_srv_cmds,
00620 sizeof(api_srv_cmds) / sizeof(struct api_struct));
00621 }