At the moment I am stuck trying to use sudo to run ifup from within my
frontend. This testing phase is important as I need to ascertain
myself that the class I am using can actually capture CLI output.

If anyone from Devuan knows of a Lazarus function that I can use to
capture the output of an external program running with root
privileges, it will be much of an impulse for my coding exercise.

I am using the TProcess class. The program runs sudo -s ifup wlan0
successfully but it is failing to capture the CLI output.

In the meantime I will continue debugging until I find a way of succeeding.

Edward.

On 18/08/2015, Edward Bartolo <edb...@gmail.com> wrote:
> Lazarus frontend can now run external programs capturing their textual
> output. Hopefully, within a few days, the frontend will be Alpha. :)
>
> On 17/08/2015, Edward Bartolo <edb...@gmail.com> wrote:
>> The Lazarus backend interface unit is as follows but still unfinished:
>>
>> ----------------------------------------
>> unit backend;
>>
>> {$mode objfpc}{$H+}
>>
>> interface
>>
>> uses
>>   Classes, SysUtils, stdctrls;
>>
>> procedure Backend_Save(essid, pw: string);
>> procedure Backend_Save_Connect(essid, pw: string);
>> function Backend_Query_Connect(connection: string; var pw: string):
>> boolean;
>> function Backend_Delete_Connect(essid: string): boolean;
>> function Backend_Connection_Connect(essid: string): boolean;
>> function Backend_Disconnect_Active_Connection: boolean;
>> procedure Backend_Scan(aListBox: TListBox);
>> procedure Backend_Load_Existing(aListBox: TListBox);
>>
>> implementation
>>
>> const
>>   opSave = 0;
>>   opSaveConnect = 1;
>>   opQueryConnect = 2;
>>   opDeleteConnect = 3;
>>   opConnectionConnect = 4;
>>   opDisconnectActiveConnection = 5;
>>   opScan = 6;
>>   opLoadExisting = 7;
>>
>>
>> procedure Backend_Save(essid, pw: string);
>> begin
>>   // backend opSave essid pw
>> end;
>>
>> procedure Backend_Save_Connect(essid, pw: string);
>> begin
>>   // backend opSaveConnect essid pw
>> end;
>>
>> function Backend_Query_Connect(connection: string; var pw:string):
>> boolean;
>> begin
>>   // backend opQueryConnect essid pw
>> end;
>>
>> function Backend_Delete_Connect(essid: string): boolean;
>> begin
>>   // backend opDeleteConnect essid
>>   result := true;
>> end;
>>
>> function Backend_Connection_Connect(essid: string): boolean;
>> begin
>>   // backend opConnectionConnect essid
>> end;
>>
>> function Backend_Disconnect_Active_Connection: boolean;
>> begin
>>   // backend opDisconnectActiveConnection
>> end;
>>
>> procedure Backend_Scan(aListBox: TListBox);
>> begin
>>   // backend opScan stringlist
>> end;
>>
>> procedure Backend_Load_Existing(aListBox: TListBox);
>> begin
>>   // backend opLoadExisting stringlist
>> end;
>>
>> end.
>> ---------------------------------------------
>>
>> On 17/08/2015, Edward Bartolo <edb...@gmail.com> wrote:
>>> The Progress of My Coding Till Now:
>>>
>>> I am attaching two images of the GUI's main window and the only
>>> dialog. The GUI is programmed in Lazarus Pascal.
>>>
>>> The backend is in C. The code till now, although it doesn't do anything
>>> useful.
>>> ----------------------------------------------
>>> #include <stdio.h>
>>> #include <stdlib.h>
>>> #include <string.h>
>>> #include <unistd.h>
>>>
>>>
>>> using namespace std;
>>>
>>>
>>> #define opSave                              0
>>> #define opSaveConnect                       1
>>> #define opQueryConnect                      2
>>> #define opDeleteConnect                     3
>>> #define opConnectionConnect         4
>>> #define opDisconnectActiveConnection        5
>>> #define opScan                              6
>>> #define opLoadExisting                      7
>>>     
>>> /*
>>> 1) Glib::spawn_sync instead of a pipe stream, provides a slot.
>>> 2) cmd trying to call an inexistent command still returns a valid
>>> pointer!
>>>    verify cmd exists before calling exec
>>> */
>>>
>>> inline bool file_exists(char* name) {
>>>   return (access(name, F_OK) != -1);
>>> }
>>>
>>>
>>> int exec(const char* cmd, char* out)
>>> {
>>>     const int buf_size = 128;
>>>             
>>>     FILE * pipe = popen(cmd, "r");
>>>     char buffer[buf_size];
>>>     while(!feof(pipe)) {
>>>             if(fgets(buffer, buf_size, pipe) != NULL)
>>>             {
>>>                     if (out != NULL)
>>>                             strcat(out, buffer);
>>>                             else strcpy(out, buffer);
>>>             }
>>>     }
>>>             
>>>     return pclose(pipe);
>>> }
>>>
>>> int main(int argc, char *argv[])
>>> {
>>>     char *out = 0;
>>>     int switch_item = -1;
>>>     if (argc > 1) switch_item = atoi(argv[1]);
>>>     
>>>     switch (switch_item) {
>>>             case opSave:
>>>                     //saveFile(argv[2], argv[3]);
>>>                     exec("cat /etc/network/interfaces", out);
>>>                     //out[0] = ' ';
>>>                     printf(out);
>>>             
>>>                     return 0;
>>>                     
>>>             case opSaveConnect:
>>>                     //saveFile(argv[2], argv[3]);
>>>                     //Connect(argv[2]);
>>>                     return 0;
>>>                     
>>>             case opQueryConnect:
>>>                     
>>>                     return 0;
>>>                     
>>>             case opDeleteConnect:
>>>             
>>>                     break;
>>>                     
>>>             case opConnectionConnect:
>>>                     
>>>                     break;
>>>                     
>>>             case opDisconnectActiveConnection:
>>>             
>>>                     break;
>>>                     
>>>             case opScan:
>>>                     
>>>                     break;
>>>                     
>>>             case opLoadExisting:
>>>             
>>>                     return 0;
>>>     }
>>>     
>>>     return -1; // parameter not in range
>>> }
>>> ----------------------------------------------------------------
>>>
>>>
>>> On 17/08/2015, Rainer Weikusat <rainerweiku...@virginmedia.com> wrote:
>>>> James Powell <james4...@hotmail.com> writes:
>>>>> While there are packages that can be invisible and unintrusive into
>>>>> the system, there are some that cannot.
>>>>>
>>>>> The problem is responsibility.
>>>>>
>>>>> Who wants to remain responsible for boot scripts? Upstream or vendor?
>>>>>
>>>>> Who wants responsibility for providing interoperability between
>>>>> projects? Upstream or downstream bazaar?
>>>>>
>>>>> Who wants responsibility for the userland? Upstream or the downstream
>>>>> bazaar?
>>>>
>>>> It's possible to frame this in more technical terms: Who'll end up
>>>> doing
>>>> system integration, system integrators or application developers? The
>>>> answer should (hopefully) be obvious.
>>>> _______________________________________________
>>>> Dng mailing list
>>>> Dng@lists.dyne.org
>>>> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng
>>>>
>>>
>>
>
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to