Subject: Netatalk for Linux 2.2
From: Egil Kvaleberg (egil@kvaleberg.no)
Date: Fri May 26 2000 - 04:00:26 EDT
This is a quick patch for netatalk-1.4b2 to make it work on Linux 2.2.
The most important fix is to handle broadcasts properly under linux.
A few other minor itches has also been fixed.
Alan Cox did post the basis for the required fix on this list a few years
ago (!), and I've just implemented it.
Please just consider this patch as a very quick hack to get something
working; it needs further work on:
Adding #ifdef linux or other #ifdefs where applicable
Handling bytesex.h gracefully, and in a portable manner
Handling the -lcrypt in the Makefile
Handling the equivalent of TIOCNOTTY under Linux?
Testing, testing
The patch was tested on a i386 Red Hat 6.2 system. I've only tested Linux
server side functions.
Egil
--------------------------CUT HERE-----------------------------
*** etc/afpd/Makefile.orig Fri Sep 27 16:04:07 1996
--- etc/afpd/Makefile Fri May 26 05:03:44 2000
***************
*** 12,16 ****
CFLAGS= ${DEFS} ${AFSDEFS} ${KRBDEFS} ${OPTOPTS} ${INCPATH} \
-DAPPLCNAME -DCRLF # -DDOWNCASE
! LIBS= -latalk ${AFSLIBS} ${KRBLIBS} ${ADDLIBS}
LIBDIRS= -L../../libatalk ${AFSLIBDIRS} ${KRBLIBDIRS}
TAGSFILE= tags
--- 12,17 ----
CFLAGS= ${DEFS} ${AFSDEFS} ${KRBDEFS} ${OPTOPTS} ${INCPATH} \
-DAPPLCNAME -DCRLF # -DDOWNCASE
! # -l crypt required for Linux *EK*
! LIBS= -latalk ${AFSLIBS} ${KRBLIBS} ${ADDLIBS} -lcrypt
LIBDIRS= -L../../libatalk ${AFSLIBDIRS} ${KRBLIBDIRS}
TAGSFILE= tags
*** etc/afpd/auth.c.orig Mon Sep 16 18:33:55 1996
--- etc/afpd/auth.c Fri May 26 05:02:43 2000
***************
*** 4,7 ****
--- 4,13 ----
*/
+ /* required to make crypt() work on Linux */
+ #define _XOPEN_SOURCE
+ typedef unsigned short u_short;
+ typedef unsigned char u_char;
+ #include <unistd.h>
+
#include <stdio.h>
#include <sys/types.h>
*** etc/afpd/unix.c.orig Tue Oct 1 19:26:52 1996
--- etc/afpd/unix.c Fri May 26 05:03:21 2000
***************
*** 416,420 ****
DIR *desk, *sub;
! if ( getwd( wd ) == NULL ) {
return( -1 );
}
--- 416,420 ----
DIR *desk, *sub;
! if ( getcwd( wd ,sizeof(wd) ) == NULL ) {
return( -1 );
}
***************
*** 534,538 ****
DIR *desk, *sub;
! if ( getwd( wd ) == NULL ) {
return( -1 );
}
--- 534,538 ----
DIR *desk, *sub;
! if ( getcwd( wd, sizeof(wd) ) == NULL ) {
return( -1 );
}
*** etc/atalkd/main.c.orig Mon Oct 21 22:45:03 1996
--- etc/atalkd/main.c Fri May 26 06:48:53 2000
***************
*** 1248,1251 ****
--- 1248,1257 ----
sat.sat_port = ap->ap_port;
+ /* for Linux, as Alan Cox told us *EK*/
+ if (sat.sat_addr.s_node == ATADDR_BCAST) {
+ int one = 1;
+ setsockopt(ap->ap_fd, SOL_SOCKET, SO_BROADCAST,&one,sizeof(one));
+ }
+
if ( bind( ap->ap_fd, (struct sockaddr *)&sat,
sizeof( struct sockaddr_at )) < 0 ) {
*** etc/atalkd/zip.c.orig Tue Sep 24 18:57:09 1996
--- etc/atalkd/zip.c Fri May 26 06:48:51 2000
***************
*** 871,874 ****
--- 871,880 ----
sat.sat_port = ap->ap_port;
+ /* for Linux, as Alan Cox told us *EK*/
+ if (sat.sat_addr.s_node == ATADDR_BCAST) {
+ int one = 1;
+ setsockopt(ap->ap_fd, SOL_SOCKET, SO_BROADCAST,&one,sizeof(one));
+ }
+
if ( sendto( ap->ap_fd, packet, data - packet, 0, (struct sockaddr *)&sat,
sizeof( struct sockaddr_at )) < 0 ) {
*** etc/papd/main.c.orig Mon Oct 21 22:45:16 1996
--- etc/papd/main.c Fri May 26 05:05:08 2000
***************
*** 212,216 ****
--- 212,219 ----
}
if (( i = open( "/dev/tty", O_RDWR )) >= 0 ) {
+ #ifdef TIOCNOTTY
+ /*EK* Linux hasn't got it BUG: do we need a replacement? */
(void)ioctl( i, TIOCNOTTY, 0 );
+ #endif
setpgid( 0, getpid());
(void)close( i );
*** include/netatalk/endian.h.orig Mon Oct 21 19:13:36 1996
--- include/netatalk/endian.h Fri May 26 04:59:11 2000
***************
*** 30,34 ****
#ifdef linux
! #include <bytesex.h>
#define BYTE_ORDER __BYTE_ORDER
#include <asm/byteorder.h>
--- 30,36 ----
#ifdef linux
! /* *EK* BUG: find a better way !!! */
! #include "/usr/i386-glibc20-linux/include/bytesex.h"
! /* #include <bytesex.h> */
#define BYTE_ORDER __BYTE_ORDER
#include <asm/byteorder.h>
*** libatalk/nbp/nbp_rgstr.c.orig Wed Sep 18 19:08:35 1996
--- libatalk/nbp/nbp_rgstr.c Fri May 26 06:33:07 2000
***************
*** 54,57 ****
--- 54,63 ----
bcopy( &nt, data, SZ_NBPTUPLE);
data += SZ_NBPTUPLE;
+
+ /* for Linux, as Alan Cox told us *EK*/
+ if (sat->sat_addr.s_node == ATADDR_BCAST) {
+ int one = 1;
+ setsockopt(s, SOL_SOCKET, SO_BROADCAST,&one,sizeof(one));
+ }
if ( obj ) {
--------------------------CUT HERE-----------------------------
-- Email: egil@kvaleberg.no Voice: +47 22523641, 92022780 Fax: +47 22525899 Mail: Egil Kvaleberg, Husebybakken 14A, 0379 Oslo, Norway Home: http://www.kvaleberg.com/
This archive was generated by hypermail 2b28 : Wed Jan 17 2001 - 14:30:48 EST