Merge from appliance-head: when creating a default security descriptor
[samba.git] / source3 / include / auth.h
1 #ifndef _SMBAUTH_H_
2 #define _SMBAUTH_H_
3 /* 
4    Unix SMB/Netbios implementation.
5    Version 2.2
6    Standardised Authentication types
7    Copyright (C) Andrew Bartlett 2001
8    
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13    
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18    
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 /* AUTH_STR - string */
25 typedef struct normal_string
26 {
27         int len;
28         char *str;
29 } AUTH_STR;
30
31 /* AUTH_UNISTR - unicode string or buffer */
32 typedef struct unicode_string
33 {
34         int len;
35         uchar *unistr;
36 } AUTH_UNISTR;
37
38 typedef struct interactive_password
39 {
40         OWF_INFO          lm_owf;              /* LM OWF Password */
41         OWF_INFO          nt_owf;              /* NT OWF Password */
42 } auth_interactive_password;
43
44 typedef struct usersupplied_info
45 {
46         
47         DATA_BLOB lm_resp;
48         DATA_BLOB nt_resp;
49         auth_interactive_password * interactive_password;
50         DATA_BLOB plaintext_password;
51         
52         BOOL encrypted;
53         
54         uint32 ntlmssp_flags;
55
56         AUTH_STR           client_domain;          /* domain name string */
57         AUTH_STR           domain;               /* domain name after mapping */
58         AUTH_STR           internal_username;    /* username after mapping */
59         AUTH_STR           smb_name;        /* username before mapping */
60         AUTH_STR           wksta_name;           /* workstation name (netbios calling name) unicode string */
61         
62 } auth_usersupplied_info;
63
64 #define SAM_FILL_NAME  0x01
65 #define SAM_FILL_INFO3 0x02
66 #define SAM_FILL_SAM   0x04
67 #define SAM_FILL_UNIX  0x08
68 #define SAM_FILL_ALL (SAM_FILL_NAME | SAM_FILL_INFO3 | SAM_FILL_SAM | SAM_FILL_UNIX)
69
70 typedef struct serversupplied_info 
71 {
72         BOOL guest;
73         
74         /* This groups info is needed for when we become_user() for this uid */
75         int n_groups;
76         gid_t *groups;
77         
78         /* NT group information taken from the info3 structure */
79         
80         NT_USER_TOKEN *ptok;
81         
82         uchar session_key[16];
83         
84         uint8 first_8_lm_hash[8];
85
86         uint32 sam_fill_level;  /* How far is this structure filled? */
87         
88         SAM_ACCOUNT *sam_account;
89         
90         void *pam_handle;
91         
92 } auth_serversupplied_info;
93
94 typedef struct authsupplied_info {
95         DATA_BLOB challange; 
96
97         /* Who set this up in the first place? */ 
98         char *challange_set_by; \
99
100         struct auth_methods *challange_set_method; 
101         /* What order are the various methods in?   Try to stop it changing under us */ 
102         struct auth_methods *auth_method_list;  
103 } auth_authsupplied_info;
104
105 typedef struct auth_methods
106 {
107         struct auth_methods *prev, *next;
108         char *name; /* What name got this module */
109
110         NTSTATUS (*auth)(void *my_private_data, 
111                          const auth_usersupplied_info *user_info, 
112                          const struct authsupplied_info *auth_info,
113                          auth_serversupplied_info **server_info);
114
115         DATA_BLOB (*get_chal)(void **my_private_data, const struct authsupplied_info *auth_info);
116         
117         /* Used to keep tabs on things like the cli for SMB server authentication */
118         void *private_data;
119         
120         /* Function to clean up the above arbitary structure */
121         void (*free_private_data)(void **private_data);
122
123         /* Function to send a keepalive message on the above structure */
124         void (*send_keepalive)(void **private_data);
125
126 } auth_methods;
127
128 typedef struct auth_init_function {
129         char *name;
130         /* Function to create a member of the authmethods list */
131         BOOL (*init)(struct auth_methods **auth_method);
132 } auth_init_function;
133
134
135 #endif /* _SMBAUTH_H_ */