X-Git-Url: http://git.samba.org/samba.git/?a=blobdiff_plain;f=source4%2Fauth%2Fauth.h;h=f6d739325da54f2901924912c76aa32f405fefd6;hb=7b8fcacda29954c585746c255598b9b180e56e1f;hp=8dce7bbd5b02e353db8f735a2c5ee21d0bb5659a;hpb=0479a2f1cbae51fcd8dbdc3c148c808421fb4d25;p=kai%2Fsamba-autobuild%2F.git diff --git a/source4/auth/auth.h b/source4/auth/auth.h index 8dce7bbd5b0..f6d739325da 100644 --- a/source4/auth/auth.h +++ b/source4/auth/auth.h @@ -21,9 +21,14 @@ #ifndef _SAMBA_AUTH_H #define _SAMBA_AUTH_H +#include "librpc/gen_ndr/ndr_krb5pac.h" + +extern const char *user_attrs[]; + union netr_Validation; struct netr_SamBaseInfo; struct netr_SamInfo3; +struct loadparm_context; /* modules can use the following to determine if the interface has changed * please increment the version number after each interface change @@ -54,7 +59,7 @@ struct auth_usersupplied_info uint32_t logon_parameters; - BOOL mapped_state; + bool mapped_state; /* the values the client gives us */ struct { const char *account_name; @@ -111,18 +116,14 @@ struct auth_serversupplied_info uint32_t acct_flags; - BOOL authenticated; -}; + bool authenticated; -struct auth_session_info { - struct security_token *security_token; - struct auth_serversupplied_info *server_info; - DATA_BLOB session_key; - struct cli_credentials *credentials; + struct PAC_SIGNATURE_DATA pac_srv_sig, pac_kdc_sig; }; struct auth_method_context; struct auth_check_password_request; +struct auth_context; struct auth_operations { const char *name; @@ -144,6 +145,12 @@ struct auth_operations { NTSTATUS (*check_password)(struct auth_method_context *ctx, TALLOC_CTX *mem_ctx, const struct auth_usersupplied_info *user_info, struct auth_serversupplied_info **server_info); + + /* Lookup a 'server info' return based only on the principal */ + NTSTATUS (*get_server_info_principal)(TALLOC_CTX *mem_ctx, + struct auth_context *auth_context, + const char *principal, + struct auth_serversupplied_info **server_info); }; struct auth_method_context { @@ -159,7 +166,7 @@ struct auth_context { /* Who set this up in the first place? */ const char *set_by; - BOOL may_be_modified; + bool may_be_modified; DATA_BLOB data; } challenge; @@ -168,10 +175,30 @@ struct auth_context { struct auth_method_context *methods; /* the event context to use for calls that can block */ - struct event_context *event_ctx; + struct tevent_context *event_ctx; /* the messaging context which can be used by backends */ struct messaging_context *msg_ctx; + + /* loadparm context */ + struct loadparm_context *lp_ctx; + + NTSTATUS (*check_password)(struct auth_context *auth_ctx, + TALLOC_CTX *mem_ctx, + const struct auth_usersupplied_info *user_info, + struct auth_serversupplied_info **server_info); + + NTSTATUS (*get_challenge)(struct auth_context *auth_ctx, const uint8_t **_chal); + + bool (*challenge_may_be_modified)(struct auth_context *auth_ctx); + + NTSTATUS (*set_challenge)(struct auth_context *auth_ctx, const uint8_t chal[8], const char *set_by); + + NTSTATUS (*get_server_info_principal)(TALLOC_CTX *mem_ctx, + struct auth_context *auth_context, + const char *principal, + struct auth_serversupplied_info **server_info); + }; /* this structure is used by backends to determine the size of some critical types */ @@ -189,6 +216,78 @@ struct auth_critical_sizes { const struct auth_usersupplied_info *user_info_in, const struct auth_usersupplied_info **user_info_encrypted); -#include "auth/auth_proto.h" +#include "auth/session.h" +#include "auth/system_session_proto.h" + +struct ldb_message; +struct ldb_context; +struct ldb_dn; +struct gensec_security; + +NTSTATUS auth_get_challenge(struct auth_context *auth_ctx, const uint8_t **_chal); +NTSTATUS authsam_account_ok(TALLOC_CTX *mem_ctx, + struct ldb_context *sam_ctx, + uint32_t logon_parameters, + struct ldb_dn *domain_dn, + struct ldb_message *msg, + const char *logon_workstation, + const char *name_for_logs, + bool allow_domain_trust); +struct auth_session_info *system_session(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx); +NTSTATUS authsam_make_server_info(TALLOC_CTX *mem_ctx, struct ldb_context *sam_ctx, + const char *netbios_name, + const char *domain_name, + struct ldb_dn *domain_dn, + struct ldb_message *msg, + DATA_BLOB user_sess_key, DATA_BLOB lm_sess_key, + struct auth_serversupplied_info **_server_info); +NTSTATUS auth_system_session_info(TALLOC_CTX *parent_ctx, + struct loadparm_context *lp_ctx, + struct auth_session_info **_session_info) ; +NTSTATUS auth_nt_status_squash(NTSTATUS nt_status); + +NTSTATUS auth_context_create_methods(TALLOC_CTX *mem_ctx, const char **methods, + struct tevent_context *ev, + struct messaging_context *msg, + struct loadparm_context *lp_ctx, + struct auth_context **auth_ctx); + +NTSTATUS auth_context_create(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct messaging_context *msg, + struct loadparm_context *lp_ctx, + struct auth_context **auth_ctx); + +NTSTATUS auth_check_password(struct auth_context *auth_ctx, + TALLOC_CTX *mem_ctx, + const struct auth_usersupplied_info *user_info, + struct auth_serversupplied_info **server_info); +NTSTATUS auth_init(void); +NTSTATUS auth_register(const struct auth_operations *ops); +NTSTATUS authenticate_username_pw(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct messaging_context *msg, + struct loadparm_context *lp_ctx, + const char *nt4_domain, + const char *nt4_username, + const char *password, + struct auth_session_info **session_info); +NTSTATUS auth_check_password_recv(struct auth_check_password_request *req, + TALLOC_CTX *mem_ctx, + struct auth_serversupplied_info **server_info); + +void auth_check_password_send(struct auth_context *auth_ctx, + const struct auth_usersupplied_info *user_info, + void (*callback)(struct auth_check_password_request *req, void *private_data), + void *private_data); +NTSTATUS auth_context_set_challenge(struct auth_context *auth_ctx, const uint8_t chal[8], const char *set_by); + +NTSTATUS samba_server_gensec_start(TALLOC_CTX *mem_ctx, + struct tevent_context *event_ctx, + struct messaging_context *msg_ctx, + struct loadparm_context *lp_ctx, + struct cli_credentials *server_credentials, + const char *target_service, + struct gensec_security **gensec_context); #endif /* _SMBAUTH_H_ */