From 676599b36a92f3c201c5682ee7a5caddd9f370a4 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Fri, 2 Oct 2015 11:34:13 +0200 Subject: Harden putpwent, putgrent, putspent, putspent against injection [BZ #18724] 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 '+'. --- include/nss.h | 13 +++++++++++++ include/pwd.h | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/nss.h b/include/nss.h index 0541335c18..1e8cc3910d 100644 --- a/include/nss.h +++ b/include/nss.h @@ -1 +1,14 @@ +#ifndef _NSS_H #include + +#define NSS_INVALID_FIELD_CHARACTERS ":\n" +extern const char __nss_invalid_field_characters[] attribute_hidden; + +_Bool __nss_valid_field (const char *value) + attribute_hidden internal_function; +_Bool __nss_valid_list_field (char **list) + attribute_hidden internal_function; +const char *__nss_rewrite_field (const char *value, char **to_be_freed) + attribute_hidden internal_function; + +#endif /* _NSS_H */ diff --git a/include/pwd.h b/include/pwd.h index bd7fecc16e..3b0f72540c 100644 --- a/include/pwd.h +++ b/include/pwd.h @@ -24,7 +24,7 @@ extern int __fgetpwent_r (FILE * __stream, struct passwd *__resultbuf, char *__buffer, size_t __buflen, struct passwd **__result); -#include +#include struct parser_data; extern int _nss_files_parse_pwent (char *line, struct passwd *result, -- cgit 1.4.1