aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-kerberos.c
AgeCommit message (Collapse)AuthorFilesLines
2017-03-02Rewrite dissectors to use Libgcrypt functions.Erik de Jong1-17/+23
As discussed on the mailinglist, rewriting dissectors to use Libgcrypt functions as Libgcrypt will be mandatory after change 20030. Removal of following functions: - crypt_md4 - crypt_rc4* - aes_cmac_encrypt_* - md5_* - sha1_* - sha256_* Further candidates: - aes_* - rijndael_* - ... Added functions: - ws_hmac_buffer Added const macros: - HASH_MD5_LENGTH - HASH_SHA1_LENGTH Changes on epan/crypt/* verified with captures from https://wiki.wireshark.org/HowToDecrypt802.11 Changes on packet-snmp.c and packet-radius.c verified with captures from https://wiki.wireshark.org/SampleCapture Changes on packet-tacacs.c verified with capture from http://ccie-in-3-months.blogspot.nl/2009/04/decoding-login-credentials-regardless.html Change-Id: Iea6ba2bf207cf0f1bf2117068fb1abcfeaafaa46 Link: https://www.wireshark.org/lists/wireshark-dev/201702/msg00011.html Reviewed-on: https://code.wireshark.org/review/20095 Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Peter Wu <peter@lekensteyn.nl>
2017-01-10Rename tvb_new_subset() to tvb_new_subset_length_caplen().Guy Harris1-1/+1
This emphasizes that there is no such thing as *the* routine to construct a subset tvbuff; you need to choose one of tvb_new_subset_remaining() (if you want a new tvbuff that contains everything past a certain point in an existing tvbuff), tvb_new_subset_length() (if you want a subset that contains everything past a certain point, for some number of bytes, in an existing tvbuff), and tvb_new_subset_length_caplen() (for all other cases). Many of the calls to tvb_new_subset_length_caplen() should really be calling one of the other routines; that's the next step. (This also makes it easier to find the calls that need fixing.) Change-Id: Ieb3d676d8cda535451c119487d7cd3b559221f2b Reviewed-on: https://code.wireshark.org/review/19597 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2016-10-31Handle -K, -n, -N, and -u in the common dissection option code.Guy Harris1-6/+8
Also update tfshark to use that code. Change-Id: Ic03fb8ff48c8bfc460298d180b436e53f0076cbe Reviewed-on: https://code.wireshark.org/review/18588 Petri-Dish: Guy Harris <guy@alum.mit.edu> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Guy Harris <guy@alum.mit.edu>
2016-10-13Convert most UDP dissectors to use "auto" preferences.Michael Mann1-1/+1
Similar to the "tcp.port" changes in I99604f95d426ad345f4b494598d94178b886eb67, convert dissectors that use "udp.port". More cleanup done on dissectors that use both TCP and UDP dissector tables, so that less preference callbacks exist. Change-Id: If07be9b9e850c244336a7069599cd554ce312dd3 Reviewed-on: https://code.wireshark.org/review/18120 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
2016-10-08Combine Decode As and port preferences for tcp.port dissector table.Michael Mann1-1/+1
This patch introduces new APIs to allow dissectors to have a preference for a (TCP) port, but the underlying data is actually part of Decode As functionality. For now the APIs are intentionally separate from the regular APIs that register a dissector within a dissector table. It may be possible to eventually combine the two so that all dissectors that register with a dissector table have an opportunity to "automatically" have a preference to adjust the "table value" through the preferences dialog. The tcp.port dissector table was used as the guinea pig. This will eventually be expanded to other dissector tables as well (most notably UDP ports). Some dissectors that "shared" a TCP/UDP port preference were also converted. It also removed the need for some preference callback functions (mostly when the callback function was the proto_reg_handoff function) so there is cleanup around that. Dissectors that has a port preference whose default was 0 were switched to using the dissector_add_for_decode_as_with_preference API rather than dissector_add_uint_with_preference Also added comments for TCP ports used that aren't IANA registered. Change-Id: I99604f95d426ad345f4b494598d94178b886eb67 Reviewed-on: https://code.wireshark.org/review/17724 Reviewed-by: Michael Mann <mmann78@netscape.net>
2016-10-01Kerberos: remove some unused #defineAlexis La Goutte1-127/+3
for avoid conflit with heimdal lib Bug:12831 Change-Id: Ic244b6b8dc4f68a0f782b88984ad7857ceb02e25 Reviewed-on: https://code.wireshark.org/review/17989 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
2016-07-22Convert more glib memory to wmem pinfo poolPascal Quantin1-22/+9
Change-Id: I4cc23bc19a6bd8c6a8e0389eaf939dbb60fe0ca3 Reviewed-on: https://code.wireshark.org/review/16562 Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com> Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
2016-04-04Include ws_diag_control.h in config.hJoão Valverde1-8/+7
Change-Id: Ia394071710ecda3b0e6686a51fbca45a8ff20317 Reviewed-on: https://code.wireshark.org/review/14749 Petri-Dish: João Valverde <j@v6e.pt> Petri-Dish: Gerald Combs <gerald@wireshark.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: João Valverde <j@v6e.pt>
2016-03-21Bugfix "typo" from I9b04837f93Michael Mann1-46/+46
Change-Id: Iafc67ced1af0fbb27545acb0e1569b8b8ccd9451 Reviewed-on: https://code.wireshark.org/review/14544 Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com> Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
2016-03-20Manually add protocol dependencies derived from find_dissector.Michael Mann1-1/+1
Started by grepping call_dissector_with_data, call_dissector_only and call_dissector and traced the handles passed into them to a find_dissector within the dissector. Then replaced find_dissector with find_dissector_add_dependency and added the protocol id from the dissector. "data" dissector was not considered to be a dependency. Change-Id: I15d0d77301306587ef8e7af5876e74231816890d Reviewed-on: https://code.wireshark.org/review/14509 Petri-Dish: Michael Mann <mmann78@netscape.net> Reviewed-by: Michael Mann <mmann78@netscape.net>
2016-03-13Move /asn1 to /epan/dissectorsJoão Valverde1-42/+42
Change-Id: I1208fe3c2ba428995526f561e8f792b8d871e9a9 Reviewed-on: https://code.wireshark.org/review/14388 Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com> Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Reviewed-by: João Valverde <j@v6e.pt>
2016-01-24Add the packet number to the packet_info structure, and use it.Guy Harris1-7/+7
That removes most of the uses of the frame number field in the frame_data structure. Change-Id: Ie22e4533e87f8360d7c0a61ca6ffb796cc233f22 Reviewed-on: https://code.wireshark.org/review/13509 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2015-12-09"new" dissector API -> dissector API for ASN.1 dissectors.Michael Mann1-2/+2
Change-Id: I7b794cba2feda2cae40411e2b1cb9fb091d08220 Reviewed-on: https://code.wireshark.org/review/12480 Reviewed-by: Michael Mann <mmann78@netscape.net>
2015-11-04Don't include "file.h" if you don't need it.Guy Harris1-6/+8
It ends up dragging in libwireshark headers, which programs not linking with libwireshark shouldn't do. In particular, including <epan/address.h> causes some functions that refer to libwireshark functions to be defined if the compiler doesn't handle "static inline" the way GCC does, and you end up requiring libwireshark even though you shouldn't require it. Move plurality() to wsutil/str_util.h, so that non-libwireshark code can get it without include epan/packet.h. Fix includes as necessary. Change-Id: Ie4819719da4c2b349f61445112aa419e99b977d3 Reviewed-on: https://code.wireshark.org/review/11545 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2015-10-19Separate out sname and cname in Kerberos dissector.Michael Mann1-23/+128
Bug: 4479 Change-Id: I41de06f2e3eea0c44edd659ed053f628406550c6 Reviewed-on: https://code.wireshark.org/review/11125 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
2015-08-21[Kerberos] Call to 'fseek()' without a check for a return value < 0,Bill Parker1-4/+7
indicating failure. Bug: 11056 Change-Id: Iaa6b7ca07626b78c77e3c1507726ec579764a582 Reviewed-on: https://code.wireshark.org/review/10181 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
2015-05-05kerberos encryption types (etype) additions + cleanupMark Cunningham1-3/+13
source http://www.iana.org/assignments/kerberos-parameters/kerberos-parameters.xhtml and referenced RFCs Change-Id: I898218c3ef75da21130f3f6c83848c0fca095acf Reviewed-on: https://code.wireshark.org/review/8300 Reviewed-by: Peter Wu <peter@lekensteyn.nl>
2015-02-14Don't check for C89 headers.Guy Harris1-6/+3
1988 called, they want their lack of a C standard back. We don't need to check whether we have stdarg.h, stddef.h, stdlib.h, or string.h, as they're specified by C89 and I don't think there are any platforms we care about that don't have a C89 environment in which we could be built. Change-Id: I447551181284fab7722354b62774625ed8ee94bc Reviewed-on: https://code.wireshark.org/review/7110 Petri-Dish: Guy Harris <guy@alum.mit.edu> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Guy Harris <guy@alum.mit.edu>
2015-02-06Remove gethostbyaddr and gethostbyaddr2.Gerald Combs1-3/+4
They've been deprecated for a very long time. Replace them with getaddrinfo. Note that we might not want to do synchronous name resolution at all. Add HAVE_GETADDRINFO to the KfW win-mac.h collision list. Change-Id: If59ce8a038776eadd6cd1794ed0e2dad8bf8a22c Reviewed-on: https://code.wireshark.org/review/6958 Reviewed-by: Gerald Combs <gerald@wireshark.org> Petri-Dish: Gerald Combs <gerald@wireshark.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
2015-01-27Lua: Expose tcp_dissect_pdus() to LuaHadriel Kaplan1-1/+1
Provide a way for Lua-based dissectors to invoke tcp_dissect_pdus() to make TCP-based dissection easier. Bug: 9851 Change-Id: I91630ebf1f1fc1964118b6750cc34238e18a8ad3 Reviewed-on: https://code.wireshark.org/review/6778 Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Reviewed-by: Hadriel Kaplan <hadrielk@yahoo.com> Tested-by: Hadriel Kaplan <hadrielk@yahoo.com>
2015-01-11Restore #undef HAVE_STDLIB_H and #undef HAVE_STRING_H in kerberos dissector.Michael Mann1-3/+5
These were removed when the kerberos dissector was switched to being a pure ASN.1 dissector (see dea68bf00f7c5872950814da81ba532a6372ccb3). Change-Id: I04177046250d039a750f4e4e4dd956d8beab23bc Reviewed-on: https://code.wireshark.org/review/6476 Reviewed-by: Michael Mann <mmann78@netscape.net>
2015-01-03Remove the probes from packet-kerberos.c.Guy Harris1-17/+3
None of HAVE_KERBEROS, HAVE_MIT_KERBEROS or HAVE_HEIMDAL_KERBEROS or HAVE_LIBNETTLE defined when it's compiled. So how is HAVE_KERBEROS getting defined when wireshark-qt.cpp is compiled? Change-Id: If238ff54aa4f0cda662c7a52d76e33363a77240d Reviewed-on: https://code.wireshark.org/review/6262 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2015-01-03Stick some #define probes in on Windows.Guy Harris1-3/+17
Let's try to figure out why, on the 64-bit Windows build, wireshark-qt.cpp is being compiled to call read_keytab_file() but packet-kerberos.c is not being compiled to define it. Change-Id: I782406e2189819d9400b84b6632fe0fb62c5996d Reviewed-on: https://code.wireshark.org/review/6261 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2015-01-02Don't define a stub read_keytab_file() on Windows if we don't have Kerberos.Guy Harris1-25/+6
We don't declare it, so all the DLL export stuff won't work, and we shouldn't need it, as we shouldn't be calling it if we don't have Kerberos (we shouldn't support the -K option if we don't have Kerberos, for example). Change-Id: I7e7b12aa93c4f31953300ef513fc09a1f55f8aef Reviewed-on: https://code.wireshark.org/review/6255 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2015-01-01Declare read_keytab_file() in epan/dissectors/packet-kerberos.h.Guy Harris1-6/+3
Don't throw its declaration in file.h, as it's not defined in file.c. Instead, include it in epan/dissectors/packet-kerberos.h and include that wherever read_keytab_file() is called. Yes, that means you also have to include <epan/asn1.h> and, therefore, you have to include <epan/packet.h>. Yes, that should be cleaned up, perhaps by splitting the Kerberos support code into "stuff that handles encryption keys without any reference to dissection" and "stuff that does dissection-related work". Change-Id: Ide5c31e6d85e6011d57202f728dbc656e36138ef Reviewed-on: https://code.wireshark.org/review/6210 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-12-23kerberos: Re-add needed #include <stdio.h>Bill Meier1-6/+8
Change-Id: I85c0e5f022b5c04df6079e118e376e8d598675aa Reviewed-on: https://code.wireshark.org/review/6011 Reviewed-by: Bill Meier <wmeier@newsguy.com>
2014-12-23asn1 generated dissectors: cleanup #include usageBill Meier1-24/+19
Change-Id: I36b2731d67f9345d2fd0c23800bba7d2be94c387 Reviewed-on: https://code.wireshark.org/review/6008 Reviewed-by: Bill Meier <wmeier@newsguy.com>
2014-12-22Cast a parameter in the kerberos dissector so it compiles withoutStephen Fisher1-1/+1
warnings on NetBSD. Change-Id: Id1ab5020fa53656065b0b2438071342eae4f7adb Reviewed-on: https://code.wireshark.org/review/5987 Petri-Dish: Stephen Fisher <sfisher@sdf.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Stephen Fisher <sfisher@sdf.org>
2014-12-20Use ENCTYPE_NULL in the krb5_crypto_init() call.Guy Harris1-1/+1
That appears to be a name supplied both by MIT and Heimdal Kerberos. Using it makes it a bit clearer what the code is doing, and might avoid type clash warnings if it's the right type (e.g., if it's a member of an enum, as it is in Heimdal, and the corresponding argument to krb5_crypto_init() is of the same type, the types will match). Change-Id: I81b79223f789b8d1ec47180b7636ac1d83e03681 Reviewed-on: https://code.wireshark.org/review/5898 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-12-19Throw some casts at compiler warnings.Guy Harris1-5/+5
Change-Id: I609fcba0b015599f98edb1b3927edb5684bcf2b1 Reviewed-on: https://code.wireshark.org/review/5887 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-12-14Kerberos: import KRB5_AD_WIN2K_PAC dissection from old non ASN.1 based dissectorPascal Quantin1-18/+465
Bug: 10539 Change-Id: I06d1179210bdcc63800ef9580bb274c714a77c6e Reviewed-on: https://code.wireshark.org/review/5761 Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-11-04Fix some compilation errors (size_t to guint/gint) and an unused parameterStephen Fisher1-5/+5
Change-Id: I2d64d840c93f951dd5481ca5950ff5587da6843d Reviewed-on: https://code.wireshark.org/review/5112 Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-10-13Add Kerberos 3.2.2 package for Win64Pascal Quantin1-2/+2
Change-Id: If02469aa1a01972d2032478dce3bf872802f37cb Reviewed-on: https://code.wireshark.org/review/4661 Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-10-09Kerberos: fix decryption of DCERPC with Kerberos encryptionPascal Quantin1-11/+12
Bug: 10538 Change-Id: I4e6feaf218da7f977f6c63d8bc204635f387672c Reviewed-on: https://code.wireshark.org/review/4566 Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-10-09Kerberos: remove debug logs when loading a keytabPascal Quantin1-8/+3
Bug: 10543 Change-Id: I9ea20cd4d046cc072c21fd3f87f6d6be40b08b27 Reviewed-on: https://code.wireshark.org/review/4567 Reviewed-by: Michael Mann <mmann78@netscape.net> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-09-16Fix spelling: cant-->can't, wont-->won't, etcBill Meier1-2/+2
Change-Id: Ia6c3e7a25615bf8e052c3bacf096d76df775c9c2 Reviewed-on: https://code.wireshark.org/review/4126 Reviewed-by: Bill Meier <wmeier@newsguy.com>
2014-08-27At least some compilers don't allow warning pragmas inside functions.Guy Harris1-23/+7
So wrap the entire function in USES_APPLE_DEPRECATED_API/USES_APPLE_RST. Change-Id: I6ae3e8ecc40bc407e6f7156ccc5d9dd8c51d650d Reviewed-on: https://code.wireshark.org/review/3885 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-08-27Be more selective about turning off deprecation warnings.Guy Harris1-7/+28
Only turn them off in the vicinity of those nasty cross-platform APIs. (This also checks in the generated Kerberos dissector, which we forgot to do in the last checkin.) Change-Id: I5dc9162ff64afe764e37866706590ed2ed965acb Reviewed-on: https://code.wireshark.org/review/3882 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-08-18Kerberos : Fix indent (use tabs) and add modelines infoAlexis La Goutte1-313/+324
Change-Id: I7965332ee474d10c90dfb2ef63a66f610cd6fc71 Reviewed-on: https://code.wireshark.org/review/3655 Reviewed-by: Michael Mann <mmann78@netscape.net>
2014-08-16Fix warning: no previous prototype for ... [-Wmissing-prototypes]Alexis La Goutte1-6/+9
Change-Id: Ic3152356c51ebe554e2356a360df5b0c23d89d63 Reviewed-on: https://code.wireshark.org/review/3632 Reviewed-by: Anders Broman <a.broman58@gmail.com>
2014-08-09Eliminate (almost all) proto_tree_add_text calls from ASN.1 dissectors.Michael Mann1-14/+18
This mostly involved adding expert info capabilities to many of the dissectors so that they could correctly flag error conditions. Only remaining proto_tree_add_text calls are in H248.cnf, which has a convoluted way of using hf_ data to make its tree. Change-Id: I6412150c2ec1977d7fa38f3f0ed416680bdfb141 Reviewed-on: https://code.wireshark.org/review/3500 Petri-Dish: Michael Mann <mmann78@netscape.net> Reviewed-by: Michael Mann <mmann78@netscape.net>
2014-06-20batch of tvb-length conversionsEvan Huus1-21/+21
Change-Id: I5e40df8af6841e3dad71c41d7e43c7971611b15f Reviewed-on: https://code.wireshark.org/review/2473 Reviewed-by: Evan Huus <eapache@gmail.com>
2014-06-19Kerberos: fix dissection of packets when Record Mark is presentPascal Quantin1-1/+1
Bug: 10200 Change-Id: Ied8db64120131c029e276d66aeff8b81a45a7286 Reviewed-on: https://code.wireshark.org/review/2447 Reviewed-by: Evan Huus <eapache@gmail.com> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-06-19Revert "Fixup: tvb_* -> tvb_captured"Michael Mann1-22/+22
https://www.wireshark.org/lists/wireshark-dev/201406/msg00131.html This reverts commit 246fe2ca4c67d8c98caa84e2f57694f6322e2f96. Change-Id: Ib24bae0198c13a84bd7f731bf4af921212109a8f Reviewed-on: https://code.wireshark.org/review/2430 Reviewed-by: Michael Mann <mmann78@netscape.net>
2014-06-18Get rid of obsolete references to nettlePascal Quantin1-19/+6
Bug: 2089 Change-Id: Ie3337a1b750d8d95f6291c77dfd19cd1b0c57e83 Reviewed-on: https://code.wireshark.org/review/2388 Tested-by: Pascal Quantin <pascal.quantin@gmail.com> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-06-18Fixup: tvb_* -> tvb_capturedDario Lombardo1-22/+22
Change-Id: I9209c1271967405c34c1b6fa43e1726a4d3a5a3f Reviewed-on: https://code.wireshark.org/review/2377 Reviewed-by: Anders Broman <a.broman58@gmail.com>
2014-05-28packet-kerberos.c: Use tfs_set_notset in hf[] entry instead of a local version.Bill Meier1-9/+7
Change-Id: I00a3ae7afb46eb50d7477c22cfa340c705cbb34a Reviewed-on: https://code.wireshark.org/review/1851 Reviewed-by: Bill Meier <wmeier@newsguy.com>
2014-05-28packet-klerberos.c: Use typedef (true_false_string) to properly define a ↵Bill Meier1-2/+2
true_false_string. Change-Id: Ic89e5add39b8b0b2c3db254292f12ce6ae25b73c Reviewed-on: https://code.wireshark.org/review/1844 Reviewed-by: Bill Meier <wmeier@newsguy.com>
2014-05-15Eliminate some calls to tvb_get_ptr().Guy Harris1-27/+25
Change-Id: I1c5e10467d68ed7372dfaa9109b350238418ffc1 Reviewed-on: https://code.wireshark.org/review/1645 Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-04-25Kerberos: ensure that private data elements are stored in separate variablesPascal Quantin1-153/+118
Bug: 10028 Change-Id: I599cd5475d19b64c0d5b9d31d7054a3befc84af2 Reviewed-on: https://code.wireshark.org/review/1348 Reviewed-by: Evan Huus <eapache@gmail.com> Tested-by: Evan Huus <eapache@gmail.com>