rpc_server/srv_srvsvc.c

説明を見る。
00001 /* 
00002  *  Unix SMB/CIFS implementation.
00003  *  RPC Pipe client / server routines
00004  *  Copyright (C) Andrew Tridgell              1992-1997,
00005  *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
00006  *  Copyright (C) Paul Ashton                       1997,
00007  *  Copyright (C) Jeremy Allison                    2001,
00008  *  Copyright (C) Jim McDonough <jmcd@us.ibm.com>   2003.
00009  *  Copyright (C) Gera;d (Jerry) Carter             2006.
00010  *  
00011  *  This program is free software; you can redistribute it and/or modify
00012  *  it under the terms of the GNU General Public License as published by
00013  *  the Free Software Foundation; either version 2 of the License, or
00014  *  (at your option) any later version.
00015  *  
00016  *  This program is distributed in the hope that it will be useful,
00017  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00018  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019  *  GNU General Public License for more details.
00020  *  
00021  *  You should have received a copy of the GNU General Public License
00022  *  along with this program; if not, write to the Free Software
00023  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00024  */
00025 
00026 /* This is the interface to the srvsvc pipe. */
00027 
00028 #include "includes.h"
00029 
00030 #undef DBGC_CLASS
00031 #define DBGC_CLASS DBGC_RPC_SRV
00032 
00033 /*******************************************************************
00034  api_srv_net_srv_get_info
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         /* grab the net server get info */
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         /* store the response in the SMB stream */
00054         if (!srv_io_r_net_srv_get_info("", &r_u, rdata, 0))
00055                 return False;
00056 
00057         return True;
00058 }
00059 
00060 /*******************************************************************
00061  api_srv_net_srv_get_info
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         /* grab the net server set info */
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         /* store the response in the SMB stream */
00081         if (!srv_io_r_net_srv_set_info("", &r_u, rdata, 0))
00082                 return False;
00083 
00084         return True;
00085 }
00086 
00087 /*******************************************************************
00088  api_srv_net_file_enum
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         /* grab the net file enum */
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         /* store the response in the SMB stream */
00108         if(!srv_io_r_net_file_enum("", &r_u, rdata, 0))
00109                 return False;
00110 
00111         return True;
00112 }
00113 
00114 /*******************************************************************
00115  api_srv_net_conn_enum
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         /* grab the net server get enum */
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         /* store the response in the SMB stream */
00135         if (!srv_io_r_net_conn_enum("", &r_u, rdata, 0))
00136                 return False;
00137 
00138         return True;
00139 }
00140 
00141 /*******************************************************************
00142  Enumerate sessions.
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         /* grab the net server get enum */
00156         if (!srv_io_q_net_sess_enum("", &q_u, data, 0))
00157                 return False;
00158 
00159         /* construct reply.  always indicate success */
00160         r_u.status = _srv_net_sess_enum(p, &q_u, &r_u);
00161 
00162         /* store the response in the SMB stream */
00163         if (!srv_io_r_net_sess_enum("", &r_u, rdata, 0))
00164                 return False;
00165 
00166         return True;
00167 }
00168 
00169 /*******************************************************************
00170  Delete session.
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         /* grab the net server get enum */
00184         if (!srv_io_q_net_sess_del("", &q_u, data, 0))
00185                 return False;
00186 
00187         /* construct reply.  always indicate success */
00188         r_u.status = _srv_net_sess_del(p, &q_u, &r_u);
00189 
00190         /* store the response in the SMB stream */
00191         if (!srv_io_r_net_sess_del("", &r_u, rdata, 0))
00192                 return False;
00193 
00194         return True;
00195 }
00196 
00197 /*******************************************************************
00198  RPC to enumerate shares.
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         /* Unmarshall the net server get enum. */
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  RPC to enumerate shares.
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         /* Unmarshall the net server get enum. */
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  RPC to return share information.
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         /* Unmarshall the net server get info. */
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  RPC to set share information.
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         /* Unmarshall the net server set info. */
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  RPC to add share information.
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         /* Unmarshall the net server add info. */
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  RPC to delete share information.
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         /* Unmarshall the net server del info. */
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  RPC to delete share information.
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         /* Unmarshall the net server del info. */
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  api_srv_net_remote_tod
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         /* grab the net server get enum */
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         /* store the response in the SMB stream */
00428         if(!srv_io_r_net_remote_tod("", &r_u, rdata, 0))
00429                 return False;
00430 
00431         return True;
00432 }
00433 
00434 /*******************************************************************
00435  RPC to enumerate disks available on a server e.g. C:, D: ...
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         /* Unmarshall the net server disk enum. */
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  NetValidateName (opnum 0x21) 
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         /* Unmarshall the net server disk enum. */
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  NetFileQuerySecdesc (opnum 0x27)
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         /* Unmarshall the net file get info from Win9x */
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  NetFileSetSecdesc (opnum 0x28)
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         /* Unmarshall the net file set info from Win9x */
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         /* Unmarshall the net file set info from Win9x */
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 \PIPE\srvsvc commands
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 }

Sambaに対してSat Aug 29 21:23:22 2009に生成されました。  doxygen 1.4.7