Ignore:
Timestamp:
Nov 14, 2012, 12:59:34 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to 3.6.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/lib/util/system.c

    r414 r740  
    118118        return mypid;
    119119}
     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.