1ce77a8d6SDag-Erling Smørgrav.\" Generated from openpam_readword.c by gendoc.pl 2*f3b0ac34SDag-Erling Smørgrav.\" $Id: openpam_readword.c 916 2017-02-07 12:25:58Z des $ 3*f3b0ac34SDag-Erling Smørgrav.Dd February 19, 2017 42f3ed619SDag-Erling Smørgrav.Dt OPENPAM_READWORD 3 52f3ed619SDag-Erling Smørgrav.Os 62f3ed619SDag-Erling Smørgrav.Sh NAME 72f3ed619SDag-Erling Smørgrav.Nm openpam_readword 82f3ed619SDag-Erling Smørgrav.Nd read a word from a file, respecting shell quoting rules 92f3ed619SDag-Erling Smørgrav.Sh SYNOPSIS 102f3ed619SDag-Erling Smørgrav.In sys/types.h 112f3ed619SDag-Erling Smørgrav.In stdio.h 122f3ed619SDag-Erling Smørgrav.In security/pam_appl.h 132f3ed619SDag-Erling Smørgrav.In security/openpam.h 142f3ed619SDag-Erling Smørgrav.Ft "char *" 152f3ed619SDag-Erling Smørgrav.Fn openpam_readword "FILE *f" "int *lineno" "size_t *lenp" 162f3ed619SDag-Erling Smørgrav.Sh DESCRIPTION 172f3ed619SDag-Erling SmørgravThe 182f3ed619SDag-Erling Smørgrav.Fn openpam_readword 192f3ed619SDag-Erling Smørgravfunction reads the next word from a file, and 202f3ed619SDag-Erling Smørgravreturns it in a NUL-terminated buffer allocated with 212f3ed619SDag-Erling Smørgrav.Xr malloc 3 . 222f3ed619SDag-Erling Smørgrav.Pp 232f3ed619SDag-Erling SmørgravA word is a sequence of non-whitespace characters. 242f3ed619SDag-Erling SmørgravHowever, whitespace characters can be included in a word if quoted or 252f3ed619SDag-Erling Smørgravescaped according to the following rules: 262f3ed619SDag-Erling Smørgrav.Bl -bullet 272f3ed619SDag-Erling Smørgrav.It 282f3ed619SDag-Erling SmørgravAn unescaped single or double quote introduces a quoted string, 292f3ed619SDag-Erling Smørgravwhich ends when the same quote character is encountered a second 302f3ed619SDag-Erling Smørgravtime. 312f3ed619SDag-Erling SmørgravThe quotes themselves are stripped. 322f3ed619SDag-Erling Smørgrav.It 332f3ed619SDag-Erling SmørgravWithin a single- or double-quoted string, all whitespace characters, 342f3ed619SDag-Erling Smørgravincluding the newline character, are preserved as-is. 352f3ed619SDag-Erling Smørgrav.It 362f3ed619SDag-Erling SmørgravOutside a quoted string, a backslash escapes the next character, 372f3ed619SDag-Erling Smørgravwhich is preserved as-is, unless that character is a newline, in 382f3ed619SDag-Erling Smørgravwhich case it is discarded and reading continues at the beginning of 392f3ed619SDag-Erling Smørgravthe next line as if the backslash and newline had not been there. 402f3ed619SDag-Erling SmørgravIn all cases, the backslash itself is discarded. 412f3ed619SDag-Erling Smørgrav.It 422f3ed619SDag-Erling SmørgravWithin a single-quoted string, double quotes and backslashes are 432f3ed619SDag-Erling Smørgravpreserved as-is. 442f3ed619SDag-Erling Smørgrav.It 452f3ed619SDag-Erling SmørgravWithin a double-quoted string, a single quote is preserved as-is, 462f3ed619SDag-Erling Smørgravand a backslash is preserved as-is unless used to escape a double 472f3ed619SDag-Erling Smørgravquote. 482f3ed619SDag-Erling Smørgrav.El 492f3ed619SDag-Erling Smørgrav.Pp 502f3ed619SDag-Erling SmørgravIn addition, if the first non-whitespace character on the line is a 512f3ed619SDag-Erling Smørgravhash character (#), the rest of the line is discarded. 522f3ed619SDag-Erling SmørgravIf a hash character occurs within a word, however, it is preserved 532f3ed619SDag-Erling Smørgravas-is. 542f3ed619SDag-Erling SmørgravA backslash at the end of a comment does cause line continuation. 552f3ed619SDag-Erling Smørgrav.Pp 562f3ed619SDag-Erling SmørgravIf 572f3ed619SDag-Erling Smørgrav.Fa lineno 582f3ed619SDag-Erling Smørgravis not 592f3ed619SDag-Erling Smørgrav.Dv NULL , 602f3ed619SDag-Erling Smørgravthe integer variable it points to is 612f3ed619SDag-Erling Smørgravincremented every time a quoted or escaped newline character is read. 622f3ed619SDag-Erling Smørgrav.Pp 632f3ed619SDag-Erling SmørgravIf 642f3ed619SDag-Erling Smørgrav.Fa lenp 652f3ed619SDag-Erling Smørgravis not 662f3ed619SDag-Erling Smørgrav.Dv NULL , 672f3ed619SDag-Erling Smørgravthe length of the word (after quotes and 682f3ed619SDag-Erling Smørgravbackslashes have been removed) is stored in the variable it points to. 692f3ed619SDag-Erling Smørgrav.Sh RETURN VALUES 702f3ed619SDag-Erling SmørgravIf successful, the 712f3ed619SDag-Erling Smørgrav.Fn openpam_readword 722f3ed619SDag-Erling Smørgravfunction returns a pointer to a 732f3ed619SDag-Erling Smørgravdynamically allocated NUL-terminated string containing the first word 742f3ed619SDag-Erling Smørgravencountered on the line. 752f3ed619SDag-Erling Smørgrav.Pp 762f3ed619SDag-Erling SmørgravThe caller is responsible for releasing the returned buffer by passing 772f3ed619SDag-Erling Smørgravit to 782f3ed619SDag-Erling Smørgrav.Xr free 3 . 792f3ed619SDag-Erling Smørgrav.Pp 802f3ed619SDag-Erling SmørgravIf 812f3ed619SDag-Erling Smørgrav.Fn openpam_readword 822f3ed619SDag-Erling Smørgravreaches the end of the line or file before any 832f3ed619SDag-Erling Smørgravcharacters are copied to the word, it returns 842f3ed619SDag-Erling Smørgrav.Dv NULL . 852f3ed619SDag-Erling SmørgravIn the former 862f3ed619SDag-Erling Smørgravcase, the newline is pushed back to the file. 872f3ed619SDag-Erling Smørgrav.Pp 882f3ed619SDag-Erling SmørgravIf 892f3ed619SDag-Erling Smørgrav.Fn openpam_readword 902f3ed619SDag-Erling Smørgravreaches the end of the file while a quote or 912f3ed619SDag-Erling Smørgravbackslash escape is in effect, it sets 922f3ed619SDag-Erling Smørgrav.Va errno 932f3ed619SDag-Erling Smørgravto 942f3ed619SDag-Erling Smørgrav.Dv EINVAL 952f3ed619SDag-Erling Smørgravand returns 962f3ed619SDag-Erling Smørgrav.Dv NULL . 972f3ed619SDag-Erling Smørgrav.Sh IMPLEMENTATION NOTES 982f3ed619SDag-Erling SmørgravThe parsing rules are intended to be equivalent to the normal POSIX 992f3ed619SDag-Erling Smørgravshell quoting rules. 1002f3ed619SDag-Erling SmørgravAny discrepancy is a bug and should be reported to the author along 1012f3ed619SDag-Erling Smørgravwith sample input that can be used to reproduce the error. 1022f3ed619SDag-Erling Smørgrav.Pp 1032f3ed619SDag-Erling Smørgrav.Sh SEE ALSO 1042f3ed619SDag-Erling Smørgrav.Xr openpam_readline 3 , 1052f3ed619SDag-Erling Smørgrav.Xr openpam_readlinev 3 , 1062f3ed619SDag-Erling Smørgrav.Xr pam 3 1072f3ed619SDag-Erling Smørgrav.Sh STANDARDS 1082f3ed619SDag-Erling SmørgravThe 1092f3ed619SDag-Erling Smørgrav.Fn openpam_readword 1102f3ed619SDag-Erling Smørgravfunction is an OpenPAM extension. 1112f3ed619SDag-Erling Smørgrav.Sh AUTHORS 1122f3ed619SDag-Erling SmørgravThe 1132f3ed619SDag-Erling Smørgrav.Fn openpam_readword 1142f3ed619SDag-Erling Smørgravfunction and this manual page were 1152f3ed619SDag-Erling Smørgravdeveloped by 116*f3b0ac34SDag-Erling Smørgrav.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . 117