/* test of auth_user/server authenticate: send part */ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include #include #include #include #include #include #include #include #include #include #include #include #define SOCK_PATH "auth_socket" int main (void) { mach_port_t rendezvous = NULL; mach_port_t newport; error_t err; int sfd; struct sockaddr_un addr = { 0 }; ssize_t ns; char wbuf[30]; addr.sun_family = AF_UNIX; strncpy(addr.sun_path, SOCK_PATH, sizeof(addr.sun_path) - 1); sfd = socket (AF_UNIX, SOCK_DGRAM, 0); if (sfd == -1) { perror ("socket"); exit(EXIT_FAILURE); } printf("auth_send.c: Socket file descriptor = %d\n", sfd); if (connect(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_un)) == -1) { close(sfd); perror ("connect"); exit(EXIT_FAILURE); } printf("auth_send.c: Sending via datagram socket\n"); rendezvous = __mach_reply_port (); printf ("auth_send.c: rendezvous = %d\n", (int)rendezvous); err = mach_port_insert_right (mach_task_self (), rendezvous, rendezvous, MACH_MSG_TYPE_MAKE_SEND); printf ("auth_send.c: mach_port_insert_right() err = %d\n", err); if (err) goto out; sprintf(wbuf, "%d", (int)rendezvous); printf("auth_send.c: Sent rendezvous port = %d\n", (int)rendezvous); #if 0 ns = send(sfd, wbuf, 4, 0); #else err = HURD_DPORT_USE (sfd, __socket_send (port, MACH_PORT_NULL, 0, wbuf, 4, NULL, MACH_MSG_TYPE_COPY_SEND, 0, NULL, 0, &ns)); #endif if (ns == -1) { perror ("send"); exit(EXIT_FAILURE); } printf("auth_send.c: send() returned %ld bytes\n", (long) ns); // err = __USEPORT (AUTH, __auth_user_authenticate (port, // rendezvous, MACH_MSG_TYPE_COPY_SEND, err = __USEPORT (AUTH, auth_user_authenticate (port, rendezvous, MACH_MSG_TYPE_MAKE_SEND, &newport)); out: printf ("auth_send.c: newport=%d\n", (int)newport); __mach_port_deallocate (__mach_task_self (), rendezvous); __mach_port_deallocate (__mach_task_self (), newport); printf ("auth_send.c: err = %d\n", err); return err; }