passdb.h revision b321df9603081896b70ec44635af96d674a9839a
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen#ifndef __PASSDB_H
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#define __PASSDB_H
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#define IS_VALID_PASSWD(pass) \
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen ((pass)[0] != '\0' && (pass)[0] != '*' && (pass)[0] != '!')
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct auth_request;
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenenum passdb_credentials {
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen _PASSDB_CREDENTIALS_INTERNAL = -1,
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen PASSDB_CREDENTIALS_PLAINTEXT,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen PASSDB_CREDENTIALS_CRYPT,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen PASSDB_CREDENTIALS_CRAM_MD5,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen PASSDB_CREDENTIALS_DIGEST_MD5,
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen PASSDB_CREDENTIALS_LANMAN,
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen PASSDB_CREDENTIALS_NTLM,
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen PASSDB_CREDENTIALS_RPA
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen};
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenenum passdb_result {
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen PASSDB_RESULT_USER_UNKNOWN = -1,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen PASSDB_RESULT_USER_DISABLED = -2,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen PASSDB_RESULT_INTERNAL_FAILURE = -3,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen PASSDB_RESULT_SCHEME_NOT_AVAILABLE = -4,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen PASSDB_RESULT_PASSWORD_MISMATCH = 0,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen PASSDB_RESULT_OK = 1,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen};
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainentypedef void verify_plain_callback_t(enum passdb_result result,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen struct auth_request *request);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainentypedef void lookup_credentials_callback_t(enum passdb_result result,
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen const char *password,
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen struct auth_request *request);
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainenstruct passdb_module {
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen /* The caching key for this module, or NULL if caching isn't wanted. */
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const char *cache_key;
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen /* Default password scheme for this module.
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen If cache_key is set, must not be NULL. */
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen const char *default_pass_scheme;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen /* If blocking is set to TRUE, use child processes to access
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen this passdb. */
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen int blocking;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const struct passdb_module_interface *iface;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen};
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct passdb_module_interface {
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const char *name;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen struct passdb_module *
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen (*preinit)(struct auth_passdb *auth_passdb, const char *args);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen void (*init)(struct passdb_module *module, const char *args);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen void (*deinit)(struct passdb_module *module);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen /* Check if plaintext password matches */
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen void (*verify_plain)(struct auth_request *request, const char *password,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen verify_plain_callback_t *callback);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen /* Return authentication credentials, set in
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen auth_request->credentials. */
3b49aee9ced3b0370a3be396aca53acd5f21418cTimo Sirainen void (*lookup_credentials)(struct auth_request *request,
3b49aee9ced3b0370a3be396aca53acd5f21418cTimo Sirainen lookup_credentials_callback_t *callback);
3b49aee9ced3b0370a3be396aca53acd5f21418cTimo Sirainen};
3b49aee9ced3b0370a3be396aca53acd5f21418cTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenconst char *
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenpassdb_get_credentials(struct auth_request *auth_request,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const char *password, const char *scheme);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenvoid passdb_handle_credentials(enum passdb_result result,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const char *password, const char *scheme,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen lookup_credentials_callback_t *callback,
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen struct auth_request *auth_request);
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainenconst char *passdb_credentials_to_str(enum passdb_credentials credentials);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct auth_passdb *passdb_preinit(struct auth *auth, const char *driver,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen const char *args);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenvoid passdb_init(struct auth_passdb *passdb);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenvoid passdb_deinit(struct auth_passdb *passdb);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#include "auth-request.h"
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen#endif
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen