00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _WINBINDD_H
00026 #define _WINBINDD_H
00027
00028 #include "nterr.h"
00029
00030 #include "winbindd_nss.h"
00031
00032 #ifdef HAVE_LIBNSCD
00033 #include "libnscd.h"
00034 #endif
00035
00036 #ifdef HAVE_SYS_MMAN_H
00037 #include <sys/mman.h>
00038 #endif
00039
00040 #undef DBGC_CLASS
00041 #define DBGC_CLASS DBGC_WINBIND
00042
00043 #define WB_REPLACE_CHAR '_'
00044
00045
00046 #define EVENT_FD_READ 1
00047 #define EVENT_FD_WRITE 2
00048
00049 struct fd_event {
00050 struct fd_event *next, *prev;
00051 int fd;
00052 int flags;
00053 void (*handler)(struct fd_event *fde, int flags);
00054 void *data;
00055 size_t length, done;
00056 void (*finished)(void *private_data, BOOL success);
00057 void *private_data;
00058 };
00059
00060 struct sid_ctr {
00061 DOM_SID *sid;
00062 BOOL finished;
00063 const char *domain;
00064 const char *name;
00065 enum lsa_SidType type;
00066 };
00067
00068 struct winbindd_cli_state {
00069 struct winbindd_cli_state *prev, *next;
00070 int sock;
00071 struct fd_event fd_event;
00072 pid_t pid;
00073 BOOL finished;
00074 BOOL write_extra_data;
00075 time_t last_access;
00076 BOOL privileged;
00077
00078 TALLOC_CTX *mem_ctx;
00079 struct winbindd_request request;
00080 struct winbindd_response response;
00081 BOOL getpwent_initialized;
00082
00083 BOOL getgrent_initialized;
00084
00085 struct getent_state *getpwent_state;
00086 struct getent_state *getgrent_state;
00087 };
00088
00089
00090
00091 struct getent_state {
00092 struct getent_state *prev, *next;
00093 void *sam_entries;
00094 uint32 sam_entry_index, num_sam_entries;
00095 BOOL got_sam_entries;
00096 fstring domain_name;
00097 };
00098
00099
00100
00101 struct getpwent_user {
00102 fstring name;
00103 fstring gecos;
00104 fstring homedir;
00105 fstring shell;
00106 DOM_SID user_sid;
00107 DOM_SID group_sid;
00108 };
00109
00110
00111
00112 typedef struct {
00113 char *acct_name;
00114 char *full_name;
00115 char *homedir;
00116 char *shell;
00117 gid_t primary_gid;
00118
00119 DOM_SID user_sid;
00120 DOM_SID group_sid;
00121 } WINBIND_USERINFO;
00122
00123
00124
00125 struct winbindd_cm_conn {
00126 struct cli_state *cli;
00127
00128 struct rpc_pipe_client *samr_pipe;
00129 POLICY_HND sam_connect_handle, sam_domain_handle;
00130
00131 struct rpc_pipe_client *lsa_pipe;
00132 POLICY_HND lsa_policy;
00133
00134 struct rpc_pipe_client *netlogon_pipe;
00135 };
00136
00137 struct winbindd_async_request;
00138
00139
00140
00141 struct winbindd_child {
00142 struct winbindd_child *next, *prev;
00143
00144 pid_t pid;
00145 struct winbindd_domain *domain;
00146 pstring logfilename;
00147
00148 struct fd_event event;
00149 struct timed_event *lockout_policy_event;
00150 struct winbindd_async_request *requests;
00151 };
00152
00153
00154
00155 struct winbindd_domain {
00156 fstring name;
00157 fstring alt_name;
00158 fstring forest_name;
00159 DOM_SID sid;
00160 BOOL initialized;
00161 BOOL native_mode;
00162 BOOL active_directory;
00163 BOOL primary;
00164 BOOL internal;
00165 BOOL online;
00166 time_t startup_time;
00167 BOOL startup;
00168
00169
00170 struct winbindd_methods *methods;
00171
00172
00173
00174 struct winbindd_methods *backend;
00175
00176
00177
00178 void *private_data;
00179
00180
00181 fstring dcname;
00182 struct sockaddr_in dcaddr;
00183
00184
00185
00186 time_t last_seq_check;
00187 uint32 sequence_number;
00188 NTSTATUS last_status;
00189
00190
00191
00192 struct winbindd_cm_conn conn;
00193
00194
00195
00196 struct winbindd_child child;
00197
00198
00199
00200 uint32 check_online_timeout;
00201 struct timed_event *check_online_event;
00202
00203
00204
00205 struct winbindd_domain *prev, *next;
00206 };
00207
00208
00209
00210 struct winbindd_methods {
00211
00212
00213 BOOL consistent;
00214
00215
00216 NTSTATUS (*query_user_list)(struct winbindd_domain *domain,
00217 TALLOC_CTX *mem_ctx,
00218 uint32 *num_entries,
00219 WINBIND_USERINFO **info);
00220
00221
00222 NTSTATUS (*enum_dom_groups)(struct winbindd_domain *domain,
00223 TALLOC_CTX *mem_ctx,
00224 uint32 *num_entries,
00225 struct acct_info **info);
00226
00227
00228 NTSTATUS (*enum_local_groups)(struct winbindd_domain *domain,
00229 TALLOC_CTX *mem_ctx,
00230 uint32 *num_entries,
00231 struct acct_info **info);
00232
00233
00234 NTSTATUS (*name_to_sid)(struct winbindd_domain *domain,
00235 TALLOC_CTX *mem_ctx,
00236 const char *domain_name,
00237 const char *name,
00238 DOM_SID *sid,
00239 enum lsa_SidType *type);
00240
00241
00242 NTSTATUS (*sid_to_name)(struct winbindd_domain *domain,
00243 TALLOC_CTX *mem_ctx,
00244 const DOM_SID *sid,
00245 char **domain_name,
00246 char **name,
00247 enum lsa_SidType *type);
00248
00249 NTSTATUS (*rids_to_names)(struct winbindd_domain *domain,
00250 TALLOC_CTX *mem_ctx,
00251 const DOM_SID *domain_sid,
00252 uint32 *rids,
00253 size_t num_rids,
00254 char **domain_name,
00255 char ***names,
00256 enum lsa_SidType **types);
00257
00258
00259 NTSTATUS (*query_user)(struct winbindd_domain *domain,
00260 TALLOC_CTX *mem_ctx,
00261 const DOM_SID *user_sid,
00262 WINBIND_USERINFO *user_info);
00263
00264
00265
00266
00267 NTSTATUS (*lookup_usergroups)(struct winbindd_domain *domain,
00268 TALLOC_CTX *mem_ctx,
00269 const DOM_SID *user_sid,
00270 uint32 *num_groups, DOM_SID **user_gids);
00271
00272
00273
00274 NTSTATUS (*lookup_useraliases)(struct winbindd_domain *domain,
00275 TALLOC_CTX *mem_ctx,
00276 uint32 num_sids,
00277 const DOM_SID *sids,
00278 uint32 *num_aliases,
00279 uint32 **alias_rids);
00280
00281
00282 NTSTATUS (*lookup_groupmem)(struct winbindd_domain *domain,
00283 TALLOC_CTX *mem_ctx,
00284 const DOM_SID *group_sid,
00285 uint32 *num_names,
00286 DOM_SID **sid_mem, char ***names,
00287 uint32 **name_types);
00288
00289
00290 NTSTATUS (*sequence_number)(struct winbindd_domain *domain, uint32 *seq);
00291
00292
00293 NTSTATUS (*lockout_policy)(struct winbindd_domain *domain,
00294 TALLOC_CTX *mem_ctx,
00295 SAM_UNK_INFO_12 *lockout_policy);
00296
00297
00298 NTSTATUS (*password_policy)(struct winbindd_domain *domain,
00299 TALLOC_CTX *mem_ctx,
00300 SAM_UNK_INFO_1 *password_policy);
00301
00302
00303 NTSTATUS (*trusted_domains)(struct winbindd_domain *domain,
00304 TALLOC_CTX *mem_ctx,
00305 uint32 *num_domains,
00306 char ***names,
00307 char ***alt_names,
00308 DOM_SID **dom_sids);
00309 };
00310
00311
00312
00313 typedef struct {
00314 struct cli_state *cli;
00315 POLICY_HND pol;
00316 } CLI_POLICY_HND;
00317
00318
00319 struct winbindd_idmap_methods {
00320
00321 BOOL (*init)(void);
00322
00323 BOOL (*get_sid_from_uid)(uid_t uid, DOM_SID *sid);
00324 BOOL (*get_sid_from_gid)(gid_t gid, DOM_SID *sid);
00325
00326 BOOL (*get_uid_from_sid)(DOM_SID *sid, uid_t *uid);
00327 BOOL (*get_gid_from_sid)(DOM_SID *sid, gid_t *gid);
00328
00329
00330 BOOL (*close)(void);
00331
00332 void (*status)(void);
00333 };
00334
00335 #include "nsswitch/winbindd_proto.h"
00336
00337 #define WINBINDD_ESTABLISH_LOOP 30
00338 #define WINBINDD_RESCAN_FREQ 300
00339 #define WINBINDD_PAM_AUTH_KRB5_RENEW_TIME 2592000
00340 #define DOM_SEQUENCE_NONE ((uint32)-1)
00341
00342 #endif