| | |
| | | |
| | | import static com.forgerock.opendj.cli.CliMessages.INFO_FILE_PLACEHOLDER; |
| | | import static com.forgerock.opendj.cli.ToolVersionHandler.newSdkVersionHandler; |
| | | import static com.forgerock.opendj.cli.Utils.throwIfArgumentsConflict; |
| | | import static com.forgerock.opendj.ldap.tools.LDAPToolException.newToolParamException; |
| | | import static com.forgerock.opendj.ldap.tools.ToolsMessages.*; |
| | | import static com.forgerock.opendj.cli.Utils.filterExitCode; |
| | | import static com.forgerock.opendj.cli.CommonArguments.*; |
| | | import static com.forgerock.opendj.ldap.tools.Utils.addControlsToRequest; |
| | | import static com.forgerock.opendj.ldap.tools.Utils.ensureLdapProtocolVersionIsSupported; |
| | | import static com.forgerock.opendj.ldap.tools.Utils.printErrorMessage; |
| | | import static com.forgerock.opendj.ldap.tools.Utils.readControls; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | | import org.forgerock.opendj.ldap.Connection; |
| | | import org.forgerock.opendj.ldap.ConnectionFactory; |
| | | import org.forgerock.opendj.ldap.DecodeException; |
| | | import org.forgerock.opendj.ldap.LdapException; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.forgerock.opendj.ldap.controls.Control; |
| | | import org.forgerock.opendj.ldap.requests.PasswordModifyExtendedRequest; |
| | | import org.forgerock.opendj.ldap.requests.Requests; |
| | | import org.forgerock.opendj.ldap.responses.PasswordModifyExtendedResult; |
| | | |
| | | import com.forgerock.opendj.cli.ArgumentException; |
| | | import com.forgerock.opendj.cli.ArgumentParser; |
| | | import com.forgerock.opendj.cli.BooleanArgument; |
| | | import com.forgerock.opendj.cli.ConnectionFactoryProvider; |
| | | import com.forgerock.opendj.cli.ConsoleApplication; |
| | |
| | | * The command-line arguments provided to this program. |
| | | */ |
| | | public static void main(final String[] args) { |
| | | final int retCode = new LDAPPasswordModify().run(args); |
| | | final LDAPPasswordModify ldapPasswordModify = new LDAPPasswordModify(); |
| | | int retCode; |
| | | try { |
| | | retCode = ldapPasswordModify.run(args); |
| | | } catch (final LDAPToolException e) { |
| | | e.printErrorMessage(ldapPasswordModify); |
| | | retCode = e.getResultCode(); |
| | | } |
| | | System.exit(filterExitCode(retCode)); |
| | | } |
| | | |
| | |
| | | return verbose.isPresent(); |
| | | } |
| | | |
| | | private int run(final String[] args) { |
| | | private int run(final String[] args) throws LDAPToolException { |
| | | // Create the command-line argument parser for use with this program. |
| | | final LocalizableMessage toolDescription = INFO_LDAPPWMOD_TOOL_DESCRIPTION.get(); |
| | | final ArgumentParser argParser = |
| | | new ArgumentParser(LDAPPasswordModify.class.getName(), toolDescription, false); |
| | | final LDAPToolArgumentParser argParser = LDAPToolArgumentParser.builder(LDAPPasswordModify.class.getName()) |
| | | .toolDescription(toolDescription) |
| | | .needAuthenticatedConnectionFactory() |
| | | .build(); |
| | | argParser.setVersionHandler(newSdkVersionHandler()); |
| | | argParser.setShortToolDescription(REF_SHORT_DESC_LDAPPASSWORDMODIFY.get()); |
| | | |
| | | ConnectionFactoryProvider connectionFactoryProvider; |
| | | ConnectionFactory connectionFactory; |
| | | |
| | | FileBasedArgument currentPWFile; |
| | | FileBasedArgument newPWFile; |
| | | BooleanArgument showUsage; |
| | | IntegerArgument version; |
| | | IntegerArgument ldapProtocolVersion; |
| | | StringArgument currentPW; |
| | | StringArgument controlStr; |
| | | StringArgument newPW; |
| | |
| | | .description(INFO_LDAPPWMOD_DESCRIPTION_AUTHZID.get()) |
| | | .valuePlaceholder(INFO_PROXYAUTHID_PLACEHOLDER.get()) |
| | | .buildAndAddToParser(argParser); |
| | | controlStr = |
| | | StringArgument.builder("control") |
| | | .shortIdentifier('J') |
| | | .description(INFO_DESCRIPTION_CONTROLS.get()) |
| | | .multiValued() |
| | | .valuePlaceholder(INFO_LDAP_CONTROL_PLACEHOLDER.get()) |
| | | .buildAndAddToParser(argParser); |
| | | controlStr = controlArgument(); |
| | | argParser.addArgument(controlStr); |
| | | |
| | | version = ldapVersionArgument(); |
| | | argParser.addArgument(version); |
| | | ldapProtocolVersion = ldapVersionArgument(); |
| | | argParser.addArgument(ldapProtocolVersion); |
| | | |
| | | verbose = verboseArgument(); |
| | | argParser.addArgument(verbose); |
| | |
| | | return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue(); |
| | | } |
| | | |
| | | // Parse the command-line arguments provided to this program. |
| | | try { |
| | | argParser.parseArguments(args); |
| | | |
| | | // If we should just display usage or version information, then print it and exit. |
| | | if (argParser.usageOrVersionDisplayed()) { |
| | | return 0; |
| | | } |
| | | |
| | | connectionFactory = connectionFactoryProvider.getAuthenticatedConnectionFactory(); |
| | | } catch (final ArgumentException ae) { |
| | | argParser.displayMessageAndUsageReference(getErrStream(), ERR_ERROR_PARSING_ARGS.get(ae.getMessage())); |
| | | return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue(); |
| | | argParser.parseArgumentsNoBindRequest(args, getErrStream(), connectionFactoryProvider); |
| | | if (argParser.usageOrVersionDisplayed()) { |
| | | return ResultCode.SUCCESS.intValue(); |
| | | } |
| | | ensureLdapProtocolVersionIsSupported(ldapProtocolVersion); |
| | | |
| | | final PasswordModifyExtendedRequest request = Requests.newPasswordModifyExtendedRequest(); |
| | | addControlsToRequest(request, readControls(controlStr)); |
| | | |
| | | try { |
| | | final int versionNumber = version.getIntValue(); |
| | | if (versionNumber != 2 && versionNumber != 3) { |
| | | errPrintln(ERR_DESCRIPTION_INVALID_VERSION.get(String.valueOf(versionNumber))); |
| | | return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue(); |
| | | } |
| | | } catch (final ArgumentException ae) { |
| | | errPrintln(ERR_DESCRIPTION_INVALID_VERSION.get(version.getValue())); |
| | | return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue(); |
| | | } |
| | | |
| | | if (controlStr.isPresent()) { |
| | | for (final String ctrlString : controlStr.getValues()) { |
| | | try { |
| | | final Control ctrl = Utils.getControl(ctrlString); |
| | | request.addControl(ctrl); |
| | | } catch (final DecodeException de) { |
| | | errPrintln(ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString)); |
| | | ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (newPW.isPresent() && newPWFile.isPresent()) { |
| | | final LocalizableMessage message = |
| | | ERR_LDAPPWMOD_CONFLICTING_ARGS.get(newPW.getLongIdentifier(), newPWFile |
| | | .getLongIdentifier()); |
| | | errPrintln(message); |
| | | return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue(); |
| | | } |
| | | |
| | | if (currentPW.isPresent() && currentPWFile.isPresent()) { |
| | | final LocalizableMessage message = |
| | | ERR_LDAPPWMOD_CONFLICTING_ARGS.get(currentPW.getLongIdentifier(), currentPWFile |
| | | .getLongIdentifier()); |
| | | errPrintln(message); |
| | | return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue(); |
| | | throwIfArgumentsConflict(newPW, newPWFile); |
| | | throwIfArgumentsConflict(currentPW, currentPWFile); |
| | | } catch (final ArgumentException e) { |
| | | throw newToolParamException(e, e.getMessageObject()); |
| | | } |
| | | |
| | | Connection connection; |
| | | try { |
| | | connection = connectionFactory.getConnection(); |
| | | connection = argParser.getConnectionFactory().getConnection(); |
| | | } catch (final LdapException ere) { |
| | | return Utils.printErrorMessage(this, ere); |
| | | return printErrorMessage(this, ere, ERR_LDAPPWMOD_FAILED); |
| | | } |
| | | |
| | | if (proxyAuthzID.isPresent()) { |
| | |
| | | try { |
| | | result = connection.extendedRequest(request); |
| | | } catch (final LdapException e) { |
| | | LocalizableMessage message = |
| | | ERR_LDAPPWMOD_FAILED.get(e.getResult().getResultCode().intValue(), e |
| | | .getResult().getResultCode().toString()); |
| | | errPrintln(message); |
| | | |
| | | final String errorMessage = e.getResult().getDiagnosticMessage(); |
| | | if (errorMessage != null && errorMessage.length() > 0) { |
| | | message = ERR_LDAPPWMOD_FAILURE_ERROR_MESSAGE.get(errorMessage); |
| | | errPrintln(message); |
| | | } |
| | | |
| | | final String matchedDN = e.getResult().getMatchedDN(); |
| | | if (matchedDN != null && matchedDN.length() > 0) { |
| | | message = ERR_LDAPPWMOD_FAILURE_MATCHED_DN.get(matchedDN); |
| | | errPrintln(message); |
| | | } |
| | | return e.getResult().getResultCode().intValue(); |
| | | return printErrorMessage(this, e, ERR_LDAPPWMOD_FAILED); |
| | | } |
| | | |
| | | println(INFO_LDAPPWMOD_SUCCESSFUL.get()); |
| | | |
| | | final String additionalInfo = result.getDiagnosticMessage(); |
| | | if (additionalInfo != null && additionalInfo.length() > 0) { |
| | | println(INFO_LDAPPWMOD_ADDITIONAL_INFO.get(additionalInfo)); |
| | | } |
| | | |
| | | Utils.printlnTextMsg(this, INFO_LDAPPWMOD_ADDITIONAL_INFO, result.getDiagnosticMessage()); |
| | | if (result.getGeneratedPassword() != null) { |
| | | println(INFO_LDAPPWMOD_GENERATED_PASSWORD.get(ByteString.valueOfBytes( |
| | | result.getGeneratedPassword()).toString())); |
| | | println(INFO_LDAPPWMOD_GENERATED_PASSWORD.get( |
| | | ByteString.valueOfBytes(result.getGeneratedPassword()).toString())); |
| | | } |
| | | |
| | | return 0; |
| | | return ResultCode.SUCCESS.intValue(); |
| | | } |
| | | } |