DELTA 18976 13016 939 SVNSดC!ข2‰eQ€‡NQœN€švQ…Š6 The freeciv database tables can be created with the following: -- -- CREATE TABLE fcdb_auth ( -- id int(11) NOT NULL auto_increment, -- name varchar(48) default NULL, -- password varchar(32) default NULL, -- email varchar(128) default NULL, -- createtime int(11) default NULL, -- accesstime int(11) default NULL, -- address varchar(255) default NULL, -- createaddress varchar(15) default NULL, -- logincount int(11) default '0', -- PRIMARY KEY (id), -- UNIQUE KEY name (name) -- ) TYPE=MyISAM; -- -- CREATE TABLE fcdb_log ( -- id int(11) NOT NULL auto_increment, -- name varchar(32) default NULL, -- logintime int(11) default NULL, -- address varchar(255) default NULL, -- succeed enum('S','F') default 'S', -- PRIMARY KEY (id) -- ) TYPE=MyISAM; -- -- N.B. if the tables are not of this format, then the select, insert, -- and update syntax in the following functions must be changed. freeciv user auth functions -- load user data function user_load(conn) local status -- return value (status of the request) local res -- result handle local numrows -- number of rows in the sql result local row -- one row of the sql result local query -- sql query local fields = 'password' local table_user = fcdb.option(fcdb.param.TABLE_USER) local table_log = fcdb.option(fcdb.param.TABLE_LOG) local username = dbh:escape(auth.get_username(conn)) local ipaddr = dbh:escape(auth.get_ipaddr(conn)) if not dbh then log.error("Missing database connection ...") return fcdb.status.ERROR end -- get the password for this user query = string.format([[SELECT %s FROM %s WHERE `name` = '%s']], fields, table_user, username) status, res = execute(query); if status ~= fcdb.status.TRUE then return fcdb.status.ERROR end numrows = res:numrows() if numrows == 0 then res:close() return fcdb.status.FALSE end if numrows > 1 then log.error('[user_load]: multiple entries (%d) for user: %s', numrows, username) res:close() return fcdb.status.FALSE end row = res:fetch({}, 'a') auth.set_password(conn, row.password) res:close() return fcdb.status.TRUE end -- save an user to the database function user_save(conn) local status -- return value (status of the request) local res -- result handle local query -- sql query local table_user = fcdb.option(fcdb.param.TABLE_USER) local username = dbh:escape(auth.get_username(conn)) local password = dbh:escape(auth.get_password(conn)) local ipaddr = auth.get_ipaddr(conn) if not dbh then log.error("Missing database connection ...") return fcdb.status.ERROR end -- insert the user query = string.format([[INSERT INTO %s VALUES (NULL, '%s', '%s', NULL, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '%s', '%s', 0)]], table_user, username, password, ipaddr, ipaddr) status, res = execute(query) if status ~= fcdb.status.TRUE then return fcdb.status.ERROR end -- log this session return user_log(conn, true) end -- log the session function user_log(conn, success) local status -- return value (status of the request) local res -- result handle local query -- sql query local table_user = fcdb.option(fcdb.param.TABLE_USER) local table_log = fcdb.option(fcdb.param.TABLE_LOG) local username = dbh:escape(auth.get_username(conn)) local ipaddr = auth.get_ipaddr(conn) local success_str = success and 'S' or 'F' if not dbh then log.error("Missing database connection ...") return fcdb.status.ERROR end -- update user data query = string.format([[UPDATE %s SET `accesstime` = UNIX_TIMESTAMP(), `address` = '%s', `logincount` = `logincount` + 1 WHERE `name` = '%s']], table_user, ipaddr, username) status, res = execute(query) if status ~= fcdb.status.TRUE then return fcdb.status.ERROR end -- insert the log row for this user query = string.format([[INSERT INTO %s (name, logintime, address, succeed) VALUES ('%s', UNIX_TIMESTAMP(), '%s', '%s')]], table_log, username, ipaddr, success_str) status, res = execute(query) if status ~= fcdb.status.TRUE then return fcdb.status.ERROR end return fcdb.status.TRUE end ENDREP DELTA 19259 2178 2996 SVN๏|๑#Cƒ+ณI€[˜ ณlŒ‚ ห€7—/ฯ.›b้ˆX้hˆPะœ‚ ้›M้‚4๋p—b้ˆ_้hŒcreate_md5sum((unsigned char *)password, strlen(password), pconn->server.e hashed oneMD5_HEX_BYTES + 1]; /* do the password checking right here */ create_md5sum((const unsigned char *)password, len, checksum); ok = (strncmp(checksum, pconn->server.password, MD5Get username for connectionusernameusername Get connection ip addressSet password for connectionGet connection passwordpasswordpassword; } ENDREP DELTA 19259 32891 391 SVN๖fฺ /ะaG€Cƒe G”€ส_G€ ดy€‚fG0€vp’2€X Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold/ /* * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. * MD5 Message-Digest Algorithm (RFC 1321). * * Homepage: * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5 * [This version is from the page revision dated 2011/02/04 14:10.] * * Author: * Alexander Peslyak, better known as Solar Designer * * This software was written by Alexander Peslyak in 2001. No copyright is * claimed, and the software is hereby placed in the public domain. * In case this attempt to disclaim copyright and place the software in the * public domain is deemed null and void, then the software is * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the * general public under the following terms: * * Redistribution and use in source and binary forms, with or without * modification, are permitted. * * There's ABSOLUTELY NO WARRANTY, express or implied. * * (This is a heavily cut-down "BSD license".) * * This differs from Colin Plumb's older public domain implementation in that * no exactly 32-bit integer data type is required (any 32-bit or wider * unsigned integer data type will do), there's no compile-time endianness * configuration, and the function prototypes match OpenSSL's. No code from * Colin Plumb's implementation has been reused; this comment merely compares * the properties of the two independent implementations. * * The primary goals of this implementation are portability and ease of use. * It is meant to be fast, but not as fast as possible. Some known * optimizations are not included to reduce source code size and avoid * compile-time configuration. */ /* * Freeciv changes relative to upstream: * - Reformatting and other cosmetic changes to fit in with Freeciv coding * conventions. * - Don't expose the init/update/final interface to the rest of Freeciv * in md5.h; just expose a single high-level function which calculates * the checksum on a buffer (with the result as an ASCII string). */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "md5.h" /* Any 32-bit or wider unsigned integer data type will do */ typedef unsigned int MD5_u32plus; typedef struct { MD5_u32plus lo, hi; MD5_u32plus a, b, c, d; unsigned char buffer[64]; MD5_u32plus block[16]; } MD5_CTX; /* * The basic MD5 functions. * * F and G are optimized compared to their RFC 1321 definitions for * architectures that lack an AND-NOT instruction, just like in Colin Plumb's * implementation. */ #define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) #define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y)))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | ~(z))) /* * The MD5 transformation for all four rounds. */ #define STEP(f, a, b, c, d, x, t, s) \ (a) += f((b), (c), (d)) + (x) + (t); \ (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \ (a) += (b); /* * SET reads 4 input bytes in little-endian byte order and stores them * in a properly aligned word in host byte order. * * The check for little-endian architectures that tolerate unaligned * memory accesses is just an optimization. Nothing will break if it * doesn't work. */ #if defined(__i386__) || defined(__x86_64__) || defined(__vax__) #define SET(n) \ (*(MD5_u32plus *)&ptr[(n) * 4]) #define GET(n) \ SET(n) #else #define SET(n) \ (ctx->block[(n)] = \ (MD5_u32plus)ptr[(n) * 4] | \ ((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \ ((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \ ((MD5_u32plus)ptr[(n) * 4 + 3] << 24)) #define GET(n) \ (ctx->block[(n)]) #endif /* * This processes one or more 64-byte data blocks, but does NOT update * the bit counters. There are no alignment requirements. */ static const void *body(MD5_CTX *ctx, const void *data, unsigned long size) { const unsigned char *ptr; MD5_u32plus a, b, c, d; MD5_u32plus saved_a, saved_b, saved_c, saved_d; ptr = data; a = ctx->a; b = ctx->b; c = ctx->c; d = ctx->d; do { saved_a = a; saved_b = b; saved_c = c; saved_d = d; /* Round 1 */ STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7) STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12) STEP(F, c, d, a, b, SET(2), 0x242070db, 17) STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22) STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7) STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12) STEP(F, c, d, a, b, SET(6), 0xa8304613, 17) STEP(F, b, c, d, a, SET(7), 0xfd469501, 22) STEP(F, a, b, c, d, SET(8), 0x698098d8, 7) STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12) STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17) STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22) STEP(F, a, b, c, d, SET(12), 0x6b901122, 7) STEP(F, d, a, b, c, SET(13), 0xfd987193, 12) STEP(F, c, d, a, b, SET(14), 0xa679438e, 17) STEP(F, b, c, d, a, SET(15), 0x49b40821, 22) /* Round 2 */ STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5) STEP(G, d, a, b, c, GET(6), 0xc040b340, 9) STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14) STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20) STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5) STEP(G, d, a, b, c, GET(10), 0x02441453, 9) STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14) STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20) STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5) STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9) STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14) STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20) STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5) STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9) STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14) STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20) /* Round 3 */ STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4) STEP(H, d, a, b, c, GET(8), 0x8771f681, 11) STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16) STEP(H, b, c, d, a, GET(14), 0xfde5380c, 23) STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4) STEP(H, d, a, b, c, GET(4), 0x4bdecfa9, 11) STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16) STEP(H, b, c, d, a, GET(10), 0xbebfbc70, 23) STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4) STEP(H, d, a, b, c, GET(0), 0xeaa127fa, 11) STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16) STEP(H, b, c, d, a, GET(6), 0x04881d05, 23) STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4) STEP(H, d, a, b, c, GET(12), 0xe6db99e5, 11) STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16) STEP(H, b, c, d, a, GET(2), 0xc4ac5665, 23) /* Round 4 */ STEP(I, a, b, c, d, GET(0), 0xf4292244, 6) STEP(I, d, a, b, c, GET(7), 0x432aff97, 10) STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15) STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21) STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6) STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10) STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15) STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21) STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6) STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10) STEP(I, c, d, a, b, GET(6), 0xa3014314, 15) STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21) STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6) STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10) STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15) STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21) a += saved_a; b += saved_b; c += saved_c; d += saved_d; ptr += 64; } while (size -= 64); ctx->a = a; ctx->b = b; ctx->c = c; ctx->d = d; return ptr; } static void MD5_Init(MD5_CTX *ctx) { ctx->a = 0x67452301; ctx->b = 0xefcdab89; ctx->c = 0x98badcfe; ctx->d = 0x10325476; ctx->lo = 0; ctx->hi = 0; } static void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size) { MD5_u32plus saved_lo; unsigned long used, free; saved_lo = ctx->lo; if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo) ctx->hi++; ctx->hi += size >> 29; used = saved_lo & 0x3f; if (used) { free = 64 - used; if (size < free) { memcpy(&ctx->buffer[used], data, size); return; } memcpy(&ctx->buffer[used], data, free); data = (unsigned char *)data + free; size -= free; body(ctx, ctx->buffer, 64); } if (size >= 64) { data = body(ctx, data, size & ~(unsigned long)0x3f); size &= 0x3f; } memcpy(ctx->buffer, data, size); } static void MD5_Final(unsigned char *result, MD5_CTX *ctx) { unsigned long used, free; used = ctx->lo & 0x3f; ctx->buffer[used++] = 0x80; free = 64 - used; if (free < 8) { memset(&ctx->buffer[used], 0, free); body(ctx, ctx->buffer, 64); used = 0; free = 64; } memset(&ctx->buffer[used], 0, free - 8); ctx->lo <<= 3; ctx->buffer[56] = ctx->lo; ctx->buffer[57] = ctx->lo >> 8; ctx->buffer[58] = ctx->lo >> 16; ctx->buffer[59] = ctx->lo >> 24; ctx->buffer[60] = ctx->hi; ctx->buffer[61] = ctx->hi >> 8; ctx->buffer[62] = ctx->hi >> 16; ctx->buffer[63] = ctx->hi >> 24; body(ctx, ctx->buffer, 64); result[0] = ctx->a; result[1] = ctx->a >> 8; result[2] = ctx->a >> 16; result[3] = ctx->a >> 24; result[4] = ctx->b; result[5] = ctx->b >> 8; result[6] = ctx->b >> 16; result[7] = ctx->b >> 24; result[8] = ctx->c; result[9] = ctx->c >> 8; result[10] = ctx->c >> 16; result[11] = ctx->c >> 24; result[12] = ctx->d; result[13] = ctx->d >> 8; result[14] = ctx->d >> 16; result[15] = ctx->d >> 24; memset(ctx, 0, sizeof(*ctx)); } **** Compute MD5 message digest for LEN octets beginning at BUFFER. The result is always in little endian octet order, so that an octetstatic void md5_buffer(const unsigned char *buffer, size_t len, unsigned char *resblock) { MD5_CTX ctx; /* Initialize the computation context. */ MD5_Init(&ctx); /* Process whole buffer but last len % 64 bytes. */ MD5_Update(&ctx, buffer, len); /* Put result in desired memory area. */ MD5_Final(resblock, &ctx); } unsigned char *input, int len, char output[MD5_HEX_BYTES + 1]) { unsigned char bin_buffer[MAX_MD5MD5_HEX_BYTES / 2); cnt++, ptr += 2) { sprintf(ptr, "%02x", bin_buffer[cnt]); } } ENDREP DELTA 18858 22545 189 SVNฆ*ˆT „(G€Cƒe €ƒe Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold***********************************************************************/ #ifndef FC__MD5_H #define FC__MD5_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define MD5_BITS 128 #define MD5_HEX_BYTES (MD5_BITS / 4) #define MD5_BIN_BYTES (MD5_BITS / 8) #define MAX_MD5_BIN_BYTES MD5_BIN_BYTES void create_md5sum(const unsigned char *input, int len, char output[MD5_HEX_BYTES + 1]); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* FC__MD5_H */ ENDREP id: 33q.5ck.r19849/16042 type: file pred: 33q.5ck.r19259/354022 count: 5 text: 19849 5011 10396 11552 ca2c284b4ee371860b62a0efa99db765 props: 10768 10209 110 0 94a2a96823d3c54fff31bdd51de17982 cpath: /trunk/utility/md5.c copyroot: 15280 /trunk id: 33r.5ck.r19849/16287 type: file pred: 33r.5ck.r18858/86098 count: 3 text: 19849 15436 577 1108 ce61a1cdf6cb1e66bf55e6d31fe320b4 props: 10768 10535 110 0 94a2a96823d3c54fff31bdd51de17982 cpath: /trunk/utility/md5.h copyroot: 15280 /trunk PLAIN K 11 Makefile.am V 24 file 2gg.5ck.r19724/1388 K 9 astring.c V 25 file h5.5ck.r19259/362078 K 9 astring.h V 24 file h6.5ck.r18858/87520 K 11 bitvector.c V 26 file 4un.5ck.r19259/352596 K 11 bitvector.h V 25 file 4uo.5ck.r18858/84686 K 12 capability.c V 25 file 7p.5ck.r19259/353773 K 12 capability.h V 24 file 7q.5ck.r18858/85852 K 12 distribute.c V 26 file 2lp.5ck.r19259/362511 K 12 distribute.h V 25 file 2lq.5ck.r18858/87951 K 9 fc_utf8.c V 26 file 4ku.5ck.r19259/351921 K 9 fc_utf8.h V 25 file 4kv.5ck.r18858/83826 K 9 fciconv.c V 26 file 2g7.5ck.r19259/363906 K 9 fciconv.h V 25 file 2g8.5ck.r18858/89144 K 8 fcintl.c V 25 file k3.5ck.r19259/362999 K 8 fcintl.h V 24 file fw.5ck.r18858/88428 K 10 fcthread.c V 23 file 6hv.5ck.r19269/309 K 10 fcthread.h V 23 file 6hw.5ck.r19269/493 K 4 ftwl V 25 dir 2jb.5ck.r19259/361347 K 20 generate_specenum.py V 25 file 4ia.5ck.r18858/86778 K 9 genhash.c V 26 file 57v.5ck.r19259/362322 K 9 genhash.h V 25 file 57w.5ck.r18858/87764 K 9 genlist.c V 25 file 51.5ck.r19259/352787 K 9 genlist.h V 24 file 52.5ck.r18858/84875 K 11 inputfile.c V 25 file h9.5ck.r19259/352110 K 11 inputfile.h V 24 file ha.5ck.r18858/84203 K 5 ioz.c V 25 file uh.5ck.r19259/352356 K 5 ioz.h V 24 file ui.5ck.r18902/20628 K 10 iterator.c V 26 file 4h5.5ck.r19259/364399 K 10 iterator.h V 25 file 4f3.5ck.r18858/83640 K 5 log.c V 24 file 53.5ck.r19712/19378 K 5 log.h V 23 file 54.5ck.r19183/4705 K 5 md5.c V 25 file 33q.5ck.r19849/16042 K 5 md5.h V 25 file 33r.5ck.r19849/16287 K 5 mem.c V 25 file d9.5ck.r19259/362758 K 5 mem.h V 24 file da.5ck.r18858/88193 K 9 netfile.c V 25 file 6m8.5ck.r19780/13371 K 9 netfile.h V 25 file 6m9.5ck.r19780/13557 K 9 netintf.c V 23 file t6.5ck.r19841/1434 K 9 netintf.h V 22 file t7.5ck.r18922/485 K 8 pqueue.c V 26 file 2cu.5ck.r19259/361587 K 8 pqueue.h V 25 file 2cv.5ck.r18858/87033 K 6 rand.c V 25 file m5.5ck.r19259/363664 K 6 rand.h V 24 file m6.5ck.r18858/88905 K 10 registry.c V 25 file dh.5ck.r19259/353278 K 10 registry.h V 24 file di.5ck.r18858/85363 K 8 shared.c V 23 file 55.5ck.r19684/1907 K 8 shared.h V 24 file 1d.5ck.r19712/19137 K 10 spechash.h V 24 file 57x.5ck.r18859/4016 K 10 speclist.h V 24 file gb.5ck.r18858/86338 K 9 specvec.h V 24 file z9.5ck.r18858/89628 K 15 string_vector.c V 26 file 4hy.5ck.r19259/354456 K 15 string_vector.h V 25 file 4hz.5ck.r18858/86585 K 9 support.c V 25 file m9.5ck.r19259/353526 K 9 support.h V 24 file ma.5ck.r18858/85610 K 8 timing.c V 25 file el.5ck.r19259/364155 K 8 timing.h V 23 file em.5ck.r19206/9291 END ENDREP id: 1c.5ck.r19849/19065 type: dir pred: 1c.5ck.r19841/4209 count: 731 text: 19849 16529 2523 2523 d4b4010217846e5db6434bc17cafd936 props: 17175 331 84 0 5447a85ba28edec0d4a8f6120070e2b2 cpath: /trunk/utility copyroot: 15280 /trunk id: 39c.5ck.r19849/19297 type: file pred: 39c.5ck.r19268/76306 count: 30 text: 19849 4476 506 14499 dc455b4cf9ef1a6094b1b9b78836d146 props: 12670 11903 34 0 25e6c2f7558b7484000d4d090dea5b92 cpath: /trunk/server/auth.c copyroot: 15280 /trunk PLAIN K 11 Makefile.am V 23 file 5q.5ck.r19757/1052 K 8 advisors V 23 dir 4n2.5ck.r19726/4482 K 9 aiiface.c V 24 file 4gm.5ck.r19311/1835 K 9 aiiface.h V 25 file 4gn.5ck.r18899/20936 K 6 auth.c V 25 file 39c.5ck.r19849/19297 K 6 auth.h V 25 file 39d.5ck.r18977/19170 K 11 barbarian.c V 24 file lw.5ck.r19677/17776 K 11 barbarian.h V 24 file lx.5ck.r18054/18407 K 14 citizenshand.c V 26 file 6mz.5ck.r19259/389611 K 14 citizenshand.h V 25 file 6n0.5ck.r19127/18563 K 10 cityhand.c V 24 file 10.5ck.r19573/66885 K 10 cityhand.h V 23 file 4f.0.r13297/423686 K 11 citytools.c V 24 file 4g.5ck.r19741/18483 K 11 citytools.h V 24 file 4h.5ck.r18270/28958 K 10 cityturn.c V 22 file 4i.5ck.r19800/401 K 10 cityturn.h V 23 file 4j.5ck.r19232/7929 K 11 civserver.c V 24 file 4k.5ck.r19780/19389 K 11 civserver.h V 21 file 4l.0.r2805/33121 K 10 commands.c V 23 file 2ly.5ck.r19572/330 K 10 commands.h V 25 file 2lz.5ck.r19153/55408 K 13 connecthand.c V 26 file 2dw.5ck.r19259/380317 K 13 connecthand.h V 25 file 2dx.5ck.r18942/25217 K 9 console.c V 24 file dd.5ck.r19268/74401 K 9 console.h V 23 file de.5ck.r19183/7918 K 10 diplhand.c V 23 file 4m.5ck.r19653/3948 K 10 diplhand.h V 21 file 4n.0.r13421/6826 K 11 diplomats.c V 24 file vz.5ck.r19677/18507 K 11 diplomats.h V 23 file w0.5ck.r19106/3619 K 10 edithand.c V 23 file 3bk.5ck.r19830/157 K 10 edithand.h V 26 file 4ez.5ck.r18452/115476 K 6 fcdb.c V 25 file 6l3.5ck.r19268/75876 K 6 fcdb.h V 25 file 6l4.5ck.r18976/33384 K 10 gamehand.c V 23 file 4o.5ck.r19630/8850 K 10 gamehand.h V 24 file 4p.5ck.r15698/24111 K 9 generator V 23 dir 2me.5ck.r19450/2988 K 11 ggzserver.c V 25 file 39a.5ck.r19268/77975 K 11 ggzserver.h V 25 file 39b.5bk.r15001/48999 K 10 handchat.c V 25 file 4q.5ck.r19259/373384 K 10 handchat.h V 24 file dj.5ck.r18270/28229 K 9 maphand.c V 24 file 13.5ck.r19677/18020 K 9 maphand.h V 23 file 14.5ck.r19593/6013 K 6 meta.c V 24 file 4s.5ck.r19780/20117 K 6 meta.h V 24 file 4t.5ck.r18054/19078 K 8 notify.c V 26 file 4i2.5ck.r19259/388930 K 8 notify.h V 24 file 4i3.5ck.r18282/3660 K 9 plrhand.c V 23 file 4u.5ck.r19823/4425 K 9 plrhand.h V 23 file 4v.5ck.r19597/8317 K 8 report.c V 24 file vi.5ck.r19268/76549 K 8 report.h V 24 file vj.5ck.r18270/29203 K 9 ruleset.c V 24 file 8w.5ck.r19741/18972 K 9 ruleset.h V 22 file 8x.5ck.r17946/997 K 13 sanitycheck.c V 23 file wi.5ck.r19653/4192 K 13 sanitycheck.h V 24 file wj.5ck.r19132/20430 K 10 savegame.c V 24 file vl.5ck.r19712/22825 K 10 savegame.h V 24 file vm.5ck.r17289/22938 K 11 savegame2.c V 23 file 4m0.5ck.r19784/387 K 11 savegame2.h V 25 file 4m1.5ck.r18078/67503 K 7 score.c V 25 file 2eg.5ck.r19268/75136 K 7 score.h V 25 file 2eh.5ck.r19156/21934 K 9 scripting V 23 dir 31x.5ck.r19735/2374 K 8 sernet.c V 23 file 15.5ck.r19389/4971 K 8 sernet.h V 24 file 4y.5ck.r19197/31924 K 10 settings.c V 24 file 2m0.5ck.r19846/1740 K 10 settings.h V 24 file 2m1.5ck.r18294/3094 K 11 spacerace.c V 24 file 9a.5ck.r19268/77290 K 11 spacerace.h V 21 file 9b.0.r11338/1129 K 9 srv_log.c V 24 file 15t.5el.r19485/4822 K 9 srv_log.h V 24 file 15u.5em.r19478/3573 K 10 srv_main.c V 23 file vg.5ck.r19846/1499 K 10 srv_main.h V 24 file vh.5ck.r19780/19874 K 11 stdinhand.c V 23 file 4z.5ck.r19766/1739 K 11 stdinhand.h V 23 file 50.5ck.r18978/5769 K 11 techtools.c V 26 file 33n.5ck.r19291/198118 K 11 techtools.h V 24 file 33o.5ck.r18665/2277 K 10 unithand.c V 22 file 18.5ck.r19786/795 K 10 unithand.h V 24 file 19.5ck.r18578/17031 K 11 unittools.c V 22 file 1a.5ck.r19803/566 K 11 unittools.h V 24 file 1b.5ck.r19677/19003 K 8 voting.c V 26 file 4ex.5ck.r19259/388741 K 8 voting.h V 25 file 4ey.5ck.r18054/19315 END ENDREP id: z.5ck.r19849/23173 type: dir pred: z.5ck.r19846/5621 count: 4559 text: 19849 19539 3621 3621 e598f88684deb14d5119da3c0838533c props: 17175 659 139 0 d1c9699dde7f9d81e54426750008041d cpath: /trunk/server copyroot: 15280 /trunk id: 6l2.5ck.r19849/23404 type: file pred: 6l2.5ck.r18977/23916 count: 2 text: 19849 0 4447 6723 507be24ccfd783fac58a09b7583fbb68 cpath: /trunk/data/database.lua copyroot: 15280 /trunk PLAIN K 10 Freeciv.in V 24 file 2ph.5ck.r19589/4391 K 11 Makefile.am V 23 file 5l.5ck.r19684/6423 K 6 amplio V 25 dir 340.5ck.r19815/183243 K 15 amplio.tilespec V 26 file 34t.5ck.r19815/183485 K 7 amplio2 V 25 dir 4na.5ck.r19754/229642 K 16 amplio2.tilespec V 24 file 4oe.5ck.r19809/7105 K 9 buildings V 22 dir 3co.0.r12672/18420 K 4 civ1 V 22 dir 8l.5ck.r19434/2106 K 9 civ1.serv V 24 file 8s.5ck.r16686/50647 K 4 civ2 V 22 dir ge.5ck.r19689/5347 K 9 civ2.serv V 24 file gj.5ck.r16686/53153 K 16 civclient.dsc.in V 23 file 396.5ck.r15835/587 K 16 civserver.dsc.in V 25 file 397.5ck.r16224/24167 K 17 civserver.room.in V 23 file 398.0.r12670/25531 K 12 database.lua V 25 file 6l2.5ck.r19849/23404 K 7 default V 22 dir 89.5ck.r19848/6691 K 12 default.serv V 25 file 2xa.5ck.r16686/51872 K 12 experimental V 23 dir 4k5.5ck.r19689/7515 K 17 experimental.serv V 25 file 4ki.5ck.r17319/76421 K 5 flags V 25 dir 2gl.5ck.r19848/172429 K 5 fonts V 24 dir 2lv.5bk.r13978/23004 K 19 freeciv-client.icns V 24 file 3fa.0.r12705/354534 K 18 freeciv-client.png V 24 file 33s.0.r12705/351588 K 19 freeciv-server.icns V 24 file 3fc.0.r12705/355017 K 18 freeciv-server.png V 25 file 3fd.5bk.r13732/27487 K 10 freeciv.rc V 21 file 2yj.0.r10123/605 K 14 freeciv.rc-2.0 V 25 file 11h.5ck.r16281/11565 K 8 graphics V 22 dir 2x2.5bk.r14965/611 K 13 gtk_menus.xml V 24 file 4hw.5ck.r19300/6473 K 12 helpdata.txt V 22 file y.5ck.r19786/6187 K 5 hex2t V 24 dir 3dv.5ck.r19351/38046 K 14 hex2t.tilespec V 24 file 3e7.5ck.r19809/6860 K 5 icons V 24 dir 4cb.5bk.r13968/52588 K 7 isophex V 25 dir 2pl.5ck.r19754/223524 K 16 isophex.tilespec V 24 file 2pz.5ck.r19809/6122 K 10 isotrident V 25 dir 13p.5ck.r19754/227136 K 19 isotrident.tilespec V 24 file 148.5ck.r19809/6611 K 4 misc V 23 dir jl.5ck.r19848/35986 K 11 multiplayer V 22 dir 89.5es.r19670/5868 K 16 multiplayer.serv V 24 file 2xa.5et.r17702/1849 K 6 nation V 23 dir ot.5ck.r19848/33244 K 9 scenarios V 22 dir io.5g6.r19786/5938 K 9 stdsounds V 22 dir 32g.0.r12315/22932 K 19 stdsounds.soundspec V 24 file 32y.5ck.r18483/6606 K 6 themes V 25 dir 2m6.5ck.r18476/142774 K 7 trident V 24 dir eb.5ck.r19754/231074 K 16 trident.tilespec V 23 file k4.5ck.r19809/5878 K 7 wonders V 24 dir 3qc.5bk.r13968/51758 END ENDREP id: w.5ck.r19849/25835 type: dir pred: w.5ck.r19848/174919 count: 2398 text: 19849 23589 2233 2233 6786d9b82baa0dfa871681b52643d9b5 props: 11355 32945 104 0 b8b28eed1bd4d902aad8c746f9403748 cpath: /trunk/data copyroot: 15280 /trunk PLAIN K 9 ABOUT-NLS V 22 file fu.0.r13215/85704 K 7 AUTHORS V 19 file 5u.0.r12982/94 K 7 COPYING V 19 file 1h.0.r9643/400 K 9 ChangeLog V 26 file 6l.5ck.r18394/4622094 K 7 INSTALL V 21 file 6.5ck.r19421/429 K 11 Makefile.am V 23 file 59.5ck.r19758/8270 K 4 NEWS V 22 file 6m.5ck.r18758/131 K 6 README V 20 file 7.0.r4421/96382 K 2 ai V 22 dir 8.5ck.r19821/41126 K 10 autogen.sh V 23 file 12o.5ck.r19421/654 K 9 bootstrap V 23 dir 2p5.5ck.r19701/2157 K 6 client V 21 dir d.5ck.r19838/4973 K 6 common V 21 dir p.5ck.r19846/9969 K 12 config.mac.h V 20 file hb.0.r6045/5982 K 12 configure.ac V 24 file 149.5ck.r19798/1162 K 4 data V 22 dir w.5ck.r19849/25835 K 6 debian V 22 dir 5w.5ck.r19120/2508 K 12 dependencies V 23 dir 2yu.5ck.r19827/4159 K 11 diff_ignore V 22 file qq.5ck.r19346/607 K 3 doc V 22 dir k7.5ck.r19798/3253 K 10 fc_version V 24 file 2lo.5en.r19833/4996 K 2 m4 V 23 dir 12p.5ck.r19758/7805 K 6 manual V 24 dir 2m2.5ck.r19337/14697 K 7 modinst V 23 dir 4pj.5ck.r19847/1439 K 2 po V 24 dir fs.5ck.r19848/177052 K 7 scripts V 23 dir 2yo.5ck.r19781/1192 K 6 server V 22 dir z.5ck.r19849/23173 K 10 stamp-h.in V 19 file 80.0.r1125/241 K 5 tests V 22 dir 2g9.5ck.r15661/767 K 7 utility V 23 dir 1c.5ck.r19849/19065 K 3 vms V 21 dir u9.0.r11105/70719 K 5 win32 V 24 dir 2eu.5bk.r13732/30345 END ENDREP id: 3.5ck.r19849/27377 type: dir pred: 3.5ck.r19848/178593 count: 14641 text: 19849 26068 1296 1296 9a0f12b97e2ba24e1145fb81bccfbd9d props: 19316 5978 270 0 5c0560926331b228de03b640e1c09fc4 cpath: /trunk copyroot: 15280 /trunk PLAIN K 8 branches V 21 dir 1.0.r19845/871789 K 4 tags V 19 dir 2.0.r19568/5509 K 5 trunk V 22 dir 3.5ck.r19849/27377 K 7 website V 18 dir 3ge.0.r12388/0 END ENDREP id: 0.0.r19849/27770 type: dir pred: 0.0.r19848/178987 count: 19849 text: 19849 27605 152 152 150732a9655ae6ecf899f37e555e014e cpath: / copyroot: 0 / 6l2.5ck.t19848-1 modify true false /trunk/data/database.lua 33r.5ck.t19848-1 modify true false /trunk/utility/md5.h 39c.5ck.t19848-1 modify true false /trunk/server/auth.c 33q.5ck.t19848-1 modify true false /trunk/utility/md5.c 27770 27921