|
@@ -75,8 +75,7 @@ end;
|
|
{$IF DEFINED(UNIX)}
|
|
{$IF DEFINED(UNIX)}
|
|
|
|
|
|
const
|
|
const
|
|
- PATH_SUDO = '/usr/bin/sudo';
|
|
|
|
- PATH_PKEXEC = '/usr/bin/pkexec';
|
|
|
|
|
|
+ SYS_PATH: array[0..1] of String = ('/usr/bin/', '/usr/local/bin/');
|
|
|
|
|
|
resourcestring
|
|
resourcestring
|
|
rsMsgPasswordEnter = 'Please enter the password:';
|
|
rsMsgPasswordEnter = 'Please enter the password:';
|
|
@@ -106,6 +105,7 @@ type
|
|
end;
|
|
end;
|
|
|
|
|
|
var
|
|
var
|
|
|
|
+ SuperExe: String;
|
|
SuperProgram: TSuperProgram;
|
|
SuperProgram: TSuperProgram;
|
|
|
|
|
|
function ExecuteCommand(Command: String; Args: TStringArray; StartPath: String): UIntPtr;
|
|
function ExecuteCommand(Command: String; Args: TStringArray; StartPath: String): UIntPtr;
|
|
@@ -140,6 +140,19 @@ begin
|
|
Result := ProcessId;
|
|
Result := ProcessId;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function FindExecutable(const FileName: String; out FullName: String): Boolean;
|
|
|
|
+var
|
|
|
|
+ Index: Integer;
|
|
|
|
+begin
|
|
|
|
+ for Index:= Low(SYS_PATH) to High(SYS_PATH) do
|
|
|
|
+ begin
|
|
|
|
+ FullName:= SYS_PATH[Index] + FileName;
|
|
|
|
+ if fpAccess(FullName, X_OK) = 0 then
|
|
|
|
+ Exit(True);
|
|
|
|
+ end;
|
|
|
|
+ Result:= False;
|
|
|
|
+end;
|
|
|
|
+
|
|
function ExecuteSudo(Args: TStringArray; const StartPath: String): UIntPtr;
|
|
function ExecuteSudo(Args: TStringArray; const StartPath: String): UIntPtr;
|
|
begin
|
|
begin
|
|
with TSuperUser.Create(Args, StartPath) do
|
|
with TSuperUser.Create(Args, StartPath) do
|
|
@@ -194,7 +207,7 @@ begin
|
|
CreateGUID(GUID);
|
|
CreateGUID(GUID);
|
|
FPrompt:= GUIDToString(GUID);
|
|
FPrompt:= GUIDToString(GUID);
|
|
FCtl.Process.Options:= FCtl.Process.Options + [poStderrToOutPut];
|
|
FCtl.Process.Options:= FCtl.Process.Options + [poStderrToOutPut];
|
|
- FCtl.Process.Executable:= PATH_SUDO;
|
|
|
|
|
|
+ FCtl.Process.Executable:= SuperExe;
|
|
FCtl.Process.Parameters.Add('-S');
|
|
FCtl.Process.Parameters.Add('-S');
|
|
FCtl.Process.Parameters.Add('-k');
|
|
FCtl.Process.Parameters.Add('-k');
|
|
FCtl.Process.Parameters.Add('-p');
|
|
FCtl.Process.Parameters.Add('-p');
|
|
@@ -298,7 +311,7 @@ begin
|
|
|
|
|
|
case SuperProgram of
|
|
case SuperProgram of
|
|
spSudo: Result:= ExecuteSudo(AParams, sStartPath);
|
|
spSudo: Result:= ExecuteSudo(AParams, sStartPath);
|
|
- spPkexec: Result:= ExecuteCommand(PATH_PKEXEC, AParams, sStartPath);
|
|
|
|
|
|
+ spPkexec: Result:= ExecuteCommand(SuperExe, AParams, sStartPath);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
@@ -308,11 +321,11 @@ initialization
|
|
FAdministratorPrivileges:= True;
|
|
FAdministratorPrivileges:= True;
|
|
{$ELSEIF DEFINED(UNIX)}
|
|
{$ELSEIF DEFINED(UNIX)}
|
|
{$IFDEF LINUX}
|
|
{$IFDEF LINUX}
|
|
- if fpAccess(PATH_PKEXEC, X_OK) = 0 then
|
|
|
|
|
|
+ if FindExecutable('pkexec', SuperExe) then
|
|
SuperProgram:= spPkexec
|
|
SuperProgram:= spPkexec
|
|
else
|
|
else
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
- if fpAccess(PATH_SUDO, X_OK) = 0 then
|
|
|
|
|
|
+ if FindExecutable('sudo', SuperExe) then
|
|
SuperProgram:= spSudo
|
|
SuperProgram:= spSudo
|
|
else begin
|
|
else begin
|
|
SuperProgram:= spNone;
|
|
SuperProgram:= spNone;
|