*bsize = sfs.f_frsize;
#endif ultrix
+#if FORCE_2GB
+ // if the volume is over 2GB in size, report
+ // the size as 2GB.
+ // this doesn't seem to work correctly for
+ // 64 bit size descriptors.
if ( *bfree > 0x7fffffff / *bsize ) {
*bfree = 0x7fffffff;
} else {
*bfree *= *bsize;
}
+#endif
#ifdef ultrix
*btotal = (VolSpace)
*btotal = (VolSpace)
( sfs.f_blocks - ( sfs.f_bfree - sfs.f_bavail )) * sfs.f_frsize;
#endif ultrix
+
+#if FORCE_2GB
+ // see similar block above comments
if ( *bfree > 0x7fffffff / *bsize ) {
*bfree = 0x7fffffff;
} else {
*bfree *= *bsize;
}
+#endif
+
return( AFP_OK );
}
ma->ma_owner = utombits( mode );
-#ifdef ADMIN_GRP
- if ( uuid == 0 )
- ma->ma_user = AR_UWRITE | AR_UREAD | AR_USEARCH | AR_UOWN;
- else
-#endif
-
- if ( uuid == stat->st_uid ) {
+ if ( (uuid == stat->st_uid) || (uuid == 0)) {
ma->ma_user = ma->ma_owner | AR_UOWN;
} else if ( gmem( stat->st_gid )) {
ma->ma_user = ma->ma_group;
seteuid(0);
if ( retval=chmod( name, (DIRBITS | mode | S_ISVTX)) < 0)
{
- syslog( LOG_ERR, "stickydirmode::setdirmode error: chmod %s: %m", name );
- return(-1);
+ syslog( LOG_ERR, "stickydirmode: chmod %s: %m", name );
+ return(AFP_ACCESS);
}
else
{
- syslog( LOG_DEBUG, "stickydirmode::setdirmode: chmod %s: %m", name );
+ syslog( LOG_DEBUG, "stickydirmode: chmod \"%s\": %m", name );
seteuid(uid);
}
}
else
#endif DROPKLUDGE
if ( retval=chmod( name, DIRBITS | mode ) < 0 )
- syslog( LOG_DEBUG, "stickydirmode::setdirmode: chmod %s: %m", name );
+ syslog( LOG_DEBUG, "stickydirmode: chmod \"%s\": %m", name );
return retval;
}
if (S_ISREG(st.st_mode)) {
/* XXX: need to preserve special modes */
if (S_ISDIR(st.st_mode)) {
- stickydirmode(dirp->d_name, DIRBITS | mode);
- } else
- stickydirmode(dirp->d_name, mode);
+ if (stickydirmode(dirp->d_name, DIRBITS | mode) < 0)
+ return (-1);
+ } else if (stickydirmode(dirp->d_name, mode) < 0)
+ return (-1);
}
}
closedir( dir );