| Commit message (Collapse) | Author | Age |
|
|
|
| |
Style says return types go on their own line.
|
| |
|
|
|
|
| |
It's -m 755, but that's the default anyway.
|
|
|
|
|
| |
Otherwise make -j2 may try to build it before the generated headers are ready
and error.
|
| |
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
This fixes #73
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
It's sort of nice to be able to build with debugging.
|
|
|
|
| |
If it's going to return a value, it needs to always return a value.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
Move global variables and one function out of main.c so that the rest of
the server can be linked with a test harness.
|
| |
|
|
|
|
| |
Now supports krb5 pricipals sanely.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
This fixes #101
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
|
|
| |
Generate the man pages for zwgc, zctl, zhm, and zephyrd at build time,
so they can refer to the paths actually used instead of whatever was
used on Athena in the 1980's.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
The task of looking up a server's hostname is moved into a separate
function, which will make things cleaner when we start doing so in more
than one place.
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
This makes realm_init() augment the existing other-realm array instead
of replacing it wholesale, which makes it safe to call more than once.
During the first call in which the realm.list file exists and contains at
least one realm, the otherrealms array will be initialized with entries
for all configured realms. During subsequent calls, any new realms will
be added, growing the array as necessary. For now, entries for existing
realms are not updated in any way.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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 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.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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 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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
This fixes #94
|
|
|
|
| |
close #71
|
|
|
|
|
|
|
|
| |
If we have no Kerberos credentials, we cannot create a checksum.
This can happen if, for example, we end up with an expired TGT.
In this case, instead of crashing, just leave the zero checksum.
This fixes #80
|
|
|
|
|
|
|
| |
When retransmitting a notice after a timeout, just send the original packet
instead of reformatting the notice, which destroys new-style authenticators.
This fixes #92
|
|
|
|
|
|
| |
This can't get subs in the athena realm.
This reverts commit b92153fac201a9a22779817be5f2375f7cf754fc.
|
|
|
|
| |
This fixes #94
|
|
|
|
|
|
|
|
| |
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
|