123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /*-------------------------------------------------------------------------
- *
- * hba.h
- * Interface to hba.c
- *
- *
- * src/include/libpq/hba.h
- *
- *-------------------------------------------------------------------------
- */
- #ifndef HBA_H
- #define HBA_H
- #include "libpq/pqcomm.h" /* pgrminclude ignore */ /* needed for NetBSD */
- #include "nodes/pg_list.h"
- #include "regex/regex.h"
- /*
- * The following enum represents the authentication methods that
- * are supported by PostgreSQL.
- *
- * Note: keep this in sync with the UserAuthName array in hba.c.
- */
- typedef enum UserAuth
- {
- uaReject,
- uaImplicitReject, /* Not a user-visible option */
- uaTrust,
- uaIdent,
- uaPassword,
- uaMD5,
- uaSCRAM,
- uaGSS,
- uaSSPI,
- uaPAM,
- uaBSD,
- uaLDAP,
- uaCert,
- uaRADIUS,
- uaPeer
- #define USER_AUTH_LAST uaPeer /* Must be last value of this enum */
- } UserAuth;
- /*
- * Data structures representing pg_hba.conf entries
- */
- typedef enum IPCompareMethod
- {
- ipCmpMask,
- ipCmpSameHost,
- ipCmpSameNet,
- ipCmpAll
- } IPCompareMethod;
- typedef enum ConnType
- {
- ctLocal,
- ctHost,
- ctHostSSL,
- ctHostNoSSL,
- ctHostGSS,
- ctHostNoGSS,
- } ConnType;
- typedef enum ClientCertMode
- {
- clientCertOff,
- clientCertCA,
- clientCertFull
- } ClientCertMode;
- typedef enum ClientCertName
- {
- clientCertCN,
- clientCertDN
- } ClientCertName;
- typedef struct HbaLine
- {
- int linenumber;
- char *rawline;
- ConnType conntype;
- List *databases;
- List *roles;
- struct sockaddr_storage addr;
- int addrlen; /* zero if we don't have a valid addr */
- struct sockaddr_storage mask;
- int masklen; /* zero if we don't have a valid mask */
- IPCompareMethod ip_cmp_method;
- char *hostname;
- UserAuth auth_method;
- char *usermap;
- char *pamservice;
- bool pam_use_hostname;
- bool ldaptls;
- char *ldapscheme;
- char *ldapserver;
- int ldapport;
- char *ldapbinddn;
- char *ldapbindpasswd;
- char *ldapsearchattribute;
- char *ldapsearchfilter;
- char *ldapbasedn;
- int ldapscope;
- char *ldapprefix;
- char *ldapsuffix;
- ClientCertMode clientcert;
- ClientCertName clientcertname;
- char *krb_realm;
- bool include_realm;
- bool compat_realm;
- bool upn_username;
- List *radiusservers;
- char *radiusservers_s;
- List *radiussecrets;
- char *radiussecrets_s;
- List *radiusidentifiers;
- char *radiusidentifiers_s;
- List *radiusports;
- char *radiusports_s;
- } HbaLine;
- typedef struct IdentLine
- {
- int linenumber;
- char *usermap;
- char *ident_user;
- char *pg_role;
- regex_t re;
- } IdentLine;
- /*
- * A single string token lexed from an authentication configuration file
- * (pg_ident.conf or pg_hba.conf), together with whether the token has
- * been quoted.
- */
- typedef struct AuthToken
- {
- char *string;
- bool quoted;
- } AuthToken;
- /*
- * TokenizedAuthLine represents one line lexed from an authentication
- * configuration file. Each item in the "fields" list is a sub-list of
- * AuthTokens. We don't emit a TokenizedAuthLine for empty or all-comment
- * lines, so "fields" is never NIL (nor are any of its sub-lists).
- *
- * Exception: if an error occurs during tokenization, we might have
- * fields == NIL, in which case err_msg != NULL.
- */
- typedef struct TokenizedAuthLine
- {
- List *fields; /* List of lists of AuthTokens */
- int line_num; /* Line number */
- char *raw_line; /* Raw line text */
- char *err_msg; /* Error message if any */
- } TokenizedAuthLine;
- /* kluge to avoid including libpq/libpq-be.h here */
- typedef struct Port hbaPort;
- extern bool load_hba(void);
- extern bool load_ident(void);
- extern const char *hba_authname(UserAuth auth_method);
- extern void hba_getauthmethod(hbaPort *port);
- extern int check_usermap(const char *usermap_name,
- const char *pg_role, const char *auth_user,
- bool case_insensitive);
- extern HbaLine *parse_hba_line(TokenizedAuthLine *tok_line, int elevel);
- extern IdentLine *parse_ident_line(TokenizedAuthLine *tok_line, int elevel);
- extern bool pg_isblank(const char c);
- extern MemoryContext tokenize_auth_file(const char *filename, FILE *file,
- List **tok_lines, int elevel);
- #endif /* HBA_H */
|