* Winbind (NDR-based) Protocol
*/
-import "security.idl", "lsa.idl";
+import "security.idl", "lsa.idl", "samr.idl", "netlogon.idl";
[ uuid("b6608c99-0407-401b-96d3-7bcda67232af"),
version(1.0),
] interface winbind_protocol
{
typedef enum lsa_SidType lsa_SidType;
+ typedef struct netr_SamInfo3 netr_SamInfo3;
+ typedef struct samr_DomInfo1 samr_DomInfo1;
const uint32 WINBIND_MAX_LENGTH_PRIVILEGED = 0x0FFFFFFF;
const uint32 WINBIND_MAX_LENGTH_UNPRIVILEGED = 0x00020000;
/*
* PAM authenticate and password change
*/
- winbind_status winbind_pam_auth(/*TODO*/);
- winbind_status winbind_pam_auth_crap(/*TODO*/);
+
+ typedef [v1_enum] enum {
+ WINBIND_AUTH_LEVEL_COMPAT_AUTH_PLAIN = 1
+ } winbind_auth_level;
+
+ struct winbind_auth_compat_auth_plain_req {
+ uint32 flags;
+ [string,charset(UTF8)] uint8 account_name[];
+ [string,charset(UTF8)] uint8 *domain_name;
+ [string,charset(UTF8)] uint8 password[];
+ uint32 num_require_membership_of_sids;
+ [size_is(num_require_membership_of_sids)]
+ dom_sid *require_membership_of_sids;
+ [string,charset(UTF8)] uint8 *krb5_cc_type;
+ hyper *uid;
+ };
+
+ struct winbind_auth_compat_auth_rep {
+ [string,charset(UTF8)] uint8 *unix_username;
+ [string,charset(UTF8)] uint8 *krb5_cc_name;
+ netr_SamInfo3 *info3;
+ samr_DomInfo1 *password_policy;
+ DATA_BLOB *afs_token;
+ };
+
+ typedef [switch_type(winbind_auth_level)] union {
+ [case(WINBIND_AUTH_LEVEL_COMPAT_AUTH_PLAIN)]
+ struct winbind_auth_compat_auth_plain_req compat_auth_plain;
+ [default];
+ } winbind_auth_req;
+
+ typedef [switch_type(winbind_auth_level)] union {
+ [case(WINBIND_AUTH_LEVEL_COMPAT_AUTH_PLAIN)]
+ struct winbind_auth_compat_auth_rep compat_auth;
+ [default];
+ } winbind_auth_rep;
+
+ winbind_status winbind_auth(
+ [in] winbind_auth_level *level,
+ [in,switch_is(*level)] winbind_auth_req req,
+ [out,switch_is(*level)] winbind_auth_rep *rep
+ );
+
winbind_status winbind_pam_chauthtok(/*TODO*/);
winbind_status winbind_pam_logoff(/*TODO*/);
winbind_status winbind_pam_chng_paswd_auth_crap(/*TODO*/);