This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2008年08月18日 10:22 by mark.dickinson, last changed 2022年04月11日 14:56 by admin. This issue is now closed.
| Messages (5) | |||
|---|---|---|---|
| msg71318 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2008年08月18日 10:22 | |
On a 64-bit OS X build of Python, built with:
./configure --with-universal-archs=64-bit --enable-universalsdk=/ MACOSX_DEPLOYMENT_TARGET=10.5 &&
make
I get the following result:
Python 2.6b2+ (trunk:65805M, Aug 18 2008, 10:59:08)
[GCC 4.0.1 (Apple Inc. build 5484)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pwd
>>> pwd.getpwnam('nobody')
pwd.struct_passwd(pw_name='nobody', pw_passwd='*', pw_uid=4294967294, pw_gid=4294967294,
pw_gecos='Unprivileged User', pw_dir='/var/empty', pw_shell='/usr/bin/false')
Here the pw_uid and pw_gid should presumably be -2, not 4294967294. I haven't had time to
investigate properly, but the problem is almost certainly something to do with the fact that
sizeof(uid_t) is 4 and sizeof(long) is 8 for this build. (Though interestingly, the configure
script detects sizeof(long) as 4, which may not be helping matters.)
This problem is causing test_httpservers to fail on 64-bit OS X.
System info: it's a MacBook Pro; uname -a gives:
Darwin Macintosh-3.local 9.4.0 Darwin Kernel Version 9.4.0: Mon Jun 9 19:30:53 PDT 2008; root:xnu-
1228年5月20日~1/RELEASE_I386 i386
|
|||
| msg71320 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2008年08月18日 11:49 | |
It turns out that uid_t (and gid_t) actually *is* an unsigned 32-bit
integer type on OS X 10.5, so perhaps the pw_uid and pw_gid values are
correct. So to rephrase: one or both of the following facts might be
considered bugs:
(1) On a single machine, the value of pwd.getpwnam('nobody') gives
different results for 32-bit and 64-bit builds of Python (pw_uid is -2 on
32-bit, 2**32-2 on 64-bit).
(2) On a 64-bit OS X build, pwd.getpwnam can produce uids and gids >=
2**31, but os.setuid and friends don't accept values larger than 2**31-1.
There's an inconsistency between pwdmodule.c and posixmodule.c: pwdmodule
casts uids to C longs before returning them, while the posixmodule.c
functions parse an input uid/gid using the "i" format in PyArg_Parse*.
It's the latter problem that's causing test_httpservers to fail on 64-bit
OS X.
|
|||
| msg71350 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2008年08月18日 16:49 | |
Issue 1747858 looks closely related. I propose extending the simple fix used there, parsing all uids and gids as longs rather than ints. |
|||
| msg85649 - (view) | Author: Gregory P. Smith (gregory.p.smith) * (Python committer) | Date: 2009年04月06日 16:14 | |
Fixed via issue5705 which I filed not having seen this one. |
|||
| msg85671 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2009年04月06日 21:43 | |
I'd completely forgotten about this issue! Indeed, test_httpservers now seems to be passing on a 64-bit build on my machine. Thank you! |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:37 | admin | set | github: 47836 |
| 2009年04月06日 21:43:05 | mark.dickinson | set | messages: + msg85671 |
| 2009年04月06日 16:14:30 | gregory.p.smith | set | status: open -> closed dependencies: + os.getpwent returns unsigned 32bit value, os.setuid refuses it assignee: gregory.p.smith versions: + Python 3.0, Python 3.1, Python 2.7 keywords: + 64bit nosy: + gregory.p.smith messages: + msg85649 resolution: fixed |
| 2008年08月18日 16:49:12 | mark.dickinson | set | messages: + msg71350 |
| 2008年08月18日 11:49:56 | mark.dickinson | set | messages: + msg71320 |
| 2008年08月18日 10:22:44 | mark.dickinson | create | |