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");
                }
                ;

Reply via email to