mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 10:29:08 +02:00
* removed dead utmp dir
git-svn-id: trunk@10028 -
This commit is contained in:
parent
7d5fbd9f38
commit
cb7bcd39f0
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -2093,12 +2093,6 @@ packages/extra/univint/fp.pas svneol=native#text/plain
|
|||||||
packages/extra/univint/vBLAS.pas svneol=native#text/plain
|
packages/extra/univint/vBLAS.pas svneol=native#text/plain
|
||||||
packages/extra/univint/vDSP.pas svneol=native#text/plain
|
packages/extra/univint/vDSP.pas svneol=native#text/plain
|
||||||
packages/extra/univint/xattr.pas svneol=native#text/plain
|
packages/extra/univint/xattr.pas svneol=native#text/plain
|
||||||
packages/extra/utmp/Makefile svneol=native#text/plain
|
|
||||||
packages/extra/utmp/Makefile.fpc svneol=native#text/plain
|
|
||||||
packages/extra/utmp/fpmake.inc svneol=native#text/plain
|
|
||||||
packages/extra/utmp/fpmake.pp svneol=native#text/plain
|
|
||||||
packages/extra/utmp/testutmp.pp svneol=native#text/plain
|
|
||||||
packages/extra/utmp/utmp.pp svneol=native#text/plain
|
|
||||||
packages/fcl-async/Makefile svneol=native#text/plain
|
packages/fcl-async/Makefile svneol=native#text/plain
|
||||||
packages/fcl-async/Makefile.fpc svneol=native#text/plain
|
packages/fcl-async/Makefile.fpc svneol=native#text/plain
|
||||||
packages/fcl-async/fpmake.pp svneol=native#text/plain
|
packages/fcl-async/fpmake.pp svneol=native#text/plain
|
||||||
|
7
.gitignore
vendored
7
.gitignore
vendored
@ -778,13 +778,6 @@ packages/extra/ptc/.gdbinit
|
|||||||
packages/extra/ptc/fpcmade.*
|
packages/extra/ptc/fpcmade.*
|
||||||
packages/extra/ptc/units
|
packages/extra/ptc/units
|
||||||
packages/extra/units
|
packages/extra/units
|
||||||
packages/extra/utmp/*.bak
|
|
||||||
packages/extra/utmp/*.exe
|
|
||||||
packages/extra/utmp/*.o
|
|
||||||
packages/extra/utmp/*.ppu
|
|
||||||
packages/extra/utmp/*.s
|
|
||||||
packages/extra/utmp/fpcmade.*
|
|
||||||
packages/extra/utmp/units
|
|
||||||
packages/fcl-base/examples/*.bak
|
packages/fcl-base/examples/*.bak
|
||||||
packages/fcl-base/examples/*.exe
|
packages/fcl-base/examples/*.exe
|
||||||
packages/fcl-base/examples/*.o
|
packages/fcl-base/examples/*.o
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,20 +0,0 @@
|
|||||||
#
|
|
||||||
# Makefile.fpc for UTmp Unit
|
|
||||||
#
|
|
||||||
|
|
||||||
[package]
|
|
||||||
name=utmp
|
|
||||||
version=2.0.0
|
|
||||||
|
|
||||||
[target]
|
|
||||||
units=utmp
|
|
||||||
examples=testutmp
|
|
||||||
|
|
||||||
[install]
|
|
||||||
fpcpackage=y
|
|
||||||
|
|
||||||
[default]
|
|
||||||
fpcdir=../../..
|
|
||||||
|
|
||||||
[rules]
|
|
||||||
.NOTPARALLEL:
|
|
@ -1,10 +0,0 @@
|
|||||||
StartPackage('utmp');
|
|
||||||
{$IF defined(ALLPACKAGES)}
|
|
||||||
Directory:='extra/utmp';
|
|
||||||
{$ELSEIF defined(EXTRAPACKAGES)}
|
|
||||||
Directory:='utmp';
|
|
||||||
{$ENDIF}
|
|
||||||
OS:=[linux,netbsd,freebsd,openbsd,darwin];
|
|
||||||
T:=Targets.AddUnit('utmp');
|
|
||||||
T:=Targets.AddExampleunit('testutmp');
|
|
||||||
EndPackage;
|
|
@ -1,17 +0,0 @@
|
|||||||
{$mode objfpc}{$H+}
|
|
||||||
program fpmake;
|
|
||||||
|
|
||||||
uses fpmkunit;
|
|
||||||
|
|
||||||
Var
|
|
||||||
T : TTarget;
|
|
||||||
|
|
||||||
begin
|
|
||||||
With Installer do
|
|
||||||
begin
|
|
||||||
{ Base packages }
|
|
||||||
{$i fpmake.inc}
|
|
||||||
Run;
|
|
||||||
end;
|
|
||||||
end.
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
Program testu;
|
|
||||||
|
|
||||||
uses utmp,linux;
|
|
||||||
|
|
||||||
Const UTMPFile = '/var/run/utmp';
|
|
||||||
|
|
||||||
var
|
|
||||||
EndOfUsers : Boolean;
|
|
||||||
m,d,y,hh,mm,ss : Word;
|
|
||||||
|
|
||||||
begin
|
|
||||||
Set_utmp_file(UTMPFile);
|
|
||||||
Writeln ('Number of utmp entries : ',number_of_utmp_entries);
|
|
||||||
set_search_parameters (Include ,All_login_types);
|
|
||||||
Read_logged_users;
|
|
||||||
Writeln ('Number of logged users : ',Number_Of_logged_users);
|
|
||||||
While More_USers do
|
|
||||||
With Get_Next_user do
|
|
||||||
begin
|
|
||||||
Writeln ('Logtype : ',login_type_names[type_of_login]);
|
|
||||||
Writeln ('Pid : ',Pid);
|
|
||||||
Writeln ('Device : ',Device);
|
|
||||||
Writeln ('TTYname : ',TTy_Name);
|
|
||||||
EpochToLocal(login_time,y,m,d,hh,mm,ss);
|
|
||||||
Writeln ('Login Time : ',y,'/',m,'/',d,' ',hh,':',mm,':',ss);
|
|
||||||
Writeln ('User Name : ',user_name);
|
|
||||||
Writeln ('Host name : ',host_name);
|
|
||||||
Write ('IP address : ',Ip_address[1],'.',Ip_address[2]);
|
|
||||||
Writeln ('.',ip_address[3],'.',ip_address[4]);
|
|
||||||
end;
|
|
||||||
end.
|
|
@ -1,322 +0,0 @@
|
|||||||
unit Utmp;
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
uses
|
|
||||||
BaseUnix,
|
|
||||||
Unix;
|
|
||||||
|
|
||||||
const
|
|
||||||
Device_name_length = 12;
|
|
||||||
Host_name_length = 245;
|
|
||||||
User_name_length = 32;
|
|
||||||
|
|
||||||
type
|
|
||||||
tTime = Longint;
|
|
||||||
tPid = Longint;
|
|
||||||
tIP_Address = array[1..4] of Byte;
|
|
||||||
tDevice_name = String[Device_name_length];
|
|
||||||
tUser_name = String[User_name_length];
|
|
||||||
tHost_name = String[Host_name_length];
|
|
||||||
tLogin_type = (Unkown, Run_level, Boot_time, New_time, Old_time,
|
|
||||||
Init_process, Login_process, User_process, Dead_process);
|
|
||||||
tLogin_types = set of tLogin_type;
|
|
||||||
tParameter_type = (Include, Exclude);
|
|
||||||
|
|
||||||
tUser = packed record
|
|
||||||
Type_of_login : tLogin_type;
|
|
||||||
Pid : tPid;
|
|
||||||
Device : tDevice_name;
|
|
||||||
Tty_name : String[4];
|
|
||||||
Login_time : tTime;
|
|
||||||
User_name : tUser_name;
|
|
||||||
Host_name : tHost_name;
|
|
||||||
IP_Address : tIP_Address;
|
|
||||||
end;
|
|
||||||
pUser = ^tUser;
|
|
||||||
|
|
||||||
Const
|
|
||||||
DefaultLoginType : TLogin_Types = [User_Process];
|
|
||||||
Login_type_names : array [TLogin_type] of string[20] =
|
|
||||||
('Unkown', 'Run level', 'Boot time','New time', 'Old time',
|
|
||||||
'Init process', 'Login process', 'User process', 'Dead process');
|
|
||||||
All_Login_types : TLogin_types = [Unkown, Run_level, Boot_time, New_time, Old_time,
|
|
||||||
Init_process, Login_process, User_process, Dead_process];
|
|
||||||
|
|
||||||
procedure Read_logged_users;
|
|
||||||
function Get_next_user : tUser;
|
|
||||||
function Get_next_user(var Last : Boolean) : tUser;
|
|
||||||
procedure Set_search_parameters(
|
|
||||||
const Parameter_type : tParameter_type;
|
|
||||||
Login_types : tLogin_types);
|
|
||||||
procedure Reset_user_search;
|
|
||||||
function More_users : Boolean;
|
|
||||||
function Number_of_logged_users : Word;
|
|
||||||
|
|
||||||
|
|
||||||
{Low level rutines}
|
|
||||||
function Number_of_utmp_entries : Word;
|
|
||||||
procedure Set_utmp_file(const File_name : String);
|
|
||||||
|
|
||||||
|
|
||||||
type
|
|
||||||
texitstatus = record
|
|
||||||
e_termination,
|
|
||||||
e_exit : integer;
|
|
||||||
end;
|
|
||||||
|
|
||||||
tLL_Utmp = record
|
|
||||||
ut_type : integer;
|
|
||||||
ut_pid : longint;
|
|
||||||
ut_line : tdevice_name;
|
|
||||||
ut_id : array[1..4] of char;
|
|
||||||
ut_user : tuser_name;
|
|
||||||
ut_host : thost_name;
|
|
||||||
ut_exit : texitstatus;
|
|
||||||
ut_session : longint;
|
|
||||||
ut_tv : Array [1..2] of longint;
|
|
||||||
ut_addr : Array[1..4] of longint;
|
|
||||||
pad : array [1..48] of char
|
|
||||||
end;
|
|
||||||
pUser_list = ^tUser_list;
|
|
||||||
tUser_list = record
|
|
||||||
User : tUser;
|
|
||||||
Next : pUser_list;
|
|
||||||
end;
|
|
||||||
|
|
||||||
implementation
|
|
||||||
|
|
||||||
Type
|
|
||||||
tSearch_parameters = record
|
|
||||||
Type_of_login_types : tParameter_type;
|
|
||||||
Login_types : tLogin_types;
|
|
||||||
end;
|
|
||||||
|
|
||||||
var
|
|
||||||
User_list : pUser_list;
|
|
||||||
Current_user : pUser_list;
|
|
||||||
Utmp_file : String;
|
|
||||||
Search_parameters : tSearch_parameters;
|
|
||||||
|
|
||||||
procedure Set_search_parameters(
|
|
||||||
const Parameter_type : tParameter_type;
|
|
||||||
Login_types : tLogin_types);
|
|
||||||
|
|
||||||
begin
|
|
||||||
Search_parameters.Type_of_login_types := Parameter_type;
|
|
||||||
Search_parameters.Login_types := Login_types;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function More_users : Boolean;
|
|
||||||
|
|
||||||
var
|
|
||||||
UL : pUser_list;
|
|
||||||
Last : Boolean;
|
|
||||||
|
|
||||||
begin
|
|
||||||
UL := Current_user;
|
|
||||||
Last := True;
|
|
||||||
while (UL <> nil) and Last do begin
|
|
||||||
if Search_parameters.Type_of_login_types = Exclude then begin
|
|
||||||
Last := (UL^.User.Type_of_login in Search_parameters.Login_types);
|
|
||||||
end else begin
|
|
||||||
Last := not (UL^.User.Type_of_login in Search_parameters.Login_types);
|
|
||||||
end;
|
|
||||||
UL := UL^.Next;
|
|
||||||
end;
|
|
||||||
More_users := not Last;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function Number_of_logged_users : Word;
|
|
||||||
|
|
||||||
var
|
|
||||||
I : Word;
|
|
||||||
UL: pUser_list;
|
|
||||||
|
|
||||||
begin
|
|
||||||
I := 0;
|
|
||||||
UL := User_list;
|
|
||||||
while UL <> nil do begin
|
|
||||||
if UL^.User.Type_of_login = User_process then begin
|
|
||||||
I := I + 1;
|
|
||||||
end;
|
|
||||||
UL := UL^.Next;
|
|
||||||
end;
|
|
||||||
Number_of_logged_users := I;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function Get_next_user : tUser;
|
|
||||||
|
|
||||||
var
|
|
||||||
Found : Boolean;
|
|
||||||
User : pUser;
|
|
||||||
|
|
||||||
begin
|
|
||||||
if Current_user <> nil then begin
|
|
||||||
Found := False;
|
|
||||||
while (Current_user <> nil) and not Found do begin
|
|
||||||
User := @Current_user^.User;
|
|
||||||
if Search_parameters.Type_of_login_types = Exclude then begin
|
|
||||||
Found := not (User^.Type_of_login in Search_parameters.Login_types);
|
|
||||||
end else begin
|
|
||||||
Found := (User^.Type_of_login in Search_parameters.Login_types);
|
|
||||||
end;
|
|
||||||
Current_user := Current_user^.Next;
|
|
||||||
end;
|
|
||||||
if Found then begin
|
|
||||||
Get_next_user := User^;
|
|
||||||
end else begin
|
|
||||||
New(User);
|
|
||||||
FillChar(User^, SizeOf(tUser), 0);
|
|
||||||
Get_next_user := User^;
|
|
||||||
Dispose(User);
|
|
||||||
end;
|
|
||||||
end else begin
|
|
||||||
New(User);
|
|
||||||
FillChar(User^, SizeOf(tUser), 0);
|
|
||||||
Get_next_user := User^;
|
|
||||||
Dispose(User);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function Get_next_user(var Last : Boolean) : tUser;
|
|
||||||
|
|
||||||
var
|
|
||||||
Found : Boolean;
|
|
||||||
User : pUser;
|
|
||||||
UL : pUser_list;
|
|
||||||
|
|
||||||
begin
|
|
||||||
if Current_user <> nil then begin
|
|
||||||
Found := False;
|
|
||||||
while (Current_user <> nil) and not Found do begin
|
|
||||||
User := @Current_user^.User;
|
|
||||||
if Search_parameters.Type_of_login_types = Exclude then begin
|
|
||||||
Found := not (User^.Type_of_login in Search_parameters.Login_types);
|
|
||||||
end else begin
|
|
||||||
Found := (User^.Type_of_login in Search_parameters.Login_types);
|
|
||||||
end;
|
|
||||||
Current_user := Current_user^.Next;
|
|
||||||
end;
|
|
||||||
if Found then begin
|
|
||||||
Get_next_user := User^;
|
|
||||||
UL := Current_user;
|
|
||||||
Last := True;
|
|
||||||
while (UL <> nil) and Last do begin
|
|
||||||
if Search_parameters.Type_of_login_types = Exclude then begin
|
|
||||||
Last := (UL^.User.Type_of_login in Search_parameters.Login_types);
|
|
||||||
end else begin
|
|
||||||
Last := not (UL^.User.Type_of_login in Search_parameters.Login_types);
|
|
||||||
end;
|
|
||||||
UL := UL^.Next;
|
|
||||||
end;
|
|
||||||
end else begin
|
|
||||||
New(User);
|
|
||||||
FillChar(User^, SizeOf(tUser), 0);
|
|
||||||
Get_next_user := User^;
|
|
||||||
Dispose(User);
|
|
||||||
end;
|
|
||||||
end else begin
|
|
||||||
New(User);
|
|
||||||
FillChar(User^, SizeOf(tUser), 0);
|
|
||||||
Get_next_user := User^;
|
|
||||||
Dispose(User);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure Reset_user_search;
|
|
||||||
|
|
||||||
begin
|
|
||||||
Current_user := User_list;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure Set_utmp_file(const File_name : String);
|
|
||||||
|
|
||||||
begin
|
|
||||||
Utmp_file := File_name;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function Number_of_utmp_entries : Word;
|
|
||||||
|
|
||||||
var
|
|
||||||
S : Stat;
|
|
||||||
|
|
||||||
begin
|
|
||||||
fpstat(Utmp_file, S);
|
|
||||||
Number_of_utmp_entries := s.st_size div System.SizeOf(tLL_Utmp);
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
procedure Read_logged_users;
|
|
||||||
|
|
||||||
procedure Read_entry(var F : File; var Entry : tUser; var User : Boolean);
|
|
||||||
|
|
||||||
var
|
|
||||||
LL_Entry : tLL_Utmp;
|
|
||||||
I : Byte;
|
|
||||||
|
|
||||||
begin
|
|
||||||
BlockRead(F, LL_Entry, SizeOf(tLL_Utmp));
|
|
||||||
//Byte(Entry.Type_of_login) := LL_Entry.ut_type;
|
|
||||||
Entry.Type_of_login := tLogin_type(LL_Entry.ut_type);
|
|
||||||
Entry.Pid := Longint(LL_Entry.ut_id);
|
|
||||||
Entry.Device:=LL_entry.ut_line;
|
|
||||||
Entry.TTy_Name:=LL_Entry.ut_id;
|
|
||||||
Entry.Login_time := LL_Entry.ut_tv[1];
|
|
||||||
Entry.User_name:=LL_entry.ut_user;
|
|
||||||
Entry.Host_name:=LL_entry.ut_host;
|
|
||||||
For I:=1 to 4 do
|
|
||||||
Entry.Ip_Address[I] := LL_Entry.ut_addr[i];
|
|
||||||
end;
|
|
||||||
|
|
||||||
var
|
|
||||||
F : File;
|
|
||||||
I : Longint;
|
|
||||||
UL: pUser_list;
|
|
||||||
U : Boolean;
|
|
||||||
|
|
||||||
begin
|
|
||||||
System.Assign(F, Utmp_file);
|
|
||||||
{$IFOPT I+}
|
|
||||||
{$DEFINE I_was_on}
|
|
||||||
{$ENDIF}
|
|
||||||
{$I-}
|
|
||||||
System.Reset(F,1);
|
|
||||||
{$IFDEF I_was_on}
|
|
||||||
{$UNDEF I_was_on}
|
|
||||||
{$I+}
|
|
||||||
{$ENDIF}
|
|
||||||
UL := User_list;
|
|
||||||
while UL <> nil do begin
|
|
||||||
User_list := UL;
|
|
||||||
UL := UL^.Next;
|
|
||||||
Dispose(User_list);
|
|
||||||
end;
|
|
||||||
User_list := nil;
|
|
||||||
if System.IOResult = 0 then begin
|
|
||||||
for I := 1 to Number_of_utmp_entries do begin
|
|
||||||
if User_list = nil then begin
|
|
||||||
New(User_list);
|
|
||||||
UL := User_list;
|
|
||||||
UL^.Next := nil;
|
|
||||||
end else begin
|
|
||||||
New(UL^.Next);
|
|
||||||
UL := UL^.Next;
|
|
||||||
UL^.Next := nil;
|
|
||||||
end;
|
|
||||||
Read_entry(F, UL^.User, U);
|
|
||||||
end;
|
|
||||||
UL^.Next := nil;
|
|
||||||
end else begin
|
|
||||||
User_list := nil;
|
|
||||||
end;
|
|
||||||
System.Close(F);
|
|
||||||
Current_user := User_list;
|
|
||||||
end;
|
|
||||||
|
|
||||||
begin
|
|
||||||
User_list := nil;
|
|
||||||
Current_user := nil;
|
|
||||||
Utmp_file := '/var/run/utmp';
|
|
||||||
Set_search_parameters(Include,DefaultLoginType);
|
|
||||||
end.
|
|
Loading…
Reference in New Issue
Block a user