diff options
Diffstat (limited to 'crypto/heimdal/lib/roken')
165 files changed, 7905 insertions, 1950 deletions
diff --git a/crypto/heimdal/lib/roken/ChangeLog b/crypto/heimdal/lib/roken/ChangeLog index 3132d23..6a9abe7 100644 --- a/crypto/heimdal/lib/roken/ChangeLog +++ b/crypto/heimdal/lib/roken/ChangeLog @@ -1,21 +1,729 @@ -2004-01-15 Love <lha@stacken.kth.se> +2008-01-12 Love Hörnquist Åstrand <lha@it.su.se> - * roken-common.h: 1.52: use EAI_NONAME instead of EAI_ADDRFAMILY - to check for if we need EAI_ macros + * Makefile.am: add missing files. + +2007-08-09 Love Hörnquist Åstrand <lha@it.su.se> - * gai_strerror.c: 1.4: correct ifdef for EAI_ADDRFAMILY - 1.3: EAI_ADDRFAMILY and EAI_NODATA is deprecated + * strftime.c: rewrite str[pf]time for testing. + + * strptime.c: rewrite str[pf]time for testing. + + * Makefile.am: add TEST_STRPFTIME -2003-08-29 Love <lha@stacken.kth.se> +2007-07-17 Love Hörnquist Åstrand <lha@it.su.se> + + * ndbm_wrap.c (dbm_get): set dsize to 0 on failure. + + * Makefile.am: add ndbm_wrap.[ch] to EXTRA_DIST + + * ndbm_wrap.c (dbm_fetch): set dsize to 0 on failure. + +2007-07-16 Love Hörnquist Åstrand <lha@it.su.se> + + * socket_wrapper.c: Implement swrap_dup too. + + * socket_wrapper.c: Add dup(dummy stub) and dup2(real). + + * socket_wrapper.h: Add dup(dummy stub) and dup2(real). - * ndbm_wrap.c: 1.1->1.2: patch for working with DB4 on - heimdal-discuss From: Luke Howard <lukeh@PADL.COM> +2007-07-10 Love Hörnquist Åstrand <lha@it.su.se> + + * Makefile.am: New library version. + +2007-06-19 Love Hörnquist Åstrand <lha@it.su.se> + + * roken_gethostby.c: set proxy_port to 0 to pacify BEAM. + +2007-06-07 Love Hörnquist Åstrand <lha@it.su.se> + + * use "roken.h" consitantly + +2007-06-03 Love Hörnquist Åstrand <lha@it.su.se> + + * test-readenv.c: Free environment. + + * environment.c (free_environment): free result of + read_environment(). + + * roken-common.h (free_environment): free result of + read_environment(). -2003-04-22 Love <lha@stacken.kth.se> +2007-05-10 Love Hörnquist Åstrand <lha@it.su.se> + + * fnmatch.c: Do recursive call to rk_fnmatch + +2007-01-12 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve.c: Try harder to call res_ndestroy(). + +2006-12-27 Love Hörnquist Åstrand <lha@it.su.se> + + * Makefile.am: make sure built headers are copied to the + ${build_topdir}/include + +2006-12-15 Love Hörnquist Åstrand <lha@it.su.se> + + * unvis.c: Use internal version of rk_unvis + + * unvis.c: Always include rk_versions. + + * vis.c: Always include rk_versions. + + * vis.hin: Fix argument for unvis and strsvisx. + + * unvis.c: prefix unvis functions with rk_, and prototypes. + +2006-12-13 Love Hörnquist Åstrand <lha@it.su.se> + + * vis.c: Provide some prototypes for the rk_vis functions. + +2006-12-11 Love Hörnquist Åstrand <lha@it.su.se> + + * ifaddrs.hin: Prefix getifaddrs functions with rk_ and do symbol + renaming. + + * fnmatch.c: Prefix fnmatch functions with rk_ and do symbol + renaming. + + * vis.hin: Prefix strvis functions with rk_ and do symbol + renaming. + + * vis.c: prefix strvis functions with rk_ + + * Makefile.am: Install extra posix headers in <roken/...> to avoid + dup headers. + +2006-11-09 Love Hörnquist Åstrand <lha@it.su.se> + + * socket_wrapper.c (swrap_sendto): fail on to unknown si->type + +2006-11-06 Love Hörnquist Åstrand <lha@it.su.se> + + * socket_wrapper.c: A few fixes to have Heimdal pass the make + check under socket_wrapper. The first is a missing 'break' before + the (heimdal specific) IPv6 support. The second works around the + fact that sendto() *may* object to a destination being specified. + It appears to be that on Linux, this objects (with EISCONN) for + unix stream sockets, but not for TCP sockets. The alternate fix + would be to have the KDC use 'send()' in this case. Andrew Bartlett. + +2006-10-20 Love Hörnquist Åstrand <lha@it.su.se> + + * Makefile.am: split dist and nondist HEADERS + +2006-10-19 Love Hörnquist Åstrand <lha@it.su.se> + + * roken.h.in: Add timegm glue. + + * timegm.c: add timegm() + + * socket_wrapper.c: Include <roken.h>, gives os socklen_t on IRIX + 6.4. + + * socket_wrapper.c: Maybe include <sys/time.h> and/or maybe + include <time.h>. + +2006-10-17 Love Hörnquist Åstrand <lha@it.su.se> + + * roken.h.in: Revert prevois for now, the problem is that we have + to include symbols unconditionally, even for those that just needs + protos. + + * roken.h.in: Provide symbol renaming, let see what breaks. + + * socket_wrapper.c: Maybe include <sys/filio.h>. + +2006-10-10 Love Hörnquist Åstrand <lha@it.su.se> + + * socket_wrapper.c: more consitity check, remove dead code, add + socket length code, add missing break, make diffrent chars of type + type files for case-insensitiv filesystems + + * socket_wrapper.c: try even hard to not use socket wrapper for + socket_wrapper itself. + + * socket_wrapper.c: Force no socket wrapper for socket_wrapper + itself. + +2006-10-09 Love Hörnquist Åstrand <lha@it.su.se> + + * socket_wrapper.c: Maybe include <config.h>. + + * socket_wrapper.c: Protect AF_INET6 with #ifdef HAVE_IPV6. + + * socket_wrapper.c: Use a symbol for the v6 address. + + * socket_wrapper.c: Add IPv6 suppport. + + * socket_wrapper.[ch]: Include socket wrapper from samba4 (rev + 19179). + +2006-10-07 Love Hörnquist Åstrand <lha@it.su.se> + + * Makefile.am: Add build_HEADERZ to EXTRA_DIST + + * Makefile.am: Add man_MANS to EXTRA_DIST + + * Makefile.am: Add to all objects BUILD_ROKEN_LIB. + +2006-09-16 Love Hörnquist Åstrand <lha@it.su.se> + + * roken.h.in: Add samba socket wrapper fragment. + + * Makefile.am: Add samba socket wrapper fragment. + +2006-09-05 Love Hörnquist Åstrand <lha@it.su.se> + + * snprintf.c: reapply patch that went away in last commit + + * snprintf-test.c: unbreak from previous commit + + * snprintf.c: Add size_t formater (z modifer). + + * snprintf-test.c: add tests for size_t printf formater + +2006-06-30 Love Hörnquist Åstrand <lha@it.su.se> + + * rtbl.h: Add extern "C" for C++. + + * rtbl.c: Add rtbl_add_column_entryv functions, printf like + + * rtbl.h: Add rtbl_add_column_entryv functions, printf like + +2006-06-22 Love Hörnquist Åstrand <lha@it.su.se> + + * glob.hin: Add extern "C" for C++. From joerg at britannica dot + bec dot de + + * fnmatch.hin: Add extern "C" for C++. From joerg at britannica + dot bec dot de + +2006-04-20 Love Hörnquist Åstrand <lha@it.su.se> + + * fnmatch.hin (fnmatch): CPP rename to rk_fnmatch + +2006-04-14 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve.c (dns_srv_order): change a if (ptr == NULL) continue + into a assert(ptr != NULL) since it could never happen, found by + the IBM code checker (beam). Thanks to Florian Krohm for + explaining it. + +2006-04-02 Love Hörnquist Åstrand <lha@it.su.se> + + * roken_gethostby.c (roken_gethostby): make addr_list one larger + to avoid a off-by-one error. Found by IBM checker. + + * resolve.c: Plug memory leak found by IBM checker (and try to + please it). + +2006-02-06 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve.c: Spelling, from Alexey Dobriyan, via Jason McIntyre + +2006-01-13 Love Hörnquist Åstrand <lha@it.su.se> + + * getcap.c: Don't use db support unless its build into libc but we + dont check for that now, so just disable the code. This removes + the dependency on libdb for roken, and that is a good thing since + it causes problem with nss plugins that uses DB3 that also + provides the same symbol, but with a diffrent ABI. so when the + application calls getpwnamn() and it linked to roken, it craches + in the nss functions. + +2006-01-09 Love Hörnquist Åstrand <lha@it.su.se> + + * hex.c (hex_decode): support decoding odd number of characters, + in the odd len case, the first character ends up in the first byte + in the lower nibble. + + * hex-test.c: Check that we can decode single character hex chars. + +2005-12-12 Love Hörnquist Åstrand <lha@it.su.se> + + * getifaddrs.c: Try handle HP/UX 11.nn, its diffrent from Solaris + large SIOCGIFCONF. + +2005-09-28 Love Hörnquist Åstrand <lha@it.su.se> + + * roken-common.h: Move rk_UNCONST to roken.h.in since it might use + uintptr_t depending on avaibility. + + * roken.h.in: Include <stdint.h> if it exists. If avaiable, use + uintptr_t to define rk_UNCONST. + +2005-09-22 Love Hörnquist Åstrand <lha@it.su.se> + + * roken-common.h: Add rk_dumpdata. + + * dumpdata.c: Add rk_dumpdata() that write a chunk of data into a + file for later processing by some other tool (like asn1_print). + +2005-09-13 Love Hörnquist Åstrand <lha@it.su.se> + + * strptime.c: cast to unsigned char to make sure its not negative + when passing it to is* functions + +2005-09-01 Love Hörnquist Åstrand <lha@it.su.se> + + * socket.c: Add socket_set_ipv6only. + + * roken-common.h: Add socket_set_ipv6only, remove some argument + names. + +2005-08-25 Love Hörnquist Åstrand <lha@it.su.se> + + * strpool.c (rk_strpoolprintf): remove debug printf, plug memory + leak + +2005-08-23 Love Hörnquist Åstrand <lha@it.su.se> + + * setprogname.c (setprogname): const poision + + * print_version.c: Removed, moved to libvers. + +2005-08-22 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve.c (dns_lookup_int): if we have res_ndestroy, prefeer + that before res_nclose + +2005-08-12 Love Hörnquist Åstrand <lha@it.su.se> + + * getaddrinfo-test.c: Rename optind to optidx to avoid shadowing. + +2005-08-05 Love Hörnquist Åstrand <lha@it.su.se> + + * gai_strerror.c: sprinkel more const + + * gai_strerror.c, roken.h.in: Make return value of gai_strerror + const to match SUSv3. Prompted by Stefan Metzmacher change to + Samba. + +2005-07-19 Love Hörnquist Åstrand <lha@it.su.se> + + * roken.h.in: Remove parameter names to avoid shadow warnings. + +2005-07-13 Love Hörnquist Åstrand <lha@it.su.se> + + * getifaddrs.c (nl_getlist): poll to get messages from kernel, and + retry if the message was lost + (free_nlmsglist): free all linked elements, not just the first one + +2005-07-08 Love Hörnquist Åstrand <lha@it.su.se> + + * snprintf-test.c: Check a very simple format string + +2005-07-07 Love Hörnquist Åstrand <lha@it.su.se> + + * roken.h.in: If we have <strings.h> include it, its needed for + strcasecmp() on those platforms that are SUS3/iso c99 strict (like + AIX) + + * roken-common.h: remove duplicate ; + +2005-07-06 Love Hörnquist Åstrand <lha@it.su.se> + + * roken-common.h: rk_strpoolprintf first variable identifier is 3 + +2005-06-30 Love Hörnquist Åstrand <lha@it.su.se> + + * base64.h: remove variable names + +2005-06-29 Love Hörnquist Åstrand <lha@it.su.se> + + * roken-common.h: fix format attribute + + * Makefile.am (libroken_la_SOURCES): += strpool.c + + * roken-common.h: add strpool, a printf collector to make it + eaiser to collect strings into one string + + * strpool.c: add strpool, a printf collector to make it eaiser to + collect strings into one string + +2005-06-23 Love Hörnquist Åstrand <lha@it.su.se> + + * base64.c: Add const, from Andrew Abartlet <abartlet@samba.org> + +2005-06-21 Love Hörnquist Åstrand <lha@it.su.se> + + * strpftime-test.c: test for "%Y%m" + + * esetenv.c: unconst + + * strptime.c: Write a new parse_number function that is possible + to limit that amount of numbers used, with this strptime can + handle strptime("200505", "%Y%m", &tm); + +2005-06-16 Love Hörnquist Åstrand <lha@it.su.se> + + * getaddrinfo.c: avoid shadowing sin + + * resolve-test.c: rename optind to optidx to avoid shadowing + + * strptime.c: UNCONST return value from strptime + + * strftime.c: rk_UNCONST argument mktime + + * getnameinfo.c: avoid shadowing sin + + * socket.c: avoid shadowing sin + + * resolve.c (parse_record): fix casting to avoid losing const + + * roken.awk: since we got no feedback regarding people running + heimdal on the crays, remove the quoted # version - * resolve.c: 1.38->1.39: copy NUL too, from janj@wenf.org via - openbsd + * environment.c: rename index to idx to avoid shadowing +2005-05-29 Love Hörnquist Åstrand <lha@it.su.se> + + * parse_reply-test.c: avoid signedness warnings + + * test-mem.c: avoid signedness warnings + +2005-05-27 Love Hörnquist Åstrand <lha@it.su.se> + + * hex.c: include "roken.h" to avoid undefined size_t/ssize_t + +2005-05-24 Dave Love <fx@gnu.org> + + * Makefile.am (snprintf_test_SOURCES): Add snprintf-test.h. + +2005-05-20 Love Hörnquist Åstrand <lha@it.su.se> + + * environment.c (rk_read_env_file): move assignment to later to + make pre c99 compiler happy + +2005-05-18 Love Hörnquist Åstrand <lha@it.su.se> + + * strptime.c: use english spelling of March + +2005-05-17 Johan Danielsson <joda@pdc.kth.se> + + * Makefile.am: only link with dblib if we need it + + * Makefile.am: add test_readenv + + * test-readenv.c: test for read_environment() + + * environment.c: eliminate duplicates + +2005-05-13 Love Hörnquist Åstrand <lha@it.su.se> + + * issuid.c (issuid): change the #ifdef order to avoid unreachable + code warning. + +2005-05-10 Dave Love <fx@gnu.org> + + * roken.h.in: Get daemon declared on Solaris (it's in unistd.h but + masked by a feature test), just to avoid a warning, since it has + int args. Include err.h unconditionally, since it's always + supplied. + +2005-05-04 Dave Love <fx@gnu.org> + + * snprintf-test.c: Include snprintf-test.h earlier. + +2005-05-03 Dave Love <fx@gnu.org> + + * snprintf.c: Include snprintf-test.h earlier. + + * test-mem.c: Add member fd to map. + (rk_test_mem_alloc, rk_test_mem_free): Use it. + +2005-04-30 Love Hörnquist Åstrand <lha@it.su.se> + + * getifaddrs.c: add break on default: statements, from Douglas + E. Engert + + * snprintf.c (vsnprintf): don't write the NUL into the string if + the length was 0 + + * snprintf-test.c: add check that snprintf doesn't write the NUL + into the last byte when its a zero length input string + + * parse_time-test.c: Include <err.h>. + +2005-04-27 Love Hörnquist Åstrand <lha@it.su.se> + + * parse_time-test.c: improve testing + + * roken-common.h: add rk_realloc + + * Makefile.am: add realloc + + * realloc.c: add rk_realloc, unbroken version of realloc + +2005-04-26 Dave Love <fx@gnu.org> + + * getusershell.c: Include roken.h + +2005-04-18 Love Hörnquist Åstrand <lha@it.su.se> + + * unvis.c: cast to unsigned char to make sure its not negative + when passing it to is* functions + + * strptime.c: cast to unsigned char to make sure its not negative + when passing it to to* functions + +2005-04-13 Love Hörnquist Åstrand <lha@it.su.se> + + * simple_exec.c: don't close stderr, close all fd that is num 3 + and larger + + * simple_exec.c (pipe_execv): use closefrom + + * add closefrom + +2005-04-12 Love Hörnquist Åstrand <lha@it.su.se> + + * add ROKEN_LIB_FUNCTION to all exported functions + +2005-04-10 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve-test.c: print DS + +2005-04-07 Love Hörnquist Åstrand <lha@it.su.se> + + * parse_time-test.c: remove unused variable + +2005-04-04 Love Hörnquist Åstrand <lha@it.su.se> + + * strpftime-test.c: print size_t by casting to unsigned long + + * base64-test.c: print size_t by casting to unsigned long + + * hex-test.c: print size_t by casting to unsigned long + + * resolve-test.c: print size_t by casting to unsigned long + +2005-04-01 Love Hörnquist Åstrand <lha@it.su.se> + + * snprintf-test.c (try): reset va_list argument between reuse, + from Peter Kruty <xkruty@fi.muni.cz> + +2005-03-30 Love Hörnquist Åstrand <lha@it.su.se> + + * roken_gethostby.c (roken_gethostby): s/sin/addr/ to avoid + shadowing + + * resolve.c (dns_lookup_int): s/stat/state/ to avoid shadowing + + * parse_units.c: avoid shadowing div + +2005-03-26 Love Hörnquist Åstrand <lha@it.su.se> + + * snprintf.c: use defined(TEST_SNPRINTF) like on all other places + in the same file + +2005-03-21 Love Hörnquist Åstrand <lha@it.su.se> + + * hex.c: check for overflows + +2005-03-18 Love Hörnquist Åstrand <lha@it.su.se> + + * vis.c: use RCSID instead of __RCSID + +2005-03-06 Love Hörnquist Åstrand <lha@it.su.se> + + * Makefile.am: check_PROGRAMS += hex-test + + * hex-test.c: hex encoding/decoding test + + * hex.c: fix decodeing, it processed to much data and thus + returned the wrong length + +2005-03-04 Love Hörnquist Åstrand <lha@it.su.se> + + * Makefile.am: add hex.[ch] + + * hex.c: add hex encoder/decoder + +2005-03-02 Love Hörnquist Åstrand <lha@it.su.se> + + * daemon.c fnmatch.c fnmatch.hin getcap.c getopt.c getusershell.c + glob.c glob.hin iruserok.c unvis.c vis.hin: + + In 1997, the University of California, Berkeley issued a statement + retroactively relicensing all code held under their copyright from + a 4-clause 'traditional' BSD license to a new 3-clause 'revised' + BSD license, which removed the advertising clause. + + From NetBSD, via Joel Baker, and Alistair G. Crooks + + * getaddrinfo-test.c: remove stray ( in output + + * vis.c: Update new revision from NetBSD (copyright update) + +2005-02-24 Love Hörnquist Åstrand <lha@it.su.se> + + * Makefile.am: bump version to 17:0:1 + +2005-01-19 Dave Love <d.love@dl.ac.uk> + + * getusershell.c: Include ctype.h, cast argument to isspace to + unsigned char. + +2004-10-31 Love Hörnquist Åstrand <lha@it.su.se> + + * parse_time.3, parse_units.c: Change the behavior of the + parse_unit code to return the number of bytes needed to print the + whole string (minus the trailing '\0'), just like snprintf. Idea + from bugreport from Gabriel Kihlman <gk@stacken.kth.se>. + + * parse_time-test.c Makefile.am test-mem.c test-mem.h: test parse_time + +2004-10-16 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve.c: put dns_type_to_string and dns_string_to_type in the + abi + + * resolve.c: add ds_record + + * resolve.h: add ds_record + +2004-10-06 Love Hörnquist Åstrand <lha@it.su.se> + + * ndbm_wrap.c: undefine open so this works on solaris with large + file support From netbsd's pkgsrc via Gavan Fantom + +2004-09-13 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve-test.c: add --version/--help + +2004-09-12 Love Hörnquist Åstrand <lha@it.su.se> + + * Makefile.am: make resolve-test a noinst program + +2004-09-11 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve-test.c: test program for libroken resolve from resolve.c + + * Makefile.am: add resolve-test + + * resolve.h: add constant for max DNS protocol packet size + + * resolve.c (dns_lookup_int): grow the answer buffer to the size + the server send to us if the answer buffer was too small (limited + to the dns protocol max packet size) + +2004-08-26 Johan Danielsson <joda@pdc.kth.se> + + * err.hin: no need to declare __progname here + + * Makefile.am: always clean generated headers + +2004-06-26 Love Hörnquist Åstrand <lha@it.su.se> + + * rtbl.3: use .In for header, remove trailing space + +2004-06-23 Johan Danielsson <joda@pdc.kth.se> + + * rtbl.h: add protos and macros + + * rtbl.c: implement a bunch of stuff: + - column separator (instead of global column prefix) + - per column suffix + - indexing columns by id-number instead of column header + - optional header supression (via settable flags) + - ability to end a row + - don't extend last column to full width + +2004-06-20 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve.[ch]: add and use and bind9 version of rr type + (rk_ns_t_XXX) instead of the old bind4 version (T_XXX) + +2004-05-25 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve.c (stot): add AAAA + +2004-02-17 Love Hörnquist Åstrand <lha@it.su.se> + + * getarg.c (add_string): catch error from realloc + +2004-02-12 Love Hörnquist Åstrand <lha@it.su.se> + + * roken-common.h: add simple_execve_timed + + * roken-common.h: add timed simple_exec + + * simple_exec.c: add timed simple_exec + +2004-01-05 Love Hörnquist Åstrand <lha@it.su.se> + + * gai_strerror.c: correct ifdef for EAI_ADDRFAMILY + +2003-12-14 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve.c: parse dns header, add support for SSHFP + + * resolve.h: add cpp rewrite for sshfp_record + + * resolve.h: add SSHFP, clean up the the dns_header + +2003-12-14 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve.h: remove HEADER (only used for crays) + + * resolve.c: number-of fields no longer stored in network order + +2003-12-13 Love Hörnquist Åstrand <lha@it.su.se> + + * resolve.c: remove depency on c99 types in resolv.h + + * resolve.h: remove depency on c99 types + +2003-12-06 Love Hörnquist Åstrand <lha@it.su.se> + + * resolv.h: add more T_ types and inline the dns headers, all this + for bind9 resolvers + +2003-12-02 Love Hörnquist Åstrand <lha@it.su.se> + + * gai_strerror.c: EAI_ADDRFAMILY and EAI_NODATA is deprecated + + * roken-common.h: use EAI_NONAME instead of EAI_ADDRFAMILY to + check for if we need EAI_ macros + +2003-10-04 Love Hörnquist Åstrand <lha@it.su.se> + + * strptime.c: let t and n match zero or more whitespaces + +2003-08-29 Love Hörnquist Åstrand <lha@it.su.se> + + * ndbm_wrap.c: patch for working with DB4 on heimdal-discuss + From: Luke Howard <lukeh@PADL.COM> + +2003-08-27 Johan Danielsson <joda@pdc.kth.se> + + * Makefile.am: don't include discovered files in EXTRA_SOURCES; + don't depend on all header files, just the built ones + +2003-08-15 Johan Danielsson <joda@pdc.kth.se> + + * emalloc.3: manpage + +2003-07-11 Love <lha@stacken.kth.se> + + * resolve.c: AIX have broken res_nsearch() in 5.1 (5.0 also ?) so + just don't use res_nsearch on AIX + +2003-06-29 Johan Danielsson <joda@pdc.kth.se> + + * snprintf.c: * don't ever print sign for unsigned conversions * + don't break when right justifying a number past the end of the + buffer * handle zero precision and the value zero more correctly + +2003-06-14 Love <lha@stacken.kth.se> + + * glob.hin: prefix glob symbols with rk_ + +2003-04-22 Love <lha@stacken.kth.se> + + * resolve.c: copy NUL too, from janj@wenf.org via openbsd + 2003-04-16 Love <lha@stacken.kth.se> * parse_units.h: remove typedef for units to avoid problems with @@ -1388,7 +2096,7 @@ Thu Mar 19 20:41:25 1998 Johan Danielsson <joda@emma.pdc.kth.se> Fri Mar 6 00:21:53 1998 Johan Danielsson <joda@emma.pdc.kth.se> - * roken_gethostby.c: Make `roken_gethostby_setup' take url-like + * roken_gethostby.c: Make `roken_gethostby_setup' take URL-like specification instead of split up versions. Makes it easier for calling applications. diff --git a/crypto/heimdal/lib/roken/Makefile.am b/crypto/heimdal/lib/roken/Makefile.am index 34235ab..b1a4251 100644 --- a/crypto/heimdal/lib/roken/Makefile.am +++ b/crypto/heimdal/lib/roken/Makefile.am @@ -1,4 +1,4 @@ -# $Id: Makefile.am,v 1.122.6.3 2003/10/14 16:13:15 joda Exp $ +# $Id: Makefile.am 22409 2008-01-12 05:53:37Z lha $ include $(top_srcdir)/Makefile.am.common @@ -7,17 +7,24 @@ ACLOCAL_AMFLAGS = -I ../../cf CLEANFILES = roken.h make-roken.c $(XHEADERS) lib_LTLIBRARIES = libroken.la -libroken_la_LDFLAGS = -version-info 16:3:0 +libroken_la_LDFLAGS = -version-info 19:0:1 +libroken_la_CPPFLAGS = -DBUILD_ROKEN_LIB -noinst_PROGRAMS = make-roken snprintf-test +# XXX this is needed for the LIBOBJS objects +CPPFLAGS = $(libroken_la_CPPFLAGS) + +noinst_PROGRAMS = make-roken snprintf-test resolve-test nodist_make_roken_SOURCES = make-roken.c check_PROGRAMS = \ base64-test \ getaddrinfo-test \ + hex-test \ + test-readenv \ parse_bytes-test \ parse_reply-test \ + parse_time-test \ snprintf-test \ strpftime-test @@ -28,21 +35,29 @@ make_roken_LDADD = noinst_LTLIBRARIES = libtest.la libtest_la_SOURCES = strftime.c strptime.c snprintf.c -libtest_la_CFLAGS = -DTEST_SNPRINTF +libtest_la_CFLAGS = -DTEST_SNPRINTF -DTEST_STRPFTIME parse_reply_test_SOURCES = parse_reply-test.c resolve.c parse_reply_test_CFLAGS = -DTEST_RESOLVE -strpftime_test_SOURCES = strpftime-test.c +test_readenv_SOURCES = test-readenv.c test-mem.c + +parse_time_test_SOURCES = parse_time-test.c test-mem.c + +strpftime_test_SOURCES = strpftime-test.c strpftime-test.h strpftime_test_LDADD = libtest.la $(LDADD) -snprintf_test_SOURCES = snprintf-test.c +strpftime_test_CFLAGS = -DTEST_STRPFTIME +snprintf_test_SOURCES = snprintf-test.c snprintf-test.h snprintf_test_LDADD = libtest.la $(LDADD) snprintf_test_CFLAGS = -DTEST_SNPRINTF +resolve_test_SOURCES = resolve-test.c + libroken_la_SOURCES = \ base64.c \ bswap.c \ concat.c \ + dumpdata.c \ environment.c \ eread.c \ esetenv.c \ @@ -54,6 +69,7 @@ libroken_la_SOURCES = \ getnameinfo_verified.c \ getprogname.c \ h_errno.c \ + hex.c \ hostent_find_fqdn.c \ issuid.c \ k_getpwnam.c \ @@ -64,6 +80,7 @@ libroken_la_SOURCES = \ parse_bytes.c \ parse_time.c \ parse_units.c \ + realloc.c \ resolve.c \ roken_gethostby.c \ rtbl.c \ @@ -74,6 +91,7 @@ libroken_la_SOURCES = \ snprintf.c \ socket.c \ strcollect.c \ + strpool.c \ timeval.c \ tm2time.c \ unvis.c \ @@ -87,12 +105,11 @@ libroken_la_SOURCES = \ EXTRA_libroken_la_SOURCES = \ err.hin \ glob.hin \ + fnmatch.hin \ ifaddrs.hin \ vis.hin -EXTRA_DIST = roken.awk roken.h.in - -libroken_la_LIBADD = @LTLIBOBJS@ $(DBLIB) +libroken_la_LIBADD = @LTLIBOBJS@ $(LTLIBOBJS) $(libroken_la_OBJECTS): roken.h $(XHEADERS) @@ -130,22 +147,32 @@ endif ## these are controlled by configure XHEADERS = $(err_h) $(fnmatch_h) $(glob_h) $(ifaddrs_h) $(vis_h) +CLEANFILES += err.h fnmatch.h glob.h ifaddrs.h vis.h -include_HEADERS = \ +dist_include_HEADERS = \ base64.h \ getarg.h \ + hex.h \ parse_bytes.h \ parse_time.h \ parse_units.h \ resolve.h \ roken-common.h \ rtbl.h \ - xdbm.h \ - $(XHEADERS) + xdbm.h + +if have_socket_wrapper +libroken_la_SOURCES += socket_wrapper.c socket_wrapper.h +dist_include_HEADERS += socket_wrapper.h +endif + +build_HEADERZ = test-mem.h $(XHEADERS) nodist_include_HEADERS = roken.h +rokenincludedir = $(includedir)/roken +nodist_rokeninclude_HEADERS = $(XHEADERS) -man_MANS = getarg.3 +man_MANS = getarg.3 parse_time.3 rtbl.3 ecalloc.3 SUFFIXES += .hin .hin.h: @@ -158,3 +185,10 @@ roken.h: make-roken$(EXEEXT) make-roken.c: roken.h.in roken.awk $(AWK) -f $(srcdir)/roken.awk $(srcdir)/roken.h.in > make-roken.c + +EXTRA_DIST = \ + roken.awk roken.h.in \ + $(man_MANS) \ + test-mem.h \ + ndbm_wrap.c \ + ndbm_wrap.h diff --git a/crypto/heimdal/lib/roken/Makefile.in b/crypto/heimdal/lib/roken/Makefile.in index d9ddcdd..0398523 100644 --- a/crypto/heimdal/lib/roken/Makefile.in +++ b/crypto/heimdal/lib/roken/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.8.3 from Makefile.am. +# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,25 +14,19 @@ @SET_MAKE@ -# $Id: Makefile.am,v 1.122.6.3 2003/10/14 16:13:15 joda Exp $ +# $Id: Makefile.am 22409 2008-01-12 05:53:37Z lha $ -# $Id: Makefile.am.common,v 1.5 2002/05/19 18:35:37 joda Exp $ +# $Id: Makefile.am.common 10998 2002-05-19 18:35:37Z joda $ -# $Id: Makefile.am.common,v 1.37.2.2 2003/10/13 13:15:39 joda Exp $ +# $Id: Makefile.am.common 22488 2008-01-21 11:47:22Z lha $ -SOURCES = $(libroken_la_SOURCES) $(EXTRA_libroken_la_SOURCES) $(libtest_la_SOURCES) base64-test.c getaddrinfo-test.c $(nodist_make_roken_SOURCES) parse_bytes-test.c $(parse_reply_test_SOURCES) $(snprintf_test_SOURCES) $(strpftime_test_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -44,42 +38,46 @@ POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +build_triplet = @build@ host_triplet = @host@ -DIST_COMMON = $(am__include_HEADERS_DIST) $(srcdir)/Makefile.am \ +DIST_COMMON = $(am__dist_include_HEADERS_DIST) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/Makefile.am.common \ $(top_srcdir)/cf/Makefile.am.common ChangeLog chown.c \ - copyhostent.c daemon.c ecalloc.c emalloc.c erealloc.c err.c \ - errx.c estrdup.c fchown.c flock.c fnmatch.c freeaddrinfo.c \ - freehostent.c gai_strerror.c getaddrinfo.c getcap.c getcwd.c \ - getdtablesize.c getegid.c geteuid.c getgid.c gethostname.c \ - getifaddrs.c getipnodebyaddr.c getipnodebyname.c getnameinfo.c \ - getopt.c gettimeofday.c getuid.c getusershell.c glob.c \ - hstrerror.c inet_aton.c inet_ntop.c inet_pton.c initgroups.c \ - innetgr.c install-sh iruserok.c localtime_r.c lstat.c \ - memmove.c missing mkinstalldirs mkstemp.c putenv.c rcmd.c \ - readv.c recvmsg.c sendmsg.c setegid.c setenv.c seteuid.c \ - strcasecmp.c strdup.c strerror.c strftime.c strlcat.c \ - strlcpy.c strlwr.c strncasecmp.c strndup.c strnlen.c \ + closefrom.c copyhostent.c daemon.c ecalloc.c emalloc.c \ + erealloc.c err.c errx.c estrdup.c fchown.c flock.c fnmatch.c \ + freeaddrinfo.c freehostent.c gai_strerror.c getaddrinfo.c \ + getcap.c getcwd.c getdtablesize.c getegid.c geteuid.c getgid.c \ + gethostname.c getifaddrs.c getipnodebyaddr.c getipnodebyname.c \ + getnameinfo.c getopt.c gettimeofday.c getuid.c getusershell.c \ + glob.c hstrerror.c inet_aton.c inet_ntop.c inet_pton.c \ + initgroups.c innetgr.c install-sh iruserok.c localtime_r.c \ + lstat.c memmove.c missing mkinstalldirs mkstemp.c putenv.c \ + rcmd.c readv.c recvmsg.c sendmsg.c setegid.c setenv.c \ + seteuid.c strcasecmp.c strdup.c strerror.c strftime.c \ + strlcat.c strlcpy.c strlwr.c strncasecmp.c strndup.c strnlen.c \ strptime.c strsep.c strsep_copy.c strtok_r.c strupr.c swab.c \ - unsetenv.c verr.c verrx.c vsyslog.c vwarn.c vwarnx.c warn.c \ - warnx.c writev.c -noinst_PROGRAMS = make-roken$(EXEEXT) snprintf-test$(EXEEXT) + timegm.c unsetenv.c verr.c verrx.c vsyslog.c vwarn.c vwarnx.c \ + warn.c warnx.c writev.c +noinst_PROGRAMS = make-roken$(EXEEXT) snprintf-test$(EXEEXT) \ + resolve-test$(EXEEXT) check_PROGRAMS = base64-test$(EXEEXT) getaddrinfo-test$(EXEEXT) \ + hex-test$(EXEEXT) test-readenv$(EXEEXT) \ parse_bytes-test$(EXEEXT) parse_reply-test$(EXEEXT) \ - snprintf-test$(EXEEXT) strpftime-test$(EXEEXT) + parse_time-test$(EXEEXT) snprintf-test$(EXEEXT) \ + strpftime-test$(EXEEXT) +@have_socket_wrapper_TRUE@am__append_1 = socket_wrapper.c socket_wrapper.h +@have_socket_wrapper_TRUE@am__append_2 = socket_wrapper.h subdir = lib/roken ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/cf/aix.m4 \ - $(top_srcdir)/cf/auth-modules.m4 \ + $(top_srcdir)/cf/auth-modules.m4 $(top_srcdir)/cf/autobuild.m4 \ $(top_srcdir)/cf/broken-getaddrinfo.m4 \ - $(top_srcdir)/cf/broken-getnameinfo.m4 \ $(top_srcdir)/cf/broken-glob.m4 \ $(top_srcdir)/cf/broken-realloc.m4 \ $(top_srcdir)/cf/broken-snprintf.m4 $(top_srcdir)/cf/broken.m4 \ $(top_srcdir)/cf/broken2.m4 $(top_srcdir)/cf/c-attribute.m4 \ $(top_srcdir)/cf/capabilities.m4 \ $(top_srcdir)/cf/check-compile-et.m4 \ - $(top_srcdir)/cf/check-declaration.m4 \ $(top_srcdir)/cf/check-getpwnam_r-posix.m4 \ $(top_srcdir)/cf/check-man.m4 \ $(top_srcdir)/cf/check-netinet-ip-and-tcp.m4 \ @@ -92,6 +90,7 @@ am__aclocal_m4_deps = $(top_srcdir)/cf/aix.m4 \ $(top_srcdir)/cf/find-func-no-libs2.m4 \ $(top_srcdir)/cf/find-func.m4 \ $(top_srcdir)/cf/find-if-not-broken.m4 \ + $(top_srcdir)/cf/framework-security.m4 \ $(top_srcdir)/cf/have-struct-field.m4 \ $(top_srcdir)/cf/have-type.m4 $(top_srcdir)/cf/irix.m4 \ $(top_srcdir)/cf/krb-bigendian.m4 \ @@ -100,47 +99,96 @@ am__aclocal_m4_deps = $(top_srcdir)/cf/aix.m4 \ $(top_srcdir)/cf/krb-readline.m4 \ $(top_srcdir)/cf/krb-struct-spwd.m4 \ $(top_srcdir)/cf/krb-struct-winsize.m4 \ - $(top_srcdir)/cf/mips-abi.m4 $(top_srcdir)/cf/misc.m4 \ - $(top_srcdir)/cf/need-proto.m4 $(top_srcdir)/cf/osfc2.m4 \ - $(top_srcdir)/cf/otp.m4 $(top_srcdir)/cf/proto-compat.m4 \ - $(top_srcdir)/cf/retsigtype.m4 $(top_srcdir)/cf/roken-frag.m4 \ - $(top_srcdir)/cf/sunos.m4 $(top_srcdir)/cf/telnet.m4 \ - $(top_srcdir)/cf/test-package.m4 $(top_srcdir)/cf/wflags.m4 \ - $(top_srcdir)/cf/with-all.m4 $(top_srcdir)/configure.in + $(top_srcdir)/cf/largefile.m4 $(top_srcdir)/cf/mips-abi.m4 \ + $(top_srcdir)/cf/misc.m4 $(top_srcdir)/cf/need-proto.m4 \ + $(top_srcdir)/cf/osfc2.m4 $(top_srcdir)/cf/otp.m4 \ + $(top_srcdir)/cf/proto-compat.m4 $(top_srcdir)/cf/pthreads.m4 \ + $(top_srcdir)/cf/resolv.m4 $(top_srcdir)/cf/retsigtype.m4 \ + $(top_srcdir)/cf/roken-frag.m4 \ + $(top_srcdir)/cf/socket-wrapper.m4 $(top_srcdir)/cf/sunos.m4 \ + $(top_srcdir)/cf/telnet.m4 $(top_srcdir)/cf/test-package.m4 \ + $(top_srcdir)/cf/version-script.m4 $(top_srcdir)/cf/wflags.m4 \ + $(top_srcdir)/cf/win32.m4 $(top_srcdir)/cf/with-all.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)" +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" \ + "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)" \ + "$(DESTDIR)$(rokenincludedir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) -am__DEPENDENCIES_1 = -libroken_la_DEPENDENCIES = @LTLIBOBJS@ $(am__DEPENDENCIES_1) -am_libroken_la_OBJECTS = base64.lo bswap.lo concat.lo environment.lo \ - eread.lo esetenv.lo ewrite.lo getaddrinfo_hostspec.lo \ - get_default_username.lo get_window_size.lo getarg.lo \ - getnameinfo_verified.lo getprogname.lo h_errno.lo \ - hostent_find_fqdn.lo issuid.lo k_getpwnam.lo k_getpwuid.lo \ - mini_inetd.lo net_read.lo net_write.lo parse_bytes.lo \ - parse_time.lo parse_units.lo resolve.lo roken_gethostby.lo \ - rtbl.lo setprogname.lo signal.lo simple_exec.lo snprintf.lo \ - socket.lo strcollect.lo timeval.lo tm2time.lo unvis.lo \ - verify.lo vis.lo warnerr.lo write_pid.lo +libroken_la_DEPENDENCIES = @LTLIBOBJS@ +am__libroken_la_SOURCES_DIST = base64.c bswap.c concat.c dumpdata.c \ + environment.c eread.c esetenv.c ewrite.c \ + getaddrinfo_hostspec.c get_default_username.c \ + get_window_size.c getarg.c getnameinfo_verified.c \ + getprogname.c h_errno.c hex.c hostent_find_fqdn.c issuid.c \ + k_getpwnam.c k_getpwuid.c mini_inetd.c net_read.c net_write.c \ + parse_bytes.c parse_time.c parse_units.c realloc.c resolve.c \ + roken_gethostby.c rtbl.c rtbl.h setprogname.c signal.c \ + simple_exec.c snprintf.c socket.c strcollect.c strpool.c \ + timeval.c tm2time.c unvis.c verify.c vis.c vis.h warnerr.c \ + write_pid.c xdbm.h socket_wrapper.c socket_wrapper.h +@have_socket_wrapper_TRUE@am__objects_1 = \ +@have_socket_wrapper_TRUE@ libroken_la-socket_wrapper.lo +am_libroken_la_OBJECTS = libroken_la-base64.lo libroken_la-bswap.lo \ + libroken_la-concat.lo libroken_la-dumpdata.lo \ + libroken_la-environment.lo libroken_la-eread.lo \ + libroken_la-esetenv.lo libroken_la-ewrite.lo \ + libroken_la-getaddrinfo_hostspec.lo \ + libroken_la-get_default_username.lo \ + libroken_la-get_window_size.lo libroken_la-getarg.lo \ + libroken_la-getnameinfo_verified.lo libroken_la-getprogname.lo \ + libroken_la-h_errno.lo libroken_la-hex.lo \ + libroken_la-hostent_find_fqdn.lo libroken_la-issuid.lo \ + libroken_la-k_getpwnam.lo libroken_la-k_getpwuid.lo \ + libroken_la-mini_inetd.lo libroken_la-net_read.lo \ + libroken_la-net_write.lo libroken_la-parse_bytes.lo \ + libroken_la-parse_time.lo libroken_la-parse_units.lo \ + libroken_la-realloc.lo libroken_la-resolve.lo \ + libroken_la-roken_gethostby.lo libroken_la-rtbl.lo \ + libroken_la-setprogname.lo libroken_la-signal.lo \ + libroken_la-simple_exec.lo libroken_la-snprintf.lo \ + libroken_la-socket.lo libroken_la-strcollect.lo \ + libroken_la-strpool.lo libroken_la-timeval.lo \ + libroken_la-tm2time.lo libroken_la-unvis.lo \ + libroken_la-verify.lo libroken_la-vis.lo \ + libroken_la-warnerr.lo libroken_la-write_pid.lo \ + $(am__objects_1) libroken_la_OBJECTS = $(am_libroken_la_OBJECTS) +libroken_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libroken_la_LDFLAGS) $(LDFLAGS) -o $@ libtest_la_LIBADD = am_libtest_la_OBJECTS = libtest_la-strftime.lo libtest_la-strptime.lo \ libtest_la-snprintf.lo libtest_la_OBJECTS = $(am_libtest_la_OBJECTS) +libtest_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libtest_la_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(noinst_PROGRAMS) base64_test_SOURCES = base64-test.c base64_test_OBJECTS = base64-test.$(OBJEXT) base64_test_LDADD = $(LDADD) +am__DEPENDENCIES_1 = base64_test_DEPENDENCIES = libroken.la $(am__DEPENDENCIES_1) getaddrinfo_test_SOURCES = getaddrinfo-test.c getaddrinfo_test_OBJECTS = getaddrinfo-test.$(OBJEXT) getaddrinfo_test_LDADD = $(LDADD) getaddrinfo_test_DEPENDENCIES = libroken.la $(am__DEPENDENCIES_1) +hex_test_SOURCES = hex-test.c +hex_test_OBJECTS = hex-test.$(OBJEXT) +hex_test_LDADD = $(LDADD) +hex_test_DEPENDENCIES = libroken.la $(am__DEPENDENCIES_1) nodist_make_roken_OBJECTS = make-roken.$(OBJEXT) make_roken_OBJECTS = $(nodist_make_roken_OBJECTS) make_roken_DEPENDENCIES = @@ -154,52 +202,74 @@ am_parse_reply_test_OBJECTS = \ parse_reply_test_OBJECTS = $(am_parse_reply_test_OBJECTS) parse_reply_test_LDADD = $(LDADD) parse_reply_test_DEPENDENCIES = libroken.la $(am__DEPENDENCIES_1) +parse_reply_test_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(parse_reply_test_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_parse_time_test_OBJECTS = parse_time-test.$(OBJEXT) \ + test-mem.$(OBJEXT) +parse_time_test_OBJECTS = $(am_parse_time_test_OBJECTS) +parse_time_test_LDADD = $(LDADD) +parse_time_test_DEPENDENCIES = libroken.la $(am__DEPENDENCIES_1) +am_resolve_test_OBJECTS = resolve-test.$(OBJEXT) +resolve_test_OBJECTS = $(am_resolve_test_OBJECTS) +resolve_test_LDADD = $(LDADD) +resolve_test_DEPENDENCIES = libroken.la $(am__DEPENDENCIES_1) am_snprintf_test_OBJECTS = snprintf_test-snprintf-test.$(OBJEXT) snprintf_test_OBJECTS = $(am_snprintf_test_OBJECTS) am__DEPENDENCIES_2 = libroken.la $(am__DEPENDENCIES_1) snprintf_test_DEPENDENCIES = libtest.la $(am__DEPENDENCIES_2) -am_strpftime_test_OBJECTS = strpftime-test.$(OBJEXT) +snprintf_test_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(snprintf_test_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_strpftime_test_OBJECTS = strpftime_test-strpftime-test.$(OBJEXT) strpftime_test_OBJECTS = $(am_strpftime_test_OBJECTS) strpftime_test_DEPENDENCIES = libtest.la $(am__DEPENDENCIES_2) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include +strpftime_test_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(strpftime_test_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_test_readenv_OBJECTS = test-readenv.$(OBJEXT) test-mem.$(OBJEXT) +test_readenv_OBJECTS = $(am_test_readenv_OBJECTS) +test_readenv_LDADD = $(LDADD) +test_readenv_DEPENDENCIES = libroken.la $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = -I. -I$(top_builddir)/include@am__isrc@ depcomp = am__depfiles_maybe = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libroken_la_SOURCES) $(EXTRA_libroken_la_SOURCES) \ $(libtest_la_SOURCES) base64-test.c getaddrinfo-test.c \ - $(nodist_make_roken_SOURCES) parse_bytes-test.c \ - $(parse_reply_test_SOURCES) $(snprintf_test_SOURCES) \ - $(strpftime_test_SOURCES) -DIST_SOURCES = $(libroken_la_SOURCES) $(EXTRA_libroken_la_SOURCES) \ - $(libtest_la_SOURCES) base64-test.c getaddrinfo-test.c \ - parse_bytes-test.c $(parse_reply_test_SOURCES) \ - $(snprintf_test_SOURCES) $(strpftime_test_SOURCES) + hex-test.c $(nodist_make_roken_SOURCES) parse_bytes-test.c \ + $(parse_reply_test_SOURCES) $(parse_time_test_SOURCES) \ + $(resolve_test_SOURCES) $(snprintf_test_SOURCES) \ + $(strpftime_test_SOURCES) $(test_readenv_SOURCES) +DIST_SOURCES = $(am__libroken_la_SOURCES_DIST) \ + $(EXTRA_libroken_la_SOURCES) $(libtest_la_SOURCES) \ + base64-test.c getaddrinfo-test.c hex-test.c parse_bytes-test.c \ + $(parse_reply_test_SOURCES) $(parse_time_test_SOURCES) \ + $(resolve_test_SOURCES) $(snprintf_test_SOURCES) \ + $(strpftime_test_SOURCES) $(test_readenv_SOURCES) man3dir = $(mandir)/man3 MANS = $(man_MANS) -am__include_HEADERS_DIST = base64.h getarg.h parse_bytes.h \ +am__dist_include_HEADERS_DIST = base64.h getarg.h hex.h parse_bytes.h \ parse_time.h parse_units.h resolve.h roken-common.h rtbl.h \ - xdbm.h err.h fnmatch.h glob.h ifaddrs.h vis.h -includeHEADERS_INSTALL = $(INSTALL_HEADER) + xdbm.h socket_wrapper.h +dist_includeHEADERS_INSTALL = $(INSTALL_HEADER) nodist_includeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(include_HEADERS) $(nodist_include_HEADERS) +nodist_rokenincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(dist_include_HEADERS) $(nodist_include_HEADERS) \ + $(nodist_rokeninclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AIX4_FALSE = @AIX4_FALSE@ -AIX4_TRUE = @AIX4_TRUE@ -AIX_DYNAMIC_AFS_FALSE = @AIX_DYNAMIC_AFS_FALSE@ -AIX_DYNAMIC_AFS_TRUE = @AIX_DYNAMIC_AFS_TRUE@ AIX_EXTRA_KAFS = @AIX_EXTRA_KAFS@ -AIX_FALSE = @AIX_FALSE@ -AIX_TRUE = @AIX_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -209,23 +279,22 @@ AWK = @AWK@ CANONICAL_HOST = @CANONICAL_HOST@ CATMAN = @CATMAN@ CATMANEXT = @CATMANEXT@ -CATMAN_FALSE = @CATMAN_FALSE@ -CATMAN_TRUE = @CATMAN_TRUE@ CC = @CC@ CFLAGS = @CFLAGS@ COMPILE_ET = @COMPILE_ET@ CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ + +# XXX this is needed for the LIBOBJS objects +CPPFLAGS = $(libroken_la_CPPFLAGS) CXX = @CXX@ CXXCPP = @CXXCPP@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBLIB = @DBLIB@ -DCE_FALSE = @DCE_FALSE@ -DCE_TRUE = @DCE_TRUE@ DEFS = @DEFS@ DIR_com_err = @DIR_com_err@ -DIR_des = @DIR_des@ +DIR_hcrypto = @DIR_hcrypto@ +DIR_hdbdir = @DIR_hdbdir@ DIR_roken = @DIR_roken@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ @@ -233,42 +302,27 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -EXTRA_LIB45 = @EXTRA_LIB45@ F77 = @F77@ FFLAGS = @FFLAGS@ +GREP = @GREP@ GROFF = @GROFF@ -HAVE_DB1_FALSE = @HAVE_DB1_FALSE@ -HAVE_DB1_TRUE = @HAVE_DB1_TRUE@ -HAVE_DB3_FALSE = @HAVE_DB3_FALSE@ -HAVE_DB3_TRUE = @HAVE_DB3_TRUE@ -HAVE_DLOPEN_FALSE = @HAVE_DLOPEN_FALSE@ -HAVE_DLOPEN_TRUE = @HAVE_DLOPEN_TRUE@ -HAVE_NDBM_FALSE = @HAVE_NDBM_FALSE@ -HAVE_NDBM_TRUE = @HAVE_NDBM_TRUE@ -HAVE_OPENSSL_FALSE = @HAVE_OPENSSL_FALSE@ -HAVE_OPENSSL_TRUE = @HAVE_OPENSSL_TRUE@ -HAVE_X_FALSE = @HAVE_X_FALSE@ -HAVE_X_TRUE = @HAVE_X_TRUE@ INCLUDES_roken = @INCLUDES_roken@ -INCLUDE_des = @INCLUDE_des@ +INCLUDE_hcrypto = @INCLUDE_hcrypto@ INCLUDE_hesiod = @INCLUDE_hesiod@ INCLUDE_krb4 = @INCLUDE_krb4@ INCLUDE_openldap = @INCLUDE_openldap@ INCLUDE_readline = @INCLUDE_readline@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IRIX_FALSE = @IRIX_FALSE@ -IRIX_TRUE = @IRIX_TRUE@ -KRB4_FALSE = @KRB4_FALSE@ -KRB4_TRUE = @KRB4_TRUE@ -KRB5_FALSE = @KRB5_FALSE@ -KRB5_TRUE = @KRB5_TRUE@ LDFLAGS = @LDFLAGS@ +LDFLAGS_VERSION_SCRIPT = @LDFLAGS_VERSION_SCRIPT@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBADD_roken = @LIBADD_roken@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -286,12 +340,9 @@ LIB_crypt = @LIB_crypt@ LIB_db_create = @LIB_db_create@ LIB_dbm_firstkey = @LIB_dbm_firstkey@ LIB_dbopen = @LIB_dbopen@ -LIB_des = @LIB_des@ -LIB_des_a = @LIB_des_a@ -LIB_des_appl = @LIB_des_appl@ -LIB_des_so = @LIB_des_so@ LIB_dlopen = @LIB_dlopen@ LIB_dn_expand = @LIB_dn_expand@ +LIB_door_create = @LIB_door_create@ LIB_el_init = @LIB_el_init@ LIB_freeaddrinfo = @LIB_freeaddrinfo@ LIB_gai_strerror = @LIB_gai_strerror@ @@ -301,15 +352,14 @@ LIB_gethostbyname2 = @LIB_gethostbyname2@ LIB_getnameinfo = @LIB_getnameinfo@ LIB_getpwnam_r = @LIB_getpwnam_r@ LIB_getsockopt = @LIB_getsockopt@ +LIB_hcrypto = @LIB_hcrypto@ +LIB_hcrypto_a = @LIB_hcrypto_a@ +LIB_hcrypto_appl = @LIB_hcrypto_appl@ +LIB_hcrypto_so = @LIB_hcrypto_so@ LIB_hesiod = @LIB_hesiod@ LIB_hstrerror = @LIB_hstrerror@ LIB_kdb = @LIB_kdb@ LIB_krb4 = @LIB_krb4@ -LIB_krb_disable_debug = @LIB_krb_disable_debug@ -LIB_krb_enable_debug = @LIB_krb_enable_debug@ -LIB_krb_get_kdc_time_diff = @LIB_krb_get_kdc_time_diff@ -LIB_krb_get_our_ip_for_realm = @LIB_krb_get_our_ip_for_realm@ -LIB_krb_kdctimeofday = @LIB_krb_kdctimeofday@ LIB_loadquery = @LIB_loadquery@ LIB_logout = @LIB_logout@ LIB_logwtmp = @LIB_logwtmp@ @@ -318,6 +368,7 @@ LIB_openpty = @LIB_openpty@ LIB_otp = @LIB_otp@ LIB_pidfile = @LIB_pidfile@ LIB_readline = @LIB_readline@ +LIB_res_ndestroy = @LIB_res_ndestroy@ LIB_res_nsearch = @LIB_res_nsearch@ LIB_res_search = @LIB_res_search@ LIB_roken = @LIB_roken@ @@ -329,15 +380,10 @@ LIB_tgetent = @LIB_tgetent@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ -NEED_WRITEAUTH_FALSE = @NEED_WRITEAUTH_FALSE@ -NEED_WRITEAUTH_TRUE = @NEED_WRITEAUTH_TRUE@ +MKDIR_P = @MKDIR_P@ NROFF = @NROFF@ OBJEXT = @OBJEXT@ -OTP_FALSE = @OTP_FALSE@ -OTP_TRUE = @OTP_TRUE@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -345,74 +391,79 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PTHREADS_CFLAGS = @PTHREADS_CFLAGS@ +PTHREADS_LIBS = @PTHREADS_LIBS@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ +VERSIONING = @VERSIONING@ VOID_RETSIGTYPE = @VOID_RETSIGTYPE@ WFLAGS = @WFLAGS@ WFLAGS_NOIMPLICITINT = @WFLAGS_NOIMPLICITINT@ WFLAGS_NOUNUSED = @WFLAGS_NOUNUSED@ +XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YACC = @YACC@ -ac_ct_AR = @ac_ct_AR@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ -do_roken_rename_FALSE = @do_roken_rename_FALSE@ -do_roken_rename_TRUE = @do_roken_rename_TRUE@ +datarootdir = @datarootdir@ +docdir = @docdir@ dpagaix_cflags = @dpagaix_cflags@ dpagaix_ldadd = @dpagaix_ldadd@ dpagaix_ldflags = @dpagaix_ldflags@ -el_compat_FALSE = @el_compat_FALSE@ -el_compat_TRUE = @el_compat_TRUE@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ -have_err_h_FALSE = @have_err_h_FALSE@ -have_err_h_TRUE = @have_err_h_TRUE@ -have_fnmatch_h_FALSE = @have_fnmatch_h_FALSE@ -have_fnmatch_h_TRUE = @have_fnmatch_h_TRUE@ -have_glob_h_FALSE = @have_glob_h_FALSE@ -have_glob_h_TRUE = @have_glob_h_TRUE@ -have_ifaddrs_h_FALSE = @have_ifaddrs_h_FALSE@ -have_ifaddrs_h_TRUE = @have_ifaddrs_h_TRUE@ -have_vis_h_FALSE = @have_vis_h_FALSE@ -have_vis_h_TRUE = @have_vis_h_TRUE@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ -SUFFIXES = .et .h .x .1 .3 .5 .8 .cat1 .cat3 .cat5 .cat8 .hin -INCLUDES = -I$(top_builddir)/include $(INCLUDES_roken) +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUFFIXES = .et .h .x .z .1 .3 .5 .8 .cat1 .cat3 .cat5 .cat8 .hin +AM_CPPFLAGS = -I$(top_builddir)/include $(INCLUDES_roken) @do_roken_rename_TRUE@ROKEN_RENAME = -DROKEN_RENAME AM_CFLAGS = $(WFLAGS) CP = cp @@ -429,78 +480,51 @@ LIB_kafs = $(top_builddir)/lib/kafs/libkafs.la $(AIX_EXTRA_KAFS) @KRB5_TRUE@ $(top_builddir)/lib/asn1/libasn1.la @KRB5_TRUE@LIB_gssapi = $(top_builddir)/lib/gssapi/libgssapi.la +@KRB5_TRUE@LIB_tsasl = $(top_builddir)/lib/tsasl/libtsasl.la @DCE_TRUE@LIB_kdfs = $(top_builddir)/lib/kdfs/libkdfs.la ACLOCAL_AMFLAGS = -I ../../cf -CLEANFILES = roken.h make-roken.c $(XHEADERS) +CLEANFILES = roken.h make-roken.c $(XHEADERS) err.h fnmatch.h glob.h \ + ifaddrs.h vis.h lib_LTLIBRARIES = libroken.la -libroken_la_LDFLAGS = -version-info 16:3:0 +libroken_la_LDFLAGS = -version-info 19:0:1 +libroken_la_CPPFLAGS = -DBUILD_ROKEN_LIB nodist_make_roken_SOURCES = make-roken.c TESTS = $(check_PROGRAMS) LDADD = libroken.la $(LIB_crypt) make_roken_LDADD = noinst_LTLIBRARIES = libtest.la libtest_la_SOURCES = strftime.c strptime.c snprintf.c -libtest_la_CFLAGS = -DTEST_SNPRINTF +libtest_la_CFLAGS = -DTEST_SNPRINTF -DTEST_STRPFTIME parse_reply_test_SOURCES = parse_reply-test.c resolve.c parse_reply_test_CFLAGS = -DTEST_RESOLVE -strpftime_test_SOURCES = strpftime-test.c +test_readenv_SOURCES = test-readenv.c test-mem.c +parse_time_test_SOURCES = parse_time-test.c test-mem.c +strpftime_test_SOURCES = strpftime-test.c strpftime-test.h strpftime_test_LDADD = libtest.la $(LDADD) -snprintf_test_SOURCES = snprintf-test.c +strpftime_test_CFLAGS = -DTEST_STRPFTIME +snprintf_test_SOURCES = snprintf-test.c snprintf-test.h snprintf_test_LDADD = libtest.la $(LDADD) snprintf_test_CFLAGS = -DTEST_SNPRINTF -libroken_la_SOURCES = \ - base64.c \ - bswap.c \ - concat.c \ - environment.c \ - eread.c \ - esetenv.c \ - ewrite.c \ - getaddrinfo_hostspec.c \ - get_default_username.c \ - get_window_size.c \ - getarg.c \ - getnameinfo_verified.c \ - getprogname.c \ - h_errno.c \ - hostent_find_fqdn.c \ - issuid.c \ - k_getpwnam.c \ - k_getpwuid.c \ - mini_inetd.c \ - net_read.c \ - net_write.c \ - parse_bytes.c \ - parse_time.c \ - parse_units.c \ - resolve.c \ - roken_gethostby.c \ - rtbl.c \ - rtbl.h \ - setprogname.c \ - signal.c \ - simple_exec.c \ - snprintf.c \ - socket.c \ - strcollect.c \ - timeval.c \ - tm2time.c \ - unvis.c \ - verify.c \ - vis.c \ - vis.h \ - warnerr.c \ - write_pid.c \ - xdbm.h - +resolve_test_SOURCES = resolve-test.c +libroken_la_SOURCES = base64.c bswap.c concat.c dumpdata.c \ + environment.c eread.c esetenv.c ewrite.c \ + getaddrinfo_hostspec.c get_default_username.c \ + get_window_size.c getarg.c getnameinfo_verified.c \ + getprogname.c h_errno.c hex.c hostent_find_fqdn.c issuid.c \ + k_getpwnam.c k_getpwuid.c mini_inetd.c net_read.c net_write.c \ + parse_bytes.c parse_time.c parse_units.c realloc.c resolve.c \ + roken_gethostby.c rtbl.c rtbl.h setprogname.c signal.c \ + simple_exec.c snprintf.c socket.c strcollect.c strpool.c \ + timeval.c tm2time.c unvis.c verify.c vis.c vis.h warnerr.c \ + write_pid.c xdbm.h $(am__append_1) EXTRA_libroken_la_SOURCES = \ err.hin \ glob.hin \ + fnmatch.hin \ ifaddrs.hin \ vis.hin -EXTRA_DIST = roken.awk roken.h.in -libroken_la_LIBADD = @LTLIBOBJS@ $(DBLIB) +libroken_la_LIBADD = @LTLIBOBJS@ BUILT_SOURCES = make-roken.c roken.h @have_err_h_FALSE@err_h = err.h @have_err_h_TRUE@err_h = @@ -513,25 +537,26 @@ BUILT_SOURCES = make-roken.c roken.h @have_vis_h_FALSE@vis_h = vis.h @have_vis_h_TRUE@vis_h = XHEADERS = $(err_h) $(fnmatch_h) $(glob_h) $(ifaddrs_h) $(vis_h) -include_HEADERS = \ - base64.h \ - getarg.h \ - parse_bytes.h \ - parse_time.h \ - parse_units.h \ - resolve.h \ - roken-common.h \ - rtbl.h \ - xdbm.h \ - $(XHEADERS) - +dist_include_HEADERS = base64.h getarg.h hex.h parse_bytes.h \ + parse_time.h parse_units.h resolve.h roken-common.h rtbl.h \ + xdbm.h $(am__append_2) +build_HEADERZ = test-mem.h $(XHEADERS) nodist_include_HEADERS = roken.h -man_MANS = getarg.3 +rokenincludedir = $(includedir)/roken +nodist_rokeninclude_HEADERS = $(XHEADERS) +man_MANS = getarg.3 parse_time.3 rtbl.3 ecalloc.3 +EXTRA_DIST = \ + roken.awk roken.h.in \ + $(man_MANS) \ + test-mem.h \ + ndbm_wrap.c \ + ndbm_wrap.h + all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .et .h .x .1 .3 .5 .8 .cat1 .cat3 .cat5 .cat8 .hin .c .lo .o .obj +.SUFFIXES: .et .h .x .z .1 .3 .5 .8 .cat1 .cat3 .cat5 .cat8 .hin .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(top_srcdir)/cf/Makefile.am.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -563,10 +588,10 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ + f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ @@ -575,7 +600,7 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p="`echo $$p | sed -e 's|^.*/||'`"; \ + p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done @@ -584,7 +609,7 @@ clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" = "$$p" && dir=.; \ + test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done @@ -593,14 +618,14 @@ clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" = "$$p" && dir=.; \ + test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libroken.la: $(libroken_la_OBJECTS) $(libroken_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(libroken_la_LDFLAGS) $(libroken_la_OBJECTS) $(libroken_la_LIBADD) $(LIBS) + $(libroken_la_LINK) -rpath $(libdir) $(libroken_la_OBJECTS) $(libroken_la_LIBADD) $(LIBS) libtest.la: $(libtest_la_OBJECTS) $(libtest_la_DEPENDENCIES) - $(LINK) $(libtest_la_LDFLAGS) $(libtest_la_OBJECTS) $(libtest_la_LIBADD) $(LIBS) + $(libtest_la_LINK) $(libtest_la_OBJECTS) $(libtest_la_LIBADD) $(LIBS) clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ @@ -617,25 +642,37 @@ clean-noinstPROGRAMS: done base64-test$(EXEEXT): $(base64_test_OBJECTS) $(base64_test_DEPENDENCIES) @rm -f base64-test$(EXEEXT) - $(LINK) $(base64_test_LDFLAGS) $(base64_test_OBJECTS) $(base64_test_LDADD) $(LIBS) + $(LINK) $(base64_test_OBJECTS) $(base64_test_LDADD) $(LIBS) getaddrinfo-test$(EXEEXT): $(getaddrinfo_test_OBJECTS) $(getaddrinfo_test_DEPENDENCIES) @rm -f getaddrinfo-test$(EXEEXT) - $(LINK) $(getaddrinfo_test_LDFLAGS) $(getaddrinfo_test_OBJECTS) $(getaddrinfo_test_LDADD) $(LIBS) + $(LINK) $(getaddrinfo_test_OBJECTS) $(getaddrinfo_test_LDADD) $(LIBS) +hex-test$(EXEEXT): $(hex_test_OBJECTS) $(hex_test_DEPENDENCIES) + @rm -f hex-test$(EXEEXT) + $(LINK) $(hex_test_OBJECTS) $(hex_test_LDADD) $(LIBS) make-roken$(EXEEXT): $(make_roken_OBJECTS) $(make_roken_DEPENDENCIES) @rm -f make-roken$(EXEEXT) - $(LINK) $(make_roken_LDFLAGS) $(make_roken_OBJECTS) $(make_roken_LDADD) $(LIBS) + $(LINK) $(make_roken_OBJECTS) $(make_roken_LDADD) $(LIBS) parse_bytes-test$(EXEEXT): $(parse_bytes_test_OBJECTS) $(parse_bytes_test_DEPENDENCIES) @rm -f parse_bytes-test$(EXEEXT) - $(LINK) $(parse_bytes_test_LDFLAGS) $(parse_bytes_test_OBJECTS) $(parse_bytes_test_LDADD) $(LIBS) + $(LINK) $(parse_bytes_test_OBJECTS) $(parse_bytes_test_LDADD) $(LIBS) parse_reply-test$(EXEEXT): $(parse_reply_test_OBJECTS) $(parse_reply_test_DEPENDENCIES) @rm -f parse_reply-test$(EXEEXT) - $(LINK) $(parse_reply_test_LDFLAGS) $(parse_reply_test_OBJECTS) $(parse_reply_test_LDADD) $(LIBS) + $(parse_reply_test_LINK) $(parse_reply_test_OBJECTS) $(parse_reply_test_LDADD) $(LIBS) +parse_time-test$(EXEEXT): $(parse_time_test_OBJECTS) $(parse_time_test_DEPENDENCIES) + @rm -f parse_time-test$(EXEEXT) + $(LINK) $(parse_time_test_OBJECTS) $(parse_time_test_LDADD) $(LIBS) +resolve-test$(EXEEXT): $(resolve_test_OBJECTS) $(resolve_test_DEPENDENCIES) + @rm -f resolve-test$(EXEEXT) + $(LINK) $(resolve_test_OBJECTS) $(resolve_test_LDADD) $(LIBS) snprintf-test$(EXEEXT): $(snprintf_test_OBJECTS) $(snprintf_test_DEPENDENCIES) @rm -f snprintf-test$(EXEEXT) - $(LINK) $(snprintf_test_LDFLAGS) $(snprintf_test_OBJECTS) $(snprintf_test_LDADD) $(LIBS) + $(snprintf_test_LINK) $(snprintf_test_OBJECTS) $(snprintf_test_LDADD) $(LIBS) strpftime-test$(EXEEXT): $(strpftime_test_OBJECTS) $(strpftime_test_DEPENDENCIES) @rm -f strpftime-test$(EXEEXT) - $(LINK) $(strpftime_test_LDFLAGS) $(strpftime_test_OBJECTS) $(strpftime_test_LDADD) $(LIBS) + $(strpftime_test_LINK) $(strpftime_test_OBJECTS) $(strpftime_test_LDADD) $(LIBS) +test-readenv$(EXEEXT): $(test_readenv_OBJECTS) $(test_readenv_DEPENDENCIES) + @rm -f test-readenv$(EXEEXT) + $(LINK) $(test_readenv_OBJECTS) $(test_readenv_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -652,32 +689,149 @@ distclean-compile: .c.lo: $(LTCOMPILE) -c -o $@ $< -libtest_la-strftime.o: strftime.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-strftime.o `test -f 'strftime.c' || echo '$(srcdir)/'`strftime.c +libroken_la-base64.lo: base64.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-base64.lo `test -f 'base64.c' || echo '$(srcdir)/'`base64.c -libtest_la-strftime.obj: strftime.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-strftime.obj `if test -f 'strftime.c'; then $(CYGPATH_W) 'strftime.c'; else $(CYGPATH_W) '$(srcdir)/strftime.c'; fi` +libroken_la-bswap.lo: bswap.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-bswap.lo `test -f 'bswap.c' || echo '$(srcdir)/'`bswap.c -libtest_la-strftime.lo: strftime.c - $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-strftime.lo `test -f 'strftime.c' || echo '$(srcdir)/'`strftime.c +libroken_la-concat.lo: concat.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-concat.lo `test -f 'concat.c' || echo '$(srcdir)/'`concat.c -libtest_la-strptime.o: strptime.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-strptime.o `test -f 'strptime.c' || echo '$(srcdir)/'`strptime.c +libroken_la-dumpdata.lo: dumpdata.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-dumpdata.lo `test -f 'dumpdata.c' || echo '$(srcdir)/'`dumpdata.c -libtest_la-strptime.obj: strptime.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-strptime.obj `if test -f 'strptime.c'; then $(CYGPATH_W) 'strptime.c'; else $(CYGPATH_W) '$(srcdir)/strptime.c'; fi` +libroken_la-environment.lo: environment.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-environment.lo `test -f 'environment.c' || echo '$(srcdir)/'`environment.c -libtest_la-strptime.lo: strptime.c - $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-strptime.lo `test -f 'strptime.c' || echo '$(srcdir)/'`strptime.c +libroken_la-eread.lo: eread.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-eread.lo `test -f 'eread.c' || echo '$(srcdir)/'`eread.c + +libroken_la-esetenv.lo: esetenv.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-esetenv.lo `test -f 'esetenv.c' || echo '$(srcdir)/'`esetenv.c + +libroken_la-ewrite.lo: ewrite.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-ewrite.lo `test -f 'ewrite.c' || echo '$(srcdir)/'`ewrite.c + +libroken_la-getaddrinfo_hostspec.lo: getaddrinfo_hostspec.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-getaddrinfo_hostspec.lo `test -f 'getaddrinfo_hostspec.c' || echo '$(srcdir)/'`getaddrinfo_hostspec.c + +libroken_la-get_default_username.lo: get_default_username.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-get_default_username.lo `test -f 'get_default_username.c' || echo '$(srcdir)/'`get_default_username.c + +libroken_la-get_window_size.lo: get_window_size.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-get_window_size.lo `test -f 'get_window_size.c' || echo '$(srcdir)/'`get_window_size.c + +libroken_la-getarg.lo: getarg.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-getarg.lo `test -f 'getarg.c' || echo '$(srcdir)/'`getarg.c + +libroken_la-getnameinfo_verified.lo: getnameinfo_verified.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-getnameinfo_verified.lo `test -f 'getnameinfo_verified.c' || echo '$(srcdir)/'`getnameinfo_verified.c + +libroken_la-getprogname.lo: getprogname.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-getprogname.lo `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c + +libroken_la-h_errno.lo: h_errno.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-h_errno.lo `test -f 'h_errno.c' || echo '$(srcdir)/'`h_errno.c + +libroken_la-hex.lo: hex.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-hex.lo `test -f 'hex.c' || echo '$(srcdir)/'`hex.c + +libroken_la-hostent_find_fqdn.lo: hostent_find_fqdn.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-hostent_find_fqdn.lo `test -f 'hostent_find_fqdn.c' || echo '$(srcdir)/'`hostent_find_fqdn.c + +libroken_la-issuid.lo: issuid.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-issuid.lo `test -f 'issuid.c' || echo '$(srcdir)/'`issuid.c + +libroken_la-k_getpwnam.lo: k_getpwnam.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-k_getpwnam.lo `test -f 'k_getpwnam.c' || echo '$(srcdir)/'`k_getpwnam.c + +libroken_la-k_getpwuid.lo: k_getpwuid.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-k_getpwuid.lo `test -f 'k_getpwuid.c' || echo '$(srcdir)/'`k_getpwuid.c + +libroken_la-mini_inetd.lo: mini_inetd.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-mini_inetd.lo `test -f 'mini_inetd.c' || echo '$(srcdir)/'`mini_inetd.c + +libroken_la-net_read.lo: net_read.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-net_read.lo `test -f 'net_read.c' || echo '$(srcdir)/'`net_read.c + +libroken_la-net_write.lo: net_write.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-net_write.lo `test -f 'net_write.c' || echo '$(srcdir)/'`net_write.c + +libroken_la-parse_bytes.lo: parse_bytes.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-parse_bytes.lo `test -f 'parse_bytes.c' || echo '$(srcdir)/'`parse_bytes.c + +libroken_la-parse_time.lo: parse_time.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-parse_time.lo `test -f 'parse_time.c' || echo '$(srcdir)/'`parse_time.c + +libroken_la-parse_units.lo: parse_units.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-parse_units.lo `test -f 'parse_units.c' || echo '$(srcdir)/'`parse_units.c + +libroken_la-realloc.lo: realloc.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-realloc.lo `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c + +libroken_la-resolve.lo: resolve.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-resolve.lo `test -f 'resolve.c' || echo '$(srcdir)/'`resolve.c + +libroken_la-roken_gethostby.lo: roken_gethostby.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-roken_gethostby.lo `test -f 'roken_gethostby.c' || echo '$(srcdir)/'`roken_gethostby.c + +libroken_la-rtbl.lo: rtbl.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-rtbl.lo `test -f 'rtbl.c' || echo '$(srcdir)/'`rtbl.c + +libroken_la-setprogname.lo: setprogname.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-setprogname.lo `test -f 'setprogname.c' || echo '$(srcdir)/'`setprogname.c + +libroken_la-signal.lo: signal.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-signal.lo `test -f 'signal.c' || echo '$(srcdir)/'`signal.c + +libroken_la-simple_exec.lo: simple_exec.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-simple_exec.lo `test -f 'simple_exec.c' || echo '$(srcdir)/'`simple_exec.c + +libroken_la-snprintf.lo: snprintf.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-snprintf.lo `test -f 'snprintf.c' || echo '$(srcdir)/'`snprintf.c + +libroken_la-socket.lo: socket.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-socket.lo `test -f 'socket.c' || echo '$(srcdir)/'`socket.c -libtest_la-snprintf.o: snprintf.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-snprintf.o `test -f 'snprintf.c' || echo '$(srcdir)/'`snprintf.c +libroken_la-strcollect.lo: strcollect.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-strcollect.lo `test -f 'strcollect.c' || echo '$(srcdir)/'`strcollect.c -libtest_la-snprintf.obj: snprintf.c - $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-snprintf.obj `if test -f 'snprintf.c'; then $(CYGPATH_W) 'snprintf.c'; else $(CYGPATH_W) '$(srcdir)/snprintf.c'; fi` +libroken_la-strpool.lo: strpool.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-strpool.lo `test -f 'strpool.c' || echo '$(srcdir)/'`strpool.c + +libroken_la-timeval.lo: timeval.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-timeval.lo `test -f 'timeval.c' || echo '$(srcdir)/'`timeval.c + +libroken_la-tm2time.lo: tm2time.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-tm2time.lo `test -f 'tm2time.c' || echo '$(srcdir)/'`tm2time.c + +libroken_la-unvis.lo: unvis.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-unvis.lo `test -f 'unvis.c' || echo '$(srcdir)/'`unvis.c + +libroken_la-verify.lo: verify.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-verify.lo `test -f 'verify.c' || echo '$(srcdir)/'`verify.c + +libroken_la-vis.lo: vis.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-vis.lo `test -f 'vis.c' || echo '$(srcdir)/'`vis.c + +libroken_la-warnerr.lo: warnerr.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-warnerr.lo `test -f 'warnerr.c' || echo '$(srcdir)/'`warnerr.c + +libroken_la-write_pid.lo: write_pid.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-write_pid.lo `test -f 'write_pid.c' || echo '$(srcdir)/'`write_pid.c + +libroken_la-socket_wrapper.lo: socket_wrapper.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libroken_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libroken_la-socket_wrapper.lo `test -f 'socket_wrapper.c' || echo '$(srcdir)/'`socket_wrapper.c + +libtest_la-strftime.lo: strftime.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-strftime.lo `test -f 'strftime.c' || echo '$(srcdir)/'`strftime.c + +libtest_la-strptime.lo: strptime.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-strptime.lo `test -f 'strptime.c' || echo '$(srcdir)/'`strptime.c libtest_la-snprintf.lo: snprintf.c - $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-snprintf.lo `test -f 'snprintf.c' || echo '$(srcdir)/'`snprintf.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtest_la_CFLAGS) $(CFLAGS) -c -o libtest_la-snprintf.lo `test -f 'snprintf.c' || echo '$(srcdir)/'`snprintf.c parse_reply_test-parse_reply-test.o: parse_reply-test.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_reply_test_CFLAGS) $(CFLAGS) -c -o parse_reply_test-parse_reply-test.o `test -f 'parse_reply-test.c' || echo '$(srcdir)/'`parse_reply-test.c @@ -685,39 +839,32 @@ parse_reply_test-parse_reply-test.o: parse_reply-test.c parse_reply_test-parse_reply-test.obj: parse_reply-test.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_reply_test_CFLAGS) $(CFLAGS) -c -o parse_reply_test-parse_reply-test.obj `if test -f 'parse_reply-test.c'; then $(CYGPATH_W) 'parse_reply-test.c'; else $(CYGPATH_W) '$(srcdir)/parse_reply-test.c'; fi` -parse_reply_test-parse_reply-test.lo: parse_reply-test.c - $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_reply_test_CFLAGS) $(CFLAGS) -c -o parse_reply_test-parse_reply-test.lo `test -f 'parse_reply-test.c' || echo '$(srcdir)/'`parse_reply-test.c - parse_reply_test-resolve.o: resolve.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_reply_test_CFLAGS) $(CFLAGS) -c -o parse_reply_test-resolve.o `test -f 'resolve.c' || echo '$(srcdir)/'`resolve.c parse_reply_test-resolve.obj: resolve.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_reply_test_CFLAGS) $(CFLAGS) -c -o parse_reply_test-resolve.obj `if test -f 'resolve.c'; then $(CYGPATH_W) 'resolve.c'; else $(CYGPATH_W) '$(srcdir)/resolve.c'; fi` -parse_reply_test-resolve.lo: resolve.c - $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_reply_test_CFLAGS) $(CFLAGS) -c -o parse_reply_test-resolve.lo `test -f 'resolve.c' || echo '$(srcdir)/'`resolve.c - snprintf_test-snprintf-test.o: snprintf-test.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(snprintf_test_CFLAGS) $(CFLAGS) -c -o snprintf_test-snprintf-test.o `test -f 'snprintf-test.c' || echo '$(srcdir)/'`snprintf-test.c snprintf_test-snprintf-test.obj: snprintf-test.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(snprintf_test_CFLAGS) $(CFLAGS) -c -o snprintf_test-snprintf-test.obj `if test -f 'snprintf-test.c'; then $(CYGPATH_W) 'snprintf-test.c'; else $(CYGPATH_W) '$(srcdir)/snprintf-test.c'; fi` -snprintf_test-snprintf-test.lo: snprintf-test.c - $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(snprintf_test_CFLAGS) $(CFLAGS) -c -o snprintf_test-snprintf-test.lo `test -f 'snprintf-test.c' || echo '$(srcdir)/'`snprintf-test.c +strpftime_test-strpftime-test.o: strpftime-test.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(strpftime_test_CFLAGS) $(CFLAGS) -c -o strpftime_test-strpftime-test.o `test -f 'strpftime-test.c' || echo '$(srcdir)/'`strpftime-test.c + +strpftime_test-strpftime-test.obj: strpftime-test.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(strpftime_test_CFLAGS) $(CFLAGS) -c -o strpftime_test-strpftime-test.obj `if test -f 'strpftime-test.c'; then $(CYGPATH_W) 'strpftime-test.c'; else $(CYGPATH_W) '$(srcdir)/strpftime-test.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-man3: $(man3_MANS) $(man_MANS) @$(NORMAL_INSTALL) - test -z "$(man3dir)" || $(mkdir_p) "$(DESTDIR)$(man3dir)" + test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)" @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ @@ -760,29 +907,29 @@ uninstall-man3: echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man3dir)/$$inst"; \ done -install-includeHEADERS: $(include_HEADERS) +install-dist_includeHEADERS: $(dist_include_HEADERS) @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)" - @list='$(include_HEADERS)'; for p in $$list; do \ + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(dist_include_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ - echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ - $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ + f=$(am__strip_dir) \ + echo " $(dist_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ + $(dist_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ done -uninstall-includeHEADERS: +uninstall-dist_includeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(include_HEADERS)'; for p in $$list; do \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ + @list='$(dist_include_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ rm -f "$(DESTDIR)$(includedir)/$$f"; \ done install-nodist_includeHEADERS: $(nodist_include_HEADERS) @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)" + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @list='$(nodist_include_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ + f=$(am__strip_dir) \ echo " $(nodist_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ $(nodist_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ done @@ -790,10 +937,27 @@ install-nodist_includeHEADERS: $(nodist_include_HEADERS) uninstall-nodist_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nodist_include_HEADERS)'; for p in $$list; do \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ + f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ rm -f "$(DESTDIR)$(includedir)/$$f"; \ done +install-nodist_rokenincludeHEADERS: $(nodist_rokeninclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(rokenincludedir)" || $(MKDIR_P) "$(DESTDIR)$(rokenincludedir)" + @list='$(nodist_rokeninclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(nodist_rokenincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(rokenincludedir)/$$f'"; \ + $(nodist_rokenincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(rokenincludedir)/$$f"; \ + done + +uninstall-nodist_rokenincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_rokeninclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(rokenincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(rokenincludedir)/$$f"; \ + done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -815,9 +979,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$tags$$unique" \ - || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) @@ -842,9 +1008,9 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -853,7 +1019,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *$$ws$$tst$$ws*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -865,7 +1031,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *$$ws$$tst$$ws*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -896,42 +1062,40 @@ check-TESTS: $(TESTS) skipped=""; \ if test "$$skip" -ne 0; then \ skipped="($$skip tests were not run)"; \ - test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ - test -n "$$skipped" && echo "$$skipped"; \ - test -n "$$report" && echo "$$report"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ echo "$$dashes"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. $(distdir)/../../cf - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -953,8 +1117,8 @@ check: $(BUILT_SOURCES) all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(HEADERS) \ all-local installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(rokenincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -977,7 +1141,7 @@ clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -992,7 +1156,7 @@ clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -1004,19 +1168,28 @@ info: info-am info-am: -install-data-am: install-includeHEADERS install-man \ - install-nodist_includeHEADERS +install-data-am: install-dist_includeHEADERS install-man \ + install-nodist_includeHEADERS \ + install-nodist_rokenincludeHEADERS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + install-exec-am: install-libLTLIBRARIES @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-am + install-info: install-info-am install-man: install-man3 +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -1036,28 +1209,38 @@ ps: ps-am ps-am: -uninstall-am: uninstall-includeHEADERS uninstall-info-am \ - uninstall-libLTLIBRARIES uninstall-man \ - uninstall-nodist_includeHEADERS +uninstall-am: uninstall-dist_includeHEADERS uninstall-libLTLIBRARIES \ + uninstall-man uninstall-nodist_includeHEADERS \ + uninstall-nodist_rokenincludeHEADERS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-man: uninstall-man3 +.MAKE: install-am install-data-am install-exec-am install-strip \ + uninstall-am + .PHONY: CTAGS GTAGS all all-am all-local check check-TESTS check-am \ check-local clean clean-checkPROGRAMS clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ - clean-noinstPROGRAMS ctags distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-includeHEADERS install-info install-info-am \ + clean-noinstPROGRAMS ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-hook install-dist_includeHEADERS install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-hook \ + install-html install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-man3 \ - install-nodist_includeHEADERS install-strip installcheck \ + install-nodist_includeHEADERS \ + install-nodist_rokenincludeHEADERS install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-includeHEADERS \ - uninstall-info-am uninstall-libLTLIBRARIES uninstall-man \ - uninstall-man3 uninstall-nodist_includeHEADERS + tags uninstall uninstall-am uninstall-dist_includeHEADERS \ + uninstall-hook uninstall-libLTLIBRARIES uninstall-man \ + uninstall-man3 uninstall-nodist_includeHEADERS \ + uninstall-nodist_rokenincludeHEADERS install-suid-programs: @@ -1072,8 +1255,8 @@ install-suid-programs: install-exec-hook: install-suid-programs -install-build-headers:: $(include_HEADERS) $(build_HEADERZ) - @foo='$(include_HEADERS) $(nodist_include_HEADERS) $(build_HEADERZ)'; \ +install-build-headers:: $(include_HEADERS) $(dist_include_HEADERS) $(nodist_include_HEADERS) $(build_HEADERZ) $(nobase_include_HEADERS) + @foo='$(include_HEADERS) $(dist_include_HEADERS) $(nodist_include_HEADERS) $(build_HEADERZ)'; \ for f in $$foo; do \ f=`basename $$f`; \ if test -f "$(srcdir)/$$f"; then file="$(srcdir)/$$f"; \ @@ -1083,19 +1266,31 @@ install-build-headers:: $(include_HEADERS) $(build_HEADERZ) echo " $(CP) $$file $(buildinclude)/$$f"; \ $(CP) $$file $(buildinclude)/$$f; \ fi ; \ + done ; \ + foo='$(nobase_include_HEADERS)'; \ + for f in $$foo; do \ + if test -f "$(srcdir)/$$f"; then file="$(srcdir)/$$f"; \ + else file="$$f"; fi; \ + $(mkdir_p) $(buildinclude)/`dirname $$f` ; \ + if cmp -s $$file $(buildinclude)/$$f 2> /dev/null ; then \ + : ; else \ + echo " $(CP) $$file $(buildinclude)/$$f"; \ + $(CP) $$file $(buildinclude)/$$f; \ + fi ; \ done all-local: install-build-headers check-local:: - @if test '$(CHECK_LOCAL)'; then \ + @if test '$(CHECK_LOCAL)' = "no-check-local"; then \ + foo=''; elif test '$(CHECK_LOCAL)'; then \ foo='$(CHECK_LOCAL)'; else \ foo='$(PROGRAMS)'; fi; \ if test "$$foo"; then \ failed=0; all=0; \ for i in $$foo; do \ all=`expr $$all + 1`; \ - if ./$$i --version > /dev/null 2>&1; then \ + if (./$$i --version && ./$$i --help) > /dev/null 2>&1; then \ echo "PASS: $$i"; \ else \ echo "FAIL: $$i"; \ @@ -1111,7 +1306,7 @@ check-local:: echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes"; \ - test "$$failed" -eq 0; \ + test "$$failed" -eq 0 || exit 1; \ fi .x.c: @@ -1181,15 +1376,40 @@ dist-cat8-mans: dist-hook: dist-cat1-mans dist-cat3-mans dist-cat5-mans dist-cat8-mans install-cat-mans: - $(SHELL) $(top_srcdir)/cf/install-catman.sh "$(INSTALL_DATA)" "$(mkinstalldirs)" "$(srcdir)" "$(DESTDIR)$(mandir)" '$(CATMANEXT)' $(man_MANS) $(man1_MANS) $(man3_MANS) $(man5_MANS) $(man8_MANS) + $(SHELL) $(top_srcdir)/cf/install-catman.sh install "$(INSTALL_DATA)" "$(mkinstalldirs)" "$(srcdir)" "$(DESTDIR)$(mandir)" '$(CATMANEXT)' $(man_MANS) $(man1_MANS) $(man3_MANS) $(man5_MANS) $(man8_MANS) + +uninstall-cat-mans: + $(SHELL) $(top_srcdir)/cf/install-catman.sh uninstall "$(INSTALL_DATA)" "$(mkinstalldirs)" "$(srcdir)" "$(DESTDIR)$(mandir)" '$(CATMANEXT)' $(man_MANS) $(man1_MANS) $(man3_MANS) $(man5_MANS) $(man8_MANS) install-data-hook: install-cat-mans +uninstall-hook: uninstall-cat-mans .et.h: $(COMPILE_ET) $< .et.c: $(COMPILE_ET) $< +# +# Useful target for debugging +# + +check-valgrind: + tobjdir=`cd $(top_builddir) && pwd` ; \ + tsrcdir=`cd $(top_srcdir) && pwd` ; \ + env TESTS_ENVIRONMENT="$${tobjdir}/libtool --mode execute valgrind --leak-check=full --trace-children=yes --quiet -q --num-callers=30 --suppressions=$${tsrcdir}/cf/valgrind-suppressions" make check + +# +# Target to please samba build farm, builds distfiles in-tree. +# Will break when automake changes... +# + +distdir-in-tree: $(DISTFILES) $(INFO_DEPS) + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" != .; then \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) distdir-in-tree) ; \ + fi ; \ + done + $(LTLIBOBJS) $(libroken_la_OBJECTS): roken.h $(XHEADERS) .hin.h: cp $< $@ diff --git a/crypto/heimdal/lib/roken/base64-test.c b/crypto/heimdal/lib/roken/base64-test.c index eace04b..435e41b 100644 --- a/crypto/heimdal/lib/roken/base64-test.c +++ b/crypto/heimdal/lib/roken/base64-test.c @@ -33,10 +33,10 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: base64-test.c,v 1.2 2001/05/29 13:12:21 assar Exp $"); +RCSID("$Id: base64-test.c 21005 2007-06-08 01:54:35Z lha $"); #endif -#include <roken.h> +#include "roken.h" #include <base64.h> int @@ -71,8 +71,8 @@ main(int argc, char **argv) str = strdup(t->result); len = base64_decode(t->result, str); if(len != t->len) { - fprintf(stderr, "failed test %d: len %d != %d\n", numtest, - len, t->len); + fprintf(stderr, "failed test %d: len %lu != %lu\n", numtest, + (unsigned long)len, (unsigned long)t->len); numerr++; } else if(memcmp(str, t->data, t->len) != 0) { fprintf(stderr, "failed test %d: data\n", numtest); diff --git a/crypto/heimdal/lib/roken/base64.c b/crypto/heimdal/lib/roken/base64.c index 21e79c1..daf7fc5 100644 --- a/crypto/heimdal/lib/roken/base64.c +++ b/crypto/heimdal/lib/roken/base64.c @@ -33,26 +33,26 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: base64.c,v 1.5 2001/05/28 17:33:41 joda Exp $"); +RCSID("$Id: base64.c 15506 2005-06-23 10:47:57Z lha $"); #endif #include <stdlib.h> #include <string.h> #include "base64.h" -static char base64_chars[] = +static const char base64_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static int pos(char c) { - char *p; + const char *p; for (p = base64_chars; *p; p++) if (*p == c) return p - base64_chars; return -1; } -int +int ROKEN_LIB_FUNCTION base64_encode(const void *data, int size, char **str) { char *s, *p; @@ -114,7 +114,7 @@ token_decode(const char *token) return (marker << 24) | val; } -int +int ROKEN_LIB_FUNCTION base64_decode(const char *str, void *data) { const char *p; diff --git a/crypto/heimdal/lib/roken/base64.h b/crypto/heimdal/lib/roken/base64.h index 5ad1e3b..09aadff 100644 --- a/crypto/heimdal/lib/roken/base64.h +++ b/crypto/heimdal/lib/roken/base64.h @@ -31,12 +31,23 @@ * SUCH DAMAGE. */ -/* $Id: base64.h,v 1.2 1999/12/02 16:58:45 joda Exp $ */ +/* $Id: base64.h 15535 2005-06-30 07:13:33Z lha $ */ #ifndef _BASE64_H_ #define _BASE64_H_ -int base64_encode(const void *data, int size, char **str); -int base64_decode(const char *str, void *data); +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + +int ROKEN_LIB_FUNCTION +base64_encode(const void *, int, char **); + +int ROKEN_LIB_FUNCTION +base64_decode(const char *, void *); #endif diff --git a/crypto/heimdal/lib/roken/bswap.c b/crypto/heimdal/lib/roken/bswap.c index c57dc6f..e669eb2 100644 --- a/crypto/heimdal/lib/roken/bswap.c +++ b/crypto/heimdal/lib/roken/bswap.c @@ -36,11 +36,11 @@ #endif #include "roken.h" -RCSID("$Id: bswap.c,v 1.3 2001/05/18 15:32:11 joda Exp $"); +RCSID("$Id: bswap.c 14773 2005-04-12 11:29:18Z lha $"); #ifndef HAVE_BSWAP32 -unsigned int +unsigned int ROKEN_LIB_FUNCTION bswap32 (unsigned int val) { return (val & 0xff) << 24 | @@ -52,7 +52,7 @@ bswap32 (unsigned int val) #ifndef HAVE_BSWAP16 -unsigned short +unsigned short ROKEN_LIB_FUNCTION bswap16 (unsigned short val) { return (val & 0xff) << 8 | diff --git a/crypto/heimdal/lib/roken/chown.c b/crypto/heimdal/lib/roken/chown.c index f3d34e3..5eb9c92 100644 --- a/crypto/heimdal/lib/roken/chown.c +++ b/crypto/heimdal/lib/roken/chown.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: chown.c,v 1.3 1999/12/02 16:58:45 joda Exp $"); +RCSID("$Id: chown.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" -int +int ROKEN_LIB_FUNCTION chown(const char *path, uid_t owner, gid_t group) { return 0; diff --git a/crypto/heimdal/lib/roken/closefrom.c b/crypto/heimdal/lib/roken/closefrom.c new file mode 100644 index 0000000..f56e556 --- /dev/null +++ b/crypto/heimdal/lib/roken/closefrom.c @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2005 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +RCSID("$Id: closefrom.c 21005 2007-06-08 01:54:35Z lha $"); +#endif + +#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +#include "roken.h" + +int ROKEN_LIB_FUNCTION +closefrom(int fd) +{ + int num = getdtablesize(); + + if (num < 0) + num = 1024; /* XXX */ + + for (; fd <= num; fd++) + close(fd); + + return 0; +} diff --git a/crypto/heimdal/lib/roken/concat.c b/crypto/heimdal/lib/roken/concat.c index ca295c0..94e0fcc 100644 --- a/crypto/heimdal/lib/roken/concat.c +++ b/crypto/heimdal/lib/roken/concat.c @@ -33,11 +33,11 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: concat.c,v 1.4 1999/12/02 16:58:45 joda Exp $"); +RCSID("$Id: concat.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" -int +int ROKEN_LIB_FUNCTION roken_concat (char *s, size_t len, ...) { int ret; @@ -49,7 +49,7 @@ roken_concat (char *s, size_t len, ...) return ret; } -int +int ROKEN_LIB_FUNCTION roken_vconcat (char *s, size_t len, va_list args) { const char *a; @@ -67,7 +67,7 @@ roken_vconcat (char *s, size_t len, va_list args) return 0; } -size_t +size_t ROKEN_LIB_FUNCTION roken_vmconcat (char **s, size_t max_len, va_list args) { const char *a; @@ -99,7 +99,7 @@ roken_vmconcat (char **s, size_t max_len, va_list args) return len; } -size_t +size_t ROKEN_LIB_FUNCTION roken_mconcat (char **s, size_t max_len, ...) { int ret; diff --git a/crypto/heimdal/lib/roken/copyhostent.c b/crypto/heimdal/lib/roken/copyhostent.c index a3be6db..6410449 100644 --- a/crypto/heimdal/lib/roken/copyhostent.c +++ b/crypto/heimdal/lib/roken/copyhostent.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: copyhostent.c,v 1.2 1999/12/02 16:58:45 joda Exp $"); +RCSID("$Id: copyhostent.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -42,7 +42,7 @@ RCSID("$Id: copyhostent.c,v 1.2 1999/12/02 16:58:45 joda Exp $"); * return a malloced copy of `h' */ -struct hostent * +struct hostent * ROKEN_LIB_FUNCTION copyhostent (const struct hostent *h) { struct hostent *res; diff --git a/crypto/heimdal/lib/roken/daemon.c b/crypto/heimdal/lib/roken/daemon.c index 758856c..2bc2350 100644 --- a/crypto/heimdal/lib/roken/daemon.c +++ b/crypto/heimdal/lib/roken/daemon.c @@ -10,11 +10,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -39,7 +35,7 @@ static char sccsid[] = "@(#)daemon.c 8.1 (Berkeley) 6/4/93"; #include <config.h> #endif -RCSID("$Id: daemon.c,v 1.3 1997/10/04 21:55:48 joda Exp $"); +RCSID("$Id: daemon.c 14773 2005-04-12 11:29:18Z lha $"); #ifndef HAVE_DAEMON @@ -55,7 +51,7 @@ RCSID("$Id: daemon.c,v 1.3 1997/10/04 21:55:48 joda Exp $"); #include "roken.h" -int +int ROKEN_LIB_FUNCTION daemon(int nochdir, int noclose) { int fd; diff --git a/crypto/heimdal/lib/roken/dumpdata.c b/crypto/heimdal/lib/roken/dumpdata.c new file mode 100644 index 0000000..4750cac --- /dev/null +++ b/crypto/heimdal/lib/roken/dumpdata.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2005 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +RCSID("$Id: dumpdata.c 21005 2007-06-08 01:54:35Z lha $"); +#endif + +#include <unistd.h> + +#include "roken.h" + +/* + * Write datablob to a filename, don't care about errors. + */ + +void ROKEN_LIB_FUNCTION +rk_dumpdata (const char *filename, const void *buf, size_t size) +{ + int fd; + + fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0640); + if (fd < 0) + return; + net_write(fd, buf, size); + close(fd); +} diff --git a/crypto/heimdal/lib/roken/ecalloc.3 b/crypto/heimdal/lib/roken/ecalloc.3 new file mode 100644 index 0000000..194ad27 --- /dev/null +++ b/crypto/heimdal/lib/roken/ecalloc.3 @@ -0,0 +1,84 @@ +.\" Copyright (c) 2001, 2003 Kungliga Tekniska Högskolan +.\" (Royal Institute of Technology, Stockholm, Sweden). +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" 3. Neither the name of the Institute nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" $Id: ecalloc.3 12527 2003-08-15 12:28:14Z joda $ +.\" +.Dd August 14, 2003 +.Dt ECALLOC 3 +.Os HEIMDAL +.Sh NAME +.Nm ecalloc , +.Nm emalloc , +.Nm eread , +.Nm erealloc , +.Nm esetenv , +.Nm estrdup , +.Nm ewrite +.Nd exit-on-failure wrapper functions +.Sh LIBRARY +The roken library (libroken, -lroken) +.Sh SYNOPSIS +.Fd #include <roken.h> +.Ft "void *" +.Fn ecalloc "size_t number" "size_t size" +.Ft "void *" +.Fn emalloc "size_t sz" +.Ft ssize_t +.Fn eread "int fd" "void *buf" "size_t nbytes" +.Ft "void *" +.Fn erealloc "void *ptr" "size_t sz" +.Ft void +.Fn esetenv "const char *var" "const char *val" "int rewrite" +.Ft "char *" +.Fn estrdup "const char *str" +.Ft ssize_t +.Fn ewrite "int fd" "const void *buf" "size_t nbytes" +.Sh DESCRIPTION +These functions do the same as the ones without the +.Dq e +prefix, but if there is an error they will print a message with +.Xr errx 3 , +and exit. For +.Nm eread +and +.Nm ewrite +this is also true for partial data. +.Pp +This is useful in applications when there is no need for a more +advanced failure mode. +.Sh SEE ALSO +.Xr read 2 , +.Xr write 2 , +.Xr calloc 3 , +.Xr errx 3 , +.Xr malloc 3 , +.Xr realloc 3 , +.Xr setenv 3 , +.Xr strdup 3 diff --git a/crypto/heimdal/lib/roken/ecalloc.c b/crypto/heimdal/lib/roken/ecalloc.c index 142704f..c5ef4a7 100644 --- a/crypto/heimdal/lib/roken/ecalloc.c +++ b/crypto/heimdal/lib/roken/ecalloc.c @@ -33,19 +33,19 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: ecalloc.c,v 1.1 2001/06/17 12:09:37 assar Exp $"); +RCSID("$Id: ecalloc.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdlib.h> #include <err.h> -#include <roken.h> +#include "roken.h" /* * Like calloc but never fails. */ -void * +void * ROKEN_LIB_FUNCTION ecalloc (size_t number, size_t size) { void *tmp = calloc (number, size); diff --git a/crypto/heimdal/lib/roken/emalloc.c b/crypto/heimdal/lib/roken/emalloc.c index e2734f3..a39fcc0 100644 --- a/crypto/heimdal/lib/roken/emalloc.c +++ b/crypto/heimdal/lib/roken/emalloc.c @@ -33,19 +33,19 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: emalloc.c,v 1.5 2001/06/17 12:07:48 assar Exp $"); +RCSID("$Id: emalloc.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdlib.h> #include <err.h> -#include <roken.h> +#include "roken.h" /* * Like malloc but never fails. */ -void * +void * ROKEN_LIB_FUNCTION emalloc (size_t sz) { void *tmp = malloc (sz); diff --git a/crypto/heimdal/lib/roken/environment.c b/crypto/heimdal/lib/roken/environment.c index 62c732c..3822e4c 100644 --- a/crypto/heimdal/lib/roken/environment.c +++ b/crypto/heimdal/lib/roken/environment.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 Kungliga Tekniska Högskolan + * Copyright (c) 2000, 2005 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -34,70 +34,123 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: environment.c,v 1.1 2000/06/21 02:05:03 assar Exp $"); +RCSID("$Id: environment.c 20866 2007-06-03 21:00:29Z lha $"); #endif #include <stdio.h> #include <string.h> +#include <ctype.h> #include "roken.h" +/* find assignment in env list; len is length of variable including + * equal + */ + +static int +find_var(char **env, char *assignment, size_t len) +{ + int i; + for(i = 0; env != NULL && env[i] != NULL; i++) + if(strncmp(env[i], assignment, len) == 0) + return i; + return -1; +} + /* - * return count of environment assignments from `file' and - * list of malloced strings in `env' + * return count of environment assignments from open file F in + * assigned and list of malloced strings in env, return 0 or errno + * number */ -int -read_environment(const char *file, char ***env) +static int +rk_read_env_file(FILE *F, char ***env, int *assigned) { - int i, k; - FILE *F; + int idx = 0; + int i; char **l; char buf[BUFSIZ], *p, *r; + char **tmp; + int ret = 0; - if ((F = fopen(file, "r")) == NULL) { - return 0; - } + *assigned = 0; - i = 0; - if (*env) { - l = *env; - while (*l != NULL) { - i++; - l++; - } - } + for(idx = 0; *env != NULL && (*env)[idx] != NULL; idx++); l = *env; + /* This is somewhat more relaxed on what it accepts then * Wietses sysv_environ from K4 was... */ while (fgets(buf, BUFSIZ, F) != NULL) { - if (buf[0] == '#') - continue; - - p = strchr(buf, '#'); - if (p != NULL) - *p = '\0'; + buf[strcspn(buf, "#\n")] = '\0'; - p = buf; - while (*p == ' ' || *p == '\t' || *p == '\n') p++; + for(p = buf; isspace((unsigned char)*p); p++); if (*p == '\0') continue; - k = strlen(p); - if (p[k-1] == '\n') - p[k-1] = '\0'; - - /* Here one should check that is is a 'valid' env string... */ + /* Here one should check that it's a 'valid' env string... */ r = strchr(p, '='); if (r == NULL) continue; - l = realloc(l, (i+1) * sizeof (char *)); - l[i++] = strdup(p); + if((i = find_var(l, p, r - p + 1)) >= 0) { + char *val = strdup(p); + if(val == NULL) { + ret = ENOMEM; + break; + } + free(l[i]); + l[i] = val; + (*assigned)++; + continue; + } + + tmp = realloc(l, (idx+2) * sizeof (char *)); + if(tmp == NULL) { + ret = ENOMEM; + break; + } + + l = tmp; + l[idx] = strdup(p); + if(l[idx] == NULL) { + ret = ENOMEM; + break; + } + l[++idx] = NULL; + (*assigned)++; } - fclose(F); - l = realloc(l, (i+1) * sizeof (char *)); - l[i] = NULL; + if(ferror(F)) + ret = errno; *env = l; - return i; + return ret; +} + +/* + * return count of environment assignments from file and + * list of malloced strings in `env' + */ + +int ROKEN_LIB_FUNCTION +read_environment(const char *file, char ***env) +{ + int assigned; + FILE *F; + + if ((F = fopen(file, "r")) == NULL) + return 0; + + rk_read_env_file(F, env, &assigned); + fclose(F); + return assigned; +} + +void ROKEN_LIB_FUNCTION +free_environment(char **env) +{ + int i; + if (env == NULL) + return; + for (i = 0; env[i]; i++) + free(env[i]); + free(env); } diff --git a/crypto/heimdal/lib/roken/eread.c b/crypto/heimdal/lib/roken/eread.c index 9a1b24b..ec4eed4 100644 --- a/crypto/heimdal/lib/roken/eread.c +++ b/crypto/heimdal/lib/roken/eread.c @@ -33,19 +33,19 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: eread.c,v 1.2 1999/12/02 16:58:45 joda Exp $"); +RCSID("$Id: eread.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <unistd.h> #include <err.h> -#include <roken.h> +#include "roken.h" /* * Like read but never fails (and never returns partial data). */ -ssize_t +ssize_t ROKEN_LIB_FUNCTION eread (int fd, void *buf, size_t nbytes) { ssize_t ret; diff --git a/crypto/heimdal/lib/roken/erealloc.c b/crypto/heimdal/lib/roken/erealloc.c index 8eddd2b..c382360 100644 --- a/crypto/heimdal/lib/roken/erealloc.c +++ b/crypto/heimdal/lib/roken/erealloc.c @@ -33,19 +33,19 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: erealloc.c,v 1.5 2001/06/17 12:08:05 assar Exp $"); +RCSID("$Id: erealloc.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdlib.h> #include <err.h> -#include <roken.h> +#include "roken.h" /* * Like realloc but never fails. */ -void * +void * ROKEN_LIB_FUNCTION erealloc (void *ptr, size_t sz) { void *tmp = realloc (ptr, sz); diff --git a/crypto/heimdal/lib/roken/err.c b/crypto/heimdal/lib/roken/err.c index 29b1f7b..dcb820b 100644 --- a/crypto/heimdal/lib/roken/err.c +++ b/crypto/heimdal/lib/roken/err.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: err.c,v 1.6 1999/12/02 16:58:45 joda Exp $"); +RCSID("$Id: err.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "err.h" -void +void ROKEN_LIB_FUNCTION err(int eval, const char *fmt, ...) { va_list ap; diff --git a/crypto/heimdal/lib/roken/err.hin b/crypto/heimdal/lib/roken/err.hin index 1fa7774..2f1232d 100644 --- a/crypto/heimdal/lib/roken/err.hin +++ b/crypto/heimdal/lib/roken/err.hin @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995 - 2000 Kungliga Tekniska Högskolan + * Copyright (c) 1995 - 2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -31,7 +31,7 @@ * SUCH DAMAGE. */ -/* $Id: err.hin,v 1.16 2000/12/11 04:40:59 assar Exp $ */ +/* $Id: err.hin 14773 2005-04-12 11:29:18Z lha $ */ #ifndef __ERR_H__ #define __ERR_H__ @@ -42,27 +42,47 @@ #include <string.h> #include <stdarg.h> -extern const char *__progname; - #if !defined(__GNUC__) && !defined(__attribute__) #define __attribute__(x) #endif -void verr(int eval, const char *fmt, va_list ap) +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + +void ROKEN_LIB_FUNCTION +verr(int eval, const char *fmt, va_list ap) __attribute__ ((noreturn, format (printf, 2, 0))); -void err(int eval, const char *fmt, ...) + +void ROKEN_LIB_FUNCTION +err(int eval, const char *fmt, ...) __attribute__ ((noreturn, format (printf, 2, 3))); -void verrx(int eval, const char *fmt, va_list ap) + +void ROKEN_LIB_FUNCTION +verrx(int eval, const char *fmt, va_list ap) __attribute__ ((noreturn, format (printf, 2, 0))); -void errx(int eval, const char *fmt, ...) + +void ROKEN_LIB_FUNCTION +errx(int eval, const char *fmt, ...) __attribute__ ((noreturn, format (printf, 2, 3))); -void vwarn(const char *fmt, va_list ap) +void ROKEN_LIB_FUNCTION +vwarn(const char *fmt, va_list ap) __attribute__ ((format (printf, 1, 0))); -void warn(const char *fmt, ...) + +void ROKEN_LIB_FUNCTION +warn(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); -void vwarnx(const char *fmt, va_list ap) + +void ROKEN_LIB_FUNCTION +vwarnx(const char *fmt, va_list ap) __attribute__ ((format (printf, 1, 0))); -void warnx(const char *fmt, ...) + +void ROKEN_LIB_FUNCTION +warnx(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); #endif /* __ERR_H__ */ diff --git a/crypto/heimdal/lib/roken/errx.c b/crypto/heimdal/lib/roken/errx.c index 2f8ec18..1090ac7 100644 --- a/crypto/heimdal/lib/roken/errx.c +++ b/crypto/heimdal/lib/roken/errx.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: errx.c,v 1.6 1999/12/02 16:58:45 joda Exp $"); +RCSID("$Id: errx.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "err.h" -void +void ROKEN_LIB_FUNCTION errx(int eval, const char *fmt, ...) { va_list ap; diff --git a/crypto/heimdal/lib/roken/esetenv.c b/crypto/heimdal/lib/roken/esetenv.c index cb35752..e92f04a 100644 --- a/crypto/heimdal/lib/roken/esetenv.c +++ b/crypto/heimdal/lib/roken/esetenv.c @@ -33,16 +33,16 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: esetenv.c,v 1.3 2001/01/27 05:28:38 assar Exp $"); +RCSID("$Id: esetenv.c 15502 2005-06-21 18:56:15Z lha $"); #endif #include "roken.h" #include <err.h> -void +void ROKEN_LIB_FUNCTION esetenv(const char *var, const char *val, int rewrite) { - if (setenv ((char *)var, (char *)val, rewrite)) + if (setenv (rk_UNCONST(var), rk_UNCONST(val), rewrite)) errx (1, "failed setting environment variable %s", var); } diff --git a/crypto/heimdal/lib/roken/estrdup.c b/crypto/heimdal/lib/roken/estrdup.c index 75d2721..262412b 100644 --- a/crypto/heimdal/lib/roken/estrdup.c +++ b/crypto/heimdal/lib/roken/estrdup.c @@ -33,19 +33,19 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: estrdup.c,v 1.3 2001/06/17 12:07:56 assar Exp $"); +RCSID("$Id: estrdup.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdlib.h> #include <err.h> -#include <roken.h> +#include "roken.h" /* * Like strdup but never fails. */ -char * +char * ROKEN_LIB_FUNCTION estrdup (const char *str) { char *tmp = strdup (str); diff --git a/crypto/heimdal/lib/roken/ewrite.c b/crypto/heimdal/lib/roken/ewrite.c index b2c43de..a2323d6 100644 --- a/crypto/heimdal/lib/roken/ewrite.c +++ b/crypto/heimdal/lib/roken/ewrite.c @@ -33,19 +33,19 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: ewrite.c,v 1.2 1999/12/02 16:58:45 joda Exp $"); +RCSID("$Id: ewrite.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <unistd.h> #include <err.h> -#include <roken.h> +#include "roken.h" /* * Like write but never fails (and never returns partial data). */ -ssize_t +ssize_t ROKEN_LIB_FUNCTION ewrite (int fd, const void *buf, size_t nbytes) { ssize_t ret; diff --git a/crypto/heimdal/lib/roken/fchown.c b/crypto/heimdal/lib/roken/fchown.c index 61e8546..87a2051 100644 --- a/crypto/heimdal/lib/roken/fchown.c +++ b/crypto/heimdal/lib/roken/fchown.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: fchown.c,v 1.3 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: fchown.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" -int +int ROKEN_LIB_FUNCTION fchown(int fd, uid_t owner, gid_t group) { return 0; diff --git a/crypto/heimdal/lib/roken/flock.c b/crypto/heimdal/lib/roken/flock.c index 13da4f4..911d5ff 100644 --- a/crypto/heimdal/lib/roken/flock.c +++ b/crypto/heimdal/lib/roken/flock.c @@ -36,14 +36,14 @@ #endif #ifndef HAVE_FLOCK -RCSID("$Id: flock.c,v 1.4 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: flock.c 14773 2005-04-12 11:29:18Z lha $"); #include "roken.h" #define OP_MASK (LOCK_SH | LOCK_EX | LOCK_UN) -int +int ROKEN_LIB_FUNCTION flock(int fd, int operation) { #if defined(HAVE_FCNTL) && defined(F_SETLK) diff --git a/crypto/heimdal/lib/roken/fnmatch.c b/crypto/heimdal/lib/roken/fnmatch.c index dc01d6e..126949a 100644 --- a/crypto/heimdal/lib/roken/fnmatch.c +++ b/crypto/heimdal/lib/roken/fnmatch.c @@ -15,11 +15,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -56,8 +52,8 @@ static char rcsid[] = "$NetBSD: fnmatch.c,v 1.11 1995/02/27 03:43:06 cgd Exp $"; static const char *rangematch (const char *, int, int); -int -fnmatch(const char *pattern, const char *string, int flags) +int ROKEN_LIB_FUNCTION +rk_fnmatch(const char *pattern, const char *string, int flags) { const char *stringstart; char c, test; @@ -103,7 +99,7 @@ fnmatch(const char *pattern, const char *string, int flags) /* General case, use recursion. */ while ((test = *string) != EOS) { - if (!fnmatch(pattern, string, flags & ~FNM_PERIOD)) + if (!rk_fnmatch(pattern, string, flags & ~FNM_PERIOD)) return (0); if (test == '/' && flags & FNM_PATHNAME) break; diff --git a/crypto/heimdal/lib/roken/fnmatch.hin b/crypto/heimdal/lib/roken/fnmatch.hin index 95c91d6..d5d54a5 100644 --- a/crypto/heimdal/lib/roken/fnmatch.hin +++ b/crypto/heimdal/lib/roken/fnmatch.hin @@ -12,11 +12,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,12 +34,31 @@ #ifndef _FNMATCH_H_ #define _FNMATCH_H_ +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + #define FNM_NOMATCH 1 /* Match failed. */ #define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */ #define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */ #define FNM_PERIOD 0x04 /* Period must be matched by period. */ -int fnmatch (const char *, const char *, int); +int ROKEN_LIB_FUNCTION +rk_fnmatch (const char *, const char *, int); + +#define fnmatch(a,b,c) rk_fnmatch(a,b,c) + +#ifdef __cplusplus +} +#endif #endif /* !_FNMATCH_H_ */ diff --git a/crypto/heimdal/lib/roken/freeaddrinfo.c b/crypto/heimdal/lib/roken/freeaddrinfo.c index 56124e5..a61536d 100644 --- a/crypto/heimdal/lib/roken/freeaddrinfo.c +++ b/crypto/heimdal/lib/roken/freeaddrinfo.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: freeaddrinfo.c,v 1.4 2001/05/11 09:10:32 joda Exp $"); +RCSID("$Id: freeaddrinfo.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -42,7 +42,7 @@ RCSID("$Id: freeaddrinfo.c,v 1.4 2001/05/11 09:10:32 joda Exp $"); * free the list of `struct addrinfo' starting at `ai' */ -void +void ROKEN_LIB_FUNCTION freeaddrinfo(struct addrinfo *ai) { struct addrinfo *tofree; diff --git a/crypto/heimdal/lib/roken/freehostent.c b/crypto/heimdal/lib/roken/freehostent.c index 0cd92cd..54fc495 100644 --- a/crypto/heimdal/lib/roken/freehostent.c +++ b/crypto/heimdal/lib/roken/freehostent.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: freehostent.c,v 1.2 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: freehostent.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -42,7 +42,7 @@ RCSID("$Id: freehostent.c,v 1.2 1999/12/02 16:58:46 joda Exp $"); * free a malloced hostent */ -void +void ROKEN_LIB_FUNCTION freehostent (struct hostent *h) { char **p; diff --git a/crypto/heimdal/lib/roken/gai_strerror.c b/crypto/heimdal/lib/roken/gai_strerror.c index 8e1530f..c862743 100644 --- a/crypto/heimdal/lib/roken/gai_strerror.c +++ b/crypto/heimdal/lib/roken/gai_strerror.c @@ -33,14 +33,14 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: gai_strerror.c,v 1.2.20.1 2004/01/15 18:14:17 lha Exp $"); +RCSID("$Id: gai_strerror.c 15837 2005-08-05 09:31:35Z lha $"); #endif #include "roken.h" static struct gai_error { int code; - char *str; + const char *str; } errors[] = { {EAI_NOERROR, "no error"}, #ifdef EAI_ADDRFAMILY @@ -65,7 +65,7 @@ static struct gai_error { * */ -char * +const char * ROKEN_LIB_FUNCTION gai_strerror(int ecode) { struct gai_error *g; diff --git a/crypto/heimdal/lib/roken/get_default_username.c b/crypto/heimdal/lib/roken/get_default_username.c index 10b0863..754b60d 100644 --- a/crypto/heimdal/lib/roken/get_default_username.c +++ b/crypto/heimdal/lib/roken/get_default_username.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: get_default_username.c,v 1.3 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: get_default_username.c 14773 2005-04-12 11:29:18Z lha $"); #endif /* HAVE_CONFIG_H */ #include "roken.h" @@ -43,7 +43,7 @@ RCSID("$Id: get_default_username.c,v 1.3 1999/12/02 16:58:46 joda Exp $"); * NULL if we can't guess at all. */ -const char * +const char * ROKEN_LIB_FUNCTION get_default_username (void) { const char *user; diff --git a/crypto/heimdal/lib/roken/get_window_size.c b/crypto/heimdal/lib/roken/get_window_size.c index 4eff8d2..7fa91d6 100644 --- a/crypto/heimdal/lib/roken/get_window_size.c +++ b/crypto/heimdal/lib/roken/get_window_size.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: get_window_size.c,v 1.9 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: get_window_size.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdlib.h> @@ -58,9 +58,9 @@ RCSID("$Id: get_window_size.c,v 1.9 1999/12/02 16:58:46 joda Exp $"); #include <termios.h> #endif -#include <roken.h> +#include "roken.h" -int +int ROKEN_LIB_FUNCTION get_window_size(int fd, struct winsize *wp) { int ret = -1; diff --git a/crypto/heimdal/lib/roken/getaddrinfo-test.c b/crypto/heimdal/lib/roken/getaddrinfo-test.c index 4274081..027e32a 100644 --- a/crypto/heimdal/lib/roken/getaddrinfo-test.c +++ b/crypto/heimdal/lib/roken/getaddrinfo-test.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getaddrinfo-test.c,v 1.4 2001/02/20 01:44:54 assar Exp $"); +RCSID("$Id: getaddrinfo-test.c 15930 2005-08-12 13:42:17Z lha $"); #endif #include "roken.h" @@ -94,7 +94,7 @@ doit (const char *nodename, const char *servname) printf ("\tbad address?\n"); continue; } - printf ("\t(family = %d, socktype = %d, protocol = %d, " + printf ("\tfamily = %d, socktype = %d, protocol = %d, " "address = \"%s\", port = %d", r->ai_family, r->ai_socktype, r->ai_protocol, addrstr, @@ -109,13 +109,13 @@ doit (const char *nodename, const char *servname) int main(int argc, char **argv) { - int optind = 0; + int optidx = 0; int i; setprogname (argv[0]); if (getarg (args, sizeof(args) / sizeof(args[0]), argc, argv, - &optind)) + &optidx)) usage (1); if (help_flag) @@ -126,8 +126,8 @@ main(int argc, char **argv) return 0; } - argc -= optind; - argv += optind; + argc -= optidx; + argv += optidx; if (argc % 2 != 0) usage (1); diff --git a/crypto/heimdal/lib/roken/getaddrinfo.c b/crypto/heimdal/lib/roken/getaddrinfo.c index 83957bb..f9ffcd8 100644 --- a/crypto/heimdal/lib/roken/getaddrinfo.c +++ b/crypto/heimdal/lib/roken/getaddrinfo.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getaddrinfo.c,v 1.12 2001/08/17 13:06:57 joda Exp $"); +RCSID("$Id: getaddrinfo.c 15417 2005-06-16 17:49:29Z lha $"); #endif #include "roken.h" @@ -135,19 +135,19 @@ add_one (int port, int protocol, int socktype, static int const_v4 (struct addrinfo *a, void *data, int port) { - struct sockaddr_in *sin; + struct sockaddr_in *sin4; struct in_addr *addr = (struct in_addr *)data; a->ai_family = PF_INET; - a->ai_addrlen = sizeof(*sin); - a->ai_addr = malloc (sizeof(*sin)); + a->ai_addrlen = sizeof(*sin4); + a->ai_addr = malloc (sizeof(*sin4)); if (a->ai_addr == NULL) return EAI_MEMORY; - sin = (struct sockaddr_in *)a->ai_addr; - memset (sin, 0, sizeof(*sin)); - sin->sin_family = AF_INET; - sin->sin_port = port; - sin->sin_addr = *addr; + sin4 = (struct sockaddr_in *)a->ai_addr; + memset (sin4, 0, sizeof(*sin4)); + sin4->sin_family = AF_INET; + sin4->sin_port = port; + sin4->sin_addr = *addr; return 0; } @@ -368,7 +368,7 @@ get_nodes (const char *nodename, * }; */ -int +int ROKEN_LIB_FUNCTION getaddrinfo(const char *nodename, const char *servname, const struct addrinfo *hints, diff --git a/crypto/heimdal/lib/roken/getaddrinfo_hostspec.c b/crypto/heimdal/lib/roken/getaddrinfo_hostspec.c index 7f6b0d1..29eae31 100644 --- a/crypto/heimdal/lib/roken/getaddrinfo_hostspec.c +++ b/crypto/heimdal/lib/roken/getaddrinfo_hostspec.c @@ -33,14 +33,14 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getaddrinfo_hostspec.c,v 1.3 2000/07/15 12:50:32 joda Exp $"); +RCSID("$Id: getaddrinfo_hostspec.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" /* getaddrinfo via string specifying host and port */ -int +int ROKEN_LIB_FUNCTION roken_getaddrinfo_hostspec2(const char *hostspec, int socktype, int port, @@ -95,7 +95,7 @@ roken_getaddrinfo_hostspec2(const char *hostspec, return getaddrinfo (host, portstr, &hints, ai); } -int +int ROKEN_LIB_FUNCTION roken_getaddrinfo_hostspec(const char *hostspec, int port, struct addrinfo **ai) diff --git a/crypto/heimdal/lib/roken/getarg.3 b/crypto/heimdal/lib/roken/getarg.3 index e2f0412..fd5ed3d 100644 --- a/crypto/heimdal/lib/roken/getarg.3 +++ b/crypto/heimdal/lib/roken/getarg.3 @@ -29,7 +29,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $Id: getarg.3,v 1.7 2003/04/16 13:58:24 lha Exp $ +.\" $Id: getarg.3 13380 2004-02-17 12:04:59Z lha $ .Dd September 24, 1999 .Dt GETARG 3 .Os ROKEN @@ -220,7 +220,7 @@ to specify a coordinate); if you also have to set to a sane value. .Pp The collect function should return one of -.Dv ARG_ERR_NO_MATCH , ARG_ERR_BAD_ARG , ARG_ERR_NO_ARG +.Dv ARG_ERR_NO_MATCH , ARG_ERR_BAD_ARG , ARG_ERR_NO_ARG, ENOMEM on error, zero otherwise. .Pp For your convenience there is a function, diff --git a/crypto/heimdal/lib/roken/getarg.c b/crypto/heimdal/lib/roken/getarg.c index eff81f2..c732d2f 100644 --- a/crypto/heimdal/lib/roken/getarg.c +++ b/crypto/heimdal/lib/roken/getarg.c @@ -33,13 +33,13 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getarg.c,v 1.46 2002/08/20 16:23:07 joda Exp $"); +RCSID("$Id: getarg.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <roken.h> +#include "roken.h" #include "getarg.h" #define ISFLAG(X) ((X).type == arg_flag || (X).type == arg_negative_flag) @@ -198,7 +198,7 @@ check_column(FILE *f, int col, int len, int columns) return col; } -void +void ROKEN_LIB_FUNCTION arg_printusage (struct getargs *args, size_t num_args, const char *progname, @@ -307,12 +307,22 @@ arg_printusage (struct getargs *args, } } -static void +static int add_string(getarg_strings *s, char *value) { - s->strings = realloc(s->strings, (s->num_strings + 1) * sizeof(*s->strings)); + char **strings; + + strings = realloc(s->strings, (s->num_strings + 1) * sizeof(*s->strings)); + if (strings == NULL) { + free(s->strings); + s->strings = NULL; + s->num_strings = 0; + return ENOMEM; + } + s->strings = strings; s->strings[s->num_strings] = value; s->num_strings++; + return 0; } static int @@ -390,8 +400,7 @@ arg_match_long(struct getargs *args, size_t num_args, } case arg_strings: { - add_string((getarg_strings*)current->value, goptarg + 1); - return 0; + return add_string((getarg_strings*)current->value, goptarg + 1); } case arg_flag: case arg_negative_flag: @@ -497,8 +506,7 @@ arg_match_short (struct getargs *args, size_t num_args, *(char**)args[k].value = goptarg; return 0; } else if(args[k].type == arg_strings) { - add_string((getarg_strings*)args[k].value, goptarg); - return 0; + return add_string((getarg_strings*)args[k].value, goptarg); } else if(args[k].type == arg_double) { double tmp; if(sscanf(goptarg, "%lf", &tmp) != 1) @@ -515,7 +523,7 @@ arg_match_short (struct getargs *args, size_t num_args, return 0; } -int +int ROKEN_LIB_FUNCTION getarg(struct getargs *args, size_t num_args, int argc, char **argv, int *goptind) { @@ -551,7 +559,7 @@ getarg(struct getargs *args, size_t num_args, return ret; } -void +void ROKEN_LIB_FUNCTION free_getarg_strings (getarg_strings *s) { free (s->strings); diff --git a/crypto/heimdal/lib/roken/getarg.h b/crypto/heimdal/lib/roken/getarg.h index c68b66a1..62d1b66 100644 --- a/crypto/heimdal/lib/roken/getarg.h +++ b/crypto/heimdal/lib/roken/getarg.h @@ -31,13 +31,21 @@ * SUCH DAMAGE. */ -/* $Id: getarg.h,v 1.12 2002/04/18 08:50:08 joda Exp $ */ +/* $Id: getarg.h 14776 2005-04-13 05:52:27Z lha $ */ #ifndef __GETARG_H__ #define __GETARG_H__ #include <stddef.h> +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + struct getargs{ const char *long_name; char short_name; @@ -78,14 +86,17 @@ typedef struct getarg_collect_info { void *data; } getarg_collect_info; -int getarg(struct getargs *args, size_t num_args, - int argc, char **argv, int *goptind); +int ROKEN_LIB_FUNCTION +getarg(struct getargs *args, size_t num_args, + int argc, char **argv, int *goptind); -void arg_printusage (struct getargs *args, - size_t num_args, - const char *progname, - const char *extra_string); +void ROKEN_LIB_FUNCTION +arg_printusage (struct getargs *args, + size_t num_args, + const char *progname, + const char *extra_string); -void free_getarg_strings (getarg_strings *); +void ROKEN_LIB_FUNCTION +free_getarg_strings (getarg_strings *); #endif /* __GETARG_H__ */ diff --git a/crypto/heimdal/lib/roken/getcap.c b/crypto/heimdal/lib/roken/getcap.c index 8a29e1f..a4e3a7d 100644 --- a/crypto/heimdal/lib/roken/getcap.c +++ b/crypto/heimdal/lib/roken/getcap.c @@ -15,11 +15,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -40,7 +36,7 @@ #include <config.h> #endif #include "roken.h" -RCSID("$Id: getcap.c,v 1.8 2003/04/16 16:23:36 lha Exp $"); +RCSID("$Id: getcap.c 22071 2007-11-14 20:04:50Z lha $"); #include <sys/types.h> #include <ctype.h> @@ -73,9 +69,14 @@ static size_t topreclen; /* toprec length */ static char *toprec; /* Additional record specified by cgetset() */ static int gottoprec; /* Flag indicating retrieval of toprecord */ +#if 0 /* + * Don't use db support unless it's build into libc but we don't + * check for that now, so just disable the code. + */ #if defined(HAVE_DBOPEN) && defined(HAVE_DB_H) #define USE_DB #endif +#endif #ifdef USE_DB static int cdbget (DB *, char **, const char *); @@ -84,24 +85,24 @@ static int getent (char **, size_t *, char **, int, const char *, int, char *); static int nfcmp (char *, char *); -int cgetset(const char *ent); -char *cgetcap(char *buf, const char *cap, int type); -int cgetent(char **buf, char **db_array, const char *name); -int cgetmatch(const char *buf, const char *name); -int cgetclose(void); +int ROKEN_LIB_FUNCTION cgetset(const char *ent); +char *ROKEN_LIB_FUNCTION cgetcap(char *buf, const char *cap, int type); +int ROKEN_LIB_FUNCTION cgetent(char **buf, char **db_array, const char *name); +int ROKEN_LIB_FUNCTION cgetmatch(const char *buf, const char *name); +int ROKEN_LIB_FUNCTION cgetclose(void); #if 0 int cgetfirst(char **buf, char **db_array); int cgetnext(char **bp, char **db_array); #endif -int cgetstr(char *buf, const char *cap, char **str); -int cgetustr(char *buf, const char *cap, char **str); -int cgetnum(char *buf, const char *cap, long *num); +int ROKEN_LIB_FUNCTION cgetstr(char *buf, const char *cap, char **str); +int ROKEN_LIB_FUNCTION cgetustr(char *buf, const char *cap, char **str); +int ROKEN_LIB_FUNCTION cgetnum(char *buf, const char *cap, long *num); /* * Cgetset() allows the addition of a user specified buffer to be added * to the database array, in effect "pushing" the buffer on top of the * virtual database. 0 is returned on success, -1 on failure. */ -int +int ROKEN_LIB_FUNCTION cgetset(const char *ent) { const char *source, *check; @@ -154,7 +155,7 @@ cgetset(const char *ent) * If (cap, '@') or (cap, terminator, '@') is found before (cap, terminator) * return NULL. */ -char * +char * ROKEN_LIB_FUNCTION cgetcap(char *buf, const char *cap, int type) { char *bp; @@ -205,7 +206,7 @@ cgetcap(char *buf, const char *cap, int type) * encountered (couldn't open/read a file, etc.), and -3 if a potential * reference loop is detected. */ -int +int ROKEN_LIB_FUNCTION cgetent(char **buf, char **db_array, const char *name) { size_t dummy; @@ -305,6 +306,8 @@ getent(char **cap, size_t *len, char **db_array, int fd, /* save the data; close frees it */ clen = strlen(record); cbuf = malloc(clen + 1); + if (cbuf == NULL) + return (-2); memmove(cbuf, record, clen + 1); if (capdbp->close(capdbp) < 0) { free(cbuf); @@ -699,7 +702,7 @@ static FILE *pfp; static int slash; static char **dbp; -int +int ROKEN_LIB_FUNCTION cgetclose(void) { if (pfp != NULL) { @@ -846,7 +849,7 @@ cgetnext(char **bp, char **db_array) * couldn't be found, -2 if a system error was encountered (storage * allocation failure). */ -int +int ROKEN_LIB_FUNCTION cgetstr(char *buf, const char *cap, char **str) { u_int m_room; @@ -970,7 +973,7 @@ cgetstr(char *buf, const char *cap, char **str) * -1 if the requested string capability couldn't be found, -2 if a system * error was encountered (storage allocation failure). */ -int +int ROKEN_LIB_FUNCTION cgetustr(char *buf, const char *cap, char **str) { u_int m_room; @@ -1039,7 +1042,7 @@ cgetustr(char *buf, const char *cap, char **str) * the long pointed to by num. 0 is returned on success, -1 if the requested * numeric capability couldn't be found. */ -int +int ROKEN_LIB_FUNCTION cgetnum(char *buf, const char *cap, long *num) { long n; diff --git a/crypto/heimdal/lib/roken/getcwd.c b/crypto/heimdal/lib/roken/getcwd.c index c1f2610..a32149c 100644 --- a/crypto/heimdal/lib/roken/getcwd.c +++ b/crypto/heimdal/lib/roken/getcwd.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getcwd.c,v 1.12 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: getcwd.c 14773 2005-04-12 11:29:18Z lha $"); #endif #ifdef HAVE_UNISTD_H @@ -45,7 +45,7 @@ RCSID("$Id: getcwd.c,v 1.12 1999/12/02 16:58:46 joda Exp $"); #include "roken.h" -char* +char* ROKEN_LIB_FUNCTION getcwd(char *path, size_t size) { char xxx[MaxPathLen]; diff --git a/crypto/heimdal/lib/roken/getdtablesize.c b/crypto/heimdal/lib/roken/getdtablesize.c index 183e8ff..a6ef38b 100644 --- a/crypto/heimdal/lib/roken/getdtablesize.c +++ b/crypto/heimdal/lib/roken/getdtablesize.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getdtablesize.c,v 1.11 2001/06/20 00:00:38 joda Exp $"); +RCSID("$Id: getdtablesize.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -64,7 +64,8 @@ RCSID("$Id: getdtablesize.c,v 1.11 2001/06/20 00:00:38 joda Exp $"); #include <sys/sysctl.h> #endif -int getdtablesize(void) +int ROKEN_LIB_FUNCTION +getdtablesize(void) { int files = -1; #if defined(HAVE_SYSCONF) && defined(_SC_OPEN_MAX) diff --git a/crypto/heimdal/lib/roken/getegid.c b/crypto/heimdal/lib/roken/getegid.c index b6eab85..57ea198 100644 --- a/crypto/heimdal/lib/roken/getegid.c +++ b/crypto/heimdal/lib/roken/getegid.c @@ -38,9 +38,10 @@ #ifndef HAVE_GETEGID -RCSID("$Id: getegid.c,v 1.2 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: getegid.c 14773 2005-04-12 11:29:18Z lha $"); -int getegid(void) +int ROKEN_LIB_FUNCTION +getegid(void) { return getgid(); } diff --git a/crypto/heimdal/lib/roken/geteuid.c b/crypto/heimdal/lib/roken/geteuid.c index 4bdf531..f2f771e 100644 --- a/crypto/heimdal/lib/roken/geteuid.c +++ b/crypto/heimdal/lib/roken/geteuid.c @@ -38,9 +38,10 @@ #ifndef HAVE_GETEUID -RCSID("$Id: geteuid.c,v 1.2 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: geteuid.c 14773 2005-04-12 11:29:18Z lha $"); -int geteuid(void) +int ROKEN_LIB_FUNCTION +geteuid(void) { return getuid(); } diff --git a/crypto/heimdal/lib/roken/getgid.c b/crypto/heimdal/lib/roken/getgid.c index f2ca01a..fbe4f6d 100644 --- a/crypto/heimdal/lib/roken/getgid.c +++ b/crypto/heimdal/lib/roken/getgid.c @@ -38,9 +38,10 @@ #ifndef HAVE_GETGID -RCSID("$Id: getgid.c,v 1.2 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: getgid.c 14773 2005-04-12 11:29:18Z lha $"); -int getgid(void) +int ROKEN_LIB_FUNCTION +getgid(void) { return 17; } diff --git a/crypto/heimdal/lib/roken/gethostname.c b/crypto/heimdal/lib/roken/gethostname.c index 753ba9f..f291ce2 100644 --- a/crypto/heimdal/lib/roken/gethostname.c +++ b/crypto/heimdal/lib/roken/gethostname.c @@ -49,7 +49,7 @@ * interface is identical to gethostname(2).) */ -int +int ROKEN_LIB_FUNCTION gethostname(char *name, int namelen) { #if defined(HAVE_UNAME) diff --git a/crypto/heimdal/lib/roken/getifaddrs.c b/crypto/heimdal/lib/roken/getifaddrs.c index e8c53f8..485c0d6 100644 --- a/crypto/heimdal/lib/roken/getifaddrs.c +++ b/crypto/heimdal/lib/roken/getifaddrs.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 - 2002 Kungliga Tekniska Högskolan + * Copyright (c) 2000 - 2002, 2005 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getifaddrs.c,v 1.9 2002/09/05 03:36:23 assar Exp $"); +RCSID("$Id: getifaddrs.c 21745 2007-07-31 16:11:25Z lha $"); #endif #include "roken.h" @@ -56,6 +56,21 @@ struct mbuf; #include <ifaddrs.h> +#ifdef __hpux +#define lifconf if_laddrconf +#define lifc_len iflc_len +#define lifc_buf iflc_buf +#define lifc_req iflc_req + +#define lifreq if_laddrreq +#define lifr_addr iflr_addr +#define lifr_name iflr_name +#define lifr_dstaddr iflr_dstaddr +#define lifr_broadaddr iflr_broadaddr +#define lifr_flags iflr_flags +#define lifr_index iflr_index +#endif + #ifdef AF_NETLINK /* @@ -108,6 +123,7 @@ struct mbuf; #include <linux/rtnetlink.h> #include <sys/types.h> #include <sys/socket.h> +#include <sys/poll.h> #include <netpacket/packet.h> #include <net/ethernet.h> /* the L2 protocols */ #include <sys/uio.h> @@ -172,6 +188,7 @@ ifa_sa_len(sa_family_t family, int len) size = (size_t)(((struct sockaddr *)NULL)->sa_data) + len; if (size < sizeof(struct sockaddr)) size = sizeof(struct sockaddr); + break; } return size; } @@ -377,13 +394,30 @@ nl_getlist(int sd, int seq, struct nlmsghdr *nlh = NULL; int status; int done = 0; + int tries = 3; + try_again: status = nl_sendreq(sd, request, NLM_F_ROOT|NLM_F_MATCH, &seq); if (status < 0) return status; if (seq == 0) seq = (int)time(NULL); while(!done){ + struct pollfd pfd; + + pfd.fd = sd; + pfd.events = POLLIN | POLLPRI; + pfd.revents = 0; + status = poll(&pfd, 1, 1000); + if (status < 0) + return status; + else if (status == 0) { + seq++; + if (tries-- > 0) + goto try_again; + return -1; + } + status = nl_getmsg(sd, request, seq, &nlh, &done); if (status < 0) return status; @@ -416,16 +450,17 @@ nl_getlist(int sd, int seq, static void free_nlmsglist(struct nlmsg_list *nlm0) { - struct nlmsg_list *nlm; + struct nlmsg_list *nlm, *nlm_next; int saved_errno; if (!nlm0) return; saved_errno = errno; - for (nlm=nlm0; nlm; nlm=nlm->nlm_next){ + for (nlm=nlm0; nlm; nlm=nlm_next){ if (nlm->nlh) free(nlm->nlh); + nlm_next=nlm->nlm_next; + free(nlm); } - free(nlm0); __set_errno(saved_errno); } @@ -466,7 +501,8 @@ nl_open(void) } /* ====================================================================== */ -int getifaddrs(struct ifaddrs **ifap) +int ROKEN_LIB_FUNCTION +rk_getifaddrs(struct ifaddrs **ifap) { int sd; struct nlmsg_list *nlmsg_list, *nlmsg_end, *nlm; @@ -669,6 +705,7 @@ int getifaddrs(struct ifaddrs **ifap) case IFLA_QDISC: break; default: + break; } break; case RTM_NEWADDR: @@ -709,6 +746,7 @@ int getifaddrs(struct ifaddrs **ifap) case IFA_CACHEINFO: break; default: + break; } } } @@ -818,14 +856,6 @@ int getifaddrs(struct ifaddrs **ifap) return 0; } -/* ---------------------------------------------------------------------- */ -void -freeifaddrs(struct ifaddrs *ifa) -{ - free(ifa); -} - - #else /* !AF_NETLINK */ /* @@ -919,8 +949,16 @@ getifaddrs2(struct ifaddrs **ifap, (*end)->ifa_next = NULL; (*end)->ifa_name = strdup(ifr->ifr_name); + if ((*end)->ifa_name == NULL) { + ret = ENOMEM; + goto error_out; + } (*end)->ifa_flags = ifreq.ifr_flags; (*end)->ifa_addr = malloc(salen); + if ((*end)->ifa_addr == NULL) { + ret = ENOMEM; + goto error_out; + } memcpy((*end)->ifa_addr, sa, salen); (*end)->ifa_netmask = NULL; @@ -928,10 +966,18 @@ getifaddrs2(struct ifaddrs **ifap, /* fix these when we actually need them */ if(ifreq.ifr_flags & IFF_BROADCAST) { (*end)->ifa_broadaddr = malloc(sizeof(ifr->ifr_broadaddr)); + if ((*end)->ifa_broadaddr == NULL) { + ret = ENOMEM; + goto error_out; + } memcpy((*end)->ifa_broadaddr, &ifr->ifr_broadaddr, sizeof(ifr->ifr_broadaddr)); } else if(ifreq.ifr_flags & IFF_POINTOPOINT) { (*end)->ifa_dstaddr = malloc(sizeof(ifr->ifr_dstaddr)); + if ((*end)->ifa_dstaddr == NULL) { + ret = ENOMEM; + goto error_out; + } memcpy((*end)->ifa_dstaddr, &ifr->ifr_dstaddr, sizeof(ifr->ifr_dstaddr)); } else @@ -950,7 +996,7 @@ getifaddrs2(struct ifaddrs **ifap, free(buf); return 0; error_out: - freeifaddrs(start); + rk_freeifaddrs(start); close(fd); free(buf); errno = ret; @@ -988,8 +1034,10 @@ getlifaddrs2(struct ifaddrs **ifap, ret = ENOMEM; goto error_out; } +#ifndef __hpux ifconf.lifc_family = AF_UNSPEC; ifconf.lifc_flags = 0; +#endif ifconf.lifc_len = buf_size; ifconf.lifc_buf = buf; @@ -1040,11 +1088,23 @@ getlifaddrs2(struct ifaddrs **ifap, } *end = malloc(sizeof(**end)); + if (*end == NULL) { + ret = ENOMEM; + goto error_out; + } (*end)->ifa_next = NULL; (*end)->ifa_name = strdup(ifr->lifr_name); + if ((*end)->ifa_name == NULL) { + ret = ENOMEM; + goto error_out; + } (*end)->ifa_flags = ifreq.lifr_flags; (*end)->ifa_addr = malloc(salen); + if ((*end)->ifa_addr == NULL) { + ret = ENOMEM; + goto error_out; + } memcpy((*end)->ifa_addr, sa, salen); (*end)->ifa_netmask = NULL; @@ -1052,10 +1112,18 @@ getlifaddrs2(struct ifaddrs **ifap, /* fix these when we actually need them */ if(ifreq.ifr_flags & IFF_BROADCAST) { (*end)->ifa_broadaddr = malloc(sizeof(ifr->ifr_broadaddr)); + if ((*end)->ifa_broadaddr == NULL) { + ret = ENOMEM; + goto error_out; + } memcpy((*end)->ifa_broadaddr, &ifr->ifr_broadaddr, sizeof(ifr->ifr_broadaddr)); } else if(ifreq.ifr_flags & IFF_POINTOPOINT) { (*end)->ifa_dstaddr = malloc(sizeof(ifr->ifr_dstaddr)); + if ((*end)->ifa_dstaddr == NULL) { + ret = ENOMEM; + goto error_out; + } memcpy((*end)->ifa_dstaddr, &ifr->ifr_dstaddr, sizeof(ifr->ifr_dstaddr)); } else @@ -1074,7 +1142,7 @@ getlifaddrs2(struct ifaddrs **ifap, free(buf); return 0; error_out: - freeifaddrs(start); + rk_freeifaddrs(start); close(fd); free(buf); errno = ret; @@ -1082,8 +1150,8 @@ getlifaddrs2(struct ifaddrs **ifap, } #endif /* defined(HAVE_IPV6) && defined(SIOCGLIFCONF) && defined(SIOCGLIFFLAGS) */ -int -getifaddrs(struct ifaddrs **ifap) +int ROKEN_LIB_FUNCTION +rk_getifaddrs(struct ifaddrs **ifap) { int ret = -1; errno = ENXIO; @@ -1110,8 +1178,10 @@ getifaddrs(struct ifaddrs **ifap) return ret; } -void -freeifaddrs(struct ifaddrs *ifp) +#endif /* !AF_NETLINK */ + +void ROKEN_LIB_FUNCTION +rk_freeifaddrs(struct ifaddrs *ifp) { struct ifaddrs *p, *q; @@ -1131,8 +1201,6 @@ freeifaddrs(struct ifaddrs *ifp) } } -#endif /* !AF_NETLINK */ - #ifdef TEST void diff --git a/crypto/heimdal/lib/roken/getipnodebyaddr.c b/crypto/heimdal/lib/roken/getipnodebyaddr.c index f22aad7..56ae860 100644 --- a/crypto/heimdal/lib/roken/getipnodebyaddr.c +++ b/crypto/heimdal/lib/roken/getipnodebyaddr.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getipnodebyaddr.c,v 1.2 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: getipnodebyaddr.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -43,7 +43,7 @@ RCSID("$Id: getipnodebyaddr.c,v 1.2 1999/12/02 16:58:46 joda Exp $"); * to a malloced struct hostent or NULL. */ -struct hostent * +struct hostent * ROKEN_LIB_FUNCTION getipnodebyaddr (const void *src, size_t len, int af, int *error_num) { struct hostent *tmp; diff --git a/crypto/heimdal/lib/roken/getipnodebyname.c b/crypto/heimdal/lib/roken/getipnodebyname.c index 576feef..739b329 100644 --- a/crypto/heimdal/lib/roken/getipnodebyname.c +++ b/crypto/heimdal/lib/roken/getipnodebyname.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getipnodebyname.c,v 1.3 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: getipnodebyname.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -47,7 +47,7 @@ static int h_errno = NO_RECOVERY; * to a malloced struct hostent or NULL. */ -struct hostent * +struct hostent * ROKEN_LIB_FUNCTION getipnodebyname (const char *name, int af, int flags, int *error_num) { struct hostent *tmp; diff --git a/crypto/heimdal/lib/roken/getnameinfo.c b/crypto/heimdal/lib/roken/getnameinfo.c index 44fcb04..4f820f0 100644 --- a/crypto/heimdal/lib/roken/getnameinfo.c +++ b/crypto/heimdal/lib/roken/getnameinfo.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getnameinfo.c,v 1.4 2001/07/09 15:14:19 assar Exp $"); +RCSID("$Id: getnameinfo.c 15412 2005-06-16 16:53:09Z lha $"); #endif #include "roken.h" @@ -94,7 +94,7 @@ doit (int af, * */ -int +int ROKEN_LIB_FUNCTION getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, @@ -113,10 +113,10 @@ getnameinfo(const struct sockaddr *sa, socklen_t salen, } #endif case AF_INET : { - const struct sockaddr_in *sin = (const struct sockaddr_in *)sa; + const struct sockaddr_in *sin4 = (const struct sockaddr_in *)sa; - return doit (AF_INET, &sin->sin_addr, sizeof(sin->sin_addr), - sin->sin_port, + return doit (AF_INET, &sin4->sin_addr, sizeof(sin4->sin_addr), + sin4->sin_port, host, hostlen, serv, servlen, flags); diff --git a/crypto/heimdal/lib/roken/getnameinfo_verified.c b/crypto/heimdal/lib/roken/getnameinfo_verified.c index 0145262..91f938a 100644 --- a/crypto/heimdal/lib/roken/getnameinfo_verified.c +++ b/crypto/heimdal/lib/roken/getnameinfo_verified.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getnameinfo_verified.c,v 1.6 2002/09/05 01:36:27 assar Exp $"); +RCSID("$Id: getnameinfo_verified.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -46,7 +46,7 @@ RCSID("$Id: getnameinfo_verified.c,v 1.6 2002/09/05 01:36:27 assar Exp $"); * NI_NAMEREQD flag is set or return the numeric address as a string. */ -int +int ROKEN_LIB_FUNCTION getnameinfo_verified(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, diff --git a/crypto/heimdal/lib/roken/getopt.c b/crypto/heimdal/lib/roken/getopt.c index 45fc350..12bf138 100644 --- a/crypto/heimdal/lib/roken/getopt.c +++ b/crypto/heimdal/lib/roken/getopt.c @@ -10,11 +10,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -55,7 +51,7 @@ char *optarg; /* argument associated with option */ #define BADARG (int)':' #define EMSG "" -int +int ROKEN_LIB_FUNCTION getopt(nargc, nargv, ostr) int nargc; char * const *nargv; diff --git a/crypto/heimdal/lib/roken/getprogname.c b/crypto/heimdal/lib/roken/getprogname.c index fcd4a40..6d0bfee 100644 --- a/crypto/heimdal/lib/roken/getprogname.c +++ b/crypto/heimdal/lib/roken/getprogname.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995 - 2001 Kungliga Tekniska Högskolan + * Copyright (c) 1995-2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: getprogname.c,v 1.1 2001/07/09 14:56:51 assar Exp $"); +RCSID("$Id: getprogname.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -43,16 +43,9 @@ const char *__progname; #endif #ifndef HAVE_GETPROGNAME -const char * +const char * ROKEN_LIB_FUNCTION getprogname(void) { return __progname; } #endif /* HAVE_GETPROGNAME */ - -const char * -get_progname (void) -{ - return getprogname (); -} - diff --git a/crypto/heimdal/lib/roken/gettimeofday.c b/crypto/heimdal/lib/roken/gettimeofday.c index ec8b62f..d8e4e75 100644 --- a/crypto/heimdal/lib/roken/gettimeofday.c +++ b/crypto/heimdal/lib/roken/gettimeofday.c @@ -37,12 +37,12 @@ #include "roken.h" #ifndef HAVE_GETTIMEOFDAY -RCSID("$Id: gettimeofday.c,v 1.8 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: gettimeofday.c 14773 2005-04-12 11:29:18Z lha $"); /* * Simple gettimeofday that only returns seconds. */ -int +int ROKEN_LIB_FUNCTION gettimeofday (struct timeval *tp, void *ignore) { time_t t; diff --git a/crypto/heimdal/lib/roken/getuid.c b/crypto/heimdal/lib/roken/getuid.c index 6ebce0a..f558ab6 100644 --- a/crypto/heimdal/lib/roken/getuid.c +++ b/crypto/heimdal/lib/roken/getuid.c @@ -38,9 +38,10 @@ #ifndef HAVE_GETUID -RCSID("$Id: getuid.c,v 1.3 1999/12/02 16:58:46 joda Exp $"); +RCSID("$Id: getuid.c 14773 2005-04-12 11:29:18Z lha $"); -int getuid(void) +int ROKEN_LIB_FUNCTION +getuid(void) { return 17; } diff --git a/crypto/heimdal/lib/roken/getusershell.c b/crypto/heimdal/lib/roken/getusershell.c index eb990f3..8def1ca 100644 --- a/crypto/heimdal/lib/roken/getusershell.c +++ b/crypto/heimdal/lib/roken/getusershell.c @@ -10,11 +10,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -35,13 +31,14 @@ #include <config.h> #endif -RCSID("$Id: getusershell.c,v 1.10 2000/05/22 09:11:59 joda Exp $"); +RCSID("$Id: getusershell.c 21005 2007-06-08 01:54:35Z lha $"); #ifndef HAVE_GETUSERSHELL #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <ctype.h> #ifdef HAVE_PATHS_H #include <paths.h> #endif @@ -62,6 +59,7 @@ struct aud_rec; #ifdef HAVE_USERCONF_H #include <userconf.h> #endif +#include "roken.h" #ifndef _PATH_SHELLS #define _PATH_SHELLS "/etc/shells" @@ -87,7 +85,7 @@ static char **initshells (void); /* * Get a list of shells from _PATH_SHELLS, if it exists. */ -char * +char * ROKEN_LIB_FUNCTION getusershell() { char *ret; @@ -100,7 +98,7 @@ getusershell() return (ret); } -void +void ROKEN_LIB_FUNCTION endusershell() { if (shells != NULL) @@ -112,7 +110,7 @@ endusershell() curshell = NULL; } -void +void ROKEN_LIB_FUNCTION setusershell() { curshell = initshells(); @@ -179,7 +177,7 @@ initshells() if (*cp == '#' || *cp == '\0') continue; *sp++ = cp; - while (!isspace(*cp) && *cp != '#' && *cp != '\0') + while (!isspace((unsigned char)*cp) && *cp != '#' && *cp != '\0') cp++; *cp++ = '\0'; } diff --git a/crypto/heimdal/lib/roken/glob.c b/crypto/heimdal/lib/roken/glob.c index 295aa2d..803eda1 100644 --- a/crypto/heimdal/lib/roken/glob.c +++ b/crypto/heimdal/lib/roken/glob.c @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -170,7 +166,7 @@ static int match (Char *, Char *, Char *); static void qprintf (const char *, Char *); #endif -int +int ROKEN_LIB_FUNCTION glob(const char *pattern, int flags, int (*errfunc)(const char *, int), @@ -745,7 +741,7 @@ match(Char *name, Char *pat, Char *patend) } /* Free allocated data belonging to a glob_t structure. */ -void +void ROKEN_LIB_FUNCTION globfree(glob_t *pglob) { int i; diff --git a/crypto/heimdal/lib/roken/glob.hin b/crypto/heimdal/lib/roken/glob.hin index 98d8796..ffb6081 100644 --- a/crypto/heimdal/lib/roken/glob.hin +++ b/crypto/heimdal/lib/roken/glob.hin @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -39,6 +35,22 @@ #ifndef _GLOB_H_ #define _GLOB_H_ +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define glob_t rk_glob_t +#define glob rk_glob +#define globfree rk_globfree + struct stat; typedef struct { int gl_pathc; /* Count of total paths so far. */ @@ -79,7 +91,14 @@ typedef struct { #define GLOB_NOSPACE (-1) /* Malloc call failed. */ #define GLOB_ABEND (-2) /* Unignored error. */ -int glob (const char *, int, int (*)(const char *, int), glob_t *); -void globfree (glob_t *); +int ROKEN_LIB_FUNCTION +glob (const char *, int, int (*)(const char *, int), glob_t *); + +void ROKEN_LIB_FUNCTION +globfree (glob_t *); + +#ifdef __cplusplus +} +#endif #endif /* !_GLOB_H_ */ diff --git a/crypto/heimdal/lib/roken/h_errno.c b/crypto/heimdal/lib/roken/h_errno.c index c2d4452..11dcb08 100644 --- a/crypto/heimdal/lib/roken/h_errno.c +++ b/crypto/heimdal/lib/roken/h_errno.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: h_errno.c,v 1.1 2001/08/08 03:47:23 assar Exp $"); +RCSID("$Id: h_errno.c 10442 2001-08-08 03:47:23Z assar $"); #endif #ifndef HAVE_H_ERRNO diff --git a/crypto/heimdal/lib/roken/hex-test.c b/crypto/heimdal/lib/roken/hex-test.c new file mode 100644 index 0000000..72aea1e --- /dev/null +++ b/crypto/heimdal/lib/roken/hex-test.c @@ -0,0 +1,110 @@ +/* + * Copyright (c) 1999 - 2001, 2005 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> + +RCSID("$Id: hex-test.c 21005 2007-06-08 01:54:35Z lha $"); +#endif + +#include "roken.h" +#include <hex.h> + +int +main(int argc, char **argv) +{ + int numerr = 0; + int numtest = 1; + struct test { + void *data; + size_t len; + const char *result; + } *t, tests[] = { + { "", 0 , "" }, + { "a", 1, "61" }, + { "ab", 2, "6162" }, + { "abc", 3, "616263" }, + { "abcd", 4, "61626364" }, + { "abcde", 5, "6162636465" }, + { "abcdef", 6, "616263646566" }, + { "abcdefg", 7, "61626364656667" }, + { "=", 1, "3D" }, + { NULL } + }; + for(t = tests; t->data; t++) { + char *str; + int len; + len = hex_encode(t->data, t->len, &str); + if(strcmp(str, t->result) != 0) { + fprintf(stderr, "failed test %d: %s != %s\n", numtest, + str, t->result); + numerr++; + } + free(str); + str = strdup(t->result); + len = strlen(str); + len = hex_decode(t->result, str, len); + if(len != t->len) { + fprintf(stderr, "failed test %d: len %lu != %lu\n", numtest, + (unsigned long)len, (unsigned long)t->len); + numerr++; + } else if(memcmp(str, t->data, t->len) != 0) { + fprintf(stderr, "failed test %d: data\n", numtest); + numerr++; + } + free(str); + numtest++; + } + + { + unsigned char buf[2] = { 0, 0xff } ; + int len; + + len = hex_decode("A", buf, 1); + if (len != 1) { + fprintf(stderr, "len != 1"); + numerr++; + } + if (buf[0] != 10) { + fprintf(stderr, "buf != 10"); + numerr++; + } + if (buf[1] != 0xff) { + fprintf(stderr, "buf != 0xff"); + numerr++; + } + + } + + return numerr; +} diff --git a/crypto/heimdal/lib/roken/hex.c b/crypto/heimdal/lib/roken/hex.c new file mode 100644 index 0000000..89fb0e1 --- /dev/null +++ b/crypto/heimdal/lib/roken/hex.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2004-2005 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +RCSID("$Id: hex.c 16504 2006-01-09 17:09:29Z lha $"); +#endif +#include "roken.h" +#include <ctype.h> +#include "hex.h" + +const static char hexchar[] = "0123456789ABCDEF"; + +static int +pos(char c) +{ + const char *p; + c = toupper((unsigned char)c); + for (p = hexchar; *p; p++) + if (*p == c) + return p - hexchar; + return -1; +} + +ssize_t ROKEN_LIB_FUNCTION +hex_encode(const void *data, size_t size, char **str) +{ + const unsigned char *q = data; + size_t i; + char *p; + + /* check for overflow */ + if (size * 2 < size) + return -1; + + p = malloc(size * 2 + 1); + if (p == NULL) + return -1; + + for (i = 0; i < size; i++) { + p[i * 2] = hexchar[(*q >> 4) & 0xf]; + p[i * 2 + 1] = hexchar[*q & 0xf]; + q++; + } + p[i * 2] = '\0'; + *str = p; + + return i * 2; +} + +ssize_t ROKEN_LIB_FUNCTION +hex_decode(const char *str, void *data, size_t len) +{ + size_t l; + unsigned char *p = data; + size_t i; + + l = strlen(str); + + /* check for overflow, same as (l+1)/2 but overflow safe */ + if ((l/2) + (l&1) > len) + return -1; + + i = 0; + if (l & 1) { + p[0] = pos(str[0]); + str++; + p++; + } + for (i = 0; i < l / 2; i++) + p[i] = pos(str[i * 2]) << 4 | pos(str[(i * 2) + 1]); + return i + (l & 1); +} diff --git a/crypto/heimdal/lib/roken/hex.h b/crypto/heimdal/lib/roken/hex.h new file mode 100644 index 0000000..4c4b850 --- /dev/null +++ b/crypto/heimdal/lib/roken/hex.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2005 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* $Id: hex.h 14773 2005-04-12 11:29:18Z lha $ */ + +#ifndef _rk_HEX_H_ +#define _rk_HEX_H_ 1 + +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + +#define hex_encode rk_hex_encode +#define hex_decode rk_hex_decode + +ssize_t ROKEN_LIB_FUNCTION + hex_encode(const void *, size_t, char **); +ssize_t ROKEN_LIB_FUNCTION + hex_decode(const char *, void *, size_t); + +#endif /* _rk_HEX_H_ */ diff --git a/crypto/heimdal/lib/roken/hostent_find_fqdn.c b/crypto/heimdal/lib/roken/hostent_find_fqdn.c index 8e955a4..299ed6d3 100644 --- a/crypto/heimdal/lib/roken/hostent_find_fqdn.c +++ b/crypto/heimdal/lib/roken/hostent_find_fqdn.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: hostent_find_fqdn.c,v 1.2 2001/07/10 11:58:23 assar Exp $"); +RCSID("$Id: hostent_find_fqdn.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -42,7 +42,7 @@ RCSID("$Id: hostent_find_fqdn.c,v 1.2 2001/07/10 11:58:23 assar Exp $"); * Try to find a fqdn (with `.') in he if possible, else return h_name */ -const char * +const char * ROKEN_LIB_FUNCTION hostent_find_fqdn (const struct hostent *he) { const char *ret = he->h_name; diff --git a/crypto/heimdal/lib/roken/hstrerror.c b/crypto/heimdal/lib/roken/hstrerror.c index 61897cc..32dab23 100644 --- a/crypto/heimdal/lib/roken/hstrerror.c +++ b/crypto/heimdal/lib/roken/hstrerror.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: hstrerror.c,v 1.24 2001/08/08 03:47:23 assar Exp $"); +RCSID("$Id: hstrerror.c 14773 2005-04-12 11:29:18Z lha $"); #endif #ifndef HAVE_HSTRERROR @@ -60,14 +60,14 @@ const int h_nerr = { sizeof h_errlist / sizeof h_errlist[0] }; #else -#ifndef HAVE_H_ERRLIST_DECLARATION +#if !HAVE_DECL_H_ERRLIST extern const char *h_errlist[]; extern int h_nerr; #endif #endif -const char * +const char * ROKEN_LIB_FUNCTION hstrerror(int herr) { if (0 <= herr && herr < h_nerr) diff --git a/crypto/heimdal/lib/roken/ifaddrs.hin b/crypto/heimdal/lib/roken/ifaddrs.hin index d2b9be8..0951c8c 100644 --- a/crypto/heimdal/lib/roken/ifaddrs.hin +++ b/crypto/heimdal/lib/roken/ifaddrs.hin @@ -31,11 +31,19 @@ * SUCH DAMAGE. */ -/* $Id: ifaddrs.hin,v 1.3 2000/12/11 00:01:13 assar Exp $ */ +/* $Id: ifaddrs.hin 19309 2006-12-11 18:58:15Z lha $ */ #ifndef __ifaddrs_h__ #define __ifaddrs_h__ +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + /* * the interface is defined in terms of the fields below, and this is * sometimes #define'd, so there seems to be no simple way of solving @@ -57,8 +65,13 @@ struct ifaddrs { #define ifa_broadaddr ifa_dstaddr #endif -int getifaddrs(struct ifaddrs**); +int ROKEN_LIB_FUNCTION +rk_getifaddrs(struct ifaddrs**); + +void ROKEN_LIB_FUNCTION +rk_freeifaddrs(struct ifaddrs*); -void freeifaddrs(struct ifaddrs*); +#define getifaddrs(a) rk_getifaddrs(a) +#define freeifaddrs(a) rk_freeifaddrs(a) #endif /* __ifaddrs_h__ */ diff --git a/crypto/heimdal/lib/roken/inet_aton.c b/crypto/heimdal/lib/roken/inet_aton.c index cdc6bdd..3010935 100644 --- a/crypto/heimdal/lib/roken/inet_aton.c +++ b/crypto/heimdal/lib/roken/inet_aton.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: inet_aton.c,v 1.13 1999/12/05 13:26:20 assar Exp $"); +RCSID("$Id: inet_aton.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -41,7 +41,7 @@ RCSID("$Id: inet_aton.c,v 1.13 1999/12/05 13:26:20 assar Exp $"); /* Minimal implementation of inet_aton. * Cannot distinguish between failure and a local broadcast address. */ -int +int ROKEN_LIB_FUNCTION inet_aton(const char *cp, struct in_addr *addr) { addr->s_addr = inet_addr(cp); diff --git a/crypto/heimdal/lib/roken/inet_ntop.c b/crypto/heimdal/lib/roken/inet_ntop.c index 63c99a5..7433c37 100644 --- a/crypto/heimdal/lib/roken/inet_ntop.c +++ b/crypto/heimdal/lib/roken/inet_ntop.c @@ -33,10 +33,10 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: inet_ntop.c,v 1.5 2001/04/04 23:58:01 assar Exp $"); +RCSID("$Id: inet_ntop.c 21005 2007-06-08 01:54:35Z lha $"); #endif -#include <roken.h> +#include "roken.h" /* * @@ -116,7 +116,7 @@ inet_ntop_v6 (const void *src, char *dst, size_t size) } #endif /* HAVE_IPV6 */ -const char * +const char * ROKEN_LIB_FUNCTION inet_ntop(int af, const void *src, char *dst, size_t size) { switch (af) { diff --git a/crypto/heimdal/lib/roken/inet_pton.c b/crypto/heimdal/lib/roken/inet_pton.c index d9c976c..390233a 100644 --- a/crypto/heimdal/lib/roken/inet_pton.c +++ b/crypto/heimdal/lib/roken/inet_pton.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: inet_pton.c,v 1.3 2000/07/27 04:56:13 assar Exp $"); +RCSID("$Id: inet_pton.c 21005 2007-06-08 01:54:35Z lha $"); #endif -#include <roken.h> +#include "roken.h" -int +int ROKEN_LIB_FUNCTION inet_pton(int af, const char *src, void *dst) { if (af != AF_INET) { diff --git a/crypto/heimdal/lib/roken/initgroups.c b/crypto/heimdal/lib/roken/initgroups.c index dcf1d08..f326e5f 100644 --- a/crypto/heimdal/lib/roken/initgroups.c +++ b/crypto/heimdal/lib/roken/initgroups.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: initgroups.c,v 1.3 1999/12/02 16:58:47 joda Exp $"); +RCSID("$Id: initgroups.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" -int +int ROKEN_LIB_FUNCTION initgroups(const char *name, gid_t basegid) { return 0; diff --git a/crypto/heimdal/lib/roken/innetgr.c b/crypto/heimdal/lib/roken/innetgr.c index 4bc57f9..598bad2 100644 --- a/crypto/heimdal/lib/roken/innetgr.c +++ b/crypto/heimdal/lib/roken/innetgr.c @@ -37,9 +37,9 @@ #ifndef HAVE_INNETGR -RCSID("$Id: innetgr.c,v 1.1 1999/03/11 14:04:01 joda Exp $"); +RCSID("$Id: innetgr.c 14773 2005-04-12 11:29:18Z lha $"); -int +int ROKEN_LIB_FUNCTION innetgr(const char *netgroup, const char *machine, const char *user, const char *domain) { diff --git a/crypto/heimdal/lib/roken/iruserok.c b/crypto/heimdal/lib/roken/iruserok.c index 3b3880b..ca93e1c 100644 --- a/crypto/heimdal/lib/roken/iruserok.c +++ b/crypto/heimdal/lib/roken/iruserok.c @@ -10,11 +10,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -33,7 +29,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: iruserok.c,v 1.23 1999/12/05 13:27:05 assar Exp $"); +RCSID("$Id: iruserok.c 17879 2006-08-08 21:50:40Z lha $"); #endif #include <stdio.h> @@ -221,7 +217,7 @@ __ivaliduser(FILE *hostf, unsigned raddr, const char *luser, * * Returns 0 if ok, -1 if not ok. */ -int +int ROKEN_LIB_FUNCTION iruserok(unsigned raddr, int superuser, const char *ruser, const char *luser) { char *cp; @@ -254,7 +250,8 @@ again: * are protected read/write owner only. */ uid = geteuid(); - seteuid(pwd->pw_uid); + if (seteuid(pwd->pw_uid) < 0) + return (-1); hostf = fopen(pbuf, "r"); seteuid(uid); diff --git a/crypto/heimdal/lib/roken/issuid.c b/crypto/heimdal/lib/roken/issuid.c index 910d850..46bde77 100644 --- a/crypto/heimdal/lib/roken/issuid.c +++ b/crypto/heimdal/lib/roken/issuid.c @@ -33,17 +33,18 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: issuid.c,v 1.4 2001/08/27 23:08:34 assar Exp $"); +RCSID("$Id: issuid.c 15131 2005-05-13 07:42:03Z lha $"); #endif #include "roken.h" -int +int ROKEN_LIB_FUNCTION issuid(void) { #if defined(HAVE_ISSETUGID) return issetugid(); -#endif +#else /* !HAVE_ISSETUGID */ + #if defined(HAVE_GETUID) && defined(HAVE_GETEUID) if(getuid() != geteuid()) return 1; @@ -52,5 +53,7 @@ issuid(void) if(getgid() != getegid()) return 2; #endif + return 0; +#endif /* HAVE_ISSETUGID */ } diff --git a/crypto/heimdal/lib/roken/k_getpwnam.c b/crypto/heimdal/lib/roken/k_getpwnam.c index 40681cd..81eba28 100644 --- a/crypto/heimdal/lib/roken/k_getpwnam.c +++ b/crypto/heimdal/lib/roken/k_getpwnam.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: k_getpwnam.c,v 1.9 1999/12/02 16:58:47 joda Exp $"); +RCSID("$Id: k_getpwnam.c 14773 2005-04-12 11:29:18Z lha $"); #endif /* HAVE_CONFIG_H */ #include "roken.h" @@ -41,7 +41,7 @@ RCSID("$Id: k_getpwnam.c,v 1.9 1999/12/02 16:58:47 joda Exp $"); #include <shadow.h> #endif -struct passwd * +struct passwd * ROKEN_LIB_FUNCTION k_getpwnam (const char *user) { struct passwd *p; diff --git a/crypto/heimdal/lib/roken/k_getpwuid.c b/crypto/heimdal/lib/roken/k_getpwuid.c index 1e2ca54..7fe03b9 100644 --- a/crypto/heimdal/lib/roken/k_getpwuid.c +++ b/crypto/heimdal/lib/roken/k_getpwuid.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: k_getpwuid.c,v 1.9 1999/12/02 16:58:47 joda Exp $"); +RCSID("$Id: k_getpwuid.c 14773 2005-04-12 11:29:18Z lha $"); #endif /* HAVE_CONFIG_H */ #include "roken.h" @@ -41,7 +41,7 @@ RCSID("$Id: k_getpwuid.c,v 1.9 1999/12/02 16:58:47 joda Exp $"); #include <shadow.h> #endif -struct passwd * +struct passwd * ROKEN_LIB_FUNCTION k_getpwuid (uid_t uid) { struct passwd *p; diff --git a/crypto/heimdal/lib/roken/localtime_r.c b/crypto/heimdal/lib/roken/localtime_r.c index 4340234..ad515c14 100644 --- a/crypto/heimdal/lib/roken/localtime_r.c +++ b/crypto/heimdal/lib/roken/localtime_r.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: localtime_r.c,v 1.2 2002/08/20 13:00:35 joda Exp $"); +RCSID("$Id: localtime_r.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <stdio.h> @@ -42,7 +42,7 @@ RCSID("$Id: localtime_r.c,v 1.2 2002/08/20 13:00:35 joda Exp $"); #ifndef HAVE_LOCALTIME_R -struct tm * +struct tm * ROKEN_LIB_FUNCTION localtime_r(const time_t *timer, struct tm *result) { struct tm *tm; diff --git a/crypto/heimdal/lib/roken/lstat.c b/crypto/heimdal/lib/roken/lstat.c index 2f03e19..9357e12 100644 --- a/crypto/heimdal/lib/roken/lstat.c +++ b/crypto/heimdal/lib/roken/lstat.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: lstat.c,v 1.4 1999/12/02 16:58:51 joda Exp $"); +RCSID("$Id: lstat.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" -int +int ROKEN_LIB_FUNCTION lstat(const char *path, struct stat *buf) { return stat(path, buf); diff --git a/crypto/heimdal/lib/roken/memmove.c b/crypto/heimdal/lib/roken/memmove.c index b77d56a..5f78ac2 100644 --- a/crypto/heimdal/lib/roken/memmove.c +++ b/crypto/heimdal/lib/roken/memmove.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: memmove.c,v 1.7 1999/12/02 16:58:51 joda Exp $"); +RCSID("$Id: memmove.c 14773 2005-04-12 11:29:18Z lha $"); #endif /* @@ -44,7 +44,8 @@ RCSID("$Id: memmove.c,v 1.7 1999/12/02 16:58:51 joda Exp $"); #include <sys/types.h> #endif -void* memmove(void *s1, const void *s2, size_t n) +void* ROKEN_LIB_FUNCTION +memmove(void *s1, const void *s2, size_t n) { char *s=(char*)s2, *d=(char*)s1; diff --git a/crypto/heimdal/lib/roken/mini_inetd.c b/crypto/heimdal/lib/roken/mini_inetd.c index 8c8f72d..9eb114d 100644 --- a/crypto/heimdal/lib/roken/mini_inetd.c +++ b/crypto/heimdal/lib/roken/mini_inetd.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: mini_inetd.c,v 1.30 2002/02/18 19:08:55 joda Exp $"); +RCSID("$Id: mini_inetd.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <err.h> @@ -62,7 +62,7 @@ accept_it (int s) * Listen on a specified port, emulating inetd. */ -void +void ROKEN_LIB_FUNCTION mini_inetd_addrinfo (struct addrinfo *ai) { int ret; @@ -124,7 +124,7 @@ mini_inetd_addrinfo (struct addrinfo *ai) abort (); } -void +void ROKEN_LIB_FUNCTION mini_inetd (int port) { int error; diff --git a/crypto/heimdal/lib/roken/mkstemp.c b/crypto/heimdal/lib/roken/mkstemp.c index 350f4cb..ccb2e700 100644 --- a/crypto/heimdal/lib/roken/mkstemp.c +++ b/crypto/heimdal/lib/roken/mkstemp.c @@ -44,11 +44,11 @@ #endif #include <errno.h> -RCSID("$Id: mkstemp.c,v 1.3 1999/12/02 16:58:51 joda Exp $"); +RCSID("$Id: mkstemp.c 14773 2005-04-12 11:29:18Z lha $"); #ifndef HAVE_MKSTEMP -int +int ROKEN_LIB_FUNCTION mkstemp(char *template) { int start, i; diff --git a/crypto/heimdal/lib/roken/ndbm_wrap.c b/crypto/heimdal/lib/roken/ndbm_wrap.c index 0a1ab92..8bc5d93 100644 --- a/crypto/heimdal/lib/roken/ndbm_wrap.c +++ b/crypto/heimdal/lib/roken/ndbm_wrap.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: ndbm_wrap.c,v 1.1.8.1 2003/08/29 17:00:34 lha Exp $"); +RCSID("$Id: ndbm_wrap.c 21634 2007-07-17 11:30:36Z lha $"); #endif #include "ndbm_wrap.h" @@ -50,6 +50,8 @@ RCSID("$Id: ndbm_wrap.c,v 1.1.8.1 2003/08/29 17:00:34 lha Exp $"); #include <string.h> #include <fcntl.h> +/* XXX undefine open so this works on Solaris with large file support */ +#undef open #define DBT2DATUM(DBT, DATUM) do { (DATUM)->dptr = (DBT)->data; (DATUM)->dsize = (DBT)->size; } while(0) #define DATUM2DBT(DATUM, DBT) do { (DBT)->data = (DATUM)->dptr; (DBT)->size = (DATUM)->dsize; } while(0) @@ -61,7 +63,7 @@ static DBC *cursor; #define D(X) ((DB*)(X)) -void +void ROKEN_LIB_FUNCTION dbm_close (DBM *db) { #ifdef HAVE_DB3 @@ -72,7 +74,7 @@ dbm_close (DBM *db) #endif } -int +int ROKEN_LIB_FUNCTION dbm_delete (DBM *db, datum dkey) { DBT key; @@ -94,8 +96,10 @@ dbm_fetch (DBM *db, datum dkey) #ifdef HAVE_DB3 NULL, #endif - &key, &value, 0) != 0) + &key, &value, 0) != 0) { dvalue.dptr = NULL; + dvalue.dsize = 0; + } else DBT2DATUM(&value, &dvalue); @@ -110,9 +114,10 @@ dbm_get (DB *db, int flags) #ifdef HAVE_DB3 if(cursor == NULL) db->cursor(db, NULL, &cursor, 0); - if(cursor->c_get(cursor, &key, &value, flags) != 0) + if(cursor->c_get(cursor, &key, &value, flags) != 0) { datum.dptr = NULL; - else + datum.dsize = 0; + } else DBT2DATUM(&value, &datum); #else db->seq(db, &key, &value, flags); @@ -127,19 +132,19 @@ dbm_get (DB *db, int flags) #define DB_KEYEXIST 1 #endif -datum +datum ROKEN_LIB_FUNCTION dbm_firstkey (DBM *db) { return dbm_get(D(db), DB_FIRST); } -datum +datum ROKEN_LIB_FUNCTION dbm_nextkey (DBM *db) { return dbm_get(D(db), DB_NEXT); } -DBM* +DBM* ROKEN_LIB_FUNCTION dbm_open (const char *file, int flags, mode_t mode) { DB *db; @@ -182,7 +187,7 @@ dbm_open (const char *file, int flags, mode_t mode) return (DBM*)db; } -int +int ROKEN_LIB_FUNCTION dbm_store (DBM *db, datum dkey, datum dvalue, int flags) { int ret; @@ -202,13 +207,13 @@ dbm_store (DBM *db, datum dkey, datum dvalue, int flags) RETURN(ret); } -int +int ROKEN_LIB_FUNCTION dbm_error (DBM *db) { return 0; } -int +int ROKEN_LIB_FUNCTION dbm_clearerr (DBM *db) { return 0; diff --git a/crypto/heimdal/lib/roken/ndbm_wrap.h b/crypto/heimdal/lib/roken/ndbm_wrap.h index 77c88b4..4149402 100644 --- a/crypto/heimdal/lib/roken/ndbm_wrap.h +++ b/crypto/heimdal/lib/roken/ndbm_wrap.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. */ -/* $Id: ndbm_wrap.h,v 1.1 2002/04/30 16:37:20 joda Exp $ */ +/* $Id: ndbm_wrap.h 14773 2005-04-12 11:29:18Z lha $ */ #ifndef __ndbm_wrap_h__ #define __ndbm_wrap_h__ @@ -39,6 +39,14 @@ #include <stdio.h> #include <sys/types.h> +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + #ifndef dbm_rename #define dbm_rename(X) __roken_ ## X #endif @@ -70,14 +78,14 @@ typedef struct { } DBM; #endif -int dbm_clearerr (DBM*); -void dbm_close (DBM*); -int dbm_delete (DBM*, datum); -int dbm_error (DBM*); -datum dbm_fetch (DBM*, datum); -datum dbm_firstkey (DBM*); -datum dbm_nextkey (DBM*); -DBM* dbm_open (const char*, int, mode_t); -int dbm_store (DBM*, datum, datum, int); +int ROKEN_LIB_FUNCTION dbm_clearerr (DBM*); +void ROKEN_LIB_FUNCTION dbm_close (DBM*); +int ROKEN_LIB_FUNCTION dbm_delete (DBM*, datum); +int ROKEN_LIB_FUNCTION dbm_error (DBM*); +datum ROKEN_LIB_FUNCTION dbm_fetch (DBM*, datum); +datum ROKEN_LIB_FUNCTION dbm_firstkey (DBM*); +datum ROKEN_LIB_FUNCTION dbm_nextkey (DBM*); +DBM* ROKEN_LIB_FUNCTION dbm_open (const char*, int, mode_t); +int ROKEN_LIB_FUNCTION dbm_store (DBM*, datum, datum, int); #endif /* __ndbm_wrap_h__ */ diff --git a/crypto/heimdal/lib/roken/net_read.c b/crypto/heimdal/lib/roken/net_read.c index 6d45bfa..effc001 100644 --- a/crypto/heimdal/lib/roken/net_read.c +++ b/crypto/heimdal/lib/roken/net_read.c @@ -33,20 +33,20 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: net_read.c,v 1.3 1999/12/02 16:58:51 joda Exp $"); +RCSID("$Id: net_read.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <sys/types.h> #include <unistd.h> #include <errno.h> -#include <roken.h> +#include "roken.h" /* * Like read but never return partial data. */ -ssize_t +ssize_t ROKEN_LIB_FUNCTION net_read (int fd, void *buf, size_t nbytes) { char *cbuf = (char *)buf; diff --git a/crypto/heimdal/lib/roken/net_write.c b/crypto/heimdal/lib/roken/net_write.c index 2f63dbe..a68317f 100644 --- a/crypto/heimdal/lib/roken/net_write.c +++ b/crypto/heimdal/lib/roken/net_write.c @@ -33,20 +33,20 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: net_write.c,v 1.4 1999/12/02 16:58:51 joda Exp $"); +RCSID("$Id: net_write.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <sys/types.h> #include <unistd.h> #include <errno.h> -#include <roken.h> +#include "roken.h" /* * Like write but never return partial data. */ -ssize_t +ssize_t ROKEN_LIB_FUNCTION net_write (int fd, const void *buf, size_t nbytes) { const char *cbuf = (const char *)buf; diff --git a/crypto/heimdal/lib/roken/parse_bytes-test.c b/crypto/heimdal/lib/roken/parse_bytes-test.c index 6583f22..5e55b30 100644 --- a/crypto/heimdal/lib/roken/parse_bytes-test.c +++ b/crypto/heimdal/lib/roken/parse_bytes-test.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: parse_bytes-test.c,v 1.3 2001/09/04 09:56:00 assar Exp $"); +RCSID("$Id: parse_bytes-test.c 10655 2001-09-04 09:56:00Z assar $"); #endif #include "roken.h" diff --git a/crypto/heimdal/lib/roken/parse_bytes.c b/crypto/heimdal/lib/roken/parse_bytes.c index b556ddc..4ab02b4 100644 --- a/crypto/heimdal/lib/roken/parse_bytes.c +++ b/crypto/heimdal/lib/roken/parse_bytes.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: parse_bytes.c,v 1.4 2003/03/07 15:51:53 lha Exp $"); +RCSID("$Id: parse_bytes.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <parse_units.h> @@ -59,19 +59,19 @@ static struct units bytes_short_units[] = { { NULL, 0 } }; -int +int ROKEN_LIB_FUNCTION parse_bytes (const char *s, const char *def_unit) { return parse_units (s, bytes_units, def_unit); } -int +int ROKEN_LIB_FUNCTION unparse_bytes (int t, char *s, size_t len) { return unparse_units (t, bytes_units, s, len); } -int +int ROKEN_LIB_FUNCTION unparse_bytes_short (int t, char *s, size_t len) { return unparse_units_approx (t, bytes_short_units, s, len); diff --git a/crypto/heimdal/lib/roken/parse_bytes.h b/crypto/heimdal/lib/roken/parse_bytes.h index d7e759d..1998f70 100644 --- a/crypto/heimdal/lib/roken/parse_bytes.h +++ b/crypto/heimdal/lib/roken/parse_bytes.h @@ -31,18 +31,26 @@ * SUCH DAMAGE. */ -/* $Id: parse_bytes.h,v 1.3 2001/09/04 09:56:00 assar Exp $ */ +/* $Id: parse_bytes.h 14787 2005-04-13 13:19:07Z lha $ */ #ifndef __PARSE_BYTES_H__ #define __PARSE_BYTES_H__ -int +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + +int ROKEN_LIB_FUNCTION parse_bytes (const char *s, const char *def_unit); -int +int ROKEN_LIB_FUNCTION unparse_bytes (int t, char *s, size_t len); -int +int ROKEN_LIB_FUNCTION unparse_bytes_short (int t, char *s, size_t len); #endif /* __PARSE_BYTES_H__ */ diff --git a/crypto/heimdal/lib/roken/parse_reply-test.c b/crypto/heimdal/lib/roken/parse_reply-test.c index 47e12d1..f6342ef 100644 --- a/crypto/heimdal/lib/roken/parse_reply-test.c +++ b/crypto/heimdal/lib/roken/parse_reply-test.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: parse_reply-test.c,v 1.2 2002/09/04 03:25:06 assar Exp $"); +RCSID("$Id: parse_reply-test.c 15287 2005-05-29 21:21:12Z lha $"); #endif #include <sys/types.h> @@ -109,18 +109,18 @@ main(int argc, char **argv) #endif flags |= MAP_PRIVATE; - p1 = (char *)mmap(0, 2 * pagesize, PROT_READ | PROT_WRITE, + p1 = (unsigned char *)mmap(0, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (p1 == (unsigned char *)MAP_FAILED) err (1, "mmap"); p2 = p1 + pagesize; - ret = mprotect (p2, pagesize, 0); + ret = mprotect ((void *)p2, pagesize, 0); if (ret < 0) err (1, "mprotect"); buf = p2 - t->buf_len; memcpy (buf, t->buf, t->buf_len); parse_reply (buf, t->buf_len); - ret = munmap (p1, 2 * pagesize); + ret = munmap ((void *)p1, 2 * pagesize); if (ret < 0) err (1, "munmap"); } diff --git a/crypto/heimdal/lib/roken/parse_time-test.c b/crypto/heimdal/lib/roken/parse_time-test.c new file mode 100644 index 0000000..0ce7063 --- /dev/null +++ b/crypto/heimdal/lib/roken/parse_time-test.c @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2004 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +RCSID("$Id: parse_time-test.c 15028 2005-04-30 14:48:29Z lha $"); +#endif + +#include "roken.h" +#include "parse_time.h" +#include "test-mem.h" +#include "err.h" + +static struct testcase { + size_t size; + time_t val; + char *str; +} tests[] = { + { 8, 1, "1 second" }, + { 17, 61, "1 minute 1 second" }, + { 18, 62, "1 minute 2 seconds" }, + { 8, 60, "1 minute" }, + { 6, 3600, "1 hour" }, + { 15, 3601, "1 hour 1 second" }, + { 16, 3602, "1 hour 2 seconds" } +}; + +int +main(int argc, char **argv) +{ + size_t sz; + size_t buf_sz; + int i, j; + + for (i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) { + char *buf; + + sz = unparse_time(tests[i].val, NULL, 0); + if (sz != tests[i].size) + errx(1, "sz (%lu) != tests[%d].size (%lu)", + (unsigned long)sz, i, (unsigned long)tests[i].size); + + for (buf_sz = 0; buf_sz < tests[i].size + 2; buf_sz++) { + + buf = rk_test_mem_alloc(RK_TM_OVERRUN, "overrun", + NULL, buf_sz); + sz = unparse_time(tests[i].val, buf, buf_sz); + if (sz != tests[i].size) + errx(1, "sz (%lu) != tests[%d].size (%lu) with in size %lu", + (unsigned long)sz, i, + (unsigned long)tests[i].size, + (unsigned long)buf_sz); + if (buf_sz > 0 && memcmp(buf, tests[i].str, buf_sz - 1) != 0) + errx(1, "test %i wrong result %s vs %s", i, buf, tests[i].str); + if (buf_sz > 0 && buf[buf_sz - 1] != '\0') + errx(1, "test %i not zero terminated", i); + rk_test_mem_free("overrun"); + + buf = rk_test_mem_alloc(RK_TM_UNDERRUN, "underrun", + NULL, tests[i].size); + sz = unparse_time(tests[i].val, buf, buf_sz); + if (sz != tests[i].size) + errx(1, "sz (%lu) != tests[%d].size (%lu) with insize %lu", + (unsigned long)sz, i, + (unsigned long)tests[i].size, + (unsigned long)buf_sz); + if (buf_sz > 0 && strncmp(buf, tests[i].str, buf_sz - 1) != 0) + errx(1, "test %i wrong result %s vs %s", i, buf, tests[i].str); + if (buf_sz > 0 && buf[buf_sz - 1] != '\0') + errx(1, "test %i not zero terminated", i); + rk_test_mem_free("underrun"); + } + buf = rk_test_mem_alloc(RK_TM_OVERRUN, "overrun", + tests[i].str, tests[i].size + 1); + j = parse_time(buf, "s"); + if (j != tests[i].val) + errx(1, "parse_time failed for test %d", i); + rk_test_mem_free("overrun"); + + buf = rk_test_mem_alloc(RK_TM_UNDERRUN, "underrun", + tests[i].str, tests[i].size + 1); + j = parse_time(buf, "s"); + if (j != tests[i].val) + errx(1, "parse_time failed for test %d", i); + rk_test_mem_free("underrun"); + } + return 0; +} diff --git a/crypto/heimdal/lib/roken/parse_time.3 b/crypto/heimdal/lib/roken/parse_time.3 new file mode 100644 index 0000000..f7a801b --- /dev/null +++ b/crypto/heimdal/lib/roken/parse_time.3 @@ -0,0 +1,173 @@ +.\" Copyright (c) 2004 Kungliga Tekniska Högskolan +.\" (Royal Institute of Technology, Stockholm, Sweden). +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" 3. Neither the name of the Institute nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" $Id: parse_time.3 14325 2004-10-30 22:34:28Z lha $ +.\" +.Dd October 31, 2004 +.Dt PARSE_TIME 3 +.Os HEIMDAL +.Sh NAME +.Nm parse_time , +.Nm print_time_table , +.Nm unparse_time , +.Nm unparse_time_approx , +.Nd parse and unparse time intervals +.Sh LIBRARY +The roken library (libroken, -lroken) +.Sh SYNOPSIS +.Fd #include <parse_time.h> +.Ft int +.Fn parse_time "const char *timespec" "const char *def_unit" +.Ft void +.Fn print_time_table "FILE *f" +.Ft size_t +.Fn unparse_time "int seconds" "char *buf" "size_t len" +.Ft size_t +.Fn unparse_time_approx "int seconds" "char *buf" "size_t len" +.Sh DESCRIPTION +The +.Fn parse_time +function converts a the period of time specified in +into a number of seconds. +The +.Fa timespec +can be any number of +.Aq number unit +pairs separated by comma and whitespace. The number can be +negative. Number without explicit units are taken as being +.Fa def_unit . +.Pp +The +.Fn unparse_time +and +.Fn unparse_time_approx +does the opposite of +.Fn parse_time , +that is they take a number of seconds and express that as human +readable string. +.Fa unparse_time +produces an exact time, while +.Fa unparse_time_approx +restricts the result to only include one units. +.Pp +.Fn print_time_table +prints a descriptive list of available units on the passed file +descriptor. +.Pp +The possible units include: +.Bl -tag -width "month" -compact -offset indent +.It Li second , s +.It Li minute , m +.It Li hour , h +.It day +.It week +seven days +.It month +30 days +.It year +365 days +.El +.Pp +Units names can be arbitrarily abbreviated (as long as they are +unique). +.Sh RETURN VALUES +.Fn parse_time +returns the number of seconds that represents the expression in +.Fa timespec +or -1 on error. +.Fn unparse_time +and +.Fn unparse_time_approx +return the number of characters written to +.Fa buf . +if the return value is greater than or equal to the +.Fa len +argument, the string was too short and some of the printed characters +were discarded. +.Sh EXAMPLES +.Bd -literal +#include <stdio.h> +#include <parse_time.h> + +int +main(int argc, char **argv) +{ + int i; + int result; + char buf[128]; + print_time_table(stdout); + for (i = 1; i < argc; i++) { + result = parse_time(argv[i], "second"); + if(result == -1) { + fprintf(stderr, "%s: parse error\\n", argv[i]); + continue; + } + printf("--\\n"); + printf("parse_time = %d\\n", result); + unparse_time(result, buf, sizeof(buf)); + printf("unparse_time = %s\\n", buf); + unparse_time_approx(result, buf, sizeof(buf)); + printf("unparse_time_approx = %s\\n", buf); + } + return 0; +} +.Ed +.Bd -literal +$ ./a.out "1 minute 30 seconds" "90 s" "1 y -1 s" +1 year = 365 days +1 month = 30 days +1 week = 7 days +1 day = 24 hours +1 hour = 60 minutes +1 minute = 60 seconds +1 second +-- +parse_time = 90 +unparse_time = 1 minute 30 seconds +unparse_time_approx = 1 minute +-- +parse_time = 90 +unparse_time = 1 minute 30 seconds +unparse_time_approx = 1 minute +-- +parse_time = 31535999 +unparse_time = 12 months 4 days 23 hours 59 minutes 59 seconds +unparse_time_approx = 12 months +.Ed +.Sh BUGS +Since +.Fn parse_time +returns -1 on error there is no way to parse "minus one second". +Currently "s" at the end of units is ignored. This is a hack for +English plural forms. If these functions are ever localised, this +scheme will have to change. +.\".Sh SEE ALSO +.\".Xr parse_bytes 3 +.\".Xr parse_units 3 diff --git a/crypto/heimdal/lib/roken/parse_time.c b/crypto/heimdal/lib/roken/parse_time.c index deab102..1c39bde 100644 --- a/crypto/heimdal/lib/roken/parse_time.c +++ b/crypto/heimdal/lib/roken/parse_time.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: parse_time.c,v 1.6 2003/03/07 15:51:06 lha Exp $"); +RCSID("$Id: parse_time.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <parse_units.h> @@ -53,25 +53,25 @@ static struct units time_units[] = { {NULL, 0}, }; -int +int ROKEN_LIB_FUNCTION parse_time (const char *s, const char *def_unit) { return parse_units (s, time_units, def_unit); } -size_t +size_t ROKEN_LIB_FUNCTION unparse_time (int t, char *s, size_t len) { return unparse_units (t, time_units, s, len); } -size_t +size_t ROKEN_LIB_FUNCTION unparse_time_approx (int t, char *s, size_t len) { return unparse_units_approx (t, time_units, s, len); } -void +void ROKEN_LIB_FUNCTION print_time_table (FILE *f) { print_units_table (time_units, f); diff --git a/crypto/heimdal/lib/roken/parse_time.h b/crypto/heimdal/lib/roken/parse_time.h index 55de505..4dc2da0 100644 --- a/crypto/heimdal/lib/roken/parse_time.h +++ b/crypto/heimdal/lib/roken/parse_time.h @@ -31,11 +31,19 @@ * SUCH DAMAGE. */ -/* $Id: parse_time.h,v 1.4 1999/12/02 16:58:51 joda Exp $ */ +/* $Id: parse_time.h 14773 2005-04-12 11:29:18Z lha $ */ #ifndef __PARSE_TIME_H__ #define __PARSE_TIME_H__ +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + int parse_time (const char *s, const char *def_unit); diff --git a/crypto/heimdal/lib/roken/parse_units.c b/crypto/heimdal/lib/roken/parse_units.c index 217d55e..1960bec 100644 --- a/crypto/heimdal/lib/roken/parse_units.c +++ b/crypto/heimdal/lib/roken/parse_units.c @@ -33,13 +33,13 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: parse_units.c,v 1.14 2001/09/04 09:56:00 assar Exp $"); +RCSID("$Id: parse_units.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdio.h> #include <ctype.h> #include <string.h> -#include <roken.h> +#include "roken.h" #include "parse_units.h" /* @@ -152,7 +152,7 @@ acc_units(int res, int val, unsigned mult) return res + val * mult; } -int +int ROKEN_LIB_FUNCTION parse_units (const char *s, const struct units *units, const char *def_unit) { @@ -178,7 +178,7 @@ acc_flags(int res, int val, unsigned mult) return -1; } -int +int ROKEN_LIB_FUNCTION parse_flags (const char *s, const struct units *units, int orig) { @@ -192,9 +192,8 @@ parse_flags (const char *s, const struct units *units, static int unparse_something (int num, const struct units *units, char *s, size_t len, - int (*print) (char *s, size_t len, int div, - const char *name, int rem), - int (*update) (int in, unsigned mult), + int (*print) (char *, size_t, int, const char *, int), + int (*update) (int, unsigned), const char *zero_string) { const struct units *u; @@ -204,17 +203,21 @@ unparse_something (int num, const struct units *units, char *s, size_t len, return snprintf (s, len, "%s", zero_string); for (u = units; num > 0 && u->name; ++u) { - int div; + int divisor; - div = num / u->mult; - if (div) { + divisor = num / u->mult; + if (divisor) { num = (*update) (num, u->mult); - tmp = (*print) (s, len, div, u->name, num); + tmp = (*print) (s, len, divisor, u->name, num); if (tmp < 0) return tmp; - - len -= tmp; - s += tmp; + if (tmp > len) { + len = 0; + s = NULL; + } else { + len -= tmp; + s += tmp; + } ret += tmp; } } @@ -222,11 +225,11 @@ unparse_something (int num, const struct units *units, char *s, size_t len, } static int -print_unit (char *s, size_t len, int div, const char *name, int rem) +print_unit (char *s, size_t len, int divisor, const char *name, int rem) { return snprintf (s, len, "%u %s%s%s", - div, name, - div == 1 ? "" : "s", + divisor, name, + divisor == 1 ? "" : "s", rem > 0 ? " " : ""); } @@ -245,7 +248,7 @@ update_unit_approx (int in, unsigned mult) return update_unit (in, mult); } -int +int ROKEN_LIB_FUNCTION unparse_units (int num, const struct units *units, char *s, size_t len) { return unparse_something (num, units, s, len, @@ -254,7 +257,7 @@ unparse_units (int num, const struct units *units, char *s, size_t len) "0"); } -int +int ROKEN_LIB_FUNCTION unparse_units_approx (int num, const struct units *units, char *s, size_t len) { return unparse_something (num, units, s, len, @@ -263,7 +266,7 @@ unparse_units_approx (int num, const struct units *units, char *s, size_t len) "0"); } -void +void ROKEN_LIB_FUNCTION print_units_table (const struct units *units, FILE *f) { const struct units *u, *u2; @@ -297,7 +300,7 @@ print_units_table (const struct units *units, FILE *f) } static int -print_flag (char *s, size_t len, int div, const char *name, int rem) +print_flag (char *s, size_t len, int divisor, const char *name, int rem) { return snprintf (s, len, "%s%s", name, rem > 0 ? ", " : ""); } @@ -308,7 +311,7 @@ update_flag (int in, unsigned mult) return in - mult; } -int +int ROKEN_LIB_FUNCTION unparse_flags (int num, const struct units *units, char *s, size_t len) { return unparse_something (num, units, s, len, @@ -317,7 +320,7 @@ unparse_flags (int num, const struct units *units, char *s, size_t len) ""); } -void +void ROKEN_LIB_FUNCTION print_flags_table (const struct units *units, FILE *f) { const struct units *u; diff --git a/crypto/heimdal/lib/roken/parse_units.h b/crypto/heimdal/lib/roken/parse_units.h index 2002625..a42154d 100644 --- a/crypto/heimdal/lib/roken/parse_units.h +++ b/crypto/heimdal/lib/roken/parse_units.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. */ -/* $Id: parse_units.h,v 1.8 2003/04/16 17:30:54 lha Exp $ */ +/* $Id: parse_units.h 14773 2005-04-12 11:29:18Z lha $ */ #ifndef __PARSE_UNITS_H__ #define __PARSE_UNITS_H__ @@ -39,33 +39,41 @@ #include <stdio.h> #include <stddef.h> +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + struct units { const char *name; unsigned mult; }; -int +int ROKEN_LIB_FUNCTION parse_units (const char *s, const struct units *units, const char *def_unit); -void +void ROKEN_LIB_FUNCTION print_units_table (const struct units *units, FILE *f); -int +int ROKEN_LIB_FUNCTION parse_flags (const char *s, const struct units *units, int orig); -int +int ROKEN_LIB_FUNCTION unparse_units (int num, const struct units *units, char *s, size_t len); -int +int ROKEN_LIB_FUNCTION unparse_units_approx (int num, const struct units *units, char *s, size_t len); -int +int ROKEN_LIB_FUNCTION unparse_flags (int num, const struct units *units, char *s, size_t len); -void +void ROKEN_LIB_FUNCTION print_flags_table (const struct units *units, FILE *f); #endif /* __PARSE_UNITS_H__ */ diff --git a/crypto/heimdal/lib/roken/putenv.c b/crypto/heimdal/lib/roken/putenv.c index a6bdf60..5e501dc 100644 --- a/crypto/heimdal/lib/roken/putenv.c +++ b/crypto/heimdal/lib/roken/putenv.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: putenv.c,v 1.7 2000/03/26 23:08:24 assar Exp $"); +RCSID("$Id: putenv.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <stdlib.h> @@ -48,7 +48,7 @@ extern char **environ; * value by altering an existing variable or creating a new one. */ -int +int ROKEN_LIB_FUNCTION putenv(const char *string) { int i; diff --git a/crypto/heimdal/lib/roken/rcmd.c b/crypto/heimdal/lib/roken/rcmd.c index 4117948..e732fe3 100644 --- a/crypto/heimdal/lib/roken/rcmd.c +++ b/crypto/heimdal/lib/roken/rcmd.c @@ -33,13 +33,13 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: rcmd.c,v 1.3 1999/12/02 16:58:51 joda Exp $"); +RCSID("$Id: rcmd.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" #include <stdio.h> -int +int ROKEN_LIB_FUNCTION rcmd(char **ahost, unsigned short inport, const char *locuser, diff --git a/crypto/heimdal/lib/roken/readv.c b/crypto/heimdal/lib/roken/readv.c index de2f9ea..b49890e 100644 --- a/crypto/heimdal/lib/roken/readv.c +++ b/crypto/heimdal/lib/roken/readv.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: readv.c,v 1.5 1999/12/02 16:58:52 joda Exp $"); +RCSID("$Id: readv.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" -ssize_t +ssize_t ROKEN_LIB_FUNCTION readv(int d, const struct iovec *iov, int iovcnt) { ssize_t ret, nb; diff --git a/crypto/heimdal/lib/roken/realloc.c b/crypto/heimdal/lib/roken/realloc.c new file mode 100644 index 0000000..33e898c --- /dev/null +++ b/crypto/heimdal/lib/roken/realloc.c @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2005 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#undef realloc +#endif +#include <stdlib.h> +#include "roken.h" + +RCSID("$Id"); + + +void * ROKEN_LIB_FUNCTION +rk_realloc(void *ptr, size_t size) +{ + if (ptr == NULL) + return malloc(size); + return realloc(ptr, size); +} diff --git a/crypto/heimdal/lib/roken/recvmsg.c b/crypto/heimdal/lib/roken/recvmsg.c index e94ad68..d92186c 100644 --- a/crypto/heimdal/lib/roken/recvmsg.c +++ b/crypto/heimdal/lib/roken/recvmsg.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: recvmsg.c,v 1.5 1999/12/02 16:58:52 joda Exp $"); +RCSID("$Id: recvmsg.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" -ssize_t +ssize_t ROKEN_LIB_FUNCTION recvmsg(int s, struct msghdr *msg, int flags) { ssize_t ret, nb; diff --git a/crypto/heimdal/lib/roken/resolve-test.c b/crypto/heimdal/lib/roken/resolve-test.c new file mode 100644 index 0000000..106cfd7 --- /dev/null +++ b/crypto/heimdal/lib/roken/resolve-test.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 1995 - 2004 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include "roken.h" +#include "getarg.h" +#ifdef HAVE_ARPA_NAMESER_H +#include <arpa/nameser.h> +#endif +#ifdef HAVE_RESOLV_H +#include <resolv.h> +#endif +#include "resolve.h" + +RCSID("$Id: resolve-test.c 15415 2005-06-16 16:58:45Z lha $"); + +static int version_flag = 0; +static int help_flag = 0; + +static struct getargs args[] = { + {"version", 0, arg_flag, &version_flag, + "print version", NULL }, + {"help", 0, arg_flag, &help_flag, + NULL, NULL } +}; + +static void +usage (int ret) +{ + arg_printusage (args, + sizeof(args)/sizeof(*args), + NULL, + "dns-record resource-record-type"); + exit (ret); +} + +int +main(int argc, char **argv) +{ + struct dns_reply *r; + struct resource_record *rr; + int optidx = 0; + + setprogname (argv[0]); + + if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx)) + usage(1); + + if (help_flag) + usage (0); + + if(version_flag){ + printf("some version\n"); + exit(0); + } + + argc -= optidx; + argv += optidx; + + if (argc != 2) + usage(1); + + r = dns_lookup(argv[0], argv[1]); + if(r == NULL){ + printf("No reply.\n"); + return 1; + } + if(r->q.type == rk_ns_t_srv) + dns_srv_order(r); + + for(rr = r->head; rr;rr=rr->next){ + printf("%-30s %-5s %-6d ", rr->domain, dns_type_to_string(rr->type), rr->ttl); + switch(rr->type){ + case rk_ns_t_ns: + case rk_ns_t_cname: + case rk_ns_t_ptr: + printf("%s\n", (char*)rr->u.data); + break; + case rk_ns_t_a: + printf("%s\n", inet_ntoa(*rr->u.a)); + break; + case rk_ns_t_mx: + case rk_ns_t_afsdb:{ + printf("%d %s\n", rr->u.mx->preference, rr->u.mx->domain); + break; + } + case rk_ns_t_srv:{ + struct srv_record *srv = rr->u.srv; + printf("%d %d %d %s\n", srv->priority, srv->weight, + srv->port, srv->target); + break; + } + case rk_ns_t_txt: { + printf("%s\n", rr->u.txt); + break; + } + case rk_ns_t_sig : { + struct sig_record *sig = rr->u.sig; + const char *type_string = dns_type_to_string (sig->type); + + printf ("type %u (%s), algorithm %u, labels %u, orig_ttl %u, sig_expiration %u, sig_inception %u, key_tag %u, signer %s\n", + sig->type, type_string ? type_string : "", + sig->algorithm, sig->labels, sig->orig_ttl, + sig->sig_expiration, sig->sig_inception, sig->key_tag, + sig->signer); + break; + } + case rk_ns_t_key : { + struct key_record *key = rr->u.key; + + printf ("flags %u, protocol %u, algorithm %u\n", + key->flags, key->protocol, key->algorithm); + break; + } + case rk_ns_t_sshfp : { + struct sshfp_record *sshfp = rr->u.sshfp; + int i; + + printf ("alg %u type %u length %lu data ", sshfp->algorithm, + sshfp->type, (unsigned long)sshfp->sshfp_len); + for (i = 0; i < sshfp->sshfp_len; i++) + printf("%02X", sshfp->sshfp_data[i]); + printf("\n"); + + break; + } + case rk_ns_t_ds : { + struct ds_record *ds = rr->u.ds; + int i; + + printf ("key tag %u alg %u type %u length %u data ", + ds->key_tag, ds->algorithm, ds->digest_type, + ds->digest_len); + for (i = 0; i < ds->digest_len; i++) + printf("%02X", ds->digest_data[i]); + printf("\n"); + + break; + } + default: + printf("\n"); + break; + } + } + + return 0; +} diff --git a/crypto/heimdal/lib/roken/resolve.c b/crypto/heimdal/lib/roken/resolve.c index cdbc069..8f8fec7 100644 --- a/crypto/heimdal/lib/roken/resolve.c +++ b/crypto/heimdal/lib/roken/resolve.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995 - 2003 Kungliga Tekniska Högskolan + * Copyright (c) 1995 - 2006 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -45,35 +45,39 @@ #include <assert.h> -RCSID("$Id: resolve.c,v 1.38.2.1 2003/04/22 15:02:47 lha Exp $"); +RCSID("$Id: resolve.c 19869 2007-01-12 16:03:14Z lha $"); +#ifdef _AIX /* AIX have broken res_nsearch() in 5.1 (5.0 also ?) */ #undef HAVE_RES_NSEARCH -#if (defined(HAVE_RES_SEARCH) || defined(HAVE_RES_NSEARCH)) && defined(HAVE_DN_EXPAND) +#endif -#define DECL(X) {#X, T_##X} +#define DECL(X) {#X, rk_ns_t_##X} static struct stot{ const char *name; int type; }stot[] = { - DECL(A), - DECL(NS), - DECL(CNAME), - DECL(SOA), - DECL(PTR), - DECL(MX), - DECL(TXT), - DECL(AFSDB), - DECL(SIG), - DECL(KEY), - DECL(SRV), - DECL(NAPTR), + DECL(a), + DECL(aaaa), + DECL(ns), + DECL(cname), + DECL(soa), + DECL(ptr), + DECL(mx), + DECL(txt), + DECL(afsdb), + DECL(sig), + DECL(key), + DECL(srv), + DECL(naptr), + DECL(sshfp), + DECL(ds), {NULL, 0} }; int _resolve_debug = 0; -int +int ROKEN_LIB_FUNCTION dns_string_to_type(const char *name) { struct stot *p = stot; @@ -83,7 +87,7 @@ dns_string_to_type(const char *name) return -1; } -const char * +const char * ROKEN_LIB_FUNCTION dns_type_to_string(int type) { struct stot *p = stot; @@ -93,7 +97,19 @@ dns_type_to_string(int type) return NULL; } -void +#if (defined(HAVE_RES_SEARCH) || defined(HAVE_RES_NSEARCH)) && defined(HAVE_DN_EXPAND) + +static void +dns_free_rr(struct resource_record *rr) +{ + if(rr->domain) + free(rr->domain); + if(rr->u.data) + free(rr->u.data); + free(rr); +} + +void ROKEN_LIB_FUNCTION dns_free_data(struct dns_reply *r) { struct resource_record *rr; @@ -101,29 +117,30 @@ dns_free_data(struct dns_reply *r) free(r->q.domain); for(rr = r->head; rr;){ struct resource_record *tmp = rr; - if(rr->domain) - free(rr->domain); - if(rr->u.data) - free(rr->u.data); rr = rr->next; - free(tmp); + dns_free_rr(tmp); } free (r); } static int parse_record(const unsigned char *data, const unsigned char *end_data, - const unsigned char **pp, struct resource_record **rr) + const unsigned char **pp, struct resource_record **ret_rr) { + struct resource_record *rr; int type, class, ttl, size; int status; char host[MAXDNAME]; const unsigned char *p = *pp; + + *ret_rr = NULL; + status = dn_expand(data, end_data, p, host, sizeof(host)); if(status < 0) return -1; if (p + status + 10 > end_data) return -1; + p += status; type = (p[0] << 8) | p[1]; p += 2; @@ -137,198 +154,246 @@ parse_record(const unsigned char *data, const unsigned char *end_data, if (p + size > end_data) return -1; - *rr = calloc(1, sizeof(**rr)); - if(*rr == NULL) + rr = calloc(1, sizeof(*rr)); + if(rr == NULL) return -1; - (*rr)->domain = strdup(host); - if((*rr)->domain == NULL) { - free(*rr); + rr->domain = strdup(host); + if(rr->domain == NULL) { + dns_free_rr(rr); return -1; } - (*rr)->type = type; - (*rr)->class = class; - (*rr)->ttl = ttl; - (*rr)->size = size; + rr->type = type; + rr->class = class; + rr->ttl = ttl; + rr->size = size; switch(type){ - case T_NS: - case T_CNAME: - case T_PTR: + case rk_ns_t_ns: + case rk_ns_t_cname: + case rk_ns_t_ptr: status = dn_expand(data, end_data, p, host, sizeof(host)); if(status < 0) { - free(*rr); + dns_free_rr(rr); return -1; } - (*rr)->u.txt = strdup(host); - if((*rr)->u.txt == NULL) { - free(*rr); + rr->u.txt = strdup(host); + if(rr->u.txt == NULL) { + dns_free_rr(rr); return -1; } break; - case T_MX: - case T_AFSDB:{ + case rk_ns_t_mx: + case rk_ns_t_afsdb:{ size_t hostlen; status = dn_expand(data, end_data, p + 2, host, sizeof(host)); if(status < 0){ - free(*rr); + dns_free_rr(rr); return -1; } if (status + 2 > size) { - free(*rr); + dns_free_rr(rr); return -1; } hostlen = strlen(host); - (*rr)->u.mx = (struct mx_record*)malloc(sizeof(struct mx_record) + + rr->u.mx = (struct mx_record*)malloc(sizeof(struct mx_record) + hostlen); - if((*rr)->u.mx == NULL) { - free(*rr); + if(rr->u.mx == NULL) { + dns_free_rr(rr); return -1; } - (*rr)->u.mx->preference = (p[0] << 8) | p[1]; - strlcpy((*rr)->u.mx->domain, host, hostlen + 1); + rr->u.mx->preference = (p[0] << 8) | p[1]; + strlcpy(rr->u.mx->domain, host, hostlen + 1); break; } - case T_SRV:{ + case rk_ns_t_srv:{ size_t hostlen; status = dn_expand(data, end_data, p + 6, host, sizeof(host)); if(status < 0){ - free(*rr); + dns_free_rr(rr); return -1; } if (status + 6 > size) { - free(*rr); + dns_free_rr(rr); return -1; } hostlen = strlen(host); - (*rr)->u.srv = + rr->u.srv = (struct srv_record*)malloc(sizeof(struct srv_record) + hostlen); - if((*rr)->u.srv == NULL) { - free(*rr); + if(rr->u.srv == NULL) { + dns_free_rr(rr); return -1; } - (*rr)->u.srv->priority = (p[0] << 8) | p[1]; - (*rr)->u.srv->weight = (p[2] << 8) | p[3]; - (*rr)->u.srv->port = (p[4] << 8) | p[5]; - strlcpy((*rr)->u.srv->target, host, hostlen + 1); + rr->u.srv->priority = (p[0] << 8) | p[1]; + rr->u.srv->weight = (p[2] << 8) | p[3]; + rr->u.srv->port = (p[4] << 8) | p[5]; + strlcpy(rr->u.srv->target, host, hostlen + 1); break; } - case T_TXT:{ + case rk_ns_t_txt:{ if(size == 0 || size < *p + 1) { - free(*rr); + dns_free_rr(rr); return -1; } - (*rr)->u.txt = (char*)malloc(*p + 1); - if((*rr)->u.txt == NULL) { - free(*rr); + rr->u.txt = (char*)malloc(*p + 1); + if(rr->u.txt == NULL) { + dns_free_rr(rr); return -1; } - strncpy((*rr)->u.txt, (char*)p + 1, *p); - (*rr)->u.txt[*p] = '\0'; + strncpy(rr->u.txt, (const char*)(p + 1), *p); + rr->u.txt[*p] = '\0'; break; } - case T_KEY : { + case rk_ns_t_key : { size_t key_len; if (size < 4) { - free(*rr); + dns_free_rr(rr); return -1; } key_len = size - 4; - (*rr)->u.key = malloc (sizeof(*(*rr)->u.key) + key_len - 1); - if ((*rr)->u.key == NULL) { - free(*rr); + rr->u.key = malloc (sizeof(*rr->u.key) + key_len - 1); + if (rr->u.key == NULL) { + dns_free_rr(rr); return -1; } - (*rr)->u.key->flags = (p[0] << 8) | p[1]; - (*rr)->u.key->protocol = p[2]; - (*rr)->u.key->algorithm = p[3]; - (*rr)->u.key->key_len = key_len; - memcpy ((*rr)->u.key->key_data, p + 4, key_len); + rr->u.key->flags = (p[0] << 8) | p[1]; + rr->u.key->protocol = p[2]; + rr->u.key->algorithm = p[3]; + rr->u.key->key_len = key_len; + memcpy (rr->u.key->key_data, p + 4, key_len); break; } - case T_SIG : { + case rk_ns_t_sig : { size_t sig_len, hostlen; if(size <= 18) { - free(*rr); + dns_free_rr(rr); return -1; } status = dn_expand (data, end_data, p + 18, host, sizeof(host)); if (status < 0) { - free(*rr); + dns_free_rr(rr); return -1; } if (status + 18 > size) { - free(*rr); + dns_free_rr(rr); return -1; } /* the signer name is placed after the sig_data, to make it - easy to free this struture; the size calculation below + easy to free this structure; the size calculation below includes the zero-termination if the structure itself. don't you just love C? */ sig_len = size - 18 - status; hostlen = strlen(host); - (*rr)->u.sig = malloc(sizeof(*(*rr)->u.sig) + rr->u.sig = malloc(sizeof(*rr->u.sig) + hostlen + sig_len); - if ((*rr)->u.sig == NULL) { - free(*rr); + if (rr->u.sig == NULL) { + dns_free_rr(rr); return -1; } - (*rr)->u.sig->type = (p[0] << 8) | p[1]; - (*rr)->u.sig->algorithm = p[2]; - (*rr)->u.sig->labels = p[3]; - (*rr)->u.sig->orig_ttl = (p[4] << 24) | (p[5] << 16) + rr->u.sig->type = (p[0] << 8) | p[1]; + rr->u.sig->algorithm = p[2]; + rr->u.sig->labels = p[3]; + rr->u.sig->orig_ttl = (p[4] << 24) | (p[5] << 16) | (p[6] << 8) | p[7]; - (*rr)->u.sig->sig_expiration = (p[8] << 24) | (p[9] << 16) + rr->u.sig->sig_expiration = (p[8] << 24) | (p[9] << 16) | (p[10] << 8) | p[11]; - (*rr)->u.sig->sig_inception = (p[12] << 24) | (p[13] << 16) + rr->u.sig->sig_inception = (p[12] << 24) | (p[13] << 16) | (p[14] << 8) | p[15]; - (*rr)->u.sig->key_tag = (p[16] << 8) | p[17]; - (*rr)->u.sig->sig_len = sig_len; - memcpy ((*rr)->u.sig->sig_data, p + 18 + status, sig_len); - (*rr)->u.sig->signer = &(*rr)->u.sig->sig_data[sig_len]; - strlcpy((*rr)->u.sig->signer, host, hostlen + 1); + rr->u.sig->key_tag = (p[16] << 8) | p[17]; + rr->u.sig->sig_len = sig_len; + memcpy (rr->u.sig->sig_data, p + 18 + status, sig_len); + rr->u.sig->signer = &rr->u.sig->sig_data[sig_len]; + strlcpy(rr->u.sig->signer, host, hostlen + 1); break; } - case T_CERT : { + case rk_ns_t_cert : { size_t cert_len; if (size < 5) { - free(*rr); + dns_free_rr(rr); return -1; } cert_len = size - 5; - (*rr)->u.cert = malloc (sizeof(*(*rr)->u.cert) + cert_len - 1); - if ((*rr)->u.cert == NULL) { - free(*rr); + rr->u.cert = malloc (sizeof(*rr->u.cert) + cert_len - 1); + if (rr->u.cert == NULL) { + dns_free_rr(rr); return -1; } - (*rr)->u.cert->type = (p[0] << 8) | p[1]; - (*rr)->u.cert->tag = (p[2] << 8) | p[3]; - (*rr)->u.cert->algorithm = p[4]; - (*rr)->u.cert->cert_len = cert_len; - memcpy ((*rr)->u.cert->cert_data, p + 5, cert_len); + rr->u.cert->type = (p[0] << 8) | p[1]; + rr->u.cert->tag = (p[2] << 8) | p[3]; + rr->u.cert->algorithm = p[4]; + rr->u.cert->cert_len = cert_len; + memcpy (rr->u.cert->cert_data, p + 5, cert_len); + break; + } + case rk_ns_t_sshfp : { + size_t sshfp_len; + + if (size < 2) { + dns_free_rr(rr); + return -1; + } + + sshfp_len = size - 2; + + rr->u.sshfp = malloc (sizeof(*rr->u.sshfp) + sshfp_len - 1); + if (rr->u.sshfp == NULL) { + dns_free_rr(rr); + return -1; + } + + rr->u.sshfp->algorithm = p[0]; + rr->u.sshfp->type = p[1]; + rr->u.sshfp->sshfp_len = sshfp_len; + memcpy (rr->u.sshfp->sshfp_data, p + 2, sshfp_len); + break; + } + case rk_ns_t_ds: { + size_t digest_len; + + if (size < 4) { + dns_free_rr(rr); + return -1; + } + + digest_len = size - 4; + + rr->u.ds = malloc (sizeof(*rr->u.ds) + digest_len - 1); + if (rr->u.ds == NULL) { + dns_free_rr(rr); + return -1; + } + + rr->u.ds->key_tag = (p[0] << 8) | p[1]; + rr->u.ds->algorithm = p[2]; + rr->u.ds->digest_type = p[3]; + rr->u.ds->digest_len = digest_len; + memcpy (rr->u.ds->digest_data, p + 4, digest_len); break; } default: - (*rr)->u.data = (unsigned char*)malloc(size); - if(size != 0 && (*rr)->u.data == NULL) { - free(*rr); + rr->u.data = (unsigned char*)malloc(size); + if(size != 0 && rr->u.data == NULL) { + dns_free_rr(rr); return -1; } - memcpy((*rr)->u.data, p, size); + if (size) + memcpy(rr->u.data, p, size); } *pp = p + size; + *ret_rr = rr; + return 0; } @@ -351,15 +416,33 @@ parse_reply(const unsigned char *data, size_t len) return NULL; p = data; -#if 0 - /* doesn't work on Crays */ - memcpy(&r->h, p, sizeof(HEADER)); - p += sizeof(HEADER); -#else - memcpy(&r->h, p, 12); /* XXX this will probably be mostly garbage */ + + r->h.id = (p[0] << 8) | p[1]; + r->h.flags = 0; + if (p[2] & 0x01) + r->h.flags |= rk_DNS_HEADER_RESPONSE_FLAG; + r->h.opcode = (p[2] >> 1) & 0xf; + if (p[2] & 0x20) + r->h.flags |= rk_DNS_HEADER_AUTHORITIVE_ANSWER; + if (p[2] & 0x40) + r->h.flags |= rk_DNS_HEADER_TRUNCATED_MESSAGE; + if (p[2] & 0x80) + r->h.flags |= rk_DNS_HEADER_RECURSION_DESIRED; + if (p[3] & 0x01) + r->h.flags |= rk_DNS_HEADER_RECURSION_AVAILABLE; + if (p[3] & 0x04) + r->h.flags |= rk_DNS_HEADER_AUTHORITIVE_ANSWER; + if (p[3] & 0x08) + r->h.flags |= rk_DNS_HEADER_CHECKING_DISABLED; + r->h.response_code = (p[3] >> 4) & 0xf; + r->h.qdcount = (p[4] << 8) | p[5]; + r->h.ancount = (p[6] << 8) | p[7]; + r->h.nscount = (p[8] << 8) | p[9]; + r->h.arcount = (p[10] << 8) | p[11]; + p += 12; -#endif - if(ntohs(r->h.qdcount) != 1) { + + if(r->h.qdcount != 1) { free(r); return NULL; } @@ -384,21 +467,21 @@ parse_reply(const unsigned char *data, size_t len) p += 2; rr = &r->head; - for(i = 0; i < ntohs(r->h.ancount); i++) { + for(i = 0; i < r->h.ancount; i++) { if(parse_record(data, end_data, &p, rr) != 0) { dns_free_data(r); return NULL; } rr = &(*rr)->next; } - for(i = 0; i < ntohs(r->h.nscount); i++) { + for(i = 0; i < r->h.nscount; i++) { if(parse_record(data, end_data, &p, rr) != 0) { dns_free_data(r); return NULL; } rr = &(*rr)->next; } - for(i = 0; i < ntohs(r->h.arcount); i++) { + for(i = 0; i < r->h.arcount; i++) { if(parse_record(data, end_data, &p, rr) != 0) { dns_free_data(r); return NULL; @@ -409,54 +492,87 @@ parse_reply(const unsigned char *data, size_t len) return r; } +#ifdef HAVE_RES_NSEARCH +#ifdef HAVE_RES_NDESTROY +#define rk_res_free(x) res_ndestroy(x) +#else +#define rk_res_free(x) res_nclose(x) +#endif +#endif + static struct dns_reply * dns_lookup_int(const char *domain, int rr_class, int rr_type) { - unsigned char reply[1024]; + struct dns_reply *r; + unsigned char *reply = NULL; + int size; int len; #ifdef HAVE_RES_NSEARCH - struct __res_state stat; - memset(&stat, 0, sizeof(stat)); - if(res_ninit(&stat)) + struct __res_state state; + memset(&state, 0, sizeof(state)); + if(res_ninit(&state)) return NULL; /* is this the best we can do? */ #elif defined(HAVE__RES) u_long old_options = 0; #endif - if (_resolve_debug) { + size = 0; + len = 1000; + do { + if (reply) { + free(reply); + reply = NULL; + } + if (size <= len) + size = len; + if (_resolve_debug) { #ifdef HAVE_RES_NSEARCH - stat.options |= RES_DEBUG; + state.options |= RES_DEBUG; #elif defined(HAVE__RES) - old_options = _res.options; - _res.options |= RES_DEBUG; + old_options = _res.options; + _res.options |= RES_DEBUG; #endif - fprintf(stderr, "dns_lookup(%s, %d, %s)\n", domain, - rr_class, dns_type_to_string(rr_type)); - } + fprintf(stderr, "dns_lookup(%s, %d, %s), buffer size %d\n", domain, + rr_class, dns_type_to_string(rr_type), size); + } + reply = malloc(size); + if (reply == NULL) { +#ifdef HAVE_RES_NSEARCH + rk_res_free(&state); +#endif + return NULL; + } #ifdef HAVE_RES_NSEARCH - len = res_nsearch(&stat, domain, rr_class, rr_type, reply, sizeof(reply)); + len = res_nsearch(&state, domain, rr_class, rr_type, reply, size); #else - len = res_search(domain, rr_class, rr_type, reply, sizeof(reply)); + len = res_search(domain, rr_class, rr_type, reply, size); #endif - if (_resolve_debug) { + if (_resolve_debug) { #if defined(HAVE__RES) && !defined(HAVE_RES_NSEARCH) - _res.options = old_options; + _res.options = old_options; #endif - fprintf(stderr, "dns_lookup(%s, %d, %s) --> %d\n", - domain, rr_class, dns_type_to_string(rr_type), len); - } + fprintf(stderr, "dns_lookup(%s, %d, %s) --> %d\n", + domain, rr_class, dns_type_to_string(rr_type), len); + } + if (len < 0) { #ifdef HAVE_RES_NSEARCH - res_nclose(&stat); -#endif - if(len < 0) { - return NULL; - } else { - len = min(len, sizeof(reply)); - return parse_reply(reply, len); - } + rk_res_free(&state); +#endif + free(reply); + return NULL; + } + } while (size < len && len < rk_DNS_MAX_PACKET_SIZE); +#ifdef HAVE_RES_NSEARCH + rk_res_free(&state); +#endif + + len = min(len, size); + r = parse_reply(reply, len); + free(reply); + return r; } -struct dns_reply * +struct dns_reply * ROKEN_LIB_FUNCTION dns_lookup(const char *domain, const char *type_name) { int type; @@ -486,7 +602,7 @@ compare_srv(const void *a, const void *b) #endif /* try to rearrange the srv-records by the algorithm in RFC2782 */ -void +void ROKEN_LIB_FUNCTION dns_srv_order(struct dns_reply *r) { struct resource_record **srvs, **ss, **headp; @@ -499,7 +615,7 @@ dns_srv_order(struct dns_reply *r) #endif for(rr = r->head; rr; rr = rr->next) - if(rr->type == T_SRV) + if(rr->type == rk_ns_t_srv) num_srv++; if(num_srv == 0) @@ -512,7 +628,7 @@ dns_srv_order(struct dns_reply *r) /* unlink all srv-records from the linked list and put them in a vector */ for(ss = srvs, headp = &r->head; *headp; ) - if((*headp)->type == T_SRV) { + if((*headp)->type == rk_ns_t_srv) { *ss = *headp; *headp = (*headp)->next; (*ss)->next = NULL; @@ -535,8 +651,7 @@ dns_srv_order(struct dns_reply *r) /* find the last record with the same priority and count the sum of all weights */ for(sum = 0, tt = ss; tt < srvs + num_srv; tt++) { - if(*tt == NULL) - continue; + assert(*tt != NULL); if((*tt)->u.srv->priority != (*ss)->u.srv->priority) break; sum += (*tt)->u.srv->weight; @@ -577,88 +692,20 @@ dns_srv_order(struct dns_reply *r) #else /* NOT defined(HAVE_RES_SEARCH) && defined(HAVE_DN_EXPAND) */ -struct dns_reply * +struct dns_reply * ROKEN_LIB_FUNCTION dns_lookup(const char *domain, const char *type_name) { return NULL; } -void +void ROKEN_LIB_FUNCTION dns_free_data(struct dns_reply *r) { } -void +void ROKEN_LIB_FUNCTION dns_srv_order(struct dns_reply *r) { } #endif - -#ifdef TEST -int -main(int argc, char **argv) -{ - struct dns_reply *r; - struct resource_record *rr; - r = dns_lookup(argv[1], argv[2]); - if(r == NULL){ - printf("No reply.\n"); - return 1; - } - if(r->q.type == T_SRV) - dns_srv_order(r); - - for(rr = r->head; rr;rr=rr->next){ - printf("%-30s %-5s %-6d ", rr->domain, dns_type_to_string(rr->type), rr->ttl); - switch(rr->type){ - case T_NS: - case T_CNAME: - case T_PTR: - printf("%s\n", (char*)rr->u.data); - break; - case T_A: - printf("%s\n", inet_ntoa(*rr->u.a)); - break; - case T_MX: - case T_AFSDB:{ - printf("%d %s\n", rr->u.mx->preference, rr->u.mx->domain); - break; - } - case T_SRV:{ - struct srv_record *srv = rr->u.srv; - printf("%d %d %d %s\n", srv->priority, srv->weight, - srv->port, srv->target); - break; - } - case T_TXT: { - printf("%s\n", rr->u.txt); - break; - } - case T_SIG : { - struct sig_record *sig = rr->u.sig; - const char *type_string = dns_type_to_string (sig->type); - - printf ("type %u (%s), algorithm %u, labels %u, orig_ttl %u, sig_expiration %u, sig_inception %u, key_tag %u, signer %s\n", - sig->type, type_string ? type_string : "", - sig->algorithm, sig->labels, sig->orig_ttl, - sig->sig_expiration, sig->sig_inception, sig->key_tag, - sig->signer); - break; - } - case T_KEY : { - struct key_record *key = rr->u.key; - - printf ("flags %u, protocol %u, algorithm %u\n", - key->flags, key->protocol, key->algorithm); - break; - } - default: - printf("\n"); - break; - } - } - - return 0; -} -#endif diff --git a/crypto/heimdal/lib/roken/resolve.h b/crypto/heimdal/lib/roken/resolve.h index cb25b7a..fe83115 100644 --- a/crypto/heimdal/lib/roken/resolve.h +++ b/crypto/heimdal/lib/roken/resolve.h @@ -31,13 +31,100 @@ * SUCH DAMAGE. */ -/* $Id: resolve.h,v 1.15 2002/08/26 13:30:16 assar Exp $ */ +/* $Id: resolve.h 14773 2005-04-12 11:29:18Z lha $ */ #ifndef __RESOLVE_H__ #define __RESOLVE_H__ +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + +typedef enum { + rk_ns_t_invalid = 0, /* Cookie. */ + rk_ns_t_a = 1, /* Host address. */ + rk_ns_t_ns = 2, /* Authoritative server. */ + rk_ns_t_md = 3, /* Mail destination. */ + rk_ns_t_mf = 4, /* Mail forwarder. */ + rk_ns_t_cname = 5, /* Canonical name. */ + rk_ns_t_soa = 6, /* Start of authority zone. */ + rk_ns_t_mb = 7, /* Mailbox domain name. */ + rk_ns_t_mg = 8, /* Mail group member. */ + rk_ns_t_mr = 9, /* Mail rename name. */ + rk_ns_t_null = 10, /* Null resource record. */ + rk_ns_t_wks = 11, /* Well known service. */ + rk_ns_t_ptr = 12, /* Domain name pointer. */ + rk_ns_t_hinfo = 13, /* Host information. */ + rk_ns_t_minfo = 14, /* Mailbox information. */ + rk_ns_t_mx = 15, /* Mail routing information. */ + rk_ns_t_txt = 16, /* Text strings. */ + rk_ns_t_rp = 17, /* Responsible person. */ + rk_ns_t_afsdb = 18, /* AFS cell database. */ + rk_ns_t_x25 = 19, /* X_25 calling address. */ + rk_ns_t_isdn = 20, /* ISDN calling address. */ + rk_ns_t_rt = 21, /* Router. */ + rk_ns_t_nsap = 22, /* NSAP address. */ + rk_ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */ + rk_ns_t_sig = 24, /* Security signature. */ + rk_ns_t_key = 25, /* Security key. */ + rk_ns_t_px = 26, /* X.400 mail mapping. */ + rk_ns_t_gpos = 27, /* Geographical position (withdrawn). */ + rk_ns_t_aaaa = 28, /* Ip6 Address. */ + rk_ns_t_loc = 29, /* Location Information. */ + rk_ns_t_nxt = 30, /* Next domain (security). */ + rk_ns_t_eid = 31, /* Endpoint identifier. */ + rk_ns_t_nimloc = 32, /* Nimrod Locator. */ + rk_ns_t_srv = 33, /* Server Selection. */ + rk_ns_t_atma = 34, /* ATM Address */ + rk_ns_t_naptr = 35, /* Naming Authority PoinTeR */ + rk_ns_t_kx = 36, /* Key Exchange */ + rk_ns_t_cert = 37, /* Certification record */ + rk_ns_t_a6 = 38, /* IPv6 address (deprecates AAAA) */ + rk_ns_t_dname = 39, /* Non-terminal DNAME (for IPv6) */ + rk_ns_t_sink = 40, /* Kitchen sink (experimentatl) */ + rk_ns_t_opt = 41, /* EDNS0 option (meta-RR) */ + rk_ns_t_apl = 42, /* Address prefix list (RFC 3123) */ + rk_ns_t_ds = 43, /* Delegation Signer (RFC 3658) */ + rk_ns_t_sshfp = 44, /* SSH fingerprint */ + rk_ns_t_tkey = 249, /* Transaction key */ + rk_ns_t_tsig = 250, /* Transaction signature. */ + rk_ns_t_ixfr = 251, /* Incremental zone transfer. */ + rk_ns_t_axfr = 252, /* Transfer zone of authority. */ + rk_ns_t_mailb = 253, /* Transfer mailbox records. */ + rk_ns_t_maila = 254, /* Transfer mail agent records. */ + rk_ns_t_any = 255, /* Wildcard match. */ + rk_ns_t_zxfr = 256, /* BIND-specific, nonstandard. */ + rk_ns_t_max = 65536 +} rk_ns_type; + /* We use these, but they are not always present in <arpa/nameser.h> */ +#ifndef C_IN +#define C_IN 1 +#endif + +#ifndef T_A +#define T_A 1 +#endif +#ifndef T_NS +#define T_NS 2 +#endif +#ifndef T_CNAME +#define T_CNAME 5 +#endif +#ifndef T_SOA +#define T_SOA 5 +#endif +#ifndef T_PTR +#define T_PTR 12 +#endif +#ifndef T_MX +#define T_MX 15 +#endif #ifndef T_TXT #define T_TXT 16 #endif @@ -62,6 +149,13 @@ #ifndef T_CERT #define T_CERT 37 #endif +#ifndef T_SSHFP +#define T_SSHFP 44 +#endif + +#ifndef MAXDNAME +#define MAXDNAME 1025 +#endif #define dns_query rk_dns_query #define mx_record rk_mx_record @@ -69,6 +163,7 @@ #define key_record rk_key_record #define sig_record rk_sig_record #define cert_record rk_cert_record +#define sshfp_record rk_sshfp_record #define resource_record rk_resource_record #define dns_reply rk_dns_reply @@ -125,6 +220,21 @@ struct cert_record { u_char cert_data[1]; }; +struct sshfp_record { + unsigned algorithm; + unsigned type; + size_t sshfp_len; + u_char sshfp_data[1]; +}; + +struct ds_record { + unsigned key_tag; + unsigned algorithm; + unsigned digest_type; + unsigned digest_len; + u_char digest_data[1]; +}; + struct resource_record{ char *domain; unsigned type; @@ -141,25 +251,48 @@ struct resource_record{ struct key_record *key; struct cert_record *cert; struct sig_record *sig; + struct sshfp_record *sshfp; + struct ds_record *ds; }u; struct resource_record *next; }; -#ifndef T_A /* XXX if <arpa/nameser.h> isn't included */ -typedef int HEADER; /* will never be used */ -#endif +#define rk_DNS_MAX_PACKET_SIZE 0xffff + +struct dns_header { + unsigned id; + unsigned flags; +#define rk_DNS_HEADER_RESPONSE_FLAG 1 +#define rk_DNS_HEADER_AUTHORITIVE_ANSWER 2 +#define rk_DNS_HEADER_TRUNCATED_MESSAGE 4 +#define rk_DNS_HEADER_RECURSION_DESIRED 8 +#define rk_DNS_HEADER_RECURSION_AVAILABLE 16 +#define rk_DNS_HEADER_AUTHENTIC_DATA 32 +#define rk_DNS_HEADER_CHECKING_DISABLED 64 + unsigned opcode; + unsigned response_code; + unsigned qdcount; + unsigned ancount; + unsigned nscount; + unsigned arcount; +}; struct dns_reply{ - HEADER h; + struct dns_header h; struct dns_query q; struct resource_record *head; }; -struct dns_reply* dns_lookup(const char *, const char *); -void dns_free_data(struct dns_reply *); -int dns_string_to_type(const char *name); -const char *dns_type_to_string(int type); -void dns_srv_order(struct dns_reply*); +struct dns_reply* ROKEN_LIB_FUNCTION + dns_lookup(const char *, const char *); +void ROKEN_LIB_FUNCTION + dns_free_data(struct dns_reply *); +int ROKEN_LIB_FUNCTION + dns_string_to_type(const char *name); +const char *ROKEN_LIB_FUNCTION + dns_type_to_string(int type); +void ROKEN_LIB_FUNCTION + dns_srv_order(struct dns_reply*); #endif /* __RESOLVE_H__ */ diff --git a/crypto/heimdal/lib/roken/roken-common.h b/crypto/heimdal/lib/roken/roken-common.h index 6f6d6cc..b835e88 100644 --- a/crypto/heimdal/lib/roken/roken-common.h +++ b/crypto/heimdal/lib/roken/roken-common.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995 - 2002 Kungliga Tekniska Högskolan + * Copyright (c) 1995 - 2005 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -31,11 +31,19 @@ * SUCH DAMAGE. */ -/* $Id: roken-common.h,v 1.51.6.1 2004/01/15 18:15:05 lha Exp $ */ +/* $Id: roken-common.h 20867 2007-06-03 21:00:45Z lha $ */ #ifndef __ROKEN_COMMON_H__ #define __ROKEN_COMMON_H__ +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + #ifdef __cplusplus #define ROKEN_CPP_START extern "C" { #define ROKEN_CPP_END } @@ -259,80 +267,139 @@ SigAction signal(int iSig, SigAction pAction); /* BSD compatible */ #endif #endif -int ROKEN_LIB_FUNCTION simple_execve(const char*, char*const[], char*const[]); -int ROKEN_LIB_FUNCTION simple_execvp(const char*, char *const[]); -int ROKEN_LIB_FUNCTION simple_execlp(const char*, ...); -int ROKEN_LIB_FUNCTION simple_execle(const char*, ...); -int ROKEN_LIB_FUNCTION simple_execl(const char *file, ...); +int ROKEN_LIB_FUNCTION +simple_execve(const char*, char*const[], char*const[]); + +int ROKEN_LIB_FUNCTION +simple_execve_timed(const char *, char *const[], + char *const [], time_t (*)(void *), + void *, time_t); +int ROKEN_LIB_FUNCTION +simple_execvp(const char*, char *const[]); + +int ROKEN_LIB_FUNCTION +simple_execvp_timed(const char *, char *const[], + time_t (*)(void *), void *, time_t); +int ROKEN_LIB_FUNCTION +simple_execlp(const char*, ...); -int ROKEN_LIB_FUNCTION wait_for_process(pid_t); -int ROKEN_LIB_FUNCTION pipe_execv(FILE**, FILE**, FILE**, const char*, ...); +int ROKEN_LIB_FUNCTION +simple_execle(const char*, ...); -void ROKEN_LIB_FUNCTION print_version(const char *); +int ROKEN_LIB_FUNCTION +simple_execl(const char *file, ...); -ssize_t ROKEN_LIB_FUNCTION eread (int fd, void *buf, size_t nbytes); -ssize_t ROKEN_LIB_FUNCTION ewrite (int fd, const void *buf, size_t nbytes); +int ROKEN_LIB_FUNCTION +wait_for_process(pid_t); + +int ROKEN_LIB_FUNCTION +wait_for_process_timed(pid_t, time_t (*)(void *), + void *, time_t); +int ROKEN_LIB_FUNCTION +pipe_execv(FILE**, FILE**, FILE**, const char*, ...); + +void ROKEN_LIB_FUNCTION +print_version(const char *); + +ssize_t ROKEN_LIB_FUNCTION +eread (int fd, void *buf, size_t nbytes); + +ssize_t ROKEN_LIB_FUNCTION +ewrite (int fd, const void *buf, size_t nbytes); struct hostent; -const char * -hostent_find_fqdn (const struct hostent *he); +const char * ROKEN_LIB_FUNCTION +hostent_find_fqdn (const struct hostent *); + +void ROKEN_LIB_FUNCTION +esetenv(const char *, const char *, int); -void -esetenv(const char *var, const char *val, int rewrite); +void ROKEN_LIB_FUNCTION +socket_set_address_and_port (struct sockaddr *, const void *, int); -void -socket_set_address_and_port (struct sockaddr *sa, const void *ptr, int port); +size_t ROKEN_LIB_FUNCTION +socket_addr_size (const struct sockaddr *); -size_t -socket_addr_size (const struct sockaddr *sa); +void ROKEN_LIB_FUNCTION +socket_set_any (struct sockaddr *, int); -void -socket_set_any (struct sockaddr *sa, int af); +size_t ROKEN_LIB_FUNCTION +socket_sockaddr_size (const struct sockaddr *); -size_t -socket_sockaddr_size (const struct sockaddr *sa); +void * ROKEN_LIB_FUNCTION +socket_get_address (struct sockaddr *); -void * -socket_get_address (struct sockaddr *sa); +int ROKEN_LIB_FUNCTION +socket_get_port (const struct sockaddr *); -int -socket_get_port (const struct sockaddr *sa); +void ROKEN_LIB_FUNCTION +socket_set_port (struct sockaddr *, int); -void -socket_set_port (struct sockaddr *sa, int port); +void ROKEN_LIB_FUNCTION +socket_set_portrange (int, int, int); -void -socket_set_portrange (int sock, int restr, int af); +void ROKEN_LIB_FUNCTION +socket_set_debug (int); -void -socket_set_debug (int sock); +void ROKEN_LIB_FUNCTION +socket_set_tos (int, int); -void -socket_set_tos (int sock, int tos); +void ROKEN_LIB_FUNCTION +socket_set_reuseaddr (int, int); -void -socket_set_reuseaddr (int sock, int val); +void ROKEN_LIB_FUNCTION +socket_set_ipv6only (int, int); -char ** +char ** ROKEN_LIB_FUNCTION vstrcollect(va_list *ap); -char ** +char ** ROKEN_LIB_FUNCTION strcollect(char *first, ...); -void timevalfix(struct timeval *t1); -void timevaladd(struct timeval *t1, const struct timeval *t2); -void timevalsub(struct timeval *t1, const struct timeval *t2); +void ROKEN_LIB_FUNCTION +timevalfix(struct timeval *t1); -char *pid_file_write (const char *progname); -void pid_file_delete (char **); +void ROKEN_LIB_FUNCTION +timevaladd(struct timeval *t1, const struct timeval *t2); -int +void ROKEN_LIB_FUNCTION +timevalsub(struct timeval *t1, const struct timeval *t2); + +char *ROKEN_LIB_FUNCTION +pid_file_write (const char *progname); + +void ROKEN_LIB_FUNCTION +pid_file_delete (char **); + +int ROKEN_LIB_FUNCTION read_environment(const char *file, char ***env); -void warnerr(int doerrno, const char *fmt, va_list ap) +void ROKEN_LIB_FUNCTION +free_environment(char **); + +void ROKEN_LIB_FUNCTION +warnerr(int doerrno, const char *fmt, va_list ap) __attribute__ ((format (printf, 2, 0))); +void * ROKEN_LIB_FUNCTION +rk_realloc(void *, size_t); + +struct rk_strpool; + +char * ROKEN_LIB_FUNCTION +rk_strpoolcollect(struct rk_strpool *); + +struct rk_strpool * ROKEN_LIB_FUNCTION +rk_strpoolprintf(struct rk_strpool *, const char *, ...) + __attribute__ ((format (printf, 2, 3))); + +void ROKEN_LIB_FUNCTION +rk_strpoolfree(struct rk_strpool *); + +void ROKEN_LIB_FUNCTION +rk_dumpdata (const char *, const void *, size_t); + ROKEN_CPP_END #endif /* __ROKEN_COMMON_H__ */ diff --git a/crypto/heimdal/lib/roken/roken.awk b/crypto/heimdal/lib/roken/roken.awk index 1c1e0c0..e0c19d7 100644 --- a/crypto/heimdal/lib/roken/roken.awk +++ b/crypto/heimdal/lib/roken/roken.awk @@ -1,4 +1,4 @@ -# $Id: roken.awk,v 1.9 2003/03/04 10:37:26 lha Exp $ +# $Id: roken.awk 15409 2005-06-16 16:29:58Z lha $ BEGIN { print "#ifdef HAVE_CONFIG_H" @@ -15,7 +15,7 @@ BEGIN { print "puts(\"\");" } -$1 == "\#ifdef" || $1 == "\#ifndef" || $1 == "\#if" || $1 == "\#else" || $1 == "\#elif" || $1 == "\#endif" || $1 == "#ifdef" || $1 == "#ifndef" || $1 == "#if" || $1 == "#else" || $1 == "#elif" || $1 == "#endif" { +$1 == "#ifdef" || $1 == "#ifndef" || $1 == "#if" || $1 == "#else" || $1 == "#elif" || $1 == "#endif" { print $0; next } diff --git a/crypto/heimdal/lib/roken/roken.h.in b/crypto/heimdal/lib/roken/roken.h.in index 16fc6d8..cf2ee9e 100644 --- a/crypto/heimdal/lib/roken/roken.h.in +++ b/crypto/heimdal/lib/roken/roken.h.in @@ -1,6 +1,6 @@ /* -*- C -*- */ /* - * Copyright (c) 1995 - 2002 Kungliga Tekniska Högskolan + * Copyright (c) 1995-2005 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -32,11 +32,14 @@ * SUCH DAMAGE. */ -/* $Id: roken.h.in,v 1.169 2002/08/26 21:43:38 assar Exp $ */ +/* $Id: roken.h.in 18612 2006-10-19 16:35:16Z lha $ */ #include <stdio.h> #include <stdlib.h> #include <stdarg.h> +#ifdef HAVE_STDINT_H +#include <stdint.h> +#endif #include <string.h> #include <signal.h> @@ -107,9 +110,7 @@ struct sockaddr_dl; #ifdef HAVE_ERRNO_H #include <errno.h> #endif -#ifdef HAVE_ERR_H #include <err.h> -#endif #ifdef HAVE_TERMIOS_H #include <termios.h> #endif @@ -124,22 +125,14 @@ struct sockaddr_dl; #else #include <time.h> #endif +#ifdef HAVE_STRINGS_H +#include <strings.h> +#endif #ifdef HAVE_PATHS_H #include <paths.h> #endif - -#ifndef ROKEN_LIB_FUNCTION -#if defined(__BORLANDC__) -#define ROKEN_LIB_FUNCTION /* not-ready-definition-yet */ -#elif defined(_MSC_VER) -#define ROKEN_LIB_FUNCTION /* not-ready-definition-yet2 */ -#else -#define ROKEN_LIB_FUNCTION -#endif -#endif - #ifndef HAVE_SSIZE_T typedef int ssize_t; #endif @@ -148,235 +141,248 @@ typedef int ssize_t; ROKEN_CPP_START +#ifdef HAVE_UINTPTR_T +#define rk_UNCONST(x) ((void *)(uintptr_t)(const void *)(x)) +#else +#define rk_UNCONST(x) ((void *)(unsigned long)(const void *)(x)) +#endif + #if !defined(HAVE_SETSID) && defined(HAVE__SETSID) #define setsid _setsid #endif #ifndef HAVE_PUTENV -int putenv(const char *string); +int ROKEN_LIB_FUNCTION putenv(const char *); #endif #if !defined(HAVE_SETENV) || defined(NEED_SETENV_PROTO) -int setenv(const char *var, const char *val, int rewrite); +int ROKEN_LIB_FUNCTION setenv(const char *, const char *, int); #endif #if !defined(HAVE_UNSETENV) || defined(NEED_UNSETENV_PROTO) -void unsetenv(const char *name); +void ROKEN_LIB_FUNCTION unsetenv(const char *); #endif #if !defined(HAVE_GETUSERSHELL) || defined(NEED_GETUSERSHELL_PROTO) -char *getusershell(void); -void endusershell(void); +char * ROKEN_LIB_FUNCTION getusershell(void); +void ROKEN_LIB_FUNCTION endusershell(void); #endif #if !defined(HAVE_SNPRINTF) || defined(NEED_SNPRINTF_PROTO) -int snprintf (char *str, size_t sz, const char *format, ...) +int ROKEN_LIB_FUNCTION snprintf (char *, size_t, const char *, ...) __attribute__ ((format (printf, 3, 4))); #endif #if !defined(HAVE_VSNPRINTF) || defined(NEED_VSNPRINTF_PROTO) -int vsnprintf (char *str, size_t sz, const char *format, va_list ap) +int ROKEN_LIB_FUNCTION + vsnprintf (char *, size_t, const char *, va_list) __attribute__((format (printf, 3, 0))); #endif #if !defined(HAVE_ASPRINTF) || defined(NEED_ASPRINTF_PROTO) -int asprintf (char **ret, const char *format, ...) +int ROKEN_LIB_FUNCTION + asprintf (char **, const char *, ...) __attribute__ ((format (printf, 2, 3))); #endif #if !defined(HAVE_VASPRINTF) || defined(NEED_VASPRINTF_PROTO) -int vasprintf (char **ret, const char *format, va_list ap) +int ROKEN_LIB_FUNCTION + vasprintf (char **, const char *, va_list) __attribute__((format (printf, 2, 0))); #endif #if !defined(HAVE_ASNPRINTF) || defined(NEED_ASNPRINTF_PROTO) -int asnprintf (char **ret, size_t max_sz, const char *format, ...) +int ROKEN_LIB_FUNCTION + asnprintf (char **, size_t, const char *, ...) __attribute__ ((format (printf, 3, 4))); #endif #if !defined(HAVE_VASNPRINTF) || defined(NEED_VASNPRINTF_PROTO) -int vasnprintf (char **ret, size_t max_sz, const char *format, va_list ap) +int ROKEN_LIB_FUNCTION + vasnprintf (char **, size_t, const char *, va_list) __attribute__((format (printf, 3, 0))); #endif #ifndef HAVE_STRDUP -char * strdup(const char *old); +char * ROKEN_LIB_FUNCTION strdup(const char *); #endif #if !defined(HAVE_STRNDUP) || defined(NEED_STRNDUP_PROTO) -char * strndup(const char *old, size_t sz); +char * ROKEN_LIB_FUNCTION strndup(const char *, size_t); #endif #ifndef HAVE_STRLWR -char * strlwr(char *); +char * ROKEN_LIB_FUNCTION strlwr(char *); #endif #ifndef HAVE_STRNLEN -size_t strnlen(const char*, size_t); +size_t ROKEN_LIB_FUNCTION strnlen(const char*, size_t); #endif #if !defined(HAVE_STRSEP) || defined(NEED_STRSEP_PROTO) -char *strsep(char**, const char*); +char * ROKEN_LIB_FUNCTION strsep(char**, const char*); #endif #if !defined(HAVE_STRSEP_COPY) || defined(NEED_STRSEP_COPY_PROTO) -ssize_t strsep_copy(const char**, const char*, char*, size_t); +ssize_t ROKEN_LIB_FUNCTION strsep_copy(const char**, const char*, char*, size_t); #endif #ifndef HAVE_STRCASECMP -int strcasecmp(const char *s1, const char *s2); +int ROKEN_LIB_FUNCTION strcasecmp(const char *, const char *); #endif #ifdef NEED_FCLOSE_PROTO -int fclose(FILE *); +int ROKEN_LIB_FUNCTION fclose(FILE *); #endif #ifdef NEED_STRTOK_R_PROTO -char *strtok_r(char *s1, const char *s2, char **lasts); +char * ROKEN_LIB_FUNCTION strtok_r(char *, const char *, char **); #endif #ifndef HAVE_STRUPR -char * strupr(char *); +char * ROKEN_LIB_FUNCTION strupr(char *); #endif #ifndef HAVE_STRLCPY -size_t strlcpy (char *dst, const char *src, size_t dst_sz); +size_t ROKEN_LIB_FUNCTION strlcpy (char *, const char *, size_t); #endif #ifndef HAVE_STRLCAT -size_t strlcat (char *dst, const char *src, size_t dst_sz); +size_t ROKEN_LIB_FUNCTION strlcat (char *, const char *, size_t); #endif #ifndef HAVE_GETDTABLESIZE -int getdtablesize(void); +int ROKEN_LIB_FUNCTION getdtablesize(void); #endif #if !defined(HAVE_STRERROR) && !defined(strerror) -char *strerror(int eno); +char * ROKEN_LIB_FUNCTION strerror(int); #endif #if !defined(HAVE_HSTRERROR) || defined(NEED_HSTRERROR_PROTO) /* This causes a fatal error under Psoriasis */ #if !(defined(SunOS) && (SunOS >= 50)) -const char *hstrerror(int herr); +const char * ROKEN_LIB_FUNCTION hstrerror(int); #endif #endif -#ifndef HAVE_H_ERRNO_DECLARATION +#if !HAVE_DECL_H_ERRNO extern int h_errno; #endif #if !defined(HAVE_INET_ATON) || defined(NEED_INET_ATON_PROTO) -int inet_aton(const char *cp, struct in_addr *adr); +int ROKEN_LIB_FUNCTION inet_aton(const char *, struct in_addr *); #endif #ifndef HAVE_INET_NTOP -const char * +const char * ROKEN_LIB_FUNCTION inet_ntop(int af, const void *src, char *dst, size_t size); #endif #ifndef HAVE_INET_PTON -int -inet_pton(int af, const char *src, void *dst); +int ROKEN_LIB_FUNCTION +inet_pton(int, const char *, void *); #endif #if !defined(HAVE_GETCWD) -char* getcwd(char *path, size_t size); +char* ROKEN_LIB_FUNCTION getcwd(char *, size_t); #endif #ifdef HAVE_PWD_H #include <pwd.h> -struct passwd *k_getpwnam (const char *user); -struct passwd *k_getpwuid (uid_t uid); +struct passwd * ROKEN_LIB_FUNCTION k_getpwnam (const char *); +struct passwd * ROKEN_LIB_FUNCTION k_getpwuid (uid_t); #endif -const char *get_default_username (void); +const char * ROKEN_LIB_FUNCTION get_default_username (void); #ifndef HAVE_SETEUID -int seteuid(uid_t euid); +int ROKEN_LIB_FUNCTION seteuid(uid_t); #endif #ifndef HAVE_SETEGID -int setegid(gid_t egid); +int ROKEN_LIB_FUNCTION setegid(gid_t); #endif #ifndef HAVE_LSTAT -int lstat(const char *path, struct stat *buf); +int ROKEN_LIB_FUNCTION lstat(const char *, struct stat *); #endif #if !defined(HAVE_MKSTEMP) || defined(NEED_MKSTEMP_PROTO) -int mkstemp(char *); +int ROKEN_LIB_FUNCTION mkstemp(char *); #endif #ifndef HAVE_CGETENT -int cgetent(char **buf, char **db_array, const char *name); -int cgetstr(char *buf, const char *cap, char **str); +int ROKEN_LIB_FUNCTION cgetent(char **, char **, const char *); +int ROKEN_LIB_FUNCTION cgetstr(char *, const char *, char **); #endif #ifndef HAVE_INITGROUPS -int initgroups(const char *name, gid_t basegid); +int ROKEN_LIB_FUNCTION initgroups(const char *, gid_t); #endif #ifndef HAVE_FCHOWN -int fchown(int fd, uid_t owner, gid_t group); +int ROKEN_LIB_FUNCTION fchown(int, uid_t, gid_t); #endif -#ifndef HAVE_DAEMON -int daemon(int nochdir, int noclose); +#if !defined(HAVE_DAEMON) || defined(NEED_DAEMON_PROTO) +int ROKEN_LIB_FUNCTION daemon(int, int); #endif #ifndef HAVE_INNETGR -int innetgr(const char *netgroup, const char *machine, - const char *user, const char *domain); +int ROKEN_LIB_FUNCTION innetgr(const char *, const char *, + const char *, const char *); #endif #ifndef HAVE_CHOWN -int chown(const char *path, uid_t owner, gid_t group); +int ROKEN_LIB_FUNCTION chown(const char *, uid_t, gid_t); #endif #ifndef HAVE_RCMD -int rcmd(char **ahost, unsigned short inport, const char *locuser, - const char *remuser, const char *cmd, int *fd2p); +int ROKEN_LIB_FUNCTION + rcmd(char **, unsigned short, const char *, + const char *, const char *, int *); #endif #if !defined(HAVE_INNETGR) || defined(NEED_INNETGR_PROTO) -int innetgr(const char*, const char*, const char*, const char*); +int ROKEN_LIB_FUNCTION innetgr(const char*, const char*, + const char*, const char*); #endif #ifndef HAVE_IRUSEROK -int iruserok(unsigned raddr, int superuser, const char *ruser, - const char *luser); +int ROKEN_LIB_FUNCTION iruserok(unsigned, int, + const char *, const char *); #endif #if !defined(HAVE_GETHOSTNAME) || defined(NEED_GETHOSTNAME_PROTO) -int gethostname(char *name, int namelen); +int ROKEN_LIB_FUNCTION gethostname(char *, int); #endif #ifndef HAVE_WRITEV -ssize_t -writev(int d, const struct iovec *iov, int iovcnt); +ssize_t ROKEN_LIB_FUNCTION +writev(int, const struct iovec *, int); #endif #ifndef HAVE_READV -ssize_t -readv(int d, const struct iovec *iov, int iovcnt); +ssize_t ROKEN_LIB_FUNCTION +readv(int, const struct iovec *, int); #endif #ifndef HAVE_MKSTEMP -int -mkstemp(char *template); +int ROKEN_LIB_FUNCTION +mkstemp(char *); #endif #ifndef HAVE_PIDFILE -void pidfile (const char*); +void ROKEN_LIB_FUNCTION pidfile (const char*); #endif #ifndef HAVE_BSWAP32 -unsigned int bswap32(unsigned int); +unsigned int ROKEN_LIB_FUNCTION bswap32(unsigned int); #endif #ifndef HAVE_BSWAP16 -unsigned short bswap16(unsigned short); +unsigned short ROKEN_LIB_FUNCTION bswap16(unsigned short); #endif #ifndef HAVE_FLOCK @@ -396,23 +402,24 @@ unsigned short bswap16(unsigned short); int flock(int fd, int operation); #endif /* HAVE_FLOCK */ -time_t tm2time (struct tm tm, int local); +time_t ROKEN_LIB_FUNCTION tm2time (struct tm, int); -int unix_verify_user(char *user, char *password); +int ROKEN_LIB_FUNCTION unix_verify_user(char *, char *); -int roken_concat (char *s, size_t len, ...); +int ROKEN_LIB_FUNCTION roken_concat (char *, size_t, ...); -size_t roken_mconcat (char **s, size_t max_len, ...); +size_t ROKEN_LIB_FUNCTION roken_mconcat (char **, size_t, ...); -int roken_vconcat (char *s, size_t len, va_list args); +int ROKEN_LIB_FUNCTION roken_vconcat (char *, size_t, va_list); -size_t roken_vmconcat (char **s, size_t max_len, va_list args); +size_t ROKEN_LIB_FUNCTION + roken_vmconcat (char **, size_t, va_list); -ssize_t net_write (int fd, const void *buf, size_t nbytes); +ssize_t ROKEN_LIB_FUNCTION net_write (int, const void *, size_t); -ssize_t net_read (int fd, void *buf, size_t nbytes); +ssize_t ROKEN_LIB_FUNCTION net_read (int, void *, size_t); -int issuid(void); +int ROKEN_LIB_FUNCTION issuid(void); #ifndef HAVE_STRUCT_WINSIZE struct winsize { @@ -421,48 +428,44 @@ struct winsize { }; #endif -int get_window_size(int fd, struct winsize *); +int ROKEN_LIB_FUNCTION get_window_size(int fd, struct winsize *); #ifndef HAVE_VSYSLOG -void vsyslog(int pri, const char *fmt, va_list ap); +void ROKEN_LIB_FUNCTION vsyslog(int, const char *, va_list); #endif -#ifndef HAVE_OPTARG_DECLARATION +#if !HAVE_DECL_OPTARG extern char *optarg; #endif -#ifndef HAVE_OPTIND_DECLARATION +#if !HAVE_DECL_OPTIND extern int optind; #endif -#ifndef HAVE_OPTERR_DECLARATION +#if !HAVE_DECL_OPTERR extern int opterr; #endif -#ifndef HAVE___PROGNAME_DECLARATION -extern const char *__progname; -#endif - -#ifndef HAVE_ENVIRON_DECLARATION +#if !HAVE_DECL_ENVIRON extern char **environ; #endif #ifndef HAVE_GETIPNODEBYNAME -struct hostent * -getipnodebyname (const char *name, int af, int flags, int *error_num); +struct hostent * ROKEN_LIB_FUNCTION +getipnodebyname (const char *, int, int, int *); #endif #ifndef HAVE_GETIPNODEBYADDR -struct hostent * -getipnodebyaddr (const void *src, size_t len, int af, int *error_num); +struct hostent * ROKEN_LIB_FUNCTION +getipnodebyaddr (const void *, size_t, int, int *); #endif #ifndef HAVE_FREEHOSTENT -void -freehostent (struct hostent *h); +void ROKEN_LIB_FUNCTION +freehostent (struct hostent *); #endif #ifndef HAVE_COPYHOSTENT -struct hostent * -copyhostent (const struct hostent *h); +struct hostent * ROKEN_LIB_FUNCTION +copyhostent (const struct hostent *); #endif #ifndef HAVE_SOCKLEN_T @@ -528,61 +531,63 @@ struct addrinfo { #endif #ifndef HAVE_GETADDRINFO -int -getaddrinfo(const char *nodename, - const char *servname, - const struct addrinfo *hints, - struct addrinfo **res); +int ROKEN_LIB_FUNCTION +getaddrinfo(const char *, + const char *, + const struct addrinfo *, + struct addrinfo **); #endif #ifndef HAVE_GETNAMEINFO -int getnameinfo(const struct sockaddr *sa, socklen_t salen, - char *host, size_t hostlen, - char *serv, size_t servlen, - int flags); +int ROKEN_LIB_FUNCTION +getnameinfo(const struct sockaddr *, socklen_t, + char *, size_t, + char *, size_t, + int); #endif #ifndef HAVE_FREEADDRINFO -void -freeaddrinfo(struct addrinfo *ai); +void ROKEN_LIB_FUNCTION +freeaddrinfo(struct addrinfo *); #endif #ifndef HAVE_GAI_STRERROR -char * -gai_strerror(int ecode); +const char * ROKEN_LIB_FUNCTION +gai_strerror(int); #endif -int -getnameinfo_verified(const struct sockaddr *sa, socklen_t salen, - char *host, size_t hostlen, - char *serv, size_t servlen, - int flags); +int ROKEN_LIB_FUNCTION +getnameinfo_verified(const struct sockaddr *, socklen_t, + char *, size_t, + char *, size_t, + int); -int roken_getaddrinfo_hostspec(const char *, int, struct addrinfo **); -int roken_getaddrinfo_hostspec2(const char *, int, int, struct addrinfo **); +int ROKEN_LIB_FUNCTION +roken_getaddrinfo_hostspec(const char *, int, struct addrinfo **); +int ROKEN_LIB_FUNCTION +roken_getaddrinfo_hostspec2(const char *, int, int, struct addrinfo **); #ifndef HAVE_STRFTIME -size_t -strftime (char *buf, size_t maxsize, const char *format, - const struct tm *tm); +size_t ROKEN_LIB_FUNCTION +strftime (char *, size_t, const char *, const struct tm *); #endif #ifndef HAVE_STRPTIME -char * -strptime (const char *buf, const char *format, struct tm *timeptr); +char * ROKEN_LIB_FUNCTION +strptime (const char *, const char *, struct tm *); #endif #ifndef HAVE_EMALLOC -void *emalloc (size_t); +void * ROKEN_LIB_FUNCTION emalloc (size_t); #endif #ifndef HAVE_ECALLOC -void *ecalloc(size_t num, size_t sz); +void * ROKEN_LIB_FUNCTION ecalloc(size_t, size_t); #endif #ifndef HAVE_EREALLOC -void *erealloc (void *, size_t); +void * ROKEN_LIB_FUNCTION erealloc (void *, size_t); #endif #ifndef HAVE_ESTRDUP -char *estrdup (const char *); +char * ROKEN_LIB_FUNCTION estrdup (const char *); #endif /* @@ -590,9 +595,12 @@ char *estrdup (const char *); */ #if 1 -int roken_gethostby_setup(const char*, const char*); -struct hostent* roken_gethostbyname(const char*); -struct hostent* roken_gethostbyaddr(const void*, size_t, int); +int ROKEN_LIB_FUNCTION +roken_gethostby_setup(const char*, const char*); +struct hostent* ROKEN_LIB_FUNCTION +roken_gethostbyname(const char*); +struct hostent* ROKEN_LIB_FUNCTION +roken_gethostbyaddr(const void*, size_t, int); #else #ifdef GETHOSTBYNAME_PROTO_COMPATIBLE #define roken_gethostbyname(x) gethostbyname(x) @@ -626,57 +634,73 @@ struct hostent* roken_gethostbyaddr(const void*, size_t, int); #endif #ifndef HAVE_SETPROGNAME -void setprogname(const char *argv0); +void ROKEN_LIB_FUNCTION setprogname(const char *); #endif #ifndef HAVE_GETPROGNAME -const char *getprogname(void); +const char * ROKEN_LIB_FUNCTION getprogname(void); #endif -void mini_inetd_addrinfo (struct addrinfo*); -void mini_inetd (int port); +#if !defined(HAVE_SETPROGNAME) && !defined(HAVE_GETPROGNAME) && !HAVE_DECL___PROGNAME +extern const char *__progname; +#endif -void set_progname(char *argv0); -const char *get_progname(void); +void ROKEN_LIB_FUNCTION mini_inetd_addrinfo (struct addrinfo*); +void ROKEN_LIB_FUNCTION mini_inetd (int); #ifndef HAVE_LOCALTIME_R -struct tm * -localtime_r(const time_t *timer, struct tm *result); +struct tm * ROKEN_LIB_FUNCTION +localtime_r(const time_t *, struct tm *); #endif #if !defined(HAVE_STRSVIS) || defined(NEED_STRSVIS_PROTO) -int -strsvis(char *dst, const char *src, int flag, const char *extra); +int ROKEN_LIB_FUNCTION +strsvis(char *, const char *, int, const char *); #endif #if !defined(HAVE_STRUNVIS) || defined(NEED_STRUNVIS_PROTO) -int -strunvis(char *dst, const char *src); +int ROKEN_LIB_FUNCTION +strunvis(char *, const char *); #endif #if !defined(HAVE_STRVIS) || defined(NEED_STRVIS_PROTO) -int -strvis(char *dst, const char *src, int flag); +int ROKEN_LIB_FUNCTION +strvis(char *, const char *, int); #endif #if !defined(HAVE_STRVISX) || defined(NEED_STRVISX_PROTO) -int -strvisx(char *dst, const char *src, size_t len, int flag); +int ROKEN_LIB_FUNCTION +strvisx(char *, const char *, size_t, int); #endif #if !defined(HAVE_SVIS) || defined(NEED_SVIS_PROTO) -char * -svis(char *dst, int c, int flag, int nextc, const char *extra); +char * ROKEN_LIB_FUNCTION +svis(char *, int, int, int, const char *); #endif #if !defined(HAVE_UNVIS) || defined(NEED_UNVIS_PROTO) -int -unvis(char *cp, int c, int *astate, int flag); +int ROKEN_LIB_FUNCTION +unvis(char *, int, int *, int); #endif #if !defined(HAVE_VIS) || defined(NEED_VIS_PROTO) -char * -vis(char *dst, int c, int flag, int nextc); +char * ROKEN_LIB_FUNCTION +vis(char *, int, int, int); +#endif + +#if !defined(HAVE_CLOSEFROM) +int ROKEN_LIB_FUNCTION +closefrom(int); +#endif + +#if !defined(HAVE_TIMEGM) +#define timegm rk_timegm +time_t ROKEN_LIB_FUNCTION +rk_timegm(struct tm *tm); +#endif + +#ifdef SOCKET_WRAPPER_REPLACE +#include <socket_wrapper.h> #endif ROKEN_CPP_END diff --git a/crypto/heimdal/lib/roken/roken_gethostby.c b/crypto/heimdal/lib/roken/roken_gethostby.c index 6df6c57..ff0af86 100644 --- a/crypto/heimdal/lib/roken/roken_gethostby.c +++ b/crypto/heimdal/lib/roken/roken_gethostby.c @@ -33,10 +33,10 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: roken_gethostby.c,v 1.5 1999/12/05 13:16:44 assar Exp $"); +RCSID("$Id: roken_gethostby.c 21157 2007-06-18 22:03:13Z lha $"); #endif -#include <roken.h> +#include "roken.h" #undef roken_gethostbyname #undef roken_gethostbyaddr @@ -107,11 +107,11 @@ split_spec(const char *spec, char **host, int *port, char **path, int def_port) } -int +int ROKEN_LIB_FUNCTION roken_gethostby_setup(const char *proxy_spec, const char *dns_spec) { char *proxy_host = NULL; - int proxy_port; + int proxy_port = 0; char *dns_host, *dns_path; int dns_port; @@ -137,7 +137,7 @@ static struct hostent* roken_gethostby(const char *hostname) { int s; - struct sockaddr_in sin; + struct sockaddr_in addr; char *request; char buf[1024]; int offset = 0; @@ -146,7 +146,7 @@ roken_gethostby(const char *hostname) if(dns_addr.sin_family == 0) return NULL; /* no configured host */ - sin = dns_addr; + addr = dns_addr; asprintf(&request, "GET %s?%s HTTP/1.0\r\n\r\n", dns_req, hostname); if(request == NULL) return NULL; @@ -155,7 +155,7 @@ roken_gethostby(const char *hostname) free(request); return NULL; } - if(connect(s, (struct sockaddr*)&sin, sizeof(sin)) < 0) { + if(connect(s, (struct sockaddr*)&addr, sizeof(addr)) < 0) { close(s); free(request); return NULL; @@ -186,7 +186,7 @@ roken_gethostby(const char *hostname) #define MAX_ADDRS 16 static struct hostent he; static char addrs[4 * MAX_ADDRS]; - static char *addr_list[MAX_ADDRS]; + static char *addr_list[MAX_ADDRS + 1]; int num_addrs = 0; he.h_name = p; @@ -220,7 +220,7 @@ roken_gethostbyname(const char *hostname) return roken_gethostby(hostname); } -struct hostent* +struct hostent* ROKEN_LIB_FUNCTION roken_gethostbyaddr(const void *addr, size_t len, int type) { struct in_addr a; diff --git a/crypto/heimdal/lib/roken/rtbl.3 b/crypto/heimdal/lib/roken/rtbl.3 new file mode 100644 index 0000000..ccdc73f --- /dev/null +++ b/crypto/heimdal/lib/roken/rtbl.3 @@ -0,0 +1,201 @@ +.\" Copyright (c) 2004 Kungliga Tekniska Högskolan +.\" (Royal Institute of Technology, Stockholm, Sweden). +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" 3. Neither the name of the Institute nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" $Id: rtbl.3 22088 2007-11-25 14:10:15Z lha $ +.\" +.Dd June 26, 2004 +.Dt RTBL 3 +.Os HEIMDAL +.Sh NAME +.Nm rtbl_create , +.Nm rtbl_destroy , +.Nm rtbl_set_flags , +.Nm rtbl_get_flags , +.Nm rtbl_set_prefix , +.Nm rtbl_set_separator , +.Nm rtbl_set_column_prefix , +.Nm rtbl_set_column_affix_by_id , +.Nm rtbl_add_column , +.Nm rtbl_add_column_by_id , +.Nm rtbl_add_column_entry , +.Nm rtbl_add_column_entry_by_id , +.Nm rtbl_new_row , +.Nm rtbl_format +.Nd format data in simple tables +.Sh LIBRARY +The roken library (libroken, -lroken) +.Sh SYNOPSIS +.In rtbl.h +.Ft int +.Fn rtbl_add_column "rtbl_t table" "const char *column_name" "unsigned int flags" +.Ft int +.Fn rtbl_add_column_by_id "rtbl_t table" "unsigned int column_id" "const char *column_header" "unsigned int flags" +.Ft int +.Fn rtbl_add_column_entry "rtbl_t table" "const char *column_name" "const char *cell_entry" +.Ft int +.Fn rtbl_add_column_entry_by_id "rtbl_t table" "unsigned int column_id" "const char *cell_entry" +.Ft rtbl_t +.Fn rtbl_create "void" +.Ft void +.Fn rtbl_destroy "rtbl_t table" +.Ft int +.Fn rtbl_new_row "rtbl_t table" +.Ft int +.Fn rtbl_set_column_affix_by_id "rtbl_t table" "unsigned int column_id "const char *prefix" "const char *suffix" +.Ft int +.Fn rtbl_set_column_prefix "rtbl_t table" "const char *column_name" "const char *prefix" +.Ft "unsigned int" +.Fn rtbl_get_flags "rtbl_t table" +.Ft void +.Fn rtbl_set_flags "rtbl_t table" "unsigned int flags" +.Ft int +.Fn rtbl_set_prefix "rtbl_t table" "const char *prefix" +.Ft int +.Fn rtbl_set_separator "rtbl_t table" "const char *separator" +.Ft int +.Fn rtbl_format "rtbl_t table "FILE *file" +.Sh DESCRIPTION +This set of functions assemble a simple table consisting of rows and +columns, allowing it to be printed with certain options. Typical use +would be output from tools such as +.Xr ls 1 +or +.Xr netstat 1 , +where you have a fixed number of columns, but don't know the column +widthds before hand. +.Pp +A table is created with +.Fn rtbl_create +and destroyed with +.Fn rtbl_destroy . +.Pp +Global flags on the table are set with +.Fa rtbl_set_flags +and retrieved with +.Fa rtbl_get_flags . +At present the only defined flag is +.Dv RTBL_HEADER_STYLE_NONE +which suppresses printing the header. +.Pp +Before adding data to the table, one or more columns need to be +created. This would normally be done with +.Fn rtbl_add_column_by_id , +.Fa column_id +is any number of your choice (it's used only to identify columns), +.Fa column_header +is the header to print at the top of the column, and +.Fa flags +are flags specific to this column. Currently the only defined flag is +.Dv RTBL_ALIGN_RIGHT , +aligning column entries to the right. Columns are printed in the order +they are added. +.Pp +There's also a way to add columns by column name with +.Fn rtbl_add_column , +but this is less flexible (you need unique header names), and is +considered deprecated. +.Pp +To add data to a column you use +.Fn rtbl_add_column_entry_by_id , +where the +.Fa column_id +is the same as when the column was added (adding data to a +non-existent column is undefined), and +.Fa cell_entry +is whatever string you wish to include in that cell. It should not +include newlines. +For columns added with +.Fn rtbl_add_column +you must use +.Fn rtbl_add_column_entry +instead. +.Pp +.Fn rtbl_new_row +fills all columns with blank entries until they all have the same +number of rows. +.Pp +Each column can have a separate prefix and suffix, set with +.Fa rtbl_set_column_affix_by_id ; +.Fa rtbl_set_column_prefix +allows setting the prefix only by column name. In addition to this, +columns may be separated by a string set with +.Fa rtbl_set_separator ( Ns +by default columns are not seprated by anything). +.Pp +The finished table is printed to +.Fa file +with +.Fa rtbl_format . +.Sh EXAMPLES +This program: +.Bd -literal -offset xxxx +#include <stdio.h> +#include <rtbl.h> +int +main(int argc, char **argv) +{ + rtbl_t table; + table = rtbl_create(); + rtbl_set_separator(table, " "); + rtbl_add_column_by_id(table, 0, "Column A", 0); + rtbl_add_column_by_id(table, 1, "Column B", RTBL_ALIGN_RIGHT); + rtbl_add_column_by_id(table, 2, "Column C", 0); + rtbl_add_column_entry_by_id(table, 0, "A-1"); + rtbl_add_column_entry_by_id(table, 0, "A-2"); + rtbl_add_column_entry_by_id(table, 0, "A-3"); + rtbl_add_column_entry_by_id(table, 1, "B-1"); + rtbl_add_column_entry_by_id(table, 2, "C-1"); + rtbl_add_column_entry_by_id(table, 2, "C-2"); + rtbl_add_column_entry_by_id(table, 1, "B-2"); + rtbl_add_column_entry_by_id(table, 1, "B-3"); + rtbl_add_column_entry_by_id(table, 2, "C-3"); + rtbl_add_column_entry_by_id(table, 0, "A-4"); + rtbl_new_row(table); + rtbl_add_column_entry_by_id(table, 1, "B-4"); + rtbl_new_row(table); + rtbl_add_column_entry_by_id(table, 2, "C-4"); + rtbl_new_row(table); + rtbl_format(table, stdout); + rtbl_destroy(table); + return 0; +} +.Ed +.Pp +will output the following: +.Bd -literal -offset xxxx +Column A Column B Column C +A-1 B-1 C-1 +A-2 B-2 C-2 +A-3 B-3 C-3 +A-4 + B-4 + C-4 +.Ed +.\" .Sh SEE ALSO diff --git a/crypto/heimdal/lib/roken/rtbl.c b/crypto/heimdal/lib/roken/rtbl.c index 5a3bc00..dd4328f 100644 --- a/crypto/heimdal/lib/roken/rtbl.c +++ b/crypto/heimdal/lib/roken/rtbl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2002 Kungliga Tekniska Högskolan + * Copyright (c) 2000, 2002, 2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID ("$Id: rtbl.c,v 1.4 2002/09/04 21:25:09 joda Exp $"); +RCSID ("$Id: rtbl.c 17758 2006-06-30 13:41:40Z lha $"); #endif #include "roken.h" #include "rtbl.h" @@ -49,20 +49,46 @@ struct column_data { unsigned flags; size_t num_rows; struct column_entry *rows; + unsigned int column_id; + char *suffix; }; struct rtbl_data { char *column_prefix; size_t num_columns; struct column_data **columns; + unsigned int flags; + char *column_separator; }; -rtbl_t +rtbl_t ROKEN_LIB_FUNCTION rtbl_create (void) { return calloc (1, sizeof (struct rtbl_data)); } +void ROKEN_LIB_FUNCTION +rtbl_set_flags (rtbl_t table, unsigned int flags) +{ + table->flags = flags; +} + +unsigned int ROKEN_LIB_FUNCTION +rtbl_get_flags (rtbl_t table) +{ + return table->flags; +} + +static struct column_data * +rtbl_get_column_by_id (rtbl_t table, unsigned int id) +{ + int i; + for(i = 0; i < table->num_columns; i++) + if(table->columns[i]->column_id == id) + return table->columns[i]; + return NULL; +} + static struct column_data * rtbl_get_column (rtbl_t table, const char *column) { @@ -73,7 +99,7 @@ rtbl_get_column (rtbl_t table, const char *column) return NULL; } -void +void ROKEN_LIB_FUNCTION rtbl_destroy (rtbl_t table) { int i, j; @@ -86,15 +112,18 @@ rtbl_destroy (rtbl_t table) free (c->rows); free (c->header); free (c->prefix); + free (c->suffix); free (c); } free (table->column_prefix); + free (table->column_separator); free (table->columns); free (table); } -int -rtbl_add_column (rtbl_t table, const char *header, unsigned int flags) +int ROKEN_LIB_FUNCTION +rtbl_add_column_by_id (rtbl_t table, unsigned int id, + const char *header, unsigned int flags) { struct column_data *col, **tmp; @@ -110,26 +139,64 @@ rtbl_add_column (rtbl_t table, const char *header, unsigned int flags) free (col); return ENOMEM; } - col->prefix = NULL; - col->width = 0; - col->flags = flags; + col->prefix = NULL; + col->width = 0; + col->flags = flags; col->num_rows = 0; - col->rows = NULL; + col->rows = NULL; + col->column_id = id; + col->suffix = NULL; table->columns[table->num_columns++] = col; return 0; } +int ROKEN_LIB_FUNCTION +rtbl_add_column (rtbl_t table, const char *header, unsigned int flags) +{ + return rtbl_add_column_by_id(table, 0, header, flags); +} + +int ROKEN_LIB_FUNCTION +rtbl_new_row(rtbl_t table) +{ + size_t max_rows = 0; + size_t c; + for (c = 0; c < table->num_columns; c++) + if(table->columns[c]->num_rows > max_rows) + max_rows = table->columns[c]->num_rows; + for (c = 0; c < table->num_columns; c++) { + struct column_entry *tmp; + + if(table->columns[c]->num_rows == max_rows) + continue; + tmp = realloc(table->columns[c]->rows, + max_rows * sizeof(table->columns[c]->rows)); + if(tmp == NULL) + return ENOMEM; + table->columns[c]->rows = tmp; + while(table->columns[c]->num_rows < max_rows) { + if((tmp[table->columns[c]->num_rows++].data = strdup("")) == NULL) + return ENOMEM; + } + } + return 0; +} + static void -column_compute_width (struct column_data *column) +column_compute_width (rtbl_t table, struct column_data *column) { int i; - column->width = strlen (column->header); + if(table->flags & RTBL_HEADER_STYLE_NONE) + column->width = 0; + else + column->width = strlen (column->header); for (i = 0; i < column->num_rows; i++) column->width = max (column->width, strlen (column->rows[i].data)); } -int +/* DEPRECATED */ +int ROKEN_LIB_FUNCTION rtbl_set_prefix (rtbl_t table, const char *prefix) { if (table->column_prefix) @@ -140,7 +207,18 @@ rtbl_set_prefix (rtbl_t table, const char *prefix) return 0; } -int +int ROKEN_LIB_FUNCTION +rtbl_set_separator (rtbl_t table, const char *separator) +{ + if (table->column_separator) + free (table->column_separator); + table->column_separator = strdup (separator); + if (table->column_separator == NULL) + return ENOMEM; + return 0; +} + +int ROKEN_LIB_FUNCTION rtbl_set_column_prefix (rtbl_t table, const char *column, const char *prefix) { @@ -156,6 +234,36 @@ rtbl_set_column_prefix (rtbl_t table, const char *column, return 0; } +int ROKEN_LIB_FUNCTION +rtbl_set_column_affix_by_id(rtbl_t table, unsigned int id, + const char *prefix, const char *suffix) +{ + struct column_data *c = rtbl_get_column_by_id (table, id); + + if (c == NULL) + return -1; + if (c->prefix) + free (c->prefix); + if(prefix == NULL) + c->prefix = NULL; + else { + c->prefix = strdup (prefix); + if (c->prefix == NULL) + return ENOMEM; + } + + if (c->suffix) + free (c->suffix); + if(suffix == NULL) + c->suffix = NULL; + else { + c->suffix = strdup (suffix); + if (c->suffix == NULL) + return ENOMEM; + } + return 0; +} + static const char * get_column_prefix (rtbl_t table, struct column_data *c) @@ -169,15 +277,18 @@ get_column_prefix (rtbl_t table, struct column_data *c) return ""; } -int -rtbl_add_column_entry (rtbl_t table, const char *column, const char *data) +static const char * +get_column_suffix (rtbl_t table, struct column_data *c) { - struct column_entry row, *tmp; - - struct column_data *c = rtbl_get_column (table, column); + if (c && c->suffix) + return c->suffix; + return ""; +} - if (c == NULL) - return -1; +static int +add_column_entry (struct column_data *c, const char *data) +{ + struct column_entry row, *tmp; row.data = strdup (data); if (row.data == NULL) @@ -192,24 +303,92 @@ rtbl_add_column_entry (rtbl_t table, const char *column, const char *data) return 0; } -int +int ROKEN_LIB_FUNCTION +rtbl_add_column_entry_by_id (rtbl_t table, unsigned int id, const char *data) +{ + struct column_data *c = rtbl_get_column_by_id (table, id); + + if (c == NULL) + return -1; + + return add_column_entry(c, data); +} + +int ROKEN_LIB_FUNCTION +rtbl_add_column_entryv_by_id (rtbl_t table, unsigned int id, + const char *fmt, ...) +{ + va_list ap; + char *str; + int ret; + + va_start(ap, fmt); + ret = vasprintf(&str, fmt, ap); + va_end(ap); + if (ret == -1) + return -1; + ret = rtbl_add_column_entry_by_id(table, id, str); + free(str); + return ret; +} + +int ROKEN_LIB_FUNCTION +rtbl_add_column_entry (rtbl_t table, const char *column, const char *data) +{ + struct column_data *c = rtbl_get_column (table, column); + + if (c == NULL) + return -1; + + return add_column_entry(c, data); +} + +int ROKEN_LIB_FUNCTION +rtbl_add_column_entryv (rtbl_t table, const char *column, const char *fmt, ...) +{ + va_list ap; + char *str; + int ret; + + va_start(ap, fmt); + ret = vasprintf(&str, fmt, ap); + va_end(ap); + if (ret == -1) + return -1; + ret = rtbl_add_column_entry(table, column, str); + free(str); + return ret; +} + + +int ROKEN_LIB_FUNCTION rtbl_format (rtbl_t table, FILE * f) { int i, j; for (i = 0; i < table->num_columns; i++) - column_compute_width (table->columns[i]); - for (i = 0; i < table->num_columns; i++) { - struct column_data *c = table->columns[i]; + column_compute_width (table, table->columns[i]); + if((table->flags & RTBL_HEADER_STYLE_NONE) == 0) { + for (i = 0; i < table->num_columns; i++) { + struct column_data *c = table->columns[i]; - fprintf (f, "%s", get_column_prefix (table, c)); - fprintf (f, "%-*s", (int)c->width, c->header); + if(table->column_separator != NULL && i > 0) + fprintf (f, "%s", table->column_separator); + fprintf (f, "%s", get_column_prefix (table, c)); + if(i == table->num_columns - 1 && c->suffix == NULL) + /* last column, so no need to pad with spaces */ + fprintf (f, "%-*s", 0, c->header); + else + fprintf (f, "%-*s", (int)c->width, c->header); + fprintf (f, "%s", get_column_suffix (table, c)); + } + fprintf (f, "\n"); } - fprintf (f, "\n"); for (j = 0;; j++) { int flag = 0; + /* are there any more rows left? */ for (i = 0; flag == 0 && i < table->num_columns; ++i) { struct column_data *c = table->columns[i]; @@ -225,15 +404,24 @@ rtbl_format (rtbl_t table, FILE * f) int w; struct column_data *c = table->columns[i]; + if(table->column_separator != NULL && i > 0) + fprintf (f, "%s", table->column_separator); + w = c->width; - if ((c->flags & RTBL_ALIGN_RIGHT) == 0) - w = -w; + if ((c->flags & RTBL_ALIGN_RIGHT) == 0) { + if(i == table->num_columns - 1 && c->suffix == NULL) + /* last column, so no need to pad with spaces */ + w = 0; + else + w = -w; + } fprintf (f, "%s", get_column_prefix (table, c)); if (c->num_rows <= j) fprintf (f, "%*s", w, ""); else fprintf (f, "%*s", w, c->rows[j].data); + fprintf (f, "%s", get_column_suffix (table, c)); } fprintf (f, "\n"); } @@ -245,36 +433,57 @@ int main (int argc, char **argv) { rtbl_t table; - unsigned int a, b, c, d; table = rtbl_create (); - rtbl_add_column (table, "Issued", 0, &a); - rtbl_add_column (table, "Expires", 0, &b); - rtbl_add_column (table, "Foo", RTBL_ALIGN_RIGHT, &d); - rtbl_add_column (table, "Principal", 0, &c); + rtbl_add_column_by_id (table, 0, "Issued", 0); + rtbl_add_column_by_id (table, 1, "Expires", 0); + rtbl_add_column_by_id (table, 2, "Foo", RTBL_ALIGN_RIGHT); + rtbl_add_column_by_id (table, 3, "Principal", 0); + + rtbl_add_column_entry_by_id (table, 0, "Jul 7 21:19:29"); + rtbl_add_column_entry_by_id (table, 1, "Jul 8 07:19:29"); + rtbl_add_column_entry_by_id (table, 2, "73"); + rtbl_add_column_entry_by_id (table, 2, "0"); + rtbl_add_column_entry_by_id (table, 2, "-2000"); + rtbl_add_column_entry_by_id (table, 3, "krbtgt/NADA.KTH.SE@NADA.KTH.SE"); - rtbl_add_column_entry (table, a, "Jul 7 21:19:29"); - rtbl_add_column_entry (table, b, "Jul 8 07:19:29"); - rtbl_add_column_entry (table, d, "73"); - rtbl_add_column_entry (table, d, "0"); - rtbl_add_column_entry (table, d, "-2000"); - rtbl_add_column_entry (table, c, "krbtgt/NADA.KTH.SE@NADA.KTH.SE"); + rtbl_add_column_entry_by_id (table, 0, "Jul 7 21:19:29"); + rtbl_add_column_entry_by_id (table, 1, "Jul 8 07:19:29"); + rtbl_add_column_entry_by_id (table, 3, "afs/pdc.kth.se@NADA.KTH.SE"); - rtbl_add_column_entry (table, a, "Jul 7 21:19:29"); - rtbl_add_column_entry (table, b, "Jul 8 07:19:29"); - rtbl_add_column_entry (table, c, "afs/pdc.kth.se@NADA.KTH.SE"); + rtbl_add_column_entry_by_id (table, 0, "Jul 7 21:19:29"); + rtbl_add_column_entry_by_id (table, 1, "Jul 8 07:19:29"); + rtbl_add_column_entry_by_id (table, 3, "afs@NADA.KTH.SE"); - rtbl_add_column_entry (table, a, "Jul 7 21:19:29"); - rtbl_add_column_entry (table, b, "Jul 8 07:19:29"); - rtbl_add_column_entry (table, c, "afs@NADA.KTH.SE"); + rtbl_set_separator (table, " "); - rtbl_set_prefix (table, " "); - rtbl_set_column_prefix (table, a, ""); + rtbl_format (table, stdout); + + rtbl_destroy (table); + printf("\n"); + + table = rtbl_create (); + rtbl_add_column_by_id (table, 0, "Column A", 0); + rtbl_set_column_affix_by_id (table, 0, "<", ">"); + rtbl_add_column_by_id (table, 1, "Column B", 0); + rtbl_set_column_affix_by_id (table, 1, "[", "]"); + rtbl_add_column_by_id (table, 2, "Column C", 0); + rtbl_set_column_affix_by_id (table, 2, "(", ")"); + + rtbl_add_column_entry_by_id (table, 0, "1"); + rtbl_new_row(table); + rtbl_add_column_entry_by_id (table, 1, "2"); + rtbl_new_row(table); + rtbl_add_column_entry_by_id (table, 2, "3"); + rtbl_new_row(table); + + rtbl_set_separator (table, " "); rtbl_format (table, stdout); rtbl_destroy (table); + return 0; } #endif diff --git a/crypto/heimdal/lib/roken/rtbl.h b/crypto/heimdal/lib/roken/rtbl.h index 16496a7..9b168c7 100644 --- a/crypto/heimdal/lib/roken/rtbl.h +++ b/crypto/heimdal/lib/roken/rtbl.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 Kungliga Tekniska Högskolan + * Copyright (c) 2000,2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -30,28 +30,89 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ +/* $Id: rtbl.h 17760 2006-06-30 13:42:39Z lha $ */ #ifndef __rtbl_h__ #define __rtbl_h__ +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + +#if !defined(__GNUC__) && !defined(__attribute__) +#define __attribute__(x) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + struct rtbl_data; typedef struct rtbl_data *rtbl_t; #define RTBL_ALIGN_LEFT 0 #define RTBL_ALIGN_RIGHT 1 -rtbl_t rtbl_create (void); +/* flags */ +#define RTBL_HEADER_STYLE_NONE 1 + +int ROKEN_LIB_FUNCTION +rtbl_add_column (rtbl_t, const char*, unsigned int); + +int ROKEN_LIB_FUNCTION +rtbl_add_column_by_id (rtbl_t, unsigned int, const char*, unsigned int); + +int ROKEN_LIB_FUNCTION +rtbl_add_column_entryv_by_id (rtbl_t table, unsigned int id, + const char *fmt, ...) + __attribute__ ((format (printf, 3, 0))); + +int ROKEN_LIB_FUNCTION +rtbl_add_column_entry (rtbl_t, const char*, const char*); + +int ROKEN_LIB_FUNCTION +rtbl_add_column_entryv (rtbl_t, const char*, const char*, ...) + __attribute__ ((format (printf, 3, 0))); + +int ROKEN_LIB_FUNCTION +rtbl_add_column_entry_by_id (rtbl_t, unsigned int, const char*); + +rtbl_t ROKEN_LIB_FUNCTION +rtbl_create (void); + +void ROKEN_LIB_FUNCTION +rtbl_destroy (rtbl_t); + +int ROKEN_LIB_FUNCTION +rtbl_format (rtbl_t, FILE*); + +unsigned int ROKEN_LIB_FUNCTION +rtbl_get_flags (rtbl_t); + +int ROKEN_LIB_FUNCTION +rtbl_new_row (rtbl_t); -void rtbl_destroy (rtbl_t); +int ROKEN_LIB_FUNCTION +rtbl_set_column_affix_by_id (rtbl_t, unsigned int, const char*, const char*); -int rtbl_set_prefix (rtbl_t, const char*); +int ROKEN_LIB_FUNCTION +rtbl_set_column_prefix (rtbl_t, const char*, const char*); -int rtbl_set_column_prefix (rtbl_t, const char*, const char*); +void ROKEN_LIB_FUNCTION +rtbl_set_flags (rtbl_t, unsigned int); -int rtbl_add_column (rtbl_t, const char*, unsigned int); +int ROKEN_LIB_FUNCTION +rtbl_set_prefix (rtbl_t, const char*); -int rtbl_add_column_entry (rtbl_t, const char*, const char*); +int ROKEN_LIB_FUNCTION +rtbl_set_separator (rtbl_t, const char*); -int rtbl_format (rtbl_t, FILE*); +#ifdef __cplusplus +} +#endif #endif /* __rtbl_h__ */ diff --git a/crypto/heimdal/lib/roken/sendmsg.c b/crypto/heimdal/lib/roken/sendmsg.c index 7075bf2..e7478bf 100644 --- a/crypto/heimdal/lib/roken/sendmsg.c +++ b/crypto/heimdal/lib/roken/sendmsg.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: sendmsg.c,v 1.4 1999/12/02 16:58:52 joda Exp $"); +RCSID("$Id: sendmsg.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" -ssize_t +ssize_t ROKEN_LIB_FUNCTION sendmsg(int s, const struct msghdr *msg, int flags) { ssize_t ret; diff --git a/crypto/heimdal/lib/roken/setegid.c b/crypto/heimdal/lib/roken/setegid.c index 2f46fe4..14d99ee 100644 --- a/crypto/heimdal/lib/roken/setegid.c +++ b/crypto/heimdal/lib/roken/setegid.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: setegid.c,v 1.9 1999/12/02 16:58:52 joda Exp $"); +RCSID("$Id: setegid.c 14773 2005-04-12 11:29:18Z lha $"); #endif #ifdef HAVE_UNISTD_H @@ -42,7 +42,7 @@ RCSID("$Id: setegid.c,v 1.9 1999/12/02 16:58:52 joda Exp $"); #include "roken.h" -int +int ROKEN_LIB_FUNCTION setegid(gid_t egid) { #ifdef HAVE_SETREGID diff --git a/crypto/heimdal/lib/roken/setenv.c b/crypto/heimdal/lib/roken/setenv.c index 15b5811..2bf09be 100644 --- a/crypto/heimdal/lib/roken/setenv.c +++ b/crypto/heimdal/lib/roken/setenv.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: setenv.c,v 1.9 1999/12/02 16:58:52 joda Exp $"); +RCSID("$Id: setenv.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -47,7 +47,7 @@ RCSID("$Id: setenv.c,v 1.9 1999/12/02 16:58:52 joda Exp $"); * anyway. */ -int +int ROKEN_LIB_FUNCTION setenv(const char *var, const char *val, int rewrite) { char *t; diff --git a/crypto/heimdal/lib/roken/seteuid.c b/crypto/heimdal/lib/roken/seteuid.c index ee68ba7..4f786bb 100644 --- a/crypto/heimdal/lib/roken/seteuid.c +++ b/crypto/heimdal/lib/roken/seteuid.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: seteuid.c,v 1.10 1999/12/02 16:58:52 joda Exp $"); +RCSID("$Id: seteuid.c 14773 2005-04-12 11:29:18Z lha $"); #endif #ifdef HAVE_UNISTD_H @@ -42,7 +42,7 @@ RCSID("$Id: seteuid.c,v 1.10 1999/12/02 16:58:52 joda Exp $"); #include "roken.h" -int +int ROKEN_LIB_FUNCTION seteuid(uid_t euid) { #ifdef HAVE_SETREUID diff --git a/crypto/heimdal/lib/roken/setprogname.c b/crypto/heimdal/lib/roken/setprogname.c index e66deab..b24c785 100644 --- a/crypto/heimdal/lib/roken/setprogname.c +++ b/crypto/heimdal/lib/roken/setprogname.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995 - 2001 Kungliga Tekniska Högskolan + * Copyright (c) 1995-2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: setprogname.c,v 1.1 2001/07/09 14:56:51 assar Exp $"); +RCSID("$Id: setprogname.c 15955 2005-08-23 10:19:20Z lha $"); #endif #include "roken.h" @@ -43,25 +43,19 @@ extern const char *__progname; #endif #ifndef HAVE_SETPROGNAME -void +void ROKEN_LIB_FUNCTION setprogname(const char *argv0) { #ifndef HAVE___PROGNAME - char *p; + const char *p; if(argv0 == NULL) return; p = strrchr(argv0, '/'); if(p == NULL) - p = (char *)argv0; + p = argv0; else p++; __progname = p; #endif } #endif /* HAVE_SETPROGNAME */ - -void -set_progname(char *argv0) -{ - setprogname ((const char *)argv0); -} diff --git a/crypto/heimdal/lib/roken/signal.c b/crypto/heimdal/lib/roken/signal.c index 1d482a0..e184390 100644 --- a/crypto/heimdal/lib/roken/signal.c +++ b/crypto/heimdal/lib/roken/signal.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: signal.c,v 1.12 2000/07/08 12:39:06 assar Exp $"); +RCSID("$Id: signal.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <signal.h> @@ -50,7 +50,7 @@ RCSID("$Id: signal.c,v 1.12 2000/07/08 12:39:06 assar Exp $"); * Do we need any extra hacks for SIGCLD and/or SIGCHLD? */ -SigAction +SigAction ROKEN_LIB_FUNCTION signal(int iSig, SigAction pAction) { struct sigaction saNew, saOld; diff --git a/crypto/heimdal/lib/roken/simple_exec.c b/crypto/heimdal/lib/roken/simple_exec.c index 1f27c00..447b5bf 100644 --- a/crypto/heimdal/lib/roken/simple_exec.c +++ b/crypto/heimdal/lib/roken/simple_exec.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998 - 2001 Kungliga Tekniska Högskolan + * Copyright (c) 1998 - 2001, 2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: simple_exec.c,v 1.10 2001/06/21 03:38:03 assar Exp $"); +RCSID("$Id: simple_exec.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdarg.h> @@ -49,7 +49,7 @@ RCSID("$Id: simple_exec.c,v 1.10 2001/06/21 03:38:03 assar Exp $"); #endif #include <errno.h> -#include <roken.h> +#include "roken.h" #define EX_NOEXEC 126 #define EX_NOTFOUND 127 @@ -58,31 +58,92 @@ RCSID("$Id: simple_exec.c,v 1.10 2001/06/21 03:38:03 assar Exp $"); -1 on `unspecified' system errors -2 on fork failures -3 on waitpid errors + -4 exec timeout 0- is return value from subprocess 126 if the program couldn't be executed 127 if the program couldn't be found 128- is 128 + signal that killed subprocess + + possible values `func' can return: + ((time_t)-2) exit loop w/o killing child and return + `exec timeout'/-4 from simple_exec + ((time_t)-1) kill child with SIGTERM and wait for child to exit + 0 don't timeout again + n seconds to next timeout */ -int -wait_for_process(pid_t pid) +static int sig_alarm; + +static RETSIGTYPE +sigtimeout(int sig) +{ + sig_alarm = 1; + SIGRETURN(0); +} + +int ROKEN_LIB_FUNCTION +wait_for_process_timed(pid_t pid, time_t (*func)(void *), + void *ptr, time_t timeout) { + RETSIGTYPE (*old_func)(int sig) = NULL; + unsigned int oldtime = 0; + int ret; + + sig_alarm = 0; + + if (func) { + old_func = signal(SIGALRM, sigtimeout); + oldtime = alarm(timeout); + } + while(1) { int status; - while(waitpid(pid, &status, 0) < 0) - if (errno != EINTR) - return -3; + while(waitpid(pid, &status, 0) < 0) { + if (errno != EINTR) { + ret = -3; + goto out; + } + if (func == NULL) + continue; + if (sig_alarm == 0) + continue; + timeout = (*func)(ptr); + if (timeout == (time_t)-1) { + kill(pid, SIGTERM); + continue; + } else if (timeout == (time_t)-2) { + ret = -4; + goto out; + } + alarm(timeout); + } if(WIFSTOPPED(status)) continue; - if(WIFEXITED(status)) - return WEXITSTATUS(status); - if(WIFSIGNALED(status)) - return WTERMSIG(status) + 128; + if(WIFEXITED(status)) { + ret = WEXITSTATUS(status); + break; + } + if(WIFSIGNALED(status)) { + ret = WTERMSIG(status) + 128; + break; + } } + out: + if (func) { + signal(SIGALRM, old_func); + alarm(oldtime); + } + return ret; } -int +int ROKEN_LIB_FUNCTION +wait_for_process(pid_t pid) +{ + return wait_for_process_timed(pid, NULL, NULL, 0); +} + +int ROKEN_LIB_FUNCTION pipe_execv(FILE **stdin_fd, FILE **stdout_fd, FILE **stderr_fd, const char *file, ...) { @@ -136,6 +197,8 @@ pipe_execv(FILE **stdin_fd, FILE **stdout_fd, FILE **stderr_fd, close(err_fd[1]); } + closefrom(3); + execv(file, argv); exit((errno == ENOENT) ? EX_NOTFOUND : EX_NOEXEC); case -1: @@ -169,8 +232,9 @@ pipe_execv(FILE **stdin_fd, FILE **stdout_fd, FILE **stderr_fd, return pid; } -int -simple_execvp(const char *file, char *const args[]) +int ROKEN_LIB_FUNCTION +simple_execvp_timed(const char *file, char *const args[], + time_t (*func)(void *), void *ptr, time_t timeout) { pid_t pid = fork(); switch(pid){ @@ -180,13 +244,20 @@ simple_execvp(const char *file, char *const args[]) execvp(file, args); exit((errno == ENOENT) ? EX_NOTFOUND : EX_NOEXEC); default: - return wait_for_process(pid); + return wait_for_process_timed(pid, func, ptr, timeout); } } +int ROKEN_LIB_FUNCTION +simple_execvp(const char *file, char *const args[]) +{ + return simple_execvp_timed(file, args, NULL, NULL, 0); +} + /* gee, I'd like a execvpe */ -int -simple_execve(const char *file, char *const args[], char *const envp[]) +int ROKEN_LIB_FUNCTION +simple_execve_timed(const char *file, char *const args[], char *const envp[], + time_t (*func)(void *), void *ptr, time_t timeout) { pid_t pid = fork(); switch(pid){ @@ -196,11 +267,17 @@ simple_execve(const char *file, char *const args[], char *const envp[]) execve(file, args, envp); exit((errno == ENOENT) ? EX_NOTFOUND : EX_NOEXEC); default: - return wait_for_process(pid); + return wait_for_process_timed(pid, func, ptr, timeout); } } -int +int ROKEN_LIB_FUNCTION +simple_execve(const char *file, char *const args[], char *const envp[]) +{ + return simple_execve_timed(file, args, envp, NULL, NULL, 0); +} + +int ROKEN_LIB_FUNCTION simple_execlp(const char *file, ...) { va_list ap; @@ -217,7 +294,7 @@ simple_execlp(const char *file, ...) return ret; } -int +int ROKEN_LIB_FUNCTION simple_execle(const char *file, ... /* ,char *const envp[] */) { va_list ap; @@ -236,7 +313,7 @@ simple_execle(const char *file, ... /* ,char *const envp[] */) return ret; } -int +int ROKEN_LIB_FUNCTION simple_execl(const char *file, ...) { va_list ap; diff --git a/crypto/heimdal/lib/roken/snprintf-test.c b/crypto/heimdal/lib/roken/snprintf-test.c index 6904ba6..047d54b 100644 --- a/crypto/heimdal/lib/roken/snprintf-test.c +++ b/crypto/heimdal/lib/roken/snprintf-test.c @@ -33,12 +33,11 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include "snprintf-test.h" #include "roken.h" #include <limits.h> -#include "snprintf-test.h" - -RCSID("$Id: snprintf-test.c,v 1.5 2001/09/13 01:01:16 assar Exp $"); +RCSID("$Id: snprintf-test.c 21627 2007-07-17 10:53:17Z lha $"); static int try (const char *format, ...) @@ -51,6 +50,8 @@ try (const char *format, ...) ret = vsnprintf (buf1, sizeof(buf1), format, ap); if (ret >= sizeof(buf1)) errx (1, "increase buf and try again"); + va_end (ap); + va_start (ap, format); vsprintf (buf2, format, ap); ret = strcmp (buf1, buf2); if (ret) @@ -128,6 +129,9 @@ cmp_with_sprintf_long (void) #ifdef HAVE_LONG_LONG +/* XXX doesn't work as expected on lp64 platforms with sizeof(long + * long) == sizeof(long) */ + static int cmp_with_sprintf_long_long (void) { @@ -223,6 +227,32 @@ test_null (void) return snprintf (NULL, 0, "foo") != 3; } +static int +test_sizet (void) +{ + int tot = 0; + size_t sizet_values[] = { 0, 1, 2, 200, 4294967295u }; /* SIZE_MAX */ + char *result[] = { "0", "1", "2", "200", "4294967295" }; + int i; + + for (i = 0; i < sizeof(sizet_values) / sizeof(sizet_values[0]); ++i) { +#if 0 + tot += try("%zu", sizet_values[i]); + tot += try("%zx", sizet_values[i]); + tot += try("%zX", sizet_values[i]); +#else + char buf[256]; + snprintf(buf, sizeof(buf), "%zu", sizet_values[i]); + if (strcmp(buf, result[i]) != 0) { + printf("%s != %s", buf, result[i]); + tot++; + } +#endif + } + return tot; +} + + int main (int argc, char **argv) { @@ -234,5 +264,6 @@ main (int argc, char **argv) ret += cmp_with_sprintf_long_long (); #endif ret += test_null (); + ret += test_sizet (); return ret; } diff --git a/crypto/heimdal/lib/roken/snprintf-test.h b/crypto/heimdal/lib/roken/snprintf-test.h index 5eb591b..d672873 100644 --- a/crypto/heimdal/lib/roken/snprintf-test.h +++ b/crypto/heimdal/lib/roken/snprintf-test.h @@ -31,7 +31,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* $Id: snprintf-test.h,v 1.2 2001/07/19 18:39:14 assar Exp $ */ +/* $Id: snprintf-test.h 10377 2001-07-19 18:39:14Z assar $ */ #ifndef __SNPRINTF_TEST_H__ #define __SNPRINTF_TEST_H__ diff --git a/crypto/heimdal/lib/roken/snprintf.c b/crypto/heimdal/lib/roken/snprintf.c index 5e4b85e9..6b3352f 100644 --- a/crypto/heimdal/lib/roken/snprintf.c +++ b/crypto/heimdal/lib/roken/snprintf.c @@ -33,14 +33,18 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: snprintf.c,v 1.35 2003/03/26 10:05:48 joda Exp $"); +RCSID("$Id: snprintf.c 21005 2007-06-08 01:54:35Z lha $"); #endif +#if defined(TEST_SNPRINTF) +#include "snprintf-test.h" +#endif /* TEST_SNPRINTF */ #include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include <string.h> #include <ctype.h> -#include <roken.h> +#include "roken.h" +#include <assert.h> enum format_flags { minus_flag = 1, @@ -55,62 +59,58 @@ enum format_flags { */ struct snprintf_state { - unsigned char *str; - unsigned char *s; - unsigned char *theend; - size_t sz; - size_t max_sz; - void (*append_char)(struct snprintf_state *, unsigned char); - /* XXX - methods */ + unsigned char *str; + unsigned char *s; + unsigned char *theend; + size_t sz; + size_t max_sz; + void (*append_char)(struct snprintf_state *, unsigned char); + /* XXX - methods */ }; -#if TEST_SNPRINTF -#include "snprintf-test.h" -#endif /* TEST_SNPRINTF */ - #if !defined(HAVE_VSNPRINTF) || defined(TEST_SNPRINTF) static int sn_reserve (struct snprintf_state *state, size_t n) { - return state->s + n > state->theend; + return state->s + n > state->theend; } static void sn_append_char (struct snprintf_state *state, unsigned char c) { - if (!sn_reserve (state, 1)) - *state->s++ = c; + if (!sn_reserve (state, 1)) + *state->s++ = c; } #endif static int as_reserve (struct snprintf_state *state, size_t n) { - if (state->s + n > state->theend) { - int off = state->s - state->str; - unsigned char *tmp; - - if (state->max_sz && state->sz >= state->max_sz) - return 1; - - state->sz = max(state->sz * 2, state->sz + n); - if (state->max_sz) - state->sz = min(state->sz, state->max_sz); - tmp = realloc (state->str, state->sz); - if (tmp == NULL) - return 1; - state->str = tmp; - state->s = state->str + off; - state->theend = state->str + state->sz - 1; - } - return 0; + if (state->s + n > state->theend) { + int off = state->s - state->str; + unsigned char *tmp; + + if (state->max_sz && state->sz >= state->max_sz) + return 1; + + state->sz = max(state->sz * 2, state->sz + n); + if (state->max_sz) + state->sz = min(state->sz, state->max_sz); + tmp = realloc (state->str, state->sz); + if (tmp == NULL) + return 1; + state->str = tmp; + state->s = state->str + off; + state->theend = state->str + state->sz - 1; + } + return 0; } static void as_append_char (struct snprintf_state *state, unsigned char c) { - if(!as_reserve (state, 1)) - *state->s++ = c; + if(!as_reserve (state, 1)) + *state->s++ = c; } /* longest integer types */ @@ -123,14 +123,24 @@ typedef unsigned long u_longest; typedef long longest; #endif -/* - * is # supposed to do anything? - */ + +static int +pad(struct snprintf_state *state, int width, char c) +{ + int len = 0; + while(width-- > 0){ + (*state->append_char)(state, c); + ++len; + } + return len; +} + +/* return true if we should use alternatve hex form */ static int use_alternative (int flags, u_longest num, unsigned base) { - return flags & alternate_flag && (base == 16 || base == 8) && num != 0; + return (flags & alternate_flag) && base == 16 && num != 0; } static int @@ -138,79 +148,110 @@ append_number(struct snprintf_state *state, u_longest num, unsigned base, const char *rep, int width, int prec, int flags, int minusp) { - int len = 0; - int i; - u_longest n = num; - - /* given precision, ignore zero flag */ - if(prec != -1) - flags &= ~zero_flag; - else - prec = 1; - /* zero value with zero precision -> "" */ - if(prec == 0 && n == 0) - return 0; - do{ - (*state->append_char)(state, rep[n % base]); - ++len; - n /= base; - } while(n); - prec -= len; - /* pad with prec zeros */ - while(prec-- > 0){ - (*state->append_char)(state, '0'); - ++len; - } - /* add length of alternate prefix (added later) to len */ - if(use_alternative(flags, num, base)) - len += base / 8; - /* pad with zeros */ - if(flags & zero_flag){ - width -= len; - if(minusp || (flags & space_flag) || (flags & plus_flag)) - width--; - while(width-- > 0){ - (*state->append_char)(state, '0'); - len++; + int len = 0; + u_longest n = num; + char nstr[64]; /* enough for <192 bit octal integers */ + int nstart, nlen; + char signchar; + + /* given precision, ignore zero flag */ + if(prec != -1) + flags &= ~zero_flag; + else + prec = 1; + + /* format number as string */ + nstart = sizeof(nstr); + nlen = 0; + nstr[--nstart] = '\0'; + do { + assert(nstart > 0); + nstr[--nstart] = rep[n % base]; + ++nlen; + n /= base; + } while(n); + + /* zero value with zero precision should produce no digits */ + if(prec == 0 && num == 0) { + nlen--; + nstart++; } - } - /* add alternate prefix */ - if(use_alternative(flags, num, base)){ - if(base == 16) - (*state->append_char)(state, rep[10] + 23); /* XXX */ - (*state->append_char)(state, '0'); - } - /* add sign */ - if(minusp){ - (*state->append_char)(state, '-'); - ++len; - } else if(flags & plus_flag) { - (*state->append_char)(state, '+'); - ++len; - } else if(flags & space_flag) { - (*state->append_char)(state, ' '); - ++len; - } - if(flags & minus_flag) - /* swap before padding with spaces */ - for(i = 0; i < len / 2; i++){ - char c = state->s[-i-1]; - state->s[-i-1] = state->s[-len+i]; - state->s[-len+i] = c; + + /* figure out what char to use for sign */ + if(minusp) + signchar = '-'; + else if((flags & plus_flag)) + signchar = '+'; + else if((flags & space_flag)) + signchar = ' '; + else + signchar = '\0'; + + if((flags & alternate_flag) && base == 8) { + /* if necessary, increase the precision to + make first digit a zero */ + + /* XXX C99 claims (regarding # and %o) that "if the value and + precision are both 0, a single 0 is printed", but there is + no such wording for %x. This would mean that %#.o would + output "0", but %#.x "". This does not make sense, and is + also not what other printf implementations are doing. */ + + if(prec <= nlen && nstr[nstart] != '0' && nstr[nstart] != '\0') + prec = nlen + 1; } - width -= len; - while(width-- > 0){ - (*state->append_char)(state, ' '); - ++len; - } - if(!(flags & minus_flag)) - /* swap after padding with spaces */ - for(i = 0; i < len / 2; i++){ - char c = state->s[-i-1]; - state->s[-i-1] = state->s[-len+i]; - state->s[-len+i] = c; + + /* possible formats: + pad | sign | alt | zero | digits + sign | alt | zero | digits | pad minus_flag + sign | alt | zero | digits zero_flag */ + + /* if not right justifying or padding with zeros, we need to + compute the length of the rest of the string, and then pad with + spaces */ + if(!(flags & (minus_flag | zero_flag))) { + if(prec > nlen) + width -= prec; + else + width -= nlen; + + if(use_alternative(flags, num, base)) + width -= 2; + + if(signchar != '\0') + width--; + + /* pad to width */ + len += pad(state, width, ' '); + } + if(signchar != '\0') { + (*state->append_char)(state, signchar); + ++len; + } + if(use_alternative(flags, num, base)) { + (*state->append_char)(state, '0'); + (*state->append_char)(state, rep[10] + 23); /* XXX */ + len += 2; } - return len; + if(flags & zero_flag) { + /* pad to width with zeros */ + if(prec - nlen > width - len - nlen) + len += pad(state, prec - nlen, '0'); + else + len += pad(state, width - len - nlen, '0'); + } else + /* pad to prec with zeros */ + len += pad(state, prec - nlen, '0'); + + while(nstr[nstart] != '\0') { + (*state->append_char)(state, nstr[nstart++]); + ++len; + } + + if(flags & minus_flag) + len += pad(state, width - len, ' '); + + return len; } /* @@ -234,10 +275,8 @@ append_string (struct snprintf_state *state, else width -= strlen((const char *)arg); if(!(flags & minus_flag)) - while(width-- > 0) { - (*state->append_char) (state, ' '); - ++len; - } + len += pad(state, width, ' '); + if (prec != -1) { while (*arg && prec--) { (*state->append_char) (state, *arg++); @@ -250,10 +289,7 @@ append_string (struct snprintf_state *state, } } if(flags & minus_flag) - while(width-- > 0) { - (*state->append_char) (state, ' '); - ++len; - } + len += pad(state, width, ' '); return len; } @@ -263,19 +299,19 @@ append_char(struct snprintf_state *state, int width, int flags) { - int len = 0; + int len = 0; - while(!(flags & minus_flag) && --width > 0) { - (*state->append_char) (state, ' ') ; - ++len; - } - (*state->append_char) (state, arg); - ++len; - while((flags & minus_flag) && --width > 0) { - (*state->append_char) (state, ' '); + while(!(flags & minus_flag) && --width > 0) { + (*state->append_char) (state, ' ') ; + ++len; + } + (*state->append_char) (state, arg); ++len; - } - return 0; + while((flags & minus_flag) && --width > 0) { + (*state->append_char) (state, ' '); + ++len; + } + return 0; } /* @@ -289,6 +325,8 @@ if (long_long_flag) \ res = (unsig long long)va_arg(arg, unsig long long); \ else if (long_flag) \ res = (unsig long)va_arg(arg, unsig long); \ +else if (size_t_flag) \ + res = (unsig long)va_arg(arg, size_t); \ else if (short_flag) \ res = (unsig short)va_arg(arg, unsig int); \ else \ @@ -299,6 +337,8 @@ else \ #define PARSE_INT_FORMAT(res, arg, unsig) \ if (long_flag) \ res = (unsig long)va_arg(arg, unsig long); \ +else if (size_t_flag) \ + res = (unsig long)va_arg(arg, size_t); \ else if (short_flag) \ res = (unsig short)va_arg(arg, unsig int); \ else \ @@ -313,343 +353,350 @@ else \ static int xyzprintf (struct snprintf_state *state, const char *char_format, va_list ap) { - const unsigned char *format = (const unsigned char *)char_format; - unsigned char c; - int len = 0; - - while((c = *format++)) { - if (c == '%') { - int flags = 0; - int width = 0; - int prec = -1; - int long_long_flag = 0; - int long_flag = 0; - int short_flag = 0; - - /* flags */ - while((c = *format++)){ - if(c == '-') - flags |= minus_flag; - else if(c == '+') - flags |= plus_flag; - else if(c == ' ') - flags |= space_flag; - else if(c == '#') - flags |= alternate_flag; - else if(c == '0') - flags |= zero_flag; - else if(c == '\'') - ; /* just ignore */ - else - break; - } + const unsigned char *format = (const unsigned char *)char_format; + unsigned char c; + int len = 0; + + while((c = *format++)) { + if (c == '%') { + int flags = 0; + int width = 0; + int prec = -1; + int size_t_flag = 0; + int long_long_flag = 0; + int long_flag = 0; + int short_flag = 0; + + /* flags */ + while((c = *format++)){ + if(c == '-') + flags |= minus_flag; + else if(c == '+') + flags |= plus_flag; + else if(c == ' ') + flags |= space_flag; + else if(c == '#') + flags |= alternate_flag; + else if(c == '0') + flags |= zero_flag; + else if(c == '\'') + ; /* just ignore */ + else + break; + } - if((flags & space_flag) && (flags & plus_flag)) - flags ^= space_flag; - - if((flags & minus_flag) && (flags & zero_flag)) - flags ^= zero_flag; - - /* width */ - if (isdigit(c)) - do { - width = width * 10 + c - '0'; - c = *format++; - } while(isdigit(c)); - else if(c == '*') { - width = va_arg(ap, int); - c = *format++; - } - - /* precision */ - if (c == '.') { - prec = 0; - c = *format++; - if (isdigit(c)) - do { - prec = prec * 10 + c - '0'; - c = *format++; - } while(isdigit(c)); - else if (c == '*') { - prec = va_arg(ap, int); - c = *format++; - } - } - - /* size */ - - if (c == 'h') { - short_flag = 1; - c = *format++; - } else if (c == 'l') { - long_flag = 1; - c = *format++; - if (c == 'l') { - long_long_flag = 1; - c = *format++; + if((flags & space_flag) && (flags & plus_flag)) + flags ^= space_flag; + + if((flags & minus_flag) && (flags & zero_flag)) + flags ^= zero_flag; + + /* width */ + if (isdigit(c)) + do { + width = width * 10 + c - '0'; + c = *format++; + } while(isdigit(c)); + else if(c == '*') { + width = va_arg(ap, int); + c = *format++; + } + + /* precision */ + if (c == '.') { + prec = 0; + c = *format++; + if (isdigit(c)) + do { + prec = prec * 10 + c - '0'; + c = *format++; + } while(isdigit(c)); + else if (c == '*') { + prec = va_arg(ap, int); + c = *format++; + } + } + + /* size */ + + if (c == 'h') { + short_flag = 1; + c = *format++; + } else if (c == 'z') { + size_t_flag = 1; + c = *format++; + } else if (c == 'l') { + long_flag = 1; + c = *format++; + if (c == 'l') { + long_long_flag = 1; + c = *format++; + } + } + + if(c != 'd' && c != 'i') + flags &= ~(plus_flag | space_flag); + + switch (c) { + case 'c' : + append_char(state, va_arg(ap, int), width, flags); + ++len; + break; + case 's' : + len += append_string(state, + va_arg(ap, unsigned char*), + width, + prec, + flags); + break; + case 'd' : + case 'i' : { + longest arg; + u_longest num; + int minusp = 0; + + PARSE_INT_FORMAT(arg, ap, signed); + + if (arg < 0) { + minusp = 1; + num = -arg; + } else + num = arg; + + len += append_number (state, num, 10, "0123456789", + width, prec, flags, minusp); + break; + } + case 'u' : { + u_longest arg; + + PARSE_INT_FORMAT(arg, ap, unsigned); + + len += append_number (state, arg, 10, "0123456789", + width, prec, flags, 0); + break; + } + case 'o' : { + u_longest arg; + + PARSE_INT_FORMAT(arg, ap, unsigned); + + len += append_number (state, arg, 010, "01234567", + width, prec, flags, 0); + break; + } + case 'x' : { + u_longest arg; + + PARSE_INT_FORMAT(arg, ap, unsigned); + + len += append_number (state, arg, 0x10, "0123456789abcdef", + width, prec, flags, 0); + break; + } + case 'X' :{ + u_longest arg; + + PARSE_INT_FORMAT(arg, ap, unsigned); + + len += append_number (state, arg, 0x10, "0123456789ABCDEF", + width, prec, flags, 0); + break; + } + case 'p' : { + unsigned long arg = (unsigned long)va_arg(ap, void*); + + len += append_number (state, arg, 0x10, "0123456789ABCDEF", + width, prec, flags, 0); + break; + } + case 'n' : { + int *arg = va_arg(ap, int*); + *arg = state->s - state->str; + break; + } + case '\0' : + --format; + /* FALLTHROUGH */ + case '%' : + (*state->append_char)(state, c); + ++len; + break; + default : + (*state->append_char)(state, '%'); + (*state->append_char)(state, c); + len += 2; + break; + } + } else { + (*state->append_char) (state, c); + ++len; } - } - - switch (c) { - case 'c' : - append_char(state, va_arg(ap, int), width, flags); - ++len; - break; - case 's' : - len += append_string(state, - va_arg(ap, unsigned char*), - width, - prec, - flags); - break; - case 'd' : - case 'i' : { - longest arg; - u_longest num; - int minusp = 0; - - PARSE_INT_FORMAT(arg, ap, signed); - - if (arg < 0) { - minusp = 1; - num = -arg; - } else - num = arg; - - len += append_number (state, num, 10, "0123456789", - width, prec, flags, minusp); - break; - } - case 'u' : { - u_longest arg; - - PARSE_INT_FORMAT(arg, ap, unsigned); - - len += append_number (state, arg, 10, "0123456789", - width, prec, flags, 0); - break; - } - case 'o' : { - u_longest arg; - - PARSE_INT_FORMAT(arg, ap, unsigned); - - len += append_number (state, arg, 010, "01234567", - width, prec, flags, 0); - break; - } - case 'x' : { - u_longest arg; - - PARSE_INT_FORMAT(arg, ap, unsigned); - - len += append_number (state, arg, 0x10, "0123456789abcdef", - width, prec, flags, 0); - break; - } - case 'X' :{ - u_longest arg; - - PARSE_INT_FORMAT(arg, ap, unsigned); - - len += append_number (state, arg, 0x10, "0123456789ABCDEF", - width, prec, flags, 0); - break; - } - case 'p' : { - unsigned long arg = (unsigned long)va_arg(ap, void*); - - len += append_number (state, arg, 0x10, "0123456789ABCDEF", - width, prec, flags, 0); - break; - } - case 'n' : { - int *arg = va_arg(ap, int*); - *arg = state->s - state->str; - break; - } - case '\0' : - --format; - /* FALLTHROUGH */ - case '%' : - (*state->append_char)(state, c); - ++len; - break; - default : - (*state->append_char)(state, '%'); - (*state->append_char)(state, c); - len += 2; - break; - } - } else { - (*state->append_char) (state, c); - ++len; } - } - return len; + return len; } #if !defined(HAVE_SNPRINTF) || defined(TEST_SNPRINTF) -int +int ROKEN_LIB_FUNCTION snprintf (char *str, size_t sz, const char *format, ...) { - va_list args; - int ret; - - va_start(args, format); - ret = vsnprintf (str, sz, format, args); - va_end(args); - -#ifdef PARANOIA - { - int ret2; - char *tmp; - - tmp = malloc (sz); - if (tmp == NULL) - abort (); + va_list args; + int ret; va_start(args, format); - ret2 = vsprintf (tmp, format, args); + ret = vsnprintf (str, sz, format, args); va_end(args); - if (ret != ret2 || strcmp(str, tmp)) - abort (); - free (tmp); - } + +#ifdef PARANOIA + { + int ret2; + char *tmp; + + tmp = malloc (sz); + if (tmp == NULL) + abort (); + + va_start(args, format); + ret2 = vsprintf (tmp, format, args); + va_end(args); + if (ret != ret2 || strcmp(str, tmp)) + abort (); + free (tmp); + } #endif - return ret; + return ret; } #endif #if !defined(HAVE_ASPRINTF) || defined(TEST_SNPRINTF) -int +int ROKEN_LIB_FUNCTION asprintf (char **ret, const char *format, ...) { - va_list args; - int val; - - va_start(args, format); - val = vasprintf (ret, format, args); - va_end(args); - -#ifdef PARANOIA - { - int ret2; - char *tmp; - tmp = malloc (val + 1); - if (tmp == NULL) - abort (); + va_list args; + int val; va_start(args, format); - ret2 = vsprintf (tmp, format, args); + val = vasprintf (ret, format, args); va_end(args); - if (val != ret2 || strcmp(*ret, tmp)) - abort (); - free (tmp); - } + +#ifdef PARANOIA + { + int ret2; + char *tmp; + tmp = malloc (val + 1); + if (tmp == NULL) + abort (); + + va_start(args, format); + ret2 = vsprintf (tmp, format, args); + va_end(args); + if (val != ret2 || strcmp(*ret, tmp)) + abort (); + free (tmp); + } #endif - return val; + return val; } #endif #if !defined(HAVE_ASNPRINTF) || defined(TEST_SNPRINTF) -int +int ROKEN_LIB_FUNCTION asnprintf (char **ret, size_t max_sz, const char *format, ...) { - va_list args; - int val; + va_list args; + int val; - va_start(args, format); - val = vasnprintf (ret, max_sz, format, args); + va_start(args, format); + val = vasnprintf (ret, max_sz, format, args); #ifdef PARANOIA - { - int ret2; - char *tmp; - tmp = malloc (val + 1); - if (tmp == NULL) - abort (); - - ret2 = vsprintf (tmp, format, args); - if (val != ret2 || strcmp(*ret, tmp)) - abort (); - free (tmp); - } + { + int ret2; + char *tmp; + tmp = malloc (val + 1); + if (tmp == NULL) + abort (); + + ret2 = vsprintf (tmp, format, args); + if (val != ret2 || strcmp(*ret, tmp)) + abort (); + free (tmp); + } #endif - va_end(args); - return val; + va_end(args); + return val; } #endif #if !defined(HAVE_VASPRINTF) || defined(TEST_SNPRINTF) -int +int ROKEN_LIB_FUNCTION vasprintf (char **ret, const char *format, va_list args) { - return vasnprintf (ret, 0, format, args); + return vasnprintf (ret, 0, format, args); } #endif #if !defined(HAVE_VASNPRINTF) || defined(TEST_SNPRINTF) -int +int ROKEN_LIB_FUNCTION vasnprintf (char **ret, size_t max_sz, const char *format, va_list args) { - int st; - struct snprintf_state state; - - state.max_sz = max_sz; - state.sz = 1; - state.str = malloc(state.sz); - if (state.str == NULL) { - *ret = NULL; - return -1; - } - state.s = state.str; - state.theend = state.s + state.sz - 1; - state.append_char = as_append_char; - - st = xyzprintf (&state, format, args); - if (st > state.sz) { - free (state.str); - *ret = NULL; - return -1; - } else { - char *tmp; - - *state.s = '\0'; - tmp = realloc (state.str, st+1); - if (tmp == NULL) { - free (state.str); - *ret = NULL; - return -1; + int st; + struct snprintf_state state; + + state.max_sz = max_sz; + state.sz = 1; + state.str = malloc(state.sz); + if (state.str == NULL) { + *ret = NULL; + return -1; + } + state.s = state.str; + state.theend = state.s + state.sz - 1; + state.append_char = as_append_char; + + st = xyzprintf (&state, format, args); + if (st > state.sz) { + free (state.str); + *ret = NULL; + return -1; + } else { + char *tmp; + + *state.s = '\0'; + tmp = realloc (state.str, st+1); + if (tmp == NULL) { + free (state.str); + *ret = NULL; + return -1; + } + *ret = tmp; + return st; } - *ret = tmp; - return st; - } } #endif #if !defined(HAVE_VSNPRINTF) || defined(TEST_SNPRINTF) -int +int ROKEN_LIB_FUNCTION vsnprintf (char *str, size_t sz, const char *format, va_list args) { - struct snprintf_state state; - int ret; - unsigned char *ustr = (unsigned char *)str; - - state.max_sz = 0; - state.sz = sz; - state.str = ustr; - state.s = ustr; - state.theend = ustr + sz - (sz > 0); - state.append_char = sn_append_char; - - ret = xyzprintf (&state, format, args); - if (state.s != NULL) - *state.s = '\0'; - return ret; + struct snprintf_state state; + int ret; + unsigned char *ustr = (unsigned char *)str; + + state.max_sz = 0; + state.sz = sz; + state.str = ustr; + state.s = ustr; + state.theend = ustr + sz - (sz > 0); + state.append_char = sn_append_char; + + ret = xyzprintf (&state, format, args); + if (state.s != NULL && sz != 0) + *state.s = '\0'; + return ret; } #endif diff --git a/crypto/heimdal/lib/roken/socket.c b/crypto/heimdal/lib/roken/socket.c index bd67013..a82dd01 100644 --- a/crypto/heimdal/lib/roken/socket.c +++ b/crypto/heimdal/lib/roken/socket.c @@ -33,27 +33,27 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: socket.c,v 1.8 2003/04/15 03:26:51 lha Exp $"); +RCSID("$Id: socket.c 21005 2007-06-08 01:54:35Z lha $"); #endif -#include <roken.h> +#include "roken.h" #include <err.h> /* * Set `sa' to the unitialized address of address family `af' */ -void +void ROKEN_LIB_FUNCTION socket_set_any (struct sockaddr *sa, int af) { switch (af) { case AF_INET : { - struct sockaddr_in *sin = (struct sockaddr_in *)sa; + struct sockaddr_in *sin4 = (struct sockaddr_in *)sa; - memset (sin, 0, sizeof(*sin)); - sin->sin_family = AF_INET; - sin->sin_port = 0; - sin->sin_addr.s_addr = INADDR_ANY; + memset (sin4, 0, sizeof(*sin4)); + sin4->sin_family = AF_INET; + sin4->sin_port = 0; + sin4->sin_addr.s_addr = INADDR_ANY; break; } #ifdef HAVE_IPV6 @@ -77,17 +77,17 @@ socket_set_any (struct sockaddr *sa, int af) * set `sa' to (`ptr', `port') */ -void +void ROKEN_LIB_FUNCTION socket_set_address_and_port (struct sockaddr *sa, const void *ptr, int port) { switch (sa->sa_family) { case AF_INET : { - struct sockaddr_in *sin = (struct sockaddr_in *)sa; + struct sockaddr_in *sin4 = (struct sockaddr_in *)sa; - memset (sin, 0, sizeof(*sin)); - sin->sin_family = AF_INET; - sin->sin_port = port; - memcpy (&sin->sin_addr, ptr, sizeof(struct in_addr)); + memset (sin4, 0, sizeof(*sin4)); + sin4->sin_family = AF_INET; + sin4->sin_port = port; + memcpy (&sin4->sin_addr, ptr, sizeof(struct in_addr)); break; } #ifdef HAVE_IPV6 @@ -111,7 +111,7 @@ socket_set_address_and_port (struct sockaddr *sa, const void *ptr, int port) * Return the size of an address of the type in `sa' */ -size_t +size_t ROKEN_LIB_FUNCTION socket_addr_size (const struct sockaddr *sa) { switch (sa->sa_family) { @@ -131,7 +131,7 @@ socket_addr_size (const struct sockaddr *sa) * Return the size of a `struct sockaddr' in `sa'. */ -size_t +size_t ROKEN_LIB_FUNCTION socket_sockaddr_size (const struct sockaddr *sa) { switch (sa->sa_family) { @@ -151,13 +151,13 @@ socket_sockaddr_size (const struct sockaddr *sa) * Return the binary address of `sa'. */ -void * +void * ROKEN_LIB_FUNCTION socket_get_address (struct sockaddr *sa) { switch (sa->sa_family) { case AF_INET : { - struct sockaddr_in *sin = (struct sockaddr_in *)sa; - return &sin->sin_addr; + struct sockaddr_in *sin4 = (struct sockaddr_in *)sa; + return &sin4->sin_addr; } #ifdef HAVE_IPV6 case AF_INET6 : { @@ -175,13 +175,13 @@ socket_get_address (struct sockaddr *sa) * Return the port number from `sa'. */ -int +int ROKEN_LIB_FUNCTION socket_get_port (const struct sockaddr *sa) { switch (sa->sa_family) { case AF_INET : { - const struct sockaddr_in *sin = (const struct sockaddr_in *)sa; - return sin->sin_port; + const struct sockaddr_in *sin4 = (const struct sockaddr_in *)sa; + return sin4->sin_port; } #ifdef HAVE_IPV6 case AF_INET6 : { @@ -199,13 +199,13 @@ socket_get_port (const struct sockaddr *sa) * Set the port in `sa' to `port'. */ -void +void ROKEN_LIB_FUNCTION socket_set_port (struct sockaddr *sa, int port) { switch (sa->sa_family) { case AF_INET : { - struct sockaddr_in *sin = (struct sockaddr_in *)sa; - sin->sin_port = port; + struct sockaddr_in *sin4 = (struct sockaddr_in *)sa; + sin4->sin_port = port; break; } #ifdef HAVE_IPV6 @@ -224,7 +224,7 @@ socket_set_port (struct sockaddr *sa, int port) /* * Set the range of ports to use when binding with port = 0. */ -void +void ROKEN_LIB_FUNCTION socket_set_portrange (int sock, int restr, int af) { #if defined(IP_PORTRANGE) @@ -250,7 +250,7 @@ socket_set_portrange (int sock, int restr, int af) * Enable debug on `sock'. */ -void +void ROKEN_LIB_FUNCTION socket_set_debug (int sock) { #if defined(SO_DEBUG) && defined(HAVE_SETSOCKOPT) @@ -265,7 +265,7 @@ socket_set_debug (int sock) * Set the type-of-service of `sock' to `tos'. */ -void +void ROKEN_LIB_FUNCTION socket_set_tos (int sock, int tos) { #if defined(IP_TOS) && defined(HAVE_SETSOCKOPT) @@ -279,7 +279,7 @@ socket_set_tos (int sock, int tos) * set the reuse of addresses on `sock' to `val'. */ -void +void ROKEN_LIB_FUNCTION socket_set_reuseaddr (int sock, int val) { #if defined(SO_REUSEADDR) && defined(HAVE_SETSOCKOPT) @@ -288,3 +288,15 @@ socket_set_reuseaddr (int sock, int val) err (1, "setsockopt SO_REUSEADDR"); #endif } + +/* + * Set the that the `sock' should bind to only IPv6 addresses. + */ + +void ROKEN_LIB_FUNCTION +socket_set_ipv6only (int sock, int val) +{ +#if defined(IPV6_V6ONLY) && defined(HAVE_SETSOCKOPT) + setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&val, sizeof(val)); +#endif +} diff --git a/crypto/heimdal/lib/roken/socket_wrapper.c b/crypto/heimdal/lib/roken/socket_wrapper.c new file mode 100644 index 0000000..9e6bfdd --- /dev/null +++ b/crypto/heimdal/lib/roken/socket_wrapper.c @@ -0,0 +1,1913 @@ +/* + * Copyright (C) Jelmer Vernooij 2005 <jelmer@samba.org> + * Copyright (C) Stefan Metzmacher 2006 <metze@samba.org> + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the author nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +/* + Socket wrapper library. Passes all socket communication over + unix domain sockets if the environment variable SOCKET_WRAPPER_DIR + is set. +*/ + +#define SOCKET_WRAPPER_NOT_REPLACE + +#ifdef _SAMBA_BUILD_ + +#include "includes.h" +#include "system/network.h" +#include "system/filesys.h" + +#ifdef malloc +#undef malloc +#endif +#ifdef calloc +#undef calloc +#endif +#ifdef strdup +#undef strdup +#endif + +#else /* _SAMBA_BUILD_ */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#undef SOCKET_WRAPPER_REPLACE + +#include <sys/types.h> +#ifdef TIME_WITH_SYS_TIME +#include <sys/time.h> +#include <time.h> +#elif defined(HAVE_SYS_TIME_H) +#include <sys/time.h> +#else +#include <time.h> +#endif +#include <sys/stat.h> +#include <sys/socket.h> +#include <sys/ioctl.h> +#ifdef HAVE_SYS_FILIO_H +#include <sys/filio.h> +#endif +#include <errno.h> +#include <sys/un.h> +#include <netinet/in.h> +#include <netinet/tcp.h> +#include <fcntl.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <stdio.h> +#include "roken.h" + +#include "socket_wrapper.h" + +#define HAVE_GETTIMEOFDAY_TZ 1 + +#define _PUBLIC_ + +#endif + +#define SWRAP_DLIST_ADD(list,item) do { \ + if (!(list)) { \ + (item)->prev = NULL; \ + (item)->next = NULL; \ + (list) = (item); \ + } else { \ + (item)->prev = NULL; \ + (item)->next = (list); \ + (list)->prev = (item); \ + (list) = (item); \ + } \ +} while (0) + +#define SWRAP_DLIST_REMOVE(list,item) do { \ + if ((list) == (item)) { \ + (list) = (item)->next; \ + if (list) { \ + (list)->prev = NULL; \ + } \ + } else { \ + if ((item)->prev) { \ + (item)->prev->next = (item)->next; \ + } \ + if ((item)->next) { \ + (item)->next->prev = (item)->prev; \ + } \ + } \ + (item)->prev = NULL; \ + (item)->next = NULL; \ +} while (0) + +/* LD_PRELOAD doesn't work yet, so REWRITE_CALLS is all we support + * for now */ +#define REWRITE_CALLS + +#ifdef REWRITE_CALLS +#define real_accept accept +#define real_connect connect +#define real_bind bind +#define real_listen listen +#define real_getpeername getpeername +#define real_getsockname getsockname +#define real_getsockopt getsockopt +#define real_setsockopt setsockopt +#define real_recvfrom recvfrom +#define real_sendto sendto +#define real_ioctl ioctl +#define real_recv recv +#define real_send send +#define real_socket socket +#define real_close close +#define real_dup dup +#define real_dup2 dup2 +#endif + +#ifdef HAVE_GETTIMEOFDAY_TZ +#define swrapGetTimeOfDay(tval) gettimeofday(tval,NULL) +#else +#define swrapGetTimeOfDay(tval) gettimeofday(tval) +#endif + +/* we need to use a very terse format here as IRIX 6.4 silently + truncates names to 16 chars, so if we use a longer name then we + can't tell which port a packet came from with recvfrom() + + with this format we have 8 chars left for the directory name +*/ +#define SOCKET_FORMAT "%c%02X%04X" +#define SOCKET_TYPE_CHAR_TCP 'T' +#define SOCKET_TYPE_CHAR_UDP 'U' +#define SOCKET_TYPE_CHAR_TCP_V6 'X' +#define SOCKET_TYPE_CHAR_UDP_V6 'Y' + +#define MAX_WRAPPED_INTERFACES 16 + +#define SW_IPV6_ADDRESS 1 + +static struct sockaddr *sockaddr_dup(const void *data, socklen_t len) +{ + struct sockaddr *ret = (struct sockaddr *)malloc(len); + memcpy(ret, data, len); + return ret; +} + +static void set_port(int family, int prt, struct sockaddr *addr) +{ + switch (family) { + case AF_INET: + ((struct sockaddr_in *)addr)->sin_port = htons(prt); + break; +#ifdef HAVE_IPV6 + case AF_INET6: + ((struct sockaddr_in6 *)addr)->sin6_port = htons(prt); + break; +#endif + } +} + +static int socket_length(int family) +{ + switch (family) { + case AF_INET: + return sizeof(struct sockaddr_in); +#ifdef HAVE_IPV6 + case AF_INET6: + return sizeof(struct sockaddr_in6); +#endif + } + return -1; +} + + + +struct socket_info +{ + int fd; + + int family; + int type; + int protocol; + int bound; + int bcast; + int is_server; + + char *path; + char *tmp_path; + + struct sockaddr *myname; + socklen_t myname_len; + + struct sockaddr *peername; + socklen_t peername_len; + + struct { + unsigned long pck_snd; + unsigned long pck_rcv; + } io; + + struct socket_info *prev, *next; +}; + +static struct socket_info *sockets; + + +static const char *socket_wrapper_dir(void) +{ + const char *s = getenv("SOCKET_WRAPPER_DIR"); + if (s == NULL) { + return NULL; + } + if (strncmp(s, "./", 2) == 0) { + s += 2; + } + return s; +} + +static unsigned int socket_wrapper_default_iface(void) +{ + const char *s = getenv("SOCKET_WRAPPER_DEFAULT_IFACE"); + if (s) { + unsigned int iface; + if (sscanf(s, "%u", &iface) == 1) { + if (iface >= 1 && iface <= MAX_WRAPPED_INTERFACES) { + return iface; + } + } + } + + return 1;/* 127.0.0.1 */ +} + +static int convert_un_in(const struct sockaddr_un *un, struct sockaddr *in, socklen_t *len) +{ + unsigned int iface; + unsigned int prt; + const char *p; + char type; + + p = strrchr(un->sun_path, '/'); + if (p) p++; else p = un->sun_path; + + if (sscanf(p, SOCKET_FORMAT, &type, &iface, &prt) != 3) { + errno = EINVAL; + return -1; + } + + if (iface == 0 || iface > MAX_WRAPPED_INTERFACES) { + errno = EINVAL; + return -1; + } + + if (prt > 0xFFFF) { + errno = EINVAL; + return -1; + } + + switch(type) { + case SOCKET_TYPE_CHAR_TCP: + case SOCKET_TYPE_CHAR_UDP: { + struct sockaddr_in *in2 = (struct sockaddr_in *)in; + + if ((*len) < sizeof(*in2)) { + errno = EINVAL; + return -1; + } + + memset(in2, 0, sizeof(*in2)); + in2->sin_family = AF_INET; + in2->sin_addr.s_addr = htonl((127<<24) | iface); + in2->sin_port = htons(prt); + + *len = sizeof(*in2); + break; + } +#ifdef HAVE_IPV6 + case SOCKET_TYPE_CHAR_TCP_V6: + case SOCKET_TYPE_CHAR_UDP_V6: { + struct sockaddr_in6 *in2 = (struct sockaddr_in6 *)in; + + if ((*len) < sizeof(*in2)) { + errno = EINVAL; + return -1; + } + + memset(in2, 0, sizeof(*in2)); + in2->sin6_family = AF_INET6; + in2->sin6_addr.s6_addr[0] = SW_IPV6_ADDRESS; + in2->sin6_port = htons(prt); + + *len = sizeof(*in2); + break; + } +#endif + default: + errno = EINVAL; + return -1; + } + + return 0; +} + +static int convert_in_un_remote(struct socket_info *si, const struct sockaddr *inaddr, struct sockaddr_un *un, + int *bcast) +{ + char type = '\0'; + unsigned int prt; + unsigned int iface; + int is_bcast = 0; + + if (bcast) *bcast = 0; + + switch (si->family) { + case AF_INET: { + const struct sockaddr_in *in = + (const struct sockaddr_in *)inaddr; + unsigned int addr = ntohl(in->sin_addr.s_addr); + char u_type = '\0'; + char b_type = '\0'; + char a_type = '\0'; + + switch (si->type) { + case SOCK_STREAM: + u_type = SOCKET_TYPE_CHAR_TCP; + break; + case SOCK_DGRAM: + u_type = SOCKET_TYPE_CHAR_UDP; + a_type = SOCKET_TYPE_CHAR_UDP; + b_type = SOCKET_TYPE_CHAR_UDP; + break; + } + + prt = ntohs(in->sin_port); + if (a_type && addr == 0xFFFFFFFF) { + /* 255.255.255.255 only udp */ + is_bcast = 2; + type = a_type; + iface = socket_wrapper_default_iface(); + } else if (b_type && addr == 0x7FFFFFFF) { + /* 127.255.255.255 only udp */ + is_bcast = 1; + type = b_type; + iface = socket_wrapper_default_iface(); + } else if ((addr & 0xFFFFFF00) == 0x7F000000) { + /* 127.0.0.X */ + is_bcast = 0; + type = u_type; + iface = (addr & 0x000000FF); + } else { + errno = ENETUNREACH; + return -1; + } + if (bcast) *bcast = is_bcast; + break; + } +#ifdef HAVE_IPV6 + case AF_INET6: { + const struct sockaddr_in6 *in = + (const struct sockaddr_in6 *)inaddr; + + switch (si->type) { + case SOCK_STREAM: + type = SOCKET_TYPE_CHAR_TCP_V6; + break; + case SOCK_DGRAM: + type = SOCKET_TYPE_CHAR_UDP_V6; + break; + } + + /* XXX no multicast/broadcast */ + + prt = ntohs(in->sin6_port); + iface = SW_IPV6_ADDRESS; + + break; + } +#endif + default: + errno = ENETUNREACH; + return -1; + } + + if (prt == 0) { + errno = EINVAL; + return -1; + } + + if (is_bcast) { + snprintf(un->sun_path, sizeof(un->sun_path), "%s/EINVAL", + socket_wrapper_dir()); + /* the caller need to do more processing */ + return 0; + } + + snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, + socket_wrapper_dir(), type, iface, prt); + + return 0; +} + +static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *inaddr, struct sockaddr_un *un, + int *bcast) +{ + char type = '\0'; + unsigned int prt; + unsigned int iface; + struct stat st; + int is_bcast = 0; + + if (bcast) *bcast = 0; + + switch (si->family) { + case AF_INET: { + const struct sockaddr_in *in = + (const struct sockaddr_in *)inaddr; + unsigned int addr = ntohl(in->sin_addr.s_addr); + char u_type = '\0'; + char d_type = '\0'; + char b_type = '\0'; + char a_type = '\0'; + + prt = ntohs(in->sin_port); + + switch (si->type) { + case SOCK_STREAM: + u_type = SOCKET_TYPE_CHAR_TCP; + d_type = SOCKET_TYPE_CHAR_TCP; + break; + case SOCK_DGRAM: + u_type = SOCKET_TYPE_CHAR_UDP; + d_type = SOCKET_TYPE_CHAR_UDP; + a_type = SOCKET_TYPE_CHAR_UDP; + b_type = SOCKET_TYPE_CHAR_UDP; + break; + } + + if (addr == 0) { + /* 0.0.0.0 */ + is_bcast = 0; + type = d_type; + iface = socket_wrapper_default_iface(); + } else if (a_type && addr == 0xFFFFFFFF) { + /* 255.255.255.255 only udp */ + is_bcast = 2; + type = a_type; + iface = socket_wrapper_default_iface(); + } else if (b_type && addr == 0x7FFFFFFF) { + /* 127.255.255.255 only udp */ + is_bcast = 1; + type = b_type; + iface = socket_wrapper_default_iface(); + } else if ((addr & 0xFFFFFF00) == 0x7F000000) { + /* 127.0.0.X */ + is_bcast = 0; + type = u_type; + iface = (addr & 0x000000FF); + } else { + errno = EADDRNOTAVAIL; + return -1; + } + break; + } +#ifdef HAVE_IPV6 + case AF_INET6: { + const struct sockaddr_in6 *in = + (const struct sockaddr_in6 *)inaddr; + + switch (si->type) { + case SOCK_STREAM: + type = SOCKET_TYPE_CHAR_TCP_V6; + break; + case SOCK_DGRAM: + type = SOCKET_TYPE_CHAR_UDP_V6; + break; + } + + /* XXX no multicast/broadcast */ + + prt = ntohs(in->sin6_port); + iface = SW_IPV6_ADDRESS; + + break; + } +#endif + default: + errno = ENETUNREACH; + return -1; + } + + + if (bcast) *bcast = is_bcast; + + if (prt == 0) { + /* handle auto-allocation of ephemeral ports */ + for (prt = 5001; prt < 10000; prt++) { + snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, + socket_wrapper_dir(), type, iface, prt); + if (stat(un->sun_path, &st) == 0) continue; + + set_port(si->family, prt, si->myname); + } + } + + snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, + socket_wrapper_dir(), type, iface, prt); + return 0; +} + +static struct socket_info *find_socket_info(int fd) +{ + struct socket_info *i; + for (i = sockets; i; i = i->next) { + if (i->fd == fd) + return i; + } + + return NULL; +} + +static int sockaddr_convert_to_un(struct socket_info *si, const struct sockaddr *in_addr, socklen_t in_len, + struct sockaddr_un *out_addr, int alloc_sock, int *bcast) +{ + if (!out_addr) + return 0; + + out_addr->sun_family = AF_UNIX; + + switch (in_addr->sa_family) { + case AF_INET: +#ifdef HAVE_IPV6 + case AF_INET6: +#endif + switch (si->type) { + case SOCK_STREAM: + case SOCK_DGRAM: + break; + default: + errno = ESOCKTNOSUPPORT; + return -1; + } + if (alloc_sock) { + return convert_in_un_alloc(si, in_addr, out_addr, bcast); + } else { + return convert_in_un_remote(si, in_addr, out_addr, bcast); + } + default: + break; + } + + errno = EAFNOSUPPORT; + return -1; +} + +static int sockaddr_convert_from_un(const struct socket_info *si, + const struct sockaddr_un *in_addr, + socklen_t un_addrlen, + int family, + struct sockaddr *out_addr, + socklen_t *out_addrlen) +{ + if (out_addr == NULL || out_addrlen == NULL) + return 0; + + if (un_addrlen == 0) { + *out_addrlen = 0; + return 0; + } + + switch (family) { + case AF_INET: +#ifdef HAVE_IPV6 + case AF_INET6: +#endif + switch (si->type) { + case SOCK_STREAM: + case SOCK_DGRAM: + break; + default: + errno = ESOCKTNOSUPPORT; + return -1; + } + return convert_un_in(in_addr, out_addr, out_addrlen); + default: + break; + } + + errno = EAFNOSUPPORT; + return -1; +} + +enum swrap_packet_type { + SWRAP_CONNECT_SEND, + SWRAP_CONNECT_UNREACH, + SWRAP_CONNECT_RECV, + SWRAP_CONNECT_ACK, + SWRAP_ACCEPT_SEND, + SWRAP_ACCEPT_RECV, + SWRAP_ACCEPT_ACK, + SWRAP_RECVFROM, + SWRAP_SENDTO, + SWRAP_SENDTO_UNREACH, + SWRAP_PENDING_RST, + SWRAP_RECV, + SWRAP_RECV_RST, + SWRAP_SEND, + SWRAP_SEND_RST, + SWRAP_CLOSE_SEND, + SWRAP_CLOSE_RECV, + SWRAP_CLOSE_ACK +}; + +struct swrap_file_hdr { + unsigned long magic; + unsigned short version_major; + unsigned short version_minor; + long timezone; + unsigned long sigfigs; + unsigned long frame_max_len; +#define SWRAP_FRAME_LENGTH_MAX 0xFFFF + unsigned long link_type; +}; +#define SWRAP_FILE_HDR_SIZE 24 + +struct swrap_packet { + struct { + unsigned long seconds; + unsigned long micro_seconds; + unsigned long recorded_length; + unsigned long full_length; + } frame; +#define SWRAP_PACKET__FRAME_SIZE 16 + + struct { + struct { + unsigned char ver_hdrlen; + unsigned char tos; + unsigned short packet_length; + unsigned short identification; + unsigned char flags; + unsigned char fragment; + unsigned char ttl; + unsigned char protocol; + unsigned short hdr_checksum; + unsigned long src_addr; + unsigned long dest_addr; + } hdr; +#define SWRAP_PACKET__IP_HDR_SIZE 20 + + union { + struct { + unsigned short source_port; + unsigned short dest_port; + unsigned long seq_num; + unsigned long ack_num; + unsigned char hdr_length; + unsigned char control; + unsigned short window; + unsigned short checksum; + unsigned short urg; + } tcp; +#define SWRAP_PACKET__IP_P_TCP_SIZE 20 + struct { + unsigned short source_port; + unsigned short dest_port; + unsigned short length; + unsigned short checksum; + } udp; +#define SWRAP_PACKET__IP_P_UDP_SIZE 8 + struct { + unsigned char type; + unsigned char code; + unsigned short checksum; + unsigned long unused; + } icmp; +#define SWRAP_PACKET__IP_P_ICMP_SIZE 8 + } p; + } ip; +}; +#define SWRAP_PACKET_SIZE 56 + +static const char *socket_wrapper_pcap_file(void) +{ + static int initialized = 0; + static const char *s = NULL; + static const struct swrap_file_hdr h; + static const struct swrap_packet p; + + if (initialized == 1) { + return s; + } + initialized = 1; + + /* + * TODO: don't use the structs use plain buffer offsets + * and PUSH_U8(), PUSH_U16() and PUSH_U32() + * + * for now make sure we disable PCAP support + * if the struct has alignment! + */ + if (sizeof(h) != SWRAP_FILE_HDR_SIZE) { + return NULL; + } + if (sizeof(p) != SWRAP_PACKET_SIZE) { + return NULL; + } + if (sizeof(p.frame) != SWRAP_PACKET__FRAME_SIZE) { + return NULL; + } + if (sizeof(p.ip.hdr) != SWRAP_PACKET__IP_HDR_SIZE) { + return NULL; + } + if (sizeof(p.ip.p.tcp) != SWRAP_PACKET__IP_P_TCP_SIZE) { + return NULL; + } + if (sizeof(p.ip.p.udp) != SWRAP_PACKET__IP_P_UDP_SIZE) { + return NULL; + } + if (sizeof(p.ip.p.icmp) != SWRAP_PACKET__IP_P_ICMP_SIZE) { + return NULL; + } + + s = getenv("SOCKET_WRAPPER_PCAP_FILE"); + if (s == NULL) { + return NULL; + } + if (strncmp(s, "./", 2) == 0) { + s += 2; + } + return s; +} + +static struct swrap_packet *swrap_packet_init(struct timeval *tval, + const struct sockaddr_in *src_addr, + const struct sockaddr_in *dest_addr, + int socket_type, + const unsigned char *payload, + size_t payload_len, + unsigned long tcp_seq, + unsigned long tcp_ack, + unsigned char tcp_ctl, + int unreachable, + size_t *_packet_len) +{ + struct swrap_packet *ret; + struct swrap_packet *packet; + size_t packet_len; + size_t alloc_len; + size_t nonwire_len = sizeof(packet->frame); + size_t wire_hdr_len = 0; + size_t wire_len = 0; + size_t icmp_hdr_len = 0; + size_t icmp_truncate_len = 0; + unsigned char protocol = 0, icmp_protocol = 0; + unsigned short src_port = src_addr->sin_port; + unsigned short dest_port = dest_addr->sin_port; + + switch (socket_type) { + case SOCK_STREAM: + protocol = 0x06; /* TCP */ + wire_hdr_len = sizeof(packet->ip.hdr) + sizeof(packet->ip.p.tcp); + wire_len = wire_hdr_len + payload_len; + break; + + case SOCK_DGRAM: + protocol = 0x11; /* UDP */ + wire_hdr_len = sizeof(packet->ip.hdr) + sizeof(packet->ip.p.udp); + wire_len = wire_hdr_len + payload_len; + break; + } + + if (unreachable) { + icmp_protocol = protocol; + protocol = 0x01; /* ICMP */ + if (wire_len > 64 ) { + icmp_truncate_len = wire_len - 64; + } + icmp_hdr_len = sizeof(packet->ip.hdr) + sizeof(packet->ip.p.icmp); + wire_hdr_len += icmp_hdr_len; + wire_len += icmp_hdr_len; + } + + packet_len = nonwire_len + wire_len; + alloc_len = packet_len; + if (alloc_len < sizeof(struct swrap_packet)) { + alloc_len = sizeof(struct swrap_packet); + } + ret = (struct swrap_packet *)malloc(alloc_len); + if (!ret) return NULL; + + packet = ret; + + packet->frame.seconds = tval->tv_sec; + packet->frame.micro_seconds = tval->tv_usec; + packet->frame.recorded_length = wire_len - icmp_truncate_len; + packet->frame.full_length = wire_len - icmp_truncate_len; + + packet->ip.hdr.ver_hdrlen = 0x45; /* version 4 and 5 * 32 bit words */ + packet->ip.hdr.tos = 0x00; + packet->ip.hdr.packet_length = htons(wire_len - icmp_truncate_len); + packet->ip.hdr.identification = htons(0xFFFF); + packet->ip.hdr.flags = 0x40; /* BIT 1 set - means don't fraqment */ + packet->ip.hdr.fragment = htons(0x0000); + packet->ip.hdr.ttl = 0xFF; + packet->ip.hdr.protocol = protocol; + packet->ip.hdr.hdr_checksum = htons(0x0000); + packet->ip.hdr.src_addr = src_addr->sin_addr.s_addr; + packet->ip.hdr.dest_addr = dest_addr->sin_addr.s_addr; + + if (unreachable) { + packet->ip.p.icmp.type = 0x03; /* destination unreachable */ + packet->ip.p.icmp.code = 0x01; /* host unreachable */ + packet->ip.p.icmp.checksum = htons(0x0000); + packet->ip.p.icmp.unused = htonl(0x00000000); + + /* set the ip header in the ICMP payload */ + packet = (struct swrap_packet *)(((unsigned char *)ret) + icmp_hdr_len); + packet->ip.hdr.ver_hdrlen = 0x45; /* version 4 and 5 * 32 bit words */ + packet->ip.hdr.tos = 0x00; + packet->ip.hdr.packet_length = htons(wire_len - icmp_hdr_len); + packet->ip.hdr.identification = htons(0xFFFF); + packet->ip.hdr.flags = 0x40; /* BIT 1 set - means don't fraqment */ + packet->ip.hdr.fragment = htons(0x0000); + packet->ip.hdr.ttl = 0xFF; + packet->ip.hdr.protocol = icmp_protocol; + packet->ip.hdr.hdr_checksum = htons(0x0000); + packet->ip.hdr.src_addr = dest_addr->sin_addr.s_addr; + packet->ip.hdr.dest_addr = src_addr->sin_addr.s_addr; + + src_port = dest_addr->sin_port; + dest_port = src_addr->sin_port; + } + + switch (socket_type) { + case SOCK_STREAM: + packet->ip.p.tcp.source_port = src_port; + packet->ip.p.tcp.dest_port = dest_port; + packet->ip.p.tcp.seq_num = htonl(tcp_seq); + packet->ip.p.tcp.ack_num = htonl(tcp_ack); + packet->ip.p.tcp.hdr_length = 0x50; /* 5 * 32 bit words */ + packet->ip.p.tcp.control = tcp_ctl; + packet->ip.p.tcp.window = htons(0x7FFF); + packet->ip.p.tcp.checksum = htons(0x0000); + packet->ip.p.tcp.urg = htons(0x0000); + + break; + + case SOCK_DGRAM: + packet->ip.p.udp.source_port = src_addr->sin_port; + packet->ip.p.udp.dest_port = dest_addr->sin_port; + packet->ip.p.udp.length = htons(8 + payload_len); + packet->ip.p.udp.checksum = htons(0x0000); + + break; + } + + if (payload && payload_len > 0) { + unsigned char *p = (unsigned char *)ret; + p += nonwire_len; + p += wire_hdr_len; + memcpy(p, payload, payload_len); + } + + *_packet_len = packet_len - icmp_truncate_len; + return ret; +} + +static int swrap_get_pcap_fd(const char *fname) +{ + static int fd = -1; + + if (fd != -1) return fd; + + fd = open(fname, O_WRONLY|O_CREAT|O_EXCL|O_APPEND, 0644); + if (fd != -1) { + struct swrap_file_hdr file_hdr; + file_hdr.magic = 0xA1B2C3D4; + file_hdr.version_major = 0x0002; + file_hdr.version_minor = 0x0004; + file_hdr.timezone = 0x00000000; + file_hdr.sigfigs = 0x00000000; + file_hdr.frame_max_len = SWRAP_FRAME_LENGTH_MAX; + file_hdr.link_type = 0x0065; /* 101 RAW IP */ + + write(fd, &file_hdr, sizeof(file_hdr)); + return fd; + } + + fd = open(fname, O_WRONLY|O_APPEND, 0644); + + return fd; +} + +static void swrap_dump_packet(struct socket_info *si, const struct sockaddr *addr, + enum swrap_packet_type type, + const void *buf, size_t len) +{ + const struct sockaddr_in *src_addr; + const struct sockaddr_in *dest_addr; + const char *file_name; + unsigned long tcp_seq = 0; + unsigned long tcp_ack = 0; + unsigned char tcp_ctl = 0; + int unreachable = 0; + struct timeval tv; + struct swrap_packet *packet; + size_t packet_len = 0; + int fd; + + file_name = socket_wrapper_pcap_file(); + if (!file_name) { + return; + } + + switch (si->family) { + case AF_INET: +#ifdef HAVE_IPV6 + case AF_INET6: +#endif + break; + default: + return; + } + + switch (type) { + case SWRAP_CONNECT_SEND: + if (si->type != SOCK_STREAM) return; + + src_addr = (const struct sockaddr_in *)si->myname; + dest_addr = (const struct sockaddr_in *)addr; + + tcp_seq = si->io.pck_snd; + tcp_ack = si->io.pck_rcv; + tcp_ctl = 0x02; /* SYN */ + + si->io.pck_snd += 1; + + break; + + case SWRAP_CONNECT_RECV: + if (si->type != SOCK_STREAM) return; + + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)addr; + + tcp_seq = si->io.pck_rcv; + tcp_ack = si->io.pck_snd; + tcp_ctl = 0x12; /** SYN,ACK */ + + si->io.pck_rcv += 1; + + break; + + case SWRAP_CONNECT_UNREACH: + if (si->type != SOCK_STREAM) return; + + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)addr; + + /* Unreachable: resend the data of SWRAP_CONNECT_SEND */ + tcp_seq = si->io.pck_snd - 1; + tcp_ack = si->io.pck_rcv; + tcp_ctl = 0x02; /* SYN */ + unreachable = 1; + + break; + + case SWRAP_CONNECT_ACK: + if (si->type != SOCK_STREAM) return; + + src_addr = (const struct sockaddr_in *)si->myname; + dest_addr = (const struct sockaddr_in *)addr; + + tcp_seq = si->io.pck_snd; + tcp_ack = si->io.pck_rcv; + tcp_ctl = 0x10; /* ACK */ + + break; + + case SWRAP_ACCEPT_SEND: + if (si->type != SOCK_STREAM) return; + + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)addr; + + tcp_seq = si->io.pck_rcv; + tcp_ack = si->io.pck_snd; + tcp_ctl = 0x02; /* SYN */ + + si->io.pck_rcv += 1; + + break; + + case SWRAP_ACCEPT_RECV: + if (si->type != SOCK_STREAM) return; + + src_addr = (const struct sockaddr_in *)si->myname; + dest_addr = (const struct sockaddr_in *)addr; + + tcp_seq = si->io.pck_snd; + tcp_ack = si->io.pck_rcv; + tcp_ctl = 0x12; /* SYN,ACK */ + + si->io.pck_snd += 1; + + break; + + case SWRAP_ACCEPT_ACK: + if (si->type != SOCK_STREAM) return; + + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)addr; + + tcp_seq = si->io.pck_rcv; + tcp_ack = si->io.pck_snd; + tcp_ctl = 0x10; /* ACK */ + + break; + + case SWRAP_SEND: + src_addr = (const struct sockaddr_in *)si->myname; + dest_addr = (const struct sockaddr_in *)si->peername; + + tcp_seq = si->io.pck_snd; + tcp_ack = si->io.pck_rcv; + tcp_ctl = 0x18; /* PSH,ACK */ + + si->io.pck_snd += len; + + break; + + case SWRAP_SEND_RST: + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)si->peername; + + if (si->type == SOCK_DGRAM) { + swrap_dump_packet(si, si->peername, + SWRAP_SENDTO_UNREACH, + buf, len); + return; + } + + tcp_seq = si->io.pck_rcv; + tcp_ack = si->io.pck_snd; + tcp_ctl = 0x14; /** RST,ACK */ + + break; + + case SWRAP_PENDING_RST: + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)si->peername; + + if (si->type == SOCK_DGRAM) { + return; + } + + tcp_seq = si->io.pck_rcv; + tcp_ack = si->io.pck_snd; + tcp_ctl = 0x14; /* RST,ACK */ + + break; + + case SWRAP_RECV: + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)si->peername; + + tcp_seq = si->io.pck_rcv; + tcp_ack = si->io.pck_snd; + tcp_ctl = 0x18; /* PSH,ACK */ + + si->io.pck_rcv += len; + + break; + + case SWRAP_RECV_RST: + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)si->peername; + + if (si->type == SOCK_DGRAM) { + return; + } + + tcp_seq = si->io.pck_rcv; + tcp_ack = si->io.pck_snd; + tcp_ctl = 0x14; /* RST,ACK */ + + break; + + case SWRAP_SENDTO: + src_addr = (const struct sockaddr_in *)si->myname; + dest_addr = (const struct sockaddr_in *)addr; + + si->io.pck_snd += len; + + break; + + case SWRAP_SENDTO_UNREACH: + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)addr; + + unreachable = 1; + + break; + + case SWRAP_RECVFROM: + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)addr; + + si->io.pck_rcv += len; + + break; + + case SWRAP_CLOSE_SEND: + if (si->type != SOCK_STREAM) return; + + src_addr = (const struct sockaddr_in *)si->myname; + dest_addr = (const struct sockaddr_in *)si->peername; + + tcp_seq = si->io.pck_snd; + tcp_ack = si->io.pck_rcv; + tcp_ctl = 0x11; /* FIN, ACK */ + + si->io.pck_snd += 1; + + break; + + case SWRAP_CLOSE_RECV: + if (si->type != SOCK_STREAM) return; + + dest_addr = (const struct sockaddr_in *)si->myname; + src_addr = (const struct sockaddr_in *)si->peername; + + tcp_seq = si->io.pck_rcv; + tcp_ack = si->io.pck_snd; + tcp_ctl = 0x11; /* FIN,ACK */ + + si->io.pck_rcv += 1; + + break; + + case SWRAP_CLOSE_ACK: + if (si->type != SOCK_STREAM) return; + + src_addr = (const struct sockaddr_in *)si->myname; + dest_addr = (const struct sockaddr_in *)si->peername; + + tcp_seq = si->io.pck_snd; + tcp_ack = si->io.pck_rcv; + tcp_ctl = 0x10; /* ACK */ + + break; + default: + return; + } + + swrapGetTimeOfDay(&tv); + + packet = swrap_packet_init(&tv, src_addr, dest_addr, si->type, + (const unsigned char *)buf, len, + tcp_seq, tcp_ack, tcp_ctl, unreachable, + &packet_len); + if (!packet) { + return; + } + + fd = swrap_get_pcap_fd(file_name); + if (fd != -1) { + write(fd, packet, packet_len); + } + + free(packet); +} + +_PUBLIC_ int swrap_socket(int family, int type, int protocol) +{ + struct socket_info *si; + int fd; + + if (!socket_wrapper_dir()) { + return real_socket(family, type, protocol); + } + + switch (family) { + case AF_INET: +#ifdef HAVE_IPV6 + case AF_INET6: +#endif + break; + case AF_UNIX: + return real_socket(family, type, protocol); + default: + errno = EAFNOSUPPORT; + return -1; + } + + switch (type) { + case SOCK_STREAM: + break; + case SOCK_DGRAM: + break; + default: + errno = EPROTONOSUPPORT; + return -1; + } + +#if 0 + switch (protocol) { + case 0: + break; + default: + errno = EPROTONOSUPPORT; + return -1; + } +#endif + + fd = real_socket(AF_UNIX, type, 0); + + if (fd == -1) return -1; + + si = (struct socket_info *)calloc(1, sizeof(struct socket_info)); + + si->family = family; + si->type = type; + si->protocol = protocol; + si->fd = fd; + + SWRAP_DLIST_ADD(sockets, si); + + return si->fd; +} + +_PUBLIC_ int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen) +{ + struct socket_info *parent_si, *child_si; + int fd; + struct sockaddr_un un_addr; + socklen_t un_addrlen = sizeof(un_addr); + struct sockaddr_un un_my_addr; + socklen_t un_my_addrlen = sizeof(un_my_addr); + struct sockaddr *my_addr; + socklen_t my_addrlen, len; + int ret; + + parent_si = find_socket_info(s); + if (!parent_si) { + return real_accept(s, addr, addrlen); + } + + /* + * assume out sockaddr have the same size as the in parent + * socket family + */ + my_addrlen = socket_length(parent_si->family); + if (my_addrlen < 0) { + errno = EINVAL; + return -1; + } + + my_addr = malloc(my_addrlen); + if (my_addr == NULL) { + return -1; + } + + memset(&un_addr, 0, sizeof(un_addr)); + memset(&un_my_addr, 0, sizeof(un_my_addr)); + + ret = real_accept(s, (struct sockaddr *)&un_addr, &un_addrlen); + if (ret == -1) { + free(my_addr); + return ret; + } + + fd = ret; + + len = my_addrlen; + ret = sockaddr_convert_from_un(parent_si, &un_addr, un_addrlen, + parent_si->family, my_addr, &len); + if (ret == -1) { + free(my_addr); + close(fd); + return ret; + } + + child_si = (struct socket_info *)malloc(sizeof(struct socket_info)); + memset(child_si, 0, sizeof(*child_si)); + + child_si->fd = fd; + child_si->family = parent_si->family; + child_si->type = parent_si->type; + child_si->protocol = parent_si->protocol; + child_si->bound = 1; + child_si->is_server = 1; + + child_si->peername_len = len; + child_si->peername = sockaddr_dup(my_addr, len); + + if (addr != NULL && addrlen != NULL) { + *addrlen = len; + if (*addrlen >= len) + memcpy(addr, my_addr, len); + *addrlen = 0; + } + + ret = real_getsockname(fd, (struct sockaddr *)&un_my_addr, &un_my_addrlen); + if (ret == -1) { + free(child_si); + close(fd); + return ret; + } + + len = my_addrlen; + ret = sockaddr_convert_from_un(child_si, &un_my_addr, un_my_addrlen, + child_si->family, my_addr, &len); + if (ret == -1) { + free(child_si); + free(my_addr); + close(fd); + return ret; + } + + child_si->myname_len = len; + child_si->myname = sockaddr_dup(my_addr, len); + free(my_addr); + + SWRAP_DLIST_ADD(sockets, child_si); + + swrap_dump_packet(child_si, addr, SWRAP_ACCEPT_SEND, NULL, 0); + swrap_dump_packet(child_si, addr, SWRAP_ACCEPT_RECV, NULL, 0); + swrap_dump_packet(child_si, addr, SWRAP_ACCEPT_ACK, NULL, 0); + + return fd; +} + +static int autobind_start_init; +static int autobind_start; + +/* using sendto() or connect() on an unbound socket would give the + recipient no way to reply, as unlike UDP and TCP, a unix domain + socket can't auto-assign emphemeral port numbers, so we need to + assign it here */ +static int swrap_auto_bind(struct socket_info *si) +{ + struct sockaddr_un un_addr; + int i; + char type; + int ret; + int port; + struct stat st; + + if (autobind_start_init != 1) { + autobind_start_init = 1; + autobind_start = getpid(); + autobind_start %= 50000; + autobind_start += 10000; + } + + un_addr.sun_family = AF_UNIX; + + switch (si->family) { + case AF_INET: { + struct sockaddr_in in; + + switch (si->type) { + case SOCK_STREAM: + type = SOCKET_TYPE_CHAR_TCP; + break; + case SOCK_DGRAM: + type = SOCKET_TYPE_CHAR_UDP; + break; + default: + errno = ESOCKTNOSUPPORT; + return -1; + } + + memset(&in, 0, sizeof(in)); + in.sin_family = AF_INET; + in.sin_addr.s_addr = htonl(127<<24 | + socket_wrapper_default_iface()); + + si->myname_len = sizeof(in); + si->myname = sockaddr_dup(&in, si->myname_len); + break; + } +#ifdef HAVE_IPV6 + case AF_INET6: { + struct sockaddr_in6 in6; + + switch (si->type) { + case SOCK_STREAM: + type = SOCKET_TYPE_CHAR_TCP_V6; + break; + case SOCK_DGRAM: + type = SOCKET_TYPE_CHAR_UDP_V6; + break; + default: + errno = ESOCKTNOSUPPORT; + return -1; + } + + memset(&in6, 0, sizeof(in6)); + in6.sin6_family = AF_INET6; + in6.sin6_addr.s6_addr[0] = SW_IPV6_ADDRESS; + si->myname_len = sizeof(in6); + si->myname = sockaddr_dup(&in6, si->myname_len); + break; + } +#endif + default: + errno = ESOCKTNOSUPPORT; + return -1; + } + + if (autobind_start > 60000) { + autobind_start = 10000; + } + + for (i=0;i<1000;i++) { + port = autobind_start + i; + snprintf(un_addr.sun_path, sizeof(un_addr.sun_path), + "%s/"SOCKET_FORMAT, socket_wrapper_dir(), + type, socket_wrapper_default_iface(), port); + if (stat(un_addr.sun_path, &st) == 0) continue; + + ret = real_bind(si->fd, (struct sockaddr *)&un_addr, sizeof(un_addr)); + if (ret == -1) return ret; + + si->tmp_path = strdup(un_addr.sun_path); + si->bound = 1; + autobind_start = port + 1; + break; + } + if (i == 1000) { + errno = ENFILE; + return -1; + } + + set_port(si->family, port, si->myname); + + return 0; +} + + +_PUBLIC_ int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t addrlen) +{ + int ret; + struct sockaddr_un un_addr; + struct socket_info *si = find_socket_info(s); + + if (!si) { + return real_connect(s, serv_addr, addrlen); + } + + if (si->bound == 0) { + ret = swrap_auto_bind(si); + if (ret == -1) return -1; + } + + if (si->family != serv_addr->sa_family) { + errno = EINVAL; + return -1; + } + + ret = sockaddr_convert_to_un(si, (const struct sockaddr *)serv_addr, addrlen, &un_addr, 0, NULL); + if (ret == -1) return -1; + + swrap_dump_packet(si, serv_addr, SWRAP_CONNECT_SEND, NULL, 0); + + ret = real_connect(s, (struct sockaddr *)&un_addr, + sizeof(struct sockaddr_un)); + + /* to give better errors */ + if (ret == -1 && errno == ENOENT) { + errno = EHOSTUNREACH; + } + + if (ret == 0) { + si->peername_len = addrlen; + si->peername = sockaddr_dup(serv_addr, addrlen); + + swrap_dump_packet(si, serv_addr, SWRAP_CONNECT_RECV, NULL, 0); + swrap_dump_packet(si, serv_addr, SWRAP_CONNECT_ACK, NULL, 0); + } else { + swrap_dump_packet(si, serv_addr, SWRAP_CONNECT_UNREACH, NULL, 0); + } + + return ret; +} + +_PUBLIC_ int swrap_bind(int s, const struct sockaddr *myaddr, socklen_t addrlen) +{ + int ret; + struct sockaddr_un un_addr; + struct socket_info *si = find_socket_info(s); + + if (!si) { + return real_bind(s, myaddr, addrlen); + } + + si->myname_len = addrlen; + si->myname = sockaddr_dup(myaddr, addrlen); + + ret = sockaddr_convert_to_un(si, (const struct sockaddr *)myaddr, addrlen, &un_addr, 1, &si->bcast); + if (ret == -1) return -1; + + unlink(un_addr.sun_path); + + ret = real_bind(s, (struct sockaddr *)&un_addr, + sizeof(struct sockaddr_un)); + + if (ret == 0) { + si->bound = 1; + } + + return ret; +} + +_PUBLIC_ int swrap_listen(int s, int backlog) +{ + int ret; + struct socket_info *si = find_socket_info(s); + + if (!si) { + return real_listen(s, backlog); + } + + ret = real_listen(s, backlog); + + return ret; +} + +_PUBLIC_ int swrap_getpeername(int s, struct sockaddr *name, socklen_t *addrlen) +{ + struct socket_info *si = find_socket_info(s); + + if (!si) { + return real_getpeername(s, name, addrlen); + } + + if (!si->peername) + { + errno = ENOTCONN; + return -1; + } + + memcpy(name, si->peername, si->peername_len); + *addrlen = si->peername_len; + + return 0; +} + +_PUBLIC_ int swrap_getsockname(int s, struct sockaddr *name, socklen_t *addrlen) +{ + struct socket_info *si = find_socket_info(s); + + if (!si) { + return real_getsockname(s, name, addrlen); + } + + memcpy(name, si->myname, si->myname_len); + *addrlen = si->myname_len; + + return 0; +} + +_PUBLIC_ int swrap_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) +{ + struct socket_info *si = find_socket_info(s); + + if (!si) { + return real_getsockopt(s, level, optname, optval, optlen); + } + + if (level == SOL_SOCKET) { + return real_getsockopt(s, level, optname, optval, optlen); + } + + errno = ENOPROTOOPT; + return -1; +} + +_PUBLIC_ int swrap_setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen) +{ + struct socket_info *si = find_socket_info(s); + + if (!si) { + return real_setsockopt(s, level, optname, optval, optlen); + } + + if (level == SOL_SOCKET) { + return real_setsockopt(s, level, optname, optval, optlen); + } + + switch (si->family) { + case AF_INET: + return 0; + default: + errno = ENOPROTOOPT; + return -1; + } +} + +_PUBLIC_ ssize_t swrap_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) +{ + struct sockaddr_un un_addr; + socklen_t un_addrlen = sizeof(un_addr); + int ret; + struct socket_info *si = find_socket_info(s); + + if (!si) { + return real_recvfrom(s, buf, len, flags, from, fromlen); + } + + /* irix 6.4 forgets to null terminate the sun_path string :-( */ + memset(&un_addr, 0, sizeof(un_addr)); + ret = real_recvfrom(s, buf, len, flags, (struct sockaddr *)&un_addr, &un_addrlen); + if (ret == -1) + return ret; + + if (sockaddr_convert_from_un(si, &un_addr, un_addrlen, + si->family, from, fromlen) == -1) { + return -1; + } + + swrap_dump_packet(si, from, SWRAP_RECVFROM, buf, ret); + + return ret; +} + + +_PUBLIC_ ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) +{ + struct sockaddr_un un_addr; + int ret; + struct socket_info *si = find_socket_info(s); + int bcast = 0; + + if (!si) { + return real_sendto(s, buf, len, flags, to, tolen); + } + + switch (si->type) { + case SOCK_STREAM: + ret = real_send(s, buf, len, flags); + break; + case SOCK_DGRAM: + if (si->bound == 0) { + ret = swrap_auto_bind(si); + if (ret == -1) return -1; + } + + ret = sockaddr_convert_to_un(si, to, tolen, &un_addr, 0, &bcast); + if (ret == -1) return -1; + + if (bcast) { + struct stat st; + unsigned int iface; + unsigned int prt = ntohs(((const struct sockaddr_in *)to)->sin_port); + char type; + + type = SOCKET_TYPE_CHAR_UDP; + + for(iface=0; iface <= MAX_WRAPPED_INTERFACES; iface++) { + snprintf(un_addr.sun_path, sizeof(un_addr.sun_path), "%s/"SOCKET_FORMAT, + socket_wrapper_dir(), type, iface, prt); + if (stat(un_addr.sun_path, &st) != 0) continue; + + /* ignore the any errors in broadcast sends */ + real_sendto(s, buf, len, flags, (struct sockaddr *)&un_addr, sizeof(un_addr)); + } + + swrap_dump_packet(si, to, SWRAP_SENDTO, buf, len); + + return len; + } + + ret = real_sendto(s, buf, len, flags, (struct sockaddr *)&un_addr, sizeof(un_addr)); + break; + default: + ret = -1; + errno = EHOSTUNREACH; + break; + } + + /* to give better errors */ + if (ret == -1 && errno == ENOENT) { + errno = EHOSTUNREACH; + } + + if (ret == -1) { + swrap_dump_packet(si, to, SWRAP_SENDTO, buf, len); + swrap_dump_packet(si, to, SWRAP_SENDTO_UNREACH, buf, len); + } else { + swrap_dump_packet(si, to, SWRAP_SENDTO, buf, ret); + } + + return ret; +} + +_PUBLIC_ int swrap_ioctl(int s, int r, void *p) +{ + int ret; + struct socket_info *si = find_socket_info(s); + int value; + + if (!si) { + return real_ioctl(s, r, p); + } + + ret = real_ioctl(s, r, p); + + switch (r) { + case FIONREAD: + value = *((int *)p); + if (ret == -1 && errno != EAGAIN && errno != ENOBUFS) { + swrap_dump_packet(si, NULL, SWRAP_PENDING_RST, NULL, 0); + } else if (value == 0) { /* END OF FILE */ + swrap_dump_packet(si, NULL, SWRAP_PENDING_RST, NULL, 0); + } + break; + } + + return ret; +} + +_PUBLIC_ ssize_t swrap_recv(int s, void *buf, size_t len, int flags) +{ + int ret; + struct socket_info *si = find_socket_info(s); + + if (!si) { + return real_recv(s, buf, len, flags); + } + + ret = real_recv(s, buf, len, flags); + if (ret == -1 && errno != EAGAIN && errno != ENOBUFS) { + swrap_dump_packet(si, NULL, SWRAP_RECV_RST, NULL, 0); + } else if (ret == 0) { /* END OF FILE */ + swrap_dump_packet(si, NULL, SWRAP_RECV_RST, NULL, 0); + } else { + swrap_dump_packet(si, NULL, SWRAP_RECV, buf, ret); + } + + return ret; +} + + +_PUBLIC_ ssize_t swrap_send(int s, const void *buf, size_t len, int flags) +{ + int ret; + struct socket_info *si = find_socket_info(s); + + if (!si) { + return real_send(s, buf, len, flags); + } + + ret = real_send(s, buf, len, flags); + + if (ret == -1) { + swrap_dump_packet(si, NULL, SWRAP_SEND, buf, len); + swrap_dump_packet(si, NULL, SWRAP_SEND_RST, NULL, 0); + } else { + swrap_dump_packet(si, NULL, SWRAP_SEND, buf, ret); + } + + return ret; +} + +_PUBLIC_ int swrap_close(int fd) +{ + struct socket_info *si = find_socket_info(fd); + int ret; + + if (!si) { + return real_close(fd); + } + + SWRAP_DLIST_REMOVE(sockets, si); + + if (si->myname && si->peername) { + swrap_dump_packet(si, NULL, SWRAP_CLOSE_SEND, NULL, 0); + } + + ret = real_close(fd); + + if (si->myname && si->peername) { + swrap_dump_packet(si, NULL, SWRAP_CLOSE_RECV, NULL, 0); + swrap_dump_packet(si, NULL, SWRAP_CLOSE_ACK, NULL, 0); + } + + if (si->path) free(si->path); + if (si->myname) free(si->myname); + if (si->peername) free(si->peername); + if (si->tmp_path) { + unlink(si->tmp_path); + free(si->tmp_path); + } + free(si); + + return ret; +} + +static int +dup_internal(const struct socket_info *si_oldd, int fd) +{ + struct socket_info *si_newd; + + si_newd = (struct socket_info *)calloc(1, sizeof(struct socket_info)); + + si_newd->fd = fd; + + si_newd->family = si_oldd->family; + si_newd->type = si_oldd->type; + si_newd->protocol = si_oldd->protocol; + si_newd->bound = si_oldd->bound; + si_newd->bcast = si_oldd->bcast; + if (si_oldd->path) + si_newd->path = strdup(si_oldd->path); + if (si_oldd->tmp_path) + si_newd->tmp_path = strdup(si_oldd->tmp_path); + si_newd->myname = + sockaddr_dup(si_oldd->myname, si_oldd->myname_len); + si_newd->myname_len = si_oldd->myname_len; + si_newd->peername = + sockaddr_dup(si_oldd->peername, si_oldd->peername_len); + si_newd->peername_len = si_oldd->peername_len; + + si_newd->io = si_oldd->io; + + SWRAP_DLIST_ADD(sockets, si_newd); + + return fd; +} + + +_PUBLIC_ int swrap_dup(int oldd) +{ + struct socket_info *si; + int fd; + + si = find_socket_info(oldd); + if (si == NULL) + return real_dup(oldd); + + fd = real_dup(si->fd); + if (fd < 0) + return fd; + + return dup_internal(si, fd); +} + + +_PUBLIC_ int swrap_dup2(int oldd, int newd) +{ + struct socket_info *si_newd, *si_oldd; + int fd; + + if (newd == oldd) + return newd; + + si_oldd = find_socket_info(oldd); + si_newd = find_socket_info(newd); + + if (si_oldd == NULL && si_newd == NULL) + return real_dup2(oldd, newd); + + fd = real_dup2(si_oldd->fd, newd); + if (fd < 0) + return fd; + + /* close new socket first */ + if (si_newd) + swrap_close(newd); + + return dup_internal(si_oldd, fd); +} diff --git a/crypto/heimdal/lib/roken/socket_wrapper.h b/crypto/heimdal/lib/roken/socket_wrapper.h new file mode 100644 index 0000000..316b024 --- /dev/null +++ b/crypto/heimdal/lib/roken/socket_wrapper.h @@ -0,0 +1,146 @@ +/* + * Copyright (C) Jelmer Vernooij 2005 <jelmer@samba.org> + * Copyright (C) Stefan Metzmacher 2006 <metze@samba.org> + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the author nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#ifndef __SOCKET_WRAPPER_H__ +#define __SOCKET_WRAPPER_H__ + +int swrap_socket(int family, int type, int protocol); +int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen); +int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t addrlen); +int swrap_bind(int s, const struct sockaddr *myaddr, socklen_t addrlen); +int swrap_listen(int s, int backlog); +int swrap_getpeername(int s, struct sockaddr *name, socklen_t *addrlen); +int swrap_getsockname(int s, struct sockaddr *name, socklen_t *addrlen); +int swrap_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen); +int swrap_setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen); +ssize_t swrap_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); +ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); +int swrap_ioctl(int s, int req, void *ptr); +ssize_t swrap_recv(int s, void *buf, size_t len, int flags); +ssize_t swrap_send(int s, const void *buf, size_t len, int flags); +int swrap_close(int); +int swrap_dup(int); +int swrap_dup2(int, int); + +#ifdef SOCKET_WRAPPER_REPLACE + +#ifdef accept +#undef accept +#endif +#define accept(s,addr,addrlen) swrap_accept(s,addr,addrlen) + +#ifdef connect +#undef connect +#endif +#define connect(s,serv_addr,addrlen) swrap_connect(s,serv_addr,addrlen) + +#ifdef bind +#undef bind +#endif +#define bind(s,myaddr,addrlen) swrap_bind(s,myaddr,addrlen) + +#ifdef listen +#undef listen +#endif +#define listen(s,blog) swrap_listen(s,blog) + +#ifdef getpeername +#undef getpeername +#endif +#define getpeername(s,name,addrlen) swrap_getpeername(s,name,addrlen) + +#ifdef getsockname +#undef getsockname +#endif +#define getsockname(s,name,addrlen) swrap_getsockname(s,name,addrlen) + +#ifdef getsockopt +#undef getsockopt +#endif +#define getsockopt(s,level,optname,optval,optlen) swrap_getsockopt(s,level,optname,optval,optlen) + +#ifdef setsockopt +#undef setsockopt +#endif +#define setsockopt(s,level,optname,optval,optlen) swrap_setsockopt(s,level,optname,optval,optlen) + +#ifdef recvfrom +#undef recvfrom +#endif +#define recvfrom(s,buf,len,flags,from,fromlen) swrap_recvfrom(s,buf,len,flags,from,fromlen) + +#ifdef sendto +#undef sendto +#endif +#define sendto(s,buf,len,flags,to,tolen) swrap_sendto(s,buf,len,flags,to,tolen) + +#ifdef ioctl +#undef ioctl +#endif +#define ioctl(s,req,ptr) swrap_ioctl(s,req,ptr) + +#ifdef recv +#undef recv +#endif +#define recv(s,buf,len,flags) swrap_recv(s,buf,len,flags) + +#ifdef send +#undef send +#endif +#define send(s,buf,len,flags) swrap_send(s,buf,len,flags) + +#ifdef socket +#undef socket +#endif +#define socket(domain,type,protocol) swrap_socket(domain,type,protocol) + +#ifdef close +#undef close +#endif +#define close(s) swrap_close(s) + +#ifdef dup +#undef dup +#endif +#define dup(oldd) swrap_dup(oldd) + +#ifdef dup2 +#undef dup2 +#endif +#define dup2(oldd, newd) swrap_dup2(oldd, newd) + +#endif + +#endif /* __SOCKET_WRAPPER_H__ */ diff --git a/crypto/heimdal/lib/roken/strcasecmp.c b/crypto/heimdal/lib/roken/strcasecmp.c index cde5b3b..4788d4f 100644 --- a/crypto/heimdal/lib/roken/strcasecmp.c +++ b/crypto/heimdal/lib/roken/strcasecmp.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strcasecmp.c,v 1.10 2003/04/14 11:26:27 lha Exp $"); +RCSID("$Id: strcasecmp.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <string.h> @@ -43,7 +43,7 @@ RCSID("$Id: strcasecmp.c,v 1.10 2003/04/14 11:26:27 lha Exp $"); #ifndef HAVE_STRCASECMP -int +int ROKEN_LIB_FUNCTION strcasecmp(const char *s1, const char *s2) { while(toupper((unsigned char)*s1) == toupper((unsigned char)*s2)) { diff --git a/crypto/heimdal/lib/roken/strcollect.c b/crypto/heimdal/lib/roken/strcollect.c index 1e82ad0..f291891 100644 --- a/crypto/heimdal/lib/roken/strcollect.c +++ b/crypto/heimdal/lib/roken/strcollect.c @@ -33,14 +33,14 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strcollect.c,v 1.1 2000/01/09 10:57:43 assar Exp $"); +RCSID("$Id: strcollect.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdarg.h> #include <stdlib.h> #include <string.h> #include <errno.h> -#include <roken.h> +#include "roken.h" enum { initial = 10, increment = 5 }; @@ -69,7 +69,7 @@ sub (char **argv, int i, int argc, va_list *ap) * terminated by NULL. */ -char ** +char ** ROKEN_LIB_FUNCTION vstrcollect(va_list *ap) { return sub (NULL, 0, 0, ap); @@ -79,7 +79,7 @@ vstrcollect(va_list *ap) * */ -char ** +char ** ROKEN_LIB_FUNCTION strcollect(char *first, ...) { va_list ap; diff --git a/crypto/heimdal/lib/roken/strdup.c b/crypto/heimdal/lib/roken/strdup.c index 87fb43e..a832120 100644 --- a/crypto/heimdal/lib/roken/strdup.c +++ b/crypto/heimdal/lib/roken/strdup.c @@ -33,13 +33,13 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strdup.c,v 1.10 1999/12/02 16:58:53 joda Exp $"); +RCSID("$Id: strdup.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <stdlib.h> #include <string.h> #ifndef HAVE_STRDUP -char * +char * ROKEN_LIB_FUNCTION strdup(const char *old) { char *t = malloc(strlen(old)+1); diff --git a/crypto/heimdal/lib/roken/strerror.c b/crypto/heimdal/lib/roken/strerror.c index 21936d7..ca152f4 100644 --- a/crypto/heimdal/lib/roken/strerror.c +++ b/crypto/heimdal/lib/roken/strerror.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strerror.c,v 1.10 1999/12/02 16:58:53 joda Exp $"); +RCSID("$Id: strerror.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <stdio.h> @@ -43,7 +43,7 @@ RCSID("$Id: strerror.c,v 1.10 1999/12/02 16:58:53 joda Exp $"); extern int sys_nerr; extern char *sys_errlist[]; -char* +char* ROKEN_LIB_FUNCTION strerror(int eno) { static char emsg[1024]; diff --git a/crypto/heimdal/lib/roken/strftime.c b/crypto/heimdal/lib/roken/strftime.c index 985b38a..b7176b6 100644 --- a/crypto/heimdal/lib/roken/strftime.c +++ b/crypto/heimdal/lib/roken/strftime.c @@ -33,9 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#ifdef TEST_STRPFTIME +#include "strpftime-test.h" +#endif #include "roken.h" -RCSID("$Id: strftime.c,v 1.13 2002/08/20 12:42:37 joda Exp $"); +RCSID("$Id: strftime.c 21896 2007-08-09 08:46:08Z lha $"); static const char *abb_weekdays[] = { "Sun", @@ -167,7 +170,7 @@ week_number_mon4 (const struct tm *tm) * */ -size_t +size_t ROKEN_LIB_FUNCTION strftime (char *buf, size_t maxsize, const char *format, const struct tm *tm) { @@ -290,7 +293,7 @@ strftime (char *buf, size_t maxsize, const char *format, case 's' : ret = snprintf (buf, maxsize - n, - "%d", (int)mktime((struct tm *)tm)); + "%d", (int)mktime(rk_UNCONST(tm))); break; case 'S' : ret = snprintf (buf, maxsize - n, diff --git a/crypto/heimdal/lib/roken/strlcat.c b/crypto/heimdal/lib/roken/strlcat.c index 1366e88..3f9c085 100644 --- a/crypto/heimdal/lib/roken/strlcat.c +++ b/crypto/heimdal/lib/roken/strlcat.c @@ -36,11 +36,11 @@ #endif #include "roken.h" -RCSID("$Id: strlcat.c,v 1.6 2002/08/20 09:46:20 joda Exp $"); +RCSID("$Id: strlcat.c 14773 2005-04-12 11:29:18Z lha $"); #ifndef HAVE_STRLCAT -size_t +size_t ROKEN_LIB_FUNCTION strlcat (char *dst, const char *src, size_t dst_sz) { size_t len = strlen(dst); diff --git a/crypto/heimdal/lib/roken/strlcpy.c b/crypto/heimdal/lib/roken/strlcpy.c index b43dbde..6797317 100644 --- a/crypto/heimdal/lib/roken/strlcpy.c +++ b/crypto/heimdal/lib/roken/strlcpy.c @@ -36,11 +36,11 @@ #endif #include "roken.h" -RCSID("$Id: strlcpy.c,v 1.6 2002/08/20 09:42:08 joda Exp $"); +RCSID("$Id: strlcpy.c 14773 2005-04-12 11:29:18Z lha $"); #ifndef HAVE_STRLCPY -size_t +size_t ROKEN_LIB_FUNCTION strlcpy (char *dst, const char *src, size_t dst_sz) { size_t n; diff --git a/crypto/heimdal/lib/roken/strlwr.c b/crypto/heimdal/lib/roken/strlwr.c index f2c6a9f..9e5e973 100644 --- a/crypto/heimdal/lib/roken/strlwr.c +++ b/crypto/heimdal/lib/roken/strlwr.c @@ -33,15 +33,15 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strlwr.c,v 1.5 2003/04/14 11:44:34 lha Exp $"); +RCSID("$Id: strlwr.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <string.h> #include <ctype.h> -#include <roken.h> +#include "roken.h" #ifndef HAVE_STRLWR -char * +char * ROKEN_LIB_FUNCTION strlwr(char *str) { char *s; diff --git a/crypto/heimdal/lib/roken/strncasecmp.c b/crypto/heimdal/lib/roken/strncasecmp.c index a08d9e8..e534393 100644 --- a/crypto/heimdal/lib/roken/strncasecmp.c +++ b/crypto/heimdal/lib/roken/strncasecmp.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strncasecmp.c,v 1.3 2003/04/14 11:46:04 lha Exp $"); +RCSID("$Id: strncasecmp.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <string.h> @@ -42,7 +42,7 @@ RCSID("$Id: strncasecmp.c,v 1.3 2003/04/14 11:46:04 lha Exp $"); #ifndef HAVE_STRNCASECMP -int +int ROKEN_LIB_FUNCTION strncasecmp(const char *s1, const char *s2, size_t n) { while(n > 0 diff --git a/crypto/heimdal/lib/roken/strndup.c b/crypto/heimdal/lib/roken/strndup.c index 31e7e9f..1960fd2 100644 --- a/crypto/heimdal/lib/roken/strndup.c +++ b/crypto/heimdal/lib/roken/strndup.c @@ -33,15 +33,15 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strndup.c,v 1.2 1999/12/02 16:58:53 joda Exp $"); +RCSID("$Id: strndup.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdlib.h> #include <string.h> -#include <roken.h> +#include "roken.h" #ifndef HAVE_STRNDUP -char * +char * ROKEN_LIB_FUNCTION strndup(const char *old, size_t sz) { size_t len = strnlen (old, sz); diff --git a/crypto/heimdal/lib/roken/strnlen.c b/crypto/heimdal/lib/roken/strnlen.c index fffb3b7..3ba61a5 100644 --- a/crypto/heimdal/lib/roken/strnlen.c +++ b/crypto/heimdal/lib/roken/strnlen.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strnlen.c,v 1.7 1999/12/02 16:58:53 joda Exp $"); +RCSID("$Id: strnlen.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" -size_t +size_t ROKEN_LIB_FUNCTION strnlen(const char *s, size_t len) { size_t i; diff --git a/crypto/heimdal/lib/roken/strpftime-test.c b/crypto/heimdal/lib/roken/strpftime-test.c index 7eb8fb8..a1c13f3 100644 --- a/crypto/heimdal/lib/roken/strpftime-test.c +++ b/crypto/heimdal/lib/roken/strpftime-test.c @@ -33,9 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#ifdef TEST_STRPFTIME +#include "strpftime-test.h" +#endif #include "roken.h" -RCSID("$Id: strpftime-test.c,v 1.2 1999/11/12 15:29:55 assar Exp $"); +RCSID("$Id: strpftime-test.c 21897 2007-08-09 08:46:34Z lha $"); enum { MAXSIZE = 26 }; @@ -246,8 +249,8 @@ main(int argc, char **argv) len = strftime (buf, sizeof(buf), tests[i].vals[j].format, tm); if (len != strlen (buf)) { - printf ("length of strftime(\"%s\") = %d (\"%s\")\n", - tests[i].vals[j].format, len, + printf ("length of strftime(\"%s\") = %lu (\"%s\")\n", + tests[i].vals[j].format, (unsigned long)len, buf); ++ret; continue; @@ -279,6 +282,15 @@ main(int argc, char **argv) } } } + { + struct tm tm; + memset(&tm, 0, sizeof(tm)); + strptime ("200505", "%Y%m", &tm); + if (tm.tm_year != 105) + ++ret; + if (tm.tm_mon != 4) + ++ret; + } if (ret) { printf ("%d errors\n", ret); return 1; diff --git a/crypto/heimdal/lib/roken/strpftime-test.h b/crypto/heimdal/lib/roken/strpftime-test.h new file mode 100644 index 0000000..546e552 --- /dev/null +++ b/crypto/heimdal/lib/roken/strpftime-test.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2007 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of KTH nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* $Id: snprintf-test.h 10377 2001-07-19 18:39:14Z assar $ */ + +#ifndef __STRFTIME_TEST_H__ +#define __STRFTIME_TEST_H__ + +/* + * we cannot use the real names of the functions when testing, since + * they might have different prototypes as the system functions, hence + * these evil hacks + */ + +#define strftime test_strftime +#define strptime test_strptime + +#endif /* __STRFTIME_TEST_H__ */ diff --git a/crypto/heimdal/lib/roken/strpool.c b/crypto/heimdal/lib/roken/strpool.c new file mode 100644 index 0000000..6ebe0ce --- /dev/null +++ b/crypto/heimdal/lib/roken/strpool.c @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2005 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +RCSID("$Id: strpool.c 21005 2007-06-08 01:54:35Z lha $"); +#endif + +#include <stdarg.h> +#include <stdlib.h> +#include "roken.h" + +struct rk_strpool { + char *str; + size_t len; +}; + +/* + * + */ + +void ROKEN_LIB_FUNCTION +rk_strpoolfree(struct rk_strpool *p) +{ + if (p->str) { + free(p->str); + p->str = NULL; + } + free(p); +} + +/* + * + */ + +struct rk_strpool * ROKEN_LIB_FUNCTION +rk_strpoolprintf(struct rk_strpool *p, const char *fmt, ...) +{ + va_list ap; + char *str, *str2; + int len; + + if (p == NULL) { + p = malloc(sizeof(*p)); + if (p == NULL) + return NULL; + p->str = NULL; + p->len = 0; + } + va_start(ap, fmt); + len = vasprintf(&str, fmt, ap); + va_end(ap); + if (str == NULL) { + rk_strpoolfree(p); + return NULL; + } + str2 = realloc(p->str, len + p->len + 1); + if (str2 == NULL) { + rk_strpoolfree(p); + return NULL; + } + p->str = str2; + memcpy(p->str + p->len, str, len + 1); + p->len += len; + free(str); + return p; +} + +/* + * + */ + +char * ROKEN_LIB_FUNCTION +rk_strpoolcollect(struct rk_strpool *p) +{ + char *str = p->str; + p->str = NULL; + free(p); + return str; +} diff --git a/crypto/heimdal/lib/roken/strptime.c b/crypto/heimdal/lib/roken/strptime.c index 36f0822..9cd1333 100644 --- a/crypto/heimdal/lib/roken/strptime.c +++ b/crypto/heimdal/lib/roken/strptime.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999 Kungliga Tekniska Högskolan + * Copyright (c) 1999, 2003, 2005 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -33,10 +33,13 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif +#ifdef TEST_STRPFTIME +#include "strpftime-test.h" +#endif #include <ctype.h> #include "roken.h" -RCSID("$Id: strptime.c,v 1.2 1999/11/12 15:29:55 assar Exp $"); +RCSID("$Id: strptime.c 21895 2007-08-09 08:45:54Z lha $"); static const char *abb_weekdays[] = { "Sun", @@ -79,7 +82,7 @@ static const char *abb_month[] = { static const char *full_month[] = { "January", "February", - "Mars", + "March", "April", "May", "June", @@ -120,7 +123,41 @@ match_string (const char **buf, const char **strs) } /* - * tm_year is relative this year */ + * Try to match `*buf' to at the most `n' characters and return the + * resulting number in `num'. Returns 0 or an error. Also advance + * buf. + */ + +static int +parse_number (const char **buf, int n, int *num) +{ + char *s, *str; + int i; + + str = malloc(n + 1); + if (str == NULL) + return -1; + + /* skip whitespace */ + for (; **buf != '\0' && isspace((unsigned char)(**buf)); (*buf)++) + ; + + /* parse at least n characters */ + for (i = 0; **buf != '\0' && i < n && isdigit((unsigned char)(**buf)); i++, (*buf)++) + str[i] = **buf; + str[i] = '\0'; + + *num = strtol (str, &s, 10); + free(str); + if (s == str) + return -1; + + return 0; +} + +/* + * tm_year is relative this year + */ const int tm_year_base = 1900; @@ -204,7 +241,7 @@ set_week_number_mon4 (struct tm *timeptr, int wnum) * */ -char * +char * ROKEN_LIB_FUNCTION strptime (const char *buf, const char *format, struct tm *timeptr) { char c; @@ -213,8 +250,8 @@ strptime (const char *buf, const char *format, struct tm *timeptr) char *s; int ret; - if (isspace (c)) { - while (isspace (*buf)) + if (isspace ((unsigned char)c)) { + while (isspace ((unsigned char)*buf)) ++buf; } else if (c == '%' && format[1] != '\0') { c = *++format; @@ -247,11 +284,9 @@ strptime (const char *buf, const char *format, struct tm *timeptr) timeptr->tm_mon = ret; break; case 'C' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) return NULL; timeptr->tm_year = (ret * 100) - tm_year_base; - buf = s; break; case 'c' : abort (); @@ -263,57 +298,47 @@ strptime (const char *buf, const char *format, struct tm *timeptr) break; case 'd' : case 'e' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) return NULL; timeptr->tm_mday = ret; - buf = s; break; case 'H' : case 'k' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) return NULL; timeptr->tm_hour = ret; - buf = s; break; case 'I' : case 'l' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) return NULL; if (ret == 12) timeptr->tm_hour = 0; else timeptr->tm_hour = ret; - buf = s; break; case 'j' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 3, &ret)) + return NULL; + if (ret == 0) return NULL; timeptr->tm_yday = ret - 1; - buf = s; break; case 'm' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) + return NULL; + if (ret == 0) return NULL; timeptr->tm_mon = ret - 1; - buf = s; break; case 'M' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) return NULL; timeptr->tm_min = ret; - buf = s; break; case 'n' : - if (*buf == '\n') - ++buf; - else - return NULL; + while (isspace ((unsigned char)*buf)) + buf++; break; case 'p' : ret = match_string (&buf, ampm); @@ -338,17 +363,13 @@ strptime (const char *buf, const char *format, struct tm *timeptr) buf = s; break; case 'S' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) return NULL; timeptr->tm_sec = ret; - buf = s; break; case 't' : - if (*buf == '\t') - ++buf; - else - return NULL; + while (isspace ((unsigned char)*buf)) + buf++; break; case 'T' : /* %H:%M:%S */ case 'X' : @@ -358,39 +379,31 @@ strptime (const char *buf, const char *format, struct tm *timeptr) buf = s; break; case 'u' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 1, &ret)) + return NULL; + if (ret <= 0) return NULL; timeptr->tm_wday = ret - 1; - buf = s; break; case 'w' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 1, &ret)) return NULL; timeptr->tm_wday = ret; - buf = s; break; case 'U' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) return NULL; set_week_number_sun (timeptr, ret); - buf = s; break; case 'V' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) return NULL; set_week_number_mon4 (timeptr, ret); - buf = s; break; case 'W' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) return NULL; set_week_number_mon (timeptr, ret); - buf = s; break; case 'x' : s = strptime (buf, "%Y:%m:%d", timeptr); @@ -399,21 +412,17 @@ strptime (const char *buf, const char *format, struct tm *timeptr) buf = s; break; case 'y' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 2, &ret)) return NULL; if (ret < 70) timeptr->tm_year = 100 + ret; else timeptr->tm_year = ret; - buf = s; break; case 'Y' : - ret = strtol (buf, &s, 10); - if (s == buf) + if (parse_number(&buf, 4, &ret)) return NULL; timeptr->tm_year = ret - tm_year_base; - buf = s; break; case 'Z' : abort (); @@ -440,5 +449,5 @@ strptime (const char *buf, const char *format, struct tm *timeptr) return NULL; } } - return (char *)buf; + return rk_UNCONST(buf); } diff --git a/crypto/heimdal/lib/roken/strsep.c b/crypto/heimdal/lib/roken/strsep.c index efc714a..dd191c4 100644 --- a/crypto/heimdal/lib/roken/strsep.c +++ b/crypto/heimdal/lib/roken/strsep.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strsep.c,v 1.3 1999/12/02 16:58:53 joda Exp $"); +RCSID("$Id: strsep.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <string.h> @@ -42,7 +42,7 @@ RCSID("$Id: strsep.c,v 1.3 1999/12/02 16:58:53 joda Exp $"); #ifndef HAVE_STRSEP -char * +char * ROKEN_LIB_FUNCTION strsep(char **str, const char *delim) { char *save = *str; diff --git a/crypto/heimdal/lib/roken/strsep_copy.c b/crypto/heimdal/lib/roken/strsep_copy.c index abe9731..4a0a8b0 100644 --- a/crypto/heimdal/lib/roken/strsep_copy.c +++ b/crypto/heimdal/lib/roken/strsep_copy.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strsep_copy.c,v 1.4 2002/08/14 17:20:40 joda Exp $"); +RCSID("$Id: strsep_copy.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <string.h> @@ -44,7 +44,7 @@ RCSID("$Id: strsep_copy.c,v 1.4 2002/08/14 17:20:40 joda Exp $"); /* strsep, but with const stringp, so return string in buf */ -ssize_t +ssize_t ROKEN_LIB_FUNCTION strsep_copy(const char **stringp, const char *delim, char *buf, size_t len) { const char *save = *stringp; diff --git a/crypto/heimdal/lib/roken/strtok_r.c b/crypto/heimdal/lib/roken/strtok_r.c index 45b036a..fb72f5d 100644 --- a/crypto/heimdal/lib/roken/strtok_r.c +++ b/crypto/heimdal/lib/roken/strtok_r.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strtok_r.c,v 1.5 1999/12/02 16:58:53 joda Exp $"); +RCSID("$Id: strtok_r.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <string.h> @@ -42,7 +42,7 @@ RCSID("$Id: strtok_r.c,v 1.5 1999/12/02 16:58:53 joda Exp $"); #ifndef HAVE_STRTOK_R -char * +char * ROKEN_LIB_FUNCTION strtok_r(char *s1, const char *s2, char **lasts) { char *ret; diff --git a/crypto/heimdal/lib/roken/strupr.c b/crypto/heimdal/lib/roken/strupr.c index 9d136e0..2a53226 100644 --- a/crypto/heimdal/lib/roken/strupr.c +++ b/crypto/heimdal/lib/roken/strupr.c @@ -33,15 +33,15 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: strupr.c,v 1.5 2003/04/14 11:46:41 lha Exp $"); +RCSID("$Id: strupr.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <string.h> #include <ctype.h> -#include <roken.h> +#include "roken.h" #ifndef HAVE_STRUPR -char * +char * ROKEN_LIB_FUNCTION strupr(char *str) { char *s; diff --git a/crypto/heimdal/lib/roken/swab.c b/crypto/heimdal/lib/roken/swab.c index c623bd0..20744ca 100644 --- a/crypto/heimdal/lib/roken/swab.c +++ b/crypto/heimdal/lib/roken/swab.c @@ -38,9 +38,9 @@ #ifndef HAVE_SWAB -RCSID("$Id: swab.c,v 1.7 1999/12/02 16:58:53 joda Exp $"); +RCSID("$Id: swab.c 14773 2005-04-12 11:29:18Z lha $"); -void +void ROKEN_LIB_FUNCTION swab (char *from, char *to, int nbytes) { while(nbytes >= 2) { diff --git a/crypto/heimdal/lib/roken/test-mem.c b/crypto/heimdal/lib/roken/test-mem.c new file mode 100644 index 0000000..d955c1a --- /dev/null +++ b/crypto/heimdal/lib/roken/test-mem.c @@ -0,0 +1,199 @@ +/* + * Copyright (c) 1999 - 2004 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#ifdef HAVE_SYS_MMAN_H +#include <sys/mman.h> +#endif +#include <stdio.h> +#include <string.h> +#include <err.h> +#include "roken.h" + +#include "test-mem.h" + +RCSID("$Id: test-mem.c 21005 2007-06-08 01:54:35Z lha $"); + +/* #undef HAVE_MMAP */ + +struct { + void *start; + size_t size; + void *data_start; + size_t data_size; + enum rk_test_mem_type type; + int fd; +} map; + +struct sigaction sa, osa; + +char *testname; + +static RETSIGTYPE +segv_handler(int sig) +{ + int fd; + char msg[] = "SIGSEGV i current test: "; + + fd = open("/dev/stdout", O_WRONLY, 0600); + if (fd >= 0) { + write(fd, msg, sizeof(msg) - 1); + write(fd, testname, strlen(testname)); + write(fd, "\n", 1); + close(fd); + } + _exit(1); +} + +#define TESTREC() \ + if (testname) \ + errx(1, "test %s run recursively on %s", name, testname); \ + testname = strdup(name); \ + if (testname == NULL) \ + errx(1, "malloc"); + + +void * ROKEN_LIB_FUNCTION +rk_test_mem_alloc(enum rk_test_mem_type type, const char *name, + void *buf, size_t size) +{ +#ifndef HAVE_MMAP + unsigned char *p; + + TESTREC(); + + p = malloc(size + 2); + if (p == NULL) + errx(1, "malloc"); + map.type = type; + map.start = p; + map.size = size + 2; + p[0] = 0xff; + p[map.size] = 0xff; + map.data_start = p + 1; +#else + unsigned char *p; + int flags, ret, fd; + size_t pagesize = getpagesize(); + + TESTREC(); + + map.type = type; + +#ifdef MAP_ANON + flags = MAP_ANON; + fd = -1; +#else + flags = 0; + fd = open ("/dev/zero", O_RDONLY); + if(fd < 0) + err (1, "open /dev/zero"); +#endif + map.fd = fd; + flags |= MAP_PRIVATE; + + map.size = size + pagesize - (size % pagesize) + pagesize * 2; + + p = (unsigned char *)mmap(0, map.size, PROT_READ | PROT_WRITE, + flags, fd, 0); + if (p == (unsigned char *)MAP_FAILED) + err (1, "mmap"); + + map.start = p; + + ret = mprotect ((void *)p, pagesize, 0); + if (ret < 0) + err (1, "mprotect"); + + ret = mprotect (p + map.size - pagesize, pagesize, 0); + if (ret < 0) + err (1, "mprotect"); + + switch (type) { + case RK_TM_OVERRUN: + map.data_start = p + map.size - pagesize - size; + break; + case RK_TM_UNDERRUN: + map.data_start = p + pagesize; + break; + default: + abort(); + } +#endif + sigemptyset (&sa.sa_mask); + sa.sa_flags = 0; +#ifdef SA_RESETHAND + sa.sa_flags |= SA_RESETHAND; +#endif + sa.sa_handler = segv_handler; + sigaction (SIGSEGV, &sa, &osa); + + map.data_size = size; + if (buf) + memcpy(map.data_start, buf, size); + return map.data_start; +} + +void ROKEN_LIB_FUNCTION +rk_test_mem_free(const char *map_name) +{ +#ifndef HAVE_MMAP + unsigned char *p = map.start; + + if (testname == NULL) + errx(1, "test_mem_free call on no free"); + + if (p[0] != 0xff) + errx(1, "%s: %s underrun %x\n", testname, map_name, p[0]); + if (p[map.size] != 0xff) + errx(1, "%s: %s overrun %x\n", testname, map_name, p[map.size - 1]); + free(map.start); +#else + int ret; + + if (testname == NULL) + errx(1, "test_mem_free call on no free"); + + ret = munmap (map.start, map.size); + if (ret < 0) + err (1, "munmap"); + if (map.fd > 0) + close(map.fd); +#endif + free(testname); + testname = NULL; + + sigaction (SIGSEGV, &osa, NULL); +} diff --git a/crypto/heimdal/lib/roken/test-mem.h b/crypto/heimdal/lib/roken/test-mem.h new file mode 100644 index 0000000..896222f --- /dev/null +++ b/crypto/heimdal/lib/roken/test-mem.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 1999 - 2004 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +enum rk_test_mem_type { RK_TM_OVERRUN, RK_TM_UNDERRUN }; + +void * ROKEN_LIB_FUNCTION + rk_test_mem_alloc(enum rk_test_mem_type, const char *, void *, size_t); +void ROKEN_LIB_FUNCTION + rk_test_mem_free(const char *); diff --git a/crypto/heimdal/lib/roken/test-readenv.c b/crypto/heimdal/lib/roken/test-readenv.c new file mode 100644 index 0000000..2cbf816 --- /dev/null +++ b/crypto/heimdal/lib/roken/test-readenv.c @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2005 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +RCSID("$Id: test-readenv.c 20868 2007-06-03 21:02:04Z lha $"); +#endif + +#include "roken.h" +#include "test-mem.h" + +char *s1 = "VAR1=VAL1#comment\n\ +VAR2=VAL2 VAL2 #comment\n\ +#this another comment\n\ +\n\ +VAR3=FOO"; + +char *s2 = "VAR1=ENV2\n\ +"; + +static void +make_file(char *tmpl, size_t l) +{ + int fd; + strlcpy(tmpl, "env.XXXXXX", l); + fd = mkstemp(tmpl); + if(fd < 0) + err(1, "mkstemp"); + close(fd); +} + +static void +write_file(const char *fn, const char *s) +{ + FILE *f; + f = fopen(fn, "w"); + if(f == NULL) { + unlink(fn); + err(1, "fopen"); + } + if(fwrite(s, 1, strlen(s), f) != strlen(s)) + err(1, "short write"); + if(fclose(f) != 0) { + unlink(fn); + err(1, "fclose"); + } +} + +int +main(int argc, char **argv) +{ + char **env = NULL; + int count = 0; + char fn[MAXPATHLEN]; + int error = 0; + + make_file(fn, sizeof(fn)); + + write_file(fn, s1); + count = read_environment(fn, &env); + if(count != 3) { + warnx("test 1: variable count %d != 3", count); + error++; + } + + write_file(fn, s2); + count = read_environment(fn, &env); + if(count != 1) { + warnx("test 2: variable count %d != 1", count); + error++; + } + + unlink(fn); + count = read_environment(fn, &env); + if(count != 0) { + warnx("test 3: variable count %d != 0", count); + error++; + } + for(count = 0; env && env[count]; count++); + if(count != 3) { + warnx("total variable count %d != 3", count); + error++; + } + free_environment(env); + + + return error; +} diff --git a/crypto/heimdal/lib/roken/timegm.c b/crypto/heimdal/lib/roken/timegm.c new file mode 100644 index 0000000..41eb487 --- /dev/null +++ b/crypto/heimdal/lib/roken/timegm.c @@ -0,0 +1,88 @@ +/* + * Copyright (c) 1997, 2006 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +RCSID("$Id: timegm.c 18606 2006-10-19 16:19:10Z lha $"); +#endif + +#include "roken.h" + +static int +is_leap(unsigned y) +{ + y += 1900; + return (y % 4) == 0 && ((y % 100) != 0 || (y % 400) == 0); +} + +/* + * XXX This is a simplifed version of timegm, it needs to support out of + * bounds values. + */ + +time_t +rk_timegm (struct tm *tm) +{ + static const unsigned ndays[2][12] ={ + {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, + {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; + time_t res = 0; + unsigned i; + + if (tm->tm_year < 0) + return -1; + if (tm->tm_mon < 0 || tm->tm_mon > 11) + return -1; + if (tm->tm_mday < 1 || tm->tm_mday > ndays[is_leap(tm->tm_year)][tm->tm_mon]) + return -1; + if (tm->tm_hour < 0 || tm->tm_hour > 23) + return -1; + if (tm->tm_min < 0 || tm->tm_min > 59) + return -1; + if (tm->tm_sec < 0 || tm->tm_sec > 59) + return -1; + + for (i = 70; i < tm->tm_year; ++i) + res += is_leap(i) ? 366 : 365; + + for (i = 0; i < tm->tm_mon; ++i) + res += ndays[is_leap(tm->tm_year)][i]; + res += tm->tm_mday - 1; + res *= 24; + res += tm->tm_hour; + res *= 60; + res += tm->tm_min; + res *= 60; + res += tm->tm_sec; + return res; +} diff --git a/crypto/heimdal/lib/roken/timeval.c b/crypto/heimdal/lib/roken/timeval.c index ea4dee8..b72e202 100644 --- a/crypto/heimdal/lib/roken/timeval.c +++ b/crypto/heimdal/lib/roken/timeval.c @@ -37,7 +37,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: timeval.c,v 1.1 2000/03/03 09:02:42 assar Exp $"); +RCSID("$Id: timeval.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" @@ -46,7 +46,7 @@ RCSID("$Id: timeval.c,v 1.1 2000/03/03 09:02:42 assar Exp $"); * Make `t1' consistent. */ -void +void ROKEN_LIB_FUNCTION timevalfix(struct timeval *t1) { if (t1->tv_usec < 0) { @@ -63,7 +63,7 @@ timevalfix(struct timeval *t1) * t1 += t2 */ -void +void ROKEN_LIB_FUNCTION timevaladd(struct timeval *t1, const struct timeval *t2) { t1->tv_sec += t2->tv_sec; @@ -75,7 +75,7 @@ timevaladd(struct timeval *t1, const struct timeval *t2) * t1 -= t2 */ -void +void ROKEN_LIB_FUNCTION timevalsub(struct timeval *t1, const struct timeval *t2) { t1->tv_sec -= t2->tv_sec; diff --git a/crypto/heimdal/lib/roken/tm2time.c b/crypto/heimdal/lib/roken/tm2time.c index b912e32..7bcba83 100644 --- a/crypto/heimdal/lib/roken/tm2time.c +++ b/crypto/heimdal/lib/roken/tm2time.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 1996, 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1995, 1996, 1997, 2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: tm2time.c,v 1.7 1999/12/02 16:58:53 joda Exp $"); +RCSID("$Id: tm2time.c 14773 2005-04-12 11:29:18Z lha $"); #endif #ifdef TIME_WITH_SYS_TIME @@ -46,16 +46,16 @@ RCSID("$Id: tm2time.c,v 1.7 1999/12/02 16:58:53 joda Exp $"); #endif #include "roken.h" -time_t +time_t ROKEN_LIB_FUNCTION tm2time (struct tm tm, int local) { - time_t t; + time_t t; - tm.tm_isdst = -1; + tm.tm_isdst = local ? -1 : 0; - t = mktime (&tm); + t = mktime (&tm); - if (!local) - t += t - mktime (gmtime (&t)); - return t; + if (!local) + t += t - mktime (gmtime (&t)); + return t; } diff --git a/crypto/heimdal/lib/roken/unsetenv.c b/crypto/heimdal/lib/roken/unsetenv.c index 6d95a51..54cf7b7 100644 --- a/crypto/heimdal/lib/roken/unsetenv.c +++ b/crypto/heimdal/lib/roken/unsetenv.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: unsetenv.c,v 1.7 1999/12/02 16:58:53 joda Exp $"); +RCSID("$Id: unsetenv.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <stdlib.h> @@ -46,7 +46,7 @@ extern char **environ; /* * unsetenv -- */ -void +void ROKEN_LIB_FUNCTION unsetenv(const char *name) { int len; diff --git a/crypto/heimdal/lib/roken/unvis.c b/crypto/heimdal/lib/roken/unvis.c index 363564c..72d5f16 100644 --- a/crypto/heimdal/lib/roken/unvis.c +++ b/crypto/heimdal/lib/roken/unvis.c @@ -12,11 +12,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -36,9 +32,9 @@ #if 1 #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: unvis.c,v 1.2 2000/12/06 21:41:46 joda Exp $"); +RCSID("$Id: unvis.c 21005 2007-06-08 01:54:35Z lha $"); #endif -#include <roken.h> +#include "roken.h" #ifndef _DIAGASSERT #define _DIAGASSERT(X) #endif @@ -86,12 +82,17 @@ __warn_references(unvis, #define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') +int ROKEN_LIB_FUNCTION + rk_strunvis (char *, const char *); +int ROKEN_LIB_FUNCTION + rk_unvis (char *, int, int *, int); + /* * unvis - decode characters previously encoded by vis */ -#ifndef HAVE_UNVIS -int -unvis(char *cp, int c, int *astate, int flag) + +int ROKEN_LIB_FUNCTION +rk_unvis(char *cp, int c, int *astate, int flag) { _DIAGASSERT(cp != NULL); @@ -244,7 +245,6 @@ unvis(char *cp, int c, int *astate, int flag) return (UNVIS_SYNBAD); } } -#endif /* * strunvis - decode src into dst @@ -253,9 +253,8 @@ unvis(char *cp, int c, int *astate, int flag) * Dst is null terminated. */ -#ifndef HAVE_STRUNVIS -int -strunvis(char *dst, const char *src) +int ROKEN_LIB_FUNCTION +rk_strunvis(char *dst, const char *src) { char c; char *start = dst; @@ -266,7 +265,7 @@ strunvis(char *dst, const char *src) while ((c = *src++) != '\0') { again: - switch (unvis(dst, c, &state, 0)) { + switch (rk_unvis(dst, (unsigned char)c, &state, 0)) { case UNVIS_VALID: dst++; break; @@ -280,9 +279,8 @@ strunvis(char *dst, const char *src) return (-1); } } - if (unvis(dst, c, &state, UNVIS_END) == UNVIS_VALID) + if (unvis(dst, (unsigned char)c, &state, UNVIS_END) == UNVIS_VALID) dst++; *dst = '\0'; return (dst - start); } -#endif diff --git a/crypto/heimdal/lib/roken/verify.c b/crypto/heimdal/lib/roken/verify.c index 842fa9a..54ad814 100644 --- a/crypto/heimdal/lib/roken/verify.c +++ b/crypto/heimdal/lib/roken/verify.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: verify.c,v 1.13 1999/12/02 16:58:53 joda Exp $"); +RCSID("$Id: verify.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include <stdio.h> @@ -45,7 +45,7 @@ RCSID("$Id: verify.c,v 1.13 1999/12/02 16:58:53 joda Exp $"); #endif #include "roken.h" -int +int ROKEN_LIB_FUNCTION unix_verify_user(char *user, char *password) { struct passwd *pw; diff --git a/crypto/heimdal/lib/roken/verr.c b/crypto/heimdal/lib/roken/verr.c index 67b4512..3db3c1c 100644 --- a/crypto/heimdal/lib/roken/verr.c +++ b/crypto/heimdal/lib/roken/verr.c @@ -33,13 +33,13 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: verr.c,v 1.10 2001/01/25 12:41:39 assar Exp $"); +RCSID("$Id: verr.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" #include <err.h> -void +void ROKEN_LIB_FUNCTION verr(int eval, const char *fmt, va_list ap) { warnerr(1, fmt, ap); diff --git a/crypto/heimdal/lib/roken/verrx.c b/crypto/heimdal/lib/roken/verrx.c index 5df5c8d..a3a59d0 100644 --- a/crypto/heimdal/lib/roken/verrx.c +++ b/crypto/heimdal/lib/roken/verrx.c @@ -33,13 +33,13 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: verrx.c,v 1.10 2001/01/25 12:41:39 assar Exp $"); +RCSID("$Id: verrx.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" #include <err.h> -void +void ROKEN_LIB_FUNCTION verrx(int eval, const char *fmt, va_list ap) { warnerr(0, fmt, ap); diff --git a/crypto/heimdal/lib/roken/vis.c b/crypto/heimdal/lib/roken/vis.c index 8dd5832..1114223 100644 --- a/crypto/heimdal/lib/roken/vis.c +++ b/crypto/heimdal/lib/roken/vis.c @@ -1,7 +1,6 @@ -/* $NetBSD: vis.c,v 1.19 2000/01/22 22:42:45 mycroft Exp $ */ +/* $NetBSD: vis.c,v 1.4 2003/08/07 09:15:32 agc Exp $ */ /*- - * Copyright (c) 1999 The NetBSD Foundation, Inc. * Copyright (c) 1989, 1993 * The Regents of the University of California. All rights reserved. * @@ -13,6 +12,34 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*- + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of @@ -38,16 +65,16 @@ #if 1 #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: vis.c,v 1.5 2001/09/03 05:37:23 assar Exp $"); +RCSID("$Id: vis.c 21005 2007-06-08 01:54:35Z lha $"); #endif -#include <roken.h> +#include "roken.h" #ifndef _DIAGASSERT #define _DIAGASSERT(X) #endif #else #include <sys/cdefs.h> #if !defined(lint) -__RCSID("$NetBSD: vis.c,v 1.19 2000/01/22 22:42:45 mycroft Exp $"); +__RCSID("$NetBSD: vis.c,v 1.4 2003/08/07 09:15:32 agc Exp $"); #endif /* not lint */ #endif @@ -81,6 +108,20 @@ __weak_alias(vis,_vis) #define BELL '\007' #endif +char ROKEN_LIB_FUNCTION + *rk_vis (char *, int, int, int); +char ROKEN_LIB_FUNCTION + *rk_svis (char *, int, int, int, const char *); +int ROKEN_LIB_FUNCTION + rk_strvis (char *, const char *, int); +int ROKEN_LIB_FUNCTION + rk_strsvis (char *, const char *, int, const char *); +int ROKEN_LIB_FUNCTION + rk_strvisx (char *, const char *, size_t, int); +int ROKEN_LIB_FUNCTION + rk_strsvisx (char *, const char *, size_t, int, const char *); + + #define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') #define iswhite(c) (c == ' ' || c == '\t' || c == '\n') #define issafe(c) (c == '\b' || c == BELL || c == '\r') @@ -181,9 +222,9 @@ do { \ * svis - visually encode characters, also encoding the characters * pointed to by `extra' */ -#ifndef HAVE_SVIS -char * -svis(char *dst, int c, int flag, int nextc, const char *extra) + +char * ROKEN_LIB_FUNCTION +rk_svis(char *dst, int c, int flag, int nextc, const char *extra) { _DIAGASSERT(dst != NULL); _DIAGASSERT(extra != NULL); @@ -192,7 +233,6 @@ svis(char *dst, int c, int flag, int nextc, const char *extra) *dst = '\0'; return(dst); } -#endif /* @@ -210,9 +250,9 @@ svis(char *dst, int c, int flag, int nextc, const char *extra) * Strsvisx encodes exactly len bytes from src into dst. * This is useful for encoding a block of data. */ -#ifndef HAVE_STRSVIS -int -strsvis(char *dst, const char *src, int flag, const char *extra) + +int ROKEN_LIB_FUNCTION +rk_strsvis(char *dst, const char *src, int flag, const char *extra) { char c; char *start; @@ -226,12 +266,10 @@ strsvis(char *dst, const char *src, int flag, const char *extra) *dst = '\0'; return (dst - start); } -#endif -#ifndef HAVE_STRVISX -int -strsvisx(char *dst, const char *src, size_t len, int flag, const char *extra) +int ROKEN_LIB_FUNCTION +rk_strsvisx(char *dst, const char *src, size_t len, int flag, const char *extra) { char c; char *start; @@ -247,15 +285,13 @@ strsvisx(char *dst, const char *src, size_t len, int flag, const char *extra) *dst = '\0'; return (dst - start); } -#endif /* * vis - visually encode characters */ -#ifndef HAVE_VIS -char * -vis(char *dst, int c, int flag, int nextc) +char * ROKEN_LIB_FUNCTION +rk_vis(char *dst, int c, int flag, int nextc) { char extra[MAXEXTRAS]; @@ -266,7 +302,6 @@ vis(char *dst, int c, int flag, int nextc) *dst = '\0'; return (dst); } -#endif /* @@ -279,25 +314,22 @@ vis(char *dst, int c, int flag, int nextc) * Strvisx encodes exactly len bytes from src into dst. * This is useful for encoding a block of data. */ -#ifndef HAVE_STRVIS -int -strvis(char *dst, const char *src, int flag) + +int ROKEN_LIB_FUNCTION +rk_strvis(char *dst, const char *src, int flag) { char extra[MAXEXTRAS]; MAKEEXTRALIST(flag, extra); - return (strsvis(dst, src, flag, extra)); + return (rk_strsvis(dst, src, flag, extra)); } -#endif -#ifndef HAVE_STRVISX -int -strvisx(char *dst, const char *src, size_t len, int flag) +int ROKEN_LIB_FUNCTION +rk_strvisx(char *dst, const char *src, size_t len, int flag) { char extra[MAXEXTRAS]; MAKEEXTRALIST(flag, extra); - return (strsvisx(dst, src, len, flag, extra)); + return (rk_strsvisx(dst, src, len, flag, extra)); } -#endif diff --git a/crypto/heimdal/lib/roken/vis.h b/crypto/heimdal/lib/roken/vis.h new file mode 100644 index 0000000..224870b --- /dev/null +++ b/crypto/heimdal/lib/roken/vis.h @@ -0,0 +1,115 @@ +/* $NetBSD: vis.h,v 1.11 1999/11/25 16:55:50 wennmach Exp $ */ +/* $Id: vis.hin 19341 2006-12-15 11:53:09Z lha $ */ + +/*- + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)vis.h 8.1 (Berkeley) 6/2/93 + */ + +#ifndef _VIS_H_ +#define _VIS_H_ + +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + +/* + * to select alternate encoding format + */ +#define VIS_OCTAL 0x01 /* use octal \ddd format */ +#define VIS_CSTYLE 0x02 /* use \[nrft0..] where appropiate */ + +/* + * to alter set of characters encoded (default is to encode all + * non-graphic except space, tab, and newline). + */ +#define VIS_SP 0x04 /* also encode space */ +#define VIS_TAB 0x08 /* also encode tab */ +#define VIS_NL 0x10 /* also encode newline */ +#define VIS_WHITE (VIS_SP | VIS_TAB | VIS_NL) +#define VIS_SAFE 0x20 /* only encode "unsafe" characters */ + +/* + * other + */ +#define VIS_NOSLASH 0x40 /* inhibit printing '\' */ + +/* + * unvis return codes + */ +#define UNVIS_VALID 1 /* character valid */ +#define UNVIS_VALIDPUSH 2 /* character valid, push back passed char */ +#define UNVIS_NOCHAR 3 /* valid sequence, no character produced */ +#define UNVIS_SYNBAD -1 /* unrecognized escape sequence */ +#define UNVIS_ERROR -2 /* decoder in unknown state (unrecoverable) */ + +/* + * unvis flags + */ +#define UNVIS_END 1 /* no more characters */ + +char ROKEN_LIB_FUNCTION + *rk_vis (char *, int, int, int); +char ROKEN_LIB_FUNCTION + *rk_svis (char *, int, int, int, const char *); +int ROKEN_LIB_FUNCTION + rk_strvis (char *, const char *, int); +int ROKEN_LIB_FUNCTION + rk_strsvis (char *, const char *, int, const char *); +int ROKEN_LIB_FUNCTION + rk_strvisx (char *, const char *, size_t, int); +int ROKEN_LIB_FUNCTION + rk_strsvisx (char *, const char *, size_t, int, const char *); +int ROKEN_LIB_FUNCTION + rk_strunvis (char *, const char *); +int ROKEN_LIB_FUNCTION + rk_unvis (char *, int, int *, int); + +#undef vis +#define vis(a,b,c,d) rk_vis(a,b,c,d) +#undef svis +#define svis(a,b,c,d,e) rk_svis(a,b,c,d,e) +#undef strvis +#define strvis(a,b,c) rk_strvis(a,b,c) +#undef strsvis +#define strsvis(a,b,c,d) rk_strsvis(a,b,c,d) +#undef strvisx +#define strvisx(a,b,c,d) rk_strvisx(a,b,c,d) +#undef strsvisx +#define strsvisx(a,b,c,d,e) rk_strsvisx(a,b,c,d,e) +#undef strunvis +#define strunvis(a,b) rk_strunvis(a,b) +#undef unvis +#define unvis(a,b,c,d) rk_unvis(a,b,c,d) + +#endif /* !_VIS_H_ */ diff --git a/crypto/heimdal/lib/roken/vis.hin b/crypto/heimdal/lib/roken/vis.hin index a9d09da9..224870b 100644 --- a/crypto/heimdal/lib/roken/vis.hin +++ b/crypto/heimdal/lib/roken/vis.hin @@ -1,5 +1,5 @@ /* $NetBSD: vis.h,v 1.11 1999/11/25 16:55:50 wennmach Exp $ */ -/* $Id: vis.hin,v 1.1 2000/12/06 21:35:47 joda Exp $ */ +/* $Id: vis.hin 19341 2006-12-15 11:53:09Z lha $ */ /*- * Copyright (c) 1990, 1993 @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -39,6 +35,14 @@ #ifndef _VIS_H_ #define _VIS_H_ +#ifndef ROKEN_LIB_FUNCTION +#ifdef _WIN32 +#define ROKEN_LIB_FUNCTION _stdcall +#else +#define ROKEN_LIB_FUNCTION +#endif +#endif + /* * to select alternate encoding format */ @@ -74,13 +78,38 @@ */ #define UNVIS_END 1 /* no more characters */ -char *vis (char *, int, int, int); -char *svis (char *, int, int, int, const char *); -int strvis (char *, const char *, int); -int strsvis (char *, const char *, int, const char *); -int strvisx (char *, const char *, size_t, int); -int strsvisx (char *, const char *, size_t, int, const char *); -int strunvis (char *, const char *); -int unvis (char *, int, int *, int); +char ROKEN_LIB_FUNCTION + *rk_vis (char *, int, int, int); +char ROKEN_LIB_FUNCTION + *rk_svis (char *, int, int, int, const char *); +int ROKEN_LIB_FUNCTION + rk_strvis (char *, const char *, int); +int ROKEN_LIB_FUNCTION + rk_strsvis (char *, const char *, int, const char *); +int ROKEN_LIB_FUNCTION + rk_strvisx (char *, const char *, size_t, int); +int ROKEN_LIB_FUNCTION + rk_strsvisx (char *, const char *, size_t, int, const char *); +int ROKEN_LIB_FUNCTION + rk_strunvis (char *, const char *); +int ROKEN_LIB_FUNCTION + rk_unvis (char *, int, int *, int); + +#undef vis +#define vis(a,b,c,d) rk_vis(a,b,c,d) +#undef svis +#define svis(a,b,c,d,e) rk_svis(a,b,c,d,e) +#undef strvis +#define strvis(a,b,c) rk_strvis(a,b,c) +#undef strsvis +#define strsvis(a,b,c,d) rk_strsvis(a,b,c,d) +#undef strvisx +#define strvisx(a,b,c,d) rk_strvisx(a,b,c,d) +#undef strsvisx +#define strsvisx(a,b,c,d,e) rk_strsvisx(a,b,c,d,e) +#undef strunvis +#define strunvis(a,b) rk_strunvis(a,b) +#undef unvis +#define unvis(a,b,c,d) rk_unvis(a,b,c,d) #endif /* !_VIS_H_ */ diff --git a/crypto/heimdal/lib/roken/vsyslog.c b/crypto/heimdal/lib/roken/vsyslog.c index c72cf33..690eb7d 100644 --- a/crypto/heimdal/lib/roken/vsyslog.c +++ b/crypto/heimdal/lib/roken/vsyslog.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: vsyslog.c,v 1.6 2000/05/22 22:09:25 assar Exp $"); +RCSID("$Id: vsyslog.c 14773 2005-04-12 11:29:18Z lha $"); #endif #ifndef HAVE_VSYSLOG @@ -61,7 +61,7 @@ simple_vsyslog(int pri, const char *fmt, va_list ap) * do like syslog but with a `va_list' */ -void +void ROKEN_LIB_FUNCTION vsyslog(int pri, const char *fmt, va_list ap) { char *fmt2; diff --git a/crypto/heimdal/lib/roken/vwarn.c b/crypto/heimdal/lib/roken/vwarn.c index 4034b1b..c25ca62 100644 --- a/crypto/heimdal/lib/roken/vwarn.c +++ b/crypto/heimdal/lib/roken/vwarn.c @@ -33,13 +33,13 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: vwarn.c,v 1.10 2001/01/25 12:41:39 assar Exp $"); +RCSID("$Id: vwarn.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" #include <err.h> -void +void ROKEN_LIB_FUNCTION vwarn(const char *fmt, va_list ap) { warnerr(1, fmt, ap); diff --git a/crypto/heimdal/lib/roken/vwarnx.c b/crypto/heimdal/lib/roken/vwarnx.c index 7449a75..e35c0de 100644 --- a/crypto/heimdal/lib/roken/vwarnx.c +++ b/crypto/heimdal/lib/roken/vwarnx.c @@ -33,13 +33,13 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: vwarnx.c,v 1.10 2001/01/25 12:41:39 assar Exp $"); +RCSID("$Id: vwarnx.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" #include <err.h> -void +void ROKEN_LIB_FUNCTION vwarnx(const char *fmt, va_list ap) { warnerr(0, fmt, ap); diff --git a/crypto/heimdal/lib/roken/warn.c b/crypto/heimdal/lib/roken/warn.c index d8ee335..0924880 100644 --- a/crypto/heimdal/lib/roken/warn.c +++ b/crypto/heimdal/lib/roken/warn.c @@ -33,7 +33,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: warn.c,v 1.6 1999/12/02 16:58:54 joda Exp $"); +RCSID("$Id: warn.c 7463 1999-12-02 16:58:55Z joda $"); #endif #include "err.h" diff --git a/crypto/heimdal/lib/roken/warnerr.c b/crypto/heimdal/lib/roken/warnerr.c index 0509d19..6dee466 100644 --- a/crypto/heimdal/lib/roken/warnerr.c +++ b/crypto/heimdal/lib/roken/warnerr.c @@ -33,13 +33,13 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: warnerr.c,v 1.15 2001/07/09 14:56:51 assar Exp $"); +RCSID("$Id: warnerr.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" #include "err.h" -void +void ROKEN_LIB_FUNCTION warnerr(int doerrno, const char *fmt, va_list ap) { int sverrno = errno; diff --git a/crypto/heimdal/lib/roken/warnx.c b/crypto/heimdal/lib/roken/warnx.c index c991176..7e1de7a 100644 --- a/crypto/heimdal/lib/roken/warnx.c +++ b/crypto/heimdal/lib/roken/warnx.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: warnx.c,v 1.6 1999/12/02 16:58:54 joda Exp $"); +RCSID("$Id: warnx.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "err.h" -void +void ROKEN_LIB_FUNCTION warnx(const char *fmt, ...) { va_list ap; diff --git a/crypto/heimdal/lib/roken/write_pid.c b/crypto/heimdal/lib/roken/write_pid.c index 763b513..edadf5c 100644 --- a/crypto/heimdal/lib/roken/write_pid.c +++ b/crypto/heimdal/lib/roken/write_pid.c @@ -33,17 +33,17 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: write_pid.c,v 1.6 2001/09/02 23:58:15 assar Exp $"); +RCSID("$Id: write_pid.c 21005 2007-06-08 01:54:35Z lha $"); #endif #include <stdio.h> #include <sys/types.h> #include <unistd.h> -#include <roken.h> +#include "roken.h" #include "roken.h" -char * +char * ROKEN_LIB_FUNCTION pid_file_write (const char *progname) { FILE *fp; @@ -62,7 +62,7 @@ pid_file_write (const char *progname) return ret; } -void +void ROKEN_LIB_FUNCTION pid_file_delete (char **filename) { if (*filename != NULL) { diff --git a/crypto/heimdal/lib/roken/writev.c b/crypto/heimdal/lib/roken/writev.c index e3859bf..2500e6d 100644 --- a/crypto/heimdal/lib/roken/writev.c +++ b/crypto/heimdal/lib/roken/writev.c @@ -33,12 +33,12 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: writev.c,v 1.3 1999/12/02 16:58:54 joda Exp $"); +RCSID("$Id: writev.c 14773 2005-04-12 11:29:18Z lha $"); #endif #include "roken.h" -ssize_t +ssize_t ROKEN_LIB_FUNCTION writev(int d, const struct iovec *iov, int iovcnt) { ssize_t ret; diff --git a/crypto/heimdal/lib/roken/xdbm.h b/crypto/heimdal/lib/roken/xdbm.h index 6e65217..618e074 100644 --- a/crypto/heimdal/lib/roken/xdbm.h +++ b/crypto/heimdal/lib/roken/xdbm.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. */ -/* $Id: xdbm.h,v 1.15 2002/05/17 16:02:22 joda Exp $ */ +/* $Id: xdbm.h 10986 2002-05-17 16:02:22Z joda $ */ /* Generic *dbm include file */ |