mirror of
https://github.com/samba-team/samba.git
synced 2025-02-03 13:47:25 +03:00
s3-net: Implemented net rpc conf showshare command
The function has the same logic as net rpc conf list, however it only loads the specific share. Signed-off-by: Michael Adam <obnox@samba.org>
This commit is contained in:
parent
2db3696303
commit
5f8ec78768
@ -58,6 +58,15 @@ static int rpc_conf_listshares_usage(struct net_context *c, int argc,
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int rpc_conf_showshare_usage(struct net_context *c, int argc,
|
||||
const char **argv)
|
||||
{
|
||||
d_printf("%s\n%s",
|
||||
_("Usage:"),
|
||||
_("net rpc conf showshare <sharename>\n"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
static NTSTATUS rpc_conf_get_share(TALLOC_CTX *mem_ctx,
|
||||
struct dcerpc_binding_handle *b,
|
||||
struct policy_handle *parent_hnd,
|
||||
@ -551,11 +560,102 @@ error:
|
||||
|
||||
}
|
||||
|
||||
static NTSTATUS rpc_conf_showshare_internal(struct net_context *c,
|
||||
const struct dom_sid *domain_sid,
|
||||
const char *domain_name,
|
||||
struct cli_state *cli,
|
||||
struct rpc_pipe_client *pipe_hnd,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
int argc,
|
||||
const char **argv )
|
||||
{
|
||||
TALLOC_CTX *frame = talloc_stackframe();
|
||||
NTSTATUS status = NT_STATUS_OK;
|
||||
WERROR werr = WERR_OK;
|
||||
WERROR _werr;
|
||||
|
||||
struct dcerpc_binding_handle *b = pipe_hnd->binding_handle;
|
||||
|
||||
/* key info */
|
||||
struct policy_handle hive_hnd, key_hnd;
|
||||
struct smbconf_service *service = NULL;
|
||||
const char *sharename = NULL;
|
||||
|
||||
|
||||
ZERO_STRUCT(hive_hnd);
|
||||
ZERO_STRUCT(key_hnd);
|
||||
|
||||
|
||||
if (argc != 1 || c->display_usage) {
|
||||
rpc_conf_showshare_usage(c, argc, argv);
|
||||
status = NT_STATUS_INVALID_PARAMETER;
|
||||
goto error;
|
||||
}
|
||||
|
||||
status = rpc_conf_open_conf(frame,
|
||||
b,
|
||||
REG_KEY_READ,
|
||||
&hive_hnd,
|
||||
&key_hnd,
|
||||
&werr);
|
||||
|
||||
if (!(NT_STATUS_IS_OK(status))) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (!(W_ERROR_IS_OK(werr))) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
sharename = talloc_strdup(frame, argv[0]);
|
||||
if (sharename == NULL) {
|
||||
werr = WERR_NOMEM;
|
||||
d_fprintf(stderr, _("Failed to create share: %s\n"),
|
||||
win_errstr(werr));
|
||||
goto error;
|
||||
}
|
||||
|
||||
service = talloc(frame, struct smbconf_service);
|
||||
if (service == NULL) {
|
||||
werr = WERR_NOMEM;
|
||||
d_fprintf(stderr, _("Failed to create share: %s\n"),
|
||||
win_errstr(werr));
|
||||
goto error;
|
||||
}
|
||||
|
||||
status = rpc_conf_get_share(frame,
|
||||
b,
|
||||
&key_hnd,
|
||||
sharename,
|
||||
service,
|
||||
&werr);
|
||||
|
||||
if (!(NT_STATUS_IS_OK(status))) {
|
||||
goto error;
|
||||
}
|
||||
if (!(W_ERROR_IS_OK(werr))) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
rpc_conf_print_shares(1, service);
|
||||
|
||||
error:
|
||||
if (!(W_ERROR_IS_OK(werr))) {
|
||||
status = werror_to_ntstatus(werr);
|
||||
}
|
||||
|
||||
dcerpc_winreg_CloseKey(b, frame, &hive_hnd, &_werr);
|
||||
dcerpc_winreg_CloseKey(b, frame, &key_hnd, &_werr);
|
||||
|
||||
TALLOC_FREE(frame);
|
||||
return status;
|
||||
}
|
||||
|
||||
static int rpc_conf_showshare(struct net_context *c, int argc,
|
||||
const char **argv)
|
||||
{
|
||||
d_printf("Function not implemented yet\n");
|
||||
return 0;
|
||||
return run_rpc_command(c, NULL, &ndr_table_winreg.syntax_id, 0,
|
||||
rpc_conf_showshare_internal, argc, argv );
|
||||
}
|
||||
|
||||
static int rpc_conf_listshares(struct net_context *c, int argc,
|
||||
|
Loading…
x
Reference in New Issue
Block a user