From 5eecc854236f0b943aaa89e0c3a46f9fbd208ca9 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 20 Jun 2011 18:40:33 +0930 Subject: [PATCH] tdb2: create tdb2 versions of various testing TDBs. Soon, TDB2 will handle tdb1 files, but until then, we substitute. Signed-off-by: Rusty Russell --- lib/tdb/python/tests/simple.py | 63 +++++++++++++++-------- lib/tdb2/pytdb.c | 14 ++++- selftest/target/Samba3.pm | 6 ++- selftest/wscript | 3 ++ source3/selftest/ktest-secrets.tdb2 | Bin 0 -> 14592 bytes source4/scripting/python/samba/samba3.py | 7 ++- testdata/samba3/account_policy.tdb2 | Bin 0 -> 12192 bytes testdata/samba3/group_mapping.tdb2 | Bin 0 -> 14592 bytes testdata/samba3/passdb.tdb2 | Bin 0 -> 11392 bytes testdata/samba3/registry.tdb2 | Bin 0 -> 15392 bytes testdata/samba3/secrets.tdb2 | Bin 0 -> 17792 bytes testdata/samba3/share_info.tdb2 | Bin 0 -> 11392 bytes testdata/samba3/winbindd_idmap.tdb2 | Bin 0 -> 15392 bytes 13 files changed, 68 insertions(+), 25 deletions(-) create mode 100644 source3/selftest/ktest-secrets.tdb2 create mode 100644 testdata/samba3/account_policy.tdb2 create mode 100644 testdata/samba3/group_mapping.tdb2 create mode 100644 testdata/samba3/passdb.tdb2 create mode 100644 testdata/samba3/registry.tdb2 create mode 100644 testdata/samba3/secrets.tdb2 create mode 100644 testdata/samba3/share_info.tdb2 create mode 100644 testdata/samba3/winbindd_idmap.tdb2 diff --git a/lib/tdb/python/tests/simple.py b/lib/tdb/python/tests/simple.py index 99f31d2fcd7..2877092fe31 100644 --- a/lib/tdb/python/tests/simple.py +++ b/lib/tdb/python/tests/simple.py @@ -20,8 +20,13 @@ class OpenTdbTests(TestCase): class CloseTdbTests(TestCase): def test_double_close(self): - self.tdb = tdb.Tdb(tempfile.mkstemp()[1], 0, tdb.DEFAULT, - os.O_CREAT|os.O_RDWR) + # No hash size in tdb2. + if tdb.__version__.startswith("2"): + self.tdb = tdb.Tdb(tempfile.mkstemp()[1], tdb.DEFAULT, + os.O_CREAT|os.O_RDWR) + else: + self.tdb = tdb.Tdb(tempfile.mkstemp()[1], 0, tdb.DEFAULT, + os.O_CREAT|os.O_RDWR) self.assertNotEqual(None, self.tdb) # ensure that double close does not crash python @@ -42,8 +47,12 @@ class SimpleTdbTests(TestCase): def setUp(self): super(SimpleTdbTests, self).setUp() - self.tdb = tdb.Tdb(tempfile.mkstemp()[1], 0, tdb.DEFAULT, - os.O_CREAT|os.O_RDWR) + if tdb.__version__.startswith("2"): + self.tdb = tdb.Tdb(tempfile.mkstemp()[1], tdb.DEFAULT, + os.O_CREAT|os.O_RDWR) + else: + self.tdb = tdb.Tdb(tempfile.mkstemp()[1], 0, tdb.DEFAULT, + os.O_CREAT|os.O_RDWR) self.assertNotEqual(None, self.tdb) def tearDown(self): @@ -56,7 +65,8 @@ class SimpleTdbTests(TestCase): self.tdb.lock_all() def test_max_dead(self): - self.tdb.max_dead = 20 + if not tdb.__version__.startswith("2"): + self.tdb.max_dead = 20 def test_unlockall(self): self.tdb.lock_all() @@ -67,7 +77,8 @@ class SimpleTdbTests(TestCase): self.tdb.read_unlock_all() def test_reopen(self): - self.tdb.reopen() + if not tdb.__version__.startswith("2"): + self.tdb.reopen() def test_store(self): self.tdb.store("bar", "bla") @@ -75,7 +86,8 @@ class SimpleTdbTests(TestCase): def test_getitem(self): self.tdb["bar"] = "foo" - self.tdb.reopen() + if not tdb.__version__.startswith("2"): + self.tdb.reopen() self.assertEquals("foo", self.tdb["bar"]) def test_delete(self): @@ -91,13 +103,16 @@ class SimpleTdbTests(TestCase): self.assertRaises(KeyError, lambda: self.tdb["bla"]) def test_hash_size(self): - self.tdb.hash_size + if not tdb.__version__.startswith("2"): + self.tdb.hash_size def test_map_size(self): - self.tdb.map_size + if not tdb.__version__.startswith("2"): + self.tdb.map_size def test_freelist_size(self): - self.tdb.freelist_size + if not tdb.__version__.startswith("2"): + self.tdb.freelist_size def test_name(self): self.tdb.filename @@ -145,17 +160,19 @@ class SimpleTdbTests(TestCase): self.assertEquals(0, len(list(self.tdb))) def test_repack(self): - self.tdb["foo"] = "abc" - self.tdb["bar"] = "def" - del self.tdb["foo"] - self.tdb.repack() + if not tdb.__version__.startswith("2"): + self.tdb["foo"] = "abc" + self.tdb["bar"] = "def" + del self.tdb["foo"] + self.tdb.repack() def test_seqnum(self): - self.tdb.enable_seqnum() - seq1 = self.tdb.seqnum - self.tdb.increment_seqnum_nonblock() - seq2 = self.tdb.seqnum - self.assertEquals(seq2-seq1, 1) + if not tdb.__version__.startswith("2"): + self.tdb.enable_seqnum() + seq1 = self.tdb.seqnum + self.tdb.increment_seqnum_nonblock() + seq2 = self.tdb.seqnum + self.assertEquals(seq2-seq1, 1) def test_len(self): self.assertEquals(0, len(list(self.tdb))) @@ -163,8 +180,12 @@ class SimpleTdbTests(TestCase): self.assertEquals(1, len(list(self.tdb))) def test_add_flags(self): - self.tdb.add_flags(tdb.NOMMAP) - self.tdb.remove_flags(tdb.NOMMAP) + if tdb.__version__.startswith("2"): + self.tdb.add_flag(tdb.NOMMAP) + self.tdb.remove_flag(tdb.NOMMAP) + else: + self.tdb.add_flags(tdb.NOMMAP) + self.tdb.remove_flags(tdb.NOMMAP) class VersionTests(TestCase): diff --git a/lib/tdb2/pytdb.c b/lib/tdb2/pytdb.c index 86f604874b9..c760045508c 100644 --- a/lib/tdb2/pytdb.c +++ b/lib/tdb2/pytdb.c @@ -72,12 +72,21 @@ static PyObject *PyString_FromTDB_DATA(TDB_DATA data) return NULL; \ } +static void stderr_log(struct tdb_context *tdb, + enum tdb_log_level level, + const char *message, + void *data) +{ + fprintf(stderr, "%s:%s\n", tdb_name(tdb), message); +} + static PyObject *py_tdb_open(PyTypeObject *type, PyObject *args, PyObject *kwargs) { char *name = NULL; int tdb_flags = TDB_DEFAULT, flags = O_RDWR, mode = 0600; struct tdb_context *ctx; PyTdbObject *ret; + union tdb_attribute logattr; const char *kwnames[] = { "name", "tdb_flags", "flags", "mode", NULL }; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|siii", (char **)kwnames, &name, &tdb_flags, &flags, &mode)) @@ -87,7 +96,10 @@ static PyObject *py_tdb_open(PyTypeObject *type, PyObject *args, PyObject *kwarg tdb_flags |= TDB_INTERNAL; } - ctx = tdb_open(name, tdb_flags, flags, mode, NULL); + logattr.log.base.attr = TDB_ATTRIBUTE_LOG; + logattr.log.base.next = NULL; + logattr.log.fn = stderr_log; + ctx = tdb_open(name, tdb_flags, flags, mode, &logattr); if (ctx == NULL) { PyErr_SetFromErrno(PyExc_IOError); return NULL; diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index 595780aa145..505130f5962 100644 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -424,7 +424,11 @@ $ret->{USERNAME} = KTEST\\Administrator #Samba4 DC with the same parameters as are being used here. The #domain SID is S-1-5-21-1071277805-689288055-3486227160 - system("cp $self->{srcdir}/source3/selftest/ktest-secrets.tdb $prefix/private/secrets.tdb"); + if (defined($ENV{BUILD_TDB2})) { + system("cp $self->{srcdir}/source3/selftest/ktest-secrets.tdb2 $prefix/private/secrets.tdb"); + } else { + system("cp $self->{srcdir}/source3/selftest/ktest-secrets.tdb $prefix/private/secrets.tdb"); + } chmod 0600, "$prefix/private/secrets.tdb"; #This uses a pre-calculated krb5 credentials cache, obtained by running Samba4 with: diff --git a/selftest/wscript b/selftest/wscript index ab9f269b792..558cb2abd2e 100644 --- a/selftest/wscript +++ b/selftest/wscript @@ -174,6 +174,9 @@ def cmd_testonly(opt): if env.USING_SYSTEM_LDB: os.environ['LDB_MODULES_PATH'] = 'bin/modules/ldb' + if env.BUILD_TDB2: + os.environ['BUILD_TDB2'] = '1' + # tell build system where to find config.h os.environ['VFSLIBDIR'] = os.path.abspath('bin/modules/vfs') os.environ['CONFIG_H'] = 'bin/default/include/config.h' diff --git a/source3/selftest/ktest-secrets.tdb2 b/source3/selftest/ktest-secrets.tdb2 new file mode 100644 index 0000000000000000000000000000000000000000..2af58b140f153d503b5b682d9d375881db2ce8ce GIT binary patch literal 14592 zcmeI#&1(}u7zXf-9~25gi#E2Nl-h!lPO8>WPdc59>C)ZJy0bMY7M8RorkFJ;Nile- zpeHYa2f=#t9}ux;4~igo@Fa+bis-?MO7X7l?rgzEQ7O_U=Gnszlkm>_yuW;q*vYZ| zg}G9`Q`y*csV_3|(ge&_=M2tWV= z5P$##AOL}O7KqB<`^)WYfY~9?D6lI3mtJptygl}X=(9+3Oj;jkjvTF?qGQCHp!ZJS zyX|rk!I{Nv5!WdjR}Jo%RESL4N)prJXX6t#7q&YynW|iIjWeUiE=(2`h51);pFF3# zd;K{=P0Fgsj^K%%J>K%M@cQKChdqa0Ej@o>)^;s^TT~SD$^4CT-a0%W*Qh*4x%yV_ z-}`&UKE=Gn%e(g%eY7;AS`abuW4GSb5A$8q*D`bU<$K|wf4BH^#g58;gW>zW(Z}06 zY@8Yf*BpDwTIhYgE|50V(d-svg#_+`OyH`Y)mD${$`I+4o57#QDMy zv6z}YULEoyyxAlBFLe2l6lE>Hpqi~3DaW)_gQ+If;z=&#Aw*Dpj1r!ux~Xx((t5F6 zt;I{_*<9&jEnlrANU)G<&Yj7Td_Ct@N_jF{c25QPKi7Lf!q4m1`fizH?H(ZE1_1~_ c00Izz00bZa0SG_<0uX=z1Rwwb2>cU)?|o&x-2eap literal 0 HcmV?d00001 diff --git a/source4/scripting/python/samba/samba3.py b/source4/scripting/python/samba/samba3.py index 2c323bd0b42..ae5b20edd27 100644 --- a/source4/scripting/python/samba/samba3.py +++ b/source4/scripting/python/samba/samba3.py @@ -50,9 +50,12 @@ class TdbDatabase(object): def __init__(self, file): """Open a file. - :param file: Path of the file to open. + :param file: Path of the file to open (appending "2" if TDB2 enabled). """ - self.tdb = tdb.Tdb(file, flags=os.O_RDONLY) + if tdb.__version__.startswith("2"): + self.tdb = tdb.Tdb(file + "2", flags=os.O_RDONLY) + else: + self.tdb = tdb.Tdb(file, flags=os.O_RDONLY) self._check_version() def _check_version(self): diff --git a/testdata/samba3/account_policy.tdb2 b/testdata/samba3/account_policy.tdb2 new file mode 100644 index 0000000000000000000000000000000000000000..434787e070cc3dcfdd09bb010a875bb45af4f6ae GIT binary patch literal 12192 zcmeI2&npCB7{}igkrP6;#4GZnl&g}9MLFQIIUBR@?oMXjSM$DOk)xAxB$PNgC{A*A zQ5+nU@-O%kobb*(V=YqJ)b7qc?_p|pzR&Y~zn{06Y1&OrPSCVvvqn$KMD{!TaUe-_)o= z0{=_k9PT?c|JxP2l{csm=4o%5N`|j)v>tccn)1Lq|6C7MU4!DxQSrh4}-ot)VnP0Nk$#R z%vzj%mYG?D7gqXZ{+!l)on(rd!sCkSnVw=Y7;`fKx~5Q literal 0 HcmV?d00001 diff --git a/testdata/samba3/group_mapping.tdb2 b/testdata/samba3/group_mapping.tdb2 new file mode 100644 index 0000000000000000000000000000000000000000..1a6466ea042a8e8ae4a3ae750da703d7e55f6d39 GIT binary patch literal 14592 zcmeI1O=#0#7{@ce@C%(ooV{htk5gFEBu#=c-C8UY){d>ki3oNzgJ6@CBvpFxCVKLy z>^3}$NAcjnn;t!F7nPmFlY*y;pgwQj5^JC#bY#Qyc@O% zPx|{7y?#}a*1`Np00|^VpiR%`)5$4d<~Rh#=y}|WGZ*LV9DxV)KGoSdMN~opNB{|> zi@-~IpRtlISLg-_Ab~Uzkm&P`?`iZ#Jay>rjVEdKhrZ$vSUvS_B+k6#=Zv0DUSk*( zI+wuZ>9x$$1JrG`G`Cz_ELRt%mNY2NYM$-5uqp44 z<40(o4w(fboF^-ASxMmqmDh4PPE<8bRdOP)aoL=xsG6iG8Yc^qFSG~Z3$|G^EVkIv zU5}^~$o(MHd96==Qm32^>Ri;D4Wr&u;>J-LKfVv%VT9}ReddDrK(|TG>!ACi`_F4Q zE{-pe=LP1=UWOssSM`ReJ1$$QutmpiHJSN#-Zo9$f=4+(@*7L_qI^n9Q0IbuPj}d= z3mG8};_siJ@vr)Dic_yFh~eW9D10P+LXJa3zsUUG`W(aZdfVkO;Rx~L5%Cgj1L9!j zwrN;~>jm9*OQ7+aQSoY^KU1&Ut$!<^4LflW@{F!!=HZQuxzd&L)Lp=6*cL+?u-n(u z7vLk*8?`=UA<&zx)$g>Ly@tDaK8?{lo6rVig!{aZ*Uj%t_^9AP?k8GOB@eayc*xtbX%$UgxZ@ujcyhRIyMb&%9Ax)CqweWw1F` z)G=+;l+h3v4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!3h(Lm&atKQkd$|ERvv5THf~ zSVGd_32K-%YQ|^?jE2By2!KLhiYho9W{rl%Xb6nt5Ll}M_PxzW4ues@6CVQ2kn~bV zypF-8QW(;nyfwI7HR_tt5Eu=C(GZ|^2&9RfV5GL0#F^IsUUfm7+EG=+hX9v4P_4jB z$y%tEAWxTg0}wDwGiAujPs&fJWMFW1cK%=hQ5TD@&N$VAp(sDU1gy&0SrD`i2Ag?F zNfr!QsX4i+MPQYmq#^3&@Inj>4R#HRhsgtl{{R1955gc>-c}K35C-wtfqbYk5Yx%k zB|I{S0h}m>fqXBp4GLkYMS1!8nOQnIIzT~G09Ff6#bCw`ZU%;(Kr8@MDQRf1O{%`} zz^cnzOt*@#yaS0HS||VPnMX@AOi&$RxpSHX$2q#It&v4#gV}q79h{r zInxeE0mH`^D(C6v=C5CtT2!2wpU1!i5(EY|5X{wtsGG$DQ3wtnNH_xpfVS0xFi1`s z7&0IX;(w;PpL`yDs_F?FLFmlem&W3xf#iI5lfpm>FrWB)#YVgw0* UvH$=8 literal 0 HcmV?d00001 diff --git a/testdata/samba3/registry.tdb2 b/testdata/samba3/registry.tdb2 new file mode 100644 index 0000000000000000000000000000000000000000..d747c3d055ab3a6b6f45dc2b1bbd27627bcae580 GIT binary patch literal 15392 zcmeHNO>7%Q6rMlA+34f)in}!yZ5Gpz2P2*zku68%JiV%_Gtlh2FyViJ< zHisUN=nWx+0JUc-L;)d$RBi|a65_xKkl=(Wap(mq1eLf{h&S`ri8qa7$8MdZnUUW7`pm>LqIaM^-mKSM$iwHG)&9EOAMF>tH|k?~U7rk0 zp`U(RpW1DFt$un+*f7>BOAeyE4|*l=gW=Th2Lx3pZ5ugkM>&bt&(@+ae;KI zj<*~A)ABj@t#}(CZ`Sw8t7M=X1}aZ>v%CAf+wgtjMDk*rzWYb8+KaPETn^qb}4~)M`C#T zxSda$s*+7pQ@3EG4BfOBA^Q#?-qFtSRC7F&9#e*fo^Md} zLw+9Ld7=Lr-Xmytq$lCRvTl(DwV)Id0+t=+n_<1Wu->q-i+1nZ4kO_4g_xerc(hbA zm!_(vWRhAosqvv|D%J#W6q$ZiLA+P*K`ATxh1>;;XyAt|@QCHGIk)K4gxd7IhY{!Z z=$EXRoy+<|7*A&zbNn#pu$mjd%P_rk7;%R0ZPaHKekFIqMuWM2NQ{7mHDWldKv%;1!ZCvtLZAy96kUG&h3Pi3Gm-u#J7^! zvE-Dg9?K;&N^4S<4^pnPRj5oC62dTtCAevVK<*J}^uAH}?jXO?kQiBAOWV4+m<$kV zSNMOV0NzL>paa!0AB2`7Cqw`r--fu?W4NvOkHxP*v`!WnkG=PI0Uq$JorEj2ZuvGj zAqM}3G9e_ToKj)d3$1Dpcqx}T#V}y=VrCrVQ8GeaA$j5wpUjYeoF+9GTVx)tA#q5B zJWGbfohr-*#Dl&;m{`x}8LZ)>|-Kz-0s91w#=GJoh!P-|@PX;(7{UF#lEpx*%_e$11co^;dIH_%r%3 z+ypo$hM@~MXSrXYE#uFY!Lk6#V=U#?s$OAU19F6655YZ^%mMX2I4D6f;FL1I$5_DX zwT-7c{|IA5-2N~CL(uC?jL%inB@8Nb6|YW_qdZ=R0JjvYcg;+U{3PmdRO47MGg}Px zY6$fcy!Fc-z=M29a`mBgkhk#^5Ga(6b3E{WN{l(~r08wobte`V)Wju%Hu}{AFarBl z`MlCp9u@p4oivkKRV1T;?H@$E_;bG*U-3M-2@F&$??Aj?SN5y$Ti*3&g3~oPOAu17 z=R-rh3%Br72S0-lJlxdt!b6Jz>Xe-Q2<&Fo(3pA7wPv`Ouv@)*7?JD xYbXuTx%R&^9JisNx8%2EKr$d1kPJu$Bm`q~u4T!b45C}GD1dEU>Xk}sPDZD@~-~sIH zZI%#%F`Ft7lr%wnznFoU|K~Gr+Ucd8)4V^psqSqTw~grhyK**rA5LFG@etPsVKn}1 zoo#oXDgp!u5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAVA>%3Dla)I~TjTd44pB zcGG!N*SpeV)3)^=1YV982`5jDgIbxGg`^vLS)5&@aVMmgSKVlTxl^exro3oBzFiML z?ho6~W&SV6Wc5z-V(p(yA_x#5K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk I1pbu37g4?f&Hw-a literal 0 HcmV?d00001 diff --git a/testdata/samba3/share_info.tdb2 b/testdata/samba3/share_info.tdb2 new file mode 100644 index 0000000000000000000000000000000000000000..96e4c7aaf8924902da9742f8ba0e9715af0da8b8 GIT binary patch literal 11392 zcmeI%F$%&k7>41dn@-X}C@zZ7)sAsh5d^Ic&MwlHf<#bo@d%#4n}`RH-k_@o@C;Jh zW_8I@&^JQ@Nxmfivt~URb)#e#HZ8NJT;UZ-@A>l2t8Cu6-?rlNh-J_0JW>dl2sr&R zwK2((K>z^+5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#~EcY&y#ih2!X_3vHp zBYx<1HT)FQy1ENp(=3=S2dD6GO!msMi^*}>wEJ5&^hP~YtMmvUfB*srAbb+D?!Lg{(DHsPWGAq^PAo5W~=!y>H2S-)WwQ$^G~Y0SG_<0uX>e?*$HCm<<2jzk8ny z3HnjsgwDs=wB7@H?kuN$uh-)ZdJcZv>l~OL0{tW~M%UeFKlO}WA#mRX=IQ>wnC(6q z=Ws1gxvm=oTuH~&a+R{3u-0Ce zb##)t&J@>qFsbv59OW;fJYirOj5|$Frt|O#s#75*R