Allow leading ``!'' characters in authkeys and chat scripts to
be doubled up to mean a single literaly ``!''.
This commit is contained in:
parent
4873b46dc7
commit
a2240f353a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=64465
@ -102,3 +102,5 @@ o It is now only necessary to escape the `-' character in chat scripts twice.
|
||||
See the example files for details.
|
||||
o Environment variables and ~ are expanded on in commands
|
||||
o ``nat pptp'' is no longer necessary as this is now done transparently
|
||||
o The ``!'' at the start of chat scripts and authkey can be made literal
|
||||
(rather than meaning execute) by doubling it to ``!!''.
|
||||
|
@ -682,12 +682,13 @@ chap_Input(struct bundle *bundle, struct link *l, struct mbuf *bp)
|
||||
|
||||
switch (chap->auth.in.hdr.code) {
|
||||
case CHAP_CHALLENGE:
|
||||
if (*bundle->cfg.auth.key == '!')
|
||||
if (*bundle->cfg.auth.key == '!' && bundle->cfg.auth.key[1] != '!')
|
||||
chap_StartChild(chap, bundle->cfg.auth.key + 1,
|
||||
bundle->cfg.auth.name);
|
||||
else
|
||||
chap_Respond(chap, bundle->cfg.auth.name,
|
||||
bundle->cfg.auth.key, p->link.lcp.his_authtype
|
||||
chap_Respond(chap, bundle->cfg.auth.name, bundle->cfg.auth.key +
|
||||
(*bundle->cfg.auth.key == '!' ? 1 : 0),
|
||||
p->link.lcp.his_authtype
|
||||
#ifdef HAVE_DES
|
||||
, lanman
|
||||
#endif
|
||||
|
@ -213,7 +213,8 @@ chat_UpdateSet(struct fdescriptor *d, fd_set *r, fd_set *w, fd_set *e, int *n)
|
||||
* portion of that sequence.
|
||||
*/
|
||||
|
||||
needcr = c->state == CHAT_SEND && *c->argptr != '!';
|
||||
needcr = c->state == CHAT_SEND &&
|
||||
(*c->argptr != '!' || c->argptr[1] == '!');
|
||||
|
||||
/* We leave room for a potential HDLC header in the target string */
|
||||
ExpandString(c, c->argptr, c->exp + 2, sizeof c->exp - 2, needcr);
|
||||
@ -254,8 +255,8 @@ chat_UpdateSet(struct fdescriptor *d, fd_set *r, fd_set *w, fd_set *e, int *n)
|
||||
else if (c->nargptr == NULL && !strcmp(c->exp+2, "TIMEOUT"))
|
||||
gottimeout = 1;
|
||||
else {
|
||||
if (c->exp[2] == '!')
|
||||
ExecStr(c->physical, c->exp + 3, c->exp + 2, sizeof c->exp - 2);
|
||||
if (c->exp[2] == '!' && c->exp[3] != '!')
|
||||
ExecStr(c->physical, c->exp + 3, c->exp + 3, sizeof c->exp - 3);
|
||||
|
||||
if (c->exp[2] == '\0') {
|
||||
/* Empty string, reparse (this may be better as a `goto start') */
|
||||
@ -279,7 +280,7 @@ chat_UpdateSet(struct fdescriptor *d, fd_set *r, fd_set *w, fd_set *e, int *n)
|
||||
}
|
||||
|
||||
/* set c->argptr to point in the right place */
|
||||
c->argptr = c->exp + 2;
|
||||
c->argptr = c->exp + (c->exp[2] == '!' ? 3 : 2);
|
||||
c->arglen = strlen(c->argptr);
|
||||
|
||||
if (c->state == CHAT_EXPECT) {
|
||||
|
@ -3782,7 +3782,13 @@ and
|
||||
.Dq authkey
|
||||
values.
|
||||
.Pp
|
||||
Ignoring the
|
||||
If the
|
||||
.Dq \&!
|
||||
is doubled up
|
||||
.Pq to Dq \&!! ,
|
||||
it is treated as a single literal
|
||||
.Dq \&! ,
|
||||
otherwise, ignoring the
|
||||
.Dq \&! ,
|
||||
.Ar value
|
||||
is parsed as a program to execute in the same was as the
|
||||
@ -4289,6 +4295,10 @@ It is also possible to execute external commands from the chat script.
|
||||
To do this, the first character of the expect or send string is an
|
||||
exclamation mark
|
||||
.Pq Dq \&! .
|
||||
If a literal exclaimation mark is required, double it up to
|
||||
.Dq \&!!
|
||||
and it will be treated as a single literal
|
||||
.Dq \&! .
|
||||
When the command is executed, standard input and standard output are
|
||||
directed to the open device (see the
|
||||
.Dq set device
|
||||
|
@ -3782,7 +3782,13 @@ and
|
||||
.Dq authkey
|
||||
values.
|
||||
.Pp
|
||||
Ignoring the
|
||||
If the
|
||||
.Dq \&!
|
||||
is doubled up
|
||||
.Pq to Dq \&!! ,
|
||||
it is treated as a single literal
|
||||
.Dq \&! ,
|
||||
otherwise, ignoring the
|
||||
.Dq \&! ,
|
||||
.Ar value
|
||||
is parsed as a program to execute in the same was as the
|
||||
@ -4289,6 +4295,10 @@ It is also possible to execute external commands from the chat script.
|
||||
To do this, the first character of the expect or send string is an
|
||||
exclamation mark
|
||||
.Pq Dq \&! .
|
||||
If a literal exclaimation mark is required, double it up to
|
||||
.Dq \&!!
|
||||
and it will be treated as a single literal
|
||||
.Dq \&! .
|
||||
When the command is executed, standard input and standard output are
|
||||
directed to the open device (see the
|
||||
.Dq set device
|
||||
|
Loading…
Reference in New Issue
Block a user