1 /*
2    Unix SMB/CIFS implementation.
3 
4    Copyright (C) Stefan Metzmacher	2004
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 /* struct and enum for doing a remote password change */
21 enum libnet_ChangePassword_level {
22 	LIBNET_CHANGE_PASSWORD_GENERIC,
23 	LIBNET_CHANGE_PASSWORD_SAMR,
24 	LIBNET_CHANGE_PASSWORD_KRB5,
25 	LIBNET_CHANGE_PASSWORD_LDAP,
26 	LIBNET_CHANGE_PASSWORD_RAP
27 };
28 
29 union libnet_ChangePassword {
30 	struct {
31 		enum libnet_ChangePassword_level level;
32 
33 		struct _libnet_ChangePassword_in {
34 			const char *account_name;
35 			const char *domain_name;
36 			const char *oldpassword;
37 			const char *newpassword;
38 		} in;
39 
40 		struct _libnet_ChangePassword_out {
41 			const char *error_string;
42 		} out;
43 	} generic;
44 
45 	struct {
46 		enum libnet_ChangePassword_level level;
47 		struct _libnet_ChangePassword_in in;
48 		struct _libnet_ChangePassword_out out;
49 	} samr;
50 
51 	struct {
52 		enum libnet_ChangePassword_level level;
53 		struct _libnet_ChangePassword_in in;
54 		struct _libnet_ChangePassword_out out;
55 	} krb5;
56 
57 	struct {
58 		enum libnet_ChangePassword_level level;
59 		struct _libnet_ChangePassword_in in;
60 		struct _libnet_ChangePassword_out out;
61 	} ldap;
62 
63 	struct {
64 		enum libnet_ChangePassword_level level;
65 		struct _libnet_ChangePassword_in in;
66 		struct _libnet_ChangePassword_out out;
67 	} rap;
68 };
69 
70 /* struct and enum for doing a remote password set */
71 enum libnet_SetPassword_level {
72 	LIBNET_SET_PASSWORD_GENERIC,
73 	LIBNET_SET_PASSWORD_SAMR,
74 	LIBNET_SET_PASSWORD_SAMR_HANDLE,
75 	LIBNET_SET_PASSWORD_SAMR_HANDLE_26,
76 	LIBNET_SET_PASSWORD_SAMR_HANDLE_25,
77 	LIBNET_SET_PASSWORD_SAMR_HANDLE_24,
78 	LIBNET_SET_PASSWORD_SAMR_HANDLE_23,
79 	LIBNET_SET_PASSWORD_KRB5,
80 	LIBNET_SET_PASSWORD_LDAP,
81 	LIBNET_SET_PASSWORD_RAP
82 };
83 
84 union libnet_SetPassword {
85 	struct {
86 		enum libnet_SetPassword_level level;
87 
88 		struct _libnet_SetPassword_in {
89 			const char *account_name;
90 			const char *domain_name;
91 			const char *newpassword;
92 		} in;
93 
94 		struct _libnet_SetPassword_out {
95 			const char *error_string;
96 		} out;
97 	} generic;
98 
99 	struct {
100 		enum libnet_SetPassword_level level;
101 		struct _libnet_SetPassword_samr_handle_in {
102 			const char           *account_name; /* for debug only */
103 			struct policy_handle *user_handle;
104 			struct dcerpc_pipe   *dcerpc_pipe;
105 			const char           *newpassword;
106 			struct samr_UserInfo21 *info21; /* can be NULL,
107 			                                 * for level 26,24 it must be NULL
108 			                                 * for level 25,23 it must be non-NULL
109 							 */
110 		} in;
111 		struct _libnet_SetPassword_out out;
112 	} samr_handle;
113 
114 	struct {
115 		enum libnet_SetPassword_level level;
116 		struct _libnet_SetPassword_in in;
117 		struct _libnet_SetPassword_out out;
118 	} samr;
119 
120 	struct {
121 		enum libnet_SetPassword_level level;
122 		struct _libnet_SetPassword_in in;
123 		struct _libnet_SetPassword_out out;
124 	} krb5;
125 
126 	struct {
127 		enum libnet_SetPassword_level level;
128 		struct _libnet_SetPassword_in in;
129 		struct _libnet_SetPassword_out out;
130 	} ldap;
131 
132 	struct {
133 		enum libnet_ChangePassword_level level;
134 		struct _libnet_SetPassword_in in;
135 		struct _libnet_SetPassword_out out;
136 	} rap;
137 };
138