Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source3/lib/system.c

    r590 r745  
    2222
    2323#include "includes.h"
     24
     25
     26
     27
    2428
    2529#ifdef HAVE_SYS_PRCTL_H
    2630#include <sys/prctl.h>
     31
     32
     33
    2734#endif
    2835
     
    124131        do {
    125132                ret = read(fd, buf, count);
    126         } while (ret == -1 && errno == EINTR);
     133#if defined(EWOULDBLOCK)
     134        } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
     135#else
     136        } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
     137#endif
    127138        return ret;
    128139}
     
    138149        do {
    139150                ret = write(fd, buf, count);
    140         } while (ret == -1 && errno == EINTR);
     151#if defined(EWOULDBLOCK)
     152        } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
     153#else
     154        } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
     155#endif
    141156        return ret;
    142157}
     
    163178        do {
    164179                ret = writev(fd, iov, iovcnt);
    165         } while (ret == -1 && errno == EINTR);
     180#if defined(EWOULDBLOCK)
     181        } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
     182#else
     183        } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
     184#endif
    166185        return ret;
    167186}
     
    208227
    209228/*******************************************************************
    210 A send wrapper that will deal with EINTR.
     229A send wrapper that will deal with EINTR.
    211230********************************************************************/
    212231
     
    217236        do {
    218237                ret = send(s, msg, len, flags);
    219         } while (ret == -1 && errno == EINTR);
    220         return ret;
    221 }
    222 
    223 /*******************************************************************
    224 A sendto wrapper that will deal with EINTR.
     238#if defined(EWOULDBLOCK)
     239        } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
     240#else
     241        } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
     242#endif
     243        return ret;
     244}
     245
     246/*******************************************************************
     247A sendto wrapper that will deal with EINTR or EAGAIN or EWOULDBLOCK.
    225248********************************************************************/
    226249
     
    231254        do {
    232255                ret = sendto(s, msg, len, flags, to, tolen);
    233         } while (ret == -1 && errno == EINTR);
    234         return ret;
    235 }
    236 
    237 /*******************************************************************
    238 A recv wrapper that will deal with EINTR.
     256#if defined(EWOULDBLOCK)
     257        } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
     258#else
     259        } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
     260#endif
     261        return ret;
     262}
     263
     264/*******************************************************************
     265A recv wrapper that will deal with EINTR or EAGAIN or EWOULDBLOCK.
    239266********************************************************************/
    240267
     
    245272        do {
    246273                ret = recv(fd, buf, count, flags);
    247         } while (ret == -1 && errno == EINTR);
     274#if defined(EWOULDBLOCK)
     275        } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
     276#else
     277        } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
     278#endif
    248279        return ret;
    249280}
     
    259290        do {
    260291                ret = recvfrom(s, buf, len, flags, from, fromlen);
    261         } while (ret == -1 && errno == EINTR);
     292#if defined(EWOULDBLOCK)
     293        } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
     294#else
     295        } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
     296#endif
    262297        return ret;
    263298}
     
    637672#elif defined(HAVE_POSIX_FALLOCATE) && !defined(HAVE_BROKEN_POSIX_FALLOCATE)
    638673        return posix_fallocate(fd, offset, len);
     674
     675
     676
     677
     678
     679
     680
     681
     682
     683
     684
     685
     686
     687
     688
     689
     690
     691
     692
     693
     694
     695
     696
     697
     698
    639699#else
    640700        return ENOSYS;
     701
     702
     703
     704
     705
     706
     707
     708
     709
     710
     711
     712
     713
     714
     715
     716
     717
     718
     719
     720
     721
     722
     723
     724
     725
     726
     727
     728
     729
     730
     731
     732
     733
     734
     735
    641736#endif
    642737}
     
    743838}
    744839
     840
     841
     842
     843
     844
     845
     846
     847
     848
    745849
    746850/*******************************************************************
     
    778882#else
    779883        return opendir(name);
     884
     885
     886
     887
     888
     889
     890
     891
     892
     893
     894
     895
     896
     897
     898
     899
     900
     901
    780902#endif
    781903}
     
    10331155}
    10341156
     1157
     1158
     1159
     1160
    10351161/**************************************************************************
    10361162 Returns equivalent to NGROUPS_MAX - using sysconf if needed.
     
    10531179
    10541180#if defined(HAVE_BROKEN_GETGROUPS)
     1181
     1182
     1183
     1184
     1185
     1186
     1187
    10551188static int sys_broken_getgroups(int setlen, gid_t *gidset)
    10561189{
     
    12321365
    12331366/**************************************************************************
    1234  Wrappers for setpwent(), getpwent() and endpwent()
    1235 ****************************************************************************/
    1236 
    1237 void sys_setpwent(void)
    1238 {
    1239         setpwent();
    1240 }
    1241 
    1242 struct passwd *sys_getpwent(void)
    1243 {
    1244         return getpwent();
    1245 }
    1246 
    1247 void sys_endpwent(void)
    1248 {
    1249         endpwent();
    1250 }
    1251 
    1252 /**************************************************************************
    1253  Wrappers for getpwnam(), getpwuid(), getgrnam(), getgrgid()
    1254 ****************************************************************************/
    1255 
    1256 
    1257 struct passwd *sys_getpwnam(const char *name)
    1258 {
    1259         return getpwnam(name);
    1260 }
    1261 
    1262 struct passwd *sys_getpwuid(uid_t uid)
    1263 {
    1264         return getpwuid(uid);
    1265 }
    1266 
    1267 struct group *sys_getgrnam(const char *name)
    1268 {
    1269         return getgrnam(name);
    1270 }
    1271 
    1272 struct group *sys_getgrgid(gid_t gid)
    1273 {
    1274         return getgrgid(gid);
    1275 }
    1276 
    1277 /**************************************************************************
    12781367 Extract a command into an arg list.
    12791368****************************************************************************/
     
    14421531
    14431532        SAFE_FREE(entry);
    1444         SAFE_FREE(argl);
     1533        _FREE(argl);
    14451534        close(pipe_fds[0]);
    14461535        close(pipe_fds[1]);
     
    17741863                }
    17751864                /* Shift results back, so we can prepend prefixes */
    1776                 buf = memmove(list + len, list, list_size);
     1865                buf = memmove(list + len, list, list_size);
    17771866
    17781867                for(i = 0; i < list_size; i += len + 1) {
     
    25832672}
    25842673#endif /* WITH_AIO */
    2585 
    2586 int sys_getpeereid( int s, uid_t *uid)
    2587 {
    2588 #if defined(HAVE_PEERCRED)
    2589         struct ucred cred;
    2590         socklen_t cred_len = sizeof(struct ucred);
    2591         int ret;
    2592 
    2593         ret = getsockopt(s, SOL_SOCKET, SO_PEERCRED, (void *)&cred, &cred_len);
    2594         if (ret != 0) {
    2595                 return -1;
    2596         }
    2597 
    2598         if (cred_len != sizeof(struct ucred)) {
    2599                 errno = EINVAL;
    2600                 return -1;
    2601         }
    2602 
    2603         *uid = cred.uid;
    2604         return 0;
    2605 #else
    2606         errno = ENOSYS;
    2607         return -1;
    2608 #endif
    2609 }
    2610 
    2611 int sys_getnameinfo(const struct sockaddr *psa,
    2612                         socklen_t salen,
    2613                         char *host,
    2614                         size_t hostlen,
    2615                         char *service,
    2616                         size_t servlen,
    2617                         int flags)
    2618 {
    2619         /*
    2620          * For Solaris we must make sure salen is the
    2621          * correct length for the incoming sa_family.
    2622          */
    2623 
    2624         if (salen == sizeof(struct sockaddr_storage)) {
    2625                 salen = sizeof(struct sockaddr_in);
    2626 #if defined(HAVE_IPV6)
    2627                 if (psa->sa_family == AF_INET6) {
    2628                         salen = sizeof(struct sockaddr_in6);
    2629                 }
    2630 #endif
    2631         }
    2632         return getnameinfo(psa, salen, host, hostlen, service, servlen, flags);
    2633 }
    2634 
    2635 int sys_connect(int fd, const struct sockaddr * addr)
    2636 {
    2637         socklen_t salen = -1;
    2638 
    2639         if (addr->sa_family == AF_INET) {
    2640             salen = sizeof(struct sockaddr_in);
    2641         } else if (addr->sa_family == AF_UNIX) {
    2642             salen = sizeof(struct sockaddr_un);
    2643         }
    2644 #if defined(HAVE_IPV6)
    2645         else if (addr->sa_family == AF_INET6) {
    2646             salen = sizeof(struct sockaddr_in6);
    2647         }
    2648 #endif
    2649 
    2650         return connect(fd, addr, salen);
    2651 }
Note: See TracChangeset for help on using the changeset viewer.