Subject: klpr compilation error (was: Re: cc: Internal compiler error)
To: None <current-users@NetBSD.ORG,>
From: Christopher J Mason <cmason+@CMU.EDU>
List: current-users
Date: 11/20/1996 22:43:52
[If there is a more appropriate list ( for
this, let me know and I'll stop bothering current-users]

I want to thank the three people in the CC line above for their help. 
The following fixed my problems so far:

Excerpts from mail: 20-Nov-96 Re: cc: Internal compiler e.. by Mike 
> Add
> #include <sys/types.h>
> #include <sys/cdefs.h>
> after the '#ifndef SOLARIS' line.  There is a bug here; <sys/exec.h>
> should #include <sys/cdefs.h> for itself.

Excerpts from mail: 20-Nov-96 Re: cc: Internal compiler e.. by David 
>         one option is to
>         try compiling it _with_ optimisation (Sometimes, just sometimes
>         something will compile with optimisation that won't, though its
>         usually the other way around :)

However, now I'm getting:

gcc -g  -I/usr/local/include -I/quota -I./quota
-I/usr/include/kerberosIV  -I/usr/X11R6/include  -DCSRG_BASED    -DVFS
-DKERBEROS -DZEPHYR -DANDREW -DLACL -Iquota  -O -o klpd psutil.o lpd.o
lpdchar.o printjob.o recvjob.o    tcp_conn.o displayq.o rmjob.o common.o
printcap.o ms.o modes.o  secure.o admin.o        ossupport.o cmds.o
cmdtab.o startdaemon.o tools.o genid.o        -L/usr/local/lib -lzephyr
-lacl -lkafs -lcom_err -lkrb -ldes  
recvjob.c:899: Undefined symbol `__validuser' referenced from text segment
*** Error code 1

I've spent too much time on this already to just give up.  I'm doubtful
now that it'll work but I want to try to get it to atleast compile.  If
I do get it to compile and it doesn't work I'm afraid I will have to
give up because 

Here's the offending bit of code.  I have no idea what it's doing (or
trying to do):

char *
    register char *cp, *sp;
    extern char from_host[];
    register FILE *hostf;
    char ahost[MAXHOSTNAMELEN];
    int baselen = -1;

    if(!strcasecmp(from_host, host)) return NULL;
#if 0
    syslog(LOG_DEBUG, "About to check on %s\n", from_host);
    sp = from_host;
    cp = ahost;
    while (*sp) {
        if (*sp == '.') {
            if (baselen == -1)
                baselen = sp - from_host;
            *cp++ = *sp++;
        } else {
            *cp++ = isupper(*sp) ? tolower(*sp++) : *sp++;
    *cp = '\0';
    hostf = fopen("/etc/hosts.lpd", "r");
#define DUMMY ":nobody::"
    if (hostf) {
        if (!_validuser(hostf, ahost, DUMMY, DUMMY, baselen)) {
    //       ^^^^^^^^^^
            (void) fclose(hostf);
            return NULL;
        (void) fclose(hostf);
        return "\4";
    } else {
        /* Could not open hosts.lpd file */
        return NULL;

Someone on a linux box did:

Excerpts from mail: 20-Nov-96 Re: klpr compilation... by Christofer D Chiappa 
> <griffon>:KeyserSoze-ttyp6:[32]~/lsrc/klpr/src$ nm -o /usr/lib/*.a |
> grep validuser
> /usr/lib/libc.a:rcmd.o:000007a0 T _validuser
> /usr/lib/libc_p.a:rcmd.o:000006f4 T _validuser
> /usr/lib/libg.a:rcmd.o:000006d4 T _validuser
> <griffon>:KeyserSoze-ttyp6:[33]~/lsrc/klpr/src$

I can find this in src/lib/libc/net/rcmd.c:

__ivaliduser(hostf, raddr, luser, ruser)
	FILE *hostf;
	u_int32_t raddr;
	const char *luser, *ruser;

Any suggestions??


|Chris Mason - |
|"You can always count on a murderer for a fancy prose style."-Nabokov|