mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Mapping NSS services to action lists.
 | 
						|
   Copyright (C) 2020-2025 Free Software Foundation, Inc.
 | 
						|
   This file is part of the GNU C Library.
 | 
						|
 | 
						|
   The GNU C Library is free software; you can redistribute it and/or
 | 
						|
   modify it under the terms of the GNU Lesser General Public
 | 
						|
   License as published by the Free Software Foundation; either
 | 
						|
   version 2.1 of the License, or (at your option) any later version.
 | 
						|
 | 
						|
   The GNU C Library is distributed in the hope that it will be useful,
 | 
						|
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
   Lesser General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU Lesser General Public
 | 
						|
   License along with the GNU C Library; if not, see
 | 
						|
   <https://www.gnu.org/licenses/>.  */
 | 
						|
 | 
						|
#ifndef _NSS_DATABASE_H
 | 
						|
#define _NSS_DATABASE_H
 | 
						|
 | 
						|
#include <file_change_detection.h>
 | 
						|
 | 
						|
/* Each "line" in nsswitch.conf maps a supported database (example:
 | 
						|
   passwd) to one or more name service providers (example: files dns).
 | 
						|
   Internally, each name service provider (example: dns) is a
 | 
						|
   dynamically loadable module (i.e. libnss_dns.so), managed by
 | 
						|
   nss_module.h.  The sequence of providers and rules (example: files
 | 
						|
   [SUCCESS=RETURN] dns) is mapped by nss_action.h to a cached entry
 | 
						|
   which encodes the sequence of modules and rules.  Keeping track of
 | 
						|
   all supported databases and their corresponding actions is done
 | 
						|
   here.
 | 
						|
 | 
						|
   The key entry is __nss_database_get, which provides a set of
 | 
						|
   actions which can be used with nss_lookup_function() and
 | 
						|
   nss_next().  Callers should assume that these functions are fast,
 | 
						|
   and should not cache the result longer than needed.  */
 | 
						|
 | 
						|
#include "nss_action.h"
 | 
						|
 | 
						|
/* The enumeration literal in enum nss_database for the database NAME
 | 
						|
   (e.g., nss_database_hosts for hosts).  */
 | 
						|
#define NSS_DATABASE_LITERAL(name) nss_database_##name
 | 
						|
 | 
						|
enum nss_database
 | 
						|
{
 | 
						|
#define DEFINE_DATABASE(name) NSS_DATABASE_LITERAL (name),
 | 
						|
#include "databases.def"
 | 
						|
#undef DEFINE_DATABASE
 | 
						|
 | 
						|
  /* Total number of databases.  */
 | 
						|
  NSS_DATABASE_COUNT
 | 
						|
};
 | 
						|
 | 
						|
/* Looks up the action list for DB and stores it in *ACTIONS.  Returns
 | 
						|
   true on success or false on failure.  Success can mean that
 | 
						|
   *ACTIONS is NULL.  */
 | 
						|
bool __nss_database_get (enum nss_database db, nss_action_list *actions);
 | 
						|
libc_hidden_proto (__nss_database_get)
 | 
						|
 | 
						|
/* Like __nss_database_get, but does not reload /etc/nsswitch.conf
 | 
						|
   from disk.  This assumes that there has been a previous successful
 | 
						|
   __nss_database_get call (which may not have returned any data).  */
 | 
						|
nss_action_list __nss_database_get_noreload (enum nss_database db)
 | 
						|
  attribute_hidden;
 | 
						|
 | 
						|
/* Internal type.  Exposed only for fork handling purposes.  */
 | 
						|
struct nss_database_data
 | 
						|
{
 | 
						|
  struct file_change_detection nsswitch_conf;
 | 
						|
  nss_action_list services[NSS_DATABASE_COUNT];
 | 
						|
  int reload_disabled;          /* Actually bool; int for atomic access.  */
 | 
						|
  bool initialized;
 | 
						|
};
 | 
						|
 | 
						|
/* Called by fork in the parent process, before forking.  */
 | 
						|
void __nss_database_fork_prepare_parent (struct nss_database_data *data)
 | 
						|
  attribute_hidden;
 | 
						|
 | 
						|
/* Called by fork in the new subprocess, after forking.  */
 | 
						|
void __nss_database_fork_subprocess (struct nss_database_data *data)
 | 
						|
  attribute_hidden;
 | 
						|
 | 
						|
#endif /* _NSS_DATABASE_H */
 |