svn commit: samba r26069 - in branches/SAMBA_4_0: . source/auth/credentials source/auth/credentials/tests source/selftest

jelmer at samba.org jelmer at samba.org
Wed Nov 21 11:56:42 GMT 2007


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 <jelmer at samba.org> 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 <jelmer at samba.org> 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



More information about the samba-cvs mailing list