static int user_coll_fill()

in plugin/server_audit/server_audit.cc [640:702]


static int user_coll_fill(struct user_coll *c, char *users,
                          struct user_coll *cmp_c, int take_over_cmp)
{
  char *orig_users= users;
  char *cmp_user= 0;
  size_t cmp_length;
  int refill_cmp_coll= 0;

  c->n_users= 0;

  while (*users)
  {
    while (*users == ' ')
      users++;
    if (!*users)
      return 0;

    (void) getkey_user(users, &cmp_length, false);
    if (cmp_c)
    {
      cmp_user= coll_search(cmp_c, users, cmp_length);

      if (cmp_user && take_over_cmp)
      {
        ADD_ATOMIC(internal_stop_logging, 1);
        error_header();
        fprintf(stderr, "User '%.*s' was removed from the server_audit_excl_users.\n", (int) cmp_length, users);
        ADD_ATOMIC(internal_stop_logging, -1);
        blank_user(cmp_user);
        refill_cmp_coll= 1;
      }
      else if (cmp_user)
      {
        ADD_ATOMIC(internal_stop_logging, 1);
        error_header();
        fprintf(stderr, "User '%.*s' is in the server_audit_incl_users, so wasn't added.\n", (int) cmp_length, users);
        ADD_ATOMIC(internal_stop_logging, -1);
        remove_user(users);
        continue;
      }
    }
    if (coll_insert(c, users, cmp_length))
      return 1;
    while (*users && *users != ',')
      users++;
    if (!*users)
      break;
    users++;
  }

  if (refill_cmp_coll)
  {
    remove_blanks(excl_users);
    return user_coll_fill(cmp_c, excl_users, 0, 0);
  }

  if (users > orig_users && users[-1] == ',')
    users[-1]= 0;

  coll_sort(c);

  return 0;
}