ФЭНДОМ


НАЗВАНИЕ

attach, auth - установить соединение, авторизоваться

РЕЗЮМЕ

size[4] Tauth tag[2] afid[4] uname[s] aname[s]

size[4] Rauth tag[2] aqid[13]

size[4] Tattach tag[2] fid[4] afid[4] uname[s] aname[s]

size[4] Rattach tag[2] qid[13]


ОПИСАНИЕ

Здесь size[n] - total byte count of the following data, tag[n] - поле-идентификатор сигнала, ответ на него будет содержать такой же tag. Для одного соединения не может быть двух одинаковых тагов, если только не указано значение `NOTAG`.

Аttach-сигнал служит приглашением к установлению соединения с файл-сервером. Сигнал фактически идентифицирует пользователя (uname) и позволяет выбрать точку доступа (aname). Значение afid фактически определяется в процессе авторизации с помощью auth-сигнала, как будет показано ниже.

В результате attach-транзакции, клиент получает доступ к файлу или каталогу, указанному в поле fid; этот каталог будет корневым для клиентского процесса; здесь fid - аналог файлового дескриптора, только имеющего ряд отличий (см. intro(5)). В случае, если указанный в fid каталог или файл уже используется, генерируется сообщение об ошибке. Кроме того, сервер назначает каждому запрашиваемому файлу уникальный идентификатор qid; соединение может иметь множество fid, указывающих на один файл, но только один qid.

Если клиент не желает авторизовываться или авторизация не обязательна, то в attach-сигнале в поле afid указывается значение `NOFID`, определеное как (u32int)~0 в файле<fcall.h>. Иначе клиент должен пройти авторизацию, тем самым косвенно задав значение поляafid.

Auth-сигнал содержит поле afid, new fid to be established for authentication, а также uname и aname, которые затем будут использованы в attach-сигнале. Если сервер не требует авторизации, то в ответ на Tauth он вернет Rerror.

Если сервер требует авторизации, то он возвращает aqid, указывающее на файл типа QTAUTH (см. intro(5)), который можно считывать и перезаписывать (используя read и write), чтобы запустить протокол авторизации, элементы которого сами по себе не являются частью протокола Styx.

Как только авторизация завершена, такой же afid используется в attach-сигнале пользователя, запросившего доступ. Один и тот же afid может быть использован для нескольких attach-сигналов, содержащих одинаковые uname и aname.

ENTRY POINTS

Attach-транзакция генерируется ядром системы (см. intro(3)) каждый раз, когда системная функция обрабатывает файловое имя, начинающееся со знака `#`. Так, например, системная функция Sys-pipe(2) запрашивает доступ к файлам и каталогам устройства pipe(3); вызов функции mount (см. sys-bind(2)) генерирует attach-сигнал к удаленному файл-серверу; когда стартует ядро системы, attach-сигнал посылается устройству ядраroot(3), а затем файл-серверу.

Auth-транзакция генерируется системной функцией fauth(2) или первым же вызовом функции mount для неинициализированного соединения.

Смотри также

sys-bind(2), sys-fauth(2), intro(3), root(3), version(5)