Blame nss/nsswitch.h

Packit Service 82fcde
/* Copyright (C) 1996-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#ifndef _NSSWITCH_H
Packit Service 82fcde
#define _NSSWITCH_H	1
Packit Service 82fcde
Packit Service 82fcde
/* This is an *internal* header.  */
Packit Service 82fcde
Packit Service 82fcde
#include <arpa/nameser.h>
Packit Service 82fcde
#include <netinet/in.h>
Packit Service 82fcde
#include <nss.h>
Packit Service 82fcde
#include <resolv.h>
Packit Service 82fcde
#include <search.h>
Packit Service 82fcde
#include <dlfcn.h>
Packit Service 82fcde
#include <stdbool.h>
Packit Service 82fcde
Packit Service 82fcde
/* Actions performed after lookup finished.  */
Packit Service 82fcde
typedef enum
Packit Service 82fcde
{
Packit Service 82fcde
  NSS_ACTION_CONTINUE,
Packit Service 82fcde
  NSS_ACTION_RETURN,
Packit Service 82fcde
  NSS_ACTION_MERGE
Packit Service 82fcde
} lookup_actions;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
typedef struct service_library
Packit Service 82fcde
{
Packit Service 82fcde
  /* Name of service (`files', `dns', `nis', ...).  */
Packit Service 82fcde
  const char *name;
Packit Service 82fcde
  /* Pointer to the loaded shared library.  */
Packit Service 82fcde
  void *lib_handle;
Packit Service 82fcde
  /* And the link to the next entry.  */
Packit Service 82fcde
  struct service_library *next;
Packit Service 82fcde
} service_library;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* For mapping a function name to a function pointer.  It is known in
Packit Service 82fcde
   nsswitch.c:nss_lookup_function that a string pointer for the lookup key
Packit Service 82fcde
   is the first member.  */
Packit Service 82fcde
typedef struct
Packit Service 82fcde
{
Packit Service 82fcde
  const char *fct_name;
Packit Service 82fcde
  void *fct_ptr;
Packit Service 82fcde
} known_function;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
typedef struct service_user
Packit Service 82fcde
{
Packit Service 82fcde
  /* And the link to the next entry.  */
Packit Service 82fcde
  struct service_user *next;
Packit Service 82fcde
  /* Action according to result.  */
Packit Service 82fcde
  lookup_actions actions[5];
Packit Service 82fcde
  /* Link to the underlying library object.  */
Packit Service 82fcde
  service_library *library;
Packit Service 82fcde
  /* Collection of known functions.  */
Packit Service 82fcde
  void *known;
Packit Service 82fcde
  /* Name of the service (`files', `dns', `nis', ...).  */
Packit Service 82fcde
  char name[0];
Packit Service 82fcde
} service_user;
Packit Service 82fcde
Packit Service 82fcde
/* To access the action based on the status value use this macro.  */
Packit Service 82fcde
#define nss_next_action(ni, status) ((ni)->actions[2 + status])
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
typedef struct name_database_entry
Packit Service 82fcde
{
Packit Service 82fcde
  /* And the link to the next entry.  */
Packit Service 82fcde
  struct name_database_entry *next;
Packit Service 82fcde
  /* List of service to be used.  */
Packit Service 82fcde
  service_user *service;
Packit Service 82fcde
  /* Name of the database.  */
Packit Service 82fcde
  char name[0];
Packit Service 82fcde
} name_database_entry;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
typedef struct name_database
Packit Service 82fcde
{
Packit Service 82fcde
  /* List of all known databases.  */
Packit Service 82fcde
  name_database_entry *entry;
Packit Service 82fcde
  /* List of libraries with service implementation.  */
Packit Service 82fcde
  service_library *library;
Packit Service 82fcde
} name_database;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef USE_NSCD
Packit Service 82fcde
/* Indices into DATABASES in nsswitch.c and __NSS_DATABASE_CUSTOM.  */
Packit Service 82fcde
enum
Packit Service 82fcde
  {
Packit Service 82fcde
# define DEFINE_DATABASE(arg) NSS_DBSIDX_##arg,
Packit Service 82fcde
# include "databases.def"
Packit Service 82fcde
# undef DEFINE_DATABASE
Packit Service 82fcde
    NSS_DBSIDX_max
Packit Service 82fcde
  };
Packit Service 82fcde
Packit Service 82fcde
/* Flags whether custom rules for database is set.  */
Packit Service 82fcde
extern bool __nss_database_custom[NSS_DBSIDX_max] attribute_hidden;
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Warning for NSS functions, which don't require dlopen if glibc
Packit Service 82fcde
   was built with --enable-static-nss.  */
Packit Service 82fcde
#ifdef DO_STATIC_NSS
Packit Service 82fcde
# define nss_interface_function(name)
Packit Service 82fcde
#else
Packit Service 82fcde
# define nss_interface_function(name) static_link_warning (name)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Interface functions for NSS.  */
Packit Service 82fcde
Packit Service 82fcde
/* Get the data structure representing the specified database.
Packit Service 82fcde
   If there is no configuration for this database in the file,
Packit Service 82fcde
   parse a service list from DEFCONFIG and use that.  More
Packit Service 82fcde
   than one function can use the database.  */
Packit Service 1c5418
extern int __nss_database_lookup (const char *database,
Packit Service 1c5418
				  const char *alternative_name,
Packit Service 1c5418
				  const char *defconfig, service_user **ni);
Packit Service 1c5418
libc_hidden_proto (__nss_database_lookup)
Packit Service 82fcde
Packit Service 82fcde
/* Put first function with name FCT_NAME for SERVICE in FCTP.  The
Packit Service 82fcde
   position is remembered in NI.  The function returns a value < 0 if
Packit Service 82fcde
   an error occurred or no such function exists.  */
Packit Service 82fcde
extern int __nss_lookup (service_user **ni, const char *fct_name,
Packit Service 82fcde
			 const char *fct2_name, void **fctp);
Packit Service 82fcde
libc_hidden_proto (__nss_lookup)
Packit Service 82fcde
Packit Service 82fcde
/* Determine the next step in the lookup process according to the
Packit Service 82fcde
   result STATUS of the call to the last function returned by
Packit Service 82fcde
   `__nss_lookup' or `__nss_next'.  NI specifies the last function
Packit Service 82fcde
   examined.  The function return a value > 0 if the process should
Packit Service 82fcde
   stop with the last result of the last function call to be the
Packit Service 82fcde
   result of the entire lookup.  The returned value is 0 if there is
Packit Service 82fcde
   another function to use and < 0 if an error occurred.
Packit Service 82fcde
Packit Service 82fcde
   If ALL_VALUES is nonzero, the return value will not be > 0 as long as
Packit Service 82fcde
   there is a possibility the lookup process can ever use following
Packit Service 82fcde
   services.  In other words, only if all four lookup results have
Packit Service 82fcde
   the action RETURN associated the lookup process stops before the
Packit Service 82fcde
   natural end.  */
Packit Service 82fcde
extern int __nss_next2 (service_user **ni, const char *fct_name,
Packit Service 82fcde
			const char *fct2_name, void **fctp, int status,
Packit Service 82fcde
			int all_values) attribute_hidden;
Packit Service 82fcde
libc_hidden_proto (__nss_next2)
Packit Service 82fcde
extern int __nss_next (service_user **ni, const char *fct_name, void **fctp,
Packit Service 82fcde
		       int status, int all_values);
Packit Service 82fcde
Packit Service 82fcde
/* Search for the service described in NI for a function named FCT_NAME
Packit Service 82fcde
   and return a pointer to this function if successful.  */
Packit Service 82fcde
extern void *__nss_lookup_function (service_user *ni, const char *fct_name);
Packit Service 82fcde
libc_hidden_proto (__nss_lookup_function)
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Called by NSCD to disable recursive calls and enable special handling
Packit Service 82fcde
   when used in nscd.  */
Packit Service 82fcde
struct traced_file;
Packit Service 82fcde
extern void __nss_disable_nscd (void (*) (size_t, struct traced_file *));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
typedef int (*db_lookup_function) (service_user **, const char *, const char *,
Packit Service 82fcde
				   void **);
Packit Service 82fcde
typedef enum nss_status (*setent_function) (int);
Packit Service 82fcde
typedef enum nss_status (*endent_function) (void);
Packit Service 82fcde
typedef enum nss_status (*getent_function) (void *, char *, size_t,
Packit Service 82fcde
					    int *, int *);
Packit Service 82fcde
typedef int (*getent_r_function) (void *, char *, size_t,
Packit Service 82fcde
				  void **result, int *);
Packit Service 82fcde
Packit Service 82fcde
extern void __nss_setent (const char *func_name,
Packit Service 82fcde
			  db_lookup_function lookup_fct,
Packit Service 82fcde
			  service_user **nip, service_user **startp,
Packit Service 82fcde
			  service_user **last_nip, int stayon,
Packit Service 82fcde
			  int *stayon_tmp, int res)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
extern void __nss_endent (const char *func_name,
Packit Service 82fcde
			  db_lookup_function lookup_fct,
Packit Service 82fcde
			  service_user **nip, service_user **startp,
Packit Service 82fcde
			  service_user **last_nip, int res)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
extern int __nss_getent_r (const char *getent_func_name,
Packit Service 82fcde
			   const char *setent_func_name,
Packit Service 82fcde
			   db_lookup_function lookup_fct,
Packit Service 82fcde
			   service_user **nip, service_user **startp,
Packit Service 82fcde
			   service_user **last_nip, int *stayon_tmp,
Packit Service 82fcde
			   int res,
Packit Service 82fcde
			   void *resbuf, char *buffer, size_t buflen,
Packit Service 82fcde
			   void **result, int *h_errnop)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
extern void *__nss_getent (getent_r_function func,
Packit Service 82fcde
			   void **resbuf, char **buffer, size_t buflen,
Packit Service 82fcde
			   size_t *buffer_size, int *h_errnop)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
struct resolv_context;
Packit Service 82fcde
struct hostent;
Packit Service 82fcde
extern int __nss_hostname_digits_dots_context (struct resolv_context *,
Packit Service 82fcde
					       const char *name,
Packit Service 82fcde
					       struct hostent *resbuf,
Packit Service 82fcde
					       char **buffer,
Packit Service 82fcde
					       size_t *buffer_size,
Packit Service 82fcde
					       size_t buflen,
Packit Service 82fcde
					       struct hostent **result,
Packit Service 82fcde
					       enum nss_status *status, int af,
Packit Service 82fcde
					       int *h_errnop) attribute_hidden;
Packit Service 82fcde
extern int __nss_hostname_digits_dots (const char *name,
Packit Service 82fcde
				       struct hostent *resbuf, char **buffer,
Packit Service 82fcde
				       size_t *buffer_size, size_t buflen,
Packit Service 82fcde
				       struct hostent **result,
Packit Service 82fcde
				       enum nss_status *status, int af,
Packit Service 82fcde
				       int *h_errnop);
Packit Service 82fcde
libc_hidden_proto (__nss_hostname_digits_dots)
Packit Service 82fcde
Packit Service 82fcde
/* Maximum number of aliases we allow.  */
Packit Service 82fcde
#define MAX_NR_ALIASES  48
Packit Service 82fcde
#define MAX_NR_ADDRS    48
Packit Service 82fcde
Packit Service 82fcde
/* Prototypes for __nss_*_lookup2 functions.  */
Packit Service 82fcde
#define DEFINE_DATABASE(arg)						      \
Packit Service 82fcde
  extern service_user *__nss_##arg##_database attribute_hidden;		      \
Packit Service 82fcde
  int __nss_##arg##_lookup2 (service_user **, const char *,		      \
Packit Service 82fcde
			     const char *, void **);			      \
Packit Service 82fcde
  libc_hidden_proto (__nss_##arg##_lookup2)
Packit Service 82fcde
#include "databases.def"
Packit Service 82fcde
#undef DEFINE_DATABASE
Packit Service 82fcde
Packit Service 82fcde
#endif	/* nsswitch.h */