[SCM] NSS Wrapper Repository - branch master updated
Jeremy Allison
jra at samba.org
Wed Mar 16 22:17:58 UTC 2016
The branch, master has been updated
via 962cf22 nwrap: Use snprintf() instead of strcpy()
via 79f1b29 tests: Add testing for BSD 'struct passwd' members
via 7df4b1c nwrap: Support FreeBSD 'struct passwd' members
from 03018f8 Bump version to 1.1.2
https://git.samba.org/?p=nss_wrapper.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 962cf22a01f07008bb80711f48afaafc9b3bc087
Author: Andreas Schneider <asn at samba.org>
Date: Wed Mar 16 18:13:00 2016 +0100
nwrap: Use snprintf() instead of strcpy()
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 79f1b29e5daafbb6e624bbee3700ce07e39f72fd
Author: Andreas Schneider <asn at samba.org>
Date: Thu Jan 21 13:51:08 2016 +0100
tests: Add testing for BSD 'struct passwd' members
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 7df4b1c2bcc2fc96d1203c6814472fe77c9c82a0
Author: Andreas Schneider <asn at samba.org>
Date: Thu Jan 21 13:47:27 2016 +0100
nwrap: Support FreeBSD 'struct passwd' members
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
ConfigureChecks.cmake | 3 +++
config.h.cmake | 4 ++++
src/nss_wrapper.c | 34 ++++++++++++++++++++++++++++++++--
tests/testsuite.c | 12 ++++++++++++
4 files changed, 51 insertions(+), 2 deletions(-)
Changeset truncated at 500 lines:
diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
index 1b6ba01..462b166 100644
--- a/ConfigureChecks.cmake
+++ b/ConfigureChecks.cmake
@@ -191,6 +191,9 @@ check_prototype_definition(getnameinfo
# STRUCT MEMBERS
check_struct_has_member("struct sockaddr" sa_len "sys/socket.h netinet/in.h" HAVE_STRUCT_SOCKADDR_SA_LEN)
+check_struct_has_member("struct passwd" pw_class "pwd.h" HAVE_STRUCT_PASSWD_PW_CLASS)
+check_struct_has_member("struct passwd" pw_change "pwd.h" HAVE_STRUCT_PASSWD_PW_CHANGE)
+check_struct_has_member("struct passwd" pw_expire "pwd.h" HAVE_STRUCT_PASSWD_PW_EXPIRE)
# IPV6
check_c_source_compiles("
diff --git a/config.h.cmake b/config.h.cmake
index f00c2a4..75c92ed 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -86,6 +86,10 @@
#cmakedefine HAVE_LINUX_GETNAMEINFO_UNSIGNED 1
#cmakedefine HAVE_STRUCT_SOCKADDR_SA_LEN 1
+#cmakedefine HAVE_STRUCT_PASSWD_PW_CLASS 1
+#cmakedefine HAVE_STRUCT_PASSWD_PW_CHANGE 1
+#cmakedefine HAVE_STRUCT_PASSWD_PW_EXPIRE 1
+
#cmakedefine HAVE_IPV6 1
#cmakedefine HAVE_ATTRIBUTE_PRINTF_FORMAT 1
diff --git a/src/nss_wrapper.c b/src/nss_wrapper.c
index c4f1b33..82581b1 100644
--- a/src/nss_wrapper.c
+++ b/src/nss_wrapper.c
@@ -154,6 +154,14 @@ typedef nss_status_t NSS_STATUS;
#define SAFE_FREE(x) do { if ((x) != NULL) {free(x); (x)=NULL;} } while(0)
#endif
+#ifndef discard_const
+#define discard_const(ptr) ((void *)((uintptr_t)(ptr)))
+#endif
+
+#ifndef discard_const_p
+#define discard_const_p(type, ptr) ((type *)discard_const(ptr))
+#endif
+
#ifdef HAVE_IPV6
#define NWRAP_INET_ADDRSTRLEN INET6_ADDRSTRLEN
#else
@@ -1963,6 +1971,28 @@ static bool nwrap_pw_parse_line(struct nwrap_cache *nwrap, char *line)
NWRAP_LOG(NWRAP_LOG_TRACE, "gid[%u]\n", pw->pw_gid);
+#ifdef HAVE_STRUCT_PASSWD_PW_CLASS
+ pw->pw_class = discard_const_p(char, "");
+
+ NWRAP_LOG(NWRAP_LOG_TRACE, "class[%s]", pw->pw_class);
+#endif /* HAVE_STRUCT_PASSWD_PW_CLASS */
+
+#ifdef HAVE_STRUCT_PASSWD_PW_CHANGE
+ pw->pw_change = 0;
+
+ NWRAP_LOG(NWRAP_LOG_TRACE,
+ "change[%lu]",
+ (unsigned long)pw->pw_change);
+#endif /* HAVE_STRUCT_PASSWD_PW_CHANGE */
+
+#ifdef HAVE_STRUCT_PASSWD_PW_EXPIRE
+ pw->pw_expire = 0;
+
+ NWRAP_LOG(NWRAP_LOG_TRACE,
+ "expire[%lu]",
+ (unsigned long)pw->pw_expire);
+#endif /* HAVE_STRUCT_PASSWD_PW_EXPIRE */
+
/* gecos */
p = strchr(c, ':');
if (!p) {
@@ -5421,7 +5451,7 @@ static int nwrap_getnameinfo(const struct sockaddr *sa, socklen_t salen,
if (he != NULL && he->h_name != NULL) {
if (strlen(he->h_name) >= hostlen)
return EAI_OVERFLOW;
- strcpy(host, he->h_name);
+ snprintf(host, hostlen, "%s", he->h_name);
if (flags & NI_NOFQDN)
host[strcspn(host, ".")] = '\0';
} else {
@@ -5439,7 +5469,7 @@ static int nwrap_getnameinfo(const struct sockaddr *sa, socklen_t salen,
if (service != NULL) {
if (strlen(service->s_name) >= servlen)
return EAI_OVERFLOW;
- strcpy(serv, service->s_name);
+ snprintf(serv, servlen, "%s", service->s_name);
} else {
if (snprintf(serv, servlen, "%u", port) >= (int) servlen)
return EAI_OVERFLOW;
diff --git a/tests/testsuite.c b/tests/testsuite.c
index ee35189..dccdb97 100644
--- a/tests/testsuite.c
+++ b/tests/testsuite.c
@@ -75,6 +75,15 @@ static bool copy_passwd(const struct passwd *pwd, struct passwd *p)
p->pw_passwd = strdup(pwd->pw_passwd);
p->pw_uid = pwd->pw_uid;
p->pw_gid = pwd->pw_gid;
+#ifdef HAVE_STRUCT_PASSWD_PW_CLASS
+ p->pw_class = strdup(pwd->pw_class);
+#endif
+#ifdef HAVE_STRUCT_PASSWD_PW_CHANGE
+ p->pw_change = pwd->pw_change;
+#endif
+#ifdef HAVE_STRUCT_PASSWD_PW_EXPIRE
+ p->pw_expire = pwd->pw_expire;
+#endif
p->pw_gecos = strdup(pwd->pw_gecos);
p->pw_dir = strdup(pwd->pw_dir);
p->pw_shell = strdup(pwd->pw_shell);
@@ -86,6 +95,9 @@ static void free_passwd(struct passwd *p)
{
SAFE_FREE(p->pw_name);
SAFE_FREE(p->pw_passwd);
+#ifdef HAVE_STRUCT_PASSWD_PW_CLASS
+ SAFE_FREE(p->pw_class);
+#endif
SAFE_FREE(p->pw_gecos);
SAFE_FREE(p->pw_dir);
SAFE_FREE(p->pw_shell);
--
NSS Wrapper Repository
More information about the samba-cvs
mailing list