[augeas-devel] adjustment to the krb5.aug lense

Raphaël Pinson raphink at gmail.com
Wed Feb 8 11:03:40 UTC 2012


2012/2/8 Raphaël Pinson <raphink at gmail.com>:
> Hello,
>
>
> On Tue, Feb 7, 2012 at 11:12 PM, Pat Riehecky <riehecky at fnal.gov> wrote:
>> The krb5.aug lense is unable to parse my site's krb5.conf (publicly
>> available at http://security.fnal.gov/krb5.conf)
>
>
> From looking at it, here are the stanzas that are not recognized:
>
> line 90:
> default_tgs_enctypes = des-cbc-crc des3-cbc-sha1
> default_tkt_enctypes = des-cbc-crc des3-cbc-sha1
>
> line 190:
> v4_name_convert = {
>   host = {
>      rcmd = host
>   }
> }
>
> line 203:
> ticket_lifetime = 30h
>
>
> Hint: you can use augcheck [0] to spot these errors easily.
>
>
>> I've almost gotten it to be able to read the v4_name_convert section (line
>> 194) but just can't seem to get it right.
>>
>> My patch below gets me almost there, but I'm stuck for what to do to fixup
>> the last little bit.  I can get
>>
>> CERN.CH = {
>>     kdc = cerndc.cern.ch:88
>>     master_kdc = cerndc.cern.ch:88
>>     default_domain = cern.ch
>>     kpasswd_server = afskrb5m.cern.ch
>>     admin_server = afskrb5m.cern.ch
>>     v4_name_convert = {
>>           host = rcmd
>>          }
>> }
>>
>> to work with this patch but not
>>
>> CERN.CH = {
>>     kdc = cerndc.cern.ch:88
>>     master_kdc = cerndc.cern.ch:88
>>     default_domain = cern.ch
>>     kpasswd_server = afskrb5m.cern.ch
>>     admin_server = afskrb5m.cern.ch
>>     v4_name_convert = {
>>           host = {
>>                  rcmd = host
>>                  }
>>          }
>> }
>>
>> My various attempts all end up breaking v4_instance_convert.
>>
>> I tried the suggestion offered some ways back of making the v4_name_convert
>> section more top level, but the entry in libdefaults is a true/false while
>> the one in a realm is much more tree like.  It seemed that would make
>> matters worse.
>>
>> May I request a little help?
>>
>> --- lenses/krb5.aug.orig    2012-02-07 14:00:13.349952582 -0600
>> +++ lenses/krb5.aug    2012-02-07 16:02:03.465813208 -0600
>> @@ -24,7 +24,7 @@ let realm_re = /[A-Z][.a-zA-Z0-9-]*/
>>  let app_re = /[a-z][a-zA-Z0-9_]*/
>>  let name_re = /[.a-zA-Z0-9_-]+/
>>
>> -let value = store /[^;# \t\n{}]+/
>> +let value = store /[^;# \t\n{}]|[^;# \t\n{}][^#\n]*[^;# \t\n{}]/
>
> OK. I guess this is meant to parse "des-cbc-crc des3-cbc-sha1". Maybe
> it would be nicer to represent this as a list?
>
>
>>  let entry (kw:regexp) (sep:lens) (comment:lens)
>>     = [ indent . key kw . sep . value . (comment|eol) ] | comment
>>
>> @@ -61,8 +61,8 @@ let appdefaults =
>>  let realms =
>>   let simple_option = /kdc|admin_server|database_module|default_domain/
>>       |/v4_realm|auth_to_local(_names)?|master_kdc|kpasswd_server/
>> -      |/admin_server/ in
>> -  let subsec_option = /v4_instance_convert/ in
>> +      |/admin_server|ticket_lifetime/ in
>> +  let subsec_option = /v4_instance_convert|v4_name_convert/ in
>>   let option = entry simple_option eq comment in
>>   let subsec = [ indent . key subsec_option . eq_openbr .
>>                    (entry name_re eq comment)* . closebr . eol ] in
>>
>
>
> You're allowing to create a subsection called "v4_name_convert" inside
> realms sections, but not to create a sub-subsection called "host"
> inside this "v4_name_convert", hence your issue.
>
> That might eventually become quite complex. I'll see if this can be
> simplified using the new Build.block* constructs.
>
>


Actually, I see that libdefaults already supports "v4_name_convert"
constructs, so the easiest might well be to take it out of
libdefaults, put it in the general scope, and call it in realms. So,
something like this fixes your problem:

--- a/lenses/krb5.aug
+++ b/lenses/krb5.aug
@@ -37,13 +37,14 @@ let record (t:string) (e:lens) =
   let title = Inifile.indented_title t in
     Inifile.record title e

+let v4_name_convert (subsec:lens) = [ indent . key "v4_name_convert"
. eq_openbr .
+                        subsec* . closebr . eol ]
+
 let libdefaults =
   let option = entry (name_re - "v4_name_convert") eq comment in
   let subsec = [ indent . key /host|plain/ . eq_openbr .
                    (entry name_re eq comment)* . closebr . eol ] in
-  let v4_name_convert = [ indent . key "v4_name_convert" . eq_openbr .
-                          subsec* . closebr . eol ] in
-  record "libdefaults" (option|v4_name_convert)
+  record "libdefaults" (option|(v4_name_convert subsec))

 let login =
   let keys = /krb[45]_get_tickets|krb4_convert|krb_run_aklog/
@@ -67,7 +68,7 @@ let realms =
   let subsec = [ indent . key subsec_option . eq_openbr .
                    (entry name_re eq comment)* . closebr . eol ] in
   let realm = [ indent . label "realm" . store realm_re .
-                  eq_openbr . (option|subsec)* . closebr . eol ] in
+                  eq_openbr . (option|subsec|(v4_name_convert
subsec))* . closebr . eol ] in
     record "realms" (realm|comment)

 let domain_realm =



Raphaël




More information about the augeas-devel mailing list