]> arthur.barton.de Git - netatalk.git/blobdiff - etc/afpd/file.c
sys/syslog.h -> syslog.h
[netatalk.git] / etc / afpd / file.c
index b37e781cab45fed0160d5466ee93289900f4b341..48566a22a84be2590beea2fcfff25b0586969015 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: file.c,v 1.29.2.2 2002-01-02 17:23:56 srittau Exp $
+ * $Id: file.c,v 1.29.2.8 2002-03-12 15:09:20 srittau Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
@@ -37,8 +37,8 @@ char *strchr (), *strrchr ();
 #include <dirent.h>
 #include <sys/mman.h>
 #include <errno.h>
+#include <syslog.h>
 
-#include <sys/syslog.h>
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/param.h>
@@ -89,11 +89,11 @@ char *strchr (), *strrchr ();
  */
 
 const u_char ufinderi[] = {
-    'T', 'E', 'X', 'T', 'U', 'N', 'I', 'X',
-    0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0
-};
+                              'T', 'E', 'X', 'T', 'U', 'N', 'I', 'X',
+                              0, 0, 0, 0, 0, 0, 0, 0,
+                              0, 0, 0, 0, 0, 0, 0, 0,
+                              0, 0, 0, 0, 0, 0, 0, 0
+                          };
 
 int getfilparams(struct vol *vol,
                  u_int16_t bitmap,
@@ -224,6 +224,19 @@ int getfilparams(struct vol *vol,
 #ifdef CNID_DB
             aint = cnid_add(vol->v_db, st, dir->d_did, upath,
                             strlen(upath), aint);
+            /* Throw errors if cnid_add fails. */
+            if (aint == CNID_INVALID) {
+                switch (errno) {
+                case CNID_ERR_PARAM:
+                    syslog(LOG_ERR, "getfilparams: Incorrect parameters passed to cnid_add");
+                    return(AFPERR_PARAM);
+                case CNID_ERR_PATH:
+                    return(AFPERR_PARAM);
+                case CNID_ERR_DB:
+                case CNID_ERR_MAX:
+                    return(AFPERR_MISC);
+                }
+            }
 #endif /* CNID_DB */
 
             if (aint == 0) {
@@ -409,8 +422,7 @@ int         ibuflen, *rbuflen;
         return( AFPERR_NOOBJ );
     }
 
-    if ((vol->v_flags & AFPVOL_MSWINDOWS) &&
-            strpbrk(path, MSWINDOWS_BADCHARS))
+    if (!wincheck(vol, path))
         return AFPERR_PARAM;
 
     upath = mtoupath(vol, path);
@@ -1355,7 +1367,7 @@ int               ibuflen, *rbuflen;
     }
 #endif /* AD_VERSION > AD_VERSION1 */
 
-    if (id = cnid_add(vol->v_db, &st, did, upath, len, id)) {
+    if (id = cnid_add(vol->v_db, &st, did, upath, len, id) != CNID_INVALID) {
         memcpy(rbuf, &id, sizeof(id));
         *rbuflen = sizeof(id);
         return AFP_OK;
@@ -1374,7 +1386,7 @@ int               ibuflen, *rbuflen;
         return AFPERR_ACCESS;
         break;
     default:
-        syslog(LOG_ERR, "afp_createid: cnid_add: %m");
+        syslog(LOG_ERR, "afp_createid: cnid_add: %s", strerror(errno));
         return AFPERR_PARAM;
     }
 }
@@ -1462,6 +1474,7 @@ int               ibuflen, *rbuflen;
     char                *upath;
     int                 err;
     cnid_t             id;
+    cnid_t             fileid;
     u_short            vid;
 
 #ifdef DEBUG
@@ -1483,7 +1496,8 @@ int               ibuflen, *rbuflen;
 
     memcpy(&id, ibuf, sizeof( id ));
     ibuf += sizeof(id);
-
+    fileid = id;
+    
     if ((upath = cnid_resolve(vol->v_db, &id)) == NULL) {
         return AFPERR_NOID;
     }
@@ -1511,7 +1525,7 @@ int               ibuflen, *rbuflen;
     if (S_ISDIR(st.st_mode))
         return AFPERR_BADTYPE;
 
-    if (cnid_delete(vol->v_db, id)) {
+    if (cnid_delete(vol->v_db, fileid)) {
         switch (errno) {
         case EROFS:
             return AFPERR_VLOCK;
@@ -1680,7 +1694,7 @@ int               ibuflen, *rbuflen;
         case EPERM:
         case EACCES:
             err = AFPERR_ACCESS;
-                       break;
+            break;
         default:
             err = AFPERR_PARAM;
         }
@@ -1693,7 +1707,7 @@ int               ibuflen, *rbuflen;
         case EPERM:
         case EACCES:
             err = AFPERR_ACCESS;
-                       break;
+            break;
         default:
             err = AFPERR_PARAM;
         }