| 1234567891011121314151617181920212223242526272829303132333435 |
- #include "unp.h"
- ssize_t read_cred(int, void *, size_t, struct cmsgcred *);
- void
- str_echo(int sockfd)
- {
- ssize_t n;
- int i;
- char buf[MAXLINE];
- struct cmsgcred cred;
- again:
- while ( (n = read_cred(sockfd, buf, MAXLINE, &cred)) > 0) {
- if (cred.cmcred_ngroups == 0) {
- printf("(no credentials returned)\n");
- } else {
- printf("PID of sender = %d\n", cred.cmcred_pid);
- printf("real user ID = %d\n", cred.cmcred_uid);
- printf("real group ID = %d\n", cred.cmcred_gid);
- printf("effective user ID = %d\n", cred.cmcred_euid);
- printf("%d groups:", cred.cmcred_ngroups - 1);
- for (i = 1; i < cred.cmcred_ngroups; i++)
- printf(" %d", cred.cmcred_groups[i]);
- printf("\n");
- }
- Writen(sockfd, buf, n);
- }
- if (n < 0 && errno == EINTR)
- goto again;
- else if (n < 0)
- err_sys("str_echo: read error");
- }
|