restrict-auth.lisp 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. (in-package :hurd)
  2. (defcfun ("io_restrict_auth" %io-restrict-auth)
  3. err
  4. (file port)
  5. (new-object port-pointer)
  6. (uids :pointer)
  7. (uids-len msg-type-number)
  8. (gids :pointer)
  9. (gids-len msg-type-number))
  10. (defun io-restrict-auth (file user)
  11. "Return a new port restricted to iouser 'user'."
  12. (declare (type fixnum file)
  13. (type iouser user))
  14. (let* ((uids-l (get-foreign-uids user))
  15. (uids-ptr (first uids-l))
  16. (uids-len (second uids-l))
  17. (gids-l (get-foreign-gids user))
  18. (gids-ptr (first gids-l))
  19. (gids-len (second gids-l)))
  20. (with-cleanup (free-memory-list (list uids-ptr gids-ptr))
  21. (with-foreign-pointer (new-object (foreign-type-size 'port))
  22. (select-error (%io-restrict-auth file
  23. new-object
  24. uids-ptr
  25. uids-len
  26. gids-ptr
  27. gids-len)
  28. (mem-ref new-object 'port))))))