Annotation of win32/apache13/src/include/ap.h, revision 1.1.1.1
1.1 parser 1: /* ====================================================================
2: * Copyright (c) 1998-1999 The Apache Group. All rights reserved.
3: *
4: * Redistribution and use in source and binary forms, with or without
5: * modification, are permitted provided that the following conditions
6: * are met:
7: *
8: * 1. Redistributions of source code must retain the above copyright
9: * notice, this list of conditions and the following disclaimer.
10: *
11: * 2. Redistributions in binary form must reproduce the above copyright
12: * notice, this list of conditions and the following disclaimer in
13: * the documentation and/or other materials provided with the
14: * distribution.
15: *
16: * 3. All advertising materials mentioning features or use of this
17: * software must display the following acknowledgment:
18: * "This product includes software developed by the Apache Group
19: * for use in the Apache HTTP server project (http://www.apache.org/)."
20: *
21: * 4. The names "Apache Server" and "Apache Group" must not be used to
22: * endorse or promote products derived from this software without
23: * prior written permission. For written permission, please contact
24: * apache@apache.org.
25: *
26: * 5. Products derived from this software may not be called "Apache"
27: * nor may "Apache" appear in their names without prior written
28: * permission of the Apache Group.
29: *
30: * 6. Redistributions of any form whatsoever must retain the following
31: * acknowledgment:
32: * "This product includes software developed by the Apache Group
33: * for use in the Apache HTTP server project (http://www.apache.org/)."
34: *
35: * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
36: * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR
39: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46: * OF THE POSSIBILITY OF SUCH DAMAGE.
47: * ====================================================================
48: *
49: * This software consists of voluntary contributions made by many
50: * individuals on behalf of the Apache Group and was originally based
51: * on public domain software written at the National Center for
52: * Supercomputing Applications, University of Illinois, Urbana-Champaign.
53: * For more information on the Apache Group and the Apache HTTP server
54: * project, please see <http://www.apache.org/>.
55: *
56: * The ap_vsnprintf/ap_snprintf functions are based on, and used with the
57: * permission of, the SIO stdio-replacement strx_* functions by Panos
58: * Tsirigotis <panos@alumni.cs.colorado.edu> for xinetd.
59: */
60:
61: #ifndef APACHE_AP_H
62: #define APACHE_AP_H
63:
64: #ifdef __cplusplus
65: extern "C" {
66: #endif
67:
68: API_EXPORT(char *) ap_cpystrn(char *, const char *, size_t);
69: int ap_slack(int, int);
70: int ap_execle(const char *, const char *, ...);
71: int ap_execve(const char *, char * const argv[], char * const envp[]);
72: API_EXPORT(int) ap_getpass(const char *prompt, char *pwbuf, size_t bufsiz);
73:
74: /* small utility macros to make things easier to read */
75:
76: #ifdef WIN32
77: #define ap_killpg(x, y)
78: #else
79: #ifdef NO_KILLPG
80: #define ap_killpg(x, y) (kill (-(x), (y)))
81: #else
82: #define ap_killpg(x, y) (killpg ((x), (y)))
83: #endif
84: #endif /* WIN32 */
85:
86: /* ap_vformatter() is a generic printf-style formatting routine
87: * with some extensions. The extensions are:
88: *
89: * %pA takes a struct in_addr *, and prints it as a.b.c.d
90: * %pI takes a struct sockaddr_in * and prints it as a.b.c.d:port
91: * %pp takes a void * and outputs it in hex
92: *
93: * The %p hacks are to force gcc's printf warning code to skip
94: * over a pointer argument without complaining. This does
95: * mean that the ANSI-style %p (output a void * in hex format) won't
96: * work as expected at all, but that seems to be a fair trade-off
97: * for the increased robustness of having printf-warnings work.
98: *
99: * Additionally, ap_vformatter allows for arbitrary output methods
100: * using the ap_vformatter_buff and flush_func.
101: *
102: * The ap_vformatter_buff has two elements curpos and endpos.
103: * curpos is where ap_vformatter will write the next byte of output.
104: * It proceeds writing output to curpos, and updating curpos, until
105: * either the end of output is reached, or curpos == endpos (i.e. the
106: * buffer is full).
107: *
108: * If the end of output is reached, ap_vformatter returns the
109: * number of bytes written.
110: *
111: * When the buffer is full, the flush_func is called. The flush_func
112: * can return -1 to indicate that no further output should be attempted,
113: * and ap_vformatter will return immediately with -1. Otherwise
114: * the flush_func should flush the buffer in whatever manner is
115: * appropriate, re-initialize curpos and endpos, and return 0.
116: *
117: * Note that flush_func is only invoked as a result of attempting to
118: * write another byte at curpos when curpos >= endpos. So for
119: * example, it's possible when the output exactly matches the buffer
120: * space available that curpos == endpos will be true when
121: * ap_vformatter returns.
122: *
123: * ap_vformatter does not call out to any other code, it is entirely
124: * self-contained. This allows the callers to do things which are
125: * otherwise "unsafe". For example, ap_psprintf uses the "scratch"
126: * space at the unallocated end of a block, and doesn't actually
127: * complete the allocation until ap_vformatter returns. ap_psprintf
128: * would be completely broken if ap_vformatter were to call anything
129: * that used a pool. Similarly http_bprintf() uses the "scratch"
130: * space at the end of its output buffer, and doesn't actually note
131: * that the space is in use until it either has to flush the buffer
132: * or until ap_vformatter returns.
133: */
134:
135: typedef struct {
136: char *curpos;
137: char *endpos;
138: } ap_vformatter_buff;
139:
140: API_EXPORT(int) ap_vformatter(int (*flush_func)(ap_vformatter_buff *),
141: ap_vformatter_buff *, const char *fmt, va_list ap);
142:
143: /* These are snprintf implementations based on ap_vformatter().
144: *
145: * Note that various standards and implementations disagree on the return
146: * value of snprintf, and side-effects due to %n in the formatting string.
147: * ap_snprintf behaves as follows:
148: *
149: * Process the format string until the entire string is exhausted, or
150: * the buffer fills. If the buffer fills then stop processing immediately
151: * (so no further %n arguments are processed), and return the buffer
152: * length. In all cases the buffer is NUL terminated.
153: *
154: * In no event does ap_snprintf return a negative number. It's not possible
155: * to distinguish between an output which was truncated, and an output which
156: * exactly filled the buffer.
157: */
158: API_EXPORT(int) ap_snprintf(char *buf, size_t len, const char *format,...)
159: __attribute__((format(printf,3,4)));
160: API_EXPORT(int) ap_vsnprintf(char *buf, size_t len, const char *format,
161: va_list ap);
162: /* Simple BASE64 encode/decode functions.
163: *
164: * As we might encode binary strings, hence we require the length of
165: * the incoming plain source. And return the length of what we decoded.
166: *
167: * The decoding function takes any non valid char (i.e. whitespace, \0
168: * or anything non A-Z,0-9 etc as terminal.
169: *
170: * plain strings/binary sequences are not assumed '\0' terminated. Encoded
171: * strings are neither. But propably should.
172: *
173: */
174: API_EXPORT(int) ap_base64encode_len(int len);
175: API_EXPORT(int) ap_base64encode(char * coded_dst, const char *plain_src,int len_plain_src);
176: API_EXPORT(int) ap_base64encode_binary(char * coded_dst, const unsigned char *plain_src,int len_plain_src);
177:
178: API_EXPORT(int) ap_base64decode_len(const char * coded_src);
179: API_EXPORT(int) ap_base64decode(char * plain_dst, const char *coded_src);
180: API_EXPORT(int) ap_base64decode_binary(unsigned char * plain_dst, const char *coded_src);
181:
182: /* Password validation, as used in AuthType Basic which is able to cope
183: * (based on the prefix) with the SHA1, Apache's internal MD5 and (depending
184: * on your platform either plain or crypt(3) passwords.
185: */
186: API_EXPORT(char *) ap_validate_password(const char *passwd, const char *hash);
187:
188: #ifdef __cplusplus
189: }
190: #endif
191:
192: #endif /* !APACHE_AP_H */
E-mail: