From 84e6ee29846bd48cc36d74aeb5c13c52a59c5a55 Mon Sep 17 00:00:00 2001 From: Apple Date: Sat, 5 Apr 2008 00:09:45 +0000 Subject: [PATCH] Libinfo-278.0.3.tar.gz --- lookup.subproj/getaddrinfo.c | 4 ++-- lookup.subproj/lu_group.c | 16 +++++++++++----- membership.subproj/membership.c | 12 ++++++++---- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/lookup.subproj/getaddrinfo.c b/lookup.subproj/getaddrinfo.c index fc9482f..6680f4a 100644 --- a/lookup.subproj/getaddrinfo.c +++ b/lookup.subproj/getaddrinfo.c @@ -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; diff --git a/lookup.subproj/lu_group.c b/lookup.subproj/lu_group.c index 05d7aca..5b0e700 100644 --- a/lookup.subproj/lu_group.c +++ b/lookup.subproj/lu_group.c @@ -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; diff --git a/membership.subproj/membership.c b/membership.subproj/membership.c index a650f90..83e1345 100644 --- a/membership.subproj/membership.c +++ b/membership.subproj/membership.c @@ -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, ¤t, 10); + sid->sid_authorities[count] = (u_int32_t)strtoll(current, ¤t, 10); count++; } -- 2.7.4