diff --git a/kparse.rl b/kparse.rl index 2d4cb6cb..c0c55dfe 100644 --- a/kparse.rl +++ b/kparse.rl @@ -4,6 +4,7 @@ package dns import ( "os" + "fmt" "strings" ) @@ -13,19 +14,23 @@ import ( }%% func Kparse(data string) (m map[string]string, err os.Error) { - cs, p, pe, eof := 0, 0, len(data), len(data) + cs, p, pe := 0, 0, len(data) mark := 0 - key := "" + k := "" + k=k + m = make(map[string]string) %%{ action mark { mark = p } - action setKey { key = strings.ToLower(data[mark:p]) } - action setValue { m[key] = data[mark:p] } + action setKey { k = strings.ToLower(data[mark:p]); fmt.Printf("key {%s}\n", k) } + action setValue { m[k] = data[mark:p]; fmt.Printf("value {%s}\n", data[mark:p]) } + + base64 = [a-zA-Z0-9.\\/+=() ]+ >mark; key = ( ('Private-key-format'i) | ('Algorithm'i) - | ('Modules'i) + | ('Modulus'i) | ('PublicExponent'i) | ('PrivateExponent'i) | ('Prime1'i) @@ -36,12 +41,12 @@ func Kparse(data string) (m map[string]string, err os.Error) { | ('Created'i) | ('Publish'i) | ('Activate'i) - ) %setKey; + ) >mark %setKey; - value = any+ %setValue; + value = base64 %setValue; - line = key /: ?/ value; - main := line+; + line = key ': ' value; + main := ( line '\n' )*; write init; write exec; @@ -51,11 +56,13 @@ func Kparse(data string) (m map[string]string, err os.Error) { // No clue what I'm doing what so ever if p == pe { //return nil, os.ErrorString("unexpected eof") - return nil, nil + println("err unexp eof") + return m, nil } else { //return nil, os.ErrorString(fmt.Sprintf("error at position %d", p)) + println("err ", p, "data:", string(data[p])) return nil, nil } } - return + return m, nil } diff --git a/parse_test.go b/parse_test.go index cf222dc4..d5a387d3 100644 --- a/parse_test.go +++ b/parse_test.go @@ -152,3 +152,23 @@ func TestParse(t *testing.T) { rr, _ = Zparse("miek.nl. A 127.0.0.1") fmt.Printf("Seen a:\n%v\n", rr) } + +func TestParseK(t *testing.T) { + m, _ := Kparse(`Private-key-format: v1.3 +Algorithm: 5 (RSASHA1) +Modulus: v7yUY0LEmAtLythV6voScdW4iRAOCF2N217APNTcblHs9sxspVG8fYxrulDJhx6hqpZlCKtKPvZ649Z8/FCczL25wLKUD4W4f1xKMhw9/g+ol926keT1foQFiPGsItjinX/IHCDIEhEm1m0Cozdx4AfZai8QkPqtO064ejkCW4k= +PublicExponent: AQAB +PrivateExponent: YPwEmwjk5HuiROKU4xzHQ6l1hG8Iiha4cKRG3P5W2b66/EN/GUh07ZSf0UiYB67o257jUDVEgwCuPJz776zfApcCB4oGV+YDyEu7Hp/rL8KcSN0la0k2r9scKwxTp4BTJT23zyBFXsV/1wRDK1A5NxsHPDMYi2SoK63Enm/1ptk= +Prime1: /wjOG+fD0ybNoSRn7nQ79udGeR1b0YhUA5mNjDx/x2fxtIXzygYk0Rhx9QFfDy6LOBvz92gbNQlzCLz3DJt5hw== +Prime2: wHZsJ8OGhkp5p3mrJFZXMDc2mbYusDVTA+t+iRPdS797Tj0pjvU2HN4vTnTj8KBQp6hmnY7dLp9Y1qserySGbw== +Exponent1: N0A7FsSRIg+IAN8YPQqlawoTtG1t1OkJ+nWrurPootScApX6iMvn8fyvw3p2k51rv84efnzpWAYiC8SUaQDNxQ== +Exponent2: SvuYRaGyvo0zemE3oS+WRm2scxR8eiA8WJGeOc+obwOKCcBgeZblXzfdHGcEC1KaOcetOwNW/vwMA46lpLzJNw== +Coefficient: 8+7ZN/JgByqv0NfULiFKTjtyegUcijRuyij7yNxYbCBneDvZGxJwKNi4YYXWx743pcAj4Oi4Oh86gcmxLs+hGw== +Created: 20110302104537 +Publish: 20110302104537 +Activate: 20110302104537 +`) + for k, v := range m { + fmt.Printf("%s = %s\n", k, v) + } +}