On 07/18/2017 09:50 AM, Greg Hudson wrote:
> The proximal bug is that master_entry->key_data is an array, bounded by
> master_entry->n_key_data, and this code isn't checking if
> master_entry->n_key_data > 0 before dereferencing the first element.
> You could fix that bug (set *kvno = 1 if n_key_data is 0) and probably
> get kdb5_util stash and kadmind to report an error rather than crash.

Thanks for the suggestion, this has gotten me farther. I changed the code, 
started from a fresh container, and reran through my steps and I was able to 
get past the seg fault (See below for results).

> That leaves several mysteries, which I don't have the answer to:
>
> * Why does the master DB entry (K/M) have no key data?

Well, I believe this is the key question. When I run kdb5_util stash I now get 
this error:

    root@bllkrb501:/usr/local/lib/krb5/plugins/kdb# kdb5_util stash -f 
/usr/local/etc/krb5kdc/stash
    get_plugin_data_sym(kdb_function_table)
    kdb5_util: Can not fetch master key (error: No such file or directory). 
while reading master key
    kdb5_util: Warning: proceeding without master key
    Enter KDC database master key:
    kdb5_util: Cannot find master key record in database while getting master 
key list

But the problem is the record does exist:

    root@bllkrb501:/usr/local/lib/krb5/plugins/kdb# ldapsearch -LLL -D 
cn=kdc-srv,dc=appendata,dc=net -W -H ldaps://bllldap01.appendata.net -b 
cn=krbContainer,dc=appendata,dc=net '(krbPrincipalName=K/M*)'
    Enter LDAP Password:
    dn: 
krbPrincipalName=K/[email protected],cn=APPENDATA.NET,cn=krbContainer,dc=appendata,dc=net
    krbLoginFailedCount: 0
    krbMaxTicketLife: 36000
    krbMaxRenewableAge: 604800
    krbTicketFlags: 192
    krbPrincipalName: K/[email protected]
    krbPrincipalExpiration: 19700101000000Z
    krbLastPwdChange: 19700101000000Z
    krbExtraData:: ...
    krbExtraData:: ...
    krbExtraData:: ...
    objectClass: krbPrincipal
    objectClass: krbPrincipalAux
    objectClass: krbTicketPolicyAux

So, are you saying that something is missing from this record?

I'm leaning towards it not being an LDAP connection issue or access list 
problem, because I can destroy the realm successfully and recreate it many 
times over from the Kerberos server. However, I'm going to look through the 
LDAP logs when I get a chance tomorrow, just to make sure nothing pops up from 
the LDAP side.

> * Why isn't the code able to load the shared object from
> /usr/local/lib/krb5/plugins/kdb/kldap?  (It is probably falling back to
> the module in the system directory which is the 1.13.x code, which is
> why it continues to work at all.)

I just created a symlink and this error now goes away. You can see from the 
command above that all that gets reported now is 
"get_plugin_data_sym(kdb_function_table)".

    root@bllkrb501:/usr/local/lib/krb5/plugins/kdb# ls -l
    total 408
    -rw-r--r-- 1 root root 366680 Jul 18 20:53 db2.so
    lrwxrwxrwx 1 root root      8 Jul 18 20:59 kldap -> kldap.so
    -rw-r--r-- 1 root root  21008 Jul 18 20:53 kldap.so

I don't know why a symlink wouldn't get created when I installed Kerberos from 
the package management system. I would think something like this would be 
included in the post install scripts. Ultimately this seems to fix/change 
nothing. I'm still seeing my core issue. I just don't get that annoying warning 
anymore. :/
>
> * Where is that "invalid file descriptor -1 in syscall write()" event
> occurring in the code, and why?  It happens before the master password
> is read, so it's presumably not from the code that writes the stash file.

Currently unsure on this one. Need to do more debugging and research.

>
> * Why didn't kdb5_ldap_util create -s make a stash file?  (Did you
> re-run kdb5_ldap_util create after locally building 1.15.1?  If not, the
> stash file might be in a different place than the 1.15.1 code is looking
> for it.)
I thought the same thing. The first time I compiled the code I used 
"--sysconfdir=/etc". I couldn't find a stash file anywhere under this 
directory. When I changed the code and recompiled I just used all the 
/usr/local/... defaults this time, thinking maybe this time it will just create 
the stash file under /usr/local/etc instead, but still no luck. After I do a 
make install I get nothing under that directory.

I've searched my entire system for a file called "stash" (that's what KRB5 
creates when you add the -s, right?) and I can't find anything. I guess I need 
to do more debugging on this too to see why it isn't actually creating the 
stash file. My assumption is that it isn't being created because of the error 
above.

Thanks,
Joshua Schaeffer
________________________________________________
Kerberos mailing list           [email protected]
https://mailman.mit.edu/mailman/listinfo/kerberos

Reply via email to