summaryrefslogtreecommitdiffstats
path: root/examples/pdb
diff options
context:
space:
mode:
authorCVS Import User <samba-bugs@samba.org>2004-04-04 09:21:52 +0000
committerCVS Import User <samba-bugs@samba.org>2004-04-04 09:21:52 +0000
commit9f765b7406282904ce56f2535dcd929a9aefc5ca (patch)
treedbdff78b624ac7c1afcb8851f395df3d99eb1f84 /examples/pdb
parent111b4e05ab96eafc4212f38dc5977538907187c7 (diff)
downloadsamba-9f765b7406282904ce56f2535dcd929a9aefc5ca.tar.gz
samba-9f765b7406282904ce56f2535dcd929a9aefc5ca.tar.xz
samba-9f765b7406282904ce56f2535dcd929a9aefc5ca.zip
r2: import HEAD into svn+ssh://svn.samba.org/home/svn/samba/trunk
metze
Diffstat (limited to 'examples/pdb')
-rw-r--r--examples/pdb/Makefile31
-rw-r--r--examples/pdb/README16
-rw-r--r--examples/pdb/mysql/mysql.dump37
-rw-r--r--examples/pdb/mysql/smb.conf11
-rw-r--r--examples/pdb/pdb_test.c145
-rw-r--r--examples/pdb/sambapdb.dtd46
6 files changed, 286 insertions, 0 deletions
diff --git a/examples/pdb/Makefile b/examples/pdb/Makefile
new file mode 100644
index 00000000000..a53cd5d5e2d
--- /dev/null
+++ b/examples/pdb/Makefile
@@ -0,0 +1,31 @@
+# Makefile for samba-pdb examples
+# Variables
+
+CC = gcc
+LIBTOOL = libtool
+
+SAMBA_SRC = ../../source
+SAMBA_INCL = ../../source/include
+UBIQX_SRC = ../../source/ubiqx
+SMBWR_SRC = ../../source/smbwrapper
+CFLAGS = -I$(SAMBA_SRC) -I$(SAMBA_INCL) -I$(UBIQX_SRC) -I$(SMBWR_SRC) -Wall -g -I/usr/include/heimdal -fPIC
+PDB_OBJS = pdb_test.so
+
+# Default target
+
+default: $(PDB_OBJS)
+
+# Pattern rules
+
+%.so: %.lo
+ $(LIBTOOL) $(CC) -shared -o $@ $< $(LDFLAGS)
+
+%.lo: %.c
+ $(LIBTOOL) $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
+
+# Misc targets
+
+clean:
+ rm -rf .libs
+ rm -f core *~ *% *.bak \
+ $(PDB_OBJS) $(PDB_OBJS:.so=.o) $(PDB_OBJS:.so=.lo)
diff --git a/examples/pdb/README b/examples/pdb/README
new file mode 100644
index 00000000000..ab1baed2366
--- /dev/null
+++ b/examples/pdb/README
@@ -0,0 +1,16 @@
+README for Samba Password Database (PDB) examples
+====================================================
+Jelmer Vernooij <jelmer@nl.linux.org>
+Stefan (metze) Metzmacher <metze@samba.org>
+
+The pdb_test.c file in this directory contains a very basic example of
+a pdb plugin. It just prints the name of the function that is executed using
+DEBUG. Maybe it's nice to include some of the arguments to the function in the
+future too..
+
+To debug passdb backends, try to run gdb on the 'pdbedit' executable. That's
+really much easier than restarting smbd constantly and attaching with your
+debugger.
+
+New passdb plugins should go into the samba lib directory, (/usr/lib/samba/pdb/
+for most distributions). An example would be: /usr/lib/samba/pdb/test.so
diff --git a/examples/pdb/mysql/mysql.dump b/examples/pdb/mysql/mysql.dump
new file mode 100644
index 00000000000..5da75f5745c
--- /dev/null
+++ b/examples/pdb/mysql/mysql.dump
@@ -0,0 +1,37 @@
+# Put this in your MySQL database by running
+# mysql -u<user> -p<password> -h<host> <database> < mysql.dump
+
+CREATE TABLE user (
+ logon_time int(9),
+ logoff_time int(9),
+ kickoff_time int(9),
+ pass_last_set_time int(9),
+ pass_can_change_time int(9),
+ pass_must_change_time int(9),
+ username varchar(255),
+ domain varchar(255),
+ nt_username varchar(255),
+ nt_fullname varchar(255),
+ home_dir varchar(255),
+ dir_drive varchar(4),
+ logon_script varchar(255),
+ profile_path varchar(255),
+ acct_desc varchar(255),
+ workstations varchar(255),
+ unknown_str varchar(255),
+ munged_dial varchar(255),
+ uid int(9) NOT NULL DEFAULT "0" PRIMARY KEY auto_increment,
+ gid int(9),
+ user_sid varchar(255),
+ group_sid varchar(255),
+ lm_pw varchar(255),
+ nt_pw varchar(255),
+ acct_ctrl int(9),
+ unknown_3 int(9),
+ logon_divs int(9),
+ hours_len int(9),
+ unknown_5 int(9),
+ unknown_6 int(9),
+ bad_password_count int(9),
+ logon_count(9)
+);
diff --git a/examples/pdb/mysql/smb.conf b/examples/pdb/mysql/smb.conf
new file mode 100644
index 00000000000..61a3f198168
--- /dev/null
+++ b/examples/pdb/mysql/smb.conf
@@ -0,0 +1,11 @@
+[global]
+netbios name = FOOBAR
+workgroup = TESTGROUP
+security = domain
+domain logons = yes
+domain master = yes
+passdb backend = plugin:/usr/local/samba/lib/pdb_mysql.so:mysql
+mysql:mysql host = rhonwyn
+mysql:mysql user = samba
+mysql:mysql password = ambas
+mysql:mysql database = samba
diff --git a/examples/pdb/pdb_test.c b/examples/pdb/pdb_test.c
new file mode 100644
index 00000000000..e46c621d48e
--- /dev/null
+++ b/examples/pdb/pdb_test.c
@@ -0,0 +1,145 @@
+/*
+ * Test password backend for samba
+ * Copyright (C) Jelmer Vernooij 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.
+ *
+ * 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"
+
+static int testsam_debug_level = DBGC_ALL;
+
+#undef DBGC_CLASS
+#define DBGC_CLASS testsam_debug_level
+
+/***************************************************************
+ Start enumeration of the passwd list.
+****************************************************************/
+
+static NTSTATUS testsam_setsampwent(struct pdb_methods *methods, BOOL update)
+{
+ DEBUG(10, ("testsam_setsampwent called\n"));
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+/***************************************************************
+ End enumeration of the passwd list.
+****************************************************************/
+
+static void testsam_endsampwent(struct pdb_methods *methods)
+{
+ DEBUG(10, ("testsam_endsampwent called\n"));
+}
+
+/*****************************************************************
+ Get one SAM_ACCOUNT from the list (next in line)
+*****************************************************************/
+
+static NTSTATUS testsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT *user)
+{
+ DEBUG(10, ("testsam_getsampwent called\n"));
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+/******************************************************************
+ Lookup a name in the SAM database
+******************************************************************/
+
+static NTSTATUS testsam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT *user, const char *sname)
+{
+ DEBUG(10, ("testsam_getsampwnam called\n"));
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+/***************************************************************************
+ Search by sid
+ **************************************************************************/
+
+static NTSTATUS testsam_getsampwsid (struct pdb_methods *methods, SAM_ACCOUNT *user, const DOM_SID *sid)
+{
+ DEBUG(10, ("testsam_getsampwsid called\n"));
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+/***************************************************************************
+ Delete a SAM_ACCOUNT
+****************************************************************************/
+
+static NTSTATUS testsam_delete_sam_account(struct pdb_methods *methods, SAM_ACCOUNT *sam_pass)
+{
+ DEBUG(10, ("testsam_delete_sam_account called\n"));
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+/***************************************************************************
+ Modifies an existing SAM_ACCOUNT
+****************************************************************************/
+
+static NTSTATUS testsam_update_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd)
+{
+ DEBUG(10, ("testsam_update_sam_account called\n"));
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+/***************************************************************************
+ Adds an existing SAM_ACCOUNT
+****************************************************************************/
+
+static NTSTATUS testsam_add_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd)
+{
+ DEBUG(10, ("testsam_add_sam_account called\n"));
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS testsam_init(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
+{
+ NTSTATUS nt_status;
+
+ if (!NT_STATUS_IS_OK(nt_status = make_pdb_methods(pdb_context->mem_ctx, pdb_method))) {
+ return nt_status;
+ }
+
+ (*pdb_method)->name = "testsam";
+
+ /* Functions your pdb module doesn't provide should be set
+ * to NULL */
+
+ (*pdb_method)->setsampwent = testsam_setsampwent;
+ (*pdb_method)->endsampwent = testsam_endsampwent;
+ (*pdb_method)->getsampwent = testsam_getsampwent;
+ (*pdb_method)->getsampwnam = testsam_getsampwnam;
+ (*pdb_method)->getsampwsid = testsam_getsampwsid;
+ (*pdb_method)->add_sam_account = testsam_add_sam_account;
+ (*pdb_method)->update_sam_account = testsam_update_sam_account;
+ (*pdb_method)->delete_sam_account = testsam_delete_sam_account;
+
+ testsam_debug_level = debug_add_class("testsam");
+ if (testsam_debug_level == -1) {
+ testsam_debug_level = DBGC_ALL;
+ DEBUG(0, ("testsam: Couldn't register custom debugging class!\n"));
+ } else DEBUG(0, ("testsam: Debug class number of 'testsam': %d\n", testsam_debug_level));
+
+ DEBUG(0, ("Initializing testsam\n"));
+ if (location)
+ DEBUG(10, ("Location: %s\n", location));
+
+ return NT_STATUS_OK;
+}
+
+NTSTATUS init_module(void) {
+ return smb_register_passdb(PASSDB_INTERFACE_VERSION, "testsam",
+ testsam_init);
+}
diff --git a/examples/pdb/sambapdb.dtd b/examples/pdb/sambapdb.dtd
new file mode 100644
index 00000000000..1f4054ddec4
--- /dev/null
+++ b/examples/pdb/sambapdb.dtd
@@ -0,0 +1,46 @@
+<!ELEMENT samba:crypt (#PCDATA)* >
+<!ATTLIST samba:crypt type CDATA #REQUIRED >
+
+<!ELEMENT samba:password (samba:crypt*) >
+<!ATTLIST samba:password last_set CDATA #IMPLIED
+ must_change CDATA #IMPLIED
+ can_change CDATA #IMPLIED>
+
+<!ELEMENT samba:group (#PCDATA)* >
+<!ATTLIST samba:group sid CDATA #REQUIRED
+ gid CDATA #IMPLIED >
+
+<!ELEMENT samba:domain (#PCDATA)* >
+<!ELEMENT samba:fullname (#PCDATA)* >
+<!ELEMENT samba:nt_username (#PCDATA)* >
+<!ELEMENT samba:logon_script (#PCDATA)* >
+<!ELEMENT samba:profile_path (#PCDATA)* >
+<!ELEMENT samba:logon_time (#PCDATA)* >
+<!ELEMENT samba:logoff_time (#PCDATA)* >
+<!ELEMENT samba:kickoff_time (#PCDATA)* >
+<!ELEMENT samba:logon_divs (#PCDATA)* >
+<!ELEMENT samba:hours_len (#PCDATA)* >
+<!ELEMENT samba:unknown_3 (#PCDATA)* >
+<!ELEMENT samba:unknown_5 (#PCDATA)* >
+<!ELEMENT samba:unknown_6 (#PCDATA)* >
+<!ELEMENT samba:homedir (#PCDATA)* >
+<!ELEMENT samba:unknown_str (#PCDATA)* >
+<!ELEMENT samba:dir_drive (#PCDATA)* >
+<!ELEMENT samba:munged_dial (#PCDATA)* >
+<!ELEMENT samba:acct_desc (#PCDATA)* >
+<!ELEMENT samba:acct_ctrl (#PCDATA)* >
+<!ELEMENT samba:workstations (#PCDATA)* >
+
+<!ELEMENT samba:user ( samba:group?, samba:domain?, samba:nt_username?, samba:fullname?, samba:homedir?, samba:dir_drive?, samba:logon_script?, samba:profile_path?, samba:password?, samba:acct_ctrl?,samba:unknown_3?, samba:logon_divs?, samba:hours_len?, samba:logon_time?, samba:logoff_time?, samba:kickoff_time?, samba:unknown_5?, samba:unknown_6?, samba:unknown_str?, samba:munged_dial?, samba:acct_desc?, samba:workstations? ) >
+
+<!ATTLIST samba:user sid CDATA #REQUIRED
+ uid CDATA #IMPLIED
+ name CDATA #REQUIRED>
+
+<!ELEMENT samba:users (samba:user*) >
+
+<!ELEMENT samba (samba:users?) >
+
+<!ATTLIST samba
+ xmlns CDATA #FIXED 'http://samba.org/~jelmer/sambapdb.dtd'>
+