Benjamin Kuit's latest mysql mods. issue with "make proto" needs to be
authorLuke Leighton <lkcl@samba.org>
Wed, 3 Mar 1999 20:48:48 +0000 (20:48 +0000)
committerLuke Leighton <lkcl@samba.org>
Wed, 3 Mar 1999 20:48:48 +0000 (20:48 +0000)
resolved.
(This used to be commit d59a2e669aed7ee33fdca8b8ec126b1c0a984981)

source3/param/loadparm.c
source3/passdb/mysqlpass.c
source3/passdb/mysqlsampass.c
source3/passdb/passdb.c
source3/passdb/sampassdb.c
source3/script/mysql_convert.pl

index 845c2bd4e83fbafaafcc0ee439c81854316d16f6..ccb314b2f1c4e860dfa75a849d56b829cf299024 100644 (file)
@@ -231,7 +231,7 @@ typedef struct
   BOOL bNTPipeSupport;
   BOOL bStatCache;
   BOOL bKernelOplocks;
-#if defined(WITH_MYSQL) || defined(WITH_MYSQLSAM)
+#if defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
   char *sMysqlDatabase;
   char *sMysqlTable;
   char *sMysqlUser;
@@ -754,14 +754,14 @@ static struct parm_struct parm_table[] =
   {"ldap passwd file", P_STRING,  P_GLOBAL, &Globals.szLdapPasswdFile,  NULL,   NULL,  0},
 #endif /* WITH_LDAP */
 
-#if defined(WITH_MYSQL) || defined(WITH_MYSQLSAM)
+#if defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
   {"MySQL Options", P_SEP, P_SEPARATOR},
   {"mysql host",       P_STRING, P_GLOBAL, &Globals.sMysqlHost,        NULL,   NULL,  0},
   {"mysql user",       P_STRING, P_GLOBAL, &Globals.sMysqlUser,        NULL,   NULL,  0},
   {"mysql pass file",  P_STRING, P_GLOBAL, &Globals.sMysqlPassFile,    NULL,   NULL,  0},
   {"mysql database",   P_STRING, P_GLOBAL, &Globals.sMysqlDatabase,    NULL,   NULL,  0},
   {"mysql table",      P_STRING, P_GLOBAL, &Globals.sMysqlTable,       NULL,   NULL,  0},
-#endif /* WITH_MYSQL */
+#endif /* MYSQL */
 
   {"Miscellaneous Options", P_SEP, P_SEPARATOR},
 
@@ -986,7 +986,7 @@ static void init_globals(void)
    */
   Globals.bKernelOplocks = True;
 
-#if defined(WITH_MYSQL) || defined(WITH_MYSQLSAM)
+#if defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
   string_set(&Globals.sMysqlHost,"localhost");
   string_set(&Globals.sMysqlUser,"root");
   string_set(&Globals.sMysqlPassFile,NULL);
@@ -1352,7 +1352,7 @@ FN_LOCAL_INTEGER(lp_printing,iPrinting)
 
 FN_LOCAL_CHAR(lp_magicchar,magic_char)
 
-#if defined(WITH_MYSQL) || defined(WITH_MYSQLSAM)
+#if defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
 FN_GLOBAL_STRING(lp_mysql_host,&Globals.sMysqlHost)
 FN_GLOBAL_STRING(lp_mysql_user,&Globals.sMysqlUser)
 FN_GLOBAL_STRING(lp_mysql_passfile,&Globals.sMysqlPassFile)
index 90a60116921c0dac93712c882bd4b1d1a91f04fa..c27cf708a65b87ac1486e1f7bf4c522955eb9474 100644 (file)
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#if defined(WITH_MYSQL) || defined(WITH_MYSQLSAM)
+#if defined(HAVE_MYSQL_H) || defined(WITH_MYSQLSAM)
 
 #include "includes.h"
-#include <mysql.h>
 
 extern int DEBUGLEVEL;
 
@@ -37,25 +36,6 @@ extern int DEBUGLEVEL;
 #define FLAGS(row)       ((*row)[6])
 #define CHANGE_TIME(row) ((*row)[7])
 
-void *mysql_fill_smb_passwd( MYSQL_ROW *row );
-
-typedef void *(*mysql_fill_func)( MYSQL_ROW * );
-#define FILL_SMB mysql_fill_smb_passwd
-
-void *mysql_startpwent(BOOL update);
-void mysql_endpwent(void *vp);
-SMB_BIG_UINT mysql_getpwpos(void *vp);
-BOOL mysql_setpwpos(void *vp, SMB_BIG_UINT pos);
-void *mysql_fill_smb_passwd( MYSQL_ROW *row );
-MYSQL_ROW *mysql_getpwent(void *vp);
-void *mysql_fetch_passwd( mysql_fill_func filler, char *where );
-void *mysql_getpwuid( mysql_fill_func filler, uid_t uid );
-void *mysql_getpwnam( mysql_fill_func filler, char *field, const char *name );
-int mysql_db_lock_connect( MYSQL *handle );
-BOOL mysql_add_smb( MYSQL *handle, struct smb_passwd *smb );
-BOOL mysql_mod_smb( MYSQL *handle, struct smb_passwd *smb, BOOL override );
-BOOL mysql_del_smb( MYSQL *handle, char *unix_name );
-
 static fstring mysql_table = { 0 };
 
 struct mysql_struct {
@@ -65,7 +45,8 @@ struct mysql_struct {
 };
 typedef struct mysql_struct mysql_ctrl;
 
-static char *mysql_retrieve_password(char *passfile) {
+static char *mysql_retrieve_password(char *passfile)
+{
        static fstring pass;
        static time_t last_checked = (time_t)0;
        static char pass_chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_-+=|~`\\{}[]:;\"'?/>.<,";
@@ -113,7 +94,8 @@ static char *mysql_retrieve_password(char *passfile) {
        return pass;
 }
 
-static int mysql_db_connect( MYSQL *handle ) {
+static int mysql_db_connect( MYSQL *handle )
+{
        char *password;
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
@@ -136,7 +118,8 @@ static int mysql_db_connect( MYSQL *handle ) {
        return 0;
 }
 
-static int mysql_lock_table( MYSQL *handle, BOOL write_access ) {
+static int mysql_lock_table( MYSQL *handle, BOOL write_access )
+{
        fstring query;
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
@@ -151,7 +134,8 @@ static int mysql_lock_table( MYSQL *handle, BOOL write_access ) {
        return 0;
 }
 
-int mysql_db_lock_connect( MYSQL *handle ) {
+int mysql_db_lock_connect( MYSQL *handle )
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
@@ -167,7 +151,8 @@ int mysql_db_lock_connect( MYSQL *handle ) {
        return 0;
 }
 
-static MYSQL_RES *mysql_select_results( MYSQL *handle, char *selection ) {
+static MYSQL_RES *mysql_select_results( MYSQL *handle, char *selection )
+{
        MYSQL_RES *result;
        pstring query;
        int query_length;
@@ -220,7 +205,8 @@ static MYSQL_RES *mysql_select_results( MYSQL *handle, char *selection ) {
        return result;
 }
 
-void *mysql_startpwent( BOOL update ) {
+void *mysql_startpwent( BOOL update )
+{
        mysql_ctrl *mysql;
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
@@ -254,7 +240,8 @@ void *mysql_startpwent( BOOL update ) {
        return (void*)mysql;
 }
 
-void mysql_endpwent( void *ptr ) {
+void mysql_endpwent( void *ptr )
+{
        mysql_ctrl *handle;
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
@@ -267,24 +254,27 @@ void mysql_endpwent( void *ptr ) {
        free( handle );
 }
 
-SMB_BIG_UINT mysql_getpwpos(void *vp) {
+SMB_BIG_UINT mysql_getpwpos(void *vp)
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
        return ((mysql_ctrl *)vp)->current_row;
 }
 
-BOOL mysql_setpwpos(void *vp, SMB_BIG_UINT pos) {
+BOOL mysql_setpwpos(void *vp, SMB_BIG_UINT pos)
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
        mysql_data_seek( ((mysql_ctrl*)vp)->result, (uint)pos );
-((mysql_ctrl *)vp)->current_row=(uint)pos;
+       ((mysql_ctrl *)vp)->current_row=(uint)pos;
 
        return True;
 }
 
-static void quote_hash( char *target, unsigned char *passwd ) {
+static void quote_hash( char *target, unsigned char *passwd )
+{
         char hex[] = "0123456789ABCDEF";
        int i;
 
@@ -303,7 +293,8 @@ static void quote_hash( char *target, unsigned char *passwd ) {
        }
 }
 
-static unsigned char *decode_hash( char *hash, unsigned char *buffer ) {
+static unsigned char *decode_hash( char *hash, unsigned char *buffer )
+{
        char hex[] = "0123456789ABCDEF";
        int pos, v1, v2;
 
@@ -328,7 +319,8 @@ static unsigned char *decode_hash( char *hash, unsigned char *buffer ) {
        return buffer;
 }
 
-void *mysql_fill_smb_passwd( MYSQL_ROW *row ) {
+void *mysql_fill_smb_passwd( MYSQL_ROW *row )
+{
        static struct smb_passwd pw_buf;
        static fstring unix_name;
        static fstring nt_name;
@@ -373,7 +365,8 @@ void *mysql_fill_smb_passwd( MYSQL_ROW *row ) {
        return (void*)&pw_buf;
 }
 
-MYSQL_ROW *mysql_getpwent(void *vp) {
+MYSQL_ROW *mysql_getpwent(void *vp)
+{
        mysql_ctrl *mysql;
        static MYSQL_ROW row;
 
@@ -391,14 +384,16 @@ MYSQL_ROW *mysql_getpwent(void *vp) {
        return &row;
 }
 
-struct smb_passwd *mysql_getsmbpwent(void *vp) {
+struct smb_passwd *mysql_getsmbpwent(void *vp)
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
        return (struct smb_passwd*)mysql_fill_smb_passwd( mysql_getpwent(vp) );
 }
 
-void *mysql_fetch_passwd( mysql_fill_func filler, char *where ) {
+void *mysql_fetch_passwd( mysql_fill_func filler, char *where )
+{
        void *retval;
        MYSQL handle;
        MYSQL_RES *result;
@@ -447,7 +442,8 @@ void *mysql_fetch_passwd( mysql_fill_func filler, char *where ) {
        return retval;
 }
 
-void *mysql_getpwuid(mysql_fill_func filler, uid_t uid) {
+void *mysql_getpwuid(mysql_fill_func filler, uid_t uid)
+{
        fstring where;
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
@@ -457,14 +453,16 @@ void *mysql_getpwuid(mysql_fill_func filler, uid_t uid) {
        return mysql_fetch_passwd(filler,where);
 }
 
-struct smb_passwd *mysql_getsmbpwuid(uid_t uid) {
+struct smb_passwd *mysql_getsmbpwuid(uid_t uid)
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
-       return (struct smb_passwd *)mysql_getpwuid( FILL_SMB, uid );
+       return (struct smb_passwd *)mysql_getpwuid( mysql_fill_smb_passwd, uid );
 }
 
-void *mysql_getpwnam(mysql_fill_func filler, char *field, const char *name) {
+void *mysql_getpwnam(mysql_fill_func filler, char *field, const char *name)
+{
        fstring where;
        char format[] = "%s='%s'";
 
@@ -495,13 +493,15 @@ void *mysql_getpwnam(mysql_fill_func filler, char *field, const char *name) {
        return mysql_fetch_passwd( filler, where );
 }
 
-struct smb_passwd *mysql_getsmbpwnam(const char *unix_name) {
+struct smb_passwd *mysql_getsmbpwnam(const char *unix_name)
+{
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
-       return mysql_getpwnam( FILL_SMB, "unix_name", unix_name );
+       return mysql_getpwnam( mysql_fill_smb_passwd, "unix_name", unix_name );
 }
 
-static void quote_string(char *target, char *string) {
+static void quote_string(char *target, char *string)
+{
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
        if ( string == NULL ) {
@@ -514,7 +514,8 @@ static void quote_string(char *target, char *string) {
        }
 }
 
-BOOL mysql_del_smb( MYSQL *handle, char *unix_name ) {
+BOOL mysql_del_smb( MYSQL *handle, char *unix_name )
+{
        pstring query;
        char format[] = "delete from %s where unix_name='%s'";
 
@@ -534,7 +535,8 @@ BOOL mysql_del_smb( MYSQL *handle, char *unix_name ) {
        return True;
 }
 
-BOOL mysql_add_smb( MYSQL *handle, struct smb_passwd *smb ) {
+BOOL mysql_add_smb( MYSQL *handle, struct smb_passwd *smb )
+{
        pstring query;
        char format[] = "insert into %s (unix_name, unix_uid) values ( '%s', %lu )";
 
@@ -555,7 +557,8 @@ BOOL mysql_add_smb( MYSQL *handle, struct smb_passwd *smb ) {
        return True;
 }
 
-BOOL mysql_mod_smb( MYSQL *handle, struct smb_passwd *smb, BOOL override ) {
+BOOL mysql_mod_smb( MYSQL *handle, struct smb_passwd *smb, BOOL override )
+{
        pstring query;
        fstring smb_passwd;
        fstring smb_nt_passwd;
@@ -595,7 +598,8 @@ BOOL mysql_mod_smb( MYSQL *handle, struct smb_passwd *smb, BOOL override ) {
        return True;
 }
 
-BOOL mysql_add_smbpwd_entry(struct smb_passwd *smb) {
+BOOL mysql_add_smbpwd_entry(struct smb_passwd *smb)
+{
        MYSQL handle;
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
@@ -623,7 +627,8 @@ BOOL mysql_add_smbpwd_entry(struct smb_passwd *smb) {
        return True;
 }
 
-BOOL mysql_mod_smbpwd_entry(struct smb_passwd *smb, BOOL override) {
+BOOL mysql_mod_smbpwd_entry(struct smb_passwd *smb, BOOL override)
+{
        MYSQL handle;
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
index 8d3049ce0ac7c67c767345f2f7e04f4de02e23a4..e39bd6163353e8de533a5023c3f58c3fc761cb28 100644 (file)
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#ifdef WITH_MYSQLSAM
+#if defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
 
 #include "includes.h"
-#include <mysql.h>
 
 extern int DEBUGLEVEL;
 
 extern pstring samlogon_user;
 extern BOOL sam_logon_in_ssb;
 
-typedef void *(*mysql_fill_func)( MYSQL_ROW * );
-#define FILL_SAM mysql_fill_sam_passwd
-
-void *mysql_startpwent(BOOL update);
-void mysql_endpwent(void *vp);
-SMB_BIG_UINT mysql_getpwpos(void *vp);
-BOOL mysql_setpwpos(void *vp, SMB_BIG_UINT pos);
-void *mysql_fill_smb_passwd( MYSQL_ROW *row );
-MYSQL_ROW *mysql_getpwent(void *vp);
-void *mysql_fetch_passwd( mysql_fill_func filler, char *where );
-void *mysql_getpwuid( mysql_fill_func filler, uid_t uid );
-void *mysql_getpwnam( mysql_fill_func filler, char *field, const char *name );
-int mysql_db_lock_connect( MYSQL *handle );
-BOOL mysql_add_smb( MYSQL *handle, struct smb_passwd *smb );
-BOOL mysql_mod_smb( MYSQL *handle, struct smb_passwd *smb, BOOL override );
-BOOL mysql_del_smb( MYSQL *handle, char *unix_name );
-
-void *mysql_fill_sam_passwd( MYSQL_ROW *row ) {
+void *mysql_fill_sam_passwd( MYSQL_ROW *row )
+{
        static struct sam_passwd *user;
 
        static pstring full_name;
@@ -112,66 +95,75 @@ void *mysql_fill_sam_passwd( MYSQL_ROW *row ) {
        return (void*)user;
 }
 
-struct sam_passwd *mysql_getsampwent(void *vp) {
+struct sam_passwd *mysql_getsampwent(void *vp)
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
        return (struct sam_passwd*)mysql_fill_sam_passwd( mysql_getpwent(vp) );
 }
 
-struct sam_passwd *mysql_getsampwrid(uint32 rid) {
+struct sam_passwd *mysql_getsampwrid(uint32 rid)
+{
        fstring where;
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
        slprintf( where, sizeof(where), "user_rid=%lu", (long unsigned)rid);
 
-       return (struct sam_passwd *)mysql_fetch_passwd( FILL_SAM, where );
+       return (struct sam_passwd *)mysql_fetch_passwd( mysql_fill_sam_passwd, where );
 }
 
-struct sam_passwd *mysql_getsampwuid(uid_t uid) {
+struct sam_passwd *mysql_getsampwuid(uid_t uid)
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
-       return (struct sam_passwd *)mysql_getpwuid( FILL_SAM, uid );
+       return (struct sam_passwd *)mysql_getpwuid( mysql_fill_sam_passwd, uid );
 }
 
-struct sam_passwd *mysql_getsampwntnam(const char *nt_name) {
+struct sam_passwd *mysql_getsampwntnam(const char *nt_name)
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
-       return (struct sam_passwd *)mysql_getpwnam( FILL_SAM, "nt_name", nt_name);
+       return (struct sam_passwd *)mysql_getpwnam( mysql_fill_sam_passwd, "nt_name", nt_name);
 }
 
-struct sam_disp_info *mysql_getsamdispntnam(const char *nt_name) {
+struct sam_disp_info *mysql_getsamdispntnam(const char *nt_name)
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
        return pwdb_sam_to_dispinfo(mysql_getsampwntnam(nt_name));
 }
 
-struct sam_disp_info *mysql_getsamdisprid(uint32 rid) {
+struct sam_disp_info *mysql_getsamdisprid(uint32 rid)
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
        return pwdb_sam_to_dispinfo(mysql_getsampwrid(rid));
 }
 
-struct sam_disp_info *mysql_getsamdispent(void *vp) {
+struct sam_disp_info *mysql_getsamdispent(void *vp)
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
        return pwdb_sam_to_dispinfo(mysql_getsampwent(vp));
 }
 
-static BOOL mysql_mod_sam( MYSQL *handle, struct sam_passwd *sam, BOOL override ) {
+static BOOL mysql_mod_sam( MYSQL *handle, struct sam_passwd *sam, BOOL override )
+{
 
        DEBUG(5,("%s\n",FUNCTION_MACRO));
 
        return True;
 }
 
-BOOL mysql_add_sampwd_entry(struct sam_passwd *sam) {
+BOOL mysql_add_sampwd_entry(struct sam_passwd *sam)
+{
        MYSQL handle;
        struct smb_passwd *smb;
 
@@ -208,7 +200,8 @@ BOOL mysql_add_sampwd_entry(struct sam_passwd *sam) {
        return True;
 }
 
-BOOL mysql_mod_sampwd_entry(struct sam_passwd *sam, BOOL override) {
+BOOL mysql_mod_sampwd_entry(struct sam_passwd *sam, BOOL override)
+{
        MYSQL handle;
        struct smb_passwd *smb;
 
index 9936dd2293bcc2de54defb432644626e51e3d498..39caef2f85588dd90f738b1fedad18c9bc953a0e 100644 (file)
@@ -70,7 +70,7 @@ BOOL initialise_password_db(void)
   pwdb_ops =  nisplus_initialise_password_db();
 #elif defined(WITH_LDAP)
   pwdb_ops = ldap_initialise_password_db();
-#elif defined(WITH_MYSQL) || defined(WITH_MYSQLSAM)
+#elif defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
   pwdb_ops = mysql_initialise_password_db();
 #elif defined(USE_SMBPASS_DB)
   pwdb_ops = file_initialise_password_db();
@@ -278,6 +278,11 @@ struct smb_passwd *pwdb_smb_map_names(struct smb_passwd *smb)
        {
                return NULL;
        }
+       if (smb->unix_name != NULL && smb->nt_name != NULL &&
+           smb->unix_uid != (uid_t)-1 && smb->user_rid != 0xffffffff)
+       {
+               return smb;
+       }
 
        if (!found && smb->unix_name != NULL)
        {
index a4c981b16058b4caee8c97440f9fad53a7282895..e80d157ec05547111eb1fad39f21ad86d8eb2c0d 100644 (file)
@@ -70,7 +70,7 @@ BOOL initialise_sam_password_db(void)
   pwdb_ops =  nisplus_initialise_sam_password_db();
 #elif defined(WITH_LDAP)
   pwdb_ops = ldap_initialise_sam_password_db();
-#elif defined(WITH_MYSQLSAM)
+#elif defined(HAVE_MYSQL_H) && defined(WITH_MYSQLSAM)
   pwdb_ops = mysql_initialise_sam_password_db();
 #elif defined(USE_SMBPASS_DB)
   pwdb_ops = file_initialise_sam_password_db();
index e9c1b9de56b8279e674c2a2631ecc97436b995ff..1479ce62b7804e3eaae2d4fd4d0f54df24f7ad31 100644 (file)
@@ -1,6 +1,73 @@
-#!/usr/local/bin/perl
-
-use Mysql;
+#!/bin/env perl
+#
+#  MYSQL Convert - Creates and initialises mysql tables for use by samba
+#
+#  Copyright (C) Benjamin Kuit                     1999,
+#  Copyright (C) Andrew Tridgell              1992-1999,
+#  Copyright (C) Luke Kenneth Casson Leighton 1996-1998,
+#
+#  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.
+#
+#
+#  Converts smbpasswd files into MySQL tables.
+#  Can understand Samba 1.19 and Samba 2.0 file formats.
+#  Assumes table structure:
+#           unix_name            char(20) not null,
+#           unix_uid             int(10)  unsigned not null,
+#           nt_name              char(20) not null,
+#           user_rid             int(10)  unsigned not null,
+#           smb_passwd           char(32),
+#           smb_nt_passwd        char(32),
+#           acct_ctrl            int(10) unsigned not null,
+#           pass_last_set_time   int(10) unsigned not null,
+#           unique (unix_name),
+#           unique (unix_uid)
+#  When given the --create option, mysql_convert will generate this
+#  statement.
+# 
+#  To move from flat file smbpasswd directly into a mysql table:
+#
+#  mysql_convert.pl --db=samba --table=smbpasswd --user=samba --create --infile=smbpasswd
+#
+#  Assumes mysql server on localhost, use --host if otherwise.
+#  To convert back to flat file:
+#
+#  mysql_convert.pl --db=samba --table=smbpasswd --user=samba --outfile=smbpasswd
+#
+#  If smbpasswd file already exists, use --file=append or --file=trash
+#  to determine whether to append or over-right the file.
+#
+#  In converting from NT Server PDC to Samba PDC:
+#  Run pwdump on NT Server to generate an smbpasswd file (Samba 1.19 format),
+#  called say NTpasslist.
+#  then:
+#
+#  mysql_convert.pl --db=samba --table=smbpasswd --user=samba --infile=NTpasslist --create --check
+#
+#  The --check option will change the unix_uid field to the real uid
+#  value of respective users, also filter out users that dont exist on
+#  the system.
+#
+#  If dont have mysql perl module:
+#
+#  mysql_convert.pl --table=smbpasswd --infile=NTpasslist --outfile=mysql.txt
+#
+#  Then use the mysql client:
+#
+#  mysql -u samba < mysql.txt
+#
 
 $ACB_DISABLED=0x0001;
 $ACB_HOMDIRREQ=0x0002;
@@ -17,7 +84,7 @@ $ACB_AUTOLOCK=0x0400;
 sub getoptionval {
        my ($option) = @_;
 
-       my ($value) = ($option =~ /^[^=]+=\s*(\S.*\S)/ );
+       my ($value) = ($option =~ /^[^=]+=\s*(\S.*\S)\s*$/ );
 
        return $value;
 }
@@ -240,6 +307,8 @@ elsif ( (not $dbname) || (not $dbtable) || (not $dbuser) ) {
        &usage;
 }
 else {
+       use Mysql;
+
        if ( ($need_password eq "yes") && ( not $dbpasswd )) {
                $dbpasswd = getpass("Enter MySQL password for $dbuser: ");
        }