On 07/17/2017 07:48 PM, Joshua Schaeffer wrote:
>>     1222            rc = krb5_db_get_principal(context, mname, 0, 
>> &master_entry);
>>     1223            if (rc == 0) {
>>     1224                *kvno = (krb5_kvno) 
>> master_entry->key_data->key_data_kvno;
>>     1225                krb5_db_free_principal(context, master_entry);
>>     1226            } else
>>     1227                *kvno = 1;
>>     1228        }
>>
>> I don't really know where to go from here. I don't know this code well 
>> enough to figure out why the segmentation error is occurring. Can anybody 
>> help me out? If you need additional information, I'd be happy to provide.

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.

That leaves several mysteries, which I don't have the answer to:

* Why does the master DB entry (K/M) have no key data?

* 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.)

* 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.

* 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.)
________________________________________________
Kerberos mailing list           Kerberos@mit.edu
https://mailman.mit.edu/mailman/listinfo/kerberos

Reply via email to