]> git.saurik.com Git - apple/libinfo.git/commitdiff
Libinfo-278.0.3.tar.gz mac-os-x-1053 mac-os-x-1054 mac-os-x-1055 mac-os-x-1056 mac-os-x-1057 mac-os-x-1058 v278.0.3
authorApple <opensource@apple.com>
Sat, 5 Apr 2008 00:09:45 +0000 (00:09 +0000)
committerApple <opensource@apple.com>
Sat, 5 Apr 2008 00:09:45 +0000 (00:09 +0000)
lookup.subproj/getaddrinfo.c
lookup.subproj/lu_group.c
membership.subproj/membership.c

index fc9482ff5fa6bf88fb964bb63905e5e4e3d3c95c..6680f4affb711e7a08b042ea63f01895c4363f09 100644 (file)
@@ -459,7 +459,8 @@ gai_make_query(const char *nodename, const char *servname, const struct addrinfo
        kvbuf_t *request;
        char str[64], *cname;
 
-       flags = 0;
+       /* new default for SULeoDeo */
+       flags = AI_PARALLEL;
        family = PF_UNSPEC;
        proto = IPPROTO_UNSPEC;
        socktype = SOCK_UNSPEC;
@@ -471,7 +472,6 @@ gai_make_query(const char *nodename, const char *servname, const struct addrinfo
                if (hints->ai_flags & AI_NUMERICHOST) flags |= AI_NUMERICHOST;
                if (hints->ai_flags & AI_CANONNAME) flags |= AI_CANONNAME;
                if (hints->ai_flags & AI_PASSIVE) flags |= AI_PASSIVE;
-               if (hints->ai_flags & AI_PARALLEL) flags |= AI_PARALLEL;
 
                proto = hints->ai_protocol;
 
index 05d7aca6bdbcc12a099d9e6254730ff001b6df00..5b0e70000f2b07e416f39a549bcbfbc5db272cbb 100644 (file)
@@ -499,10 +499,11 @@ mbr_getgrouplist(const char *name, int basegid, int *groups, int *grpcnt, int du
        struct passwd p, *res;
        char buf[MAXPWBUF];
        kern_return_t kstatus;
-       uint32_t i, maxgroups, count, gidptrCnt, gg_count;
+       uint32_t i, maxgroups, count, gg_count;
        int pwstatus;
        GIDArray gids;
        gid_t *gidptr, *gg_list;
+       size_t gidptrsz;
        int status, do_dealloc;
        audit_token_t token;
 
@@ -515,7 +516,7 @@ mbr_getgrouplist(const char *name, int basegid, int *groups, int *grpcnt, int du
        do_dealloc = 0;
        *grpcnt = 0;
        gidptr = NULL;
-       gidptrCnt = 0;
+       gidptrsz = 0;
        gg_list = NULL;
        gg_count = 0;
        
@@ -542,7 +543,9 @@ mbr_getgrouplist(const char *name, int basegid, int *groups, int *grpcnt, int du
        kstatus = 0;
        if (maxgroups > 16)
        {
+               uint32_t gidptrCnt = 0;
                kstatus = memberdDSmig_GetAllGroups(_ds_port, p.pw_uid, &count, &gidptr, &gidptrCnt, &token);
+               gidptrsz = gidptrCnt * sizeof(gid_t);
                do_dealloc = 1;
        }
        else
@@ -560,7 +563,7 @@ mbr_getgrouplist(const char *name, int basegid, int *groups, int *grpcnt, int du
 
        for (i = 0; i < count; i++) _add_group(gidptr[i], &gg_list, &gg_count, 0);
 
-       if ((do_dealloc == 1) && (gidptr != NULL)) vm_deallocate(mach_task_self(), (vm_address_t)gidptr, gidptrCnt);
+       if ((do_dealloc == 1) && (gidptr != NULL)) vm_deallocate(mach_task_self(), (vm_address_t)gidptr, gidptrsz);
 
        if (gg_list == NULL)
        {
@@ -596,6 +599,7 @@ ds_getgrouplist(const char *name, gid_t basegid, gid_t **grplist, int dupbase)
        uint32_t i, count, gidptrCnt, out_count;
        int pwstatus;
        gid_t *gidptr, *out_list;
+       size_t gidptrsz;
        audit_token_t token;
 
        if (_ds_port == MACH_PORT_NULL) return -1;
@@ -604,6 +608,7 @@ ds_getgrouplist(const char *name, gid_t basegid, gid_t **grplist, int dupbase)
 
        gidptr = NULL;
        gidptrCnt = 0;
+       gidptrsz = 0;
        out_list = NULL;
        out_count = 0;
 
@@ -629,17 +634,18 @@ ds_getgrouplist(const char *name, gid_t basegid, gid_t **grplist, int dupbase)
                if (out_list != NULL) free(out_list);
                return -1;
        }
+       gidptrsz = gidptrCnt * sizeof(gid_t);
 
        if (audit_token_uid(token) != 0)
        {
                if (out_list != NULL) free(out_list);
-               if (gidptr != NULL) vm_deallocate(mach_task_self(), (vm_address_t)gidptr, gidptrCnt);
+               if (gidptr != NULL) vm_deallocate(mach_task_self(), (vm_address_t)gidptr, gidptrsz);
                return -1;
        }
 
        for (i = 0; i < count; i++) _add_group(gidptr[i], &out_list, &out_count, 0);
 
-       if (gidptr != NULL) vm_deallocate(mach_task_self(), (vm_address_t)gidptr, gidptrCnt);
+       if (gidptr != NULL) vm_deallocate(mach_task_self(), (vm_address_t)gidptr, gidptrsz);
 
        *grplist = out_list;
        return out_count;
index a650f90c9244cbc879d97444652214eeb089f9c8..83e13454b297e31e23c328dc583af55b16f25673 100644 (file)
@@ -230,15 +230,19 @@ int mbr_sid_to_uuid(const nt_sid_t *sid, uuid_t uu)
        int status;
 
        request.el_seqno = 1;
-       request.el_flags = KAUTH_EXTLOOKUP_VALID_GSID | KAUTH_EXTLOOKUP_WANT_GGUID;
+       request.el_flags = KAUTH_EXTLOOKUP_VALID_GSID | KAUTH_EXTLOOKUP_WANT_GGUID | KAUTH_EXTLOOKUP_VALID_USID | KAUTH_EXTLOOKUP_WANT_UGUID;
        memset(&request.el_gsid, 0, sizeof(ntsid_t));
        memcpy(&request.el_gsid, sid, KAUTH_NTSID_SIZE(sid));
+       memset(&request.el_usid, 0, sizeof(ntsid_t));
+       memcpy(&request.el_usid, sid, KAUTH_NTSID_SIZE(sid));
 
        status = _mbr_MembershipCall(&request);
        if (status != 0) return status;
-       if ((request.el_flags & KAUTH_EXTLOOKUP_VALID_GGUID) == 0) return ENOENT;
 
-       memcpy(uu, &request.el_gguid, sizeof(guid_t));
+       if ((request.el_flags & KAUTH_EXTLOOKUP_VALID_GGUID) != 0) memcpy(uu, &request.el_gguid, sizeof(guid_t));
+       else if ((request.el_flags & KAUTH_EXTLOOKUP_VALID_UGUID) != 0) memcpy(uu, &request.el_uguid, sizeof(guid_t));
+       else return ENOENT;
+
        return 0;
 }
 
@@ -470,7 +474,7 @@ int mbr_string_to_sid(const char *string, nt_sid_t *sid)
        while (*current != '\0' && count < NTSID_MAX_AUTHORITIES)
        {
                current++;
-               sid->sid_authorities[count] = strtol(current, &current, 10);
+               sid->sid_authorities[count] = (u_int32_t)strtoll(current, &current, 10);
                count++;
        }