Diff for /embedaddon/rsync/uidlist.c between versions 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2013/10/14 07:51:14 version 1.1.1.3, 2016/11/01 09:54:32
Line 3 Line 3
  *   *
  * Copyright (C) 1996 Andrew Tridgell   * Copyright (C) 1996 Andrew Tridgell
  * Copyright (C) 1996 Paul Mackerras   * Copyright (C) 1996 Paul Mackerras
 * Copyright (C) 2004-2013 Wayne Davison * Copyright (C) 2004-2015 Wayne Davison
  *   *
  * This program is free software; you can redistribute it and/or modify   * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by   * it under the terms of the GNU General Public License as published by
Line 473  void parse_name_map(char *map, BOOL usernames) Line 473  void parse_name_map(char *map, BOOL usernames)
                                         usernames ? "user" : "group", cp);                                          usernames ? "user" : "group", cp);
                                 exit_cleanup(RERR_SYNTAX);                                  exit_cleanup(RERR_SYNTAX);
                         }                          }
                        if (dash)                        if (dash) {
                                 *dash = '\0';
                                 noiu.max_id = id_parse(dash+1);                                  noiu.max_id = id_parse(dash+1);
                        else                        } else
                                 noiu.max_id = 0;                                  noiu.max_id = 0;
                         flags = 0;                          flags = 0;
                         id1 = id_parse(cp);                          id1 = id_parse(cp);
                           if (dash)
                                   *dash = '-';
                 } else if (strpbrk(cp, "*[?")) {                  } else if (strpbrk(cp, "*[?")) {
                         flags = NFLAGS_WILD_NAME_MATCH;                          flags = NFLAGS_WILD_NAME_MATCH;
                         noiu.name = cp;                          noiu.name = cp;
Line 521  void parse_name_map(char *map, BOOL usernames) Line 524  void parse_name_map(char *map, BOOL usernames)
 }  }
   
 #ifdef HAVE_GETGROUPLIST  #ifdef HAVE_GETGROUPLIST
const char *getallgroups(uid_t uid, gid_t *gid_list, int *size_ptr)const char *getallgroups(uid_t uid, item_list *gid_list)
 {  {
         struct passwd *pw;          struct passwd *pw;
           gid_t *gid_array;
           int size;
   
         if ((pw = getpwuid(uid)) == NULL)          if ((pw = getpwuid(uid)) == NULL)
                 return "getpwuid failed";                  return "getpwuid failed";
   
           gid_list->count = 0; /* We're overwriting any items in the list */
           EXPAND_ITEM_LIST(gid_list, gid_t, 32);
           size = gid_list->malloced;
   
         /* Get all the process's groups, with the pw_gid group first. */          /* Get all the process's groups, with the pw_gid group first. */
        if (getgrouplist(pw->pw_name, pw->pw_gid, gid_list, size_ptr) < 0)        if (getgrouplist(pw->pw_name, pw->pw_gid, gid_list->items, &size) < 0) {
                return "getgrouplist failed";                if (size > (int)gid_list->malloced) {
                         gid_list->count = gid_list->malloced;
                         EXPAND_ITEM_LIST(gid_list, gid_t, size);
                         if (getgrouplist(pw->pw_name, pw->pw_gid, gid_list->items, &size) < 0)
                                 size = -1;
                 } else
                         size = -1;
                 if (size < 0)
                         return "getgrouplist failed";
         }
         gid_list->count = size;
         gid_array = gid_list->items;
 
         /* Paranoia: is the default group not first in the list? */          /* Paranoia: is the default group not first in the list? */
        if (gid_list[0] != pw->pw_gid) {        if (gid_array[0] != pw->pw_gid) {
                 int j;                  int j;
                for (j = 0; j < *size_ptr; j++) {                for (j = 1; j < size; j++) {
                        if (gid_list[j] == pw->pw_gid) {                        if (gid_array[j] == pw->pw_gid)
                                gid_list[j] = gid_list[0]; 
                                gid_list[0] = pw->pw_gid; 
                                 break;                                  break;
                         }  
                 }                  }
                   if (j == size) { /* The default group wasn't found! */
                           EXPAND_ITEM_LIST(gid_list, gid_t, size+1);
                           gid_array = gid_list->items;
                   }
                   gid_array[j] = gid_array[0];
                   gid_array[0] = pw->pw_gid;
         }          }
   
         return NULL;          return NULL;
 }  }
 #endif  #endif

Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>