+ if (fstat(fileno(fp), &st) < 0)
+ {
+ rval = errno;
+ syserr("Cannot fstat %s!", fname);
+ return rval;
+ }
+
+ if (ca == NULL)
+ {
+ ctladdr->q_uid = st.st_uid;
+ ctladdr->q_gid = st.st_gid;
+ ctladdr->q_flags |= QGOODUID;
+ }
+ if (ca != NULL && ca->q_uid == st.st_uid)
+ {
+ /* optimization -- avoid getpwuid if we already have info */
+ ctladdr->q_flags |= ca->q_flags & QBOGUSSHELL;
+ ctladdr->q_ruser = ca->q_ruser;
+ }
+ else
+ {
+ register struct passwd *pw;
+
+ pw = getpwuid(st.st_uid);
+ if (pw == NULL || !usershellok(pw->pw_shell))
+ {
+ ctladdr->q_ruser = newstr(pw->pw_name);
+ ctladdr->q_flags |= QBOGUSSHELL;
+ }
+ }
+