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
Here you can also easily grab the thread's TID as the currthread's
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
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
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.