diff -ur pam_smb.orig/pam_read_conf.c pam_smb/pam_read_conf.c --- pam_smb.orig/pam_read_conf.c 1998-10-24 12:45:50.000000000 -0400 +++ pam_smb/pam_read_conf.c 2004-04-27 10:40:12.000000000 -0400 @@ -7,28 +7,32 @@ This file is (C) Dave Airlie 1997 ( David.Airlie@ul.ie ) and is covered by the GPL provided in the COPYING FILE. ***********************************************************************/ -int smb_readpamconf(char *smb_server, char *smb_backup, char *smb_domain); - int smb_readpamconf(char *smb_server, char *smb_backup, char *smb_domain) { FILE *fl; - int len; + int len, retval = 1; + if (!(fl=fopen(CONFFILE,"r"))) + return retval; + + if (fgets(smb_domain, 80, fl)) { - return 1; + len=strlen(smb_domain); + smb_domain[len-1]='\0'; + if (fgets(smb_server, 80, fl)) + { + len=strlen(smb_server); + smb_server[len-1]='\0'; + if (fgets(smb_backup, 80, fl)) + { + len=strlen(smb_backup); + smb_backup[len-1]='\0'; + retval = 0; + } + } } - - fgets(smb_domain, 50, fl); - len=strlen(smb_domain); - smb_domain[len-1]='\0'; - fgets(smb_server, 50, fl); - len=strlen(smb_server); - smb_server[len-1]='\0'; - fgets(smb_backup, 50, fl); - len=strlen(smb_backup); - smb_backup[len-1]='\0'; fclose(fl); - return(0); + return retval; } diff -ur pam_smb.orig/pam_smb_auth.c pam_smb/pam_smb_auth.c --- pam_smb.orig/pam_smb_auth.c 2000-09-07 04:30:10.000000000 -0400 +++ pam_smb/pam_smb_auth.c 2004-04-27 09:59:29.000000000 -0400 @@ -164,10 +164,13 @@ if ( (retval = pam_get_user( pamh, &name, "login: ") ) != PAM_SUCCESS ) return retval; + + if (name == NULL || name[0] == 0) + return PAM_USER_UNKNOWN; - pam_get_item( pamh, PAM_AUTHTOK, (void*) &p ); + retval = pam_get_item( pamh, PAM_AUTHTOK, (void*) &p ); - if ( !p ) + if ( retval != PAM_SUCCESS || !p ) { if (use_first_pass!=1) { @@ -184,7 +187,7 @@ change */ - pam_get_item( pamh, PAM_AUTHTOK, (void*) &p ); + (void)pam_get_item( pamh, PAM_AUTHTOK, (void*) &p ); strncpy(ntname, name, 30); ntname[31]='\0'; diff -ur pam_smb.orig/smbval/rfcnb-error.h pam_smb/smbval/rfcnb-error.h --- pam_smb.orig/smbval/rfcnb-error.h 1998-10-24 12:45:51.000000000 -0400 +++ pam_smb/smbval/rfcnb-error.h 2004-04-27 11:24:37.000000000 -0400 @@ -49,7 +49,7 @@ /* Text strings for the error responses */ -static char *RFCNB_Error_Strings[] = { +static const char *RFCNB_Error_Strings[] = { "RFCNBE_OK: Routine completed successfully.", "RFCNBE_NoSpace: No space available for a malloc call.", diff -ur pam_smb.orig/smbval/rfcnb-util.c pam_smb/smbval/rfcnb-util.c --- pam_smb.orig/smbval/rfcnb-util.c 1998-10-24 12:45:53.000000000 -0400 +++ pam_smb/smbval/rfcnb-util.c 2004-04-27 11:30:38.000000000 -0400 @@ -204,7 +204,7 @@ /* Free up a packet */ -int RFCNB_Free_Pkt(struct RFCNB_Pkt *pkt) +void RFCNB_Free_Pkt(struct RFCNB_Pkt *pkt) { struct RFCNB_Pkt *pkt_next; char *data_ptr; diff -ur pam_smb.orig/smbval/rfcnb-util.h pam_smb/smbval/rfcnb-util.h --- pam_smb.orig/smbval/rfcnb-util.h 1998-10-24 12:45:53.000000000 -0400 +++ pam_smb/smbval/rfcnb-util.h 2004-04-27 11:31:16.000000000 -0400 @@ -33,11 +33,13 @@ struct RFCNB_Pkt *RFCNB_Alloc_Pkt(int n); +void RFCNB_Free_Pkt(struct RFCNB_Pkt *pkt); + void RFCNB_Print_Pkt(FILE *fd, char *dirn, struct RFCNB_Pkt *pkt, int len); int RFCNB_Name_To_IP(char *host, struct in_addr *Dest_IP); -int RFCNB_Close(int socket); +int RFCNB_Close(int sock); int RFCNB_IP_Connect(struct in_addr Dest_IP, int port); diff -ur pam_smb.orig/smbval/session.c pam_smb/smbval/session.c --- pam_smb.orig/smbval/session.c 1998-10-24 12:45:53.000000000 -0400 +++ pam_smb/smbval/session.c 2004-04-27 11:27:56.000000000 -0400 @@ -25,6 +25,7 @@ #include <malloc.h> #include <string.h> +#include <stdlib.h> int RFCNB_errno = 0; int RFCNB_saved_errno = 0; @@ -34,6 +35,7 @@ #include <netinet/tcp.h> #include "rfcnb-priv.h" #include "rfcnb-util.h" +#include "rfcnb-io.h" int RFCNB_Stats[RFCNB_MAX_STATS]; @@ -85,7 +87,7 @@ if ((errno = RFCNB_Name_To_IP(Service_Address, &Dest_IP)) < 0) { /* Error */ /* No need to modify RFCNB_errno as it was done by RFCNB_Name_To_IP */ - + free(con); return(NULL); } @@ -105,6 +107,7 @@ RFCNB_errno = RFCNBE_NoSpace; RFCNB_saved_errno = errno; + free(con); return(NULL); } @@ -130,6 +133,7 @@ /* No need to modify RFCNB_errno as it was done by RFCNB_IP_Connect */ + free(con); return(NULL); } @@ -349,7 +353,7 @@ /* Pick up the last error response and return in string ... */ -int RFCNB_Get_Error_Msg(int code, char *msg_buf, int len) +void RFCNB_Get_Error_Msg(int code, char *msg_buf, int len) { diff -ur pam_smb.orig/smbval/smbencrypt.c pam_smb/smbval/smbencrypt.c --- pam_smb.orig/smbval/smbencrypt.c 1998-10-24 12:45:54.000000000 -0400 +++ pam_smb/smbval/smbencrypt.c 2004-04-27 11:19:20.000000000 -0400 @@ -23,7 +23,7 @@ #include <string.h> #include <arpa/inet.h> #include <dirent.h> -#include <string.h> +#include <ctype.h> #include <sys/vfs.h> #include <netinet/in.h> diff -ur pam_smb.orig/smbval/smblib.c pam_smb/smbval/smblib.c --- pam_smb.orig/smbval/smblib.c 2003-08-14 22:54:49.000000000 -0400 +++ pam_smb/smbval/smblib.c 2004-04-27 11:20:18.000000000 -0400 @@ -26,6 +26,7 @@ #include "../config.h" #include <malloc.h> #include <string.h> +#include <ctype.h> int SMBlib_errno; int SMBlib_SMB_Error; diff -ur pam_smb.orig/smbval/smblib.h pam_smb/smbval/smblib.h --- pam_smb.orig/smbval/smblib.h 1998-10-24 12:45:56.000000000 -0400 +++ pam_smb/smbval/smblib.h 2004-04-27 11:48:43.000000000 -0400 @@ -89,9 +89,10 @@ int SMB_Get_Last_SMB_Err(); -int SMB_Get_Error_Msg(int msg, char *msgbuf, int len); +void SMB_Get_Error_Msg(int msg, char *msgbuf, int len); void *SMB_Logon_And_TCon(void *con, void *tree, char *user, char *pass, char *service, char *st); #define SMBLIB_DEFAULT_DOMAIN "anydom" + diff -ur pam_smb.orig/smbval/smblib-priv.h pam_smb/smbval/smblib-priv.h --- pam_smb.orig/smbval/smblib-priv.h 1998-10-24 12:45:55.000000000 -0400 +++ pam_smb/smbval/smblib-priv.h 2004-04-27 11:52:03.000000000 -0400 @@ -493,7 +493,7 @@ /* We must make it possible for callers to specify these ... */ -static char *SMB_Prots[] = {"PC NETWORK PROGRAM 1.0", +static const char *SMB_Prots[] = {"PC NETWORK PROGRAM 1.0", "MICROSOFT NETWORKS 1.03", "MICROSOFT NETWORKS 3.0", "DOS LANMAN1.0", diff -ur pam_smb.orig/smbval/smblib-util.c pam_smb/smbval/smblib-util.c --- pam_smb.orig/smbval/smblib-util.c 1998-10-24 12:45:55.000000000 -0400 +++ pam_smb/smbval/smblib-util.c 2004-04-27 11:40:06.000000000 -0400 @@ -25,9 +25,12 @@ #include "smblib-priv.h" #include <malloc.h> +#include <string.h> #include "rfcnb.h" +void RFCNB_Free_Pkt(struct RFCNB_Pkt *pkt); + /* Print out an SMB pkt in all its gory detail ... */ void SMB_Print_Pkt(FILE fd, RFCNB_Pkt *pkt, BOOL command, int Offset, int Len) @@ -161,7 +164,7 @@ /* We offered, and the index back from the server. We allow for a user */ /* supplied list, and assume that it is a subset of our list */ -int SMB_Figure_Protocol(char *dialects[], int prot_index) +int SMB_Figure_Protocol(const char *dialects[], int prot_index) { int i; @@ -357,7 +360,10 @@ Con_Handle -> Encrypt_Key_Len = SVAL(SMB_Hdr(pkt), SMB_negrLM_ekl_offset); p = (SMB_Hdr(pkt) + SMB_negrLM_buf_offset); +#ifdef DEBUG + /* FIXME: decimal format string and variable passed is string pointer? */ fprintf(stderr, "%d", (char *)(SMB_Hdr(pkt) + SMB_negrLM_buf_offset)); +#endif memcpy(Con_Handle->Encrypt_Key, p, 8); p = (SMB_Hdr(pkt) + SMB_negrLM_buf_offset + Con_Handle -> Encrypt_Key_Len); @@ -446,7 +452,7 @@ /* Figure out how much space is needed for path, password, dev ... */ - if (path == NULL | password == NULL | device == NULL) { + if (path == NULL || password == NULL || device == NULL) { #ifdef DEBUG fprintf(stderr, "Bad parameter passed to SMB_TreeConnect\n"); @@ -588,8 +594,8 @@ if (Con_Handle -> first_tree == NULL) { - Con_Handle -> first_tree == tree; - Con_Handle -> last_tree == tree; + Con_Handle -> first_tree = tree; + Con_Handle -> last_tree = tree; } else { @@ -753,7 +759,7 @@ "No such error code.", NULL}; -int SMB_Get_Error_Msg(int msg, char *msgbuf, int len) +void SMB_Get_Error_Msg(int msg, char *msgbuf, int len) { diff -ur pam_smb.orig/smbval/std-defines.h pam_smb/smbval/std-defines.h --- pam_smb.orig/smbval/std-defines.h 1998-10-24 12:45:57.000000000 -0400 +++ pam_smb/smbval/std-defines.h 2004-04-27 11:23:49.000000000 -0400 @@ -5,7 +5,7 @@ Copyright (C) 1996, Richard Sharpe -/* One day we will conditionalize these on OS types ... */ + One day we will conditionalize these on OS types ... */ /* This program is free software; you can redistribute it and/or modify diff -ur pam_smb.orig/smbval/std-includes.h pam_smb/smbval/std-includes.h --- pam_smb.orig/smbval/std-includes.h 1998-10-24 12:45:57.000000000 -0400 +++ pam_smb/smbval/std-includes.h 2004-04-27 11:23:07.000000000 -0400 @@ -5,7 +5,7 @@ Copyright (C) 1996, Richard Sharpe -/* One day we will conditionalize these on OS types ... */ + One day we will conditionalize these on OS types ... */ /* This program is free software; you can redistribute it and/or modify diff -ur pam_smb.orig/smbval/valid.c pam_smb/smbval/valid.c --- pam_smb.orig/smbval/valid.c 1998-10-24 12:48:44.000000000 -0400 +++ pam_smb/smbval/valid.c 2004-04-27 11:21:56.000000000 -0400 @@ -8,7 +8,7 @@ int Valid_User(char *USERNAME,char *PASSWORD,char *SERVER,char *BACKUP, char *DOMAIN) { - char *SMB_Prots[] = {"PC NETWORK PROGRAM 1.0", + const char *SMB_Prots[] = {"PC NETWORK PROGRAM 1.0", "MICROSOFT NETWORKS 1.03", "MICROSOFT NETWORKS 3.0", "LANMAN1.0", diff -ur pam_smb.orig/support.c pam_smb/support.c --- pam_smb.orig/support.c 1998-10-24 12:45:51.000000000 -0400 +++ pam_smb/support.c 2004-04-27 11:11:10.000000000 -0400 @@ -63,7 +63,7 @@ #endif /* LINUX */ #include <security/pam_modules.h> - +#include <security/pam_misc.h> #ifndef NDEBUG @@ -115,7 +115,6 @@ const char **argv ) { int retval; - char *p; struct pam_message msg[1],*pmsg[1]; struct pam_response *resp; @@ -138,21 +137,12 @@ free( resp ); return PAM_AUTH_ERR; } - - p = resp[ 0 ].resp; - - /* This could be a memory leak. If resp[0].resp - is malloc()ed, then it has to be free()ed! - -- alex - */ - - resp[ 0 ].resp = NULL; - } else return PAM_CONV_ERR; - free( resp ); - pam_set_item( pamh, PAM_AUTHTOK, p ); - return PAM_SUCCESS; + retval = pam_set_item( pamh, PAM_AUTHTOK, resp[ 0 ].resp ); + _pam_drop_reply(resp, 1); + + return retval; }