strecho.c 829 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include "unp.h"
  2. ssize_t read_cred(int, void *, size_t, struct cmsgcred *);
  3. void
  4. str_echo(int sockfd)
  5. {
  6. ssize_t n;
  7. int i;
  8. char buf[MAXLINE];
  9. struct cmsgcred cred;
  10. again:
  11. while ( (n = read_cred(sockfd, buf, MAXLINE, &cred)) > 0) {
  12. if (cred.cmcred_ngroups == 0) {
  13. printf("(no credentials returned)\n");
  14. } else {
  15. printf("PID of sender = %d\n", cred.cmcred_pid);
  16. printf("real user ID = %d\n", cred.cmcred_uid);
  17. printf("real group ID = %d\n", cred.cmcred_gid);
  18. printf("effective user ID = %d\n", cred.cmcred_euid);
  19. printf("%d groups:", cred.cmcred_ngroups - 1);
  20. for (i = 1; i < cred.cmcred_ngroups; i++)
  21. printf(" %d", cred.cmcred_groups[i]);
  22. printf("\n");
  23. }
  24. Writen(sockfd, buf, n);
  25. }
  26. if (n < 0 && errno == EINTR)
  27. goto again;
  28. else if (n < 0)
  29. err_sys("str_echo: read error");
  30. }