Системное программирование в UNIX средствами Free Pascal


         

This will only work if


uses linux;
Function Chown(PathName:Pathstr; Owner_id,Group_id:Longint):Boolean;
Например:
Uses linux;
Var UID,GID : Longint;
    F : Text;
   
begin
 
  Writeln (' This will only work if you are root.');
  Write ('Enter a UID : ');readln(UID);
  Write ('Enter a GID : ');readln(GID);
  Assign (f,'test.txt');
  Rewrite (f);
  Writeln (f,'The owner of this file should become : ');
  Writeln (f,'UID : ',UID);
  Writeln (f,'GID : ',GID);
  Close (F);
  if not Chown ('test.txt',UID,GID) then
    if LinuxError=Sys_EPERM then
      Writeln ('You are not root !')
    else
      Writeln ('Chmod failed with exit code : ',LinuxError)
  else
    Writeln ('Changed owner successfully !');
end.
Вызов имеет три аргумента: pathname, указывающий имя файла, owner_id, задающий нового владельца, и group_id, задающий новую группу. Возвращаемое значение retval равно true в случае успеха и false – в случае ошибки.
В системе, удовлетворяющей спецификации XSI, вызывающий процесс должен быть процессом суперпользователя или владельца файла (точнее, действующий идентификатор вызывающего процесса должен либо совпадать с идентификатором владельца файла, либо быть равным 0). При несанкционированной попытке изменить владельца файла выставляется код ошибки Sys_EPERM.
Поскольку вызов chown разрешен текущему владельцу файла, обычный пользователь может передать свой файл другому пользователю. При этом пользователь не сможет впоследствии отменить это действие, так как идентификатор пользователя уже не будет совпадать с идентификатором пользователя файла. Следует также обратить внимание на то, что при смене владельца файла в целях предотвращения неправомерного использования вызова chown для получения системных полномочий, сбрасываются права доступа set-user-id и set-group-id. (Что могло бы произойти, если бы это было не так?)

Содержание  Назад  Вперед