On Wed, Oct 6, 2010 at 7:09 AM, <fpc-pascal-requ...@lists.freepascal.org> wrote: > Send fpc-pascal mailing list submissions to > fpc-pas...@lists.freepascal.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://lists.freepascal.org/mailman/listinfo/fpc-pascal > or, via email, send a message with subject or body 'help' to > fpc-pascal-requ...@lists.freepascal.org > > You can reach the person managing the list at > fpc-pascal-ow...@lists.freepascal.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of fpc-pascal digest..." > > > Today's Topics: > > 1. Re: GetTempFileName in Linux (Michael Van Canneyt) > 2. Re: GetTempFileName in Linux (Jonas Maebe) > 3. Re: lNet getting the local IP (Andrew Brunner) > 4. Re: lNet getting the local IP (Sven Barth) > 5. Re: lNet getting the local IP (Felipe Monteiro de Carvalho) > 6. Re: lNet getting the local IP (Andrew Brunner) > 7. Re: lNet getting the local IP (Marco van de Voort) > 8. Re: lNet getting the local IP (Henry Vermaak) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Wed, 6 Oct 2010 11:59:53 +0200 (CEST) > From: Michael Van Canneyt <mich...@freepascal.org> > Subject: Re: [fpc-pascal] GetTempFileName in Linux > To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org> > Message-ID: <alpine.deb.2.00.1010061158450.6...@fsb.wals.be> > Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed > > > > On Wed, 6 Oct 2010, Jonas Maebe wrote: > >> >> On 06 Oct 2010, at 11:05, Michael Van Canneyt wrote: >> >>> On Wed, 6 Oct 2010, Jonas Maebe wrote: >>> >>>> On 06 Oct 2010, at 09:41, Michael Van Canneyt wrote: >>>> >>>>> This is always true on Unix, the only way to make sure is to have the >>>>> kernel >>>>> create the temporary name and file for you. Unix - to my knowledge - does >>>>> not have a way to create and lock a file in one atomic operation; There >>>>> are >>>>> always 2 operations involved, and so anything can happen between the 2 >>>>> calls. >>>> >>>> You can at least open a file with O_CREAT|O_EXCL|O_NOFOLLOW to make sure >>>> that it does not yet exist at the point that you create it (and that it's >>>> not a symlink either). >>> >>> This is correct, but doesn't lock the file, >> >> Locking is always advisory on Unix, so that doesn't matter anyway. >> >>> and so it doesn't prevent >>> someone from 'stealing' the file before the lock is applied. >> >> Nobody else can steal the file once you have created it, because they won't >> be the owner nor have the necessary permissions. That is the main security >> risk and it is solved by this approach. The fact that another process running >> under your login not using O_EXCL could overwrite it is not an extra security >> risk (if you have a rogue process running under your login, nothing that you >> do is safe because it can use ptrace to modify any process in any way it sees >> fit anyway). > > And that is why I think the whole point is hugely exaggerated :-) > > But it doesn't mean we shouldn't do our best to make it minimally safe. > > Michael. > > > ------------------------------ > > Message: 2 > Date: Wed, 6 Oct 2010 12:57:02 +0200 > From: Jonas Maebe <jonas.ma...@elis.ugent.be> > Subject: Re: [fpc-pascal] GetTempFileName in Linux > To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org> > Message-ID: <6cd7d25a-fd10-4c7d-9011-da47560af...@elis.ugent.be> > Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes > > > On 06 Oct 2010, at 11:59, Michael Van Canneyt wrote: > >> On Wed, 6 Oct 2010, Jonas Maebe wrote: >> >>> Nobody else can steal the file once you have created it, because >>> they won't be the owner nor have the necessary permissions. That is >>> the main security risk and it is solved by this approach. The fact >>> that another process running under your login not using O_EXCL >>> could overwrite it is not an extra security risk (if you have a >>> rogue process running under your login, nothing that you do is safe >>> because it can use ptrace to modify any process in any way it sees >>> fit anyway). >> >> And that is why I think the whole point is hugely exaggerated :-) > > It's not, because currently a process from *another* user can > trivially intercept your temporary files. If you have a daemon running > as root, that is a major security concern. > > > Jonas > > > ------------------------------ > > Message: 3 > Date: Wed, 6 Oct 2010 07:49:42 -0500 > From: Andrew Brunner <andrew.t.brun...@gmail.com> > Subject: Re: [fpc-pascal] lNet getting the local IP > To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org> > Message-ID: > <aanlktinkfgmjmfkls=tww+sorr3jmkj4zjul7z6zr...@mail.gmail.com> > Content-Type: text/plain; charset=ISO-8859-1 > > I just read the first line in /etc/hosts file. The first entry is the IPv4. > > On Tue, Oct 5, 2010 at 3:04 PM, Felipe Monteiro de Carvalho > <felipemonteiro.carva...@gmail.com> wrote: >> hello, >> >> I am searching for a way to get the local IP. I already found examples >> with winsock, synapse and indy. Does anyone know how to do that with >> lNet? >> >> thanks, >> -- >> Felipe Monteiro de Carvalho >> _______________________________________________ >> fpc-pascal maillist - fpc-pas...@lists.freepascal.org >> http://lists.freepascal.org/mailman/listinfo/fpc-pascal >> > > > ------------------------------ > > Message: 4 > Date: Wed, 06 Oct 2010 14:55:21 +0200 > From: Sven Barth <pascaldra...@googlemail.com> > Subject: Re: [fpc-pascal] lNet getting the local IP > To: fpc-pascal@lists.freepascal.org > Message-ID: <4cac71b9.20...@googlemail.com> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed > > Am 06.10.2010 14:49, schrieb Andrew Brunner: >> I just read the first line in /etc/hosts file. The first entry is the IPv4. >> >> On Tue, Oct 5, 2010 at 3:04 PM, Felipe Monteiro de Carvalho >> <felipemonteiro.carva...@gmail.com> wrote: >>> hello, >>> >>> I am searching for a way to get the local IP. I already found examples >>> with winsock, synapse and indy. Does anyone know how to do that with >>> lNet? >>> >>> thanks, > > Huh?! O.o > > You'll only find "127.0.0.1" for my computer there... I don't think that > this is a very good solution. > > Regards, > Sven > > > ------------------------------ > > Message: 5 > Date: Wed, 6 Oct 2010 15:27:30 +0200 > From: Felipe Monteiro de Carvalho <felipemonteiro.carva...@gmail.com> > Subject: Re: [fpc-pascal] lNet getting the local IP > To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org> > Message-ID: > <aanlkti=ug_mdodi3vv48rr1hkspvw4rjv6u28t5m1...@mail.gmail.com> > Content-Type: text/plain; charset=ISO-8859-1 > > Ok, thanks everyone, it seams that I managed to extract a function > from Silvio's code which doesn't use Synapse. I only tested in Windows > so far: > > unit chesstcputils; > > {$mode objfpc}{$H+} > > interface > > uses > {$IFDEF MSWINDOWS} > Winsock, > {$ENDIF} > Classes, SysUtils; > > function ChessGetLocalIP(): string; > > implementation > > const > CFormatIPMask = '%d.%d.%d.%d'; > > function ChessGetLocalIP(): string; > var > I, VAttempt: Integer; > VStrTemp, VSitesToTry: TStringList; > {$IFDEF UNIX} > VProcess: TProcess; > {$ENDIF} > {$IFDEF MSWINDOWS} > var > VWSAData: TWSAData; > VHostEnt: PHostEnt; > VName: string; > {$ENDIF} > begin > Result := ''; > {$IFDEF UNIX} > VStrTemp := TStringList.Create; > VProcess := TProcess.Create(nil); > try > VProcess.CommandLine := > 'sh -c "ifconfig eth0 | awk ''/inet end/ {print $3}''"'; > VProcess.Options := [poWaitOnExit, poUsePipes]; > VProcess.Execute; > VStrTemp.LoadFromStream(VProcess.Output); > Result := Trim(VStrTemp.Text); > finally > VStrTemp.Free; > VProcess.Free; > end; > {$ENDIF} > {$IFDEF MSWINDOWS} > {$HINTS OFF} > WSAStartup(2, VWSAData); > {$HINTS ON} > SetLength(VName, 255); > GetHostName(PChar(VName), 255); > SetLength(VName, StrLen(PChar(VName))); > VHostEnt := GetHostByName(PChar(VName)); > with VHostEnt^ do > Result := Format(CFormatIPMask, [Byte(h_addr^[0]), Byte(h_addr^[1]), > Byte(h_addr^[2]), Byte(h_addr^[3])]); > WSACleanup; > {$ENDIF} > end; > > end. > > > -- > Felipe Monteiro de Carvalho > > > ------------------------------ > > Message: 6 > Date: Wed, 6 Oct 2010 08:51:32 -0500 > From: Andrew Brunner <andrew.t.brun...@gmail.com> > Subject: Re: [fpc-pascal] lNet getting the local IP > To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org> > Message-ID: > <aanlkti=jxdj_tsm-r+4ocfoukxeencbynxcsrkkqw...@mail.gmail.com> > Content-Type: text/plain; charset=ISO-8859-1 > > On Wed, Oct 6, 2010 at 7:55 AM, Sven Barth <pascaldra...@googlemail.com> > wrote: >> You'll only find "127.0.0.1" for my computer there... I don't think that >> this is a very good solution. > > Oh well. That makes sense b/c these are servers that I have obtaining > the same IP over DHCP. > On clients when DHCP is being used with dynamic IPs the host file may > not be of much use or may require more parsing for the host name. > > But from a file based solution you just need to read in the > /etc/hostname file. That is the name of the box. > With the host name, ust search the /etc/hosts file for the IP matching > that name. > It's similar to the ifconfig command with parsing of eth0 which by > the way if there are more than 1 nick, could be problematic. > > Is there an Gnome or KDE API we could use to officially get NIC > related info like iphlpapi.dll API under Windows? > > > ------------------------------ > > Message: 7 > Date: Wed, 6 Oct 2010 16:06:54 +0200 (CEST) > From: mar...@stack.nl (Marco van de Voort) > Subject: Re: [fpc-pascal] lNet getting the local IP > To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org> > Message-ID: <20101006140654.b6dcf17...@turtle.stack.nl> > Content-Type: text/plain; charset="US-ASCII" > > In our previous episode, Felipe Monteiro de Carvalho said: > >> function ChessGetLocalIP(): string; > >> VProcess.CommandLine := >> 'sh -c "ifconfig eth0 | awk ''/inet end/ {print $3}''"'; > > > Fails if eth0 is not the primary NIC. Doesn't work on non-linux (that use > other ethernet naming schemes) > > A safe solution will probably boil down to walking the list of ethernet > adapters and routes to find the default route on *nix. > > > ------------------------------ > > Message: 8 > Date: Wed, 06 Oct 2010 15:09:29 +0100 > From: Henry Vermaak <henry.verm...@gmail.com> > Subject: Re: [fpc-pascal] lNet getting the local IP > To: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org> > Message-ID: <4cac8319.7050...@gmail.com> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed > > On 06/10/10 14:27, Felipe Monteiro de Carvalho wrote: >> Ok, thanks everyone, it seams that I managed to extract a function >> from Silvio's code which doesn't use Synapse. I only tested in Windows >> so far: >> >> unit chesstcputils; >> >> {$mode objfpc}{$H+} >> >> interface >> >> uses >> {$IFDEF MSWINDOWS} >> Winsock, >> {$ENDIF} >> Classes, SysUtils; >> >> function ChessGetLocalIP(): string; >> >> implementation >> >> const >> CFormatIPMask = '%d.%d.%d.%d'; >> >> function ChessGetLocalIP(): string; >> var >> I, VAttempt: Integer; >> VStrTemp, VSitesToTry: TStringList; >> {$IFDEF UNIX} >> VProcess: TProcess; >> {$ENDIF} >> {$IFDEF MSWINDOWS} >> var >> VWSAData: TWSAData; >> VHostEnt: PHostEnt; >> VName: string; >> {$ENDIF} >> begin >> Result := ''; >> {$IFDEF UNIX} >> VStrTemp := TStringList.Create; >> VProcess := TProcess.Create(nil); >> try >> VProcess.CommandLine := >> 'sh -c "ifconfig eth0 | awk ''/inet end/ {print $3}''"'; > > Yuck. This doesn't work on my system (debian). If you really want the > least effort, you may have more luck with simply parsing `hostname -I` > somehow. The right way to do this is with an ioctl, I believe > (SIOCGIFCONF). Look here: > > http://www.kernel.org/doc/man-pages/online/pages/man7/netdevice.7.html > > I'm sure there's some code floating around, but it probably means that > you have to translate some headers :(. > > Henry > Re: [fpc-pascal] lNet getting the local IP >
I found an example for linux on stack overflow that was in c http://stackoverflow.com/questions/212528/linux-c-get-the-ip-address-of-local-computer - here is a rough translation: program GetPrimaryIpAddress; {$mode objfpc} uses baseunix, unixtype, sockets, SysUtils; procedure Get(var buf: array of char; const len: longint); const CN_GDNS_ADDR = '8.8.8.8'; CN_GDNS_PORT = 53; var s: string; sock: longint; err: longint; HostAddr: TSockAddr; l: Integer; UnixAddr: TInetSockAddr; begin err := 0; Assert(len >= 16); sock := fpsocket(AF_INET, SOCK_DGRAM, 0); assert(sock <> -1); UnixAddr.family := AF_INET; UnixAddr.port := htons(CN_GDNS_PORT); UnixAddr.addr := StrToHostAddr(CN_GDNS_ADDR).s_addr; if (fpConnect(sock,@UnixAddr,SizeOf(UnixAddr)) = 0) then begin try l := SizeOf(HostAddr); if (fpgetsockname(sock, @HostAddr, @l) = 0) then begin s := NetAddrToStr(HostAddr.sin_addr); StrPCopy(PChar(Buf), s); end else begin err:=socketError; end; finally if (fpclose(sock) <> 0) then begin err := socketError; end; end; end else begin err:=socketError; end; if (err <> 0) then begin // report error end; end; var ipbuf: array[0..255] of char; begin system.FillChar(ipbuf, sizeOf(ipBuf), #0); Get(ipbuf, system.SizeOf(ipbuf)); WriteLn(StrPas(ipbuf)); end. BrianW _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal