Thread overview
Why no setuid in linux.d?
Nov 19, 2010
0ffh
Nov 19, 2010
0ffh
Nov 19, 2010
0ffh
November 19, 2010
Hi,

I've written a programme that serves port 80, which usually
requires root access. Therefore, after acquiring the socket
I want to relinquish root by setting the uid to nonzero.
I needed to add "int setuid(uid_t uid);" to linux.d and
recompile Phobos in order to do so.
I there a specific reason that setuid (and the related
commands setgid, getuid, geteuid, getgid and getegid)
is/are missing in the standard version of linux.d?

Regards, Frank

November 19, 2010
On Fri, 19 Nov 2010 12:33:02 +0100, 0ffh wrote:

> Hi,
> 
> I've written a programme that serves port 80, which usually requires
> root access. Therefore, after acquiring the socket I want to relinquish
> root by setting the uid to nonzero. I needed to add "int setuid(uid_t
> uid);" to linux.d and recompile Phobos in order to do so.
> I there a specific reason that setuid (and the related commands setgid,
> getuid, geteuid, getgid and getegid) is/are missing in the standard
> version of linux.d?

All the POSIX headers are in the core.sys.posix package.  In your case, what you need is to import core.sys.posix.unistd.

-Lars
November 19, 2010
Lars T. Kyllingstad wrote:
> On Fri, 19 Nov 2010 12:33:02 +0100, 0ffh wrote:
> 
>> Hi,
>> [...]
>> I there a specific reason that setuid (and the related commands setgid,
>> getuid, geteuid, getgid and getegid) is/are missing in the standard
>> version of linux.d?
> 
> All the POSIX headers are in the core.sys.posix package.  In your case, what you need is to import core.sys.posix.unistd.
> 
> -Lars

Thanks Lars, but "import core.sys.posix.unistd;" gives me
"Error: module posix cannot read file 'core/sys/posix.d'".

I'm on D1 btw with no intention at all to switch to D2.

Regards, Frank
November 19, 2010
On Fri, 19 Nov 2010 13:02:42 +0100, 0ffh wrote:

> Lars T. Kyllingstad wrote:
>> On Fri, 19 Nov 2010 12:33:02 +0100, 0ffh wrote:
>> 
>>> Hi,
>>> [...]
>>> I there a specific reason that setuid (and the related commands
>>> setgid, getuid, geteuid, getgid and getegid) is/are missing in the
>>> standard version of linux.d?
>> 
>> All the POSIX headers are in the core.sys.posix package.  In your case, what you need is to import core.sys.posix.unistd.
>> 
>> -Lars
> 
> Thanks Lars, but "import core.sys.posix.unistd;" gives me "Error: module posix cannot read file 'core/sys/posix.d'".
> 
> I'm on D1 btw with no intention at all to switch to D2.

Ah, then you can't use core.*.  Sorry for the confusion.

-Lars
November 19, 2010
On Fri, 19 Nov 2010 06:33:02 -0500, 0ffh <frank@youknow.what.todo.internetz> wrote:

>
> Hi,
>
> I've written a programme that serves port 80, which usually
> requires root access. Therefore, after acquiring the socket
> I want to relinquish root by setting the uid to nonzero.
> I needed to add "int setuid(uid_t uid);" to linux.d and
> recompile Phobos in order to do so.
> I there a specific reason that setuid (and the related
> commands setgid, getuid, geteuid, getgid and getegid)
> is/are missing in the standard version of linux.d?
>
> Regards, Frank

You are not required to modify phobos to prototype a C function, just do this:

extern(C) int setuid(uid_t uid);

to your file that calls the function, and you are good to go.

As to why it was omitted, I'm unsure.

-Steve
November 19, 2010
Steven Schveighoffer wrote:
> [...]
> You are not required to modify phobos to prototype a C function, just do this:
> extern(C) int setuid(uid_t uid);
> [...]

Yeah I know, and you're right! It's just I felt that it belonged there...

> As to why it was omitted, I'm unsure.

So am I! =)

-Frank