makeauth.lisp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. (in-package :hurd)
  2. (defcfun ("auth_makeauth" %auth-makeauth)
  3. err
  4. (handle auth-t)
  5. (other-handles :pointer)
  6. (other-handles-poly msg-type-name)
  7. (other-handles-len msg-type-number)
  8. (euids :pointer)
  9. (euids-len msg-type-number)
  10. (auids :pointer)
  11. (auids-len msg-type-number)
  12. (egids :pointer)
  13. (egids-len msg-type-number)
  14. (agids :pointer)
  15. (agids-len msg-type-number)
  16. (new-handle :pointer))
  17. (defun auth-makeauth (auth other-auths
  18. other-auth-poly
  19. eff-user
  20. avail-user)
  21. "Create a new authentication handle."
  22. (let ((euids (get-foreign-uids eff-user))
  23. (egids (get-foreign-gids eff-user))
  24. (auids (get-foreign-uids avail-user))
  25. (agids (get-foreign-gids avail-user))
  26. (total (length other-auths)))
  27. (with-cleanup (free-memory-list (list euids egids auids agids))
  28. (with-foreign-pointer (new-handle (foreign-type-size 'auth-t))
  29. (with-foreign-pointer (other-handles-ptr (* total
  30. (foreign-type-size 'auth-t)))
  31. (loop for i from 0 below total
  32. for handle in other-auths
  33. do (setf (mem-aref other-handles-ptr 'auth-t i)
  34. handle))
  35. (let ((err (%auth-makeauth auth other-handles-ptr
  36. other-auth-poly
  37. total
  38. (first euids) (second euids)
  39. (first auids) (second auids)
  40. (first egids) (second egids)
  41. (first agids) (second agids)
  42. new-handle)))
  43. (select-error err
  44. (mem-ref new-handle 'auth-t))))))))