In pwmc, LOCK the opened data file.
[libpwmd.git] / libpwmd.3.in
blob9fdf4f6707fd0af50ec419d9dc0f0e4d44e3b793
1 .\" This program is free software; you can redistribute it and/or modify
2 .\" it under the terms of the GNU General Public License as published by
3 .\" the Free Software Foundation; either version 2 of the License, or
4 .\" (at your option) any later version.
5 .\" 
6 .\" This program is distributed in the hope that it will be useful,
7 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
8 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 .\" GNU General Public License for more details.
10 .\" 
11 .\" You should have received a copy of the GNU General Public License
12 .\" along with this program; if not, write to the Free Software
13 .\" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
14 .de URL
15 \\$2 \(laURL: \\$1 \(ra\\$3
17 .if \n[.g] .mso www.tmac
18 .TH LIBPWMD 3 "1 Mar 2008" "Password Manager Daemon Library" "Password Manager Daemon Library"
19 .SH NAME
21 libpwmd \- pwmd client interface library
22 .SH SYNOPSIS
23 .nf
24 .B #include <libpwmd.h>
25 .sp
26 .BI "gpg_error_t pwmd_init(void);"
27 .BI "pwm_t *pwmd_connect(const char *" socket ", gpg_error_t *" error ");"
28 .BI "gpg_error_t pwmd_assuan_ctx(pwm_t *" pwm ", assuan_context_t *" ctx ", int *" fd ");
29 .BI "gpg_error_t pwmd_pending_line(pwm_t *" pwm ", char **" line ", size_t *" len ");
30 .BI "gpg_error_t pwmd_setopt(pwm_t *" pwm ", pwmd_option_t " opt ", ...);"
31 .BI "gpg_error_t pwmd_open(pwm_t *" pwm ", const char *" filename ");"
32 .BI "int pwmd_open_nb(pwm_t *" pwm ", gpg_error_t *" error ", const char *" filename ", int " timeout ");"
33 .BI "gpg_error_t pwmd_open_nb_finalize(pwm_t *" pwm ", pwmd_nb_status_t *" status ");"
34 .BI "gpg_error_t pwmd_open_async(pwm_t *" pwm ", const char *" filename ");"
35 .BI "int pwmd_open_nb(pwm_t *" pwm ", gpg_error_t *" error ", const char *" filename ", int " timeout ");"
36 .BI "gpg_error_t pwmd_command(pwm_t *" pwm ", char **" result ", const char *" cmd ", " ... ");"
37 .BI "void pwmd_free_result(void *" result ");"
38 .BI "gpg_error_t pwmd_inquire(pwm_t *" pwm ", const char *" cmd ", pwmd_inquire_fn " func ", void *" data ");"
39 .BI "gpg_error_t pwmd_save(pwm_t *" pwm ");"
40 .BI "int pwmd_save_nb(pwm_t *" pwm ", gpg_error_t *" error ");"
41 .BI "gpg_error_t pwmd_save_nb_finalize(pwm_t *" pwm ", pwmd_nb_status_t *" status ");"
42 .BI "gpg_error_t pwmd_save_async(pwm_t *" pwm ");"
43 .BI "pwmd_async_t pwmd_process(pwm_t *" pwm ", gpg_error_t *" error ");"
44 .BI "gpg_error_t pwmd_finalize(pwm_t *" pwm ");"
45 .BI "gpg_error_t pwmd_terminate_pinentry(pwm_t *" pwm ");"
46 .BI "void pwmd_close(pwm_t *" pwm ");"
47 .BI "const char *pwmd_strerror(gpg_error_t " error ");"
49 .BI "typedef int (*" pwmd_status_fn ")(void *" data ", const char *" line ");"
50 .BI "typedef char *(*" pwmd_password_fn ")(pwm_t *" pwm ", void *" data ");"
51 .BI "typedef gpg_error_t (*" pwmd_inquire_fn ")(void *" data ", const char *" keyword ", gpg_error_t " rc ", char **" result ", size_t *" len ");"
52 .fi
53 .SH DESCRIPTION
54 .B libpwmd
55 is an library making it easy for applications to use
56 .BR pwmd (1).
58 .TP
59 .BI "gpg_error_t pwmd_init(void);"
60 Initializes \fBlibpwmd\fP, \fBlibassuan\fP, \fBlibgpg-error\fP and
61 internationalization. Be sure to call this before using the other functions.
62 If your application uses
63 .BR gettext(3)
64 be sure to call
65 .BR setlocale(3)
66 and
67 .BR textdomain(3)
68 before calling this function.
70 .TP
71 .BI "pwm_t *pwmd_connect(const char *" socket ", gpg_error_t *" error ");"
72 Connects to the specified \fIsocket\fP. If \fIsocket\fP is NULL then a default
73 of \fI~/.pwmd/socket\fP will be used. If there is an error while connecting
74 \fIerror\fP is set to the error code of the failed function and NULL is
75 returned. When successful a handle is returned for use with the other library
76 functions.
78 .TP
79 .BI "gpg_error_t pwmd_assuan_ctx(pwm_t *" pwm ", assuan_context_t *" ctx ", int *" fd ");
80 Sets \fIctx\fP to the assuan context associated with the handle \fIpwm\fP and
81 \fIfd\fP to the socket file descriptor. Returns \fB0\fP on success or an error
82 code.
84 .TP
85 .BI "gpg_error_t pwmd_pending_line(pwm_t *" pwm ", char **" line ", size_t *" len ");
86 This is a wrapper around \fBassuan_pending_line\fP() and
87 \fBassuan_read_line\fP(). Returns \fB0\fP and sets \fIline\fP to the content
88 and \fIlen\fP to the content length if there was a pending line. Or returns
89 \fBGPG_ERR_NO_DATA\fP if there was none or any error from
90 \fBassuan_read_line\fP().
92 .TP
93 .BI "gpg_error_t pwmd_setopt(pwm_t *" pwm ", pwmd_option_t " opt ", ...);"
94 Set the library option \fIopt\fP to the value of the next argument. Returns 0
95 on success or an error code. \fIopt\fP is one of the following:
96 .RS
97 .TP
98 .B PWMD_OPTION_PASSWORD_FUNC
99 Specifies a function to use to get a password. The next argument should be of
100 type \fIpwmd_password_fn\fP. The function should return a \fIchar
101 *\fP string which is the password or NULL if there is an
102 error.
104 .B PWMD_OPTION_PASSWORD_DATA
105 A user data pointer passed to the password function.
107 .B PWMD_OPTION_PINENTRY_TRIES
108 The next argument if type \fIint\fP specifies the number of invalid password
109 tries before
110 .BR pinentry (1)
111 gives up. Only \fBpwmd_open\fP() and \fBpwmd_open_nb\fP() will use this
112 option. \fBpwmd_save\fP() and \fBpwmd_save_nb\fP() will continue to confirm a
113 password until either a match is entered or Cancel is selected.
115 .B PWMD_OPTION_PINENTRY_TTY
117 .B PWMD_OPTION_PINENTRY_TERM
119 .B PWMD_OPTION_PINENTRY_DISPLAY
121 .B PWMD_OPTION_PINENTRY_PATH
122 Sets the
123 .BR pinentry (1)
124 command line options. The next argument should be of type \fIchar *\fP. If not
125 set, then the current DISPLAY, if set, or tty will be used.
127 .B PWMD_OPTION_PINENTRY
128 Whether to use 
129 .BR pinentry (1)
130 to obtain the password when opening and saving a file on the server. The
131 following argument is an \fIint\fP and is \fI1\fP to enable
132 .BR pinentry (1)
133 use, and \fI0\fP to use the password which is set with
134 \fBPWMD_OPTION_PASSWORD\fP or \fBPWMD_OPTION_PASSWORD_FUNC\fP. When \fI1\fP,
135 .BR pwmd (1)
136 won't use pinentry but return an error instead.
139 If the file \fI~/.pwmd/pinentry.conf\fP exists then values for the above settings will
140 be read from this file. The format of the file is one NAME=VALUE per line where
141 NAME is one of TTYNAME, TTYTYPE, DISPLAY or PATH. The value for an existing
142 setting will be updated to the value contained in the file. Note that the
143 server can also use this file for its
144 .BR pinentry (1)
145 settings.
148 .B PWMD_OPTION_PINENTRY_TITLE
150 .B PWMD_OPTION_PINENTRY_DESC
152 .B PWMD_OPTION_PINENTRY_PROMPT
153 Sets the strings used in the 
154 .BR pinentry (1)
155 program.
156 The next argument is of type \fIchar *\fP. If not defined then a default will
157 be used.
159 .B PWMD_OPTION_PASSWORD
160 Sets the password to use for opening and saving a file when
161 \fBPWMD_OPTION_PINENTRY\fP is \fI0\fP. The following argument is the password
162 and is of type \fIchar *\fP.
164 .B PWMD_OPTION_STATUS_FUNC
166 .B PWMD_OPTION_STATUS_DATA
167 The callback of type \fBpwmd_status_fn\fP to be called when 
168 .BR pwmd (1)
169 sends a status message. This function should return \fB0\fP on success or a
170 \fBgpg_error_t\fP on failure. The data passed to the function can be set with
171 \fBPWMD_OPTION_STATUS_DATA\fP. Status message lines are prefixed with a
172 keyword followed by a space then the message. Read the \fBlibassuan\fP
173 documentation for more information. 
177 .BI "gpg_error_t pwmd_open(pwm_t *" pwm ", const char *" filename ");"
178 Opens the specified \fIfilename\fP on the server. The password for the file is
179 gotten from one of the methods specified with \fBpwmd_setopt\fP().
180 An error code is returned on error or \fB0\fP on success.
183 .BI "int pwmd_open_nb(pwm_t *" pwm ", gpg_error_t *" error ", const char *" filename ", int " timeout ");"
184 This is a nonblocking way of obtaining the password from
185 .BR pinentry (1)
186 when opening a file on the server. When successful, it returns a file
187 descriptor that
188 .BR select (2)
189 can use. When ready,
190 .BR read (2)
191 should read a \fIpwmd_nb_status_t\fP and then call
192 \fBpwmd_open_nb_finalize\fP() to update the handle. If there is an error,
193 \fB-1\fP is returned and \fIerror\fP is set. If \fIfilename\fP is already
194 cached on the server or doesn't exist on the filesystem and the open
195 succeeded, \fB-2\fP is returned. The \fItimeout\fP argument is the number of
196 seconds until the pinentry process will terminate. If \fB0\fP, the default, no
197 timeout will be used. Note that \fBPWMD_OPTION_PINENTRY\fP must be set and
198 that if a timeout is specified then the child process will modify it's
199 \fBSIGALRM\fP handler.
202 .BI "gpg_error_t pwmd_open_nb_finalize(pwm_t *" pwm ", pwmd_nb_status_t *" status ");"
203 For use with \fBpwmd_open_nb\fP(); it updates the handle \fIpwm\fP and closes
204 the file descriptor. This should be called right after the successful
205 .BR read (2)
206 of \fIstatus\fP from the file descriptor returned by \fBpwmd_open_nb\fP(). If
207 there was a protocol or
208 .BR pinentry (1)
209 error, an error code is returned. Otherwise \fB0\fP is returned.
212 .BI "gpg_error_t pwmd_open_async(pwm_t *" pwm ", const char *" filename ");"
213 This is another method of opening a file in a non-blocking way. Instead of
214 \fBlibpwmd\fP executing \fBpinentry\fP after a fork(),
215 .BR pwmd (1)
216 will use its \fBpinentry\fP method. When successful \fB0\fP is returned and
217 \fBpwmd_process()\fP should be called until the command finishes.
220 .BI "gpg_error_t pwmd_command(pwm_t *" pwm ", char **" result ", const char *" cmd ", " ... ");"
221 Sends a protocol command to the server. The function returns \fB0\fP
222 when successful and stores the result of the command format string \fIcmd\fP
223 to \fIresult\fP. The result should be free'd with \fBpwmd_free_result\fP().
224 Protocol commands that don't have a result will set \fIresult\fP to NULL. If
225 an error occurs then an error code is returned. Note: the BYE protocol
226 command should not be sent here. Use \fBpwmd_close\fP() instead. For commands
227 that utilize a server INQUIRE response (i.e., "STORE"), you must use
228 \fBpwmd_inquire\fP() and not this function.
231 .BI "void pwmd_free_result(void *" result ");"
232 Deallocates the memory of \fBpwmd_command\fP() result. It is important to use
233 this function because
234 .B libpwmd
235 not only keeps track of all allocated memory used by other
236 .B libpwmd
237 functions, but also clears the memory contents for better security. Don't use
238 this to free your own allocated memory though.
241 .BI "gpg_error_t pwmd_inquire(pwm_t *" pwm ", const char *" cmd ", pwmd_inquire_fn " func ", void *" data ");"
242 Commands which use an INQUIRE to send data (i.e., STORE) should use this
243 function and not \fBpwmd_command\fP(). \fIcmd\fP is the command to send and is
244 also the \fIkeyword\fP argument to the specified callback function \fIfunc\fP.
245 \fIdata\fP is user data passed to the callback function. Returns 0 on success
246 or an error code which may have been returned from the callback function.
249 The callback function should return \fBGPG_ERR_EOF\fP when there is no more
250 data to be sent or to finish sending \fIresult\fP, if not NULL, and end the
251 INQUIRE. Or return \fB0\fP if there is more data to be sent, or an error code
252 to terminate the INQUIRE.
256 .BI "gpg_error_t pwmd_save(pwm_t *" pwm ");"
257 Saves the changes to the file associated with the handle \fIpwm\fP. If not
258 called before \fBpwmd_close\fP() then any changes will be lost. If an error
259 occurs then an error code is returned. Otherwise \fB0\fP is returned.
262 .BI "int pwmd_save_nb(pwm_t *" pwm ", gpg_error_t *" error ");"
263 This is a nonblocking way of obtaining the password from
264 .BR pinentry (1)
265 when saving an opened file. When successful, a file descriptor is returned
266 that
267 .BR select (2)
268 can use. When ready
269 .BR read (2)
270 should read a \fIpwmd_nb_status_t\fP and then call
271 \fBpwmd_save_nb_finalize\fP() to update the handle. If there was an error,
272 \fB-1\fP is returned and \fIerror\fP is set. If the file is cached on the
273 server and the save succeeded, \fB-2\fP is returned. Note that
274 \fBPWMD_OPTION_PINENTRY\fP must be set.
277 .BI "gpg_error_t pwmd_save_nb_finalize(pwm_t *" pwm ", pwmd_nb_status_t *" status ");"
278 For use with \fBpwmd_save_nb\fP(); it updates the handle \fIpwm\fP and closes
279 the file descriptor. This should be called right after the successful
280 .BR read (2)
281 of \fIstatus\fP from the file descriptor returned by \fBpwmd_save_nb\fP(). If
282 there was a protocol or
283 .BR pinentry (1)
284 error, an error code is returned. Otherwise \fB0\fP is returned.
287 .BI "gpg_error_t pwmd_save_async(pwm_t *" pwm ");"
288 This is another method of saving a file in a non-blocking way. Instead of
289 \fBlibpwmd\fP executing \fBpinentry\fP after a fork(),
290 .BR pwmd (1)
291 will use its \fBpinentry\fP method. When successful \fB0\fP is returned and
292 \fBpwmd_process()\fP should be called until the command finishes.
295 .BI "pwmd_async_t pwmd_process(pwm_t *" pwm ", gpg_error_t *" error ");"
296 For use with the asynchronous functions \fBpwmd_open_async()\fP and
297 \fBpwmd_save_async\fP(). This function returns \fBASYNC_PROCESS\fP when the
298 command is still running and should be called again until \fBASYNC_DONE\fP is
299 returned. When \fBASYNC_DONE\fP is returned, \fIerror\fP should be tested and
300 \fBpwmd_finalize()\fP should be called.
303 .BI "gpg_error_t pwmd_finalize(pwm_t *" pwm ");"
304 After \fBpwmd_process()\fP returns \fBASYNC_DONE\fP, this function should be
305 called even if an error occured to reset the \fIpwm\fP handle for the next
306 asynchronous command.
309 .BI "gpg_error_t pwmd_terminate_pinentry(pwm_t *" pwm ");"
310 Terminates a
311 .BR pinentry (1)
312 process associated with the handle \fIpwm\fP. This may be useful if your
313 application wants to use a timeout for password entry but doesn't use
314 \fBpwmd_open_nb\fP(). Returns \fB0\fP on success or an error code on failure.
317 .BI "void pwmd_close(pwm_t *" pwm ");"
318 Closes the server connection and free's resources used by the handle
319 \fIpwm\fP.
322 .BI "const char *pwmd_strerror(gpg_error_t " error ");"
323 Returns a string describing the error code \fIerror\fP which was set from one
324 of the above functions.
326 .SH FILES
328 .B ~/.pwmd/socket
329 Default connecting socket.
331 .B ~/.pwmd/pinentry.conf
332 Optional file containing pinentry settings.
334 .B @prefix@/lib/pkgconfig/libpwmd.pc
336 .BR pkg-config (1)
337 metadata file.
339 .B @prefix@/include/libpwmd.h
340 Installed location of header file.
342 .B @pinentry@
343 Default location of the
344 .BR pinentry (1)
345 binary.
347 .SH AUTHOR
348 Ben Kibbey <bjk@luxsci.net>
350 .URL "http://bjk.sourceforge.net/pwmd/" "PWMD Homepage" .
352 .SH "SEE ALSO"
353 .BR pwmd (1),
354 .BR pinentry (1),
355 .BR pkg-config (1)
357 And the \fBlibassuan\fP
358 .BR info (1)
359 documentation.