Author: jelmer Date: 2007-11-21 11:56:41 +0000 (Wed, 21 Nov 2007) New Revision: 26069
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26069 Log: Import python bindings for credentials. Added: branches/SAMBA_4_0/source/auth/credentials/credentials.i branches/SAMBA_4_0/source/auth/credentials/tests/bindings.py Modified: branches/SAMBA_4_0/ branches/SAMBA_4_0/.bzrignore branches/SAMBA_4_0/source/auth/credentials/config.mk branches/SAMBA_4_0/source/selftest/samba4_tests.sh Changeset: Property changes on: branches/SAMBA_4_0 ___________________________________________________________________ Name: bzr:revision-info ...skipped... Name: bzr:file-ids ...skipped... Name: bzr:revision-id:v3-trunk0 ...skipped... Modified: branches/SAMBA_4_0/.bzrignore =================================================================== --- branches/SAMBA_4_0/.bzrignore 2007-11-21 11:47:55 UTC (rev 26068) +++ branches/SAMBA_4_0/.bzrignore 2007-11-21 11:56:41 UTC (rev 26069) @@ -207,3 +207,4 @@ *.po libtdb.so.* libtalloc.so.* +source/auth/credentials/credentials.py Modified: branches/SAMBA_4_0/source/auth/credentials/config.mk =================================================================== --- branches/SAMBA_4_0/source/auth/credentials/config.mk 2007-11-21 11:47:55 UTC (rev 26068) +++ branches/SAMBA_4_0/source/auth/credentials/config.mk 2007-11-21 11:56:41 UTC (rev 26069) @@ -22,3 +22,7 @@ HEIMDAL_GSSAPI # End SUBSYSTEM CREDENTIALS ################################# + +[PYTHON::swig_credentials] +PUBLIC_DEPENDENCIES = CREDENTIALS LIBPYTHON +SWIG_FILE = credentials.i Added: branches/SAMBA_4_0/source/auth/credentials/credentials.i =================================================================== --- branches/SAMBA_4_0/source/auth/credentials/credentials.i 2007-11-21 11:47:55 UTC (rev 26068) +++ branches/SAMBA_4_0/source/auth/credentials/credentials.i 2007-11-21 11:56:41 UTC (rev 26069) @@ -0,0 +1,93 @@ +/* + Unix SMB/CIFS implementation. + Copyright (C) Jelmer Vernooij <[EMAIL PROTECTED]> 2007 + + 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/>. +*/ + +%module(package="samba.credentials") credentials + +%{ + +/* Include headers */ +#include <stdint.h> +#include <stdbool.h> + +#include "includes.h" +#include "auth/credentials/credentials.h" +typedef struct cli_credentials cli_credentials; +%} + +%include "carrays.i" +%include "typemaps.i" + +%typemap(default) struct cli_credentials * { + $1 = NULL; +} + +%{ +#include "librpc/gen_ndr/samr.h" /* for struct samr_Password */ +%} + +%typemap(out) struct samr_Password * { + $result = PyString_FromStringAndSize($1->hash, 16); +} + +%rename(Credentials) cli_credentials; +typedef struct cli_credentials { + %extend { + cli_credentials() { + return cli_credentials_init(NULL); + } + ~cli_credentials() { + talloc_free($self); + } + /* username */ + const char *get_username(void); + bool set_username(const char *value, + enum credentials_obtained=CRED_SPECIFIED); + + /* password */ + const char *get_password(void); + bool set_password(const char *val, + enum credentials_obtained=CRED_SPECIFIED); + + /* domain */ + const char *get_domain(void); + bool set_domain(const char *val, + enum credentials_obtained=CRED_SPECIFIED); + + /* realm */ + const char *get_realm(void); + bool set_realm(const char *val, + enum credentials_obtained=CRED_SPECIFIED); + + void parse_string(const char *text, + enum credentials_obtained=CRED_SPECIFIED); + + /* bind dn */ + const char *get_bind_dn(void); + bool set_bind_dn(const char *bind_dn); + + /* workstation name */ + const char *get_workstation(void); + bool set_workstation(const char *workstation, + enum credentials_obtained obtained=CRED_SPECIFIED); + + void guess(void); + bool is_anonymous(void); + + const struct samr_Password *get_nt_hash(TALLOC_CTX *mem_ctx); + } +} cli_credentials; Added: branches/SAMBA_4_0/source/auth/credentials/tests/bindings.py =================================================================== --- branches/SAMBA_4_0/source/auth/credentials/tests/bindings.py 2007-11-21 11:47:55 UTC (rev 26068) +++ branches/SAMBA_4_0/source/auth/credentials/tests/bindings.py 2007-11-21 11:56:41 UTC (rev 26069) @@ -0,0 +1,84 @@ +#!/usr/bin/python + +# Unix SMB/CIFS implementation. +# Copyright (C) Jelmer Vernooij <[EMAIL PROTECTED]> 2007 +# +# 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/>. +# + +"""Tests for the Credentials Python bindings. + +Note that this just tests the bindings work. It does not intend to test +the functionality, that's already done in other tests. +""" + +import unittest +import credentials + +class CredentialsTests(unittest.TestCase): + def setUp(self): + self.creds = credentials.Credentials() + + def test_set_username(self): + self.creds.set_username("somebody") + self.assertEquals("somebody", self.creds.get_username()) + + def test_set_password(self): + self.creds.set_password("S3CreT") + self.assertEquals("S3CreT", self.creds.get_password()) + + def test_set_domain(self): + self.creds.set_domain("ABMAS") + self.assertEquals("ABMAS", self.creds.get_domain()) + + def test_set_realm(self): + self.creds.set_realm("myrealm") + self.assertEquals("MYREALM", self.creds.get_realm()) + + def test_parse_string_anon(self): + self.creds.parse_string("%") + self.assertEquals("", self.creds.get_username()) + self.assertEquals(None, self.creds.get_password()) + + def test_parse_string_user_pw_domain(self): + self.creds.parse_string("dom\\someone%secr") + self.assertEquals("someone", self.creds.get_username()) + self.assertEquals("secr", self.creds.get_password()) + self.assertEquals("DOM", self.creds.get_domain()) + + def test_bind_dn(self): + self.assertEquals(None, self.creds.get_bind_dn()) + self.creds.set_bind_dn("dc=foo,cn=bar") + self.assertEquals("dc=foo,cn=bar", self.creds.get_bind_dn()) + + def test_is_anon(self): + self.creds.set_username("") + self.assertTrue(self.creds.is_anonymous()) + self.creds.set_username("somebody") + self.assertFalse(self.creds.is_anonymous()) + + def test_workstation(self): + # FIXME: This is uninitialised, it should be None + #self.assertEquals(None, self.creds.get_workstation()) + self.creds.set_workstation("myworksta") + self.assertEquals("myworksta", self.creds.get_workstation()) + + def test_get_nt_hash(self): + self.creds.set_password("geheim") + self.assertEquals('\xc2\xae\x1f\xe6\xe6H\x84cRE>\x81o*\xeb\x93', + self.creds.get_nt_hash()) + + def test_guess(self): + # Just check the method is there and doesn't raise an exception + self.creds.guess() Modified: branches/SAMBA_4_0/source/selftest/samba4_tests.sh =================================================================== --- branches/SAMBA_4_0/source/selftest/samba4_tests.sh 2007-11-21 11:47:55 UTC (rev 26068) +++ branches/SAMBA_4_0/source/selftest/samba4_tests.sh 2007-11-21 11:56:41 UTC (rev 26069) @@ -295,4 +295,5 @@ if which trial 2>/dev/null >/dev/null then plantest "ldb.python" none PYTHONPATH=bin/python trial lib/ldb/tests/python/api.py + plantest "credentials.python" none PYTHONPATH=bin/python trial auth/credentials/tests/bindings.py fi
