1/* 2 Unix SMB/CIFS implementation. 3 RAP handlers 4 5 Copyright (C) Volker Lendecke 2004 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, see <http://www.gnu.org/licenses/>. 19*/ 20 21#include "includes.h" 22#include "param/share.h" 23#include "libcli/rap/rap.h" 24#include "libcli/raw/interfaces.h" 25#include "librpc/gen_ndr/srvsvc.h" 26#include "rpc_server/common/common.h" 27#include "param/param.h" 28#include "ntvfs/ipc/ipc.h" 29#include "ntvfs/ipc/proto.h" 30 31/* At this moment these are just dummy functions, but you might get the 32 * idea. */ 33 34NTSTATUS rap_netshareenum(TALLOC_CTX *mem_ctx, 35 struct tevent_context *event_ctx, 36 struct loadparm_context *lp_ctx, 37 struct rap_NetShareEnum *r) 38{ 39 NTSTATUS nterr; 40 const char **snames; 41 struct share_context *sctx; 42 struct share_config *scfg; 43 int i, j, count; 44 45 r->out.status = 0; 46 r->out.available = 0; 47 r->out.info = NULL; 48 49 nterr = share_get_context_by_name(mem_ctx, lp_share_backend(lp_ctx), event_ctx, lp_ctx, &sctx); 50 if (!NT_STATUS_IS_OK(nterr)) { 51 return nterr; 52 } 53 54 nterr = share_list_all(mem_ctx, sctx, &count, &snames); 55 if (!NT_STATUS_IS_OK(nterr)) { 56 return nterr; 57 } 58 59 r->out.available = count; 60 r->out.info = talloc_array(mem_ctx, 61 union rap_shareenum_info, r->out.available); 62 63 for (i = 0, j = 0; i < r->out.available; i++) { 64 if (!NT_STATUS_IS_OK(share_get_config(mem_ctx, sctx, snames[i], &scfg))) { 65 DEBUG(3, ("WARNING: Service [%s] disappeared after enumeration!\n", snames[i])); 66 continue; 67 } 68 strncpy(r->out.info[j].info1.name, 69 snames[i], 70 sizeof(r->out.info[0].info1.name)); 71 r->out.info[i].info1.pad = 0; 72 r->out.info[i].info1.type = dcesrv_common_get_share_type(mem_ctx, NULL, scfg); 73 r->out.info[i].info1.comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, "")); 74 talloc_free(scfg); 75 j++; 76 } 77 r->out.available = j; 78 79 return NT_STATUS_OK; 80} 81 82NTSTATUS rap_netserverenum2(TALLOC_CTX *mem_ctx, 83 struct loadparm_context *lp_ctx, 84 struct rap_NetServerEnum2 *r) 85{ 86 r->out.status = 0; 87 r->out.available = 0; 88 return NT_STATUS_OK; 89} 90