Recently Written · git

pass-simple

fork of zerous' minimal pass rewrite with bugfixes

git clone https://github.com/equwal/pass-simple

Log | Files | Refs


log.c (2241 bytes)

1 #include <errno.h>
2 #include <gpgme.h>
3 #include <limits.h>
4 #include <sys/stat.h>
5 #include <stdarg.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9 
10 #include "pass.h"
11 
12 int debug;
13 
14 static char *progname;
15 
16 static void
17 vlog(char *msg, va_list ap)
18 {
19 	char file[PATH_MAX];
20 	const char *home;
21 	FILE *fp;
22 	struct stat sb;
23 
24 	if (debug) {
25 		if (!(home = getenv("HOME"))) {
26 			fprintf(stderr, "$HOME not set, cannot determine password-store location");
27 			exit(1);
28 		}
29 		snprintf(file, sizeof(file), "%s/.pass.log", home);
30 		
31 		if (!stat(file,&sb))
32 			remove(file);
33 		if((fp = fopen(file, "ab"))) {
34 			fprintf(fp, "%s: ", progname);
35 			vfprintf(fp, msg, ap);
36 			fputc('\n', fp);
37 		} else {
38 			fprintf(stderr, "fopen %s: %s", file, strerror(errno));
39 		}
40 	} else {
41 		fprintf(stderr, "%s: ", progname);
42 		vfprintf(stderr, msg, ap);
43 		fputc('\n', stderr);
44 	}
45 }
46 
47 void
48 loginit(char *prog)
49 {
50 	progname = prog;
51 }
52 
53 void
54 logdbg(char *msg, ...)
55 {
56 	char buf[512];
57 	va_list ap;
58 
59 	va_start(ap, msg);
60 	snprintf(buf, sizeof(buf), "%s: %s", msg, strerror(errno));
61 	vlog(buf, ap);
62 	va_end(ap);
63 }
64 
65 void
66 logdbgx(char *msg, ...)
67 {
68 	va_list ap;
69 
70 	va_start(ap, msg);
71 	vlog(msg, ap);
72 	va_end(ap);
73 }
74 
75 void
76 logwarn(char *msg, ...)
77 {
78 	char buf[512];
79 	va_list ap;
80 
81 	va_start(ap, msg);
82 	snprintf(buf, sizeof(buf), "%s: %s", msg, strerror(errno));
83 	vlog(buf, ap);
84 	va_end(ap);
85 }
86 
87 void
88 logwarnx(char *msg, ...)
89 {
90 	va_list ap;
91 
92 	va_start(ap, msg);
93 	vlog(msg, ap);
94 	va_end(ap);
95 }
96 
97 void
98 loggpg(gpgme_error_t gerr, char *msg, ...)
99 {
100 	char buf[512];
101 	va_list ap;
102 
103 	va_start(ap, msg);
104 	snprintf(buf, sizeof(buf), "%s: %s", msg, gpgme_strerror(gerr));
105 	vlog(msg, ap);
106 	va_end(ap);
107 }
108 
109 void
110 loggpgx(char *msg, ...)
111 {
112 	va_list ap;
113 
114 	va_start(ap, msg);
115 	vlog(msg, ap);
116 	va_end(ap);
117 }
118 
119 void
120 fatalgpg(gpgme_error_t gerr, char *msg, ...)
121 {
122 	char buf[512];
123 	va_list ap;
124 
125 	va_start(ap, msg);
126 	snprintf(buf, sizeof(buf), "%s: %s", msg, gpgme_strerror(gerr));
127 	vlog(buf, ap);
128 	va_end(ap);
129 	exit(1);
130 }
131 
132 void
133 fatal(char *msg, ...)
134 {
135 	char buf[512];
136 	va_list ap;
137 
138 	va_start(ap, msg);
139 	snprintf(buf, sizeof(buf), "%s: %s", msg, strerror(errno));
140 	vlog(buf, ap);
141 	va_end(ap);
142 	exit(1);
143 }
144 
145 void
146 fatalx(char *msg, ...)
147 {
148 	va_list ap;
149 
150 	va_start(ap, msg);
151 	vlog(msg, ap);
152 	va_end(ap);
153 	exit(1);
154 }