diff options
Diffstat (limited to 'source3/passdb')
-rw-r--r-- | source3/passdb/mysqlpass.c | 103 | ||||
-rw-r--r-- | source3/passdb/mysqlsampass.c | 59 | ||||
-rw-r--r-- | source3/passdb/passdb.c | 7 | ||||
-rw-r--r-- | source3/passdb/sampassdb.c | 2 |
4 files changed, 87 insertions, 84 deletions
diff --git a/source3/passdb/mysqlpass.c b/source3/passdb/mysqlpass.c index 90a6011692..c27cf708a6 100644 --- a/source3/passdb/mysqlpass.c +++ b/source3/passdb/mysqlpass.c @@ -21,10 +21,9 @@ * 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)); diff --git a/source3/passdb/mysqlsampass.c b/source3/passdb/mysqlsampass.c index 8d3049ce0a..e39bd61633 100644 --- a/source3/passdb/mysqlsampass.c +++ b/source3/passdb/mysqlsampass.c @@ -21,34 +21,17 @@ * 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; diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c index 9936dd2293..39caef2f85 100644 --- a/source3/passdb/passdb.c +++ b/source3/passdb/passdb.c @@ -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) { diff --git a/source3/passdb/sampassdb.c b/source3/passdb/sampassdb.c index a4c981b160..e80d157ec0 100644 --- a/source3/passdb/sampassdb.c +++ b/source3/passdb/sampassdb.c @@ -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(); |