The branch, v4-0-test has been updated via 4bebda4 [PATCH] getpass: Don't fail if stdin is not a tty via 077865d BUG 9699: Fix adding case sensitive spn. via 686104b vfs_fake_perms: Fix bug 9775, segfault for "artificial" conn_structs via 67214f6 vfs_fake_perms: Slightly streamline code via 3089e8c vfs_fake_perms: Slightly streamline code via 25e7ea2 s3:modules: fix the build of vfs_notify_fam (bug #9545) from 5d5f301 VERSION: Bump version number up to 4.0.6
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test - Log ----------------------------------------------------------------- commit 4bebda4da425a38046b14afaaa76921bb49de75e Author: Alexander Bokovoy <a...@samba.org> Date: Thu Apr 11 09:45:12 2013 +0200 [PATCH] getpass: Don't fail if stdin is not a tty We don't need to manipulate the tty state (such as turning off echo) when prompting for passwords if we're not reading from a tty. Backport based on a patch provided by Stef Walter <st...@gnome.org>. Fix bug #9767 - "net ads join" fails when called via stdin. Autobuild-User(v4-0-test): Karolin Seeger <ksee...@samba.org> Autobuild-Date(v4-0-test): Thu Apr 11 11:35:07 CEST 2013 on sn-devel-104 commit 077865de2d788f5e4eabe2f610be23791dfce117 Author: Andreas Schneider <a...@samba.org> Date: Wed Apr 3 15:46:00 2013 +0200 BUG 9699: Fix adding case sensitive spn. We should be able to define the case of the spn cause it is important for some services like nfs. 'net ads keytab add "nfs"' should not result in an uppercase spn. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Wed Apr 3 23:57:32 CEST 2013 on sn-devel-104 commit 686104b3ec9b64e0d85b40633b1b8d24b16442cb Author: Volker Lendecke <v...@samba.org> Date: Tue Apr 9 21:18:34 2013 +0200 vfs_fake_perms: Fix bug 9775, segfault for "artificial" conn_structs Signed-off-by: Volker Lendecke <v...@samba.org> The last 3 patches address bug #9775, segfault for "artificial" conn_structs. commit 67214f6551c28a66fde76a9bac5fd79d4d4c0699 Author: Volker Lendecke <v...@samba.org> Date: Tue Apr 9 21:07:23 2013 +0200 vfs_fake_perms: Slightly streamline code Don't initialize a variable directly set Signed-off-by: Volker Lendecke <v...@samba.org> commit 3089e8c760435f8f296a2a6c9644d39d35f95ac6 Author: Volker Lendecke <v...@samba.org> Date: Tue Apr 9 21:07:23 2013 +0200 vfs_fake_perms: Slightly streamline code Do an early error return Signed-off-by: Volker Lendecke <v...@samba.org> commit 25e7ea2a19b8d0943255922a0ef291e42eafcabf Author: Stefan Metzmacher <me...@samba.org> Date: Fri Mar 22 09:30:05 2013 +0100 s3:modules: fix the build of vfs_notify_fam (bug #9545) This adds the --with-fam option and configure checks. Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: Volker Lendecke <v...@samba.org> (cherry picked from commit 0d75c902254c6e27964c631459ef8e9b379b77fc) ----------------------------------------------------------------------- Summary of changes: lib/replace/getpass.c | 7 ++-- source3/libads/ldap.c | 14 +------- source3/modules/vfs_fake_perms.c | 66 +++++++++++++++++++++++++++---------- source3/modules/wscript_build | 4 ++ source3/wscript | 30 +++++++++++++++++ 5 files changed, 88 insertions(+), 33 deletions(-) Changeset truncated at 500 lines: diff --git a/lib/replace/getpass.c b/lib/replace/getpass.c index f95109f..3627222 100644 --- a/lib/replace/getpass.c +++ b/lib/replace/getpass.c @@ -138,7 +138,7 @@ static void gotintr_sig(int signum) char *rep_getpass(const char *prompt) { FILE *in, *out; - int echo_off; + int echo_off, is_a_tty; static char buf[256]; static size_t bufsize = sizeof(buf); size_t nread; @@ -160,8 +160,9 @@ char *rep_getpass(const char *prompt) setvbuf(in, NULL, _IONBF, 0); /* Turn echoing off if it is on now. */ + is_a_tty = isatty(fileno(in)) > 0; - if (tcgetattr (fileno (in), &t) == 0) { + if (is_a_tty && (tcgetattr (fileno (in), &t) == 0)) { if (ECHO_IS_ON(t)) { TURN_ECHO_OFF(t); echo_off = tcsetattr (fileno (in), TCSAFLUSH, &t) == 0; @@ -196,7 +197,7 @@ char *rep_getpass(const char *prompt) if (gotintr && in_fd == -1) { in = fopen ("/dev/tty", "w+"); } - if (in != NULL) + if ((in != NULL) && is_a_tty) tcsetattr (fileno (in), TCSANOW, &t); } diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index ca5962c..2a4a83b 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -1949,12 +1949,7 @@ ADS_STATUS ads_add_service_principal_name(ADS_STRUCT *ads, const char *machine_n ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_MEMORY); } - if (!strupper_m(psp1)) { - ret = ADS_ERROR(LDAP_NO_MEMORY); - goto out; - } - - if (!strlower_m(&psp1[strlen(spn)])) { + if (!strlower_m(&psp1[strlen(spn) + 1])) { ret = ADS_ERROR(LDAP_NO_MEMORY); goto out; } @@ -1970,12 +1965,7 @@ ADS_STATUS ads_add_service_principal_name(ADS_STRUCT *ads, const char *machine_n ret = ADS_ERROR(LDAP_NO_MEMORY); goto out; } - if (!strupper_m(psp2)) { - ret = ADS_ERROR(LDAP_NO_MEMORY); - goto out; - } - - if (!strlower_m(&psp2[strlen(spn)])) { + if (!strlower_m(&psp2[strlen(spn) + 1])) { ret = ADS_ERROR(LDAP_NO_MEMORY); goto out; } diff --git a/source3/modules/vfs_fake_perms.c b/source3/modules/vfs_fake_perms.c index 4cda7ea..8eb6e3c 100644 --- a/source3/modules/vfs_fake_perms.c +++ b/source3/modules/vfs_fake_perms.c @@ -32,17 +32,32 @@ static int fake_perms_stat(vfs_handle_struct *handle, struct smb_filename *smb_fname) { - int ret = -1; + int ret; ret = SMB_VFS_NEXT_STAT(handle, smb_fname); - if (ret == 0) { - if (S_ISDIR(smb_fname->st.st_ex_mode)) { - smb_fname->st.st_ex_mode = S_IFDIR | S_IRWXU; - } else { - smb_fname->st.st_ex_mode = S_IRWXU; - } - smb_fname->st.st_ex_uid = handle->conn->session_info->unix_token->uid; - smb_fname->st.st_ex_gid = handle->conn->session_info->unix_token->gid; + if (ret != 0) { + return ret; + } + + if (S_ISDIR(smb_fname->st.st_ex_mode)) { + smb_fname->st.st_ex_mode = S_IFDIR | S_IRWXU; + } else { + smb_fname->st.st_ex_mode = S_IRWXU; + } + + if (handle->conn->session_info != NULL) { + struct security_unix_token *utok; + + utok = handle->conn->session_info->unix_token; + smb_fname->st.st_ex_uid = utok->uid; + smb_fname->st.st_ex_gid = utok->gid; + } else { + /* + * We have an artificial connection for dfs for example. It + * sucks, but the current uid/gid is the best we have. + */ + smb_fname->st.st_ex_uid = geteuid(); + smb_fname->st.st_ex_gid = getegid(); } return ret; @@ -50,18 +65,33 @@ static int fake_perms_stat(vfs_handle_struct *handle, static int fake_perms_fstat(vfs_handle_struct *handle, files_struct *fsp, SMB_STRUCT_STAT *sbuf) { - int ret = -1; + int ret; ret = SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf); - if (ret == 0) { - if (S_ISDIR(sbuf->st_ex_mode)) { - sbuf->st_ex_mode = S_IFDIR | S_IRWXU; - } else { - sbuf->st_ex_mode = S_IRWXU; - } - sbuf->st_ex_uid = handle->conn->session_info->unix_token->uid; - sbuf->st_ex_gid = handle->conn->session_info->unix_token->gid; + if (ret != 0) { + return ret; } + + if (S_ISDIR(sbuf->st_ex_mode)) { + sbuf->st_ex_mode = S_IFDIR | S_IRWXU; + } else { + sbuf->st_ex_mode = S_IRWXU; + } + if (handle->conn->session_info != NULL) { + struct security_unix_token *utok; + + utok = handle->conn->session_info->unix_token; + sbuf->st_ex_uid = utok->uid; + sbuf->st_ex_gid = utok->gid; + } else { + /* + * We have an artificial connection for dfs for example. It + * sucks, but the current uid/gid is the best we have. + */ + sbuf->st_ex_uid = geteuid(); + sbuf->st_ex_gid = getegid(); + } + return ret; } diff --git a/source3/modules/wscript_build b/source3/modules/wscript_build index 2e431b6..16ed276 100644 --- a/source3/modules/wscript_build +++ b/source3/modules/wscript_build @@ -318,9 +318,13 @@ bld.SAMBA3_MODULE('vfs_gpfs', internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_gpfs'), enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_gpfs')) +vfs_notify_fam_deps='samba-util ' +if bld.CONFIG_SET('SAMBA_FAM_LIBS'): + vfs_notify_fam_deps += bld.CONFIG_GET('SAMBA_FAM_LIBS') bld.SAMBA3_MODULE('vfs_notify_fam', subsystem='vfs', source=VFS_NOTIFY_FAM_SRC, + deps=vfs_notify_fam_deps, init_function='', internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_notify_fam'), enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_notify_fam')) diff --git a/source3/wscript b/source3/wscript index 194d712..7f83fef 100644 --- a/source3/wscript +++ b/source3/wscript @@ -42,6 +42,7 @@ def set_options(opt): opt.SAMBA3_ADD_OPTION('automount') opt.SAMBA3_ADD_OPTION('aio-support') opt.SAMBA3_ADD_OPTION('dmapi', default=False, help="build with DMAPI support") + opt.SAMBA3_ADD_OPTION('fam', default=None) # None means autodetection opt.SAMBA3_ADD_OPTION('profiling-data', default=False) opt.SAMBA3_ADD_OPTION('cluster-support', default=None) @@ -163,6 +164,32 @@ main() { }''', 'HAVE_KERNEL_SHARE_MODES', addmain=False, execute=True, msg="Checking for kernel share modes") + # check for fam libs + samba_fam_libs=None + check_for_fam=False + if Options.options.with_fam is None: + check_for_fam=True + elif Options.options.with_fam == True: + check_for_fam=True + + if check_for_fam and conf.CHECK_HEADERS('fam.h'): + if conf.CHECK_FUNCS_IN('FAMOpen2', 'fam'): + samba_fam_libs='fam' + elif conf.CHECK_FUNCS_IN('FAMOpen2', 'fam C'): + samba_fam_libs='fam C' + conf.CHECK_TYPE('enum FAMCodes', headers='fam.h', + define='HAVE_FAM_H_FAMCODES_TYPEDEF', + msg='Checking whether enum FAMCodes is available') + conf.CHECK_FUNCS_IN('FAMNoExists', 'fam') + + if samba_fam_libs is not None: + conf.DEFINE('SAMBA_FAM_LIBS', samba_fam_libs) + else: + if Options.options.with_fam == True: + conf.fatal('FAM support requested, but no suitable FAM library found') + elif check_for_fam: + Logs.warn('no suitable FAM library found') + # check for DMAPI libs Logs.info("Checking for DMAPI library existence") conf.env['dmapi_lib'] = '' @@ -1742,6 +1769,9 @@ main() { if conf.CONFIG_SET('HAVE_GPFS'): default_shared_modules.extend(TO_LIST('vfs_gpfs')) + if conf.CONFIG_SET('SAMBA_FAM_LIBS'): + default_shared_modules.extend(TO_LIST('vfs_notify_fam')) + explicit_shared_modules = TO_LIST(Options.options.shared_modules, delimiter=',') explicit_static_modules = TO_LIST(Options.options.static_modules, delimiter=',') -- Samba Shared Repository