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 | ec02897c9a9f42b35e164577a9766f55d764823d (patch) | |
tree | acfd54621f334218918c7c496eeb4230ad0e404c /ext | |
parent | 6cca5fc7ea3421b3601598c10e50ab0f2706baa4 (diff) | |
download | ruby-ec02897c9a9f42b35e164577a9766f55d764823d.tar.gz ruby-ec02897c9a9f42b35e164577a9766f55d764823d.tar.xz ruby-ec02897c9a9f42b35e164577a9766f55d764823d.zip |
* 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: http://svn.ruby-lang.org/repos/ruby/trunk@22256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/socket/basicsocket.c | 10 | ||||
-rw-r--r-- | ext/socket/extconf.rb | 3 | ||||
-rw-r--r-- | ext/socket/rubysocket.h | 3 |
3 files changed, 16 insertions, 0 deletions
diff --git a/ext/socket/basicsocket.c b/ext/socket/basicsocket.c index b818ffa82..fd7493095 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 diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb index 921a0eeee..ae2338d18 100644 --- a/ext/socket/extconf.rb +++ b/ext/socket/extconf.rb @@ -316,6 +316,9 @@ have_type("struct cmsgcred", headers) have_func("getpeereid") +have_header("ucred.h", headers) +have_func("getpeerucred") + $distcleanfiles << "constants.h" << "constdefs.*" if have_func(test_func) diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h index ae21f2608..d6f09fe1e 100644 --- a/ext/socket/rubysocket.h +++ b/ext/socket/rubysocket.h @@ -79,6 +79,9 @@ #ifdef HAVE_SYS_UCRED_H #include <sys/ucred.h> #endif +#ifdef HAVE_UCRED_H +#include <ucred.h> +#endif #ifndef EWOULDBLOCK #define EWOULDBLOCK EAGAIN |