r2061: - split libnet header files
authorStefan Metzmacher <metze@samba.org>
Wed, 25 Aug 2004 09:22:47 +0000 (09:22 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:58:22 +0000 (12:58 -0500)
- 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)

source4/libnet/libnet.h
source4/libnet/libnet_passwd.h [new file with mode: 0644]
source4/libnet/libnet_rpc.c
source4/libnet/libnet_rpc.h [new file with mode: 0644]

index f527a4ed821e8a2e3df0581107a489c2d9b5d544..20779f0c3f179f5e706c3d81f60b1b02bfbc1897 100644 (file)
@@ -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 (file)
index 0000000..f3b0f76
--- /dev/null
@@ -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;
+};
index 4896236e6826e286fb69310c710fd25b296ff972..01de99c167677376b32ab42caa4bff7091739b9a 100644 (file)
@@ -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 (file)
index 0000000..8c7a0bc
--- /dev/null
@@ -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;
+};