diff --git a/MasterPassword/C/mpw-cli.c b/MasterPassword/C/mpw-cli.c index 3f651baa..68f744a4 100644 --- a/MasterPassword/C/mpw-cli.c +++ b/MasterPassword/C/mpw-cli.c @@ -25,7 +25,7 @@ static void usage() { - fprintf( stderr, "Usage: mpw [-u name] [-t type] [-c counter] site\n\n" ); + fprintf( stderr, "Usage: mpw [-u name] [-t type] [-c counter] [-V version] [-v variant] [-C context] [-h] site\n\n" ); fprintf( stderr, " -u name Specify the full name of the user.\n" " Defaults to %s in env.\n\n", MP_env_fullname ); fprintf( stderr, " -t type Specify the password's template.\n" diff --git a/MasterPassword/C/mpw-types.c b/MasterPassword/C/mpw-types.c index 92d5da5f..4020b1e4 100644 --- a/MasterPassword/C/mpw-types.c +++ b/MasterPassword/C/mpw-types.c @@ -21,15 +21,17 @@ const MPSiteType mpw_typeWithName(const char *typeName) { + // Lower-case and trim optionally leading "generated" string from typeName to standardize it. + size_t stdTypeNameOffset = 0; size_t stdTypeNameSize = strlen( typeName ); - char stdTypeName[strlen( typeName )]; - if (stdTypeNameSize > strlen( "generated" )) - strcpy( stdTypeName, typeName + strlen( "generated" ) ); - else - strcpy( stdTypeName, typeName ); - for (char *tN = stdTypeName; *tN; ++tN) - *tN = (char)tolower( *tN ); + if (strcasestr(typeName, "generated" ) == typeName) + stdTypeNameSize -= (stdTypeNameOffset = strlen("generated")); + char stdTypeName[stdTypeNameSize + 1]; + for (size_t c = 0; c < stdTypeNameSize; ++c) + stdTypeName[c] = (char)tolower( typeName[c + stdTypeNameOffset] ); + stdTypeName[stdTypeNameSize] = '\0'; + // Find what site type is represented by the type name. if (0 == strcmp( stdTypeName, "x" ) || 0 == strcmp( stdTypeName, "max" ) || 0 == strcmp( stdTypeName, "maximum" )) return MPSiteTypeGeneratedMaximum; if (0 == strcmp( stdTypeName, "l" ) || 0 == strcmp( stdTypeName, "long" )) @@ -47,8 +49,7 @@ const MPSiteType mpw_typeWithName(const char *typeName) { if (0 == strcmp( stdTypeName, "p" ) || 0 == strcmp( stdTypeName, "phrase" )) return MPSiteTypeGeneratedPhrase; - fprintf( stderr, "Not a generated type name: %s", stdTypeName ); - abort(); + ftl( "Not a generated type name: %s", stdTypeName ); } inline const char **mpw_templatesForType(MPSiteType type, size_t *count) { diff --git a/MasterPassword/ObjC/Mac/MPPasswordWindowController.m b/MasterPassword/ObjC/Mac/MPPasswordWindowController.m index cefac5ed..5dffcea7 100644 --- a/MasterPassword/ObjC/Mac/MPPasswordWindowController.m +++ b/MasterPassword/ObjC/Mac/MPPasswordWindowController.m @@ -605,6 +605,7 @@ CGDirectDisplayID displayID = [self.window.screen.deviceDescription[@"NSScreenNumber"] unsignedIntValue]; CGImageRef capturedImage = CGDisplayCreateImage( displayID ); if (!capturedImage || CGImageGetWidth( capturedImage ) <= 1) { + CFRelease( capturedImage ); wrn( @"Failed to capture screen image for display: %d", displayID ); return; } diff --git a/Scripts/updatePlist b/Scripts/updatePlist index aabaf3e5..82b85c8d 100755 --- a/Scripts/updatePlist +++ b/Scripts/updatePlist @@ -51,10 +51,11 @@ setSettingWithTitle "Copyright" "$(getPlistWithKey NSHumanReadableCopyright)" if [[ $DEPLOYMENT_LOCATION = YES ]]; then # This build is a release. Do some release checks. + crashlyticsPlist="$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Crashlytics.plist" passed=1 [[ $description != *-dirty ]] || \ { passed=0; err 'ERROR: Cannot release a dirty version, first commit any changes.'; } - [[ $(PlistBuddy -c "Print :'API Key'" "$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Crashlytics.plist") ]] || \ + [[ -r "$crashlyticsPlist" && $(PlistBuddy -c "Print :'API Key'" "$crashlyticsPlist" 2>/dev/null) ]] || \ { passed=0; err 'ERROR: Cannot release: Crashlytics API key is missing.'; } (( passed )) || \ { ftl "Failed to pass release checks. Fix the above errors and re-try. Aborting."; exit 1; } diff --git a/Site/2013-05/img/c-cli.png b/Site/2013-05/img/c-cli.png index 7f60eab2..1302622c 100644 Binary files a/Site/2013-05/img/c-cli.png and b/Site/2013-05/img/c-cli.png differ diff --git a/Site/2013-05/index.html b/Site/2013-05/index.html index 1a7bf01a..6a9a5f37 100644 --- a/Site/2013-05/index.html +++ b/Site/2013-05/index.html @@ -82,7 +82,7 @@ iPhone / iPad | Mac | Desktop (Java) | - Terminal (Native C) | + Terminal (C) | Android (Beta) | Web (Beta) diff --git a/Site/2013-05/masterpassword-android-2.2.apk b/Site/2013-05/masterpassword-android-2.2.apk new file mode 100644 index 00000000..7f1df67b Binary files /dev/null and b/Site/2013-05/masterpassword-android-2.2.apk differ diff --git a/Site/2013-05/masterpassword-gui-2.2.jar b/Site/2013-05/masterpassword-gui-2.2.jar new file mode 100644 index 00000000..c08f7e3e Binary files /dev/null and b/Site/2013-05/masterpassword-gui-2.2.jar differ