summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* Bump find_or_insert_uid's time limitGravatar David Benjamin2013-09-28
| | | | | | | Basing it on krb4's CLOCK_SKEW value doesn't make any sense. We pick 900 because it is just over 128 + 256 + 512, the longest group of three timeouts in the retransmit schedule used by the zephyrd. This allows us to miss two packets in a row and still be fine.
* Turn find_or_insert_uid's buffer into an LRU cacheGravatar David Benjamin2013-09-28
| | | | | | If we see a duplicated packet, that means the server missed (or raced with) our CLIENTACK, which means we should update the timestamp on the entry to reset the aging.
* Drop packets with garbage at the end on the floorGravatar David Benjamin2013-09-28
| | | | | | | | | | | | | This effectively reverts 170736db76139ed9fff9dbf70a55d4ba4f25d9bd. That commit didn't work anyway. It fails to update packet_len, so we computed the Z_InputQ's header_len wrong and fail to truncate the garbage anyway. Plus packets like that likely come from a broken cross-realm zephyrd without f276622ace757977fec43633e43577350e0cf6fe, so we want to drop them. That patch has yet to be in a released libzephyr, so if there are other sources of notices with trailing garbage, no one was relying on them working anyway. On the contrary, we were relying on them NOT working in that it masks broken cross-realm zephyrds.
* Simplify Z_AddNoticeToEntry a bitGravatar David Benjamin2013-08-20
| | | | | The holelist isn't kept sorted; we used to always append to the end. But it's a singly-linked list, so prepending to it is going to be much much simpler.
* cleanup debian/changelog and fix the bug in the release script that was ↵Gravatar Karl Ramm2013-08-08
| | | | messing it up
* release 3.1~beta1Gravatar Karl Ramm2013-08-08
|
* autoconf check for krb5_free_unparsed_nameGravatar Karl Ramm2013-08-08
|
* Defensively avoid waiting on non-initial SERVACKsGravatar David Benjamin2013-08-08
| | | | | | | | | | | Although the previous commit should make it very unlikely we screw up the subscription sharding, be defensive about waiting for SERVACKs. ZSubscribeTo does mess up, Z_SendFragmentedNotice will shard with a z_multiuid. In that case, although the second packet will get a SERVACK, Z_ReadWait kindly drops it on the floor. The ZIfNotice will then just hang. Tested by bumping zwgc's BATCH_SIZE up to 200, reverting the previous commit, and strace.
* Add fudge factor in subscription shardingGravatar David Benjamin2013-08-08
| | | | | | | | | | | | | | | | | Header lengths are not constant-size because Zcode escapes bytes 0xFF and 0x00 into two bytes. If we end up filling up close to all the space we have and Z_SendFragmentedNotice then computes a header length larger than ours by enough, the message gets fragmented. Getting it fragmented is especially unfortunate because only the first of a fragmented notice ever has a SERVACK survive. (They all get SERVACKs, but libzephyr kindly drops all but the first on the floor.) This isn't a watertight fix; we may get really really unlucky and blow up 13 bytes in the authenticator and checksum. But that's not likely, and a proper fix would involve either computing based on the maximum possible authenticator size (wasteful and hard to bound tightly) or changing to protocol to use a less inappropriate encoding.
* Add a bunch of files to .gitignoreGravatar David Benjamin2013-08-08
|
* Call krb5_unparse_name in server/kstuff.cGravatar David Benjamin2013-08-08
| | | | Looks like it's the same as free right now, but may as well call the right one.
* Free the result of krb5_unparse_name in ZGetSenderGravatar David Benjamin2013-08-08
| | | | Minor memory leak, but we may as well fix it.
* Expose Z_Subscriptions as ZSubscriptionsGravatar David Benjamin2013-08-08
| | | | | | With a custom send_routine that mirrors ZSrvSendList. This allows for an asynchronous version that replaces send_routine with non-blocking versions (and waits for ACKs out-of-band).
* Remove unauthenticated support from subs codeGravatar David Benjamin2013-08-08
| | | | | | It's only used by ZCancelSubscription, but the server rejects unauthenticated CLIENT_CANCELSUB requests anyway. The unauthenticated codepath results in a SERVNAK and doesn't drop subs.
* Don't pass HMACKs through reassembly codeGravatar David Benjamin2013-08-08
| | | | | | | | | | | | | | | | | | | ACKs to fragmented notices keep the multiuid field, but multipart becomes "". This is interpreted as 0/z_message_length. This means ACKs to non-initial fragments look like an initial fragment from the multipart field, but not when checking uid == multiuid. The result is that they get smashed when passing through reassembly. 6e8ec12b0ba9d476e065957028e4cf9cf69d6ac2 addressed this. For SERVACKs and SERVNAKs, it drops all but the initial ones (uid == multipart) on the floor. It ignores the problem for HMACKs. Normally ZSendPacket blocks on the HMACK before sending each successive fragment, so there's no opportunity for them to collide. But if calling ZSrvSendNotice with a custom send_function that doesn't block, the HMACKs can smash into each other depending on timing. Instead, fix it by using z_uid instead of z_multiuid as the multiuid key. For compatibility, keep the SERVACK dropping behavior. (I'd like to get all the SERVACKs too, but potentially that'll confuse clients somewhat.)
* Mark cksum_map as constGravatar David Benjamin2013-08-08
| | | | May as well put it in .rodata
* ZSendNotice: Don't leak buffer in error caseGravatar David Benjamin2013-08-08
| | | | | I would hope this codepath can never trigger, but good to clean up properly here.
* package the pkgconfig fileGravatar Karl Ramm2013-08-08
|
* Provide a pkg-config file for zephyrGravatar Alex Chernyakhovsky2013-08-08
| | | | | | | | | | | | | | | | Previously, it was difficult to detect the presence of the zephyr library in autoconf, and required custom macros. However, the world has since developed pkg-config, which is a simple tool for detecting the presence of a package, its compile-time flags, and its link-time flags, even in the presence of recursive dependencies. This adds "zephyr.pc" as a file generated by the build process, and installs it into the appropriate directory, allowing the target system to use PKG_CHECK_MODULES([ZEPHYR], [zephyr]) AC_SUBST([ZEPHYR_CFLAGS]) AC_SUBST([ZEPHYR_LIBS]) to detect all necessary information to incorporate the zephyr library.
* release should push the release tags as wellGravatar Karl Ramm2013-07-08
|
* release 3.1~beta0Gravatar Karl Ramm2013-07-08
|
* git is whiny about ~s in versionsGravatar Karl Ramm2013-07-08
|
* I meant thatGravatar Karl Ramm2013-07-08
|
* fix bugs in release scriptGravatar Karl Ramm2013-07-07
|
* release 3.1-beta0Gravatar Karl Ramm2013-07-07
|
* add -U to zwrite for UNACKED messagesGravatar Karl Ramm2013-04-07
| | | | Based on a patch by Ray Link <rlink+git@cs.cmu.edu>
* zwrite: Add -S for ZNOAUTH sender spoofingGravatar Ray Link2013-04-07
| | | | zwrite: Manpage update for -S
* Fix new style issue in test_serverGravatar Jeffrey Hutzelman2013-04-03
| | | | Style says return types go on their own line.
* Fix prototype and style issues in test_serverGravatar Jeffrey Hutzelman2013-04-03
|
* Don't create directory 755 on make installGravatar David Benjamin2013-03-27
| | | | It's -m 755, but that's the default anyway.
* Fix generated header dependencies for test_serverGravatar David Benjamin2013-03-27
| | | | | Otherwise make -j2 may try to build it before the generated headers are ready and error.
* Mark build as a .PHONY targetGravatar David Benjamin2013-03-27
|
* server: Recheck other-realm server addresses dailyGravatar Jeffrey Hutzelman2013-03-18
| | | | | | | We currently have no support for obeying the TTLs on DNS records containing the addresses of servers in other realms. For now, kludge around this by rechecking these addresses once a day whether we need to or not.
* 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.
* Dewarn with -DDEBUGGravatar Jeffrey Hutzelman2013-03-18
| | | | It's sort of nice to be able to build with debugging.
* acl_files: always return a value from add_hostGravatar Jeffrey Hutzelman2013-03-18
| | | | If it's going to return a value, it needs to always return a value.
* rototill uloc.c to be a little less pathologicalGravatar Karl Ramm2013-03-16
| | | | | | | | Notably, use realloc rather than allocating and copying a whole new table. Also be more consistent about operating in terms of array indices rather then pointers.
* 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.
* remove some now-unused variablesGravatar Karl Ramm2013-03-16
|
* rototill the low-level acl codeGravatar Karl Ramm2013-03-03
| | | | Now supports krb5 pricipals sanely.
* Treat obviously non-zephyr packets as badGravatar Jeffrey Hutzelman2013-02-27
| | | | | | | | | | | | | | When Z_ReadWait receives a packet which doesn't start with a zephyr version header, it considers the packet to be "obviously non-zephyr". Such packets are discarded and, previously, caused Z_ReadWait to return ZERR_NONE. Unfortunately, this can cause things to block for up to 60s when a caller was expecting a non-blocking call to pick up a new packet if there is one. This changes Z_ReadWait to return ZERR_BADPKT in this situation, eliminating the potential wait. This fixes #100
* zctl flush_subsGravatar Jeffrey Hutzelman2013-02-26
| | | | | | | | Provide a new zctl subcommand, flush_subs, to flush all subscriptions for a specified recipient. This is implemented using a new library function, ZFlushUserSubscriptions(). This is the client side of #103
* 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
* Allow zctl flush_locs to take a user argumentGravatar Jeffrey Hutzelman2013-02-26
| | | | | | | | Provide a new library function, ZFlushUserLocations(), to flush locations for a specified user. This can be called using zctl flush_locs, which now takes an optional username parameter. This is the client side of #102
* Allow opstaff to submit location updates for usersGravatar Jeffrey Hutzelman2013-02-26
| | | | | | | This allows anyone on opstaff.acl to submit location updates, including flushing all locations, for a user other than themselves. This is the server side of #102
* Make OPSTAFF_VIS actually visible to opstaffGravatar Jeffrey Hutzelman2013-02-26
| | | | This fixes #101