Request 298 was acted upon.
_________________________________________________________________________
URL: https://rt.openpkg.org/id/298
Ticket: [OpenPKG #298]
Subject:
Requestors: [EMAIL PROTECTED]
Queue: openpkg
Owner: Nobody
Status: new
Transaction: Ticket creado por ms
Time: Mie. Dic. 03 11:08:25 2003
_________________________________________________________________________
I was able to build tcpwrappers-7.6k-20031021.src.rpm on RedHat 9, but when
I tried to build it on Solaris 9, I got a number of fatal compilation
errors:
Vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
/usr/psr/bin/cc -O2 -pipe -O -DFACILITY=LOG_MAIL -DHOSTS_ACCESS -DPARANOID
-DNETGROUP -DGETPEERNAME_
BUG -DBROKEN_FGETS -DLIBC_CALLS_STRTOK -DDAEMON_UMASK=022
-DREAL_DAEMON_DIR=\"/usr/sbin\" -DPROCESS_OPTIONS -DKILL_IP_OPTIONS
-DSEVERITY=LOG_INFO -DRFC931_TIMEOUT=10
-DHOSTS_DENY=\"/usr/psr/etc/tcpwrappers/hosts.deny\"
-DHOSTS_ALLOW=\"/usr/psr/etc/tcpwrappers/hosts.allow\" -DTLI -DNEED_SETENV
-DALWAYS_HOSTNAME -DTCPD_PRIVATE_NAMESPACE -DDISCARD_SUP_GROUPS -c tli2.c
tli2.c: In function `tcpd_tli_host':
tli2.c:84: error: invalid type argument of `->'
tli2.c:85: error: invalid type argument of `->'
tli2.c:86: error: invalid type argument of `->'
tli2.c:88: error: invalid type argument of `->'
tli2.c:89: error: invalid type argument of `->'
tli2.c:90: error: invalid type argument of `->'
tli2.c: In function `tli_cleanup':
tli2.c:107: error: invalid type argument of `->'
tli2.c:108: error: invalid type argument of `->'
tli2.c:109: error: invalid type argument of `->'
tli2.c:110: error: invalid type argument of `->'
tli2.c: In function `tli_endpoints':
tli2.c:147: error: invalid type argument of `->'
tli2.c:163: error: invalid type argument of `->'
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Looking closer at tli.c, all of its contents are inside an "#ifdef TLI"
conditional. On Linux, TLI is not set, and on Solaris 9 it is (per the
Makefile).
Now when I actually try to compile this, it's hard to believe that anyone
ever succeeded. Line 80 is:
if (request->client->unit != 0) {
"request" is defined as "struct request_info *request", which is in turn
defined in tcpd.h. Here is the definition:
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
/* Structure to describe what we know about a service request. */
struct request_info {
int fd; /* socket handle */
char user[TCPD_STRING_LENGTH]; /* access via eval_user(request) */
char daemon[TCPD_STRING_LENGTH]; /* access via eval_daemon(request)
*/
char pid[12]; /* access via eval_pid(request) */
struct host_info client; /* client endpoint info */
struct host_info server; /* server endpoint info */
void (*sink) (int); /* datagram sink function or 0 */
void (*hostname) (struct host_info *); /* address to printable hostname
*/
void (*hostaddr) (struct host_info *); /* address to printable address
*/
char working_buf[2 * TCPD_STRING_LENGTH]; /* Thread local working
buffer */
void (*cleanup) (struct request_info *); /* TLI cleanup function or 0
*/
struct netconfig *config; /* TLI netdir handle */
};
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Note that "client" is defined as a structure of type host_info, *not* a
structure pointer. Here is the definition of host_info (also in tcpd.h).
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
/* Structure to describe one communications endpoint. */
struct host_info {
char name[NI_MAXHOST]; /* access via eval_hostname(host) */
char addr[INET6_ADDRSTRLEN]; /* access via eval_hostaddr(host) */
tcpd_sockaddr au; /* address union or 0 */
struct request_info *request; /* for shared information */
struct t_unitdata *unit; /* TLI transport address or 0 */
};
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Based on these definitions, line 80 should read:
if (request->client.unit != 0) {
Worse than that, line 82 of tli.c reads:
request->client->sin = &client;
And since there is no element called "sin" in structure host_info, then
changing the "->" to a "." would not fix the problem.
Since tcpd.h is in the same directory as tli.c and is invoked with '#include
"tcpd.h"', and since both request_info and host_info are in this same header
file, it's hard to imagine that the compiler is picking up anything other
than the intended header file; yet, tli.c and tcpd.h don't seem to go
together at all.
Have you OpenPKG folks (or anyone else) compiled this on any system having
System V.4-style TLI support (/usr/include/sys/timod.h, /etc/netconfig, and
the netdir(3) routines)?
Thanks,
Dennis
Dennis McRitchie
Research & Academic Applications Support (RAAS)
Academic Services Department
Office of Information Technology
Princeton University
______________________________________________________________________
The OpenPKG Project www.openpkg.org
Developer Communication List [EMAIL PROTECTED]