1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
unit grp;
interface
uses
initc,unixtype,baseunix,ctypes;
{$IFDEF FPC}
{$PACKRECORDS C}
{$ENDIF}
const
External_library= clib; {Setup as you need}
_PATH_GROUP = '/etc/group';
Type
PGroup = ^TGroup;
PPGroup = ^PGroup;
TGroup = record
gr_name : pchar; { group name }
gr_passwd : pchar; { group password }
gr_gid : gid_t; { group id }
gr_mem : ppchar; { group members }
end;
procedure fpendgrent; cdecl;external External_library name 'endgrent';
function fpgetgrent:pgroup; cdecl;external External_library name 'getgrent';
function fpgetgrgid (id:gid_t):pgroup; cdecl;external External_library name 'getgrgid';
function fpgetgrnam (name:pchar):pgroup; cdecl;external External_library name 'getgrnam';
{$ifdef BSD}
function fpgroup_from_gid (gid:gid_t; nogrup:cint):pchar; cdecl;external External_library name 'group_from_gid';
{$endif}
function fpsetgrent:cint;cdecl;external External_library name 'setgrent';
function fpgetgrgid_r (id:gid_t; grp:Pgroup; buffer:pchar; buffersize:size_t; grresult:PPgroup):cint;cdecl;external External_library name 'getgrgid_r';
function fpgetgrnam_r (nam:pchar; grp:Pgroup; buffer:pchar; buffersize:size_t; grresult:PPgroup):cint;cdecl;external External_library name 'getgrnam_r';
{$ifndef Darwin}
function fpgetgrent_r (grp:Pgroup; buffer:pchar; buffersize:size_t; grresult:PPgroup):cint;cdecl;external External_library name 'getgrent_r';
{$endif}
function fpsetgroupent (stayopen:cint):cint;cdecl;external External_library name 'setgroupent';
{$ifdef Darwin}
procedure fpsetgrfile(name:pchar); cdecl; external external_library name 'setgrfile';
{$endif}
// FreeBSD has these, Linux too if USE_BSD is defined. Darwin too.
// Darwin uses ints instead of gid's though, except for setgroups.
function fpsetgroups(n:size_t;groups:pgid):cint; cdecl; external External_Library name 'setgroups';
function fpgetgrouplist(user:pchar;group:tgid;groups:pgid;ngroups:pcint):cint; cdecl; external External_Library name 'getgrouplist';
function fpinitgroups(user:pchar;group:tgid):cint;cdecl; external External_Library name 'initgroups';
implementation
end.
|