diff options
| author | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-02-02 19:26:40 +0000 |
|---|---|---|
| committer | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-02-02 19:26:40 +0000 |
| commit | 2fb03baacf14c6b54b26c240412f18813f053cea (patch) | |
| tree | e4abdfb11b9bdd02cab70bd0e44f7740066628eb /packages/users | |
| parent | 8fd37eb8bdbba17deeb1393db02dea30eebf6977 (diff) | |
| download | fpc-2fb03baacf14c6b54b26c240412f18813f053cea.tar.gz | |
* grp+pwd: freebsd+darwin compat. Attempt at fixing demoes unsuccesful.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@10163 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/users')
| -rw-r--r-- | packages/users/Makefile | 214 | ||||
| -rw-r--r-- | packages/users/Makefile.fpc | 6 | ||||
| -rw-r--r-- | packages/users/examples/testpass.pp | 9 | ||||
| -rw-r--r-- | packages/users/examples/testpass2.pp | 56 | ||||
| -rw-r--r-- | packages/users/src/crypth.pp | 14 | ||||
| -rw-r--r-- | packages/users/src/grp.pp | 101 | ||||
| -rw-r--r-- | packages/users/src/pwd.pp | 171 | ||||
| -rw-r--r-- | packages/users/src/users.pp | 78 |
8 files changed, 399 insertions, 250 deletions
diff --git a/packages/users/Makefile b/packages/users/Makefile index 872d4b3714..6adb742747 100644 --- a/packages/users/Makefile +++ b/packages/users/Makefile @@ -1,5 +1,5 @@ # -# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/01/26] +# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/02/02] # default: all MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded @@ -243,322 +243,322 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(F override PACKAGE_NAME=users override PACKAGE_VERSION=2.0.0 ifeq ($(FULL_TARGET),i386-linux) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users shadow crypth endif ifeq ($(FULL_TARGET),i386-go32v2) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-win32) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-os2) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-freebsd) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-beos) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-netbsd) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-solaris) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-qnx) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-netware) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-openbsd) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-wdosx) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-darwin) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-emx) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-watcom) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-netwlibc) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-wince) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-embedded) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-symbian) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),m68k-linux) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users shadow crypth endif ifeq ($(FULL_TARGET),m68k-freebsd) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),m68k-netbsd) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),m68k-amiga) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),m68k-atari) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),m68k-openbsd) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),m68k-palmos) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),m68k-embedded) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),powerpc-linux) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users shadow crypth endif ifeq ($(FULL_TARGET),powerpc-netbsd) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),powerpc-amiga) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),powerpc-macos) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),powerpc-darwin) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),powerpc-morphos) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),powerpc-embedded) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),sparc-linux) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users shadow crypth endif ifeq ($(FULL_TARGET),sparc-netbsd) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),sparc-solaris) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),sparc-embedded) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),x86_64-linux) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users shadow crypth endif ifeq ($(FULL_TARGET),x86_64-freebsd) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),x86_64-darwin) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),x86_64-win64) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),x86_64-embedded) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),arm-linux) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users shadow crypth endif ifeq ($(FULL_TARGET),arm-palmos) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),arm-wince) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),arm-gba) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),arm-nds) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),arm-embedded) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),arm-symbian) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),powerpc64-linux) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users shadow crypth endif ifeq ($(FULL_TARGET),powerpc64-darwin) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),powerpc64-embedded) -override TARGET_UNITS+=grp pwd shadow users +override TARGET_UNITS+=grp pwd users endif ifeq ($(FULL_TARGET),i386-linux) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 testpass endif ifeq ($(FULL_TARGET),i386-go32v2) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-win32) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-os2) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-freebsd) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-beos) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-netbsd) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-solaris) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-qnx) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-netware) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-openbsd) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-wdosx) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-darwin) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-emx) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-watcom) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-netwlibc) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-wince) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-embedded) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),i386-symbian) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),m68k-linux) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 testpass endif ifeq ($(FULL_TARGET),m68k-freebsd) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),m68k-netbsd) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),m68k-amiga) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),m68k-atari) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),m68k-openbsd) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),m68k-palmos) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),m68k-embedded) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),powerpc-linux) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 testpass endif ifeq ($(FULL_TARGET),powerpc-netbsd) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),powerpc-amiga) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),powerpc-macos) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),powerpc-darwin) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),powerpc-morphos) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),powerpc-embedded) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),sparc-linux) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 testpass endif ifeq ($(FULL_TARGET),sparc-netbsd) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),sparc-solaris) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),sparc-embedded) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),x86_64-linux) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 testpass endif ifeq ($(FULL_TARGET),x86_64-freebsd) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),x86_64-darwin) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),x86_64-win64) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),x86_64-embedded) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),arm-linux) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 testpass endif ifeq ($(FULL_TARGET),arm-palmos) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),arm-wince) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),arm-gba) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),arm-nds) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),arm-embedded) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),arm-symbian) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),powerpc64-linux) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 testpass endif ifeq ($(FULL_TARGET),powerpc64-darwin) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif ifeq ($(FULL_TARGET),powerpc64-embedded) -override TARGET_EXAMPLES+=testuser testpass +override TARGET_EXAMPLES+=testuser testpass2 endif override INSTALL_FPCPACKAGE=y ifeq ($(FULL_TARGET),i386-linux) diff --git a/packages/users/Makefile.fpc b/packages/users/Makefile.fpc index 6f750ec7ac..08b596170e 100644 --- a/packages/users/Makefile.fpc +++ b/packages/users/Makefile.fpc @@ -7,8 +7,10 @@ name=users version=2.0.0 [target] -units=grp pwd shadow users -examples=testuser testpass +units=grp pwd users +units_linux=shadow crypth +examples=testuser testpass2 +examples_linux=testpass [require] libc=y diff --git a/packages/users/examples/testpass.pp b/packages/users/examples/testpass.pp index 8652d30302..3c28c03f5a 100644 --- a/packages/users/examples/testpass.pp +++ b/packages/users/examples/testpass.pp @@ -1,9 +1,10 @@ Program TestPass; - +{$mode delphi} {Test the user's password} {$DEFINE DEBUG} -uses shadow, pwd, strings, {crypt_h,} cmem; +// The funcs in shadow are linux only. +uses {$ifdef linux}shadow, {$endif} pwd ,crypth ; Var strUserName, Password : String; @@ -30,7 +31,7 @@ Begin {$IFDEF DEBUG} Writeln('No shadow entry'); {$ENDIF} - pEntry := getpwnam(A); + pEntry := fpgetpwnam(A); If pEntry = nil then Begin {$IFDEF DEBUG} @@ -78,7 +79,7 @@ Begin Writeln('Salt is : ',PCSalt); {$ENDIF} PCResult := crypt(PCPass, PCSalt); - ResultPass := StrPas(PCResult); + ResultPass := PCResult; {$IFDEF DEBUG} Writeln('From passwd/shadow : ',EncPass); Writeln('From crypt : ',ResultPass); diff --git a/packages/users/examples/testpass2.pp b/packages/users/examples/testpass2.pp new file mode 100644 index 0000000000..1d15d0a008 --- /dev/null +++ b/packages/users/examples/testpass2.pp @@ -0,0 +1,56 @@ +Program TestPass2; + +Uses pwd,grp,baseunix; + +Procedure printpchar(fieldname:String;p:pchar); + +Begin + If assigned(p) Then + Begin + write(fieldname); + write(':',' ':15-length(fieldname)); + writeln(p); + End; +End; + +Var p : PPasswd; + supplementary_gids : array[0..99] Of gid_t; + i,nrgids: cint; + pgrp: PGroup; + +Begin + p := fpgetpwnam('marcov'); + If assigned(p) Then + Begin + printpchar('pw_name',p^.pw_name); + printpchar('pw_passwd',p^.pw_passwd); + writeln('pw_uid:',' ':9,p^.pw_uid); + writeln('pw_gid:',' ':9,p^.pw_gid); + {$ifdef BSD} + printpchar('pw_change',p^.pw_change); + printpchar('pw_class',p^.pw_class); + {$endif} + printpchar('pw_gecos',p^.pw_gecos); + printpchar('pw_dir',p^.pw_dir); + printpchar('pw_shell',p^.pw_shell); + {$ifdef BSD} + printpchar('pw_expire',p^.pw_expire); + printpchar('pw_fields',p^.pw_fields); + {$endif} + End; + nrgids := 100; + If fpgetgrouplist(p^.pw_name,p^.pw_gid,@supplementary_gids,@nrgids)<>-1 Then + Begin + Write ('Supplementary groups:'); + For i:=0 To nrgids-1 Do + Begin + pgrp := fpgetgrgid(supplementary_gids[i]); + If assigned(pgrp) Then + write(pgrp^.gr_name,' (',supplementary_gids[i],') ') + Else + write(' ???? (',supplementary_gids[i],') ') + End; + writeln; + End; + writeln; +End. diff --git a/packages/users/src/crypth.pp b/packages/users/src/crypth.pp new file mode 100644 index 0000000000..0bb5436489 --- /dev/null +++ b/packages/users/src/crypth.pp @@ -0,0 +1,14 @@ +unit crypth; + +interface + +uses BaseUnix,initc; + +{$ifdef Linux}{$linklib crypt}{$endif} + +Const libname ={$ifdef Linux}'crypt'{$else}clib{$endif}; + +function crypt(key,salt:pchar):pchar;cdecl; external libname name 'crypt'; + +implementation +end.
\ No newline at end of file diff --git a/packages/users/src/grp.pp b/packages/users/src/grp.pp index 16f92e92ef..e81e658321 100644 --- a/packages/users/src/grp.pp +++ b/packages/users/src/grp.pp @@ -1,64 +1,59 @@ unit grp; + interface -{ - Automatically converted by H2Pas 0.99.15 from grp.h - The following command line parameters were used: - -D - -l - c - -p - -s - -u - grp - -v - grp.h -} - - const - External_library='c'; {Setup as you need} - - { Pointers to basic pascal types, inserted by h2pas conversion program.} - Type - PLongint = ^Longint; - PSmallInt = ^SmallInt; - PByte = ^Byte; - PWord = ^Word; - PDWord = ^DWord; - PDouble = ^Double; +uses + initc,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'; -type - PFILE = Pointer; - __gid_t = Longint; - P__gid_t = ^__gid_t; - size_t = longint; - - PGroup = ^group; - group = record - gr_name : Pchar; - gr_passwd : Pchar; - gr_gid : __gid_t; - gr_mem : ^Pchar; - end; - TGroup = Group; - PPGROUP = ^PGroup; - -procedure setgrent;cdecl;external External_library name 'setgrent'; -procedure endgrent;cdecl;external External_library name 'endgrent'; -function getgrent:Pgroup;cdecl;external External_library name 'getgrent'; -function fgetgrent(__stream:PFILE):Pgroup;cdecl;external External_library name 'fgetgrent'; -function getgrgid(__gid:__gid_t):Pgroup;cdecl;external External_library name 'getgrgid'; -function getgrnam(__name:Pchar):Pgroup;cdecl;external External_library name 'getgrnam'; -function getgrgid_r(__gid:__gid_t; __resultbuf:Pgroup; __buffer:Pchar; __buflen:size_t; __result:PPgroup):longint;cdecl;external External_library name 'getgrgid_r'; -function getgrnam_r(__name:Pchar; __resultbuf:Pgroup; __buffer:Pchar; __buflen:size_t; __result:PPgroup):longint;cdecl;external External_library name 'getgrnam_r'; -function fgetgrent_r(__stream:PFILE; __resultbuf:Pgroup; __buffer:Pchar; __buflen:size_t; __result:PPgroup):longint;cdecl;external External_library name 'fgetgrent_r'; -function setgroups(__n:size_t; __groups:P__gid_t):longint;cdecl;external External_library name 'setgroups'; -function getgrouplist(__user:Pchar; __group:__gid_t; __groups:P__gid_t; __ngroups:Plongint):longint;cdecl;external External_library name 'getgrouplist'; -function initgroups(__user:Pchar; __group:__gid_t):longint;cdecl;external External_library name 'initgroups'; +{$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 diff --git a/packages/users/src/pwd.pp b/packages/users/src/pwd.pp index 739bae99c6..e5757d82a3 100644 --- a/packages/users/src/pwd.pp +++ b/packages/users/src/pwd.pp @@ -1,64 +1,139 @@ unit pwd; + interface -{ - Automatically converted by H2Pas 0.99.15 from pwd.H - The following command line parameters were used: - -D - -l - c - -p - -s - -u - pwd - -v - pwd.H -} +uses + initc,baseunix,ctypes; + +{$IFDEF FPC} +{$PACKRECORDS C} +{$ENDIF} const - External_library='c'; {Setup as you need} + External_library= clib; {Setup as you need} -{ Pointers to basic pascal types, inserted by h2pas conversion program.} -Type - PLongint = ^Longint; - PSmallInt = ^SmallInt; - PByte = ^Byte; - PWord = ^Word; - PDWord = ^DWord; - PDouble = ^Double; + const + _PATH_PWD = '/etc'; + _PATH_PASSWD = '/etc/passwd'; + _PASSWD = 'passwd'; + _PATH_MASTERPASSWD = '/etc/master.passwd'; +{$ifdef Darwin} + _PATH_MASTERPASSWD_LOCK = '/etc/ptmp'; +{$endif} + _MASTERPASSWD = 'master.passwd'; -{$PACKRECORDS C} + _PATH_MP_DB = '/etc/pwd.db'; + _MP_DB = 'pwd.db'; + _PATH_SMP_DB = '/etc/spwd.db'; + _SMP_DB = 'spwd.db'; + _PATH_PWD_MKDB = '/usr/sbin/pwd_mkdb'; + + +{$ifdef BSD} + _PW_VERSION_MASK = #$F0; + + function _PW_VERSIONED(x,v : longint) : cuchar; inline; + + + const + _PW_KEYBYNAME = #$31; { stored by name } + _PW_KEYBYNUM = #$32; { stored by entry in the "file"} + _PW_KEYBYUID = #$33; { stored by uid } + {$ifdef FreeBSD} + _PW_KEYYPENABLED = #$34; { YP is enabled } + _PW_KEYYPBYNUM = #$35; { special +@netgroup entries } + {$endif} + { The database also contains a key to indicate the format version of + * the entries therein. There may be other, older versioned entries + * as well. } + +const + {$ifdef FreeBSD} + _PWD_VERSION_KEY = #$FF+'VERSION'; + _PWD_CURRENT_VERSION = #$4; + {$endif} + _PASSWORD_EFMT1 = '_'; { extended encryption format } + _PASSWORD_LEN = 128; { max length, not counting NULL } + {$ifdef Darwin} + _PASSWORD_NOUID = $01; (* flag for no specified uid. *) + _PASSWORD_NOGID = $02; (* flag for no specified gid. *) + _PASSWORD_NOCHG = $04; (* flag for no specified change. *) + _PASSWORD_NOEXP =$08; (* flag for no specified expire. *) + _PASSWORD_WARNDAYS = 14; (* days to warn about expiry *) + _PASSWORD_CHGNOW = -1; (* special day to force password + * change at next login *) + {$endif} + +{$endif} type - PFile = Pointer; - __uid_t = longint; - __gid_t = longint; - - Ppasswd = ^passwd; - passwd = record - pw_name : Pchar; - pw_passwd : Pchar; - pw_uid : __uid_t; - pw_gid : __gid_t; - pw_gecos : Pchar; - pw_dir : Pchar; - pw_shell : Pchar; - end; - TPasswordRecord = passwd; - PPasswordRecord = ^TPasswordRecord; - -procedure setpwent;cdecl; external External_library name 'setpwent'; -procedure endpwent;cdecl; external External_library name 'endpwent'; -function getpwent:Ppasswd;cdecl;external External_library name 'getpwent'; -function fgetpwent(__stream:PFILE):Ppasswd;cdecl;external External_library name 'fgetpwent'; -function putpwent(__p:Ppasswd; __f:PFILE):longint;cdecl;external External_library name 'putpwent'; -function getpwuid(__uid:__uid_t):Ppasswd;cdecl;external External_library name 'getpwuid'; -function getpwnam(__name:Pchar):Ppasswd;cdecl;external External_library name 'getpwnam'; -function getpw(__uid:__uid_t; __buffer:Pchar):longint;cdecl;external External_library name 'getpw'; +{ Darwin uses __darwin_time_t, but that is an alias for time_t } + PPasswd = ^TPasswd; + PPPasswd = ^PPasswd; + Passwd = record + pw_name : pchar; { user name } + pw_passwd : pchar; { encrypted password } + pw_uid : Tuid; { user uid } + pw_gid : Tgid; { user gid } + {$ifdef bsd} + pw_change : Ttime platform; { password change time } + pw_class : pchar platform; { user access class } + {$endif} + pw_gecos : pchar; { Honeywell login info } + pw_dir : pchar; { home directory } + pw_shell : pchar; { default shell } + {$ifdef bsd} + pw_expire : Ttime platform; { account expiration } + {$ifdef FreeBSD} + pw_fields : cint platform; { internal: fields filled in } + {$endif} + {$endif} + end; + TPasswd = Passwd; + + +{$ifdef FreeBSD} +const + _PWF_NAME = 1; + _PWF_PASSWD = 2; + _PWF_UID = 4; + _PWF_GID = 8; + _PWF_CHANGE = $10; + _PWF_CLASS = $20; + _PWF_GECOS = $40; + _PWF_DIR = $80; + _PWF_SHELL = $100; + _PWF_EXPIRE = $200; + + _PWF_SOURCE = $3000; + _PWF_FILES = $1000; + _PWF_NIS = $2000; + _PWF_HESIOD = $3000; +{$endif} + +function fpgetpwnam (name:pchar):PPasswd; cdecl;external External_library name 'getpwnam'; +function fpgetpwuid (id:tuid):PPasswd;cdecl;external External_library name 'getpwuid'; + +procedure fpendpwent;cdecl;external External_library name 'endpwent'; +function fpgetpwent:ppasswd;cdecl;external External_library name 'getpwent'; +procedure fpsetpwent;cdecl;external External_library name 'setpwent'; + +function fpgetpwnam_r (namepara1:pchar; pwd:Ppasswd; buffer:pchar; bufsize:size_t; pwresult:PPpasswd):cint;cdecl;external External_library name 'getpwnam_r'; +function fpgetpwuid_r (uid:uid_t; pwd:Ppasswd; buffer:pchar; buffersize:size_t; pwresult:PPpasswd):cint;cdecl;external External_library name 'getpwuid_r'; +{$ifndef Darwin} +function fpgetpwent_r (pwd:Ppasswd; buffer:pchar; buffersize:size_t; pwresult:PPpasswd):cint;cdecl;external External_library name 'getpwent_r'; +{$endif} implementation +{$ifdef BSD} +function _PW_VERSIONED (x,v : longint) : cuchar; inline; + +begin + _PW_VERSIONED:= (x and $CF) or (v shl 4); +end; +{$endif} end. diff --git a/packages/users/src/users.pp b/packages/users/src/users.pp index 51e0e41003..95a02e6e1b 100644 --- a/packages/users/src/users.pp +++ b/packages/users/src/users.pp @@ -2,21 +2,23 @@ unit users; Interface {$mode delphi} -uses baseunix,pwd,shadow,grp,SysUtils,Classes; +uses BaseUnix,pwd,grp, {$ifdef Linux} shadow{$endif},SysUtils,Classes; Type EUserLookupError = Class(Exception); EGroupLookupError = Class(Exception); EShadowLookupError = Class(Exception); + TPasswordRecord = Tpasswd; + PPasswordRecord = ^TPasswordRecord; { User functions } Function getpwnam(Const UserName: String) : PPasswordRecord; Procedure GetUserData(Const UserName : String; Var Data : TPasswordRecord); overload; -Procedure GetUserData(Uid : Integer; Var Data : TPasswordRecord); overload; -function GetUserName(UID : Integer) : String; -function GetUserId(Const UserName : String) : Integer; -function GetUserGid(Const UserName : String) : Integer; +Procedure GetUserData(Uid : TUID; Var Data : TPasswordRecord); overload; +function GetUserName(UID : TUID) : String; +function GetUserId(Const UserName : String) : TUID; +function GetUserGid(Const UserName : String) : TGID; function GetUserDir(Const UserName : String): String; function GetUserDescription(Const UserName : String): String; Procedure GetUserList(List : Tstrings);overload; @@ -26,20 +28,23 @@ Procedure GetUserList(List : TStrings; WithIDs : Boolean);overload; Function getgrnam(Const GroupName: String) : PGroup; Procedure GetGroupData(Const GroupName : String; Var Data : TGroup); overload; -Procedure GetGroupData(Gid : Integer; Var Data : TGroup); overload; -function GetGroupName(GID : Integer) : String; -function GetGroupId(Const GroupName : String) : Integer; +Procedure GetGroupData(Gid : TGID; Var Data : TGroup); overload; +function GetGroupName(GID : TGID) : String; +function GetGroupId(Const GroupName : String) : TGID; Procedure GetGroupList(List : Tstrings);overload; Procedure GetGroupList(List : TStrings; WithIDs : Boolean);overload; -Procedure GetGroupMembers(GID : Integer;List : TStrings);overload; +Procedure GetGroupMembers(GID : TGID;List : TStrings);overload; Procedure GetGroupMembers(Const GroupName : String;List : TStrings);overload; { Shadow password functions } +{$ifdef Linux} function getspnam(UserName : String): PPasswordFileEntry; function sgetspent(Line : String): PPasswordFileEntry; + Procedure GetUserShadowData(Const UserName : String; Var Data : TPasswordFileEntry);overload; -Procedure GetUserShadowData(UID : Integer; Var Data : TPasswordFileEntry);overload; +Procedure GetUserShadowData(UID : TUID; Var Data : TPasswordFileEntry);overload; +{$endif} { Extra functions } @@ -59,7 +64,7 @@ EShadowNotPermitted = 'Not enough permissions to access shadow password file'; Function getpwnam(Const UserName: String) : PPasswordRecord; begin - Result:=pwd.getpwnam(Pchar(UserName)); + Result:=pwd.fpgetpwnam(Pchar(UserName)); end; Procedure GetUserData(Const UserName : String; Var Data : TPasswordRecord); @@ -67,36 +72,36 @@ Procedure GetUserData(Const UserName : String; Var Data : TPasswordRecord); Var P : PPasswordRecord; begin - P:=Getpwnam(UserName); + P:=fpGetpwnam(pchar(UserName)); If P<>Nil then Data:=P^ else Raise EUserLookupError.CreateFmt(ENoSuchUserName,[UserName]); end; -Procedure GetUserData(Uid : Integer; Var Data : TPasswordRecord); +Procedure GetUserData(Uid : tuid; Var Data : TPasswordRecord); Var P : PPasswordRecord; begin - P:=Getpwuid(Uid); + P:=fpGetpwuid(Uid); If P<>Nil then Data:=P^ else Raise EUserLookupError.CreateFmt(ENoSuchUserID,[Uid]); end; -function GetUserName(UID : Integer) : String; +function GetUserName(UID : TUID) : String; Var UserData : TPasswordRecord; begin GetuserData(UID,UserData); - Result:=strpas(UserData.pw_Name); + Result:=UserData.pw_Name; end; -function GetUserId(Const UserName : String) : Integer; +function GetUserId(Const UserName : String) : TUID; Var UserData : TPasswordRecord; @@ -106,7 +111,7 @@ begin Result:=UserData.pw_uid; end; -function GetUserGId(Const UserName : String) : Integer; +function GetUserGId(Const UserName : String) : TGID; Var UserData : TPasswordRecord; @@ -123,7 +128,7 @@ Var begin GetUserData(UserName,UserData); - Result:=strpas(UserData.pw_dir); + Result:=UserData.pw_dir; end; function GetUserDescription(Const UserName : String): String; @@ -149,10 +154,10 @@ Var begin List.Clear; - setpwent; + fpsetpwent; try Repeat - P:=getpwent; + P:=fpgetpwent; If P<>Nil then begin If WithIDs then @@ -162,7 +167,7 @@ begin end; until (P=Nil); finally - endpwent; + fpendpwent; end; end; @@ -174,7 +179,7 @@ end; Function getgrnam(Const GroupName: String) : PGroup; begin - Result:=grp.getgrnam(Pchar(GroupName)); + Result:=grp.fpgetgrnam(Pchar(GroupName)); end; Procedure GetGroupData(Const GroupName : String; Var Data : TGroup); overload; @@ -182,36 +187,36 @@ Procedure GetGroupData(Const GroupName : String; Var Data : TGroup); overload; Var P : PGroup; begin - P:=Getgrnam(GroupName); + P:=fpGetgrnam(pchar(GroupName)); If P<>Nil then Data:=P^ else Raise EGroupLookupError.CreateFmt(ENoSuchGroupName,[GroupName]); end; -Procedure GetGroupData(Gid : Integer; Var Data : TGroup); overload; +Procedure GetGroupData(Gid : TGID; Var Data : TGroup); overload; Var P : PGroup; begin - P:=Getgrgid(gid); + P:=fpGetgrgid(gid); If P<>Nil then Data:=P^ else Raise EGroupLookupError.CreateFmt(ENoSuchGroupID,[Gid]); end; -function GetGroupName(GID : Integer) : String; +function GetGroupName(GID : TGID) : String; Var G : TGroup; begin GetGroupData(Gid,G); - Result:=StrPas(G.gr_name); + Result:=G.gr_name; end; -function GetGroupId(Const GroupName : String) : Integer; +function GetGroupId(Const GroupName : String) : TGID; Var G : TGroup; @@ -234,10 +239,10 @@ Var begin List.Clear; - setgrent; + fpsetgrent; try Repeat - G:=getgrent; + G:=fpgetgrent; If G<>Nil then begin If WithIDs then @@ -247,7 +252,7 @@ begin end; until (G=Nil); finally - endgrent; + fpendgrent; end; end; @@ -264,7 +269,7 @@ begin end; -Procedure GetGroupMembers(GID : Integer;List : TStrings); +Procedure GetGroupMembers(GID : TGID;List : TStrings); Var G : TGroup; @@ -285,7 +290,7 @@ begin end; { Shadow password functions } - +{$ifdef linux} function getspnam(UserName : String): PPasswordFileEntry; begin @@ -314,12 +319,13 @@ begin Data:=P^; end; -Procedure GetUserShadowData(UID : Integer; Var Data : TPasswordFileEntry); + +Procedure GetUserShadowData(UID : TUID; Var Data : TPasswordFileEntry); begin GetUserShadowData(GetUserName(UID),Data); end; - +{$endif} { Extra functions } Function GetUserGroup(Const UserName : String) : String; |
