Detect .git instead of CVS. Use git-ls-files with git, else
$(srcdir)/sources.mk. info/findsubj.pl now gets the info files as
arguments rather than from sources.mk.
Remaking info subjects doesn't quite work, but it was broken similarly
before.
Ron Koenderink [Tue, 1 Jan 2008 15:20:08 +0000 (15:20 +0000)]
Rename Autofeed to be Autofish and add information on doing automatic
off-shore drilling like automatic fishing. Fix the formatting to be
more consistent with other info pages.
(sect_ca): New selector elev. It's set by fairland, but has no effect
on the game. It can be useful for deities to customize a world
created by fairland.
Update for current code. Fix description of login commands option
and play. Document protocol's C_EXECUTE flaws. Clarify extent of
redirections. Spelling fixes and such.
(parseid): Switch id encoding from base 16 to base 36. This gives us
another 20 single digit ids before we have to risk breaking clients by
going to multiple digits.
(recvline): Rewrite the loop to receive a line from a socket. The new
version silently truncates long lines. The old one split them up and
got quite confused. It got also confused when the line didn't arrive
in one piece. Icing on the cake: it wrote beyond the end of the
buffer. The new version is less efficient, but that doesn't matter
here.
(recvline): Remove the timeout feature. There are many other places
where the client could wait indefinitely for the server. The user can
always interrupt.
Ron Koenderink [Tue, 11 Dec 2007 22:00:25 +0000 (22:00 +0000)]
(w32_getpw, w32_socket, w32_connect, w32_recv, w32_send,
w32_writev_socket, w32_close_socket, getpass, w32_openfd,
w32_openhandle, w32_readv_handle, w32_close_handle,
sysdep_init, sysdep_stdin_init, w32_select, w32_signal_handler,
sigaction, stdin_read_thread, w32_ring_from_file_to_bounce_buf)
[_WIN32]: New w32 equivalent functions for POSIX functions.
(recvline, sendcmd, tcp_connect, hostconnect, getpass,
main, intr, play, ring_to_file, ring_from_file, doexecute,
doredir) [_WIN32]: Use new WIN32 equivalent functions.
(main) [_WIN32]: Add sysdep_init() to support system dependent
initialization for equivalence functions.
(play) [_WIN32]: Add sysdef_stdin_init() to support system
dependent initialization for reading stdin.
(recv_input, play) [_WIN32]: Replace the calls to ring_to_file()
and select() with WIN32 specific enhanced versions.
Makefile.in: update dependencies with new files.
Make.mk: Add using of getopt.c and getopt.h
from src/lib/w32 directory. Add getopt.c and getopt.h
to tar for client.
Disable nested execute. The execute protocol is flawed and cannot be
implemented correctly by asynchronous clients --- unless a client
waits for a prompt after sending the execute command and its argument,
it is prone to send more input before the C_EXECUTE arrives. That
input overtakes the contents of the script file. This is almost
certain to happen when the execute is in a script file. Disabling
that is probably more useful and certainly less painful than
documenting this mess. The client rejects nested execute since
servcmd.c rev. 1.42.
(EXEC): new.
(player_coms): Require it for execute.
(player_set_nstat): Set it in nstat.
(execute): Clear it in nstat.
(execute): Clients can't reliably detect where a redirection ends
because the server doesn't send C_PROMPT. The client simply rejects
such redirections since servcmd.c rev. 1.42. Before it didn't, but
incorrectly extended the redirection until the end of the script, and
screwed up when there was more than one redirection in the execute.
Make the server reject such redirections as well, because that's
probably more useful and certainly less painful than documenting this
mess.
Ron Koenderink [Sat, 8 Dec 2007 23:09:56 +0000 (23:09 +0000)]
(recv_input): Skip CR when creating command buffer.
This prevents mismatches between command buffer and
the response from the server during the secure check.
(dispatch, explain, status): Use player->nstat instead of
player->ncomstat for command permissions. Side effect: status() no
longer notifies deities when they go broke or become solvent.
(dispatch): Don't distinguish between transiently and permanently
unavailable commands. Didn't really work anyway.
(player): Remove unused member ncomstat.
(xdump): Fix test whether to deny access to game state. Rev. 1.72
added that test to make xdump available before break, and faithfully
denied access exactly when xdump wasn't available before. This denied
access when maximum minutes per day were exceeded. Don't.
Consistently consider a nation bankrupt when its treasury is
negative. Some places considered $0 as bankrupt, some didn't. Fix
the ones that did:
(repo_list): report command misreported countries with $0 as broke.
(init_nats): If you had $0, logging out and back in bankrupted you.
(produce_sect, upd_ship): Failed to build sectors and produce stuff
for countries with $0.
(status): Round money before checking solvency, and consistently treat
$0 as solvent. Before, you became bankrupt / solvent when your money
went below / above zero before rounding, but not when you hit zero
exactly.
(check_trade): Fix bug that made your money evaporate when you didn't
have enough to pay. This was aggravated by the removal of automatic
loans in rev. 1.15. Clean up after that revision, belatedly.
Remove claim that ships and units on missions will not fire support.
It's always been wrong for ships, and land units were changed to match
ships in lndsub.c rev. 1.49.
Reject unexpected redirections:
(redir_authorized): New parameter expected, reject when zero.
(doredir): Pass !redir_fp, do not close it. Before, an unexpected
redirection silently replaced the existing one.
(dopipe): Pass !redir_fp. Before, an unexpected redirection silently
replaced the existing one, leaking its FILE.
(doexecute): Pass 1.
Refactor redirection data structure, no functional change:
(redir_is_pipe): New.
(doredir, dopipe): Set it.
(pipe_fp): Remove. Users changed to use redir_fp and redir_is_pipe.
Flaws in the Empire protocol make redirections within execute next to
impossible to implement correctly, and nested execute practically
useless (#116377). Catch and refuse those:
(executing): New.
(doexecute, prompt): Set and clear it.
(redir_authorized): Reject if set.
(doexecute, play): Don't signal doexecute() failure through input_fd,
because that screws up up when we're executing already. Increment
send_eof in doexecute() instead.
(send_eof): External linkage.
(play): Increment send_eof instead of setting it, decrement it instead
of clearing it. Fixes a race condition: when we got EOF on input_fd
and a failed doexecute() in the same iteration of the loop, only one
EOF cookie was sent, leaving the client hung.
(flash, wall): Use player->comtail[] to find the raw message. The old
hack to find worked only when there were no spaces in flash's first
argument. Closes #941740.
(execute): Use player->comtail[1] instead of player->argp[1]. This
makes execute send everything after the command back to the client
verbatim, not just the first argument (with quotes and funny
characters stripped). The client always expected that, and got
confused when the server sent something else.
Record raw arguments, to be used in the next changesets:
(player): New member comtail.
(parse): New parameter tail. Reorder parameter list.
(command, execute): Pass player->comtail.
(player_login, emp_config, do_unit_move): Pass NULL. No functional
change.
(getilist): Use pln_airbase_ok(). This fixes a number of bugs: planes
stuck in foreign bases, on inefficient ships or land units, or land
units loaded on ships or land units could still intercept.
(can_fly): Remove.
(getilist): Remove bogus fuel check. It was inconsistent with the one
in mission_pln_equip(), which is called from ac_intercept(). The
inconsistency appeared in Empire3, and had no ill effect then. But
rev. 1.42 screwed up the fuel test here: it made interceptors that
don't use fuel (SAMs) require petrol to be present to fly.