projects/pwm

view pwfile.h @ 20:efef93e54c5f

Automatically save the database when receiving a fatal signal
author Guido Berhoerster <guido+pwm@berhoerster.name>
date Wed Sep 06 13:56:11 2017 +0200 (2017-09-06)
parents 17fb30016e64
children ec01c579024a
line source
1 /*
2 * Copyright (C) 2017 Guido Berhoerster <guido+pwm@berhoerster.name>
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sublicense, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included
13 * in all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 */
24 #ifndef PWFILE_H
25 #define PWFILE_H
27 #include "pwm.h"
29 enum item_type {
30 ITEM_TYPE_RECORD,
31 ITEM_TYPE_GROUP
32 };
34 union list_item {
35 struct any_item {
36 enum item_type type;
37 char *group;
38 } any;
39 struct record_item {
40 enum item_type type;
41 char *group;
42 char *title;
43 unsigned int id;
44 unsigned char uuid[PWS3_UUID_SIZE];
45 } record;
46 struct group_item {
47 enum item_type type;
48 char *group;
49 } group;
50 };
52 struct record_id_tree;
54 struct metadata {
55 int version;
56 char *user;
57 char *host;
58 char *application;
59 time_t timestamp;
60 };
62 struct record {
63 char *title;
64 char *group;
65 char *username;
66 char *password;
67 char *notes;
68 char *url;
69 time_t ctime;
70 time_t mtime;
71 };
73 void pwfile_init(struct pwm_ctx *ctx);
74 void pwfile_destroy(struct pwm_ctx *);
75 int pwfile_read_file(struct pwm_ctx *, FILE *);
76 int pwfile_write_file(struct pwm_ctx *);
77 int pwfile_write_autosave_file(struct pwm_ctx *);
78 union list_item ** pwfile_create_list(struct pwm_ctx *);
79 void pwfile_destroy_list(union list_item **);
80 struct metadata * pwfile_get_metadata(struct pwm_ctx *);
81 void pwfile_destroy_metadata(struct metadata *);
82 int pwfile_create_record(struct pwm_ctx *, struct record *);
83 int pwfile_modify_record(struct pwm_ctx *, unsigned int,
84 struct record *);
85 int pwfile_remove_record(struct pwm_ctx *, unsigned int);
86 int pwfile_create_group(struct pwm_ctx *, const char *);
87 int pwfile_remove_group(struct pwm_ctx *, const char *);
88 struct record * pwfile_get_record(struct pwm_ctx *, unsigned int);
89 void pwfile_destroy_record(struct record *);
91 #endif /* !PWFILE_H */