X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/blobdiff_plain/fa869228d338880f488440b85d4c9621eb5995af..7f24626bd8b952e65394adf5f99bced26251b2ce:/match.c diff --git a/match.c b/match.c index c82c28a8..23894777 100644 --- a/match.c +++ b/match.c @@ -1,3 +1,4 @@ +/* $OpenBSD: match.c,v 1.27 2008/06/10 23:06:19 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -35,10 +36,14 @@ */ #include "includes.h" -RCSID("$OpenBSD: match.c,v 1.17 2002/02/11 16:21:42 markus Exp $"); -#include "match.h" +#include + +#include +#include + #include "xmalloc.h" +#include "match.h" /* * Returns true if the given string matches the pattern (which may contain ? @@ -136,7 +141,7 @@ match_pattern_list(const char *string, const char *pattern, u_int len, i < len && subi < sizeof(sub) - 1 && pattern[i] != ','; subi++, i++) sub[subi] = dolower && isupper(pattern[i]) ? - tolower(pattern[i]) : pattern[i]; + (char)tolower(pattern[i]) : pattern[i]; /* If subpattern too long, return failure (no match). */ if (subi >= sizeof(sub) - 1) return 0; @@ -178,7 +183,8 @@ match_hostname(const char *host, const char *pattern, u_int len) /* * returns 0 if we get a negative match for the hostname or the ip - * or if we get no match at all. returns 1 otherwise. + * or if we get no match at all. returns -1 on error, or 1 on + * successful match. */ int match_host_and_ip(const char *host, const char *ipaddr, @@ -186,9 +192,12 @@ match_host_and_ip(const char *host, const char *ipaddr, { int mhost, mip; - /* negative ipaddr match */ - if ((mip = match_hostname(ipaddr, patterns, strlen(patterns))) == -1) + /* error in ipaddr match */ + if ((mip = addr_match_list(ipaddr, patterns)) == -2) + return -1; + else if (mip == -1) /* negative ip address match */ return 0; + /* negative hostname match */ if ((mhost = match_hostname(host, patterns, strlen(patterns))) == -1) return 0; @@ -254,7 +263,7 @@ match_list(const char *client, const char *server, u_int *next) ret = xstrdup(p); if (next != NULL) *next = (cp == NULL) ? - strlen(c) : cp - c; + strlen(c) : (u_int)(cp - c); xfree(c); xfree(s); return ret;