The branch, master has been updated via 7c2bdead9e3e4436e427668a16df367e14885cbc (commit) via 8d641826595e3be8864097d4aea7a76879c173d6 (commit) via 1896ccb24732fc9a3407224209d741640dd602d3 (commit) via 0114cb52ca552bc8c70d6f8160ca5a481e41154d (commit) via 7ad9676864a70366c3165c6f35e5c8665bc6468d (commit) from c044b09572631cbdd686e5dbbdfbcc731145533a (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 7c2bdead9e3e4436e427668a16df367e14885cbc Author: Volker Lendecke <[EMAIL PROTECTED]> Date: Wed Dec 10 23:14:46 2008 +0100 Revert "Fix some merge omissions for GPFS" This reverts commit a0efc4cffbd84898c454d27eaf946d073dfdad0f. This one should have been done with careful cherry-picks, sorry. Volker commit 8d641826595e3be8864097d4aea7a76879c173d6 Author: Volker Lendecke <[EMAIL PROTECTED]> Date: Wed Dec 10 23:14:16 2008 +0100 Revert "Fix nonempty blank lines in vfs_gpfs.c" This reverts commit a4b52118d44906882677ed1234428d8025134036. commit 1896ccb24732fc9a3407224209d741640dd602d3 Author: Volker Lendecke <[EMAIL PROTECTED]> Date: Wed Dec 10 23:14:01 2008 +0100 Revert "Make use of smbd_gpfs_get_realfilename_path in unix_convert" This reverts commit b37684ffcec4ba0beada55d37bcaf4f5e79bcd58. commit 0114cb52ca552bc8c70d6f8160ca5a481e41154d Author: Volker Lendecke <[EMAIL PROTECTED]> Date: Wed Dec 10 23:13:48 2008 +0100 Revert "Also search for -lgpfs which is available as GPL in GPFS PTF8" This reverts commit 3c93c96fd0fe362c35fe8127058f94868abc9342. commit 7ad9676864a70366c3165c6f35e5c8665bc6468d Author: Volker Lendecke <[EMAIL PROTECTED]> Date: Wed Dec 10 23:13:34 2008 +0100 Revert "Fix the build" This reverts commit c044b09572631cbdd686e5dbbdfbcc731145533a. ----------------------------------------------------------------------- Summary of changes: packaging/RHEL-CTDB/configure.rpm | 67 +++++---------- source3/configure.in | 14 --- source3/include/proto.h | 4 - source3/modules/gpfs.c | 35 +------- source3/modules/vfs_gpfs.c | 170 ++++++++++++------------------------ 5 files changed, 85 insertions(+), 205 deletions(-) Changeset truncated at 500 lines: diff --git a/packaging/RHEL-CTDB/configure.rpm b/packaging/RHEL-CTDB/configure.rpm index 358b40d..7596040 100755 --- a/packaging/RHEL-CTDB/configure.rpm +++ b/packaging/RHEL-CTDB/configure.rpm @@ -1,56 +1,37 @@ -#!/bin/sh case `uname -m` in - x86_64) - _libarch=lib64 - ;; - *) - _libarch=lib - ;; + x86_64) + libdir=/usr/lib64/samba + ;; + *) + libdir=/usr/lib/samba + ;; esac -_libarchdir=/usr/${_libarch} - -_prefix=/usr -_sysconfdir=/etc -_mandir=/usr/man -_datadir=/usr/share - -# check for ccache -ccache -h 2>&1 > /dev/null -if [ $? -eq 0 ]; then - CC="ccache gcc" -else - CC="gcc" -fi - -./autogen.sh - -CC="$CC" CFLAGS="-Wall -g -D_GNU_SOURCE" ./configure -C \ - --prefix=${_prefix} \ - --localstatedir=/var \ - --with-configdir=${_sysconfdir}/samba \ - --with-libdir=${_libarchdir}/samba \ - --with-pammodulesdir=/${_libarch}/security \ - --with-lockdir=/var/lib/samba \ - --with-logfilebase=/var/log/samba \ - --with-mandir=${_mandir} \ - --with-piddir=/var/run \ - --with-privatedir=${_sysconfdir}/samba \ - --with-sambabook=${_datadir}/swat/using_samba \ - --with-swatdir=${_datadir}/swat \ +CFLAGS="-Wall -g -D_GNU_SOURCE" ./configure \ + --prefix=/usr \ + --localstatedir=/var \ + --with-configdir=/etc/samba \ + --with-libdir=$libdir \ + --with-lockdir=/var/lib/samba \ + --with-logfilebase=/var/log/samba \ + --with-mandir=/usr/man \ + --with-piddir=/var/run \ + --with-privatedir=/etc/samba \ + --with-sambabook=/usr/share/swat/using_samba \ + --with-swatdir=/usr/share/swat \ --disable-cups \ - --with-acl-support \ + --with-acl-support \ --with-ads \ - --with-automount \ - --with-fhs \ + --with-automount \ + --with-fhs \ --with-pam_smbpass \ --with-libsmbclient \ --with-libsmbsharemodes \ - --without-smbwrapper \ + --without-smbwrapper \ --with-pam \ --with-quotas \ - --with-shared-modules=idmap_rid,idmap_ad,idmap_tdb2,vfs_gpfs \ + --with-shared-modules=idmap_rid,idmap_ad,idmap_tdb2 \ --with-syslog \ --with-utmp \ --with-cluster-support \ @@ -59,5 +40,3 @@ CC="$CC" CFLAGS="-Wall -g -D_GNU_SOURCE" ./configure -C \ --without-dnsupdate \ --with-aio-support \ $* - -make showlayout diff --git a/source3/configure.in b/source3/configure.in index b90b1b3..40e78e8 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -1052,20 +1052,6 @@ if test x"$samba_cv_HAVE_GPFS" = x"yes"; then fi LIBS="$save_LIBS" -printf "%s" "checking for GPFS libs (with 3.2.1 PTF8 available as GPL)... " -save_LIBS="$LIBS" -LIBS="$LIBS -lgpfs" -AC_TRY_LINK([#include <gpfs.h>], - [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)], - samba_cv_HAVE_GPFS=yes, - samba_cv_HAVE_GPFS=no) -echo $samba_cv_HAVE_GPFS -if test x"$samba_cv_HAVE_GPFS" = x"yes"; then - AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available]) - default_shared_modules="$default_shared_modules vfs_gpfs" -fi -LIBS="$save_LIBS" - ############################################# # check if building on Isilon OneFS printf "%s" "checking for Isilon OneFS... " diff --git a/source3/include/proto.h b/source3/include/proto.h index 7fa6266..4feedcd 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -7896,10 +7896,6 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx, char **pp_saved_last_component, SMB_STRUCT_STAT *pst); NTSTATUS check_name(connection_struct *conn, const char *name); -int get_real_filename(connection_struct *conn, const char *path, - const char *name, TALLOC_CTX *mem_ctx, - char **found_name); - /* The following definitions come from smbd/files.c */ diff --git a/source3/modules/gpfs.c b/source3/modules/gpfs.c index 92aecb9..4e76b97 100644 --- a/source3/modules/gpfs.c +++ b/source3/modules/gpfs.c @@ -31,8 +31,6 @@ static int (*gpfs_set_share_fn)(int fd, unsigned int allow, unsigned int deny); static int (*gpfs_set_lease_fn)(int fd, unsigned int leaseType); static int (*gpfs_getacl_fn)(char *pathname, int flags, void *acl); static int (*gpfs_putacl_fn)(char *pathname, int flags, void *acl); -static int (*gpfs_get_realfilename_path_fn)(char *pathname, char *filenamep, - int *buflen); bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask, @@ -45,7 +43,7 @@ bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask, if (!gpfs_share_modes) { return True; } - + if (gpfs_set_share_fn == NULL) { return False; } @@ -106,7 +104,7 @@ int set_gpfs_lease(int fd, int leasetype) if (leasetype == F_WRLCK) { gpfs_type = GPFS_LEASE_WRITE; } - + /* we unconditionally set CAP_LEASE, rather than looking for -1/EACCES as there is a bug in some versions of libgpfs_gpl.so which results in a leaked fd on /dev/ss0 @@ -136,17 +134,6 @@ int smbd_gpfs_putacl(char *pathname, int flags, void *acl) return gpfs_putacl_fn(pathname, flags, acl); } -int smbd_gpfs_get_realfilename_path(char *pathname, char *filenamep, - int *buflen) -{ - if (gpfs_get_realfilename_path_fn == NULL) { - errno = ENOSYS; - return -1; - } - - return gpfs_get_realfilename_path_fn(pathname, filenamep, buflen); -} - static bool init_gpfs_function_lib(void *plibhandle_pointer, const char *libname, void *pfn_pointer, const char *fn_name) @@ -155,11 +142,8 @@ static bool init_gpfs_function_lib(void *plibhandle_pointer, void **libhandle_pointer = (void **)plibhandle_pointer; void **fn_pointer = (void **)pfn_pointer; - DEBUG(10, ("trying to load name %s from %s\n", - fn_name, libname)); - if (*libhandle_pointer == NULL) { - *libhandle_pointer = sys_dlopen(libname, RTLD_LAZY); + *libhandle_pointer = dlopen(libname, RTLD_LAZY); did_open_here = true; } if (*libhandle_pointer == NULL) { @@ -167,12 +151,12 @@ static bool init_gpfs_function_lib(void *plibhandle_pointer, return false; } - *fn_pointer = sys_dlsym(*libhandle_pointer, fn_name); + *fn_pointer = dlsym(*libhandle_pointer, fn_name); if (*fn_pointer == NULL) { DEBUG(10, ("Did not find symbol %s in lib %s\n", fn_name, libname)); if (did_open_here) { - sys_dlclose(*libhandle_pointer); + dlclose(*libhandle_pointer); *libhandle_pointer = NULL; } return false; @@ -203,8 +187,6 @@ void init_gpfs(void) init_gpfs_function(&gpfs_set_lease_fn, "gpfs_set_lease"); init_gpfs_function(&gpfs_getacl_fn, "gpfs_getacl"); init_gpfs_function(&gpfs_putacl_fn, "gpfs_putacl"); - init_gpfs_function(&gpfs_get_realfilename_path_fn, - "gpfs_get_realfilename_path"); gpfs_share_modes = lp_parm_bool(-1, "gpfs", "sharemodes", True); gpfs_leases = lp_parm_bool(-1, "gpfs", "leases", True); @@ -244,13 +226,6 @@ int smbd_gpfs_putacl(char *pathname, int flags, void *acl) return -1; } -int smbd_gpfs_get_realfilename_path(char *pathname, char *fileamep, - int *buflen) -{ - errno = ENOSYS; - return -1; -} - void init_gpfs(void) { return; diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c index fae08dd..fa0b4e9 100644 --- a/source3/modules/vfs_gpfs.c +++ b/source3/modules/vfs_gpfs.c @@ -1,24 +1,26 @@ /* Unix SMB/CIFS implementation. Wrap gpfs calls in vfs functions. - + Copyright (C) Christian Ambach <[EMAIL PROTECTED]> 2006 - + Major code contributions by Chetan Shringarpure <[EMAIL PROTECTED]> and Gomati Mohanan <[EMAIL PROTECTED]> - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + + */ #include "includes.h" @@ -53,14 +55,14 @@ static int vfs_gpfs_setlease(vfs_handle_struct *handle, files_struct *fsp, int leasetype) { int ret; - + START_PROFILE(syscall_linux_setlease); - + if ( linux_set_lease_sighandler(fsp->fh->fd) == -1) return -1; ret = set_gpfs_lease(fsp->fh->fd,leasetype); - + if ( ret < 0 ) { /* This must have come from GPFS not being available */ /* or some other error, hence call the default */ @@ -72,64 +74,7 @@ static int vfs_gpfs_setlease(vfs_handle_struct *handle, files_struct *fsp, return ret; } -static int vfs_gpfs_get_real_filename(struct vfs_handle_struct *handle, - const char *path, - const char *name, - TALLOC_CTX *mem_ctx, - char **found_name) -{ - int result; - char *full_path; - char real_pathname[PATH_MAX+1]; - int buflen; - - full_path = talloc_asprintf(talloc_tos(), "%s/%s", path, name); - if (full_path == NULL) { - errno = ENOMEM; - return -1; - } - - buflen = sizeof(real_pathname) - 1; - - result = smbd_gpfs_get_realfilename_path(full_path, real_pathname, - &buflen); - - TALLOC_FREE(full_path); - - if (result == -1) { - DEBUG(10, ("smbd_gpfs_get_realfilename_path returned %s\n", - strerror(errno))); - return -1; - } - - /* - * GPFS does not necessarily null-terminate the returned path - * but instead returns the buffer length in buflen. - */ - - if (buflen < sizeof(real_pathname)) { - real_pathname[buflen] = '\0'; - } else { - real_pathname[sizeof(real_pathname)-1] = '\0'; - } - - DEBUG(10, ("smbd_gpfs_get_realfilename_path: %s/%s -> %s\n", - path, name, real_pathname)); - - name = strrchr_m(real_pathname, '/'); - if (name == NULL) { - errno = ENOENT; - return -1; - } - - *found_name = talloc_strdup(mem_ctx, name+1); - if (*found_name == NULL) { - errno = ENOMEM; - return -1; - } - return 0; -} static void gpfs_dumpacl(int level, struct gpfs_acl *gacl) { @@ -356,13 +301,13 @@ static bool gpfsacl_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl) gace->aceType = aceprop->aceType; gace->aceFlags = aceprop->aceFlags; gace->aceMask = aceprop->aceMask; - + /* * GPFS can't distinguish between WRITE and APPEND on * files, so one being set without the other is an * error. Sorry for the many ()'s :-) */ - + if (!fsp->is_directory && ((((gace->aceMask & ACE4_MASK_WRITE) == 0) @@ -378,9 +323,9 @@ static bool gpfsacl_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl) fsp->fsp_name)); gace->aceMask |= ACE4_MASK_WRITE|ACE4_MASK_APPEND; } - + gace->aceIFlags = (aceprop->flags&SMB_ACE4_ID_SPECIAL) ? ACE4_IFLAG_SPECIAL_ID : 0; - + if (aceprop->flags&SMB_ACE4_ID_SPECIAL) { switch(aceprop->who.special_id) @@ -420,7 +365,7 @@ static bool gpfsacl_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl) return True; } -static NTSTATUS gpfsacl_set_nt_acl_internal(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd) +static NTSTATUS gpfsacl_set_nt_acl_internal(files_struct *fsp, uint32 security_info_sent, const SEC_DESC *psd) { struct gpfs_acl *acl; NTSTATUS result = NT_STATUS_ACCESS_DENIED; @@ -441,7 +386,7 @@ static NTSTATUS gpfsacl_set_nt_acl_internal(files_struct *fsp, uint32 security_i return result; } -static NTSTATUS gpfsacl_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd) +static NTSTATUS gpfsacl_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, uint32 security_info_sent, const SEC_DESC *psd) { return gpfsacl_set_nt_acl_internal(fsp, security_info_sent, psd); } @@ -533,7 +478,7 @@ static SMB_ACL_T gpfsacl_get_posix_acl(const char *path, gpfs_aclType_t type) errno = EINVAL; goto done; } - + DEBUG(10, ("len: %d, level: %d, version: %d, nace: %d\n", pacl->acl_len, pacl->acl_level, pacl->acl_version, pacl->acl_nace)); @@ -552,6 +497,7 @@ static SMB_ACL_T gpfsacl_get_posix_acl(const char *path, gpfs_aclType_t type) } SMB_ACL_T gpfsacl_sys_acl_get_file(vfs_handle_struct *handle, + const char *path_p, SMB_ACL_TYPE_T type) { @@ -611,7 +557,7 @@ static struct gpfs_acl *smb2gpfs_acl(const SMB_ACL_T pacl, for (i=0; i<pacl->count; i++) { const struct smb_acl_entry *ace = &pacl->acl[i]; struct gpfs_ace_v1 *g_ace = &result->ace_v1[i]; - + DEBUG(10, ("Converting type %d perm %x\n", (int)ace->a_type, (int)ace->a_perm)); @@ -666,6 +612,7 @@ static struct gpfs_acl *smb2gpfs_acl(const SMB_ACL_T pacl, } int gpfsacl_sys_acl_set_file(vfs_handle_struct *handle, + const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T theacl) @@ -692,6 +639,7 @@ int gpfsacl_sys_acl_set_fd(vfs_handle_struct *handle, } int gpfsacl_sys_acl_delete_def_file(vfs_handle_struct *handle, + const char *path) { errno = ENOTSUP; @@ -713,11 +661,11 @@ static uint32 gpfsacl_mask_filter(uint32 aceType, uint32 aceMask, uint32 rwx) uint32_t posix_mask = 0x01; uint32_t posix_bit; uint32_t nfs4_bits; - + for(i=0; i<3; i++) { nfs4_bits = posix_nfs4map[i]; posix_bit = rwx & posix_mask; - + if (aceType==SMB_ACE4_ACCESS_ALLOWED_ACE_TYPE) { if (posix_bit) aceMask |= nfs4_bits; @@ -730,10 +678,10 @@ static uint32 gpfsacl_mask_filter(uint32 aceType, uint32 aceMask, uint32 rwx) else aceMask &= ~nfs4_bits; } /* other ace types are unexpected */ - + posix_mask <<= 1; } - + return aceMask; } @@ -745,30 +693,30 @@ static int gpfsacl_emu_chmod(const char *path, mode_t mode) int i; files_struct fake_fsp; /* TODO: rationalize parametrization */ SMB4ACE_T *smbace; - + DEBUG(10, ("gpfsacl_emu_chmod invoked for %s mode %o\n", path, mode)); - + result = gpfs_get_nfs4_acl(path, &pacl); if (result) return result; - + if (mode & ~(S_IRWXU | S_IRWXG | S_IRWXO)) { DEBUG(2, ("WARNING: cutting extra mode bits %o on %s\n", mode, path)); } - + for (smbace=smb_first_ace4(pacl); smbace!=NULL; smbace = smb_next_ace4(smbace)) { SMB_ACE4PROP_T *ace = smb_get_ace4(smbace); uint32_t specid = ace->who.special_id; - + if (ace->flags&SMB_ACE4_ID_SPECIAL && ace->aceType<=SMB_ACE4_ACCESS_DENIED_ACE_TYPE && specid <= SMB_ACE4_WHO_EVERYONE) { - + uint32_t newMask; - + if (ace->aceType==SMB_ACE4_ACCESS_ALLOWED_ACE_TYPE) haveAllowEntry[specid] = True; - + -- Samba Shared Repository