summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/utils/net.c24
-rw-r--r--source3/utils/net.h1
-rw-r--r--source3/utils/net_rpc.c10
-rw-r--r--source3/utils/net_rpc_printer.c20
4 files changed, 31 insertions, 24 deletions
diff --git a/source3/utils/net.c b/source3/utils/net.c
index 2c7ee7a224..da1339aed1 100644
--- a/source3/utils/net.c
+++ b/source3/utils/net.c
@@ -82,6 +82,7 @@ int opt_acls = 0;
int opt_attrs = 0;
int opt_timestamps = 0;
const char *opt_exclude = NULL;
+const char *opt_destination = NULL;
BOOL opt_have_ip = False;
struct in_addr opt_dest_ip;
@@ -209,23 +210,25 @@ NTSTATUS connect_to_ipc_anonymous(struct cli_state **c,
}
/**
- * Connect the local server and open a given pipe
+ * Connect a server and open a given pipe
*
- * @param cli_local A cli_state
+ * @param cli_dst A cli_state
* @param pipe The pipe to open
* @param got_pipe boolean that stores if we got a pipe
*
* @return Normal NTSTATUS return.
**/
-NTSTATUS connect_local_pipe(struct cli_state **cli_local, int pipe_num, BOOL *got_pipe)
+NTSTATUS connect_pipe(struct cli_state **cli_dst, int pipe_num, BOOL *got_pipe)
{
NTSTATUS nt_status;
- extern struct in_addr loopback_ip;
char *server_name = strdup("127.0.0.1");
struct cli_state *cli_tmp = NULL;
- /* make a connection to local named pipe via loopback */
- nt_status = connect_to_ipc(&cli_tmp, &loopback_ip, server_name);
+ if (opt_destination)
+ server_name = strdup(opt_destination);
+
+ /* make a connection to a named pipe */
+ nt_status = connect_to_ipc(&cli_tmp, NULL, server_name);
if (!NT_STATUS_IS_OK(nt_status))
return nt_status;
@@ -235,7 +238,7 @@ NTSTATUS connect_local_pipe(struct cli_state **cli_local, int pipe_num, BOOL *go
return NT_STATUS_UNSUCCESSFUL;
}
- *cli_local = cli_tmp;
+ *cli_dst = cli_tmp;
*got_pipe = True;
return nt_status;
@@ -740,10 +743,11 @@ static struct functable net_func[] = {
{"ntname", 'N', POPT_ARG_STRING, &opt_newntname},
{"rid", 'R', POPT_ARG_INT, &opt_rid},
/* Options for 'net rpc share migrate' */
- {"acls", 0, POPT_ARG_NONE, &opt_acls},
- {"attrs", 0, POPT_ARG_NONE, &opt_attrs},
- {"timestamps", 0, POPT_ARG_NONE, &opt_timestamps},
+ {"acls", 0, POPT_ARG_NONE, &opt_acls},
+ {"attrs", 0, POPT_ARG_NONE, &opt_attrs},
+ {"timestamps", 0, POPT_ARG_NONE, &opt_timestamps},
{"exclude", 'e', POPT_ARG_STRING, &opt_exclude},
+ {"destination", 0, POPT_ARG_STRING, &opt_destination},
POPT_COMMON_SAMBA
{ 0, 0, 0, 0}
diff --git a/source3/utils/net.h b/source3/utils/net.h
index 29498b9108..d75a19e498 100644
--- a/source3/utils/net.h
+++ b/source3/utils/net.h
@@ -66,6 +66,7 @@ extern int opt_acls;
extern int opt_attrs;
extern int opt_timestamps;
extern const char *opt_exclude;
+extern const char *opt_destination;
extern BOOL opt_have_ip;
extern struct in_addr opt_dest_ip;
diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c
index 26bcb51fa5..1a1d76b09a 100644
--- a/source3/utils/net_rpc.c
+++ b/source3/utils/net_rpc.c
@@ -2534,7 +2534,7 @@ rpc_share_migrate_shares_internals(const DOM_SID *domain_sid, const char *domain
goto done;
/* connect local PI_SRVSVC */
- nt_status = connect_local_pipe(&cli_dst, PI_SRVSVC, &got_dst_srvsvc_pipe);
+ nt_status = connect_pipe(&cli_dst, PI_SRVSVC, &got_dst_srvsvc_pipe);
if (!NT_STATUS_IS_OK(nt_status))
return nt_status;
@@ -2802,7 +2802,9 @@ rpc_share_migrate_files_internals(const DOM_SID *domain_sid, const char *domain_
BOOL got_src_share = False;
BOOL got_dst_share = False;
pstring mask;
- extern struct in_addr loopback_ip;
+ char *dst = NULL;
+
+ dst = strdup(opt_destination?opt_destination:"127.0.0.1");
init_enum_hnd(&hnd, 0);
@@ -2872,8 +2874,8 @@ rpc_share_migrate_files_internals(const DOM_SID *domain_sid, const char *domain_
/* open share destination */
- nt_status = connect_to_service(&cli_share_dst, &loopback_ip,
- "127.0.0.1", netname, "A:");
+ nt_status = connect_to_service(&cli_share_dst, NULL,
+ dst, netname, "A:");
if (!NT_STATUS_IS_OK(nt_status))
goto done;
diff --git a/source3/utils/net_rpc_printer.c b/source3/utils/net_rpc_printer.c
index b414b38a79..11f9c0ba2f 100644
--- a/source3/utils/net_rpc_printer.c
+++ b/source3/utils/net_rpc_printer.c
@@ -1324,13 +1324,13 @@ NTSTATUS rpc_printer_migrate_security_internals(const DOM_SID *domain_sid, const
DEBUG(3,("copying printer ACLs\n"));
- /* connect local PI_SPOOLSS */
- nt_status = connect_local_pipe(&cli_dst, PI_SPOOLSS, &got_dst_spoolss_pipe);
+ /* connect destination PI_SPOOLSS */
+ nt_status = connect_pipe(&cli_dst, PI_SPOOLSS, &got_dst_spoolss_pipe);
if (!NT_STATUS_IS_OK(nt_status))
return nt_status;
- /* enum remote printers */
+ /* enum source printers */
if (!get_printer_info(cli, mem_ctx, level, argc, argv, &num_printers, &ctr_enum)) {
nt_status = NT_STATUS_UNSUCCESSFUL;
goto done;
@@ -1474,8 +1474,8 @@ NTSTATUS rpc_printer_migrate_forms_internals(const DOM_SID *domain_sid, const ch
DEBUG(3,("copying forms\n"));
- /* connect local PI_SPOOLSS */
- nt_status = connect_local_pipe(&cli_dst, PI_SPOOLSS, &got_dst_spoolss_pipe);
+ /* connect destination PI_SPOOLSS */
+ nt_status = connect_pipe(&cli_dst, PI_SPOOLSS, &got_dst_spoolss_pipe);
if (!NT_STATUS_IS_OK(nt_status))
return nt_status;
@@ -1656,7 +1656,7 @@ NTSTATUS rpc_printer_migrate_drivers_internals(const DOM_SID *domain_sid, const
DEBUG(3,("copying printer-drivers\n"));
- nt_status = connect_local_pipe(&cli_dst, PI_SPOOLSS, &got_dst_spoolss_pipe);
+ nt_status = connect_pipe(&cli_dst, PI_SPOOLSS, &got_dst_spoolss_pipe);
if (!NT_STATUS_IS_OK(nt_status))
return nt_status;
@@ -1855,8 +1855,8 @@ NTSTATUS rpc_printer_migrate_printers_internals(const DOM_SID *domain_sid, const
DEBUG(3,("copying printers\n"));
- /* connect local PI_SPOOLSS */
- nt_status = connect_local_pipe(&cli_dst, PI_SPOOLSS, &got_dst_spoolss_pipe);
+ /* connect destination PI_SPOOLSS */
+ nt_status = connect_pipe(&cli_dst, PI_SPOOLSS, &got_dst_spoolss_pipe);
if (!NT_STATUS_IS_OK(nt_status))
return nt_status;
@@ -2024,8 +2024,8 @@ NTSTATUS rpc_printer_migrate_settings_internals(const DOM_SID *domain_sid, const
DEBUG(3,("copying printer settings\n"));
- /* connect local PI_SPOOLSS */
- nt_status = connect_local_pipe(&cli_dst, PI_SPOOLSS, &got_dst_spoolss_pipe);
+ /* connect destination PI_SPOOLSS */
+ nt_status = connect_pipe(&cli_dst, PI_SPOOLSS, &got_dst_spoolss_pipe);
if (!NT_STATUS_IS_OK(nt_status))
return nt_status;