auth-master.h revision 3b22894b8805b186c73d8b754001e8d7e944be85
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef AUTH_MASTER_H
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define AUTH_MASTER_H
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner#include "network.h"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinenum auth_master_flags {
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin /* Enable logging debug information */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin AUTH_MASTER_FLAG_DEBUG = 0x01,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* Don't disconnect from auth socket when idling */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin AUTH_MASTER_FLAG_NO_IDLE_TIMEOUT = 0x02
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct auth_user_info {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin const char *service;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct ip_addr local_ip, remote_ip;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned int local_port, remote_port;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct auth_user_reply {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin uid_t uid;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin gid_t gid;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin const char *home, *chroot;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ARRAY_TYPE(const_string) extra_fields;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct auth_master_connection *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinauth_master_init(const char *auth_socket_path, enum auth_master_flags flags);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinvoid auth_master_deinit(struct auth_master_connection **conn);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Do a USER lookup. Returns -1 = error, 0 = user not found, 1 = ok.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin When returning -1 and fields[0] isn't NULL, it contains an error message
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin that should be shown to user. */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinint auth_master_user_lookup(struct auth_master_connection *conn,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin const char *user, const struct auth_user_info *info,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin pool_t pool, const char **username_r,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin const char *const **fields_r);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Do a PASS lookup (the actual password isn't returned). */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinint auth_master_pass_lookup(struct auth_master_connection *conn,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin const char *user, const struct auth_user_info *info,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin pool_t pool, const char *const **fields_r);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Parse userdb extra fields into auth_user_reply structure. */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinvoid auth_user_fields_parse(const char *const *fields, pool_t pool,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct auth_user_reply *reply_r);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Iterate through all users. */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct auth_master_user_list_ctx *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinauth_master_user_list_init(struct auth_master_connection *conn);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinconst char *auth_master_user_list_next(struct auth_master_user_list_ctx *ctx);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunsigned int auth_master_user_list_count(struct auth_master_user_list_ctx *ctx);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Returns -1 if anything failed, 0 if ok */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinint auth_master_user_list_deinit(struct auth_master_user_list_ctx **ctx);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin