passdb.h revision 1e21e6be70994b1aa9e52ca0e2f51afefca6d0df
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen#ifndef __PASSDB_H
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#define __PASSDB_H
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen#define IS_VALID_PASSWD(pass) \
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen ((pass)[0] != '\0' && (pass)[0] != '*' && (pass)[0] != '!')
993e6c2caaae971dd3c34913a42d854e3b623261Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct auth_request;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenenum passdb_credentials {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen _PASSDB_CREDENTIALS_INTERNAL = -1,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen PASSDB_CREDENTIALS_PLAINTEXT,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen PASSDB_CREDENTIALS_CRYPT,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen PASSDB_CREDENTIALS_CRAM_MD5,
7888a9d2008eab9985096c46e1da9ee985c22a2aTimo Sirainen PASSDB_CREDENTIALS_DIGEST_MD5,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen PASSDB_CREDENTIALS_LANMAN,
a24f6b02ed8d0dde933a715be1c86f01977bf610Timo Sirainen PASSDB_CREDENTIALS_NTLM,
a24f6b02ed8d0dde933a715be1c86f01977bf610Timo Sirainen PASSDB_CREDENTIALS_RPA
213b139965e8bde6c8aff02ffd9fd39a74c887a9Timo Sirainen};
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen
a24f6b02ed8d0dde933a715be1c86f01977bf610Timo Sirainenenum passdb_result {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen PASSDB_RESULT_USER_UNKNOWN = -1,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen PASSDB_RESULT_USER_DISABLED = -2,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen PASSDB_RESULT_INTERNAL_FAILURE = -3,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen PASSDB_RESULT_SCHEME_NOT_AVAILABLE = -4,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen PASSDB_RESULT_PASSWORD_MISMATCH = 0,
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen PASSDB_RESULT_OK = 1,
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen};
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainentypedef void verify_plain_callback_t(enum passdb_result result,
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen struct auth_request *request);
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainentypedef void lookup_credentials_callback_t(enum passdb_result result,
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen const char *credentials,
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen struct auth_request *request);
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainenstruct passdb_module {
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen const char *name;
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen void (*preinit)(const char *args);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen void (*init)(const char *args);
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen void (*deinit)(void);
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen /* Check if plaintext password matches */
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen void (*verify_plain)(struct auth_request *request, const char *password,
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen verify_plain_callback_t *callback);
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen /* Return authentication credentials. Type is authentication mechanism
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen specific value that is requested. */
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen void (*lookup_credentials)(struct auth_request *request,
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen enum passdb_credentials credentials,
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen lookup_credentials_callback_t *callback);
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen};
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen
a24f6b02ed8d0dde933a715be1c86f01977bf610Timo Sirainenvoid passdb_handle_credentials(enum passdb_result result,
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen enum passdb_credentials credentials,
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen const char *password, const char *scheme,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen lookup_credentials_callback_t *callback,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen struct auth_request *auth_request);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
ae8817f05005f57bba32479a610b52d083e2b6ebTimo Sirainenvoid passdb_preinit(struct auth *auth, const char *data);
ae8817f05005f57bba32479a610b52d083e2b6ebTimo Sirainenvoid passdb_init(struct auth *auth);
ae8817f05005f57bba32479a610b52d083e2b6ebTimo Sirainenvoid passdb_deinit(struct auth *auth);
ae8817f05005f57bba32479a610b52d083e2b6ebTimo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#include "auth-request.h"
993e6c2caaae971dd3c34913a42d854e3b623261Timo Sirainen
1cf72a848805fcf014b01c9d3665b6a157846a21Timo Sirainen#endif
1cf72a848805fcf014b01c9d3665b6a157846a21Timo Sirainen