aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2005-12-08 17:00:08 +0100
committerJelmer Vernooij <jelmer@samba.org>2005-12-08 17:00:08 +0100
commit7cad7b41a0b661c38ae5f6239aaf58361788edc9 (patch)
tree213ab238ece2ab120b7ec25f62b19224b37d6856
parent09adf08684c62fff0f507304ed37680137de4637 (diff)
Clearer seperation between crypting and generic password code
-rw-r--r--commands.c4
-rw-r--r--crypting.c26
-rw-r--r--crypting.h3
-rw-r--r--irc.c18
-rw-r--r--irc.h1
-rw-r--r--storage_text.c6
6 files changed, 28 insertions, 30 deletions
diff --git a/commands.c b/commands.c
index 4f2b6b85..2877aa4b 100644
--- a/commands.c
+++ b/commands.c
@@ -113,7 +113,7 @@ int cmd_register( irc_t *irc, char **cmd )
return( 0 );
}
- setpassnc( irc, cmd[1] );
+ irc_setpass( irc, cmd[1] );
switch( global.storage->save( irc, FALSE )) {
case STORAGE_ALREADY_EXISTS:
irc_usermsg( irc, "Nick is already registered" );
@@ -144,7 +144,7 @@ int cmd_drop( irc_t *irc, char **cmd )
irc_usermsg( irc, "Password invalid" );
return( 0 );
case STORAGE_OK:
- setpassnc( irc, NULL );
+ irc_setpass( irc, NULL );
irc_usermsg( irc, "Account `%s' removed", irc->nick );
return( 0 );
default:
diff --git a/crypting.c b/crypting.c
index 50967e91..8f43d3af 100644
--- a/crypting.c
+++ b/crypting.c
@@ -51,8 +51,6 @@ typedef struct irc
#include <stdio.h>
#include <stdlib.h>
-#define irc_usermsg
-
#endif
/*\
@@ -61,21 +59,7 @@ typedef struct irc
* correctness.
\*/
-/* USE WITH CAUTION!
- Sets pass without checking */
-void setpassnc (irc_t *irc, const char *pass)
-{
- if (irc->password) g_free (irc->password);
-
- if (pass) {
- irc->password = g_strdup (pass);
- irc_usermsg (irc, "Password successfully changed");
- } else {
- irc->password = NULL;
- }
-}
-
-int setpass (irc_t *irc, const char *pass, const char* md5sum)
+int checkpass (const char *pass, const char *md5sum)
{
md5_state_t md5state;
md5_byte_t digest[16];
@@ -93,13 +77,11 @@ int setpass (irc_t *irc, const char *pass, const char* md5sum)
if (digits[0] != md5sum[j]) return (-1);
if (digits[1] != md5sum[j + 1]) return (-1);
}
-
- /* If pass is correct, we end up here and we set the pass */
- setpassnc (irc, pass);
-
- return (0);
+
+ return( 0 );
}
+
char *hashpass (irc_t *irc) {
md5_state_t md5state;
md5_byte_t digest[16];
diff --git a/crypting.h b/crypting.h
index 58534c07..c2572770 100644
--- a/crypting.h
+++ b/crypting.h
@@ -23,8 +23,7 @@
Suite 330, Boston, MA 02111-1307 USA
*/
-void setpassnc (irc_t *irc, const char *pass); /* USE WITH CAUTION! */
-int setpass (irc_t *irc, const char *pass, const char* md5sum);
+int checkpass (const char *password, const char *md5sum);
char *hashpass (irc_t *irc);
char *obfucrypt (irc_t *irc, char *line);
char *deobfucrypt (irc_t *irc, char *line);
diff --git a/irc.c b/irc.c
index 9ce6eef6..5601e314 100644
--- a/irc.c
+++ b/irc.c
@@ -31,9 +31,9 @@ static gboolean irc_userping( gpointer _irc );
GSList *irc_connection_list = NULL;
-char *passchange (irc_t *irc, void *set, char *value)
+static char *passchange (irc_t *irc, void *set, char *value)
{
- setpassnc (irc, value);
+ irc_setpass (irc, value);
return (NULL);
}
@@ -267,6 +267,20 @@ void irc_free(irc_t * irc)
g_main_quit( global.loop );
}
+/* USE WITH CAUTION!
+ Sets pass without checking */
+void irc_setpass (irc_t *irc, const char *pass)
+{
+ if (irc->password) g_free (irc->password);
+
+ if (pass) {
+ irc->password = g_strdup (pass);
+ irc_usermsg (irc, "Password successfully changed");
+ } else {
+ irc->password = NULL;
+ }
+}
+
int irc_process( irc_t *irc )
{
char **lines, *temp;
diff --git a/irc.h b/irc.h
index 86aaec5e..9e0500f9 100644
--- a/irc.h
+++ b/irc.h
@@ -136,6 +136,7 @@ void irc_kill( irc_t *irc, user_t *u );
void irc_invite( irc_t *irc, char *nick, char *channel );
void irc_whois( irc_t *irc, char *nick );
int irc_away( irc_t *irc, char *away );
+void irc_setpass( irc_t *irc, const char *pass ); /* USE WITH CAUTION! */
int irc_send( irc_t *irc, char *nick, char *s, int flags );
int irc_privmsg( irc_t *irc, user_t *u, char *type, char *to, char *prefix, char *msg );
diff --git a/storage_text.c b/storage_text.c
index 004e891c..f3ca8a38 100644
--- a/storage_text.c
+++ b/storage_text.c
@@ -52,7 +52,8 @@ static storage_status_t text_load ( const char *my_nick, const char* password, i
if( !fp ) return STORAGE_NO_SUCH_USER;
fscanf( fp, "%32[^\n]s", s );
- if( setpass( irc, password, s ) < 0 )
+
+ if (checkpass (password, s) != 0)
{
fclose( fp );
return STORAGE_INVALID_PASSWORD;
@@ -276,7 +277,8 @@ static storage_status_t text_check_pass( const char *nick, const char *password
fscanf( fp, "%32[^\n]s", s );
fclose( fp );
- /*FIXME: Check password */
+ if (checkpass( password, s) == -1)
+ return STORAGE_INVALID_PASSWORD;
return STORAGE_OK;
}