Added password conversion to new SHA-256 method

SVN revision: 2308
This commit is contained in:
2010-07-31 15:34:49 +00:00
parent b0c356ccf3
commit 25eb2558de
+53 -6
View File
@@ -1601,11 +1601,7 @@ char *sha256_crypt (const char *key, const char *salt);
void do_crypt(char *s, char *d, int size)
{
#ifdef HAVE_CRYPT
strlcpy(d, sha256_crypt(s, "$5$el"), size);
#else
base64_encode((unsigned char *) s, (unsigned char *) d, size);
#endif
strlcpy(d, sha256_crypt(s, "$5$")+4, size);
}
/*------------------------------------------------------------------*
@@ -8616,7 +8612,7 @@ BOOL change_pwd(LOGBOOK * lbs, char *user, char *pwd)
void show_change_pwd_page(LOGBOOK * lbs)
{
char str[256], config[80], old_pwd[32], new_pwd[32], new_pwd2[32], act_pwd[32], user[80];
char str[256], config[256], old_pwd[256], new_pwd[256], new_pwd2[256], act_pwd[256], user[256];
int wrong_pwd;
old_pwd[0] = new_pwd[0] = new_pwd2[0] = 0;
@@ -24444,6 +24440,54 @@ BOOL convert_password_file(char *file_name)
/*------------------------------------------------------------------*/
BOOL convert_password_encoding(LOGBOOK * lbs)
{
PMXML_NODE node, pwd;
int i;
char str[256], oldpwd[256], file_name[256];
if (lbs->pwd_xml_tree == NULL)
return FALSE;
if ((node = mxml_find_node(lbs->pwd_xml_tree, "/list/user[1]/password")) == NULL)
return FALSE;
str[0] = 0;
if (mxml_get_attribute(node, "encoding") != NULL)
strlcpy(str, mxml_get_attribute(node, "encoding"), sizeof(str));
if (!strieq(str, "SHA256")) {
if ((node = mxml_find_node(lbs->pwd_xml_tree, "/list")) == NULL)
return FALSE;
printf("Converting password file for logbook \"%s\" to new encoding ... ", lbs->name);
for (i=0 ; i<mxml_get_number_of_children(node) ; i++) {
sprintf(str, "/list/user[%d]/password", i+1);
pwd = mxml_find_node(lbs->pwd_xml_tree, str);
if (pwd) {
strlcpy(str, mxml_get_value(pwd), sizeof(str));
/* assume base64 encoding, might be wrong if HAVE_CRYPT was used */
base64_decode(str, oldpwd);
do_crypt(oldpwd, str, sizeof(str));
mxml_replace_node_value(pwd, str);
mxml_add_attribute(pwd, "encoding", "SHA256");
}
}
if (get_password_file(lbs, file_name, sizeof(file_name)))
mxml_write_tree(file_name, lbs->pwd_xml_tree);
printf("ok\n");
}
return TRUE;
}
/*------------------------------------------------------------------*/
PMXML_NODE load_password_file(LOGBOOK * lbs, char *error, int error_size)
{
PMXML_NODE root, list, xml_tree;
@@ -24534,6 +24578,9 @@ int load_password_files()
lb_list[j].pwd_xml_tree = xml_tree;
}
}
/* convert old password encoding into new format */
convert_password_encoding(&lb_list[i]);
}
}
}