diff options
author | Stefan Metzmacher <metze@samba.org> | 2004-08-25 09:22:47 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:58:22 -0500 |
commit | 1795dfd4549767bb5920eee0d5af2588d4a8b8ec (patch) | |
tree | ae8e7cbc1cbe1f1b553210703c758d550a03a90c /source4/libnet | |
parent | aca1e774f729f0662bf220b9468cd9e4dab8be73 (diff) | |
download | samba-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.h | 144 | ||||
-rw-r--r-- | source4/libnet/libnet_passwd.h | 118 | ||||
-rw-r--r-- | source4/libnet/libnet_rpc.c | 52 | ||||
-rw-r--r-- | source4/libnet/libnet_rpc.h | 78 |
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; +}; |