1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-27 03:21:53 +03:00

Add server side support for epmapper pipe. Currently only does a fixed

mapping, but this is the base for changes to come.
(This used to be commit 73882e970a)
This commit is contained in:
Jim McDonough 2003-10-21 17:59:08 +00:00
parent 630a77e50f
commit 989b57f783
6 changed files with 176 additions and 4 deletions

View File

@ -264,6 +264,8 @@ RPC_PIPE_OBJ = rpc_server/srv_pipe_hnd.o rpc_server/srv_util.o \
RPC_ECHO_OBJ = rpc_server/srv_echo.o rpc_server/srv_echo_nt.o
RPC_EPMAPPER_OBJ = rpc_server/srv_epmapper.o rpc_server/srv_epmapper_nt.o
RPC_SERVER_OBJ = @RPC_STATIC@ $(RPC_PIPE_OBJ)
# this includes only the low level parse code, not stuff
@ -580,9 +582,10 @@ PROTO_OBJ = $(SMBD_OBJ_MAIN) \
$(PASSDB_OBJ) $(GROUPDB_OBJ) $(MSDFS_OBJ) \
$(READLINE_OBJ) $(PROFILE_OBJ) $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \
$(LIB_SMBD_OBJ) $(SAM_OBJ) $(REGISTRY_OBJ) $(POPT_LIB_OBJ) \
$(RPC_LSA_OBJ) $(RPC_NETLOG_OBJ) $(RPC_SAMR_OBJ) $(RPC_REG_OBJ) $(RPC_LSA_DS_OBJ) \
$(RPC_SVC_OBJ) $(RPC_WKS_OBJ) $(RPC_DFS_OBJ) $(RPC_SPOOLSS_OBJ) \
$(RPC_ECHO_OBJ) $(SMBLDAP_OBJ) $(IDMAP_OBJ) libsmb/spnego.o
$(RPC_LSA_OBJ) $(RPC_NETLOG_OBJ) $(RPC_SAMR_OBJ) $(RPC_REG_OBJ) \
$(RPC_LSA_DS_OBJ) $(RPC_SVC_OBJ) $(RPC_WKS_OBJ) $(RPC_DFS_OBJ) \
$(RPC_SPOOLSS_OBJ) $(RPC_ECHO_OBJ) $(RPC_EPMAPPER_OBJ) \
$(SMBLDAP_OBJ) $(IDMAP_OBJ) libsmb/spnego.o
WINBIND_WINS_NSS_OBJ = nsswitch/wins.o $(PARAM_OBJ) $(UBIQX_OBJ) \
$(LIBSMB_OBJ) $(LIB_OBJ) $(NSSWINS_OBJ) $(KRBCLIENT_OBJ)
@ -1005,6 +1008,11 @@ bin/librpc_echo.@SHLIBEXT@: $(RPC_ECHO_OBJ)
@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_ECHO_OBJ) -lc \
@SONAMEFLAG@`basename $@`
bin/librpc_epmapper.@SHLIBEXT@: $(RPC_EPMAPPER_OBJ)
@echo "Linking $@"
@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_EPMAPPER_OBJ) -lc \
@SONAMEFLAG@`basename $@`
bin/winbindd@EXEEXT@: $(WINBINDD_OBJ) @BUILD_POPT@ bin/.dummy
@echo "Linking $@"
@$(LINK) -o $@ $(WINBINDD_OBJ) $(DYNEXP) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS)

View File

@ -296,7 +296,7 @@ DYNEXP=
dnl Add modules that have to be built by default here
dnl These have to be built static:
default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_lsa_ds rpc_wks rpc_net rpc_dfs rpc_srv rpc_spoolss auth_rhosts auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin pdb_gums gums_tdbsam2"
default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_lsa_ds rpc_wks rpc_net rpc_dfs rpc_srv rpc_spoolss rpc_epmapper auth_rhosts auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin pdb_gums gums_tdbsam2"
dnl These are preferably build shared, and static if dlopen() is not available
default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap charset_CP850 charset_CP437"
@ -4128,6 +4128,8 @@ SMB_MODULE(rpc_srv, \$(RPC_SVC_OBJ), "bin/librpc_srvsvc.$SHLIBEXT", RPC)
SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
SMB_MODULE(rpc_echo, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
SMB_MODULE(rpc_epmapper, \$(RPC_EPMAPPER_OBJ), "bin/librpc_epmapper.$SHLIBEXT",
RPC)
SMB_SUBSYSTEM(RPC,smbd/server.o)
SMB_MODULE(idmap_ldap, sam/idmap_ldap.o, "bin/idmap_ldap.$SHLIBEXT", IDMAP)

View File

@ -0,0 +1,88 @@
/*
Unix SMB/CIFS implementation.
Samba end point mapper utility and mapping functions
Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003
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 2 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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "includes.h"
/*****************************************************************
api_handle_map_req - handles standard epm mapping request
******************************************************************/
static BOOL api_handle_map_req(pipes_struct * p)
{
EPM_Q_MAP q_in;
EPM_R_MAP q_out;
prs_struct *in_data = &p->in_data.data;
prs_struct *ret_data = &p->out_data.rdata;
ZERO_STRUCT(q_in);
ZERO_STRUCT(q_out);
/* process input request and parse packet */
if (!epm_io_q_map("", &q_in, in_data, 0)) {
DEBUG(0,
("api_handle_map_request: unable to unmarshall EPMD_MAP\n"));
return False;
}
_epm_map(p, &q_in, &q_out);
if (!epm_io_r_map("", &q_out, ret_data, 0)) {
DEBUG(0,
("api_handle_map_req: unable to marshall EPMD_MAP\n"));
return False;
}
return True;
}
/*******************************************************************/
/* \pipe\epmapper commands */
/*******************************************************************/
/* opnum is 3 on map request */
struct api_struct api_epmapper_cmds[] = {
{"MAP_PIPE_NAME", EPM_MAP_PIPE_NAME, api_handle_map_req},
};
/*******************************************************************/
/* */
/*******************************************************************/
void epm_get_pipe_fns(struct api_struct **funcs, int *n_funcs)
{
*funcs = api_epmapper_cmds;
*n_funcs = sizeof(api_epmapper_cmds) / sizeof(struct api_struct);
}
/*******************************************************************/
/* */
/*******************************************************************/
NTSTATUS rpc_epmapper_init(void)
{
return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION,
EPM_PIPE_NM, EPM_PIPE_NM,
api_epmapper_cmds,
sizeof(api_epmapper_cmds) /
sizeof(struct api_struct));
}

View File

@ -0,0 +1,70 @@
/*
Unix SMB/CIFS implementation.
Samba end point mapper utility and mapping functions
Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003
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 2 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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "includes.h"
/*******************************************************************/
/* _epm_map - fill out mapping on input and output structs */
/*******************************************************************/
void _epm_map(pipes_struct *ps, const EPM_Q_MAP *q_u, EPM_R_MAP *r_u)
{
int i;
uint8 target_address[] = { 9, 53, 95, 27 };
EPM_FLOOR *floors = talloc(ps->mem_ctx, sizeof(EPM_FLOOR) *
q_u->tower->num_floors);
EPM_TOWER *towers = talloc(ps->mem_ctx,
sizeof(EPM_TOWER) * MAX_TOWERS);
EPM_TOWER_ARRAY array;
if (!floors || !towers) {
DEBUG(0, ("_epm_map: talloc failed!\n"));
return;
}
for (i = 0; i < q_u->tower->num_floors; i++) {
switch (q_u->tower->floors[i].lhs.protocol) {
case EPM_FLOOR_UUID:
init_epm_floor_uuid(&floors[i],
&q_u->tower->floors[i].
lhs.uuid.uuid,
q_u->tower->floors[i].
lhs.uuid.version);
break;
case EPM_FLOOR_RPC:
init_epm_floor_rpc(&floors[i]);
break;
case EPM_FLOOR_TCP:
/* for now map all requests to port 135 */
init_epm_floor_tcp(&floors[i], 135);
break;
case EPM_FLOOR_IP:
init_epm_floor_ip(&floors[i], target_address);
break;
}
}
init_epm_tower(ps->mem_ctx, &towers[0], floors, 5);
init_epm_tower_array(ps->mem_ctx, &array, towers, 1);
init_epm_r_map(ps->mem_ctx, r_u, &q_u->term_handle, &array, 1, 0);
return;
}

View File

@ -1603,6 +1603,9 @@ void get_pipe_fns( int idx, struct api_struct **fns, int *n_fns )
echo_get_pipe_fns( &cmds, &n_cmds );
break;
#endif
case PI_EPM:
epm_get_pipe_fns( &cmds, &n_cmds );
break;
default:
DEBUG(0,("get_pipe_fns: Unknown pipe index! [%d]\n", idx));
}

View File

@ -43,6 +43,7 @@ static const char *known_nt_pipes[] = {
"\\spoolss",
"\\netdfs",
"\\rpcecho",
"\\epmapper",
NULL
};