HURD_CRITICAL_BEGIN; __mutex_lock (&_hurd_id.lock); _hurd_check_ids ();  #define MAKE(genaux,uidgid) 						    \ make_list (&new ## genaux ## uidgid ## s, 				    \ &nnew ## genaux ## uidgid ## s,				    \ _hurd_id.genaux.uidgid ## s,				    \ _hurd_id.genaux.n ## uidgid ## s,				    \ genaux ## uidgid ## s,					    \ n ## genaux ## uidgid ## s)  err = MAKE (gen, uid); if (!err) MAKE (aux, uid); if (!err) MAKE (gen, gid); if (!err) MAKE (aux, gid); #undef MAKE  __mutex_unlock (&_hurd_id.lock); HURD_CRITICAL_END;     if (!err) err = __USEPORT (AUTH, __auth_makeauth (port, &addauth, MACH_MSG_TYPE_MOVE_SEND, 1, newgenuids, nnewgenuids, newauxuids, nnewauxuids, newgengids, nnewgengids, newauxgids, nnewauxgids, &newauth));  #define freeup(array, len) \ if (array) \ vm_deallocate (mach_task_self (), (vm_address_t) array, \ len * sizeof (uid_t));  freeup (genuids, ngenuids); freeup (auxuids, nauxuids); freeup (gengids, ngengids); freeup (auxgids, nauxgids); freeup (newgenuids, nnewgenuids); freeup (newauxuids, nnewauxuids); freeup (newgengids, nnewgengids); freeup (newauxgids, nnewauxgids); #undef freeup  if (err) return err;
_S_msg_add_auth (mach_port_t me,		 auth_t addauth){  error_t err;  auth_t newauth;  if (err = __USEPORT (AUTH,		       __auth_makeauth (port,					&addauth, MACH_MSG_TYPE_MOVE_SEND, 1,					NULL, 0,					NULL, 0,					NULL, 0,					NULL, 0,					&newauth)))    return err;  err = __setauth (newauth);  __mach_port_deallocate (__mach_task_self (), newauth);  if (err)    return errno;  return 0;}