summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2001-06-29 20:43:24 +0000
committerGerald Carter <jerry@samba.org>2001-06-29 20:43:24 +0000
commit44b6513bfc248a3b59fa858f9451a877193a9d4a (patch)
tree38778a928bfa5ff22d2f46997cf8f0ad09669539 /examples
parent4b030ffbd3f6bdefcae3c497b857a39fa3f8db10 (diff)
downloadsamba-44b6513bfc248a3b59fa858f9451a877193a9d4a.tar.gz
adding an export routine to generate an smbpasswd file from LDAP
Diffstat (limited to 'examples')
-rw-r--r--examples/LDAP/export_smbpasswd.pl63
-rw-r--r--examples/LDAP/import_smbpasswd.pl29
2 files changed, 77 insertions, 15 deletions
diff --git a/examples/LDAP/export_smbpasswd.pl b/examples/LDAP/export_smbpasswd.pl
new file mode 100644
index 00000000000..3f67dc62427
--- /dev/null
+++ b/examples/LDAP/export_smbpasswd.pl
@@ -0,0 +1,63 @@
+#!/usr/bin/perl
+##
+## Example script to export ldap entries into an smbpasswd file format
+## using the Mozilla PerLDAP module.
+##
+## writen by jerry@samba.org
+##
+
+use Mozilla::LDAP::Conn;
+use Mozilla::LDAP::Entry;
+
+######################################################
+## Set these values to whatever you need for your site
+##
+
+$DN="ou=people,dc=plainjoe,dc=org";
+$ROOTDN="cn=Manager,dc=plainjoe,dc=org";
+$rootpw = "secret";
+$LDAPSERVER="localhost";
+
+##
+## end local site variables
+######################################################
+
+
+$conn = new Mozilla::LDAP::Conn ("$LDAPSERVER", "389", $ROOTDN, $rootpw );
+die "Unable to connect to LDAP server $LDAPSERVER" unless $conn;
+
+print "##\n";
+print "## Autogenerated smbpasswd file via ldapsearch\n";
+print "## from $LDAPSERVER ($DN)\n";
+print "##\n";
+
+## scheck for the existence of the posixAccount first
+$result = $conn->search ("$DN", "sub", "(objectclass=smbPasswordEntry)");
+
+
+## loop over the entries we found
+while ($result) {
+
+ @uid = $result->getValue("uid");
+ @uidNumber = $result->getValue("uidNumber");
+ @lm_pw = $result->getValue("lmpassword");
+ @nt_pw = $result->getValue("ntpassword");
+ @acct = $result->getValue("acctFlags");
+ @pwdLastSet = $result->getValue("pwdLastSet");
+
+ if (($#uid+1) && ($#uidNumber+1)) {
+
+ $lm_pw[0] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" if (! ($#lm_pw+1));
+ $nt_pw[0] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" if (! ($#nt_pw+1));
+ $acct[0] = "[DU ]" if (! ($#acct+1));
+ $pwdLastSet[0] = "FFFFFFFF" if (! ($#pwdLastSet+1));
+
+ print "$uid[0]:$uidNumber[0]:$lm_pw[0]:$nt_pw[0]:$acct[0]:LCT-$pwdLastSet[0]\n";
+ }
+
+ $result = $conn->nextEntry();
+
+}
+
+$conn->close();
+exit 0;
diff --git a/examples/LDAP/import_smbpasswd.pl b/examples/LDAP/import_smbpasswd.pl
index f1fc33c6319..d19ee64488f 100644
--- a/examples/LDAP/import_smbpasswd.pl
+++ b/examples/LDAP/import_smbpasswd.pl
@@ -1,32 +1,30 @@
#!/usr/bin/perl
##
-## Example script og how you could import and smbpasswd file into an LDAP
+## Example script of how you could import and smbpasswd file into an LDAP
## directory using the Mozilla PerLDAP module.
##
-## wrriten by jerry@samba.org
+## writen by jerry@samba.org
##
use Mozilla::LDAP::Conn;
use Mozilla::LDAP::Entry;
+#################################################
+## set these to a value appropriate for your site
+##
+
$DN="ou=people,dc=plainjoe,dc=org";
$ROOTDN="cn=Manager,dc=plainjoe,dc=org";
$rootpw = "secret";
$LDAPSERVER="localhost";
+##
+## end local site variables
+#################################################
-print "Connecting to $LDAPSERVER...";
$conn = new Mozilla::LDAP::Conn ("$LDAPSERVER", "389", $ROOTDN, $rootpw );
die "Unable to connect to LDAP server $LDAPSERVER" unless $conn;
-print "connected!\n";
-if ("$ARGV[0]") {
- open (SMBPASSFILE, "$ARGV[0]") || die $!;
- $infile = SMBPASSFILE;
-}
-else {
- $infile = STDIN;
-}
while ( $string = <$infile> ) {
chop ($string);
@@ -34,7 +32,11 @@ while ( $string = <$infile> ) {
## get the account information
@smbentry = split (/:/, $string);
- ## scheck for the existence of the posixAccount first
+ ## check for the existence of the posixAccount first
+
+ ## FIXME!! Should do a getownam() and let the NSS modules lookup the account
+ ## This way you can have a UNIX account in /etc/passwd and the smbpasswd i
+ ## entry in LDAP.
$result = $conn->search ("$DN", "sub", "(&(uid=$smbentry[0])(objectclass=posixAccount))");
if ( ! $result ) {
print STDERR "uid=$smbentry[0] does not have a posixAccount entry in the directory!\n";
@@ -57,10 +59,7 @@ while ( $string = <$infile> ) {
if (! $conn->update($result)) {
print "Error updating!\n";
}
-
- ## $result->printLDIF();
}
-close ($infile);
$conn->close();
exit 0;