svn commit: r192069 - stable/7/lib/libutil
Dag-Erling Smorgrav
des at FreeBSD.org
Thu May 14 01:38:07 UTC 2009
Author: des
Date: Thu May 14 01:38:06 2009
New Revision: 192069
URL: http://svn.freebsd.org/changeset/base/192069
Log:
MFC r184633, r184635, r184683: WARNS cleanup
Modified:
stable/7/lib/libutil/ (props changed)
stable/7/lib/libutil/Makefile
stable/7/lib/libutil/login_cap.c
stable/7/lib/libutil/login_class.c
stable/7/lib/libutil/realhostname.c
Modified: stable/7/lib/libutil/Makefile
==============================================================================
--- stable/7/lib/libutil/Makefile Thu May 14 01:35:43 2009 (r192068)
+++ stable/7/lib/libutil/Makefile Thu May 14 01:38:06 2009 (r192069)
@@ -16,6 +16,8 @@ SRCS= _secure_path.c auth.c gr_util.c ex
stub.c trimdomain.c uucplock.c
INCS= libutil.h login_cap.h
+WARNS?= 6
+
CFLAGS+= -DLIBC_SCCS
.if ${MK_INET6_SUPPORT} != "no"
Modified: stable/7/lib/libutil/login_cap.c
==============================================================================
--- stable/7/lib/libutil/login_cap.c Thu May 14 01:35:43 2009 (r192068)
+++ stable/7/lib/libutil/login_cap.c Thu May 14 01:38:06 2009 (r192069)
@@ -61,6 +61,8 @@ static char * internal_string = NULL;
static size_t internal_arraysz = 0;
static const char ** internal_array = NULL;
+static char path_login_conf[] = _PATH_LOGIN_CONF;
+
static char *
allocstr(const char *str)
{
@@ -215,15 +217,14 @@ login_getclassbyname(char const *name, c
if (dir && snprintf(userpath, MAXPATHLEN, "%s/%s", dir,
_FILE_LOGIN_CONF) < MAXPATHLEN) {
- login_dbarray[i] = userpath;
if (_secure_path(userpath, pwd->pw_uid, pwd->pw_gid) != -1)
- i++; /* only use 'secure' data */
+ login_dbarray[i++] = userpath;
}
/*
* XXX: Why to add the system database if the class is `me'?
*/
- if (_secure_path(_PATH_LOGIN_CONF, 0, 0) != -1)
- login_dbarray[i++] = _PATH_LOGIN_CONF;
+ if (_secure_path(path_login_conf, 0, 0) != -1)
+ login_dbarray[i++] = path_login_conf;
login_dbarray[i] = NULL;
memset(lc, 0, sizeof(login_cap_t));
Modified: stable/7/lib/libutil/login_class.c
==============================================================================
--- stable/7/lib/libutil/login_class.c Thu May 14 01:35:43 2009 (r192068)
+++ stable/7/lib/libutil/login_class.c Thu May 14 01:38:06 2009 (r192069)
@@ -137,14 +137,13 @@ substvar(const char * var, const struct
int tildes = 0;
int dollas = 0;
char *p;
+ const char *q;
if (pwd != NULL) {
- /* Count the number of ~'s in var to substitute */
- for (p = (char *)var; (p = strchr(p, '~')) != NULL; p++)
- ++tildes;
- /* Count the number of $'s in var to substitute */
- for (p = (char *)var; (p = strchr(p, '$')) != NULL; p++)
- ++dollas;
+ for (q = var; *q != '\0'; ++q) {
+ tildes += (*q == '~');
+ dollas += (*q == '$');
+ }
}
np = malloc(strlen(var) + (dollas * nlen)
Modified: stable/7/lib/libutil/realhostname.c
==============================================================================
--- stable/7/lib/libutil/realhostname.c Thu May 14 01:35:43 2009 (r192068)
+++ stable/7/lib/libutil/realhostname.c Thu May 14 01:38:06 2009 (r192069)
@@ -84,6 +84,18 @@ realhostname(char *host, size_t hsize, c
return result;
}
+/*
+ * struct sockaddr has very lax alignment requirements, since all its
+ * members are char or equivalent. This is a problem when trying to
+ * dereference a struct sockaddr_in6 * that was passed in as a struct
+ * sockaddr *. Although we know (or trust) that the passed-in struct was
+ * properly aligned, the compiler doesn't, and (rightly) complains. These
+ * macros perform the cast in a way that the compiler will accept.
+ */
+#define SOCKADDR_IN6(p) ((struct sockaddr_in6 *)(void *)(p))
+#define SOCKADDR_IN(p) ((struct sockaddr_in *)(void *)(p))
+#define SOCKINET(p) ((struct sockinet *)(void *)(p))
+
int
realhostname_sa(char *host, size_t hsize, struct sockaddr *addr, int addrlen)
{
@@ -97,10 +109,10 @@ realhostname_sa(char *host, size_t hsize
/* IPv4 mapped IPv6 addr consideraton, specified in rfc2373. */
if (addr->sa_family == AF_INET6 &&
addrlen == sizeof(struct sockaddr_in6) &&
- IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)addr)->sin6_addr)) {
+ IN6_IS_ADDR_V4MAPPED(&SOCKADDR_IN6(addr)->sin6_addr)) {
struct sockaddr_in6 *sin6;
- sin6 = (struct sockaddr_in6 *)addr;
+ sin6 = SOCKADDR_IN6(addr);
memset(&lsin, 0, sizeof(lsin));
lsin.sin_len = sizeof(struct sockaddr_in);
@@ -143,15 +155,16 @@ realhostname_sa(char *host, size_t hsize
}
if (sa->sa_len == addrlen &&
sa->sa_family == addr->sa_family) {
- ((struct sockinet *)sa)->si_port = ((struct sockinet *)addr)->si_port;
+ SOCKINET(sa)->si_port = SOCKINET(addr)->si_port;
#ifdef INET6
/*
* XXX: sin6_socpe_id may not been
* filled by DNS
*/
if (sa->sa_family == AF_INET6 &&
- ((struct sockaddr_in6 *)sa)->sin6_scope_id == 0)
- ((struct sockaddr_in6 *)sa)->sin6_scope_id = ((struct sockaddr_in6 *)addr)->sin6_scope_id;
+ SOCKADDR_IN6(sa)->sin6_scope_id == 0)
+ SOCKADDR_IN6(sa)->sin6_scope_id =
+ SOCKADDR_IN6(addr)->sin6_scope_id;
#endif
if (!memcmp(sa, addr, sa->sa_len)) {
result = HOSTNAME_FOUND;
More information about the svn-src-stable
mailing list