1 /* vim:tw=78:ts=8:sw=4:set ft=c: */
3 Copyright (C) 2006 Ben Kibbey <bjk@luxsci.net>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30 int main(int argc
, char *argv
[])
33 struct passwd
*pw
= getpwuid(getuid());
41 char *socketpath
= NULL
;
44 while ((opt
= getopt(argc
, argv
, "hs:a")) != EOF
) {
54 fprintf(stderr
, "Usage: %s [-h] [-a] [-s <socketpath>]\n"
56 " -s specify an alternate socket path\n"
57 " -h this help text\n", argv
[0]);
63 snprintf(buf
, sizeof(buf
), "%s/.pwmd/socket", pw
->pw_dir
);
67 fprintf(stderr
, "Connecting to socket...\n");
68 if ((pwm
= pwmd_connect(socketpath
, &error
)) == NULL
)
69 errx(EXIT_FAILURE
, "pwmd_connect(): %s", strerror(error
));
71 fprintf(stderr
, "Connected. fd=%i\n", pwm
->fd
);
74 fprintf(stderr
, "Setting password 'test'...\n");
76 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_SETOPT
,
77 PWMD_OPTION_PASSWORD
, "test")) != PWMD_OK
) {
80 if (ret
== PWMD_ERROR
)
81 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", strerror(error
));
83 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", pwmd_strerror(error
));
87 fprintf(stderr
, "Setting PWMD_OPTION_USEAGENT...\n");
88 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_SETOPT
,
89 PWMD_OPTION_USEAGENT
, 1)) != PWMD_OK
) {
92 if (ret
== PWMD_ERROR
)
93 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", strerror(error
));
95 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", pwmd_strerror(error
));
98 fprintf(stderr
, "Setting PWMD_OPTION_TITLE...\n");
99 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_SETOPT
,
100 PWMD_OPTION_TITLE
, "PWMD Client Test")) != PWMD_OK
) {
103 if (ret
== PWMD_ERROR
)
104 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", strerror(error
));
106 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", pwmd_strerror(error
));
109 fprintf(stderr
, "Setting PWMD_OPTION_PROMPT...\n");
110 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_SETOPT
,
111 PWMD_OPTION_PROMPT
, "Password please: ")) != PWMD_OK
) {
114 if (ret
== PWMD_ERROR
)
115 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", strerror(error
));
117 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", pwmd_strerror(error
));
120 fprintf(stderr
, "Setting PWMD_OPTION_DESC...\n");
121 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_SETOPT
,
122 PWMD_OPTION_DESC
, "Enter the password for file \"testfile\".")) != PWMD_OK
) {
125 if (ret
== PWMD_ERROR
)
126 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", strerror(error
));
128 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", pwmd_strerror(error
));
132 fprintf(stderr
, "Opening 'testfile'...\n");
133 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_OPEN
, "testfile")) != PWMD_OK
) {
136 if (ret
== PWMD_ERROR
)
137 errx(EXIT_FAILURE
, "PWMD_OPEN: %s", strerror(error
));
138 else if (ret
== PWMD_PERROR
)
139 errx(EXIT_FAILURE
, "PWMD_OPEN: %s", pwmd_strerror(error
));
141 errx(EXIT_FAILURE
, "PWMD_OPEN: gpg-agent failed. Is GPG_AGENT_INFO set?");
144 fprintf(stderr
, "File opened. Creating 'newaccount' and test element...\n");
145 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_STORE
, "newaccount\tsmtp\thostname\tsomehost.com")) != PWMD_OK
) {
148 if (ret
== PWMD_ERROR
)
149 errx(EXIT_FAILURE
, "PWMD_STORE: %s", strerror(error
));
151 errx(EXIT_FAILURE
, "PWMD_STORE: %s", pwmd_strerror(error
));
154 fprintf(stderr
, "OK. Testing invalid command syntax...\n");
155 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_GET
, "newaccount\tnop")) != PWMD_OK
) {
156 if (ret
== PWMD_ERROR
) {
158 errx(EXIT_FAILURE
, "PWMD_STORE: %s", strerror(error
));
161 fprintf(stderr
, "OK, the error was: %s\n", pwmd_strerror(error
));
164 fprintf(stderr
, "OK. Creating another element...\n");
165 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_STORE
, "newaccount\tsmtp\tport\t25")) != PWMD_OK
) {
168 if (ret
== PWMD_ERROR
)
169 errx(EXIT_FAILURE
, "PWMD_STORE: %s", strerror(error
));
171 errx(EXIT_FAILURE
, "PWMD_STORE: %s", pwmd_strerror(error
));
174 fprintf(stderr
, "OK. Testing PWMD_LIST for account list...\n");
175 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_LIST
)) != PWMD_OK
) {
178 if (ret
== PWMD_ERROR
)
179 errx(EXIT_FAILURE
, "PWMD_LIST: %s", strerror(error
));
181 errx(EXIT_FAILURE
, "PWMD_LIST: %s", pwmd_strerror(error
));
186 for (i
= 0; list
[i
]; i
++) {
187 fprintf(stderr
, "%s\n", list
[i
]);
193 fprintf(stderr
, "OK. Testing PWMD_LIST_ACCOUNT for specific account 'newaccount'...\n");
194 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_LIST_ACCOUNT
, "newaccount")) != PWMD_OK
) {
197 if (ret
== PWMD_ERROR
)
198 errx(EXIT_FAILURE
, "PWMD_LIST_ACCOUNT: %s", strerror(error
));
200 errx(EXIT_FAILURE
, "PWMD_LIST_ACCOUNT: %s", pwmd_strerror(error
));
205 for (i
= 0; list
[i
]; i
++) {
206 fprintf(stderr
, "%s\n", list
[i
]);
211 fprintf(stderr
, "OK. PWMD_GET'ing a single element from 'newaccount'...\n");
212 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_GET
, "newaccount\tsmtp\thostname")) != PWMD_OK
) {
215 if (ret
== PWMD_ERROR
)
216 errx(EXIT_FAILURE
, "PWMD_GET: %s", strerror(error
));
218 errx(EXIT_FAILURE
, "PWMD_GET: %s", pwmd_strerror(error
));
222 fprintf(stderr
, "%s\n", value
);
225 fprintf(stderr
, "OK. Changing account 'newaccount' to 'namechange'...\n");
226 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_SETATTR
, "newaccount", PWMD_ATTR_NAME
, "namechange")) != PWMD_OK
) {
229 if (ret
== PWMD_ERROR
)
230 errx(EXIT_FAILURE
, "PWMD_SETATTR: %s", strerror(error
));
232 errx(EXIT_FAILURE
, "PWMD_SETATTR: %s", pwmd_strerror(error
));
235 fprintf(stderr
, "OK. see!\n");
236 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_LIST
)) != PWMD_OK
) {
239 if (ret
== PWMD_ERROR
)
240 errx(EXIT_FAILURE
, "PWMD_LIST: %s", strerror(error
));
242 errx(EXIT_FAILURE
, "PWMD_LIST: %s", pwmd_strerror(error
));
247 for (i
= 0; list
[i
]; i
++) {
248 fprintf(stderr
, "%s\n", list
[i
]);
253 fprintf(stderr
, "No really!\n");
254 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_LIST_ACCOUNT
, "namechange")) != PWMD_OK
) {
257 if (ret
== PWMD_ERROR
)
258 errx(EXIT_FAILURE
, "PWMD_LIST_ACCOUNT: %s", strerror(error
));
260 errx(EXIT_FAILURE
, "PWMD_LIST_ACCOUNT: %s", pwmd_strerror(error
));
265 for (i
= 0; list
[i
]; i
++) {
266 fprintf(stderr
, "%s\n", list
[i
]);
271 fprintf(stderr
, "Testing PWMD_DELETE of 'namechange\\tsmtp'...\n");
272 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_DELETE
, "namechange\tsmtp")) != PWMD_OK
) {
275 if (ret
== PWMD_ERROR
)
276 errx(EXIT_FAILURE
, "PWMD_DELETE: %s", strerror(error
));
278 errx(EXIT_FAILURE
, "PWMD_DELETE: %s", pwmd_strerror(error
));
281 fprintf(stderr
, "OK. New pop3 tree (PWMD_STORE)...\n");
282 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_STORE
, "namechange\tpop3\thostname\tsomehost.com")) != PWMD_OK
) {
285 if (ret
== PWMD_ERROR
)
286 errx(EXIT_FAILURE
, "PWMD_STORE: %s", strerror(error
));
288 errx(EXIT_FAILURE
, "PWMD_STORE: %s", pwmd_strerror(error
));
291 fprintf(stderr
, "OK. PWMD_LIST_ACCOUNT of account 'namechange'...\n");
292 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_LIST_ACCOUNT
, "namechange")) != PWMD_OK
) {
295 if (ret
== PWMD_ERROR
)
296 errx(EXIT_FAILURE
, "PWMD_LIST_ACCOUNT: %s", strerror(error
));
298 errx(EXIT_FAILURE
, "PWMD_LIST_ACCOUNT: %s", pwmd_strerror(error
));
303 for (i
= 0; list
[i
]; i
++) {
304 fprintf(stderr
, "%s\n", list
[i
]);
310 fprintf(stderr
, "Setting PWMD_OPTION_DESC...\n");
311 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_SETOPT
,
312 PWMD_OPTION_DESC
, "Enter the new password for file \"testfile\".")) != PWMD_OK
) {
315 if (ret
== PWMD_ERROR
)
316 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", strerror(error
));
318 errx(EXIT_FAILURE
, "PWMD_SETOPT: %s", pwmd_strerror(error
));
322 fprintf(stderr
, "OK. PWMD_SAVE...\n");
323 if ((ret
= pwmd_command(pwm
, &result
, &error
, PWMD_SAVE
)) != PWMD_OK
) {
326 if (ret
== PWMD_ERROR
)
327 errx(EXIT_FAILURE
, "PWMD_SAVE: %s", strerror(error
));
328 else if (ret
== PWMD_PERROR
)
329 errx(EXIT_FAILURE
, "PWMD_SAVE: %s", pwmd_strerror(error
));
331 errx(EXIT_FAILURE
, "PWMD_OPEN: gpg-agent failed. Is GPG_AGENT_INFO set?");
336 fprintf(stderr
, "Done! delete the file 'testfile' in your PWMD data directory\n");