#ifndef _SMBAUTH_H_
#define _SMBAUTH_H_
typedef struct normal_string
{
int len;
char *str;
} AUTH_STR;
typedef struct auth_usersupplied_info
{
DATA_BLOB lm_resp;
DATA_BLOB nt_resp;
DATA_BLOB lm_interactive_pwd;
DATA_BLOB nt_interactive_pwd;
DATA_BLOB plaintext_password;
BOOL encrypted;
AUTH_STR client_domain;
AUTH_STR domain;
AUTH_STR internal_username;
AUTH_STR smb_name;
AUTH_STR wksta_name;
} auth_usersupplied_info;
#define SAM_FILL_NAME 0x01
#define SAM_FILL_INFO3 0x02
#define SAM_FILL_SAM 0x04
#define SAM_FILL_UNIX 0x08
#define SAM_FILL_ALL (SAM_FILL_NAME | SAM_FILL_INFO3 | SAM_FILL_SAM | SAM_FILL_UNIX)
typedef struct auth_serversupplied_info
{
BOOL guest;
uid_t uid;
gid_t gid;
int n_groups;
gid_t *groups;
NT_USER_TOKEN *ptok;
DATA_BLOB user_session_key;
DATA_BLOB lm_session_key;
uint32 sam_fill_level;
SAM_ACCOUNT *sam_account;
void *pam_handle;
char *unix_name;
} auth_serversupplied_info;
struct auth_context {
DATA_BLOB challenge;
const char *challenge_set_by;
BOOL challenge_may_be_modified;
struct auth_methods *challenge_set_method;
struct auth_methods *auth_method_list;
TALLOC_CTX *mem_ctx;
const uint8 *(*get_ntlm_challenge)(struct auth_context *auth_context);
NTSTATUS (*check_ntlm_password)(const struct auth_context *auth_context,
const struct auth_usersupplied_info *user_info,
struct auth_serversupplied_info **server_info);
NTSTATUS (*nt_status_squash)(NTSTATUS nt_status);
void (*free)(struct auth_context **auth_context);
};
typedef struct auth_methods
{
struct auth_methods *prev, *next;
const char *name;
NTSTATUS (*auth)(const struct auth_context *auth_context,
void *my_private_data,
TALLOC_CTX *mem_ctx,
const struct auth_usersupplied_info *user_info,
auth_serversupplied_info **server_info);
DATA_BLOB (*get_chal)(const struct auth_context *auth_context,
void **my_private_data,
TALLOC_CTX *mem_ctx);
void *private_data;
void (*free_private_data)(void **private_data);
void (*send_keepalive)(void **private_data);
} auth_methods;
typedef NTSTATUS (*auth_init_function)(struct auth_context *, const char *, struct auth_methods **);
struct auth_init_function_entry {
const char *name;
auth_init_function init;
struct auth_init_function_entry *prev, *next;
};
typedef struct auth_ntlmssp_state
{
TALLOC_CTX *mem_ctx;
struct auth_context *auth_context;
struct auth_serversupplied_info *server_info;
struct ntlmssp_state *ntlmssp_state;
} AUTH_NTLMSSP_STATE;
#define AUTH_INTERFACE_VERSION 1
#endif