Allow leading ``!'' characters in authkeys and chat scripts to

be doubled up to mean a single literaly ``!''.
This commit is contained in:
Brian Somers 2000-08-09 19:29:50 +00:00
parent 4873b46dc7
commit a2240f353a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=64465
5 changed files with 33 additions and 9 deletions

View File

@ -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 ``!!''.

View File

@ -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

View File

@ -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) {

View File

@ -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

View File

@ -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