Exemple #1
0
int
main (int argc, char *argv[])
{
  struct arguments args;

  entries_allocated = entries_used = 0;
  entries = NULL;

  if (_get_arguments (&args, argc, argv)) {
    load_entries (&args);

    if (args.list_details)
      do_list_details ();

    if (args.list_by_account)
      do_list_by_account ();
  
    if (args.list_by_date)
      do_list_by_date ();

    if (args.list_total)
      do_list_total ();
  }

  return 0;
}
Exemple #2
0
static void hsts_provider_init(HSTSProvider *self)
{
    /* initialize private fields */
    HSTSProviderPrivate *priv = HSTS_PROVIDER_GET_PRIVATE(self);
    priv->whitelist = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)free_entry);

    /* load entries from hsts file */
    load_entries(self, vb.files[FILES_HSTS]);
}
Exemple #3
0
Database *DB_create(const char *filename)
{
	assert(filename);
	
	Database *db = (Database *)malloc(sizeof(Database));
	db->filename = strdup(filename);
	load_entries(db->entries, filename);
	db->entry_num = 0;
	
	return db;
}
Exemple #4
0
static int
get_entries(struct search *search)
{
	size_t low = 0;
	size_t high = search->size;

	if (search->key == UINT64_C(0) || is_full(search))
		return 0;

	while (low < high) {
		long middle = (high + low) / 2;
		struct entry entry;
		if (get_entry(search->file, middle, &entry) != 0)
			return -1;

		if (entry.key == search->key) {
			if (load_entries(search, middle) != 0)
				return -1;
			break;
		}
		else if (entry.key > search->key) {
			high = middle;
		}
		else if (high > low + 1) {
			low = middle;
		}
		else {
			if (get_entry(search->file, high, &entry) != 0)
				return -1;
			if (entry.key == search->key) {
				if (load_entries(search, high) != 0)
					return -1;
			}
			return 0;
		}
	}

	return 0;
}
static void
reload_users (Daemon *daemon)
{
        GHashTable *users;
        GHashTable *old_users;
        GHashTable *local;
        GHashTableIter iter;
        gpointer name;
        User *user;

        /* Track the users that we saw during our (re)load */
        users = create_users_hash_table ();

        /*
         * NOTE: As we load data from all the sources, notifies are
         * frozen in load_entries() and then thawed as we process
         * them below.
         */

        /* Load the local users into our hash table */
        load_entries (daemon, users, entry_generator_fgetpwent);
        local = g_hash_table_new (g_str_hash, g_str_equal);
        g_hash_table_iter_init (&iter, users);
        while (g_hash_table_iter_next (&iter, &name, NULL))
                g_hash_table_add (local, name);

        /* Now add/update users from other sources, possibly non-local */
        load_entries (daemon, users, wtmp_helper_entry_generator);
        load_entries (daemon, users, entry_generator_cachedir);

        /* Mark which users are local, which are not */
        g_hash_table_iter_init (&iter, users);
        while (g_hash_table_iter_next (&iter, &name, (gpointer *)&user))
                user_update_local_account_property (user, g_hash_table_lookup (local, name) != NULL);

        g_hash_table_destroy (local);

        /* Swap out the users */
        old_users = daemon->priv->users;
        daemon->priv->users = users;

        /* Remove all the old users */
        g_hash_table_iter_init (&iter, old_users);
        while (g_hash_table_iter_next (&iter, &name, (gpointer *)&user)) {
                if (!g_hash_table_lookup (users, name)) {
                        user_unregister (user);
                        accounts_accounts_emit_user_deleted (ACCOUNTS_ACCOUNTS (daemon),
                                                             user_get_object_path (user));
                }
        }

        /* Register all the new users */
        g_hash_table_iter_init (&iter, users);
        while (g_hash_table_iter_next (&iter, &name, (gpointer *)&user)) {
                if (!g_hash_table_lookup (old_users, name)) {
                        user_register (user);
                        accounts_accounts_emit_user_added (ACCOUNTS_ACCOUNTS (daemon),
                                                           user_get_object_path (user));
                }
                g_object_thaw_notify (G_OBJECT (user));
        }

        g_hash_table_destroy (old_users);
}