summaryrefslogtreecommitdiff
path: root/source4/libnet
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2004-08-25 09:22:47 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:58:22 -0500
commit1795dfd4549767bb5920eee0d5af2588d4a8b8ec (patch)
treeae8e7cbc1cbe1f1b553210703c758d550a03a90c /source4/libnet
parentaca1e774f729f0662bf220b9468cd9e4dab8be73 (diff)
downloadsamba-1795dfd4549767bb5920eee0d5af2588d4a8b8ec.tar.gz
samba-1795dfd4549767bb5920eee0d5af2588d4a8b8ec.tar.bz2
samba-1795dfd4549767bb5920eee0d5af2588d4a8b8ec.zip
r2061: - split libnet header files
- add LIB_RPC_CONNECT_STANDARD level which takes a server name and the PIPE NAME,UUID and VERSION metze (This used to be commit 6aeaa6aca39c8c2a9edf8d4b3e538bebb68070d7)
Diffstat (limited to 'source4/libnet')
-rw-r--r--source4/libnet/libnet.h144
-rw-r--r--source4/libnet/libnet_passwd.h118
-rw-r--r--source4/libnet/libnet_rpc.c52
-rw-r--r--source4/libnet/libnet_rpc.h78
4 files changed, 239 insertions, 153 deletions
diff --git a/source4/libnet/libnet.h b/source4/libnet/libnet.h
index f527a4ed82..20779f0c3f 100644
--- a/source4/libnet/libnet.h
+++ b/source4/libnet/libnet.h
@@ -32,145 +32,5 @@ struct libnet_context {
} user;
};
-/* struct and enum for finding a domain controller */
-enum libnet_find_pdc_level {
- LIBNET_FIND_PDC_GENERIC
-};
-
-union libnet_find_pdc {
- /* find to a domains PDC */
- struct {
- enum libnet_find_pdc_level level;
-
- struct {
- const char *domain_name;
- } in;
-
- struct {
- const char *pdc_name;
- } out;
- } generic;
-};
-
-/* struct and enum for connecting to a dcerpc inferface */
-enum libnet_rpc_connect_level {
- LIBNET_RPC_CONNECT_PDC
-};
-
-union libnet_rpc_connect {
- /* connect to a domains PDC */
- struct {
- enum libnet_rpc_connect_level level;
-
- struct {
- const char *domain_name;
- const char *dcerpc_iface_name;
- const char *dcerpc_iface_uuid;
- uint32 dcerpc_iface_version;
- } in;
-
- struct {
- struct dcerpc_pipe *dcerpc_pipe;
- } out;
- } pdc;
-};
-
-
-/* struct and enum for doing a remote password change */
-enum libnet_ChangePassword_level {
- LIBNET_CHANGE_PASSWORD_GENERIC,
- LIBNET_CHANGE_PASSWORD_SAMR,
- LIBNET_CHANGE_PASSWORD_KRB5,
- LIBNET_CHANGE_PASSWORD_LDAP,
- LIBNET_CHANGE_PASSWORD_RAP
-};
-
-union libnet_ChangePassword {
- struct {
- enum libnet_ChangePassword_level level;
-
- struct _libnet_ChangePassword_in {
- const char *account_name;
- const char *domain_name;
- const char *oldpassword;
- const char *newpassword;
- } in;
-
- struct _libnet_ChangePassword_out {
- const char *error_string;
- } out;
- } generic;
-
- struct {
- enum libnet_ChangePassword_level level;
- struct _libnet_ChangePassword_in in;
- struct _libnet_ChangePassword_out out;
- } samr;
-
- struct {
- enum libnet_ChangePassword_level level;
- struct _libnet_ChangePassword_in in;
- struct _libnet_ChangePassword_out out;
- } krb5;
-
- struct {
- enum libnet_ChangePassword_level level;
- struct _libnet_ChangePassword_in in;
- struct _libnet_ChangePassword_out out;
- } ldap;
-
- struct {
- enum libnet_ChangePassword_level level;
- struct _libnet_ChangePassword_in in;
- struct _libnet_ChangePassword_out out;
- } rap;
-};
-
-/* struct and enum for doing a remote password set */
-enum libnet_SetPassword_level {
- LIBNET_SET_PASSWORD_GENERIC,
- LIBNET_SET_PASSWORD_SAMR,
- LIBNET_SET_PASSWORD_KRB5,
- LIBNET_SET_PASSWORD_LDAP,
- LIBNET_SET_PASSWORD_RAP
-};
-
-union libnet_SetPassword {
- struct {
- enum libnet_SetPassword_level level;
-
- struct _libnet_SetPassword_in {
- const char *account_name;
- const char *domain_name;
- const char *newpassword;
- } in;
-
- struct _libnet_SetPassword_out {
- const char *error_string;
- } out;
- } generic;
-
- struct {
- enum libnet_SetPassword_level level;
- struct _libnet_SetPassword_in in;
- struct _libnet_SetPassword_out out;
- } samr;
-
- struct {
- enum libnet_SetPassword_level level;
- struct _libnet_SetPassword_in in;
- struct _libnet_SetPassword_out out;
- } krb5;
-
- struct {
- enum libnet_SetPassword_level level;
- struct _libnet_SetPassword_in in;
- struct _libnet_SetPassword_out out;
- } ldap;
-
- struct {
- enum libnet_ChangePassword_level level;
- struct _libnet_SetPassword_in in;
- struct _libnet_SetPassword_out out;
- } rap;
-};
+#include "libnet/libnet_passwd.h"
+#include "libnet/libnet_rpc.h"
diff --git a/source4/libnet/libnet_passwd.h b/source4/libnet/libnet_passwd.h
new file mode 100644
index 0000000000..f3b0f76e57
--- /dev/null
+++ b/source4/libnet/libnet_passwd.h
@@ -0,0 +1,118 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ Copyright (C) Stefan Metzmacher 2004
+
+ 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.
+*/
+
+/* struct and enum for doing a remote password change */
+enum libnet_ChangePassword_level {
+ LIBNET_CHANGE_PASSWORD_GENERIC,
+ LIBNET_CHANGE_PASSWORD_SAMR,
+ LIBNET_CHANGE_PASSWORD_KRB5,
+ LIBNET_CHANGE_PASSWORD_LDAP,
+ LIBNET_CHANGE_PASSWORD_RAP
+};
+
+union libnet_ChangePassword {
+ struct {
+ enum libnet_ChangePassword_level level;
+
+ struct _libnet_ChangePassword_in {
+ const char *account_name;
+ const char *domain_name;
+ const char *oldpassword;
+ const char *newpassword;
+ } in;
+
+ struct _libnet_ChangePassword_out {
+ const char *error_string;
+ } out;
+ } generic;
+
+ struct {
+ enum libnet_ChangePassword_level level;
+ struct _libnet_ChangePassword_in in;
+ struct _libnet_ChangePassword_out out;
+ } samr;
+
+ struct {
+ enum libnet_ChangePassword_level level;
+ struct _libnet_ChangePassword_in in;
+ struct _libnet_ChangePassword_out out;
+ } krb5;
+
+ struct {
+ enum libnet_ChangePassword_level level;
+ struct _libnet_ChangePassword_in in;
+ struct _libnet_ChangePassword_out out;
+ } ldap;
+
+ struct {
+ enum libnet_ChangePassword_level level;
+ struct _libnet_ChangePassword_in in;
+ struct _libnet_ChangePassword_out out;
+ } rap;
+};
+
+/* struct and enum for doing a remote password set */
+enum libnet_SetPassword_level {
+ LIBNET_SET_PASSWORD_GENERIC,
+ LIBNET_SET_PASSWORD_SAMR,
+ LIBNET_SET_PASSWORD_KRB5,
+ LIBNET_SET_PASSWORD_LDAP,
+ LIBNET_SET_PASSWORD_RAP
+};
+
+union libnet_SetPassword {
+ struct {
+ enum libnet_SetPassword_level level;
+
+ struct _libnet_SetPassword_in {
+ const char *account_name;
+ const char *domain_name;
+ const char *newpassword;
+ } in;
+
+ struct _libnet_SetPassword_out {
+ const char *error_string;
+ } out;
+ } generic;
+
+ struct {
+ enum libnet_SetPassword_level level;
+ struct _libnet_SetPassword_in in;
+ struct _libnet_SetPassword_out out;
+ } samr;
+
+ struct {
+ enum libnet_SetPassword_level level;
+ struct _libnet_SetPassword_in in;
+ struct _libnet_SetPassword_out out;
+ } krb5;
+
+ struct {
+ enum libnet_SetPassword_level level;
+ struct _libnet_SetPassword_in in;
+ struct _libnet_SetPassword_out out;
+ } ldap;
+
+ struct {
+ enum libnet_ChangePassword_level level;
+ struct _libnet_SetPassword_in in;
+ struct _libnet_SetPassword_out out;
+ } rap;
+};
diff --git a/source4/libnet/libnet_rpc.c b/source4/libnet/libnet_rpc.c
index 4896236e68..01de99c167 100644
--- a/source4/libnet/libnet_rpc.c
+++ b/source4/libnet/libnet_rpc.c
@@ -56,11 +56,39 @@ NTSTATUS libnet_find_pdc(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union
return NT_STATUS_INVALID_LEVEL;
}
-/* connect to a dcerpc interface of a domains PDC */
-static NTSTATUS libnet_rpc_connect_pdc(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_rpc_connect *r)
+/* connect to a dcerpc interface of a server */
+static NTSTATUS libnet_rpc_connect_standard(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_rpc_connect *r)
{
NTSTATUS status;
const char *binding = NULL;
+
+ binding = talloc_asprintf(mem_ctx, "ncacn_np:%s",
+ r->standard.in.server_name);
+
+ status = dcerpc_pipe_connect(&r->standard.out.dcerpc_pipe,
+ binding,
+ r->standard.in.dcerpc_iface_uuid,
+ r->standard.in.dcerpc_iface_version,
+ ctx->user.domain_name,
+ ctx->user.account_name,
+ ctx->user.password);
+ if (!NT_STATUS_IS_OK(status)) {
+ r->standard.out.error_string = talloc_asprintf(mem_ctx,
+ "dcerpc_pipe_connect to pipe %s failed with %s\n",
+ r->standard.in.dcerpc_iface_name, binding);
+ return status;
+ }
+
+ r->standard.out.error_string = NULL;
+
+ return status;
+}
+
+/* connect to a dcerpc interface of a time server */
+static NTSTATUS libnet_rpc_connect_pdc(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_rpc_connect *r)
+{
+ NTSTATUS status;
+ union libnet_rpc_connect r2;
union libnet_find_pdc f;
f.generic.level = LIBNET_FIND_PDC_GENERIC;
@@ -71,16 +99,16 @@ static NTSTATUS libnet_rpc_connect_pdc(struct libnet_context *ctx, TALLOC_CTX *m
return status;
}
- binding = talloc_asprintf(mem_ctx, "ncacn_np:%s",
- f.generic.out.pdc_name);
+ r2.standard.level = LIBNET_RPC_CONNECT_STANDARD;
+ r2.standard.in.server_name = f.generic.out.pdc_name;
+ r2.standard.in.dcerpc_iface_name = r->standard.in.dcerpc_iface_name;
+ r2.standard.in.dcerpc_iface_uuid = r->standard.in.dcerpc_iface_uuid;
+ r2.standard.in.dcerpc_iface_version = r->standard.in.dcerpc_iface_version;
+
+ status = libnet_rpc_connect(ctx, mem_ctx, &r2);
- status = dcerpc_pipe_connect(&r->pdc.out.dcerpc_pipe,
- binding,
- r->pdc.in.dcerpc_iface_uuid,
- r->pdc.in.dcerpc_iface_version,
- ctx->user.domain_name,
- ctx->user.account_name,
- ctx->user.password);
+ r->pdc.out.dcerpc_pipe = r2.standard.out.dcerpc_pipe;
+ r->pdc.out.error_string = r2.standard.out.error_string;
return status;
}
@@ -89,6 +117,8 @@ static NTSTATUS libnet_rpc_connect_pdc(struct libnet_context *ctx, TALLOC_CTX *m
NTSTATUS libnet_rpc_connect(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_rpc_connect *r)
{
switch (r->pdc.level) {
+ case LIBNET_RPC_CONNECT_STANDARD:
+ return libnet_rpc_connect_standard(ctx, mem_ctx, r);
case LIBNET_RPC_CONNECT_PDC:
return libnet_rpc_connect_pdc(ctx, mem_ctx, r);
}
diff --git a/source4/libnet/libnet_rpc.h b/source4/libnet/libnet_rpc.h
new file mode 100644
index 0000000000..8c7a0bcbe0
--- /dev/null
+++ b/source4/libnet/libnet_rpc.h
@@ -0,0 +1,78 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ Copyright (C) Stefan Metzmacher 2004
+
+ 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.
+*/
+
+/* struct and enum for finding a domain controller */
+enum libnet_find_pdc_level {
+ LIBNET_FIND_PDC_GENERIC
+};
+
+union libnet_find_pdc {
+ /* find to a domains PDC */
+ struct {
+ enum libnet_find_pdc_level level;
+
+ struct {
+ const char *domain_name;
+ } in;
+
+ struct {
+ const char *pdc_name;
+ } out;
+ } generic;
+};
+
+/* struct and enum for connecting to a dcerpc inferface */
+enum libnet_rpc_connect_level {
+ LIBNET_RPC_CONNECT_STANDARD,
+ LIBNET_RPC_CONNECT_PDC
+};
+
+union libnet_rpc_connect {
+ /* connect to a standart server */
+ struct {
+ enum libnet_rpc_connect_level level;
+
+ struct {
+ const char *server_name;
+ const char *dcerpc_iface_name;
+ const char *dcerpc_iface_uuid;
+ uint32 dcerpc_iface_version;
+ } in;
+
+ struct _libnet_rpc_connect_out {
+ struct dcerpc_pipe *dcerpc_pipe;
+ const char *error_string;
+ } out;
+ } standard;
+
+ /* connect to a domains PDC */
+ struct {
+ enum libnet_rpc_connect_level level;
+
+ struct {
+ const char *domain_name;
+ const char *dcerpc_iface_name;
+ const char *dcerpc_iface_uuid;
+ uint32 dcerpc_iface_version;
+ } in;
+
+ struct _libnet_rpc_connect_out out;
+ } pdc;
+};