diff options
author | Gerald Carter <jerry@samba.org> | 2004-04-29 05:36:28 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2004-04-29 05:36:28 +0000 |
commit | 59ee0c387c7eded9068997128eedbf985855198d (patch) | |
tree | ed8fb755e486fb9dae32b731229f95c86e1916eb | |
parent | 984fc11a4763b867eedcab975e5e8881798551ff (diff) | |
download | samba-59ee0c387c7eded9068997128eedbf985855198d.tar.gz |
r396: * Merges from 3.0:
svn merge -r 299:316 $SVN_3_0
svn merge -r 316:319 $SVN_3_0
svn merge -r 328:329 $SVN_3_0
svn merge -r 329:333 $SVN_3_0
svn merge -r 333:340 $SVN_3_0
svn merge -r 370:376 $SVN_3_0
svn merge -r 378:379 $SVN_3_0
svn merge -r 379:384 $SVN_3_0
svn merge -r 384:393 $SVN_3_0
svn merge -r 393:395 $SVN_3_0
* Setting version to 3.0.3
-rw-r--r-- | examples/pdb/mysql/mysql.dump | 2 | ||||
-rw-r--r-- | source/Makefile.in | 6 | ||||
-rw-r--r-- | source/VERSION | 2 | ||||
-rw-r--r-- | source/configure.in | 5 | ||||
-rw-r--r-- | source/lib/util_sid.c | 22 | ||||
-rw-r--r-- | source/modules/vfs_shadow_copy.c | 227 | ||||
-rw-r--r-- | source/nsswitch/winbindd.h | 2 | ||||
-rw-r--r-- | source/nsswitch/winbindd_group.c | 6 | ||||
-rw-r--r-- | source/nsswitch/winbindd_pam.c | 18 | ||||
-rw-r--r-- | source/nsswitch/winbindd_user.c | 6 | ||||
-rw-r--r-- | source/nsswitch/wins.c | 4 | ||||
-rw-r--r-- | source/passdb/login_cache.c | 4 | ||||
-rw-r--r-- | source/passdb/passdb.c | 13 | ||||
-rw-r--r-- | source/python/py_tdb.c | 32 | ||||
-rw-r--r-- | source/python/py_tdb.h | 24 |
15 files changed, 313 insertions, 60 deletions
diff --git a/examples/pdb/mysql/mysql.dump b/examples/pdb/mysql/mysql.dump index 5da75f5745c..89013521543 100644 --- a/examples/pdb/mysql/mysql.dump +++ b/examples/pdb/mysql/mysql.dump @@ -33,5 +33,5 @@ CREATE TABLE user ( unknown_5 int(9), unknown_6 int(9), bad_password_count int(9), - logon_count(9) + logon_count int(9) ); diff --git a/source/Makefile.in b/source/Makefile.in index de7ee10bb40..2203af089bc 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -320,6 +320,7 @@ VFS_DEFAULT_QUOTA_OBJ = modules/vfs_default_quota.o VFS_READONLY_OBJ = modules/vfs_readonly.o modules/getdate.o VFS_CAP_OBJ = modules/vfs_cap.o VFS_EXPAND_MSDFS_OBJ = modules/vfs_expand_msdfs.o +VFS_SHADOW_COPY_OBJ = modules/vfs_shadow_copy.o PLAINTEXT_AUTH_OBJ = auth/pampass.o auth/pass_check.o @@ -1169,6 +1170,11 @@ bin/readonly.@SHLIBEXT@: $(VFS_READONLY_OBJ:.o=.@PICSUFFIX@) @$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_READONLY_OBJ:.o=.@PICSUFFIX@) \ @SONAMEFLAG@`basename $@` +bin/shadow_copy.@SHLIBEXT@: $(VFS_SHADOW_COPY_OBJ:.o=.@PICSUFFIX@) + @echo "Building plugin $@" + @$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_SHADOW_COPY_OBJ:.o=.@PICSUFFIX@) \ + @SONAMEFLAG@`basename $@` + bin/cap.@SHLIBEXT@: $(VFS_CAP_OBJ:.o=.@PICSUFFIX@) @echo "Building plugin $@" @$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_CAP_OBJ:.o=.@PICSUFFIX@) \ diff --git a/source/VERSION b/source/VERSION index 7e1f8bda027..0136dd27e13 100644 --- a/source/VERSION +++ b/source/VERSION @@ -51,7 +51,7 @@ SAMBA_VERSION_PRE_RELEASE= # e.g. SAMBA_VERSION_RC_RELEASE=1 # # -> "3.0.0rc1" # ######################################################## -SAMBA_VERSION_RC_RELEASE=1 +SAMBA_VERSION_RC_RELEASE= ######################################################## # To mark SVN snapshots this should be set to 'yes' # diff --git a/source/configure.in b/source/configure.in index a03b37dd77b..bf8aa771b5c 100644 --- a/source/configure.in +++ b/source/configure.in @@ -360,7 +360,7 @@ dnl These have to be built static: default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_lsa_ds rpc_wks rpc_net rpc_dfs rpc_srv rpc_spoolss auth_rhosts auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin" dnl These are preferably build shared, and static if dlopen() is not available -default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs charset_CP850 charset_CP437" +default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy charset_CP850 charset_CP437" if test "x$developer" = xyes; then default_static_modules="$default_static_modules rpc_echo" @@ -4079,6 +4079,8 @@ case "$host_os" in # the Linux version. WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \ nsswitch/winbind_nss_linux.o" + WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT" + WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT" ;; *irix*) # IRIX has differently named shared libraries @@ -4333,6 +4335,7 @@ SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHL SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS) SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS) SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS) +SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS) SMB_SUBSYSTEM(VFS,smbd/vfs.o) AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules]) diff --git a/source/lib/util_sid.c b/source/lib/util_sid.c index e4043c4e927..6b27fc84ddb 100644 --- a/source/lib/util_sid.c +++ b/source/lib/util_sid.c @@ -174,6 +174,19 @@ NT_USER_TOKEN *get_system_token(void) return &system_token; } +/****************************************************************** + get the default domain/netbios name to be used when dealing + with our passdb list of accounts +******************************************************************/ + +const char *get_global_sam_name(void) +{ + if ((lp_server_role() == ROLE_DOMAIN_PDC) || (lp_server_role() == ROLE_DOMAIN_BDC)) { + return lp_workgroup(); + } + return global_myname(); +} + /************************************************************************** Splits a name of format \DOMAIN\name or name into its two components. Sets the DOMAIN name to global_myname() if it has not been specified. @@ -201,14 +214,7 @@ void split_domain_name(const char *fullname, char *domain, char *name) fstrcpy(domain, full_name); fstrcpy(name, p+1); } else { - if(!lp_domain_logons()) { - fstrcpy(domain, global_myname()); - fstrcpy(name, full_name); - } else { - fstrcpy(domain, lp_workgroup()); - fstrcpy(name, full_name); - } - fstrcpy(domain, global_myname()); + fstrcpy(domain, get_global_sam_name()); fstrcpy(name, full_name); } diff --git a/source/modules/vfs_shadow_copy.c b/source/modules/vfs_shadow_copy.c new file mode 100644 index 00000000000..7ad7b1f7b14 --- /dev/null +++ b/source/modules/vfs_shadow_copy.c @@ -0,0 +1,227 @@ +/* + * implementation of an Shadow Copy module + * + * Copyright (C) Stefan Metzmacher 2003-2004 + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "includes.h" + +/* + Please read the VFS module Samba-HowTo-Collection. + there's a chapter about this module + + For this share + Z:\ + + the ShadowCopies are in this directories + + Z:\@GMT-2003.08.05-12.00.00\ + Z:\@GMT-2003.08.05-12.01.00\ + Z:\@GMT-2003.08.05-12.02.00\ + + e.g. + + Z:\testfile.txt + Z:\@GMT-2003.08.05-12.02.00\testfile.txt + + or: + + Z:\testdir\testfile.txt + Z:\@GMT-2003.08.05-12.02.00\testdir\testfile.txt + + + Note: Files must differ to be displayed via Windows Explorer! + Directories are always displayed... +*/ + +static int vfs_shadow_copy_debug_level = DBGC_VFS; + +#undef DBGC_CLASS +#define DBGC_CLASS vfs_shadow_copy_debug_level + +#define SHADOW_COPY_PREFIX "@GMT-" +#define SHADOW_COPY_SAMPLE "@GMT-2004.02.18-15.44.00" + +typedef struct { + int pos; + int num; + struct dirent *dirs; +} shadow_copy_Dir; + +static BOOL shadow_copy_match_name(const char *name) +{ + if (strncmp(SHADOW_COPY_PREFIX,name, sizeof(SHADOW_COPY_PREFIX)-1)==0 && + (strlen(SHADOW_COPY_SAMPLE) == strlen(name))) { + return True; + } + + return False; +} + +static DIR *shadow_copy_opendir(vfs_handle_struct *handle, connection_struct *conn, const char *fname) +{ + shadow_copy_Dir *dirp; + DIR *p = SMB_VFS_NEXT_OPENDIR(handle,conn,fname); + + if (!p) { + DEBUG(0,("shadow_copy_opendir: SMB_VFS_NEXT_OPENDIR() failed for [%s]\n",fname)); + return NULL; + } + + dirp = (shadow_copy_Dir *)malloc(sizeof(shadow_copy_Dir)); + if (!dirp) { + DEBUG(0,("shadow_copy_opendir: Out of memory\n")); + SMB_VFS_NEXT_CLOSEDIR(handle,conn,p); + return NULL; + } + + ZERO_STRUCTP(dirp); + + while (True) { + struct dirent *d; + struct dirent *r; + + + d = SMB_VFS_NEXT_READDIR(handle, conn, p); + if (d == NULL) { + break; + } + + if (shadow_copy_match_name(d->d_name)) { + DEBUG(8,("shadow_copy_opendir: hide [%s]\n",d->d_name)); + continue; + } + + DEBUG(10,("shadow_copy_opendir: not hide [%s]\n",d->d_name)); + + r = (struct dirent *)Realloc(dirp->dirs,(dirp->num+1)*sizeof(struct dirent)); + if (!r) { + DEBUG(0,("shadow_copy_opendir: Out of memory\n")); + break; + } + + dirp->dirs = r; + dirp->dirs[dirp->num++] = *d; + } + + SMB_VFS_NEXT_CLOSEDIR(handle,conn,p); + return((DIR *)dirp); +} + +struct dirent *shadow_copy_readdir(vfs_handle_struct *handle, connection_struct *conn, DIR *_dirp) +{ + shadow_copy_Dir *dirp = (shadow_copy_Dir *)_dirp; + + if (dirp->pos < dirp->num) { + return &(dirp->dirs[dirp->pos++]); + } + + return NULL; +} + +int shadow_copy_closedir(vfs_handle_struct *handle, connection_struct *conn, DIR *_dirp) +{ + shadow_copy_Dir *dirp = (shadow_copy_Dir *)_dirp; + + SAFE_FREE(dirp); + + return 0; +} + +static int shadow_copy_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, BOOL labels) +{ + DIR *p = SMB_VFS_NEXT_OPENDIR(handle,fsp->conn,fsp->conn->connectpath); + + shadow_copy_data->num_volumes = 0; + shadow_copy_data->labels = NULL; + + if (!p) { + DEBUG(0,("shadow_copy_get_shadow_copy_data: SMB_VFS_NEXT_OPENDIR() failed for [%s]\n",fsp->conn->connectpath)); + return -1; + } + + while (True) { + SHADOW_COPY_LABEL *tlabels; + struct dirent *d; + + d = SMB_VFS_NEXT_READDIR(handle, fsp->conn, p); + if (d == NULL) { + break; + } + + /* */ + if (!shadow_copy_match_name(d->d_name)) { + DEBUG(10,("shadow_copy_get_shadow_copy_data: ignore [%s]\n",d->d_name)); + continue; + } + + DEBUG(7,("shadow_copy_get_shadow_copy_data: not ignore [%s]\n",d->d_name)); + + if (!labels) { + shadow_copy_data->num_volumes++; + continue; + } + + tlabels = (SHADOW_COPY_LABEL *)talloc_realloc(shadow_copy_data->mem_ctx, + shadow_copy_data->labels, + (shadow_copy_data->num_volumes+1)*sizeof(SHADOW_COPY_LABEL)); + if (tlabels == NULL) { + DEBUG(0,("shadow_copy_get_shadow_copy_data: Out of memory\n")); + SMB_VFS_NEXT_CLOSEDIR(handle,fsp->conn,p); + return -1; + } + + snprintf(tlabels[shadow_copy_data->num_volumes++], sizeof(*tlabels), "%s",d->d_name); + + shadow_copy_data->labels = tlabels; + } + + SMB_VFS_NEXT_CLOSEDIR(handle,fsp->conn,p); + return 0; +} + +/* VFS operations structure */ + +static vfs_op_tuple shadow_copy_ops[] = { + {SMB_VFS_OP(shadow_copy_opendir), SMB_VFS_OP_OPENDIR, SMB_VFS_LAYER_TRANSPARENT}, + {SMB_VFS_OP(shadow_copy_readdir), SMB_VFS_OP_READDIR, SMB_VFS_LAYER_TRANSPARENT}, + {SMB_VFS_OP(shadow_copy_closedir), SMB_VFS_OP_CLOSEDIR, SMB_VFS_LAYER_TRANSPARENT}, + + {SMB_VFS_OP(shadow_copy_get_shadow_copy_data), SMB_VFS_OP_GET_SHADOW_COPY_DATA,SMB_VFS_LAYER_OPAQUE}, + + {SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} +}; + +NTSTATUS vfs_shadow_copy_init(void) +{ + NTSTATUS ret = smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "shadow_copy", shadow_copy_ops); + + if (!NT_STATUS_IS_OK(ret)) + return ret; + + vfs_shadow_copy_debug_level = debug_add_class("shadow_copy"); + if (vfs_shadow_copy_debug_level == -1) { + vfs_shadow_copy_debug_level = DBGC_VFS; + DEBUG(0, ("%s: Couldn't register custom debugging class!\n", + "vfs_shadow_copy_init")); + } else { + DEBUG(10, ("%s: Debug class number of '%s': %d\n", + "vfs_shadow_copy_init","shadow_copy",vfs_shadow_copy_debug_level)); + } + + return ret; +} diff --git a/source/nsswitch/winbindd.h b/source/nsswitch/winbindd.h index e884ea83800..751f6f3700f 100644 --- a/source/nsswitch/winbindd.h +++ b/source/nsswitch/winbindd.h @@ -46,6 +46,8 @@ struct winbindd_cli_state { struct winbindd_request request; /* Request from client */ struct winbindd_response response; /* Respose to client */ + BOOL getpwent_initialized; /* Has getpwent_state been initialized? */ + BOOL getgrent_initialized; /* Has getgrent_state been initialized? */ struct getent_state *getpwent_state; /* State for getpwent() */ struct getent_state *getgrent_state; /* State for getgrent() */ }; diff --git a/source/nsswitch/winbindd_group.c b/source/nsswitch/winbindd_group.c index ec77d2db343..4800ab20cfa 100644 --- a/source/nsswitch/winbindd_group.c +++ b/source/nsswitch/winbindd_group.c @@ -472,6 +472,8 @@ enum winbindd_result winbindd_setgrent(struct winbindd_cli_state *state) DLIST_ADD(state->getgrent_state, domain_state); } + state->getgrent_initialized = True; + return WINBINDD_OK; } @@ -482,6 +484,7 @@ enum winbindd_result winbindd_endgrent(struct winbindd_cli_state *state) DEBUG(3, ("[%5lu]: endgrent\n", (unsigned long)state->pid)); free_getent_state(state->getgrent_state); + state->getgrent_initialized = False; state->getgrent_state = NULL; return WINBINDD_OK; @@ -632,6 +635,9 @@ enum winbindd_result winbindd_getgrent(struct winbindd_cli_state *state) group_list = (struct winbindd_gr *)state->response.extra_data; + if (!state->getgrent_initialized) + winbindd_setgrent(state); + if (!(ent = state->getgrent_state)) return WINBINDD_ERROR; diff --git a/source/nsswitch/winbindd_pam.c b/source/nsswitch/winbindd_pam.c index a2ebe0ddbc8..c1840b60533 100644 --- a/source/nsswitch/winbindd_pam.c +++ b/source/nsswitch/winbindd_pam.c @@ -71,7 +71,7 @@ static NTSTATUS check_info3_in_group(TALLOC_CTX *mem_ctx, } if (!string_to_sid(&required_membership_sid, group_sid)) { - DEBUG(0, ("winbindd_pam_auth: could not parse %s as a SID!", + DEBUG(0, ("check_info3_in_group: could not parse %s as a SID!", group_sid)); return NT_STATUS_INVALID_PARAMETER; @@ -274,8 +274,12 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) } } while ( (attempts < 2) && retry ); - - clnt_deal_with_creds(cli->sess_key, &(cli->clnt_cred), &ret_creds); + + if (cli != NULL) { + /* We might have come out of the loop above with cli == NULL, + so don't dereference that. */ + clnt_deal_with_creds(cli->sess_key, &(cli->clnt_cred), &ret_creds); + } if (NT_STATUS_IS_OK(result)) { netsamlogon_cache_store( cli->mem_ctx, &info3 ); @@ -526,8 +530,12 @@ enum winbindd_result winbindd_pam_auth_crap(struct winbindd_cli_state *state) } while ( (attempts < 2) && retry ); - clnt_deal_with_creds(cli->sess_key, &(cli->clnt_cred), &ret_creds); - + if (cli != NULL) { + /* We might have come out of the loop above with cli == NULL, + so don't dereference that. */ + clnt_deal_with_creds(cli->sess_key, &(cli->clnt_cred), &ret_creds); + } + if (NT_STATUS_IS_OK(result)) { netsamlogon_cache_store( cli->mem_ctx, &info3 ); wcache_invalidate_samlogon(find_domain_from_name(name_domain), &info3); diff --git a/source/nsswitch/winbindd_user.c b/source/nsswitch/winbindd_user.c index d10fd5664ba..40c398755d1 100644 --- a/source/nsswitch/winbindd_user.c +++ b/source/nsswitch/winbindd_user.c @@ -360,6 +360,8 @@ enum winbindd_result winbindd_setpwent(struct winbindd_cli_state *state) DLIST_ADD(state->getpwent_state, domain_state); } + state->getpwent_initialized = True; + return WINBINDD_OK; } @@ -370,6 +372,7 @@ enum winbindd_result winbindd_endpwent(struct winbindd_cli_state *state) DEBUG(3, ("[%5lu]: endpwent\n", (unsigned long)state->pid)); free_getent_state(state->getpwent_state); + state->getpwent_initialized = False; state->getpwent_state = NULL; return WINBINDD_OK; @@ -501,6 +504,9 @@ enum winbindd_result winbindd_getpwent(struct winbindd_cli_state *state) sizeof(struct winbindd_pw)); user_list = (struct winbindd_pw *)state->response.extra_data; + + if (!state->getpwent_initialized) + winbindd_setpwent(state); if (!(ent = state->getpwent_state)) return WINBINDD_ERROR; diff --git a/source/nsswitch/wins.c b/source/nsswitch/wins.c index 88c65b767f5..b71995998f5 100644 --- a/source/nsswitch/wins.c +++ b/source/nsswitch/wins.c @@ -100,7 +100,7 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count) *count = 0; /* always try with wins first */ - if (resolve_wins(name,0x20,&address,count)) { + if (resolve_wins(name,0x00,&address,count)) { if ( (ret = (struct in_addr *)malloc(sizeof(struct in_addr))) == NULL ) { free( address ); return NULL; @@ -118,7 +118,7 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count) /* uggh, we have to broadcast to each interface in turn */ for (j=iface_count() - 1;j >= 0;j--) { struct in_addr *bcast = iface_n_bcast(j); - ret = name_query(fd,name,0x20,True,True,*bcast,count, &flags, NULL); + ret = name_query(fd,name,0x00,True,True,*bcast,count, &flags, NULL); if (ret) break; } diff --git a/source/passdb/login_cache.c b/source/passdb/login_cache.c index 5acec64573b..fc05122ccaf 100644 --- a/source/passdb/login_cache.c +++ b/source/passdb/login_cache.c @@ -110,7 +110,9 @@ BOOL login_cache_write(const SAM_ACCOUNT *sampass, LOGIN_CACHE entry) TDB_DATA keybuf, databuf; BOOL ret; - + + if (!login_cache_init()) + return False; keybuf.dptr = strdup(pdb_get_nt_username(sampass)); if (!keybuf.dptr || !strlen(keybuf.dptr)) { diff --git a/source/passdb/passdb.c b/source/passdb/passdb.c index 04e41b79707..7ccb35c3f4b 100644 --- a/source/passdb/passdb.c +++ b/source/passdb/passdb.c @@ -46,19 +46,6 @@ const char *get_default_sam_name(void) return lp_workgroup(); } -/****************************************************************** - get the default domain/netbios name to be used when dealing - with our passdb list of accounts -******************************************************************/ - -const char *get_global_sam_name(void) -{ - if ((lp_server_role() == ROLE_DOMAIN_PDC) || (lp_server_role() == ROLE_DOMAIN_BDC)) { - return lp_workgroup(); - } - return global_myname(); -} - /************************************************************ Fill the SAM_ACCOUNT with default values. ***********************************************************/ diff --git a/source/python/py_tdb.c b/source/python/py_tdb.c index 37f64ce7802..6796469759b 100644 --- a/source/python/py_tdb.c +++ b/source/python/py_tdb.c @@ -3,27 +3,23 @@ Copyright (C) Tim Potter, 2002-2003 - 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 2 of the License, or - (at your option) any later version. + ** NOTE! The following LGPL license applies to the tdb python + ** scripting library. This does NOT imply that all of Samba is + ** released under the LGPL - This program is distributed in the hope that it will be useful, + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -/* - NOTE: Since tdb is licenced under the GPL any program that uses these bindings - must be distributed under the GPL license terms since this is what - the GPL requires. - - http://www.gnu.org/licenses/gpl-faq.html#IfInterpreterIsGPL + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "includes.h" diff --git a/source/python/py_tdb.h b/source/python/py_tdb.h index 69f251c8c1f..5134d2ff968 100644 --- a/source/python/py_tdb.h +++ b/source/python/py_tdb.h @@ -3,19 +3,23 @@ Copyright (C) Tim Potter, 2002 - 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 2 of the License, or - (at your option) any later version. + ** NOTE! The following LGPL license applies to the tdb python + ** scripting library. This does NOT imply that all of Samba is + ** released under the LGPL - This program is distributed in the hope that it will be useful, + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _PY_TDB_H |