diff options
-rw-r--r-- | filesystems/fuse-chironfs/Makefile | 7 | ||||
-rw-r--r-- | filesystems/fuse-chironfs/PLIST | 10 | ||||
-rw-r--r-- | filesystems/fuse-chironfs/distinfo | 13 | ||||
-rw-r--r-- | filesystems/fuse-chironfs/patches/patch-aa | 13 | ||||
-rw-r--r-- | filesystems/fuse-chironfs/patches/patch-ab | 82 | ||||
-rw-r--r-- | filesystems/fuse-chironfs/patches/patch-ac | 75 | ||||
-rw-r--r-- | filesystems/fuse-chironfs/patches/patch-ad | 12 | ||||
-rw-r--r-- | filesystems/fuse-chironfs/patches/patch-ae | 409 |
8 files changed, 426 insertions, 195 deletions
diff --git a/filesystems/fuse-chironfs/Makefile b/filesystems/fuse-chironfs/Makefile index b0c9e3eaca5..f46ed4f589a 100644 --- a/filesystems/fuse-chironfs/Makefile +++ b/filesystems/fuse-chironfs/Makefile @@ -1,8 +1,9 @@ -# $NetBSD: Makefile,v 1.1.1.1 2007/11/27 18:55:40 pooka Exp $ +# $NetBSD: Makefile,v 1.2 2009/04/09 03:33:12 manu Exp $ # -DISTNAME= chironfs-1.0-RC9 -PKGNAME= fuse-chironfs-1.0RC9 +DISTNAME= chironfs-1.1.1 +PKGNAME= fuse-chironfs-1.1.1 +PKGREVISION= 1 CATEGORIES= filesystems MASTER_SITES= http://chironfs.googlecode.com/files/ diff --git a/filesystems/fuse-chironfs/PLIST b/filesystems/fuse-chironfs/PLIST index e6d6cd42b2c..b39594151c5 100644 --- a/filesystems/fuse-chironfs/PLIST +++ b/filesystems/fuse-chironfs/PLIST @@ -1,5 +1,6 @@ -@comment $NetBSD: PLIST,v 1.1.1.1 2007/11/27 18:55:40 pooka Exp $ +@comment $NetBSD: PLIST,v 1.2 2009/04/09 03:33:12 manu Exp $ bin/chironfs +bin/chirctl man/man8/chironfs.8 share/doc/chironfs/README share/doc/chironfs/AUTHORS @@ -7,6 +8,11 @@ share/doc/chironfs/changelog.Debian share/doc/chironfs/HOWTO.html share/doc/chironfs/NEWS share/doc/chironfs/TODO -share/doc/chironfs/ChangeLog share/doc/chironfs/copyright +share/doc/chironfs/changelog +share/doc/chironfs/chironfs.css +share/doc/chironfs/large.gif +share/doc/chironfs/med.gif +share/doc/chironfs/small.gif + @dirrm share/doc/chironfs diff --git a/filesystems/fuse-chironfs/distinfo b/filesystems/fuse-chironfs/distinfo index 5615e802216..6b5e785bac7 100644 --- a/filesystems/fuse-chironfs/distinfo +++ b/filesystems/fuse-chironfs/distinfo @@ -1,9 +1,6 @@ -$NetBSD: distinfo,v 1.1.1.1 2007/11/27 18:55:40 pooka Exp $ +$NetBSD: distinfo,v 1.2 2009/04/09 03:33:12 manu Exp $ -SHA1 (chironfs-1.0-RC9.tar.gz) = a7f703afb8bc9d2a1dcdd833fa17c6358b4225f9 -RMD160 (chironfs-1.0-RC9.tar.gz) = d6962e5af8b530080ec04191e33aaee433154c01 -Size (chironfs-1.0-RC9.tar.gz) = 398831 bytes -SHA1 (patch-aa) = bcabe1a6b4841ad93b53c031c2f75c1bd4968270 -SHA1 (patch-ab) = 30dface656c86e5e883a2b99fa7fb570fb932611 -SHA1 (patch-ac) = 316d880066d9a3dc482edcd034dd754073011d21 -SHA1 (patch-ad) = 681867b573d4a5e60fe283be8170294112695994 +SHA1 (chironfs-1.1.1.tar.gz) = cc92d8ed39a1594da0422408daf080681efe7ba5 +RMD160 (chironfs-1.1.1.tar.gz) = 29cc8fb3aac8148d3238a6b79bb002d7f8aad826 +Size (chironfs-1.1.1.tar.gz) = 444036 bytes +SHA1 (patch-ae) = a4112ec0162a39ce67c897de5177890f5a157f04 diff --git a/filesystems/fuse-chironfs/patches/patch-aa b/filesystems/fuse-chironfs/patches/patch-aa deleted file mode 100644 index faa5f70ba3f..00000000000 --- a/filesystems/fuse-chironfs/patches/patch-aa +++ /dev/null @@ -1,13 +0,0 @@ -$NetBSD: patch-aa,v 1.1.1.1 2007/11/27 18:55:40 pooka Exp $ - ---- src/Makefile.in.orig 2007-10-23 06:25:06.000000000 +0200 -+++ src/Makefile.in 2007-11-27 19:04:11.000000000 +0100 -@@ -146,7 +146,7 @@ - top_srcdir = @top_srcdir@ - AM_CFLAGS = $(all_includes) -Wall -W -Wmissing-prototypes -g -O2 -DFUSE_USE_VERSION=25 -D_FILE_OFFSET_BITS=64 - chironfs_SOURCES = chironfs.c chiron-conf.c chironfs.h --chironfs_LDFLAGS = -L/usr/local/lib -lfuse -ldl -lm -+chironfs_LDFLAGS = -L/usr/local/lib -lfuse -lm - chironfs_OBJS = chironfs.o chiron-conf.o - all: all-am - diff --git a/filesystems/fuse-chironfs/patches/patch-ab b/filesystems/fuse-chironfs/patches/patch-ab deleted file mode 100644 index 9777561733b..00000000000 --- a/filesystems/fuse-chironfs/patches/patch-ab +++ /dev/null @@ -1,82 +0,0 @@ -$NetBSD: patch-ab,v 1.1.1.1 2007/11/27 18:55:40 pooka Exp $ - ---- src/chiron-conf.c.orig 2007-10-23 04:54:53.000000000 +0200 -+++ src/chiron-conf.c 2007-11-27 18:05:11.000000000 +0100 -@@ -34,7 +34,11 @@ - #include <dlfcn.h> - - #include <libgen.h> -+#ifdef __linux__ - #include <linux/limits.h> -+#else -+#include <limits.h> -+#endif - #include <string.h> - #include <stdint.h> - #include <sys/resource.h> -@@ -232,7 +236,8 @@ - int do_mount(char *filesystems, char *mountpoint) - { - char buf[100]; -- int i, start, fd, res, errno, rep_on_mount=0, err; -+ int fd, res; -+ int i, start, errno, rep_on_mount=0, err; - int *tmp_high, *tmp_low; - unsigned long tmpfd; - struct rlimit rlp; -@@ -249,21 +254,21 @@ - } - - fd = open("/proc/sys/fs/file-max",O_RDONLY); -- if (fd<0) { -- print_err(errno,"opening /proc/sys/fs/file-max"); -- exit(errno); -- } -- res = read(fd,buf,99); -- if (res<0) { -- print_err(errno,"reading /proc/sys/fs/file-max"); -- exit(errno); -+ if (fd != -1) { -+ res = read(fd,buf,99); -+ if (res<0) { -+ print_err(errno,"reading /proc/sys/fs/file-max"); -+ exit(errno); -+ } -+ sscanf(buf,"%qu",&FD_BUF_SIZE); -+ close(fd); -+ } else { -+ FD_BUF_SIZE = 4096; - } -- sscanf(buf,"%qu",&FD_BUF_SIZE); -- close(fd); - - tmpfd = (FD_BUF_SIZE >>= 1); - -- if (getrlimit(RLIMIT_OFILE,&rlp)) { -+ if (getrlimit(RLIMIT_NOFILE,&rlp)) { - print_err(errno,"reading nofile resource limit"); - exit(errno); - } -@@ -356,11 +361,11 @@ - } - - if (mountpoint[0]==':') { -- mount_point = realpath(mountpoint+1,NULL); -+ mount_point = do_realpath(mountpoint+1,NULL); - rep_on_mount = i = 1; - tmp_high[max_replica_high++] = 0; - } else { -- mount_point = realpath(mountpoint,NULL); -+ mount_point = do_realpath(mountpoint,NULL); - i = 0; - } - if (mount_point==NULL) { -@@ -380,7 +385,7 @@ - tmp_high[max_replica_high++] = i; - } - -- paths[i].path = realpath(filesystems+start, NULL); -+ paths[i].path = do_realpath(filesystems+start, NULL); - if (paths[i].path==NULL) { - free_paths(); - free_tab_fd(); diff --git a/filesystems/fuse-chironfs/patches/patch-ac b/filesystems/fuse-chironfs/patches/patch-ac deleted file mode 100644 index 5cfabab75da..00000000000 --- a/filesystems/fuse-chironfs/patches/patch-ac +++ /dev/null @@ -1,75 +0,0 @@ -$NetBSD: patch-ac,v 1.1.1.1 2007/11/27 18:55:40 pooka Exp $ - ---- src/chironfs.c.orig 2007-11-27 17:00:15.000000000 +0100 -+++ src/chironfs.c 2007-11-27 19:08:07.000000000 +0100 -@@ -27,8 +27,7 @@ - #define FUSE_USE_VERSION 25 - - #include <fuse.h> --#include <fuse/fuse.h> --#include <fuse/fuse_opt.h> -+#include <fuse_opt.h> - #include <stdlib.h> - #include <stdio.h> - #include <string.h> -@@ -43,13 +42,17 @@ - #ifdef HAVE_SETXATTR - #include <sys/xattr.h> - #endif -+#ifdef __linux__ - #include <linux/limits.h> - #include <mntent.h> --#include <stdint.h> - #include <bits/wordsize.h> -+#endif -+#include <stdint.h> - #include <pwd.h> - #include <grp.h> - -+#include "config.h" -+ - #define _CHIRON_H_ - #include "chironfs.h" - -@@ -186,6 +189,16 @@ - } - } - -+char *do_realpath(const char *path, char *resolvedpath) -+{ -+ -+#ifndef __linux__ -+ if (resolvedpath == NULL) -+ resolvedpath = malloc(PATH_MAX); -+#endif -+ return realpath(path, resolvedpath); -+} -+ - //////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////// - // -@@ -2234,7 +2247,7 @@ - return(NULL); - } - } else { -- realbasedir = realpath(basedir,NULL); -+ realbasedir = do_realpath(basedir,NULL); - if (realbasedir==NULL) { - free(basedir); - return(NULL); -@@ -2383,6 +2396,7 @@ - dbg(("\nfuse_argv: %s %s %s", fuse_argv[0], fuse_argv[1], fuse_argv[2])); - dbg(("\n-------------------------------------------------------------------------------")); - -+#ifdef HAVE_GETMNTENT - FILE *mtab; - struct mntent *mntentry; - mtab = setmntent("/etc/mtab", "r"); -@@ -2393,6 +2407,7 @@ - } - } while(mntentry!=NULL); - endmntent (mtab); -+#endif - dbg(("\n-------------------------------------------------------------------------------")); - - res = fuse_main(3, fuse_argv, &chiron_oper); diff --git a/filesystems/fuse-chironfs/patches/patch-ad b/filesystems/fuse-chironfs/patches/patch-ad deleted file mode 100644 index f8a1eb5b83f..00000000000 --- a/filesystems/fuse-chironfs/patches/patch-ad +++ /dev/null @@ -1,12 +0,0 @@ -$NetBSD: patch-ad,v 1.1.1.1 2007/11/27 18:55:40 pooka Exp $ - ---- src/chironfs.h.orig 2007-10-23 05:09:39.000000000 +0200 -+++ src/chironfs.h 2007-11-27 19:10:43.000000000 +0100 -@@ -157,6 +157,7 @@ - int fd_hashseek(int fd_main); - void print_err(int err, char *specifier); - void call_log(char *fnname, char *resource, int err); -+char *do_realpath(const char *pathname, char *resolvedname); - int choose_replica(int try); - void disable_replica(int n); - void opt_parse(char *fo, char**log, char**argvbuf); diff --git a/filesystems/fuse-chironfs/patches/patch-ae b/filesystems/fuse-chironfs/patches/patch-ae new file mode 100644 index 00000000000..51eb1f3774f --- /dev/null +++ b/filesystems/fuse-chironfs/patches/patch-ae @@ -0,0 +1,409 @@ +$NetBSD: patch-ae,v 1.1 2009/04/09 03:33:13 manu Exp $ +--- src/chirctl.c.orig 2008-06-19 03:27:08.000000000 +0200 ++++ src/chirctl.c 2009-03-28 22:54:07.000000000 +0100 +@@ -29,9 +29,11 @@ + #include <fuse/fuse_opt.h> + + #else + ++#ifndef __NetBSD__ + typedef uint64_t cpuset_t; ++#endif + + // + // The lines below are from a patch contributed by Antti Kantee + // to make ChironFS run on NetBSD +--- src/chiron-conf.c.orig 2008-06-12 03:55:22.000000000 +0200 ++++ src/chiron-conf.c 2009-03-28 22:54:07.000000000 +0100 +@@ -188,8 +188,13 @@ + fo[i] = 0; + quiet_mode = 1; + sprintf(fo+start,"%s",fo+6); + i = start - 1; ++ } else if (!strncmp(fo+start,"nochown", 7)) { ++ fo[i] = 0; ++ nochown_mode = 1; ++ sprintf(fo+start,"%s",fo+7); ++ i = start - 1; + } else { + start = i + 1; + } + } +--- src/chirondbg.c.orig 2008-06-15 21:10:49.000000000 +0200 ++++ src/chirondbg.c 2009-03-29 12:14:03.000000000 +0200 +@@ -40,9 +40,11 @@ + #include <fuse/fuse_opt.h> + + #else + ++#ifndef __NetBSD__ + typedef uint64_t cpuset_t; ++#endif + + // + // The lines below are from a patch contributed by Antti Kantee + // to make ChironFS run on NetBSD +@@ -204,18 +206,24 @@ + //////////////////////////////////////////////////////////////////////////// + + void print_err(int err, char *specifier) + { ++ char errbuf[1024]; ++ + if (!quiet_mode) { + if (specifier==NULL) { + if (err>0) { +- fprintf(stderr,"%s\n",strerror(err)); ++ if (strerror_r(err, errbuf, sizeof(errbuf)) != 0) ++ strncpy(errbuf, "strerror_r() failure", sizeof(errbuf)); ++ fprintf(stderr,"%s\n",errbuf); + } else { + fprintf(stderr,"%s\n",errtab[-(err+1)]); + } + } else { + if (err>0) { +- fprintf(stderr,"%s: %s\n",specifier,strerror(err)); ++ if (strerror_r(err, errbuf, sizeof(errbuf)) != 0) ++ strncpy(errbuf, "strerror_r() failure", sizeof(errbuf)); ++ fprintf(stderr,"%s: %s\n",specifier,errbuf); + } else { + fprintf(stderr,"%s: %s\n",specifier,errtab[-(err+1)]); + } + } +@@ -225,16 +233,17 @@ + + void call_log(char *fnname, char *resource, int err) + { + time_t t; +- struct tm *ptm; ++ struct tm *ptm, tmbuf; + char tmstr[20]; ++ char errbuf[1024]; + + if (logfd!=NULL) { + attach_log(); + flockfile(logfd); + t = time(NULL); +- ptm = localtime(&t); ++ ptm = localtime_r(&t, &tmbuf); + strftime(tmstr,19,"%Y/%m/%d %H:%M ",ptm); + fputs(tmstr,logfd); + fputs(fnname,logfd); + if (err!=CHIRONFS_ADM_FORCED) { +@@ -245,9 +254,11 @@ + fputs(resource,logfd); + if (err) { + fputs(" ",logfd); + if (err>0) { +- fputs(strerror(err),logfd); ++ if (strerror_r(err, errbuf, sizeof(errbuf)) != 0) ++ strncpy(errbuf, "strerror_r() failure", sizeof(errbuf)); ++ fputs(errbuf,logfd); + } else { + fputs(errtab[-(err+1)],logfd); + } + } +--- src/chironfn.c.orig 2008-06-09 20:02:39.000000000 +0200 ++++ src/chironfn.c 2009-03-29 11:46:25.000000000 +0200 +@@ -104,4 +104,79 @@ + dbg(("\nxlate:%s",rname)); + return(rname); + } + ++/* ++ * chiron_dirname is derived from NetBSD's libc dirname(3), with ++ * changes from Emmanuel Dreyfus <manu@netbsd.org>. This code is ++ * subject to the 2-clauses BSD license below ++ */ ++ ++/*- ++ * Copyright (c) 1997, 2002 The NetBSD Foundation, Inc. ++ * All rights reserved. ++ * ++ * This code is derived from software contributed to The NetBSD Foundation ++ * by Klaus Klein and Jason R. Thorpe. ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions ++ * are met: ++ * 1. Redistributions of source code must retain the above copyright ++ * notice, this list of conditions and the following disclaimer. ++ * 2. Redistributions in binary form must reproduce the above copyright ++ * notice, this list of conditions and the following disclaimer in the ++ * documentation and/or other materials provided with the distribution. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS ++ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ++ * POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++char * ++chiron_dirname(char *path) { ++ static char singledot[] = "."; ++ const char *lastp; ++ size_t len; ++ ++ /* ++ * If `path' is a null pointer or points to an empty string, ++ * return a pointer to the string ".". ++ */ ++ if ((path == NULL) || (*path == '\0')) ++ return (singledot); ++ ++ /* Strip trailing slashes, if any. */ ++ lastp = path + strlen(path) - 1; ++ while (lastp != path && *lastp == '/') ++ lastp--; ++ ++ /* Terminate path at the last occurence of '/'. */ ++ do { ++ if (*lastp == '/') { ++ /* Strip trailing slashes, if any. */ ++ while (lastp != path && *lastp == '/') ++ lastp--; ++ ++ /* ...and copy the result into the result buffer. */ ++ len = (lastp - path) + 1 /* last char */; ++ if (len > (PATH_MAX - 1)) ++ len = PATH_MAX - 1; ++ ++ path[len] = '\0'; ++ return(path); ++ } ++ } while (--lastp >= path); ++ ++ /* No /'s found, return a pointer to the string ".". */ ++ return (singledot); ++} ++ ++ +--- src/chironfn.h.orig 2008-06-08 08:26:58.000000000 +0200 ++++ src/chironfn.h 2009-03-28 22:55:55.000000000 +0100 +@@ -10,4 +10,5 @@ + + + int read_a_line(char **buf, int *c, FILE *f); + char *xlate(const char *fname, char *rpath); ++char *chiron_dirname(char *path); +--- src/chironfs.c.orig 2008-06-21 03:09:19.000000000 +0200 ++++ src/chironfs.c 2009-03-29 12:12:26.000000000 +0200 +@@ -37,9 +37,11 @@ + #include <fuse/fuse_opt.h> + + #else + ++#ifndef __NetBSD__ + typedef uint64_t cpuset_t; ++#endif + + // + // The line below are from a patch contributed by Antti Kantee + // to make ChironFS run on NetBSD +@@ -125,8 +127,9 @@ + #include "chironfn.h" + #define _CHIRON_H_ + #include "chironfs.h" + ++int nochown_mode = 0; + + //////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////// + // +@@ -405,13 +408,18 @@ + } \ + if (result!=NULL) { \ + member = result->gr_mem; \ + while (*member) { \ +- pw = getpwnam(*member); \ +- pw_uid = pw->pw_uid; \ +- if (pw_uid==context->uid) { \ +- perm = (stbuf.st_mode&070) >> 3; \ +- break; \ ++ struct passwd pwres; \ ++ char pwbuf[1024]; \ ++ \ ++ if (getpwnam_r(*member, &pwres, pwbuf, \ ++ sizeof(pwbuf), &pw) == 0) { \ ++ pw_uid = pw->pw_uid; \ ++ if (pw_uid==context->uid) { \ ++ perm = (stbuf.st_mode&070) >> 3; \ ++ break; \ ++ } \ + } \ + member++; \ + } \ + if (*member==NULL) { \ +@@ -432,9 +440,9 @@ + return(-1); \ + } \ + bkdname = dname; \ + do { \ +- dname = dirname(dname); \ ++ dname = chiron_dirname(dname); \ + get_rights(stat,dname); \ + process_rights(); \ + if (!(perm&1)) { \ + free(dname); \ +@@ -570,9 +578,9 @@ + if (dname==NULL) { + errno = ENOMEM; + perm = -1; + } else { +- perm = get_rights_by_name(dirname(dname)); ++ perm = get_rights_by_name(chiron_dirname(dname)); + free(dname); + } + } else { + perm = get_rights_by_name(fname); +@@ -600,9 +608,9 @@ + err_list[i] = errno; + } else { + if (!file_exists) { + get_ownership(); +- if (lchown(fname, context->uid, gid)==(-1)) { ++ if (!nochown_mode && lchown(fname, context->uid, gid)==(-1)) { + fail_cnt++; + err_list[i] = -errno; + close(fd[i]); + fd[i] = -1; +@@ -1245,9 +1253,9 @@ + if (dname==NULL) { + perm = -1; + errno = ENOMEM; + } else { +- perm = get_rights_by_name(dirname(dname)); ++ perm = get_rights_by_name(chiron_dirname(dname)); + free(dname); + } + if (perm<0) { + fail_cnt++; +@@ -1262,9 +1270,9 @@ + fd[i] = open(fname, O_CREAT | O_EXCL | O_WRONLY, mode); + if (fd[i] >= 0) { + fd[i] = close(fd[i]); + get_ownership(); +- if (lchown(fname, context->uid, gid)==(-1)) { ++ if (!nochown_mode && lchown(fname, context->uid, gid)==(-1)) { + fail_cnt++; + err_list[i] = -errno; + fd[i] = -1; + } else { +@@ -1288,9 +1296,9 @@ + } + } + if (fd[i]==0) { + get_ownership(); +- if (lchown(fname, context->uid, gid)==(-1)) { ++ if (!nochown_mode && lchown(fname, context->uid, gid)==(-1)) { + fail_cnt++; + err_list[i] = -errno; + fd[i] = -1; + } else { +@@ -1519,9 +1527,9 @@ + dbg(("\nrmdir: %s\n",path_orig)); + do_byname_rw(rmdir(fname), "rmdir",( + ((dname=strdup(fname))==NULL) + ? ( errno = ENOMEM, -1 ) +- : ( tmpperm = get_rights_by_name(dirname(dname)), free(dname), tmpperm) ++ : ( tmpperm = get_rights_by_name(chiron_dirname(dname)), free(dname), tmpperm) + ),||,0,EACCES); + } + + static int chiron_unlink(const char *path_orig) +@@ -1531,9 +1539,9 @@ + dbg(("\nunlink: %s\n",path_orig)); + do_byname_rw(unlink(fname), "unlink",( + ((dname=strdup(fname))==NULL) + ? ( errno = ENOMEM, -1 ) +- : ( tmpperm = get_rights_by_name(dirname(dname)), free(dname), tmpperm) ++ : ( tmpperm = get_rights_by_name(chiron_dirname(dname)), free(dname), tmpperm) + ),||,0,EACCES); + } + + int chiron_mkdir(const char *path_orig, mode_t mode) +@@ -1571,9 +1579,9 @@ + if (dname==NULL) { + perm = -1; + errno = ENOMEM; + } else { +- perm = get_rights_by_name(dirname(dname)); ++ perm = get_rights_by_name(chiron_dirname(dname)); + free(dname); + } + if (perm<0) { + fail_cnt++; +@@ -1586,9 +1594,9 @@ + } else { + fd[i] = mkdir(fname, mode); + if (fd[i]==0) { + get_ownership(); +- if (lchown(fname, context->uid, gid)==(-1)) { ++ if (!nochown_mode && lchown(fname, context->uid, gid)==(-1)) { + fail_cnt++; + err_list[i] = -errno; + fd[i] = -1; + } else { +@@ -1683,9 +1691,9 @@ + if (dname==NULL) { + perm = -1; + errno = ENOMEM; + } else { +- perm = get_rights_by_name(dirname(dname)); ++ perm = get_rights_by_name(chiron_dirname(dname)); + free(dname); + } + if (perm<0) { + fail_cnt++; +@@ -1701,9 +1709,9 @@ + fail_cnt++; + err_list[i] = errno; + } else { + get_ownership(); +- if (lchown(fname, context->uid, gid)==(-1)) { ++ if (!nochown_mode && lchown(fname, context->uid, gid)==(-1)) { + fail_cnt++; + err_list[i] = -errno; + fd[i] = -1; + } else { +@@ -1775,9 +1783,9 @@ + if (dname==NULL) { \ + perm = -1; \ + errno = -ENOMEM; \ + } else { \ +- perm = get_rights_by_name(dirname(dname)); \ ++ perm = get_rights_by_name(chiron_dirname(dname)); \ + free(dname); \ + } \ + } \ + if (perm<0) { \ +@@ -1798,9 +1806,9 @@ + if (dname==NULL) { \ + perm = -1; \ + errno = -ENOMEM; \ + } else { \ +- perm = get_rights_by_name(dirname(dname)); \ ++ perm = get_rights_by_name(chiron_dirname(dname)); \ + free(dname); \ + } \ + } \ + if (perm<0) { \ +--- src/chironfs.h.orig 2008-06-16 01:32:23.000000000 +0200 ++++ src/chironfs.h 2009-03-28 22:54:07.000000000 +0100 +@@ -150,8 +150,9 @@ + extern int mount_ctl; + + #endif + ++extern int nochown_mode; + + void help(void); + void free_tab_fd(void); + int **mk_round_robin(int *tmp_list, int dim); |