Discussion:
Tracing name lookups across doorfs?
mo-+
2011-09-30 11:37:06 UTC
Permalink
Has anyone mastered to trace name lookups (DNS, NIS, LDAP) across the door
to nscd to know which process triggered nscd to do the lookup?

- mo
Nico Williams
2011-09-30 19:36:33 UTC
Permalink
Post by mo-+
Has anyone mastered to trace name lookups (DNS, NIS, LDAP) across the door
to nscd to know which process triggered nscd to do the lookup?
You can't do it from a singular script. You'd need two scripts at
least: one for the process calling nss, and one for nscd. If you look
around I'm sure you'll find a way to print out the PID/TID of the door
caller in the nscd script.

Several ways to do this might include:

- use FBT to trace calls to cred2ucred() in the kernel for the
process with nscd's PID

nscd does call door_ucred(3DOOR), which should cause a call to
cred2ucred(), which gets the caller's PID as its second argument.

- use FBT to trace calls to door_server_dispatch() or
door_finish_dispatch() in the kernel for the process with nscd's PID,
and grab the current thread's
t_door->d_server->d_caller->t_procp->p_pid

Here you can also easily grab the thread's TID as the currthread's
t_door->d_server->d_caller->t_tid.

In both scripts you should trace the current time, the caller's PID
and, preferably, thread ID as well. You should also store the caller
info in a thread-local in the nscd script and trace that in the actual
getXbyY call. Then join the caller/nscd getXbyY traces to the caller
traces.

This is not entirely reliable because of things like event drops,
signals that cause thread/door_call cancellation, ... So you should
join actual getXbyY traces to the late-most (latest seems like the
wrong word for some reason) trace entry from the matching calling
process/thread.

Also, this will not be a stable script, since the above are not stable
interfaces. There may be stable interfaces that you could use, but I
don't know what they are at this moment.

Hope that helps.

Nico
--

Loading...