1 /* $OpenLDAP: pkg/ldap/include/lutil.h,v 1.63.2.5 2008/02/11 23:26:40 kurt Exp $ */
2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 * Copyright 1998-2008 The OpenLDAP Foundation.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted only as authorized by the OpenLDAP
11 * A copy of this license is available in file LICENSE in the
12 * top-level directory of the distribution or, alternatively, at
13 * <http://www.OpenLDAP.org/license.html>.
19 #include <ldap_cdefs.h>
20 #include <lber_types.h>
23 * Include file for LDAP utility routine
28 /* n octets encode into ceiling(n/3) * 4 bytes */
29 /* Avoid floating point math through extra padding */
31 #define LUTIL_BASE64_ENCODE_LEN(n) (((n)+2)/3 * 4)
32 #define LUTIL_BASE64_DECODE_LEN(n) ((n)/4*3)
34 /* ISC Base64 Routines */
38 lutil_b64_ntop
LDAP_P((
39 unsigned char const *,
45 lutil_b64_pton
LDAP_P((
58 lutil_entropy
LDAP_P((
63 struct berval
; /* avoid pulling in lber.h */
66 lutil_get_filed_password
LDAP_P((
71 struct lutil_pw_scheme
;
73 #define LUTIL_PASSWD_OK (0)
74 #define LUTIL_PASSWD_ERR (-1)
76 typedef int (LUTIL_PASSWD_CHK_FUNC
)(
77 const struct berval
*scheme
,
78 const struct berval
*passwd
,
79 const struct berval
*cred
,
82 typedef int (LUTIL_PASSWD_HASH_FUNC
) (
83 const struct berval
*scheme
,
84 const struct berval
*passwd
,
89 lutil_passwd_add
LDAP_P((
90 struct berval
*scheme
,
91 LUTIL_PASSWD_CHK_FUNC
*chk_fn
,
92 LUTIL_PASSWD_HASH_FUNC
*hash_fn
));
95 lutil_passwd_init
LDAP_P(( void ));
98 lutil_passwd_destroy
LDAP_P(( void ));
101 lutil_authpasswd
LDAP_P((
102 const struct berval
*passwd
, /* stored password */
103 const struct berval
*cred
, /* user supplied value */
104 const char **methods
));
107 lutil_authpasswd_hash
LDAP_P((
108 const struct berval
*cred
,
109 struct berval
**passwd
, /* password to store */
110 struct berval
**salt
, /* salt to store */
111 const char *method
));
114 typedef int (lutil_cryptfunc
) LDAP_P((
118 LDAP_LUTIL_V (lutil_cryptfunc
*) lutil_cryptptr
;
122 lutil_passwd
LDAP_P((
123 const struct berval
*passwd
, /* stored password */
124 const struct berval
*cred
, /* user supplied value */
125 const char **methods
,
126 const char **text
)); /* error message */
129 lutil_passwd_generate
LDAP_P(( struct berval
*pw
, ber_len_t
));
132 lutil_passwd_hash
LDAP_P((
133 const struct berval
*passwd
,
136 const char **text
));
139 lutil_passwd_scheme
LDAP_P((
140 const char *scheme
));
143 lutil_salt_format
LDAP_P((
144 const char *format
));
147 LDAP_LUTIL_F( char* )
148 lutil_progname
LDAP_P((
153 typedef struct lutil_tm
{
154 int tm_sec
; /* seconds 0-60 (1 leap second) */
155 int tm_min
; /* minutes 0-59 */
156 int tm_hour
; /* hours 0-23 */
157 int tm_mday
; /* day 1-31 */
158 int tm_mon
; /* month 0-11 */
159 int tm_year
; /* year - 1900 */
160 int tm_usec
; /* microseconds */
161 int tm_usub
; /* submicro */
164 typedef struct lutil_timet
{
165 unsigned int tt_sec
; /* seconds since 1900 */
166 int tt_gsec
; /* seconds since 1900, high 7 bits */
167 unsigned int tt_usec
; /* microseconds */
170 /* Parse a timestamp string into a structure */
172 lutil_parsetime
LDAP_P((
173 char *atm
, struct lutil_tm
* ));
175 /* Convert structured time to time in seconds since 1900 */
177 lutil_tm2time
LDAP_P((
178 struct lutil_tm
*, struct lutil_timet
* ));
180 /* Get current time as a structured time */
182 lutil_gettime
LDAP_P(( struct lutil_tm
* ));
186 lutil_slashpath
LDAP_P(( char* path
));
187 #define LUTIL_SLASHPATH(p) lutil_slashpath(p)
189 #define LUTIL_SLASHPATH(p)
192 LDAP_LUTIL_F( char* )
193 lutil_strcopy
LDAP_P(( char *dst
, const char *src
));
195 LDAP_LUTIL_F( char* )
196 lutil_strncopy
LDAP_P(( char *dst
, const char *src
, size_t n
));
200 /* use this macro to statically allocate buffer for lutil_gentime */
201 #define LDAP_LUTIL_GENTIME_BUFSIZE 22
202 #define lutil_gentime(s,m,t) lutil_localtime((s),(m),(t),0)
203 LDAP_LUTIL_F( size_t )
204 lutil_localtime
LDAP_P(( char *s
, size_t smax
, const struct tm
*tm
,
209 mkstemp
LDAP_P (( char * template ));
214 lutil_pair( ber_socket_t sd
[2] );
217 /* use this macro to allocate buffer for lutil_uuidstr */
218 #define LDAP_LUTIL_UUIDSTR_BUFSIZE 40
219 LDAP_LUTIL_F( size_t )
220 lutil_uuidstr( char *buf
, size_t len
);
223 lutil_uuidstr_from_normalized(
230 /* use this macro to allocate buffer for lutil_csnstr */
231 #define LDAP_LUTIL_CSNSTR_BUFSIZE 64
232 LDAP_LUTIL_F( size_t )
233 lutil_csnstr( char *buf
, size_t len
, unsigned int replica
, unsigned int mod
);
236 * Sometimes not all declarations in a header file are needed.
237 * An indicator to this is whether or not the symbol's type has
238 * been defined. Thus, we don't need to include a symbol if
239 * its type has not been defined through another header file.
242 #ifdef HAVE_NT_SERVICE_MANAGER
243 LDAP_LUTIL_V (int) is_NT_Service
;
245 #ifdef _LDAP_PVT_THREAD_H
246 LDAP_LUTIL_V (ldap_pvt_thread_cond_t
) started_event
;
247 #endif /* _LDAP_PVT_THREAD_H */
249 /* macros are different between Windows and Mingw */
250 #if defined(_WINSVC_H) || defined(_WINSVC_)
251 LDAP_LUTIL_V (SERVICE_STATUS
) lutil_ServiceStatus
;
252 LDAP_LUTIL_V (SERVICE_STATUS_HANDLE
) hlutil_ServiceStatus
;
253 #endif /* _WINSVC_H */
256 lutil_CommenceStartupProcessing( char *serverName
, void (*stopper
)(int)) ;
259 lutil_ReportShutdownComplete( void );
261 LDAP_LUTIL_F (void *)
262 lutil_getRegParam( char *svc
, char *value
);
265 lutil_srv_install( char* service
, char * displayName
, char* filename
,
268 lutil_srv_remove ( char* service
, char* filename
);
270 #endif /* HAVE_NT_SERVICE_MANAGER */
272 #ifdef HAVE_NT_EVENT_LOG
274 lutil_LogStartedEvent( char *svc
, int slap_debug
, char *configfile
, char *urls
);
277 lutil_LogStoppedEvent( char *svc
);
281 /* Generally this has only been used to put '\n' to stdout. We need to
282 * make sure it is output in EBCDIC.
286 #define putchar(c) putc((c), stdout)
287 #define putc(c,fp) do { char x=(c); __atoe_l(&x,1); putc(x,fp); } while(0)
291 lutil_atoix( int *v
, const char *s
, int x
);
294 lutil_atoux( unsigned *v
, const char *s
, int x
);
297 lutil_atolx( long *v
, const char *s
, int x
);
300 lutil_atoulx( unsigned long *v
, const char *s
, int x
);
302 #define lutil_atoi(v, s) lutil_atoix((v), (s), 10)
303 #define lutil_atou(v, s) lutil_atoux((v), (s), 10)
304 #define lutil_atol(v, s) lutil_atolx((v), (s), 10)
305 #define lutil_atoul(v, s) lutil_atoulx((v), (s), 10)
308 lutil_str2bin( struct berval
*in
, struct berval
*out
, void *ctx
);
310 /* Parse and unparse time intervals */
312 lutil_parse_time( const char *in
, unsigned long *tp
);
315 lutil_unparse_time( char *buf
, size_t buflen
, unsigned long t
);
318 #define lutil_timerdiv timerdiv
319 #else /* ! timerdiv */
320 /* works inplace (x == t) */
321 #define lutil_timerdiv(t,d,x) \
323 time_t s = (t)->tv_sec; \
325 (x)->tv_sec = s / d; \
326 (x)->tv_usec = ( (t)->tv_usec + 1000000 * ( s % d ) ) / d; \
328 #endif /* ! timerdiv */
331 #define lutil_timermul timermul
332 #else /* ! timermul */
333 /* works inplace (x == t) */
334 #define lutil_timermul(t,m,x) \
336 time_t u = (t)->tv_usec * m; \
338 (x)->tv_sec = (t)->tv_sec * m + u / 1000000; \
339 (x)->tv_usec = u % 1000000; \
341 #endif /* ! timermul */
345 #endif /* _LUTIL_H */