]> arthur.barton.de Git - netatalk.git/blobdiff - etc/afpd/directory.c
Remove TimeMachine volume used size FCE event
[netatalk.git] / etc / afpd / directory.c
index 0c7f62723dbf9330a46f0c54e944fcc9de7f3804..ed40a26a7faf5e330ea8739386e33979e02de26f 100644 (file)
@@ -1881,9 +1881,12 @@ int setdirparams(struct vol *vol, struct path *path, uint16_t d_bitmap, char *bu
         case DIRPBIT_FINFO :
             if (isad) {
                 /* Fixes #2802236 */
-                uint16_t *fflags = (uint16_t *)(finder_buf + FINDERINFO_FRFLAGOFF);
-                *fflags &= htons(~FINDERINFO_ISHARED);
+                uint16_t fflags;
+                memcpy(&fflags, finder_buf + FINDERINFO_FRFLAGOFF, sizeof(uint16_t));
+                fflags &= htons(~FINDERINFO_ISHARED);
+                memcpy(finder_buf + FINDERINFO_FRFLAGOFF, &fflags, sizeof(uint16_t));
                 /* #2802236 end */
+
                 if (  dir->d_did == DIRDID_ROOT ) {
                     /*
                      * Alright, we admit it, this is *really* sick!
@@ -1902,7 +1905,7 @@ int setdirparams(struct vol *vol, struct path *path, uint16_t d_bitmap, char *bu
             break;
         case DIRPBIT_UID :  /* What kind of loser mounts as root? */
             if ( (dir->d_did == DIRDID_ROOT) &&
-                 (setdeskowner( ntohl(owner), -1 ) < 0)) {
+                 (setdeskowner(vol, ntohl(owner), -1 ) < 0)) {
                 err = set_dir_errors(path, "setdeskowner", errno);
                 if (isad && err == AFPERR_PARAM) {
                     err = AFP_OK; /* ???*/
@@ -1918,7 +1921,7 @@ int setdirparams(struct vol *vol, struct path *path, uint16_t d_bitmap, char *bu
             break;
         case DIRPBIT_GID :
             if (dir->d_did == DIRDID_ROOT)
-                setdeskowner( -1, ntohl(group) );
+                setdeskowner(vol, -1, ntohl(group) );
             if ( setdirowner(vol, upath, -1, ntohl(group) ) < 0 ) {
                 err = set_dir_errors(path, "setdirowner", errno);
                 goto setdirparam_done;
@@ -1982,7 +1985,7 @@ setdirparam_done:
     if (err == AFP_OK) {
         if (set_maccess == true) {
             if (dir->d_did == DIRDID_ROOT) {
-                setdeskmode(mpriv);
+                setdeskmode(vol, mpriv);
                 if (!dir_rx_set(mpriv)) {
                     /* we can't remove read and search for owner on volume root */
                     err = AFPERR_ACCESS;
@@ -2002,8 +2005,8 @@ setdirparam_done:
                     err = AFPERR_ACCESS;
                     goto setprivdone;
                 }
-                setdeskowner(-1, ntohl(group));
-                setdeskmode(upriv);
+                setdeskowner(vol, -1, ntohl(group));
+                setdeskmode(vol, upriv);
             }
 
             if (setdirowner(vol, upath, -1, ntohl(group)) < 0) {