Support for unset login type.
This commit is contained in:
parent
94a6c925bc
commit
88a4d7ba4d
@ -122,7 +122,10 @@ const char *mpw_site_result(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (resultType & MPResultTypeClassTemplate) {
|
||||
if (resultType == MPResultTypeNone) {
|
||||
return NULL;
|
||||
}
|
||||
else if (resultType & MPResultTypeClassTemplate) {
|
||||
switch (algorithmVersion) {
|
||||
case MPAlgorithmVersionV0:
|
||||
return mpw_site_template_password_v0( masterKey, siteKey, resultType, resultParam );
|
||||
@ -203,6 +206,10 @@ const char *mpw_site_state(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (resultType == MPResultTypeNone) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch (algorithmVersion) {
|
||||
case MPAlgorithmVersionV0:
|
||||
return mpw_site_state_v0( masterKey, siteKey, resultType, resultParam );
|
||||
|
@ -93,7 +93,7 @@ MPMarshalledUser *mpw_marshal_user(
|
||||
.fullName = mpw_strdup( fullName ),
|
||||
.identicon = MPIdenticonUnset,
|
||||
.keyID = NULL,
|
||||
.defaultType = MPResultTypeDefault,
|
||||
.defaultType = MPResultTypeDefaultResult,
|
||||
.lastUsed = 0,
|
||||
|
||||
.sites_count = 0,
|
||||
@ -122,7 +122,7 @@ MPMarshalledSite *mpw_marshal_site(
|
||||
.resultType = resultType,
|
||||
.resultState = NULL,
|
||||
|
||||
.loginType = MPResultTypeTemplateName,
|
||||
.loginType = MPResultTypeDefaultLogin,
|
||||
.loginState = NULL,
|
||||
|
||||
.url = NULL,
|
||||
@ -864,7 +864,7 @@ static void mpw_marshal_read_flat(
|
||||
char *fullName = NULL, *keyID = NULL;
|
||||
MPAlgorithmVersion algorithm = MPAlgorithmVersionCurrent;
|
||||
MPIdenticon identicon = MPIdenticonUnset;
|
||||
MPResultType defaultType = MPResultTypeDefault;
|
||||
MPResultType defaultType = MPResultTypeDefaultResult;
|
||||
time_t exportDate = 0;
|
||||
bool headerStarted = false, headerEnded = false, importRedacted = false;
|
||||
for (const char *endOfLine, *positionInLine = in; (endOfLine = strstr( positionInLine, "\n" )); positionInLine = endOfLine + 1) {
|
||||
@ -1014,13 +1014,14 @@ static void mpw_marshal_read_flat(
|
||||
mpw_marshal_error( file, MPMarshalErrorIllegal, "Invalid site last used: %s: %s", siteName, str_lastUsed );
|
||||
continue;
|
||||
}
|
||||
MPResultType siteLoginType = siteLoginState && strlen( siteLoginState )? MPResultTypeStatefulPersonal: MPResultTypeNone;
|
||||
|
||||
char dateString[21];
|
||||
mpw_marshal_data_set_num( siteCounter, file->data, "sites", siteName, "counter", NULL );
|
||||
mpw_marshal_data_set_num( siteAlgorithm, file->data, "sites", siteName, "algorithm", NULL );
|
||||
mpw_marshal_data_set_num( siteType, file->data, "sites", siteName, "type", NULL );
|
||||
mpw_marshal_data_set_str( siteResultState, file->data, "sites", siteName, "password", NULL );
|
||||
mpw_marshal_data_set_num( MPResultTypeDefault, file->data, "sites", siteName, "login_type", NULL );
|
||||
mpw_marshal_data_set_num( siteLoginType, file->data, "sites", siteName, "login_type", NULL );
|
||||
mpw_marshal_data_set_str( siteLoginState, file->data, "sites", siteName, "login_name", NULL );
|
||||
mpw_marshal_data_set_num( strtol( str_uses, NULL, 10 ), file->data, "sites", siteName, "uses", NULL );
|
||||
if (strftime( dateString, sizeof( dateString ), "%FT%TZ", gmtime( &siteLastUsed ) ))
|
||||
@ -1150,7 +1151,7 @@ MPMarshalledUser *mpw_marshal_auth(
|
||||
}
|
||||
MPIdenticon identicon = mpw_identicon_encoded( mpw_marshal_data_get_str( file->data, "user", "identicon", NULL ) );
|
||||
const char *keyID = mpw_marshal_data_get_str( file->data, "user", "key_id", NULL );
|
||||
MPResultType defaultType = mpw_default_n( MPResultTypeDefault, mpw_marshal_data_get_num( file->data, "user", "default_type", NULL ) );
|
||||
MPResultType defaultType = mpw_default_n( MPResultTypeDefaultResult, mpw_marshal_data_get_num( file->data, "user", "default_type", NULL ) );
|
||||
if (!mpw_type_short_name( defaultType )) {
|
||||
mpw_marshal_error( file, MPMarshalErrorIllegal, "Invalid user default type: %u", defaultType );
|
||||
return NULL;
|
||||
@ -1216,7 +1217,7 @@ MPMarshalledUser *mpw_marshal_auth(
|
||||
return NULL;
|
||||
}
|
||||
const char *siteResultState = mpw_marshal_data_get_str( siteData, "password", NULL );
|
||||
MPResultType siteLoginType = mpw_default_n( MPResultTypeTemplateName, mpw_marshal_data_get_num( siteData, "login_type", NULL ) );
|
||||
MPResultType siteLoginType = mpw_default_n( MPResultTypeDefaultLogin, mpw_marshal_data_get_num( siteData, "login_type", NULL ) );
|
||||
if (!mpw_type_short_name( siteLoginType )) {
|
||||
mpw_marshal_error( file, MPMarshalErrorIllegal, "Invalid site login type: %s: %u", siteName, siteLoginType );
|
||||
mpw_free( &masterKey, MPMasterKeySize );
|
||||
@ -1258,10 +1259,10 @@ MPMarshalledUser *mpw_marshal_auth(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (siteResultState && strlen( siteResultState ))
|
||||
if (siteResultState && strlen( siteResultState ) && masterKey)
|
||||
site->resultState = mpw_site_state( masterKey, site->siteName, site->counter,
|
||||
MPKeyPurposeAuthentication, NULL, site->resultType, siteResultState, site->algorithm );
|
||||
if (siteLoginState && strlen( siteLoginState ))
|
||||
if (siteLoginState && strlen( siteLoginState ) && masterKey)
|
||||
site->loginState = mpw_site_state( masterKey, site->siteName, MPCounterValueInitial,
|
||||
MPKeyPurposeIdentification, NULL, site->loginType, siteLoginState, site->algorithm );
|
||||
}
|
||||
@ -1282,7 +1283,7 @@ MPMarshalledUser *mpw_marshal_auth(
|
||||
|
||||
if (!user->redacted) {
|
||||
// Clear Text
|
||||
if (answerState && strlen( answerState ))
|
||||
if (answerState && strlen( answerState ) && masterKey)
|
||||
question->state = mpw_site_state( masterKey, site->siteName, MPCounterValueInitial,
|
||||
MPKeyPurposeRecovery, question->keyword, question->type, answerState, site->algorithm );
|
||||
}
|
||||
|
@ -38,6 +38,8 @@ const MPResultType mpw_type_named(const char *typeName) {
|
||||
|
||||
// Find what password type is represented by the type letter.
|
||||
if (strlen( typeName ) == 1) {
|
||||
if ('0' == typeName[0])
|
||||
return MPResultTypeNone;
|
||||
if ('x' == typeName[0])
|
||||
return MPResultTypeTemplateMaximum;
|
||||
if ('l' == typeName[0])
|
||||
@ -63,6 +65,8 @@ const MPResultType mpw_type_named(const char *typeName) {
|
||||
}
|
||||
|
||||
// Find what password type is represented by the type name.
|
||||
if (mpw_strncasecmp( mpw_type_short_name( MPResultTypeNone ), typeName, strlen( typeName ) ) == OK)
|
||||
return MPResultTypeNone;
|
||||
if (mpw_strncasecmp( mpw_type_short_name( MPResultTypeTemplateMaximum ), typeName, strlen( typeName ) ) == OK)
|
||||
return MPResultTypeTemplateMaximum;
|
||||
if (mpw_strncasecmp( mpw_type_short_name( MPResultTypeTemplateLong ), typeName, strlen( typeName ) ) == OK)
|
||||
@ -93,6 +97,8 @@ const MPResultType mpw_type_named(const char *typeName) {
|
||||
const char *mpw_type_abbreviation(const MPResultType resultType) {
|
||||
|
||||
switch (resultType) {
|
||||
case MPResultTypeNone:
|
||||
return "no";
|
||||
case MPResultTypeTemplateMaximum:
|
||||
return "max";
|
||||
case MPResultTypeTemplateLong:
|
||||
@ -125,6 +131,8 @@ const char *mpw_type_abbreviation(const MPResultType resultType) {
|
||||
const char *mpw_type_short_name(const MPResultType resultType) {
|
||||
|
||||
switch (resultType) {
|
||||
case MPResultTypeNone:
|
||||
return "none";
|
||||
case MPResultTypeTemplateMaximum:
|
||||
return "maximum";
|
||||
case MPResultTypeTemplateLong:
|
||||
@ -157,6 +165,8 @@ const char *mpw_type_short_name(const MPResultType resultType) {
|
||||
const char *mpw_type_long_name(const MPResultType resultType) {
|
||||
|
||||
switch (resultType) {
|
||||
case MPResultTypeNone:
|
||||
return "None";
|
||||
case MPResultTypeTemplateMaximum:
|
||||
return "Maximum Security Password";
|
||||
case MPResultTypeTemplateLong:
|
||||
|
@ -80,6 +80,9 @@ typedef mpw_opts( uint16_t, MPSiteFeature ) {
|
||||
|
||||
// bit 0-3 | MPResultTypeClass | MPSiteFeature
|
||||
typedef mpw_enum( uint32_t, MPResultType ) {
|
||||
/** 0: Don't produce a result */
|
||||
MPResultTypeNone = 0,
|
||||
|
||||
/** 16: pg^VMAUBk5x3p%HP%i4= */
|
||||
MPResultTypeTemplateMaximum = 0x0 | MPResultTypeClassTemplate | 0x0,
|
||||
/** 17: BiroYena8:Kixa */
|
||||
@ -105,7 +108,8 @@ typedef mpw_enum( uint32_t, MPResultType ) {
|
||||
/** 4160: Derive a unique binary key. */
|
||||
MPResultTypeDeriveKey = 0x0 | MPResultTypeClassDerive | MPSiteFeatureAlternative,
|
||||
|
||||
MPResultTypeDefault = MPResultTypeTemplateLong,
|
||||
MPResultTypeDefaultResult = MPResultTypeTemplateLong,
|
||||
MPResultTypeDefaultLogin = MPResultTypeTemplateName,
|
||||
};
|
||||
|
||||
typedef mpw_enum ( uint32_t, MPCounterValue ) {
|
||||
|
Loading…
Reference in New Issue
Block a user