static void add_new_directory(char *name, char *path, 
                unsigned long uid, unsigned long gid, unsigned long mode)
 {
-       mkdir(path,mode);
+       mkdir(path, mode);
+       chown(path, uid, gid);
 //     printf("Directory: %s %s  UID: %ld  GID %ld  MODE: %ld\n", path, name, uid, gid, mode);
 }
 
        }
 
        mknod(name, mode, rdev);
+       chown(path, uid, gid);
 //     printf("Device: %s %s  UID: %ld  GID: %ld  MODE: %ld  MAJOR: %d  MINOR: %d\n",
 //                     path, name, uid, gid, mode, (short)(rdev >> 8), (short)(rdev & 0xff));
 }
                                  unsigned long gid, unsigned long mode)
 {
        int fd = open(path,O_CREAT | O_WRONLY, mode);
-       if(fd<0)
-       { 
+       if (fd < 0) { 
                error_msg_and_die("%s: file can not be created!", path);
        } else {
                close(fd);
        } 
+       chmod(path, mode);
+       chown(path, uid, gid);
+//     printf("File: %s %s  UID: %ld  GID: %ld  MODE: %ld\n",
+//                     path, name, gid, uid, mode);
+}
+
+
+static void add_new_fifo(char *name, char *path, unsigned long uid,
+                                 unsigned long gid, unsigned long mode)
+{
+       if (mknod(path, mode, 0))
+               error_msg_and_die("%s: file can not be created with mknod!", path);
+       chown(path, uid, gid);
 //     printf("File: %s %s  UID: %ld  GID: %ld  MODE: %ld\n",
 //                     path, name, gid, uid, mode);
 }
                break;
        case 'p':
                mode |= S_IFIFO;
-               add_new_file(name, path, uid, gid, mode);
+               add_new_fifo(name, path, uid, gid, mode);
                break;
        case 'c':
        case 'b':