/*
- * $Id: afs.c,v 1.11 2002-08-29 18:57:26 didg Exp $
+ * $Id: afs.c,v 1.18 2009-10-15 10:43:13 didg Exp $
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
*/
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif /* HAVE_UNISTD_H */
+#include <sys/stat.h>
#include "globals.h"
#include "directory.h"
#include "volume.h"
#include "misc.h"
+#include "unix.h"
-afs_getvolspace( vol, bfree, btotal, bsize )
+int afs_getvolspace( vol, bfree, btotal, bsize )
struct vol *vol;
VolSpace *bfree, *btotal;
-u_int32_t *bsize;
+uint32_t *bsize;
{
struct ViceIoctl vi;
struct VolumeStatus *vs;
if ( vs->PartBlocksAvail > 0 ) {
if ( vs->MaxQuota != 0 ) {
+#ifdef min
+#undef min
+#endif
#define min(x,y) (((x)<(y))?(x):(y))
free = min( vs->MaxQuota - vs->BlocksInUse, vs->PartBlocksAvail );
} else {
return( AFP_OK );
}
-afp_getdiracl(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj *obj;
-char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+int afp_getdiracl(AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen)
{
struct ViceIoctl vi;
struct vol *vol;
struct dir *dir;
- char *path;
- u_int32_t did;
- u_int16_t vid;
+ struct path *path;
+ uint32_t did;
+ uint16_t vid;
ibuf += 2;
memcpy( &vid, ibuf, sizeof( vid ));
memcpy( &did, ibuf, sizeof( did ));
ibuf += sizeof( int );
- if (( dir = dirsearch( vol, did )) == NULL ) {
+ if (( dir = dirlookup( vol, did )) == NULL ) {
*rbuflen = 0;
- return( AFPERR_NOOBJ );
+ return afp_errno;
}
if (( path = cname( vol, dir, &ibuf )) == NULL ) {
*rbuflen = 0;
- return( AFPERR_NOOBJ );
+ return get_afp_errno(AFPERR_PARAM);
}
- if ( *path != '\0' ) {
+ if ( *path->m_name != '\0' ) {
*rbuflen = 0;
- return( AFPERR_BITMAP );
+ return (path_isadir( path))? afp_errno: AFPERR_BITMAP;
}
vi.in_size = 0;
#undef accessmode
#endif
-afsmode( path, ma, dir, st )
+void afsmode( vol, path, ma, dir, st )
+const struct volume *vol;
char *path;
struct maccess *ma;
struct dir *dir;
return;
}
- accessmode( path, &ma, dir, st );
+ accessmode(vol, path, ma, dir, st );
return;
}
/*
* cmd | 0 | vid | did | pathtype | pathname | 0 | acl
*/
-afp_setdiracl(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj *obj;
-char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+int afp_setdiracl(AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen)
{
struct ViceIoctl vi;
struct vol *vol;
struct dir *dir;
- char *path, *iend;
- u_int32_t did;
- u_int16_t vid;
+ char *iend;
+ struct path *path;
+ uint32_t did;
+ uint16_t vid;
*rbuflen = 0;
iend = ibuf + ibuflen;
memcpy( &did, ibuf, sizeof( did ));
ibuf += sizeof( int );
- if (( dir = dirsearch( vol, did )) == NULL ) {
+ if (( dir = dirlookup( vol, did )) == NULL ) {
*rbuflen = 0;
- return( AFPERR_NOOBJ );
+ return afp_errno;
}
if (( path = cname( vol, dir, &ibuf )) == NULL ) {
*rbuflen = 0;
- return( AFPERR_NOOBJ );
+ return get_afp_errno(AFPERR_PARAM);
}
- if ( *path != '\0' ) {
+ if ( *path->m_name != '\0' ) {
*rbuflen = 0;
- return( AFPERR_BITMAP );
+ return (path_isadir( path))? afp_errno: AFPERR_BITMAP;
}
if ((int)ibuf & 1 ) {
extern C_Block seskey;
extern Key_schedule seskeysched;
-afp_afschangepw(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj *obj;
-char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+int afp_afschangepw(AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen)
{
char name[ MAXKTCNAMELEN ], instance[ MAXKTCNAMELEN ];
char realm[ MAXKTCREALMLEN ];
char oldpw[ 9 ], newpw[ 9 ];
int len, rc;
- u_int16_t clen;
+ uint16_t clen;
struct ktc_encryptionKey oldkey, newkey;
struct ktc_token adtok;
struct ubik_client *conn;