--- etc/afpd/unix.c.orig Wed Oct 2 05:26:52 1996 +++ etc/afpd/unix.c Tue Aug 19 11:32:59 1997 @@ -37,14 +37,15 @@ #include #endif __svr4__ -#ifdef __FreeBSD__ +#ifdef BSD4_4 #include #include #define dqb_btimelimit dqb_btime -#endif __FreeBSD__ +#include +#endif BSD4_4 #if !defined( linux ) && !defined( ultrix ) && !defined( __svr4__ ) && \ - !defined( __FreeBSD__ ) + !defined( BSD4_4 ) #include #include #endif linux ultrix __svr4__ @@ -77,24 +78,37 @@ #else ultrix struct statfs sfs; #endif ultrix + u_long multi; if ( statfs( vol->v_path, &sfs ) < 0 ) { return( AFPERR_PARAM ); } - #ifdef ultrix - *bfree = sfs.fd_req.bfreen * 1024; + multi = 1024; + *bfree = sfs.fd_req.bfreen; #else - *bfree = sfs.f_bavail * sfs.f_frsize; + multi = sfs.f_frsize; + *bfree = sfs.f_bavail; #endif ultrix + if ( *bfree > 0x7fffffff / multi ) { + *bfree = 0x7fffffff; + } else { + *bfree *= multi; + } + #ifdef ultrix - *btotal = ( sfs.fd_req.btot - ( sfs.fd_req.bfree - sfs.fd_req.bfreen )) * - 1024; + *btotal = sfs.fd_req.btot - ( sfs.fd_req.bfree - sfs.fd_req.bfreen ); #else ultrix - *btotal = ( sfs.f_blocks - ( sfs.f_bfree - sfs.f_bavail )) * sfs.f_frsize; + *btotal = sfs.f_blocks - ( sfs.f_bfree - sfs.f_bavail ); #endif ultrix + if ( *btotal > 0x7fffffff / multi ) { + *btotal = 0x7fffffff; + } else { + *btotal *= multi; + } + return( AFP_OK ); } @@ -156,7 +170,8 @@ } #else ultrix -#ifdef __FreeBSD__ + +#ifdef BSD4_4 char * special( file ) @@ -170,7 +185,7 @@ return( sfs.f_mntfromname ); } -#else __FreeBSD__ +#else BSD4_4 char * special( file ) @@ -201,7 +216,7 @@ return( NULL ); } -#endif __FreeBSD__ +#endif BSD4_4 #endif ultrix #endif __svr4__ @@ -253,15 +268,15 @@ return( AFPERR_PARAM ); } #else ultrix -#ifdef __FreeBSD__ +#ifdef BSD4_4 if ( quotactl( vol->v_gvs, Q_GETQUOTA, uuid, (char *)dq ) != 0 ) { return( AFPERR_PARAM ); } -#else __FreeBSD__ +#else BSD4_4 if ( quotactl( Q_GETQUOTA, vol->v_gvs, uuid, dq ) != 0 ) { return( AFPERR_PARAM ); } -#endif __FreeBSD__ +#endif BSD4_4 #endif ultrix #endif __svr4__ @@ -306,10 +321,16 @@ syslog( LOG_ERR, "overquota: gettimeofday: %m" ); return( AFPERR_PARAM ); } +#if defined (__NetBSD__) + if ( !dqblk->dqb_btime || dqblk->dqb_btime > tv.tv_sec ) { + return( 0 ); + } +#else if ( !dqblk->dqb_btimelimit || dqblk->dqb_btimelimit > tv.tv_sec ) { return( 0 ); } -#endif ultrix +#endif /* __NetBSD__ */ +#endif /* ultrix */ return( 1 ); } @@ -633,21 +654,25 @@ closedir( dir ); /* - * We cheat: we know that chown doesn't do anything. + * We cheat when we know that chown doesn't do anything. + * Ignore these errors, there are cases where the Mac tries to + * set the group and it's just not possible. */ if ( stat( ".AppleDouble", &st ) < 0 ) { syslog( LOG_ERR, "setdirowner: stat .AppleDouble: %m" ); return( -1 ); } if ( gid && gid != st.st_gid && chown( ".AppleDouble", uid, gid ) < 0 ) { - return( -1 ); + syslog( LOG_DEBUG, "setdirowner: chown %d/%d %s: %m", + uid, gid, ".AppleDouble" ); } if ( stat( ".", &st ) < 0 ) { return( -1 ); } if ( gid && gid != st.st_gid && chown( ".", uid, gid ) < 0 ) { - return( -1 ); + syslog( LOG_DEBUG, "setdirowner: chown %d/%d %s: %m", + uid, gid, "." ); } return( 0 );