<chapter id="Portability"> <chapterinfo> <author> <firstname>Jelmer</firstname><surname>Vernooij</surname> </author> </chapterinfo> <title>Portability</title> <para>Samba works on a wide range of platforms but the interface all the platforms provide is not always compatible. This chapter contains platform-specific information about compiling and using samba.</para> <sect1> <title>HPUX</title> <para> HP's implementation of supplementary groups is, er, non-standard (for hysterical reasons). There are two group files, /etc/group and /etc/logingroup; the system maps UIDs to numbers using the former, but initgroups() reads the latter. Most system admins who know the ropes symlink /etc/group to /etc/logingroup (hard link doesn't work for reasons too stupid to go into here). initgroups() will complain if one of the groups you're in in /etc/logingroup has what it considers to be an invalid ID, which means outside the range [0..UID_MAX], where UID_MAX is (I think) 60000 currently on HP-UX. This precludes -2 and 65534, the usual 'nobody' GIDs. </para> <para> If you encounter this problem, make sure that the programs that are failing to initgroups() be run as users not in any groups with GIDs outside the allowed range. </para> <para>This is documented in the HP manual pages under setgroups(2) and passwd(4). </para> </sect1> <sect1> <title>SCO Unix</title> <para> If you run an old version of SCO Unix then you may need to get important TCP/IP patches for Samba to work correctly. Without the patch, you may encounter corrupt data transfers using samba. </para> <para> The patch you need is UOD385 Connection Drivers SLS. It is available from SCO (ftp.sco.com, directory SLS, files uod385a.Z and uod385a.ltr.Z). </para> </sect1> <sect1> <title>DNIX</title> <para> DNIX has a problem with seteuid() and setegid(). These routines are needed for Samba to work correctly, but they were left out of the DNIX C library for some reason. </para> <para> For this reason Samba by default defines the macro NO_EID in the DNIX section of includes.h. This works around the problem in a limited way, but it is far from ideal, some things still won't work right. </para> <para> To fix the problem properly you need to assemble the following two functions and then either add them to your C library or link them into Samba. </para> <para> put this in the file <filename>setegid.s</filename>: </para> <para><programlisting> .globl _setegid _setegid: moveq #47,d0 movl #100,a0 moveq #1,d1 movl 4(sp),a1 trap #9 bccs 1$ jmp cerror 1$: clrl d0 rts </programlisting></para> <para> put this in the file <filename>seteuid.s</filename>: </para> <para><programlisting> .globl _seteuid _seteuid: moveq #47,d0 movl #100,a0 moveq #0,d1 movl 4(sp),a1 trap #9 bccs 1$ jmp cerror 1$: clrl d0 rts </programlisting></para> <para> after creating the above files you then assemble them using </para> <para><command>as seteuid.s</command></para> <para><command>as setegid.s</command></para> <para> that should produce the files <filename>seteuid.o</filename> and <filename>setegid.o</filename> </para> <para> then you need to add these to the LIBSM line in the DNIX section of the Samba Makefile. Your LIBSM line will then look something like this: </para> <para><programlisting> LIBSM = setegid.o seteuid.o -ln </programlisting></para> <para> You should then remove the line: </para> <para><programlisting> #define NO_EID </programlisting></para> <para>from the DNIX section of <filename>includes.h</filename></para> </sect1> </chapter>