summaryrefslogtreecommitdiff
path: root/packages/users
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-02-02 19:26:40 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-02-02 19:26:40 +0000
commit2fb03baacf14c6b54b26c240412f18813f053cea (patch)
treee4abdfb11b9bdd02cab70bd0e44f7740066628eb /packages/users
parent8fd37eb8bdbba17deeb1393db02dea30eebf6977 (diff)
downloadfpc-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/Makefile214
-rw-r--r--packages/users/Makefile.fpc6
-rw-r--r--packages/users/examples/testpass.pp9
-rw-r--r--packages/users/examples/testpass2.pp56
-rw-r--r--packages/users/src/crypth.pp14
-rw-r--r--packages/users/src/grp.pp101
-rw-r--r--packages/users/src/pwd.pp171
-rw-r--r--packages/users/src/users.pp78
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;