hi!
On Mon, Sep 08, 2008 at 12:33:20PM +0200, Frans Haarman wrote:
> If you use an unqouted string as psk (pre-shared key) it can't start with a
> number so:
>
> fails: ike from any to any psk 123
> works: ike from any to any psk "123"
>
it can start with a number, but it cannot be a number. so 123foo
would be ok but not just 123.
> Same goes for the tag-strings. For most this is probably obvious, because
> it has to
> be a string right ? But not for me :P
>
is there any problem with quoting the string? i think the normal
approach is that quoting should be the default unless you have a
string that also works without quotes.
i mean we could fix this in ipsecctl (see diff below) but is it really
required? and there is a problem with the attached diff that it
"normalizes" the number, so a key 0123 would become 123. any other
"fix" would require changes in the parser that is shared with many
other tools and daemons in openbsd - it is probably just easier to use
the quotes and to add a note in the manpage suggesting it.
reyk
Index: parse.y
===================================================================
RCS file: /cvs/src/sbin/ipsecctl/parse.y,v
retrieving revision 1.138
diff -u -p -r1.138 parse.y
--- parse.y 1 Jul 2008 14:31:37 -0000 1.138
+++ parse.y 8 Sep 2008 10:51:00 -0000
@@ -275,7 +275,7 @@ typedef struct {
%type <v.type> type
%type <v.life> life
%type <v.mode> phase1mode phase2mode
-%type <v.string> tag
+%type <v.string> tag numstr
%%
grammar : /* empty */
@@ -806,7 +806,7 @@ ikeauth : /* empty */ {
$$.type = IKE_AUTH_RSA;
$$.string = NULL;
}
- | PSK STRING {
+ | PSK numstr {
$$.type = IKE_AUTH_PSK;
if (($$.string = strdup($2)) == NULL)
err(1, "ikeauth: strdup");
@@ -817,9 +817,20 @@ tag : /* empty */
{
$$ = NULL;
}
- | TAG STRING
+ | TAG numstr
{
$$ = $2;
+ }
+ ;
+
+numstr : STRING
+ {
+ $$ = $1;
+ }
+ | NUMBER
+ {
+ if (asprintf(&$$, "%lld", $1) == -1)
+ err(1, "string: asprintf");
}
;