summaryrefslogtreecommitdiff
path: root/server
Commit message (Collapse)AuthorAge
* Use interned strings for realm and server namesGravatar Jeffrey Hutzelman2013-02-17
| | | | | | | | | Use interned strings instead of strdup() and fixed-size arrays for names of other realms and their servers. This gives immediate improvement in the form of doing fewer string compares when loading the realm.list, plus the obvious benefit of eliminating some fixed char arrays. It also paves the way for efficiently identifying existing realms and servers to be updated when reloading the realm.list.
* Return _ZRealm_server from get_realm_lists()Gravatar Jeffrey Hutzelman2013-02-17
| | | | | | | | | | | | Instead of returning an array of server hostname strings for each realm, get_realm_lists() now returns an array of struct _ZRealm_server for each realm. This allows it to return additional per-server information found in the realm.list file, such as the nosend flag, and simplifies creation of the final per-realm server list. This change will make it easier to use interned strings for server names, which will eventually enable efficient processing of updates to server configuration when the realm.list file is reloaded.
* Introduce usable flag on other-realm serversGravatar Jeffrey Hutzelman2013-02-17
| | | | | | | | | | Introduce a new per-realm-server 'usable' flag, which indicates the entry has been fully initialized and can be used. Routines which select a server or attempt to find one based on its address should ignore servers on which the usable flag is not set. This will allow the introduction of features which require recording servers which are not yet usable, such as asynchronous server name resolution.
* Turn dontsend into a bitfieldGravatar Jeffrey Hutzelman2013-02-17
|
* realm.list nosend flag supportGravatar Derrick Brashear2013-02-17
| | | | | | | | | | | | | From: Derrick J Brashear <shadow@dementia.org> To: zephyr-peers@dementia.org Subject: [zephyr-peers] last time, i hope: new zephyr server Date: Thu, 27 Mar 2003 21:44:02 -0500 (EST) [...] -enhanced realm.list semantics. [...] if a server hostname is prefixed with /, it indicates we can receive messages from the realm from this server, but should not send to it.
* Underpinnings for realm.list enhancementsGravatar Derrick Brashear2013-02-17
| | | | | | | | | | Replace the per-realm array of servers with a per-realm array of struct _ZRealm_server, so that we can have additional information associated with each server. Additionally, introduce the concept that not every server in a realm's list is necessarily a suitable place to send notices. This means that when selecting a server, we may need to skip ineligible entries.
* Send IPv4 addresses ASCII-encoded in v4 bdumpsGravatar Jeffrey Hutzelman2013-02-17
| | | | This fixes #94
* server: Don't check auth on client acksGravatar Jeffrey Hutzelman2013-02-14
| | | | | | | | Client acks don't actually include authenticators or checksums, but do claim to be authed if the original notice was. So, don't bother ever checking authentication on client acks. This fixes #93
* server: Send SERVACK in response to GIMMESUBSGravatar Jeffrey Hutzelman2013-02-14
| | | | | | | | | | When processing a request to retrieve subscriptions, we actually do need to send a SERVACK in response to the incoming notice before sending the subscription list (directly) to the client that requested it. The line that did this was inadvertently removed when the OLD_COMPAT support was removed in commit 9b709859db5310444052d13ed8ebccec6ead1669. This fixes #91
* Avoid hello storms when a bdump failsGravatar Jeffrey Hutzelman2013-02-14
| | | | | | | | | | When a braindump fails, leave the other server's status at SERV_STARTING instead of downgrading to SERV_DEAD, and schedule the next hello to that server at the regular timeout instead of immediately. Otherwise, failed bdumps are retried repeatedly with no delay, keeping the server busy, the logs full, and the network congested. This fixes #89
* Clean up warningsGravatar Jeffrey Hutzelman2013-02-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Eliminate compiler warnings due to various issues (listed below). This allows Zephyr to build cleanly under GCC versions ranging from 4.1.0 to 4.7.2 with all of the options shown below: -g -O2 -Wall -Werror -Wno-deprecated-declarations -Wmissing-declarations -Wpointer-arith -Wstrict-prototypes -Wshadow -Wextra -Wno-missing-field-initializers -Wno-unused-parameter and, on recent versions, -Wunreachable-code Test builds were done - On Ubuntu 12.10 (Quantal Quetzal) using both MIT Kerberos 1.10.1 and Heimdal 1.6, without krb4 and both with and without C-Ares and Hesiod - On Fedora 14 using Heimdal 0.6, without C-Ares or Hesiod and both with and without krb4 (KTH Kerberos 1.3rc2) - On Fedora Core 3, Fedora Core 5, Fedora 7, and Fedora 10, using Heimdal 0.6 and without C-Ares, Hesiod, or krb4 It also allows clean builds on Solaris 10 under the Sun Studio 12 (9/07) C compiler with the following options: -g -fd -v -errfmt -errhdr=%user -errtags=yes -errwarn=%all -erroff=E_OLD_STYLE_FUNC_DECL,E_ENUM_TYPE_MISMATCH_ARG,E_ARG_INCOMPATIBLE_WITH_ARG ... and under Solaris 9 with the Sun Forte 7 (3/02) C compiler with the above options and -erroff=E_FUNC_HAS_NO_RETURN_STMT. Solaris builds were done with Heimdal 0.6 and without C-Ares, Hesiod, or krb4. The following types of issues are addressed in this change: - Parameters and local variables with the same names as library functions - Parameters and local variables with the same names as globals - Declarations for exported global variables missing from headers - Prototypes for exported functions missing from headers - Missing 'static' on functions that shouldn't be exported - Old-style function declarations - Duplicate declarations - Type mismatches - Unused variables and functions - Uninitialized variables - Forward references to enums - Necessary header files not included - Violations of the aliasing rules, where GCC was able to detect them - Missing braces on if blocks that might be empty - Attempts to do pointer arithmetic on pointers of type void *, which is not permitted in standard C. - An attempt to pass a function pointer via a void * parameter, which is not permitted in standard C. Instead, we now pass a pointer to a structure, which then contains the required function pointer. - Unnecessary inclusion of <krb5_err.h>, which is already included by <krb5.h> when the former exists, and might not be protected against double inclusion, depending on which com_err was used. - Missing include of <com_err.h>, which was masked by the fact that it is included by headers generated by e2fsprogs compile_et - Use of com_err() with a non-constant value in place of the format string, which in every case was a fixed-size buffer in which a message was built using sprintf(!). Both the calls to sprintf and the fixed-size buffers have been removed, in favor of just letting com_err() do the formatting. - Various cases where X library functions expecting a parameter of type wchar_t * were instead passed a parameter of type XChar2b *. The two types look similar, but are not the same and are _not_ interchangeable. - An overly-simplistic configure test which failed to detect existence of <term.h> on Solaris, due to not including <curses.h>. - Using the wrong type for the flags output of krb5_auth_con_getflags() when building against Heimdal. A configure test is added to detect the correct type.
* Inline functions should be declared staticGravatar Jeffrey Hutzelman2013-01-31
|
* Add IP-address and negative ACL entriesGravatar Jeffrey Hutzelman2013-01-19
| | | | | | | | | | | | | | | | | | | | | This allows ACLs to grant access based on the IP address of a client instead of its principal name. This is done using ACL entries with the syntax "@a.b.c.d". Currently, only IPv4 addresses are supported. A single entry may match all hosts on a particular subnet by using CIDR notation, written as @a.b.c.d/nn. If no length is given, 32 is assumed. Host and principal entries can be freely mixed within the same ACL; the ACL matches if any entry matches the client. Note that this means that ACLs can now match unauthenticated clients (however, this does not lift the general constraint that only authenticated clients can subscribe at all). Additionally, support for negative ACL entries is added. These entries are indicated by a leading '!', which may be applied to both principal and host entries. Negative entries are applied in the style of AFS ACLs; that is, a matching negative entry overrides any positive entry and thus guarantees that matching clients will be denied access. (edited slightly for style by kcr@1TS.ORG)
* add_subscriptions: fix botched mergeGravatar Jeffrey Hutzelman2012-11-24
| | | | | | Fix indentation and remove an inappropriate comment in add_subscriptions(), both of which were the result of a botched merge a long time ago. The actual logic was merged correctly and so does not change.
* ZCheckSrvAuthentication: fix auth context leakGravatar Jeffrey Hutzelman2012-11-24
| | | | | Fix a leak in which we fail to free a Kerberos authentication context in ZCheckSrvAuthentication if getting or setting the context flags fails.
* server: avoid blocking in tkt_lookup()Gravatar Derrick Brashear2012-11-24
| | | | | | | | | | tkt_lookup() is supposed to quickly obtain a ticket for a foreign realm if we already have a usable one, and quickly fail otherwise. Sending a request to a KDC and waiting for a response, as krb5_get_credentials() may do, defeats the purpose of tkt_retrieve() retrying failed requests in the background. So, use krb5_cc_retrieve_cred() instead. Extracted from Andrew zephyr/063
* Initialize notice objectsGravatar Chaskiel Grundman2012-11-24
| | | | | memset new notice objects in subscr.c (really needed now since all ZFormat* routines require z_num_hdr_fields to be valid or 0.)
* Strip the authentication in realm_senditGravatar Chaskiel Grundman2012-07-16
| | | | | | | | realm_sendit is responsible for sending notices that do not have useful realm authentication, either because they are not authentic, or because of kerberos problems acquiring a ticket for the foreign zephyr realm. In either case, any authentication in the notice will not be usable to the foreign server, and ought to be stripped out.
* Actually remove the #ifdef OLD_COMPAT and NEW_COMPAT codeGravatar Karl Ramm2012-02-11
| | | | To my knowledge, this hasn't been enabled by anyone in ages
* log old-style checksum mismatches tooGravatar Karl Ramm2012-01-25
|
* fix some formatting and whitespace bogonsGravatar Karl Ramm2012-01-25
|
* Try and log more on authentication failures.Gravatar Karl Ramm2012-01-25
|
* New version propagation to replace keyword substitution, part 1Gravatar Karl Ramm2011-11-25
|
* realm_auth_sendit_nacked fixupsGravatar Chaskiel Grundman2011-11-18
| | | | | | | | | | In addition to the packet length problem discussed last night, the realm_auth_sendit_nacked refactor also had a cut-n-paste error. In the unfragmented case, it passed in partnotice.z_uid instead of newnotice.z_uid. In that branch of the if, partnotice is uninitialized... My (derrick's) servers are no longer constantly complaining (in new debug code) that realm_nack_cancel couldn't find the nack to dequeue, so I think I'm done with this problem.
* It is not the 80s anymore, so we have a printf directive for pointersGravatar Karl Ramm2011-10-23
|
* Retool our use of configure such that we track it like everyone else doesGravatar Karl Ramm2011-10-23
| | | | | i.e. don't keep generated or foreign stuff in our source tree. As a side effect, this lets us use a libtool, etc. from this century
* It is still not the 80s anymore -- remove all caddr_tsGravatar Karl Ramm2011-02-02
|
* syslogging for evety tcp-ized packet slows things down too muchGravatar Karl Ramm2010-12-19
|
* Fix typoGravatar Karl Ramm2010-12-19
|
* Drop stale code for long-lost debugging malloc.Gravatar Karl Ramm2010-12-19
|
* remove a stupid cpp trickGravatar Karl Ramm2010-12-19
|
* Restate error table dependencies such that make -j doesn't trip over itselfGravatar Karl Ramm2010-11-06
| | | | (thanks to wthrowe@mit.edu)
* Have the makefiles support explicit target directories properly, courtesy ↵Gravatar Karl Ramm2010-11-06
| | | | wthrowe@mit.edu
* clean up realm_sendit_authGravatar Karl Ramm2010-11-06
|
* Clean up xmitGravatar Karl Ramm2010-08-24
|
* A argument for not doing a "quick change" at 3am. (braino, fixes previous)Gravatar Karl Ramm2010-08-24
|
* Don't leak memory when refragmenting sketchy packets.Gravatar Karl Ramm2010-08-24
|
* stop using MAXHOSTNAMELEN in a variety of places. Also ↵Gravatar Karl Ramm2010-08-24
| | | | nuke-trailing-whitespace.
* Don't use MAXPATHLEN anymore.Gravatar Karl Ramm2010-08-24
| | | | | | | Some systems don't have it, having shaken off the shackles of fixed lengths. Unfortunately rewriting these things "right" in a fashion portable to unembraced-and-extended C libraries is aggravating. So do it wrong until we decide to bite the bullet and demand glib.
* Fix a leak if ZNewFormatSmallRawNotice fails. (thanks to nelhage@mit.edu for ↵Gravatar Karl Ramm2010-08-22
| | | | noticing)
* Don't crash if the header mysteriously gets too big. (Thanks to ↵Gravatar Karl Ramm2010-08-22
| | | | nelhage@mit.edu for noticing)
* Fix some formatting, and add some paranoia about oversized headers.Gravatar Karl Ramm2010-08-22
| | | | (Thanks to nelhage@mit.edu for noticing the formatting problem)
* fix subscriptions-too-wide-breaks-braindump problemGravatar Karl Ramm2010-07-28
| | | | | | | | only send one sub per packet in braindump refactor bdump_send_list_tcp and send_normal_tcp brain dump can now cleanly receive overlarge encrypted packets refactor subscr_send_subs and subscr_send_realm_subs nuke trailing whitespace
* Fix getting data out of gethostbyname; should fix #69Gravatar Karl Ramm2010-07-28
|
* It is the twenty-first century, we don't need #ifdef ladders anymore.Gravatar Karl Ramm2010-03-17
|
* Refactor error handling slightly in get_tgtGravatar Karl Ramm2009-08-27
| | | | | (which coincidentally keeps us from reporting the wrong function with an error code)
* get_tgt() should not fail if built krb5-only and it can't find a des keyGravatar Karl Ramm2009-08-27
| | | | Also clean up some indentation and add error logging.
* For now check incoming interrealm stuff with both keyusages because itGravatar Karl Ramm2009-08-27
| | | | turns out that derived-key stuff actually worked if you were using heimdal.
* krb5_init_keyblock is ugly and I'm not sure what it's doing there anywayGravatar Karl Ramm2009-08-22
|
* Fix a casefolding bug. [64-bit]Gravatar Karl Ramm2009-08-22
| | | | | | | | | | | | | | In valid_utf8_p(), uc was improperly typed and never initialized. On 64-bit systems, this means that success is dependent on previous stack contents. If the upper 32 bits are not zero, the null terminator is not caught and the function continues reading past the end of the string until: 1) Invalid UTF-8 is encountered 2) An invalid unicode codepoint is encountered. 3) segfault 1 and 2 are much more likely, but 3 is a danger.