/*
- * $Id: filedir.c,v 1.57 2009-10-14 15:04:01 franklahm Exp $
+ * $Id: filedir.c,v 1.64 2009-10-29 13:38:15 didg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
-#include <dirent.h>
#include <errno.h>
#include <sys/param.h>
#include <atalk/util.h>
#include <atalk/cnid.h>
#include <atalk/logger.h>
+#include <atalk/unix.h>
#include "directory.h"
#include "desktop.h"
uid_t uid;
int ret = AFP_OK;
#ifdef DEBUG
- LOG(log_info, logtype_afpd, "begin matchfile2dirperms:");
-#endif /* DEBUG */
+ LOG(log_debug9, logtype_afpd, "begin matchfile2dirperms:");
+#endif
if (stat(upath, &st ) < 0) {
LOG(log_error, logtype_afpd, "Could not stat %s: %s", upath, strerror(errno));
} /* end else if stat success */
#ifdef DEBUG
- LOG(log_info, logtype_afpd, "end matchfile2dirperms:");
-#endif /* DEBUG */
+ LOG(log_debug9, logtype_afpd, "end matchfile2dirperms:");
+#endif
return ret;
}
#endif
-int afp_getfildirparams(AFPObj *obj _U_, char *ibuf, int ibuflen _U_, char *rbuf, int *rbuflen)
+int afp_getfildirparams(AFPObj *obj _U_, char *ibuf, size_t ibuflen _U_, char *rbuf, size_t *rbuflen)
{
struct stat *st;
struct vol *vol;
struct dir *dir;
u_int32_t did;
- int buflen, ret;
+ int ret;
+ size_t buflen;
u_int16_t fbitmap, dbitmap, vid;
struct path *s_path;
-#ifdef DEBUG
- LOG(log_info, logtype_afpd, "begin afp_getfildirparams:");
-#endif /* DEBUG */
-
*rbuflen = 0;
ibuf += 2;
rbuf += sizeof( dbitmap ) + sizeof( u_char );
*rbuf = 0;
-#ifdef DEBUG
- LOG(log_info, logtype_afpd, "end afp_getfildirparams:");
-#endif /* DEBUG */
-
return( AFP_OK );
}
-int afp_setfildirparams(AFPObj *obj, char *ibuf, int ibuflen _U_, char *rbuf _U_, int *rbuflen)
+int afp_setfildirparams(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf _U_, size_t *rbuflen)
{
struct stat *st;
struct vol *vol;
u_int16_t vid, bitmap;
int did, rc;
-#ifdef DEBUG
- LOG(log_info, logtype_afpd, "begin afp_setfildirparams:");
-#endif /* DEBUG */
-
*rbuflen = 0;
ibuf += 2;
memcpy( &vid, ibuf, sizeof(vid));
setvoltime(obj, vol );
}
-#ifdef DEBUG
- LOG(log_info, logtype_afpd, "end afp_setfildirparams:");
-#endif /* DEBUG */
-
return( rc );
}
}
/* -------------------------------------------- */
-int afp_rename(AFPObj *obj, char *ibuf, int ibuflen _U_, char *rbuf _U_, int *rbuflen)
+int afp_rename(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf _U_, size_t *rbuflen)
{
struct vol *vol;
struct dir *sdir;
u_int16_t vid;
int isdir = 0;
int rc;
-#ifdef DEBUG
- LOG(log_info, logtype_afpd, "begin afp_rename:");
-#endif /* DEBUG */
*rbuflen = 0;
ibuf += 2;
setvoltime(obj, vol );
}
-#ifdef DEBUG
- LOG(log_info, logtype_afpd, "end afp_rename:");
-#endif /* DEBUG */
-
return( rc );
}
/* ------------------------------- */
-int afp_delete(AFPObj *obj, char *ibuf, int ibuflen _U_, char *rbuf _U_, int *rbuflen)
+int afp_delete(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf _U_, size_t *rbuflen)
{
struct vol *vol;
struct dir *dir;
int did, rc;
u_int16_t vid;
-#ifdef DEBUG
- LOG(log_info, logtype_afpd, "begin afp_delete:");
-#endif /* DEBUG */
-
*rbuflen = 0;
ibuf += 2;
} else if (of_findname(s_path)) {
rc = AFPERR_BUSY;
} else {
- rc = deletefile(vol, upath, 1);
+ /* it's a file st_valid should always be true
+ * only test for ENOENT because EACCES needs
+ * to read meta data in deletefile
+ */
+ if (s_path->st_valid && s_path->st_errno == ENOENT) {
+ rc = AFPERR_NOOBJ;
+ }
+ else {
+ rc = deletefile(vol, upath, 1);
+ }
}
if ( rc == AFP_OK ) {
curdir->offcnt--;
setvoltime(obj, vol );
}
-#ifdef DEBUG
- LOG(log_info, logtype_afpd, "end afp_delete:");
-#endif /* DEBUG */
-
return( rc );
}
/* ------------------------ */
}
/* ------------------------- */
-int afp_moveandrename(AFPObj *obj, char *ibuf, int ibuflen _U_, char *rbuf _U_, int *rbuflen)
+int afp_moveandrename(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf _U_, size_t *rbuflen)
{
struct vol *vol;
struct dir *sdir, *ddir;
int retvalue;
#endif /* DROPKLUDGE */
-#ifdef DEBUG
- LOG(log_info, logtype_afpd, "begin afp_moveandrename:");
-#endif /* DEBUG */
-
*rbuflen = 0;
ibuf += 2;
setvoltime(obj, vol );
}
-#ifdef DEBUG
- LOG(log_info, logtype_afpd, "end afp_moveandrename:");
-#endif /* DEBUG */
-
return( rc );
}