diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-02-12 12:43:04 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-02-12 12:43:04 +0000 |
commit | 7a01268aebada78b505f9ac4736cb23fa8bf260d (patch) | |
tree | acfd54621f334218918c7c496eeb4230ad0e404c /ext/socket/basicsocket.c | |
parent | e52da919872f8cf71c90a27b470cef724204eece (diff) | |
download | ruby-7a01268aebada78b505f9ac4736cb23fa8bf260d.tar.gz |
* ext/socket/basicsocket.c (bsock_getpeereid): implemented for Solaris
using getpeerucred.
* ext/socket/extconf.rb: check ucred.h and getpeerucred.
* ext/socket/rubysocket.h: include ucred.h if available.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket/basicsocket.c')
-rw-r--r-- | ext/socket/basicsocket.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/ext/socket/basicsocket.c b/ext/socket/basicsocket.c index b818ffa82f..fd7493095d 100644 --- a/ext/socket/basicsocket.c +++ b/ext/socket/basicsocket.c @@ -392,6 +392,16 @@ bsock_getpeereid(VALUE self) if (getsockopt(fptr->fd, SOL_SOCKET, SO_PEERCRED, &cred, &len) == -1) rb_sys_fail("getsockopt(SO_PEERCRED)"); return rb_assoc_new(UIDT2NUM(cred.uid), GIDT2NUM(cred.gid)); +#elif defined(HAVE_GETPEERUCRED) /* Solaris */ + rb_io_t *fptr; + ucred_t *uc = NULL; + VALUE ret; + GetOpenFile(self, fptr); + if (getpeerucred(fptr->fd, &uc) == -1) + rb_sys_fail("getpeerucred"); + ret = rb_assoc_new(UIDT2NUM(ucred_geteuid(uc)), GIDT2NUM(ucred_getegid(uc))); + ucred_free(uc); + return ret; #else rb_notimplement(); #endif |