view pwfile.h @ 27:722a45b4028b

Add define command for defining macros Macros are parsed when they are defined with the D command and can subsequently be used as arguments for other commands. Handle out of memory errors directly in tok.c.
author Guido Berhoerster <guido+pwm@berhoerster.name>
date Mon, 25 Sep 2017 21:21:25 +0200
parents ec01c579024a
children
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_pws_record(struct pwm_ctx *, struct record *);
int		pwfile_modify_pws_record(struct pwm_ctx *, unsigned int,
    struct record *);
int		pwfile_remove_pws_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_create_record(void);
struct record *	pwfile_get_record(struct pwm_ctx *, unsigned int);
void		pwfile_destroy_record(struct record *);

#endif /* !PWFILE_H */