Changeset 740 for vendor/current/lib/util/system.c
- Timestamp:
- Nov 14, 2012, 12:59:34 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/lib/util/system.c
r414 r740 118 118 return mypid; 119 119 } 120 121 122 _PUBLIC_ int sys_getpeereid( int s, uid_t *uid) 123 { 124 #if defined(HAVE_PEERCRED) 125 struct ucred cred; 126 socklen_t cred_len = sizeof(struct ucred); 127 int ret; 128 129 ret = getsockopt(s, SOL_SOCKET, SO_PEERCRED, (void *)&cred, &cred_len); 130 if (ret != 0) { 131 return -1; 132 } 133 134 if (cred_len != sizeof(struct ucred)) { 135 errno = EINVAL; 136 return -1; 137 } 138 139 *uid = cred.uid; 140 return 0; 141 #else 142 #if defined(HAVE_GETPEEREID) 143 gid_t gid; 144 return getpeereid(s, uid, &gid); 145 #endif 146 errno = ENOSYS; 147 return -1; 148 #endif 149 } 150 151 _PUBLIC_ int sys_getnameinfo(const struct sockaddr *psa, 152 int salen, 153 char *host, 154 size_t hostlen, 155 char *service, 156 size_t servlen, 157 int flags) 158 { 159 /* 160 * For Solaris we must make sure salen is the 161 * correct length for the incoming sa_family. 162 */ 163 164 if (salen == sizeof(struct sockaddr_storage)) { 165 salen = sizeof(struct sockaddr_in); 166 #if defined(HAVE_IPV6) 167 if (psa->sa_family == AF_INET6) { 168 salen = sizeof(struct sockaddr_in6); 169 } 170 #endif 171 } 172 return getnameinfo(psa, salen, host, hostlen, service, servlen, flags); 173 } 174 175 _PUBLIC_ int sys_connect(int fd, const struct sockaddr * addr) 176 { 177 socklen_t salen = (socklen_t)-1; 178 179 if (addr->sa_family == AF_INET) { 180 salen = sizeof(struct sockaddr_in); 181 } else if (addr->sa_family == AF_UNIX) { 182 salen = sizeof(struct sockaddr_un); 183 } 184 #if defined(HAVE_IPV6) 185 else if (addr->sa_family == AF_INET6) { 186 salen = sizeof(struct sockaddr_in6); 187 } 188 #endif 189 190 return connect(fd, addr, salen); 191 }
Note:
See TracChangeset
for help on using the changeset viewer.