X-Git-Url: http://git.samba.org/?p=samba.git;a=blobdiff_plain;f=source3%2Fparam%2Floadparm.c;h=5bac25c43362a32a166f9a9f6271624ad1ffb2e1;hp=dbbd6e327da718e1600c144da02884ce275d9db3;hb=bd269443e311d96ef495a9db47d1b95eb83bb8f4;hpb=94717ae8e5dfe2ccdb7f3557d5490708b00ae471 diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index dbbd6e327da..5bac25c4336 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -10,17 +10,17 @@ Copyright (C) Stefan (metze) Metzmacher 2002 Copyright (C) Jim McDonough 2003 Copyright (C) Michael Adam 2008 - + 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 . */ @@ -54,13 +54,16 @@ #include "includes.h" #include "printing.h" +#ifdef HAVE_SYS_SYSCTL_H +#include +#endif + #ifdef HAVE_HTTPCONNECTENCRYPT #include #endif bool bLoaded = False; -extern enum protocol_types Protocol; extern userdom_struct current_user_info; #ifndef GLOBAL_NAME @@ -199,6 +202,7 @@ struct global { bool bWinbindOfflineLogon; bool bWinbindNormalizeNames; bool bWinbindRpcOnly; + bool bCreateKrb5Conf; char *szIdmapBackend; char *szIdmapAllocBackend; char *szAddShareCommand; @@ -255,6 +259,8 @@ struct global { char *szLdapGroupSuffix; int ldap_ssl; bool ldap_ssl_ads; + int ldap_deref; + int ldap_follow_referral; char *szLdapSuffix; char *szLdapAdminDn; int ldap_debug_level; @@ -266,6 +272,7 @@ struct global { char *ctdbdSocket; char **szClusterAddresses; bool clustering; + int ctdb_timeout; int ldap_passwd_sync; int ldap_replication_sleep; int ldap_timeout; /* This is initialised in init_globals */ @@ -351,7 +358,6 @@ struct global { int cups_connection_timeout; char *szSMBPerfcountModule; bool bMapUntrustedToDomain; - bool bFakeDirCreateTimes; }; static struct global Globals; @@ -469,6 +475,7 @@ struct service { bool bDosFilemode; bool bDosFiletimes; bool bDosFiletimeResolution; + bool bFakeDirCreateTimes; bool bBlockingLocks; bool bInheritPerms; bool bInheritACLS; @@ -599,7 +606,7 @@ static struct service sDefault = { True, /* bLevel2OpLocks */ False, /* bOnlyUser */ True, /* bMangledNames */ - True, /* bWidelinks */ + false, /* bWidelinks */ True, /* bSymlinks */ False, /* bSyncAlways */ False, /* bStrictAllocate */ @@ -612,6 +619,7 @@ static struct service sDefault = { False, /* bDosFilemode */ True, /* bDosFiletimes */ False, /* bDosFiletimeResolution */ + False, /* bFakeDirCreateTimes */ True, /* bBlockingLocks */ False, /* bInheritPerms */ False, /* bInheritACLS */ @@ -739,6 +747,20 @@ static const struct enum_list enum_ldap_ssl[] = { {-1, NULL} }; +/* LDAP Dereferencing Alias types */ +#define SAMBA_LDAP_DEREF_NEVER 0 +#define SAMBA_LDAP_DEREF_SEARCHING 1 +#define SAMBA_LDAP_DEREF_FINDING 2 +#define SAMBA_LDAP_DEREF_ALWAYS 3 + +static const struct enum_list enum_ldap_deref[] = { + {SAMBA_LDAP_DEREF_NEVER, "never"}, + {SAMBA_LDAP_DEREF_SEARCHING, "searching"}, + {SAMBA_LDAP_DEREF_FINDING, "finding"}, + {SAMBA_LDAP_DEREF_ALWAYS, "always"}, + {-1, "auto"} +}; + static const struct enum_list enum_ldap_passwd_sync[] = { {LDAP_PASSWD_SYNC_OFF, "no"}, {LDAP_PASSWD_SYNC_OFF, "off"}, @@ -2496,7 +2518,7 @@ static struct parm_struct parm_table[] = { .ptr = &sDefault.iWriteCacheSize, .special = NULL, .enum_list = NULL, - .flags = FLAG_ADVANCED | FLAG_SHARE | FLAG_DEPRECATED, + .flags = FLAG_ADVANCED | FLAG_SHARE, }, { .label = "name cache timeout", @@ -2534,6 +2556,15 @@ static struct parm_struct parm_table[] = { .enum_list = NULL, .flags = FLAG_ADVANCED | FLAG_GLOBAL, }, + { + .label = "ctdb timeout", + .type = P_INTEGER, + .p_class = P_GLOBAL, + .ptr = &Globals.ctdb_timeout, + .special = NULL, + .enum_list = NULL, + .flags = FLAG_ADVANCED | FLAG_GLOBAL, + }, {N_("Printing Options"), P_SEP, P_SEPARATOR}, @@ -3258,6 +3289,8 @@ static struct parm_struct parm_table[] = { .type = P_LIST, .p_class = P_GLOBAL, .ptr = &Globals.szInitLogonDelayedHosts, + .special = NULL, + .enum_list = NULL, .flags = FLAG_ADVANCED, }, @@ -3266,6 +3299,8 @@ static struct parm_struct parm_table[] = { .type = P_INTEGER, .p_class = P_GLOBAL, .ptr = &Globals.InitLogonDelay, + .special = NULL, + .enum_list = NULL, .flags = FLAG_ADVANCED, }, @@ -3650,6 +3685,24 @@ static struct parm_struct parm_table[] = { .enum_list = NULL, .flags = FLAG_ADVANCED, }, + { + .label = "ldap deref", + .type = P_ENUM, + .p_class = P_GLOBAL, + .ptr = &Globals.ldap_deref, + .special = NULL, + .enum_list = enum_ldap_deref, + .flags = FLAG_ADVANCED, + }, + { + .label = "ldap follow referral", + .type = P_ENUM, + .p_class = P_GLOBAL, + .ptr = &Globals.ldap_follow_referral, + .special = NULL, + .enum_list = enum_bool_auto, + .flags = FLAG_ADVANCED, + }, { .label = "ldap timeout", .type = P_INTEGER, @@ -4273,8 +4326,8 @@ static struct parm_struct parm_table[] = { { .label = "fake directory create times", .type = P_BOOL, - .p_class = P_GLOBAL, - .ptr = &Globals.bFakeDirCreateTimes, + .p_class = P_LOCAL, + .ptr = &sDefault.bFakeDirCreateTimes, .special = NULL, .enum_list = NULL, .flags = FLAG_ADVANCED | FLAG_GLOBAL, @@ -4577,6 +4630,15 @@ static struct parm_struct parm_table[] = { .enum_list = NULL, .flags = FLAG_ADVANCED, }, + { + .label = "create krb5 conf", + .type = P_BOOL, + .p_class = P_GLOBAL, + .ptr = &Globals.bCreateKrb5Conf, + .special = NULL, + .enum_list = NULL, + .flags = FLAG_ADVANCED, + }, {NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0} }; @@ -4701,6 +4763,22 @@ static int max_open_files(void) #endif #endif + if (sysctl_max < MIN_OPEN_FILES_WINDOWS) { + DEBUG(2,("max_open_files: sysctl_max (%d) below " + "minimum Windows limit (%d)\n", + sysctl_max, + MIN_OPEN_FILES_WINDOWS)); + sysctl_max = MIN_OPEN_FILES_WINDOWS; + } + + if (rlimit_max < MIN_OPEN_FILES_WINDOWS) { + DEBUG(2,("rlimit_max: rlimit_max (%d) below " + "minimum Windows limit (%d)\n", + rlimit_max, + MIN_OPEN_FILES_WINDOWS)); + rlimit_max = MIN_OPEN_FILES_WINDOWS; + } + return MIN(sysctl_max, rlimit_max); } @@ -4945,7 +5023,7 @@ static void init_globals(bool first_time_only) Globals.bTimestampLogs = True; string_set(&Globals.szLogLevel, "0"); Globals.bDebugPrefixTimestamp = False; - Globals.bDebugHiresTimestamp = False; + Globals.bDebugHiresTimestamp = true; Globals.bDebugPid = False; Globals.bDebugUid = False; Globals.bDebugClass = False; @@ -4994,6 +5072,7 @@ static void init_globals(bool first_time_only) #endif Globals.bUnixExtensions = True; Globals.bResetOnZeroVC = False; + Globals.bCreateKrb5Conf = true; /* hostname lookups can be very expensive and are broken on a large number of sites (tridge) */ @@ -5009,9 +5088,11 @@ static void init_globals(bool first_time_only) string_set(&Globals.szLdapAdminDn, ""); Globals.ldap_ssl = LDAP_SSL_START_TLS; Globals.ldap_ssl_ads = False; + Globals.ldap_deref = -1; Globals.ldap_passwd_sync = LDAP_PASSWD_SYNC_OFF; Globals.ldap_delete_dn = False; Globals.ldap_replication_sleep = 1000; /* wait 1 sec for replication */ + Globals.ldap_follow_referral = Auto; Globals.ldap_timeout = LDAP_DEFAULT_TIMEOUT; Globals.ldap_connection_timeout = LDAP_CONNECTION_DEFAULT_TIMEOUT; Globals.ldap_page_size = LDAP_PAGE_SIZE; @@ -5067,6 +5148,7 @@ static void init_globals(bool first_time_only) string_set(&Globals.ctdbdSocket, ""); Globals.szClusterAddresses = NULL; Globals.clustering = False; + Globals.ctdb_timeout = 0; Globals.winbind_cache_time = 300; /* 5 minutes */ Globals.winbind_reconnect_delay = 30; /* 30 seconds */ @@ -5348,6 +5430,7 @@ FN_GLOBAL_BOOL(lp_winbind_refresh_tickets, &Globals.bWinbindRefreshTickets) FN_GLOBAL_BOOL(lp_winbind_offline_logon, &Globals.bWinbindOfflineLogon) FN_GLOBAL_BOOL(lp_winbind_normalize_names, &Globals.bWinbindNormalizeNames) FN_GLOBAL_BOOL(lp_winbind_rpc_only, &Globals.bWinbindRpcOnly) +FN_GLOBAL_BOOL(lp_create_krb5_conf, &Globals.bCreateKrb5Conf) FN_GLOBAL_CONST_STRING(lp_idmap_backend, &Globals.szIdmapBackend) FN_GLOBAL_STRING(lp_idmap_alloc_backend, &Globals.szIdmapAllocBackend) @@ -5360,6 +5443,8 @@ FN_GLOBAL_STRING(lp_ldap_suffix, &Globals.szLdapSuffix) FN_GLOBAL_STRING(lp_ldap_admin_dn, &Globals.szLdapAdminDn) FN_GLOBAL_INTEGER(lp_ldap_ssl, &Globals.ldap_ssl) FN_GLOBAL_BOOL(lp_ldap_ssl_ads, &Globals.ldap_ssl_ads) +FN_GLOBAL_INTEGER(lp_ldap_deref, &Globals.ldap_deref) +FN_GLOBAL_INTEGER(lp_ldap_follow_referral, &Globals.ldap_follow_referral) FN_GLOBAL_INTEGER(lp_ldap_passwd_sync, &Globals.ldap_passwd_sync) FN_GLOBAL_BOOL(lp_ldap_delete_dn, &Globals.ldap_delete_dn) FN_GLOBAL_INTEGER(lp_ldap_replication_sleep, &Globals.ldap_replication_sleep) @@ -5515,6 +5600,7 @@ FN_GLOBAL_INTEGER(lp_cups_connection_timeout, &Globals.cups_connection_timeout) FN_GLOBAL_CONST_STRING(lp_ctdbd_socket, &Globals.ctdbdSocket) FN_GLOBAL_LIST(lp_cluster_addresses, &Globals.szClusterAddresses) FN_GLOBAL_BOOL(lp_clustering, &Globals.clustering) +FN_GLOBAL_INTEGER(lp_ctdb_timeout, &Globals.ctdb_timeout) FN_LOCAL_STRING(lp_printcommand, szPrintcommand) FN_LOCAL_STRING(lp_lpqcommand, szLpqcommand) FN_LOCAL_STRING(lp_lprmcommand, szLprmcommand) @@ -5586,7 +5672,7 @@ FN_LOCAL_BOOL(lp_recursive_veto_delete, bDeleteVetoFiles) FN_LOCAL_BOOL(lp_dos_filemode, bDosFilemode) FN_LOCAL_BOOL(lp_dos_filetimes, bDosFiletimes) FN_LOCAL_BOOL(lp_dos_filetime_resolution, bDosFiletimeResolution) -FN_GLOBAL_BOOL(lp_fake_dir_create_times, &Globals.bFakeDirCreateTimes) +FN_LOCAL_BOOL(lp_fake_dir_create_times, bFakeDirCreateTimes) FN_LOCAL_BOOL(lp_blocking_locks, bBlockingLocks) FN_LOCAL_BOOL(lp_inherit_perms, bInheritPerms) FN_LOCAL_BOOL(lp_inherit_acls, bInheritACLS) @@ -5670,16 +5756,16 @@ static struct param_opt_struct *get_parametrics(int snum, const char *type, bool global_section = False; char* param_key; struct param_opt_struct *data; - + if (snum >= iNumServices) return NULL; - + if (snum < 0) { data = Globals.param_opt; global_section = True; } else { data = ServicePtrs[snum]->param_opt; } - + if (asprintf(¶m_key, "%s:%s", type, option) == -1) { DEBUG(0,("asprintf failed!\n")); return NULL; @@ -5707,7 +5793,7 @@ static struct param_opt_struct *get_parametrics(int snum, const char *type, } string_free(¶m_key); - + return NULL; } @@ -5754,7 +5840,7 @@ static bool lp_bool(const char *s) MISSING_PARAMETER(lp_bool); return False; } - + if (!set_boolean(s, &ret)) { DEBUG(0,("lp_bool(%s): value is not boolean!\n",s)); return False; @@ -5774,7 +5860,7 @@ static int lp_enum(const char *s,const struct enum_list *_enum) MISSING_PARAMETER(lp_enum); return (-1); } - + for (i=0; _enum[i].name; i++) { if (strequal(_enum[i].name,s)) return _enum[i].value; @@ -5804,7 +5890,7 @@ static int lp_enum(const char *s,const struct enum_list *_enum) char *lp_parm_talloc_string(int snum, const char *type, const char *option, const char *def) { struct param_opt_struct *data = get_parametrics(snum, type, option); - + if (data == NULL||data->value==NULL) { if (def) { return lp_string(def); @@ -5821,10 +5907,10 @@ char *lp_parm_talloc_string(int snum, const char *type, const char *option, cons const char *lp_parm_const_string(int snum, const char *type, const char *option, const char *def) { struct param_opt_struct *data = get_parametrics(snum, type, option); - + if (data == NULL||data->value==NULL) return def; - + return data->value; } @@ -5837,7 +5923,7 @@ const char **lp_parm_string_list(int snum, const char *type, const char *option, if (data == NULL||data->value==NULL) return (const char **)def; - + if (data->list==NULL) { data->list = str_list_make_v3(talloc_autofree_context(), data->value, NULL); } @@ -5851,7 +5937,7 @@ const char **lp_parm_string_list(int snum, const char *type, const char *option, int lp_parm_int(int snum, const char *type, const char *option, int def) { struct param_opt_struct *data = get_parametrics(snum, type, option); - + if (data && data->value && *data->value) return lp_int(data->value); @@ -5864,7 +5950,7 @@ int lp_parm_int(int snum, const char *type, const char *option, int def) unsigned long lp_parm_ulong(int snum, const char *type, const char *option, unsigned long def) { struct param_opt_struct *data = get_parametrics(snum, type, option); - + if (data && data->value && *data->value) return lp_ulong(data->value); @@ -5877,7 +5963,7 @@ unsigned long lp_parm_ulong(int snum, const char *type, const char *option, unsi bool lp_parm_bool(int snum, const char *type, const char *option, bool def) { struct param_opt_struct *data = get_parametrics(snum, type, option); - + if (data && data->value && *data->value) return lp_bool(data->value); @@ -5891,7 +5977,7 @@ int lp_parm_enum(int snum, const char *type, const char *option, const struct enum_list *_enum, int def) { struct param_opt_struct *data = get_parametrics(snum, type, option); - + if (data && data->value && *data->value && _enum) return lp_enum(data->value, _enum); @@ -5981,7 +6067,7 @@ static void free_service_byindex(int idx) if (ServicePtrs[idx]->szService) { char *canon_name = canonicalize_servicename( ServicePtrs[idx]->szService ); - + dbwrap_delete_bystring(ServiceHash, canon_name ); TALLOC_FREE(canon_name); } @@ -6023,7 +6109,7 @@ static int add_a_service(const struct service *pservice, const char *name) if (i == iNumServices) { struct service **tsp; int *tinvalid; - + tsp = SMB_REALLOC_ARRAY_KEEP_OLD_ON_ERROR(ServicePtrs, struct service *, num_to_alloc); if (tsp == NULL) { DEBUG(0,("add_a_service: failed to enlarge ServicePtrs!\n")); @@ -6056,14 +6142,14 @@ static int add_a_service(const struct service *pservice, const char *name) copy_service(ServicePtrs[i], &tservice, NULL); if (name) string_set(&ServicePtrs[i]->szService, name); - + DEBUG(8,("add_a_service: Creating snum = %d for %s\n", i, ServicePtrs[i]->szService)); if (!hash_a_service(ServicePtrs[i]->szService, i)) { return (-1); } - + return (i); } @@ -6128,6 +6214,11 @@ bool lp_add_home(const char *pszHomename, int iDefaultService, { int i; + if (pszHomename == NULL || user == NULL || pszHomedir == NULL || + pszHomedir[0] == '\0') { + return false; + } + i = add_a_service(ServicePtrs[iDefaultService], pszHomename); if (i < 0) @@ -6241,7 +6332,7 @@ bool lp_add_printer(const char *pszPrintername, int iDefaultService) ServicePtrs[i]->bOpLocks = False; /* Printer services must be printable. */ ServicePtrs[i]->bPrint_ok = True; - + DEBUG(3, ("adding printer service %s\n", pszPrintername)); return (True); @@ -6731,7 +6822,7 @@ static void copy_service(struct service *pserviceDest, struct service *pserviceS bitmap_copy(pserviceDest->copymap, pserviceSource->copymap); } - + data = pserviceSource->param_opt; while (data) { set_param_opt(&pserviceDest->param_opt, data->key, data->value); @@ -6967,6 +7058,7 @@ static void add_to_file_list(const char *fname, const char *subfname) } f->subfname = SMB_STRDUP(subfname); if (!f->subfname) { + SAFE_FREE(f->name); SAFE_FREE(f); return; } @@ -6977,6 +7069,7 @@ static void add_to_file_list(const char *fname, const char *subfname) if (t) f->modtime = t; } + return; } /** @@ -7026,7 +7119,6 @@ bool lp_file_list_changed(void) DEBUG(6, ("lp_file_list_changed()\n")); while (f) { - char *n2 = NULL; time_t mod_time; if (strequal(f->name, INCLUDE_REGISTRY_NAME)) { @@ -7042,9 +7134,11 @@ bool lp_file_list_changed(void) return true; } } else { - n2 = alloc_sub_basic(get_current_username(), - current_user_info.domain, - f->name); + char *n2 = NULL; + n2 = talloc_sub_basic(talloc_tos(), + get_current_username(), + current_user_info.domain, + f->name); if (!n2) { return false; } @@ -7063,12 +7157,11 @@ bool lp_file_list_changed(void) ctime(&mod_time))); f->modtime = mod_time; SAFE_FREE(f->subfname); - f->subfname = n2; /* Passing ownership of - return from alloc_sub_basic - above. */ + f->subfname = SMB_STRDUP(n2); + TALLOC_FREE(n2); return true; } - SAFE_FREE(n2); + TALLOC_FREE(n2); } f = f->next; } @@ -7085,12 +7178,12 @@ bool lp_file_list_changed(void) static bool handle_netbios_name(int snum, const char *pszParmValue, char **ptr) { bool ret; - char *netbios_name = alloc_sub_basic(get_current_username(), - current_user_info.domain, - pszParmValue); + char *netbios_name = talloc_sub_basic( + talloc_tos(), get_current_username(), current_user_info.domain, + pszParmValue); ret = set_global_myname(netbios_name); - SAFE_FREE(netbios_name); + TALLOC_FREE(netbios_name); string_set(&Globals.szNetbiosName,global_myname()); DEBUG(4, ("handle_netbios_name: set global_myname to: %s\n", @@ -7113,17 +7206,17 @@ static bool handle_charset(int snum, const char *pszParmValue, char **ptr) static bool handle_workgroup(int snum, const char *pszParmValue, char **ptr) { bool ret; - + ret = set_global_myworkgroup(pszParmValue); string_set(&Globals.szWorkgroup,lp_workgroup()); - + return ret; } static bool handle_netbios_scope(int snum, const char *pszParmValue, char **ptr) { bool ret; - + ret = set_global_scope(pszParmValue); string_set(&Globals.szNetbiosScope,global_scope()); @@ -7169,9 +7262,9 @@ static bool handle_include(int snum, const char *pszParmValue, char **ptr) } } - fname = alloc_sub_basic(get_current_username(), - current_user_info.domain, - pszParmValue); + fname = talloc_sub_basic(talloc_tos(), get_current_username(), + current_user_info.domain, + pszParmValue); add_to_file_list(pszParmValue, fname); @@ -7182,12 +7275,12 @@ static bool handle_include(int snum, const char *pszParmValue, char **ptr) include_depth++; ret = pm_process(fname, do_section, do_parameter, NULL); include_depth--; - SAFE_FREE(fname); + TALLOC_FREE(fname); return ret; } DEBUG(2, ("Can't find include file %s\n", fname)); - SAFE_FREE(fname); + TALLOC_FREE(fname); return true; } @@ -7804,7 +7897,7 @@ static void dump_globals(FILE *f) { int i; struct param_opt_struct *data; - + fprintf(f, "[global]\n"); for (i = 0; parm_table[i].label; i++) @@ -7849,7 +7942,7 @@ static void dump_a_service(struct service *pService, FILE * f) { int i; struct param_opt_struct *data; - + if (pService != &sDefault) fprintf(f, "[%s]\n", pService->szService); @@ -7861,7 +7954,6 @@ static void dump_a_service(struct service *pService, FILE * f) (*parm_table[i].label != '-') && (i == 0 || (parm_table[i].ptr != parm_table[i - 1].ptr))) { - int pdiff = PTR_DIFF(parm_table[i].ptr, &sDefault); if (pService == &sDefault) { @@ -7998,7 +8090,7 @@ struct parm_struct *lp_next_parameter(int snum, int *i, int allparameters) && (parm_table[*i].ptr == parm_table[(*i) - 1].ptr)) continue; - + if (is_default(*i) && !allparameters) continue; @@ -8099,7 +8191,7 @@ static void lp_add_auto_services(char *str) home = get_user_home_dir(talloc_tos(), p); - if (home && homes >= 0) + if (home && home[0] && homes >= 0) lp_add_home(p, homes, p, home); TALLOC_FREE(home); @@ -8502,7 +8594,7 @@ enum usershare_err parse_usershare_file(TALLOC_CTX *ctx, /* Ensure the owner of the usershare file has permission to share this directory. */ - if (sys_stat(sharepath, &sbuf) == -1) { + if (sys_stat(sharepath, &sbuf, false) == -1) { DEBUG(2,("parse_usershare_file: share %s : stat failed on path %s. %s\n", servicename, sharepath, strerror(errno) )); sys_closedir(dp); @@ -8574,7 +8666,7 @@ static int process_usershare_file(const char *dir_name, const char *file_name, i /* Minimize the race condition by doing an lstat before we open and fstat. Ensure this isn't a symlink link. */ - if (sys_lstat(fname, &lsbuf) != 0) { + if (sys_lstat(fname, &lsbuf, false) != 0) { DEBUG(0,("process_usershare_file: stat of %s failed. %s\n", fname, strerror(errno) )); SAFE_FREE(fname); @@ -8627,7 +8719,7 @@ static int process_usershare_file(const char *dir_name, const char *file_name, i } /* Now fstat to be *SURE* it's a regular file. */ - if (sys_fstat(fd, &sbuf) != 0) { + if (sys_fstat(fd, &sbuf, false) != 0) { close(fd); DEBUG(0,("process_usershare_file: fstat of %s failed. %s\n", fname, strerror(errno) )); @@ -8745,7 +8837,7 @@ static bool usershare_exists(int iService, struct timespec *last_mod) return false; } - if (sys_lstat(fname, &lsbuf) != 0) { + if (sys_lstat(fname, &lsbuf, false) != 0) { SAFE_FREE(fname); return false; } @@ -8775,7 +8867,7 @@ int load_usershare_service(const char *servicename) return -1; } - if (sys_stat(usersharepath, &sbuf) != 0) { + if (sys_stat(usersharepath, &sbuf, false) != 0) { DEBUG(0,("load_usershare_service: stat of %s failed. %s\n", usersharepath, strerror(errno) )); return -1; @@ -8852,7 +8944,7 @@ int load_usershare_shares(void) return lp_numservices(); } - if (sys_stat(usersharepath, &sbuf) != 0) { + if (sys_stat(usersharepath, &sbuf, false) != 0) { DEBUG(0,("load_usershare_shares: stat of %s failed. %s\n", usersharepath, strerror(errno) )); return ret; @@ -9070,7 +9162,7 @@ bool lp_load_ex(const char *pszFname, iServiceIndex = -1; if (lp_config_backend_is_file()) { - n2 = alloc_sub_basic(get_current_username(), + n2 = talloc_sub_basic(talloc_tos(), get_current_username(), current_user_info.domain, pszFname); if (!n2) { @@ -9080,7 +9172,7 @@ bool lp_load_ex(const char *pszFname, add_to_file_list(pszFname, n2); bRetval = pm_process(n2, do_section, do_parameter, NULL); - SAFE_FREE(n2); + TALLOC_FREE(n2); /* finish up the last section */ DEBUG(4, ("pm_process() returned %s\n", BOOLSTR(bRetval))); @@ -9245,11 +9337,11 @@ int lp_servicenumber(const char *pszServiceName) { int iService; fstring serviceName; - + if (!pszServiceName) { return GLOBAL_SECTION_SNUM; } - + for (iService = iNumServices - 1; iService >= 0; iService--) { if (VALID(iService) && ServicePtrs[iService]->szService) { /* @@ -9399,7 +9491,7 @@ const char *volume_label(int snum) if (!*label) { label = lp_servicename(snum); } - + /* This returns a 33 byte guarenteed null terminated string. */ ret = talloc_strndup(talloc_tos(), label, 32); if (!ret) { @@ -9671,7 +9763,7 @@ bool lp_use_sendfile(int snum, struct smb_signing_state *signing_state) bool sign_active = false; /* Using sendfile blows the brains out of any DOS or Win9x TCP stack... JRA. */ - if (Protocol < PROTOCOL_NT1) { + if (get_Protocol() < PROTOCOL_NT1) { return false; } if (signing_state) { @@ -9772,7 +9864,7 @@ int lp_min_receive_file_size(void) const char *lp_socket_address(void) { char *sock_addr = Globals.szSocketAddress; - + if (sock_addr[0] == '\0'){ string_set(&Globals.szSocketAddress, "0.0.0.0"); }