mirror of
https://github.com/samba-team/samba.git
synced 2024-12-30 13:18:05 +03:00
419 lines
10 KiB
C
419 lines
10 KiB
C
/*
|
|
Unix SMB/CIFS implementation.
|
|
|
|
endpoint server for the wkssvc pipe
|
|
|
|
Copyright (C) Stefan (metze) Metzmacher 2004
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "includes.h"
|
|
#include "rpc_server/dcerpc_server.h"
|
|
#include "librpc/gen_ndr/ndr_wkssvc.h"
|
|
#include "rpc_server/common/common.h"
|
|
#include "param/param.h"
|
|
|
|
/*
|
|
wkssvc_NetWkstaGetInfo
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetWkstaGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetWkstaGetInfo *r)
|
|
{
|
|
struct dcesrv_context *dce_ctx = dce_call->conn->dce_ctx;
|
|
struct dcerpc_server_info *server_info = lp_dcerpc_server_info(mem_ctx, dce_ctx->lp_ctx);
|
|
|
|
ZERO_STRUCT(r->out);
|
|
r->out.info = talloc_zero(mem_ctx, union wkssvc_NetWkstaInfo);
|
|
W_ERROR_HAVE_NO_MEMORY(r->out.info);
|
|
|
|
/* NOTE: win2k3 ignores r->in.server_name completly so we do --metze */
|
|
|
|
switch(r->in.level) {
|
|
case 100:
|
|
{
|
|
struct wkssvc_NetWkstaInfo100 *info100;
|
|
|
|
info100 = talloc(mem_ctx, struct wkssvc_NetWkstaInfo100);
|
|
W_ERROR_HAVE_NO_MEMORY(info100);
|
|
|
|
info100->platform_id = dcesrv_common_get_platform_id(mem_ctx, dce_ctx);
|
|
info100->server_name = dcesrv_common_get_server_name(mem_ctx, dce_ctx, NULL);
|
|
W_ERROR_HAVE_NO_MEMORY(info100->server_name);
|
|
info100->domain_name = talloc_reference(mem_ctx, server_info->domain_name);
|
|
W_ERROR_HAVE_NO_MEMORY(info100->domain_name);
|
|
info100->version_major = server_info->version_major;
|
|
info100->version_minor = server_info->version_minor;
|
|
|
|
r->out.info->info100 = info100;
|
|
return WERR_OK;
|
|
}
|
|
case 101:
|
|
{
|
|
struct wkssvc_NetWkstaInfo101 *info101;
|
|
|
|
info101 = talloc(mem_ctx, struct wkssvc_NetWkstaInfo101);
|
|
W_ERROR_HAVE_NO_MEMORY(info101);
|
|
|
|
info101->platform_id = dcesrv_common_get_platform_id(mem_ctx, dce_ctx);
|
|
info101->server_name = dcesrv_common_get_server_name(mem_ctx, dce_ctx, NULL);
|
|
W_ERROR_HAVE_NO_MEMORY(info101->server_name);
|
|
info101->domain_name = talloc_reference(mem_ctx, server_info->domain_name);
|
|
W_ERROR_HAVE_NO_MEMORY(info101->domain_name);
|
|
info101->version_major = server_info->version_major;
|
|
info101->version_minor = server_info->version_minor;
|
|
info101->lan_root = dcesrv_common_get_lan_root(mem_ctx, dce_ctx);
|
|
|
|
r->out.info->info101 = info101;
|
|
return WERR_OK;
|
|
}
|
|
case 102:
|
|
{
|
|
return WERR_ACCESS_DENIED;
|
|
}
|
|
case 502:
|
|
{
|
|
return WERR_ACCESS_DENIED;
|
|
}
|
|
default:
|
|
return WERR_UNKNOWN_LEVEL;
|
|
}
|
|
|
|
return WERR_UNKNOWN_LEVEL;
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetWkstaSetInfo
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetWkstaSetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetWkstaSetInfo *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetWkstaEnumUsers
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetWkstaEnumUsers(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetWkstaEnumUsers *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrWkstaUserGetInfo
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrWkstaUserGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrWkstaUserGetInfo *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrWkstaUserSetInfo
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrWkstaUserSetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrWkstaUserSetInfo *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetWkstaTransportEnum
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetWkstaTransportEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetWkstaTransportEnum *r)
|
|
{
|
|
r->out.total_entries = 0;
|
|
r->out.resume_handle = NULL;
|
|
|
|
switch (r->in.info->level) {
|
|
case 0:
|
|
r->out.info = talloc(mem_ctx, struct wkssvc_NetWkstaTransportInfo);
|
|
W_ERROR_HAVE_NO_MEMORY(r->out.info);
|
|
r->out.info->level = r->in.info->level;
|
|
r->out.info->ctr.ctr0 = talloc(mem_ctx, struct wkssvc_NetWkstaTransportCtr0);
|
|
W_ERROR_HAVE_NO_MEMORY(r->out.info->ctr.ctr0);
|
|
|
|
r->out.info->ctr.ctr0->count = 0;
|
|
r->out.info->ctr.ctr0->array = NULL;
|
|
|
|
return WERR_NOT_SUPPORTED;
|
|
|
|
default:
|
|
return WERR_UNKNOWN_LEVEL;
|
|
}
|
|
|
|
return WERR_UNKNOWN_LEVEL;
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrWkstaTransportAdd
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrWkstaTransportAdd(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrWkstaTransportAdd *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrWkstaTransportDel
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrWkstaTransportDel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrWkstaTransportDel *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrUseAdd
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrUseAdd(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrUseAdd *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrUseGetInfo
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrUseGetInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrUseGetInfo *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrUseDel
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrUseDel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrUseDel *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrUseEnum
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrUseEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrUseEnum *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrMessageBufferSend
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrMessageBufferSend(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrMessageBufferSend *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrWorkstationStatisticsGet
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrWorkstationStatisticsGet(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrWorkstationStatisticsGet *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrLogonDomainNameAdd
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrLogonDomainNameAdd(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrLogonDomainNameAdd *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrLogonDomainNameDel
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrLogonDomainNameDel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrLogonDomainNameDel *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrJoinDomain
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrJoinDomain(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrJoinDomain *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrUnjoinDomain
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrUnjoinDomain(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrUnjoinDomain *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrRenameMachineInDomain
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrRenameMachineInDomain(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrRenameMachineInDomain *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrValidateName
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrValidateName(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrValidateName *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrGetJoinInformation
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrGetJoinInformation(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrGetJoinInformation *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrGetJoinableOus
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrGetJoinableOus(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrGetJoinableOus *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
WKSSVC_NETRJOINDOMAIN2
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrJoinDomain2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrJoinDomain2 *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
WKSSVC_NETRUNJOINDOMAIN2
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrUnjoinDomain2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrUnjoinDomain2 *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrRenameMachineInDomain2
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrRenameMachineInDomain2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrRenameMachineInDomain2 *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrValidateName2
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrValidateName2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrValidateName2 *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrGetJoinableOus2
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrGetJoinableOus2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrGetJoinableOus2 *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrAddAlternateComputername
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrAddAlternateComputerName(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrAddAlternateComputerName *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrRemoveAlternateComputername
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrRemoveAlternateComputerName(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrRemoveAlternateComputerName *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrSetPrimaryComputername
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrSetPrimaryComputername(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrSetPrimaryComputername *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/*
|
|
wkssvc_NetrEnumerateComputerNames
|
|
*/
|
|
static WERROR dcesrv_wkssvc_NetrEnumerateComputerNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
|
struct wkssvc_NetrEnumerateComputerNames *r)
|
|
{
|
|
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
|
}
|
|
|
|
|
|
/* include the generated boilerplate */
|
|
#include "librpc/gen_ndr/ndr_wkssvc_s.c"
|