From 4e71eae06eb4a2d67edd3767dc888c5c5de3cfc9 Mon Sep 17 00:00:00 2001 From: Jim McDonough Date: Fri, 31 May 2002 21:10:49 +0000 Subject: Enable all net rpc share subcommands and autoselect transport. (This used to be commit ebd07c3a295e3f8cd46441caac4dc8e8b178c2cc) --- source3/utils/net.c | 3 +-- source3/utils/net_help.c | 4 ++-- source3/utils/net_rpc.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 58 insertions(+), 6 deletions(-) (limited to 'source3') diff --git a/source3/utils/net.c b/source3/utils/net.c index e132b8d6e32..9e4c5e52c9e 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -316,8 +316,7 @@ static int net_join(int argc, const char **argv) static int net_share(int argc, const char **argv) { - /* only share list is implemented in RPC */ - if (argc == 0 && net_rpc_check(0)) + if (net_rpc_check(0)) return net_rpc_share(argc, argv); return net_rap_share(argc, argv); } diff --git a/source3/utils/net_help.c b/source3/utils/net_help.c index 18a89a9cb75..d87c3abe767 100644 --- a/source3/utils/net_help.c +++ b/source3/utils/net_help.c @@ -99,9 +99,9 @@ int net_help_share(int argc, const char **argv) "\nnet share [misc. options] [targets] \n" "\tenumerates all exported resources (network shares) " "on target server\n" - "\nnet [rap] share ADD [misc. options] [targets]" + "\nnet share ADD [misc. options] [targets]" "\n\tAdds a share from a server (makes the export active)\n" - "\nnet [rap] share DELETE [misc. options] [targets]\n" + "\nnet share DELETE [misc. options] [targets]\n" "\n\tDeletes a share from a server (makes the export inactive)\n"); net_common_methods_usage(argc, argv); net_common_flags_usage(argc, argv); diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index a7414958d15..c9310d41381 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -867,6 +867,61 @@ static int rpc_share_usage(int argc, const char **argv) return net_help_share(argc, argv); } +static NTSTATUS +rpc_share_add_internals(const DOM_SID *domain_sid, struct cli_state *cli, + TALLOC_CTX *mem_ctx,int argc, const char **argv) +{ + WERROR result; + char *sharename=talloc_strdup(mem_ctx, argv[0]); + char *path; + uint32 type=0; /* only allow disk shares to be added */ + uint32 num_users=0, perms=0; + char *password=NULL; /* don't allow a share password */ + + path = strchr(sharename, '='); + if (!path) + return NT_STATUS_UNSUCCESSFUL; + *path++ = '\0'; + + result = cli_srvsvc_net_share_add(cli, mem_ctx, sharename, type, + opt_comment, perms, opt_maxusers, + num_users, path, password); + return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL; +} + +static int rpc_share_add(int argc, const char **argv) +{ + if ((argc < 1) || !strchr(argv[0], '=')) { + DEBUG(1,("Sharename or path not specified on add\n")); + return rpc_share_usage(argc, argv); + } + return run_rpc_command(PIPE_SRVSVC, 0, + rpc_share_add_internals, + argc, argv); +} + +static NTSTATUS +rpc_share_del_internals(const DOM_SID *domain_sid, struct cli_state *cli, + TALLOC_CTX *mem_ctx,int argc, const char **argv) +{ + WERROR result; + + result = cli_srvsvc_net_share_del(cli, mem_ctx, argv[0]); + return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL; +} + +static int rpc_share_delete(int argc, const char **argv) +{ + if (argc < 1) { + DEBUG(1,("Sharename not specified on delete\n")); + return rpc_share_usage(argc, argv); + } + return run_rpc_command(PIPE_SRVSVC, 0, + rpc_share_del_internals, + argc, argv); +} + + static void display_share_info_1(SRV_SHARE_INFO_1 *info1) { fstring netname = "", remark = ""; @@ -940,10 +995,8 @@ rpc_share_list_internals(const DOM_SID *domain_sid, struct cli_state *cli, int net_rpc_share(int argc, const char **argv) { struct functable func[] = { -#if 0 {"add", rpc_share_add}, {"delete", rpc_share_delete}, -#endif {NULL, NULL} }; -- cgit