- djm@cvs.openbsd.org 2011/05/06 21:31:38

[readconf.c ssh_config.5]
     support negated Host matching, e.g.

     Host *.example.org !c.example.org
        User mekmitasdigoat

     Will match "a.example.org", "b.example.org", but not "c.example.org"
     ok markus@
This commit is contained in:
Damien Miller 2011-05-15 08:44:45 +10:00
parent dfc85fa181
commit fe92421772
3 changed files with 40 additions and 6 deletions

View File

@ -23,6 +23,15 @@
[ssh.c ssh_config.5] [ssh.c ssh_config.5]
add a %L expansion (short-form of the local host name) for ControlPath; add a %L expansion (short-form of the local host name) for ControlPath;
sync some more expansions with LocalCommand; ok markus@ sync some more expansions with LocalCommand; ok markus@
- djm@cvs.openbsd.org 2011/05/06 21:31:38
[readconf.c ssh_config.5]
support negated Host matching, e.g.
Host *.example.org !c.example.org
User mekmitasdigoat
Will match "a.example.org", "b.example.org", but not "c.example.org"
ok markus@
20110510 20110510
- (dtucker) [openbsd-compat/openssl-compat.{c,h}] Bug #1882: fix - (dtucker) [openbsd-compat/openssl-compat.{c,h}] Bug #1882: fix

View File

@ -1,4 +1,4 @@
/* $OpenBSD: readconf.c,v 1.190 2010/11/13 23:27:50 djm Exp $ */ /* $OpenBSD: readconf.c,v 1.191 2011/05/06 21:31:38 djm Exp $ */
/* /*
* Author: Tatu Ylonen <ylo@cs.hut.fi> * Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -354,7 +354,7 @@ process_config_line(Options *options, const char *host,
int *activep) int *activep)
{ {
char *s, **charptr, *endofnumber, *keyword, *arg, *arg2, fwdarg[256]; char *s, **charptr, *endofnumber, *keyword, *arg, *arg2, fwdarg[256];
int opcode, *intptr, value, value2, scale; int negated, opcode, *intptr, value, value2, scale;
LogLevel *log_level_ptr; LogLevel *log_level_ptr;
long long orig, val64; long long orig, val64;
size_t len; size_t len;
@ -793,12 +793,28 @@ parse_int:
case oHost: case oHost:
*activep = 0; *activep = 0;
while ((arg = strdelim(&s)) != NULL && *arg != '\0') arg2 = NULL;
while ((arg = strdelim(&s)) != NULL && *arg != '\0') {
negated = *arg == '!';
if (negated)
arg++;
if (match_pattern(host, arg)) { if (match_pattern(host, arg)) {
debug("Applying options for %.100s", arg); if (negated) {
debug("%.200s line %d: Skipping Host "
"block because of negated match "
"for %.100s", filename, linenum,
arg);
*activep = 0;
break;
}
if (!*activep)
arg2 = arg; /* logged below */
*activep = 1; *activep = 1;
break;
} }
}
if (*activep)
debug("%.200s line %d: Applying options for %.100s",
filename, linenum, arg2);
/* Avoid garbage check below, as strdelim is done. */ /* Avoid garbage check below, as strdelim is done. */
return 0; return 0;

View File

@ -33,7 +33,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\" .\"
.\" $OpenBSD: ssh_config.5,v 1.147 2011/05/06 21:18:02 djm Exp $ .\" $OpenBSD: ssh_config.5,v 1.148 2011/05/06 21:31:38 djm Exp $
.Dd $Mdocdate: May 6 2011 $ .Dd $Mdocdate: May 6 2011 $
.Dt SSH_CONFIG 5 .Dt SSH_CONFIG 5
.Os .Os
@ -112,6 +112,15 @@ The host is the
argument given on the command line (i.e. the name is not converted to argument given on the command line (i.e. the name is not converted to
a canonicalized host name before matching). a canonicalized host name before matching).
.Pp .Pp
A pattern entry may be negated by prefixing it with an exclamation mark
.Pq Sq !\& .
If a negated entry is matched, then the
.Cm Host
entry is ignored, regardless of whether any other patterns on the line
match.
Negated matches are therefore useful to provide exceptions for wildcard
matches.
.Pp
See See
.Sx PATTERNS .Sx PATTERNS
for more information on patterns. for more information on patterns.