Subject: Re: problem mounting two servers
From: Thomas Kaiser (Thomas.Kaiser@phg-online.de)
Date: Mon Sep 10 2001 - 17:25:44 EDT
On Mon, 10 Sep 2001 15:31:00 -0400 (EDT), charlie wood wrote:
> First, I checked the hexadecimal host ID on both servers with the command:
> 
> hostid
> 
> ...they were identical, which indicated that I was on to the problem.
I did some quick research:
With AFP 2.2 the FPGetSrvrInfo command has been changed. Now it supports a
serveršs unique identifier: 16 byte ServerSignature ("a 16-byte number that
uniquely identifies the server" -- page 50, AFP Specs Version 2.1/2.2 -->
http://developer.apple.com/techpubs/macos8/pdf/ASAppleTalkFiling2.1_2.2.pdf)
ASun has implemented this in netatalk-1.4b2+asun-2.0a7 (take a look at
<http://www.umich.edu/~rsug/netatalk/archive/admins/1997/0070.html>)
It would be interesting whether afpd creates this Server Signature from
hostid's output, the first entry in the hosts file or from somewhere else?
If I compare the sources of 1.4b2+asun-2.1.3 and 1.5pre7 it seems the
relevant lines in etc/afpd/status.c haven't changed:
|   /* 16-byte signature consists of copies of the hostid */
| #if defined(BSD4_4) && defined(USE_GETHOSTID)
|   mib[0] = CTL_KERN;
|   mib[1] = KERN_HOSTID;
|   len = sizeof(hostid);
|   sysctl(mib, 2, &hostid, &len, NULL, 0);
| #else /* BSD4_4 && USE_GETHOSTID */
|   hostid = gethostid();
| #endif /* BSD4_4 && USE_GETHOSTID */
|   if (!hostid) {
|     if (dsi)
|       hostid = dsi->server.sin_addr.s_addr;
|     else {
|       struct hostent *host;
|       
|       if ((host = gethostbyname(hostname)))
|         hostid = ((struct in_addr *) host->h_addr)->s_addr;
|     }
|   }
| 
|   /* it turns out that a server signature screws up separate
|    * servers running on the same machine. to work around that,
|    * i add in an increment */
|   hostid += id;
|   id++;
|   for (i = 0; i < 16; i += sizeof(hostid)) {
|     memcpy(data, &hostid, sizeof(hostid));
|     data += sizeof(hostid);
|   }
I'm not a programmer, so I'm not sure, when hostid will be used and when
'gethostbyname'. Any help appreceated.
Regards,
Thomas
This archive was generated by hypermail 2b28 : Sun Oct 14 2001 - 03:04:52 EDT