summaryrefslogtreecommitdiff
path: root/server/zserver.h
Commit message (Collapse)AuthorAge
* Don't send to realms with no serversGravatar Jeffrey Hutzelman2013-03-18
| | | | | | | | | | | | | | | | | | | | | | When we are using c-ares to resolve otherrealm server names asynchronously, there is a period of time during startup during which a realm may have no servers whose names we have successfully resolved. This can also happen when a realm is added, or when servers for a realm are deleted, and even without asynchronous resolution, it can happen if we are having trouble resolving names. We now avoid trying to send notices to realms for which there are no usable servers (that is, servers which are not deleted, not marked nosend, and whose names have been resolved). Currently, when this happens, the notice to be sent is just dropped on the floor. Arguably, we should manage a queue of packets waiting to be sent to such a realm, and resend them if we ever discover a usable server. But that would be complicated. In addition, since we are basically never ready to send realm wakeups when processing the realm.list, they are now deferred until the first server's name has been resolved (and then, until the timer queue is processed). This has the additional effect of causing wakeups to be sent for realms which appear during a realm.list reload.
* Use c-ares for other-realm server name lookupsGravatar Jeffrey Hutzelman2013-03-18
| | | | This fixes #73
* Make ZRealm.srvrs be an array of pointersGravatar Jeffrey Hutzelman2013-03-18
| | | | | | | | | | | | With asynchronous name resolution and timers, we need to keep around pointers to individual other-realm servers. This, we cannot move existing servers around in memory without causing data corruption. But, realm_init() wants to reallocate the srvrs array for a realm when adding servers. Therefore, to allow ZRealm.srvrs to be reallocated without changing the addresses of existing servers, it is converted from an array of servers to an array of pointers to servers.
* server: c-ares supportGravatar Jeffrey Hutzelman2013-03-18
| | | | | | Add the bits we need to be able to use c-ares for DNS operations in the server. This handles initialization and making sure the resolver's sockets and timeouts are considered in the main loop.
* Test the low-level code in uloc.cGravatar Karl Ramm2013-03-16
| | | | | | | | | Also, tweak the debian build infrastructure so that we can pass in arbitrary CFLAGS. New program test_server that links with the non-main.c parts of the server. Currently only (as above) tests the low-level bits of uloc.c.
* rearrange so that most of the server code can be linked without main.cGravatar Karl Ramm2013-03-16
| | | | | Move global variables and one function out of main.c so that the rest of the server can be linked with a test harness.
* server: add CLIENT_FLUSHSUBS control messageGravatar Jeffrey Hutzelman2013-02-26
| | | | | | | | | This adds support to the server for a new client control message, CLIENT_FLUSHSUBS, which flushes all subscriptions and pending retransmits for clients belonging to a given principal. The target principal must be the same as the sender, unless the sender is on the opstaff ACL. This is the server side of #103
* Add opstaff_check()Gravatar Jeffrey Hutzelman2013-02-26
| | | | | | Add a function to check whether a sender is on the opstaff ACL, which lives in $sysconfdir/zephyr/acl/opstaff.acl. This is in preparation for a number of features which grant additional access to people on that ACL.
* Dewarn realm.list enhancementsGravatar Jeffrey Hutzelman2013-02-17
|
* Update existing realms during realm.list reloadGravatar Jeffrey Hutzelman2013-02-17
|
* Abstract realm server usability testGravatar Jeffrey Hutzelman2013-02-17
| | | | | | | | | Whether a particular server is usable currently depends only on whether we have successfully obtained its IP address. However, eventually it will also depend on additional factors such as whether the server has been deleted from the realm.list. To ease that transition, replace the 'usable' flag with a 'got_addr' flag (which is set when the address lookup succeeds), and add a new function to test whether a server is usable.
* Make otherrealms be an array of pointersGravatar Jeffrey Hutzelman2013-02-17
| | | | | | | | | | | | The server keeps pointers to realms in non-ephemeral data structures, such as triplet subscriber lists. Thus, we cannot move existing realms around in memory without causing data corruption. However, dynamic reloading of the realm.list means new realms can appear, which sooner or later will mean reallocating the otherrealms array to make room for more realms. Therefore, to allow otherrealms to be reallocated without changing the addresses of existing realms, otherrealms is converted from an array of realms to an array of pointers to realms.
* 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.
* 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.
* 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)
* change the prototype variable name "class" to match the actual function ↵Gravatar Karl Ramm2009-08-09
| | | | "class_name"
* Factor out code that extacts a sockaddr_in from a notice (and stop using theGravatar Karl Ramm2009-07-29
| | | | | | | deprecated sender_addr macro.) Actually remove the code from realm.c:real_dispatch because nothing was using the result. Ran nuke-trailing-whitespace on all the files I touched, as usual.
* Refactor ZCheckRealmAuthentication into ZCheckSrvAuthentication.Gravatar Karl Ramm2009-07-27
| | | | (also fiddle around with what krb4 checksums are available in krb5-only land)
* Remove the chock wedging things into DES mode and hopefully redo the ↵Gravatar Karl Ramm2009-07-26
| | | | | | keyusage stuff such that it actually works.
* zephyr.h will pull in zephyr_err.h will pull in com_err.h without having to ↵Gravatar Karl Ramm2009-07-13
| | | | figure out where it is
* Clean up $Zephyr$sGravatar Karl Ramm2009-04-14
|
* build everything successfully with -Wall -WerrorGravatar Karl Ramm2009-03-02
|
* asedeno's UTF-8 downcasing patchGravatar Karl Ramm2009-03-01
|
* do it all with krb5Gravatar Karl Ramm2008-12-24
|
* allow des key brain dumps from transition servers to krb5-only serversGravatar Karl Ramm2008-12-23
|
* propagate consting of ZGetRealmGravatar Karl Ramm2008-12-22
|
* rearrange some HAVE_KRB4 vs. HAVE_KRB5 stuffGravatar Karl Ramm2008-12-21
|
* fix building w/o krb5Gravatar Karl Ramm2008-12-20
|
* no more NOENCRYPTIONGravatar Karl Ramm2008-01-21
|
* passes gcc -Wall with no warnings other than des cryppt C_block sadness and ↵Gravatar Karl Ramm2008-01-21
| | | | getsid problem
* de K&RifyGravatar Karl Ramm2008-01-21
|
* /afs/andrew.cmu.edu/usr18/cg2v/zephyr-krb5-server-20071215+.diffGravatar Karl Ramm2007-12-25
|
* applied athena-update-branch patchGravatar Karl Ramm2007-12-25
|
* debian patch applied and reconciled, version unfinalizedGravatar Karl Ramm2007-07-20
|
* Changes from CMU:Gravatar Garry Zacheiss2001-02-26
| | | | | | | * Better interrealm support: Realm state support, add realm state enum and add additional opcode for realm initialization code. * Prototype updates.
* Some RCS ID cleanup: delete $Log$ and replace other RCS keywords with $Id$.Gravatar Greg Hudson1999-01-22
|
* Keep track of how responsive clients have been and don't time out good ones.Gravatar Greg Hudson1998-09-02
|
* Eliminate some cruft: nuke two unused fields in the client structureGravatar Greg Hudson1998-07-16
| | | | | and rename client_which_client() to client_find() and make the second argument a port instead of a notice.
* From epeisach: Add a missing prototype for realm_control_dispatch.Gravatar Greg Hudson1997-10-16
|
* Correcet an oops. (I thought I'd tested this.)Gravatar Greg Hudson1997-09-23
|
* Declare server-specific zephyr library interfaces here.Gravatar Greg Hudson1997-09-23
|
* Pull in sources from zephyr locker. See /mit/zephyr/repository forGravatar Greg Hudson1997-09-14
| | | | detailed change information.
* Some changes for full-triplet hashing, got rid of zmatch_all.Gravatar Greg Hudson1994-10-31
|
* Include <string.h> instead of <strings.h> (portability)Gravatar Richard Basch1994-08-18
|
* Added START_CRITICAL_CODE and END_CRITICAL_CODE definitions.Gravatar Richard Basch1994-04-07
|