view pwfile.h @ 20:efef93e54c5f

Automatically save the database when receiving a fatal signal
author Guido Berhoerster <guido+pwm@berhoerster.name>
date Wed, 06 Sep 2017 13:56:11 +0200
parents 17fb30016e64
children ec01c579024a
line wrap: on
line source

/*
 * Copyright (C) 2017 Guido Berhoerster <guido+pwm@berhoerster.name>
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

#ifndef	PWFILE_H
#define	PWFILE_H

#include "pwm.h"

enum item_type {
	ITEM_TYPE_RECORD,
	ITEM_TYPE_GROUP
};

union list_item {
	struct any_item {
		enum item_type	type;
		char		*group;
	} any;
	struct record_item {
		enum item_type	type;
		char		*group;
		char		*title;
		unsigned int	id;
		unsigned char	uuid[PWS3_UUID_SIZE];
	} record;
	struct group_item {
		enum item_type	type;
		char		*group;
	} group;
};

struct record_id_tree;

struct metadata {
	int	version;
	char	*user;
	char	*host;
	char	*application;
	time_t	timestamp;
};

struct record {
	char	*title;
	char	*group;
	char	*username;
	char	*password;
	char	*notes;
	char	*url;
	time_t	ctime;
	time_t	mtime;
};

void		pwfile_init(struct pwm_ctx *ctx);
void		pwfile_destroy(struct pwm_ctx *);
int		pwfile_read_file(struct pwm_ctx *, FILE *);
int		pwfile_write_file(struct pwm_ctx *);
int		pwfile_write_autosave_file(struct pwm_ctx *);
union list_item ** pwfile_create_list(struct pwm_ctx *);
void		pwfile_destroy_list(union list_item **);
struct metadata * pwfile_get_metadata(struct pwm_ctx *);
void		pwfile_destroy_metadata(struct metadata *);
int		pwfile_create_record(struct pwm_ctx *, struct record *);
int		pwfile_modify_record(struct pwm_ctx *, unsigned int,
    struct record *);
int		pwfile_remove_record(struct pwm_ctx *, unsigned int);
int		pwfile_create_group(struct pwm_ctx *, const char *);
int		pwfile_remove_group(struct pwm_ctx *, const char *);
struct record *	pwfile_get_record(struct pwm_ctx *, unsigned int);
void		pwfile_destroy_record(struct record *);

#endif /* !PWFILE_H */