diff options
-rw-r--r-- | source3/Makefile.in | 11 | ||||
-rw-r--r-- | source3/configure.in | 4 | ||||
-rw-r--r-- | source3/librpc/gen_ndr/ndr_wkssvc.c | 18 | ||||
-rw-r--r-- | source3/librpc/gen_ndr/wkssvc.h | 4 | ||||
-rw-r--r-- | source3/librpc/idl/wkssvc.idl | 2 | ||||
-rw-r--r-- | source3/rpc_server/srv_wkssvc_nt.c | 316 |
6 files changed, 40 insertions, 315 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index 0044c1d13d..709dc5caa0 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -211,7 +211,7 @@ LIBNDR_OBJ = librpc/ndr/ndr_basic.o librpc/ndr/ndr.o librpc/ndr/ndr_misc.o \ LIBNDR_GEN_OBJ = librpc/gen_ndr/ndr_unixinfo.o librpc/gen_ndr/ndr_lsa.o \ librpc/gen_ndr/ndr_dfs.o librpc/gen_ndr/ndr_echo.o \ librpc/gen_ndr/ndr_winreg.o librpc/gen_ndr/ndr_initshutdown.o \ - librpc/gen_ndr/ndr_eventlog.o librpc/gen_ndr/ndr_wkssvc.o + librpc/gen_ndr/ndr_eventlog.o RPC_PARSE_OBJ0 = rpc_parse/parse_prs.o rpc_parse/parse_misc.o @@ -292,6 +292,7 @@ LIBSMB_OBJ = libsmb/clientgen.o libsmb/cliconnect.o libsmb/clifile.o \ LIBMSRPC_OBJ = rpc_client/cli_lsarpc.o rpc_client/cli_samr.o \ rpc_client/cli_netlogon.o rpc_client/cli_srvsvc.o \ + rpc_client/cli_wkssvc.o \ rpc_client/cli_reg.o $(RPC_CLIENT_OBJ) \ rpc_client/cli_spoolss.o rpc_client/cli_spoolss_notify.o \ rpc_client/cli_ds.o \ @@ -326,7 +327,7 @@ RPC_LSA_DS_OBJ = rpc_server/srv_lsa_ds.o rpc_server/srv_lsa_ds_nt.o RPC_SVC_OBJ = rpc_server/srv_srvsvc.o rpc_server/srv_srvsvc_nt.o -RPC_WKS_OBJ = librpc/gen_ndr/srv_wkssvc.o rpc_server/srv_wkssvc_nt.o +RPC_WKS_OBJ = rpc_server/srv_wkssvc.o rpc_server/srv_wkssvc_nt.o RPC_SVCCTL_OBJ = rpc_server/srv_svcctl.o rpc_server/srv_svcctl_nt.o \ services/svc_spoolss.o services/svc_rcinit.o services/services_db.o \ @@ -355,8 +356,10 @@ RPC_PARSE_OBJ1 = $(RPC_PARSE_OBJ0) rpc_parse/parse_sec.o RPC_PARSE_OBJ = rpc_parse/parse_lsa.o rpc_parse/parse_net.o \ rpc_parse/parse_reg.o rpc_parse/parse_rpc.o \ rpc_parse/parse_samr.o rpc_parse/parse_srv.o \ - rpc_parse/parse_ds.o rpc_parse/parse_spoolss.o \ - rpc_parse/parse_shutdown.o rpc_parse/parse_svcctl.o \ + rpc_parse/parse_wks.o rpc_parse/parse_ds.o \ + rpc_parse/parse_spoolss.o \ + rpc_parse/parse_shutdown.o \ + rpc_parse/parse_svcctl.o \ rpc_parse/parse_eventlog.o rpc_parse/parse_buffer.o \ rpc_parse/parse_ntsvcs.o $(REGOBJS_OBJ) diff --git a/source3/configure.in b/source3/configure.in index a0e19c1e17..975df0e948 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -579,7 +579,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_wkssvc rpc_svcctl rpc_ntsvcs rpc_net rpc_netdfs rpc_srv rpc_spoolss rpc_eventlog rpc_unixinfo auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default" +default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_lsa_ds rpc_wks rpc_svcctl rpc_ntsvcs rpc_net rpc_netdfs rpc_srv rpc_spoolss rpc_eventlog rpc_unixinfo auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default" dnl These are preferably build shared, and static if dlopen() is not available default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy charset_CP850 charset_CP437 auth_script" @@ -5618,7 +5618,7 @@ SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o) SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC) SMB_MODULE(rpc_reg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC) SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC) -SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC) +SMB_MODULE(rpc_wks, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC) SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC) SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC) SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC) diff --git a/source3/librpc/gen_ndr/ndr_wkssvc.c b/source3/librpc/gen_ndr/ndr_wkssvc.c index 9455d09c5f..60bbc857d1 100644 --- a/source3/librpc/gen_ndr/ndr_wkssvc.c +++ b/source3/librpc/gen_ndr/ndr_wkssvc.c @@ -2680,8 +2680,7 @@ NTSTATUS ndr_push_wkssvc_NetWkstaTransportEnum(struct ndr_push *ndr, int flags, if (r->in.level == NULL) return NT_STATUS_INVALID_PARAMETER_MIX; NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.level)); if (r->in.ctr == NULL) return NT_STATUS_INVALID_PARAMETER_MIX; - if (r->in.level == NULL) return NT_STATUS_INVALID_PARAMETER_MIX; - NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.ctr, *r->in.level)); + NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.ctr, r->in.level)); NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr)); NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer)); if (r->in.resume_handle == NULL) return NT_STATUS_INVALID_PARAMETER_MIX; @@ -2691,8 +2690,7 @@ NTSTATUS ndr_push_wkssvc_NetWkstaTransportEnum(struct ndr_push *ndr, int flags, if (r->out.level == NULL) return NT_STATUS_INVALID_PARAMETER_MIX; NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.level)); if (r->out.ctr == NULL) return NT_STATUS_INVALID_PARAMETER_MIX; - if (r->out.level == NULL) return NT_STATUS_INVALID_PARAMETER_MIX; - NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.ctr, *r->out.level)); + NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.ctr, r->out.level)); NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr)); NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.totalentries)); if (r->out.totalentries) { @@ -2747,8 +2745,7 @@ NTSTATUS ndr_pull_wkssvc_NetWkstaTransportEnum(struct ndr_pull *ndr, int flags, } _mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr); NDR_PULL_SET_MEM_CTX(ndr, r->in.ctr, LIBNDR_FLAG_REF_ALLOC); - if (r->in.level == NULL) return NT_STATUS_INVALID_PARAMETER_MIX; - NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.ctr, *r->in.level)); + NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.ctr, r->in.level)); NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr)); NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC); NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer)); @@ -2779,8 +2776,7 @@ NTSTATUS ndr_pull_wkssvc_NetWkstaTransportEnum(struct ndr_pull *ndr, int flags, } _mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr); NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC); - if (r->out.level == NULL) return NT_STATUS_INVALID_PARAMETER_MIX; - NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.ctr, *r->out.level)); + NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.ctr, r->out.level)); NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr)); NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC); NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_totalentries)); @@ -2829,8 +2825,7 @@ _PUBLIC_ void ndr_print_wkssvc_NetWkstaTransportEnum(struct ndr_print *ndr, cons ndr->depth--; ndr_print_ptr(ndr, "ctr", r->in.ctr); ndr->depth++; - if (r->in.level == NULL) return; - ndr_print_set_switch_value(ndr, r->in.ctr, *r->in.level); + ndr_print_set_switch_value(ndr, r->in.ctr, r->in.level); ndr_print_wkssvc_NetWkstaTransportCtr(ndr, "ctr", r->in.ctr); ndr->depth--; ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer); @@ -2849,8 +2844,7 @@ _PUBLIC_ void ndr_print_wkssvc_NetWkstaTransportEnum(struct ndr_print *ndr, cons ndr->depth--; ndr_print_ptr(ndr, "ctr", r->out.ctr); ndr->depth++; - if (r->out.level == NULL) return; - ndr_print_set_switch_value(ndr, r->out.ctr, *r->out.level); + ndr_print_set_switch_value(ndr, r->out.ctr, r->out.level); ndr_print_wkssvc_NetWkstaTransportCtr(ndr, "ctr", r->out.ctr); ndr->depth--; ndr_print_ptr(ndr, "totalentries", r->out.totalentries); diff --git a/source3/librpc/gen_ndr/wkssvc.h b/source3/librpc/gen_ndr/wkssvc.h index 84e6d19853..f6b7d1fafb 100644 --- a/source3/librpc/gen_ndr/wkssvc.h +++ b/source3/librpc/gen_ndr/wkssvc.h @@ -247,14 +247,14 @@ struct wkssvc_NetWkstaTransportEnum { struct { const char *server_name;/* [unique,charset(UTF16)] */ uint32_t *level;/* [ref] */ - union wkssvc_NetWkstaTransportCtr *ctr;/* [ref,switch_is(*level)] */ + union wkssvc_NetWkstaTransportCtr *ctr;/* [ref,switch_is(level)] */ uint32_t max_buffer; uint32_t *resume_handle;/* [ref] */ } in; struct { uint32_t *level;/* [ref] */ - union wkssvc_NetWkstaTransportCtr *ctr;/* [ref,switch_is(*level)] */ + union wkssvc_NetWkstaTransportCtr *ctr;/* [ref,switch_is(level)] */ uint32_t *totalentries;/* [unique] */ uint32_t *resume_handle;/* [ref] */ WERROR result; diff --git a/source3/librpc/idl/wkssvc.idl b/source3/librpc/idl/wkssvc.idl index 80fe4efa1a..8c789fd8ca 100644 --- a/source3/librpc/idl/wkssvc.idl +++ b/source3/librpc/idl/wkssvc.idl @@ -217,7 +217,7 @@ WERROR wkssvc_NetWkstaTransportEnum ( [in] [string,charset(UTF16)] uint16 *server_name, [in,out,ref] uint32 *level, - [in,out,switch_is(*level),ref] wkssvc_NetWkstaTransportCtr *ctr, + [in,out,switch_is(level),ref] wkssvc_NetWkstaTransportCtr *ctr, [in] uint32 max_buffer, [out] uint32 *totalentries, [in,out,ref] uint32 *resume_handle diff --git a/source3/rpc_server/srv_wkssvc_nt.c b/source3/rpc_server/srv_wkssvc_nt.c index fe48251639..6528e63225 100644 --- a/source3/rpc_server/srv_wkssvc_nt.c +++ b/source3/rpc_server/srv_wkssvc_nt.c @@ -29,323 +29,51 @@ #define DBGC_CLASS DBGC_RPC_SRV /******************************************************************* - Fill in the valiues for the struct wkssvc_NetWkstaInfo100. + create_wks_info_100 ********************************************************************/ -static void create_wks_info_100(struct wkssvc_NetWkstaInfo100 *info100) +static void create_wks_info_100(WKS_INFO_100 *inf) { pstring my_name; pstring domain; + DEBUG(5,("create_wks_info_100: %d\n", __LINE__)); + pstrcpy (my_name, global_myname()); strupper_m(my_name); pstrcpy (domain, lp_workgroup()); strupper_m(domain); - - info100->platform_id = 0x000001f4; /* unknown */ - info100->version_major = lp_major_announce_version(); - info100->version_minor = lp_minor_announce_version(); - - info100->server_name = talloc_strdup( info100, my_name ); - info100->domain_name = talloc_strdup( info100, domain ); - return; + init_wks_info_100(inf, + 0x000001f4, /* platform id info */ + lp_major_announce_version(), + lp_minor_announce_version(), + my_name, domain); } -/******************************************************************** +/******************************************************************* + wks_reply_query_info + only supports info level 100 at the moment. - ********************************************************************/ - -WERROR _wkssvc_NetWkstaGetInfo( pipes_struct *p, const char *server_name, uint32_t level, - union wkssvc_NetWkstaInfo *info ) -{ - struct wkssvc_NetWkstaInfo100 *wks100 = NULL; - - /* We only support info level 100 currently */ - - if ( level != 100 ) { - return NT_STATUS_INVALID_LEVEL; - } - - if ( (wks100 = TALLOC_ZERO_P(p->mem_ctx, struct wkssvc_NetWkstaInfo100)) == NULL ) { - return NT_STATUS_NO_MEMORY; - } - - create_wks_info_100( wks100 ); - - info->info100 = wks100; - - return NT_STATUS_OK; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _wkssvc_NetWkstaSetInfo( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _wkssvc_NetWkstaEnumUsers( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRWKSTAUSERGETINFO( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRWKSTAUSERSETINFO( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _wkssvc_NetWkstaTransportEnum( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRWKSTATRANSPORTADD( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRWKSTATRANSPORTDEL( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRUSEADD( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRUSEGETINFO( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRUSEDEL( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRUSEENUM( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRMESSAGEBUFFERSEND( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRWORKSTATIONSTATISTICSGET( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} -/******************************************************************** ********************************************************************/ -WERROR _WKSSVC_NETRLOGONDOMAINNAMEADD( pipes_struct *p ) +NTSTATUS _wks_query_info(pipes_struct *p, WKS_Q_QUERY_INFO *q_u, WKS_R_QUERY_INFO *r_u) { - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRLOGONDOMAINNAMEDEL( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRJOINDOMAIN( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRUNJOINDOMAIN( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRRENAMEMACHINEINDOMAIN( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRVALIDATENAME( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRGETJOININFORMATION( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRGETJOINABLEOUS( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ + WKS_INFO_100 *wks100 = NULL; -WERROR _wkssvc_NetrJoinDomain2( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _wkssvc_NetrUnjoinDomain2( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _wkssvc_NetrRenameMachineInDomain2( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRVALIDATENAME2( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ + DEBUG(5,("_wks_query_info: %d\n", __LINE__)); -WERROR _WKSSVC_NETRGETJOINABLEOUS2( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} - -/******************************************************************** - ********************************************************************/ - -WERROR _wkssvc_NetrAddAlternateComputerName( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} + wks100 = TALLOC_ZERO_P(p->mem_ctx, WKS_INFO_100); -/******************************************************************** - ********************************************************************/ - -WERROR _wkssvc_NetrRemoveAlternateComputerName( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} + if (!wks100) + return NT_STATUS_NO_MEMORY; -/******************************************************************** - ********************************************************************/ + create_wks_info_100(wks100); + init_wks_r_query_info(r_u, q_u->switch_value, wks100, NT_STATUS_OK); -WERROR _WKSSVC_NETRSETPRIMARYCOMPUTERNAME( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; -} + DEBUG(5,("_wks_query_info: %d\n", __LINE__)); -/******************************************************************** - ********************************************************************/ - -WERROR _WKSSVC_NETRENUMERATECOMPUTERNAMES( pipes_struct *p ) -{ - /* FIXME: Add implementation code here */ - return WERR_NOT_SUPPORTED; + return r_u->status; } - |