mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-28 23:34:53 +03:00 
			
		
		
		
	This prevents injection of ':' and '\n' into output functions which use the NSS files database syntax. Critical fields (user/group names and file system paths) are checked strictly. For backwards compatibility, the GECOS field is rewritten instead. The getent program is adjusted to use the put*ent functions in libc, instead of local copies. This changes the behavior of getent if user names start with '-' or '+'.
		
			
				
	
	
		
			58 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _PWD_H
 | |
| #include <pwd/pwd.h>
 | |
| 
 | |
| #ifndef _ISOMAC
 | |
| /* Now define the internal interfaces.  */
 | |
| extern int __getpwent_r (struct passwd *__resultbuf, char *__buffer,
 | |
| 			 size_t __buflen, struct passwd **__result)
 | |
|      attribute_hidden;
 | |
| extern int __old_getpwent_r (struct passwd *__resultbuf, char *__buffer,
 | |
| 			     size_t __buflen, struct passwd **__result);
 | |
| extern int __getpwuid_r (__uid_t __uid, struct passwd *__resultbuf,
 | |
| 			 char *__buffer, size_t __buflen,
 | |
| 			 struct passwd **__result);
 | |
| extern int __old_getpwuid_r (__uid_t __uid, struct passwd *__resultbuf,
 | |
| 			     char *__buffer, size_t __buflen,
 | |
| 			     struct passwd **__result);
 | |
| extern int __getpwnam_r (const char *__name, struct passwd *__resultbuf,
 | |
| 			 char *__buffer, size_t __buflen,
 | |
| 			 struct passwd **__result);
 | |
| extern int __old_getpwnam_r (const char *__name, struct passwd *__resultbuf,
 | |
| 			     char *__buffer, size_t __buflen,
 | |
| 			     struct passwd **__result);
 | |
| extern int __fgetpwent_r (FILE * __stream, struct passwd *__resultbuf,
 | |
| 			  char *__buffer, size_t __buflen,
 | |
| 			  struct passwd **__result);
 | |
| 
 | |
| #include <nss.h>
 | |
| 
 | |
| struct parser_data;
 | |
| extern int _nss_files_parse_pwent (char *line, struct passwd *result,
 | |
| 				   struct parser_data *data,
 | |
| 				   size_t datalen, int *errnop);
 | |
| libc_hidden_proto (_nss_files_parse_pwent)
 | |
| 
 | |
| #define DECLARE_NSS_PROTOTYPES(service)					\
 | |
| extern enum nss_status _nss_ ## service ## _setpwent (int);		\
 | |
| extern enum nss_status _nss_ ## service ## _endpwent (void);		\
 | |
| extern enum nss_status _nss_ ## service ## _getpwnam_r			\
 | |
| 		       (const char *name, struct passwd *pwd,		\
 | |
| 			char *buffer, size_t buflen, int *errnop);	\
 | |
| extern enum nss_status _nss_ ## service ## _getpwuid_r			\
 | |
| 		       (uid_t uid, struct passwd *pwd,			\
 | |
| 			char *buffer, size_t buflen, int *errnop);	\
 | |
| extern enum nss_status _nss_ ## service ##_getpwent_r			\
 | |
| 		       (struct passwd *result, char *buffer,		\
 | |
| 			size_t buflen, int *errnop);
 | |
| 
 | |
| DECLARE_NSS_PROTOTYPES (compat)
 | |
| DECLARE_NSS_PROTOTYPES (files)
 | |
| DECLARE_NSS_PROTOTYPES (hesiod)
 | |
| DECLARE_NSS_PROTOTYPES (nis)
 | |
| DECLARE_NSS_PROTOTYPES (nisplus)
 | |
| 
 | |
| #undef DECLARE_NSS_PROTOTYPES
 | |
| #endif
 | |
| 
 | |
| #endif
 |