@NotNull @Override public CommandStatus execute( @NotNull CouchbaseMock mock, @NotNull Command command, @NotNull JsonObject payload) { super.execute(mock, command, payload); try { executeReal(payload, command); } catch (AccessControlException e) { error = e.getMessage(); } return getResponse(); }
@Test public void mustChangePassword() { // PRE: reset vivaldi's password UserPatch userPatch = new UserPatch(); userPatch.setKey("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee"); userPatch.setPassword(new PasswordPatch.Builder().value("password321").build()); userService.update(userPatch); // 0. access as vivaldi -> succeed SyncopeClient vivaldiClient = clientFactory.create("vivaldi", "password321"); Pair<Map<String, Set<String>>, UserTO> self = vivaldiClient.self(); assertFalse(self.getRight().isMustChangePassword()); // 1. update user vivaldi (3) requirig password update userPatch = new UserPatch(); userPatch.setKey("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee"); userPatch.setMustChangePassword(new BooleanReplacePatchItem.Builder().value(true).build()); UserTO vivaldi = updateUser(userPatch).getEntity(); assertTrue(vivaldi.isMustChangePassword()); // 2. attempt to access -> fail try { vivaldiClient.getService(ResourceService.class).list(); fail(); } catch (AccessControlException e) { assertNotNull(e); assertEquals("Please change your password first", e.getMessage()); } // 3. change password vivaldiClient.getService(UserSelfService.class).changePassword("password123"); // 4. verify it worked self = clientFactory.create("vivaldi", "password123").self(); assertFalse(self.getRight().isMustChangePassword()); }
/** * Wait until a proper shutdown command is received, then return. This keeps the main thread alive * - the thread pool listening for http connections is daemon threads. * * <p>NOTE: This method has been copied and modified slightly from * org.apache.catalina.core.StandardServer.await() We should have just called * container.getServer().await() but it returns null for getServer() and i do not know why :) */ public void await() { // Set up a server socket to wait on ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(port, 1, InetAddress.getByName(address)); } catch (IOException e) { System.out.println( "TomcatManager.await: create[" + address + ":" + port + "]: " + e.getMessage()); System.exit(1); } // Loop waiting for a connection and a valid command while (true) { // Wait for the next connection Socket socket = null; InputStream stream = null; try { socket = serverSocket.accept(); socket.setSoTimeout(10 * 1000); // Ten seconds stream = socket.getInputStream(); } catch (AccessControlException ace) { System.out.println("TomcatManager.accept security exception: " + ace.getMessage()); continue; } catch (IOException e) { System.out.println("TomcatManager.await: accept: " + e.getMessage()); System.exit(1); } // Read a set of characters from the socket StringBuilder command = new StringBuilder(); int expected = 1024; // Cut off to avoid DoS attack while (expected < shutdown.length()) { if (random == null) { random = new Random(); } expected += (random.nextInt() % 1024); } while (expected > 0) { int ch = -1; try { ch = stream.read(); } catch (IOException e) { System.out.println("TomcatManager.await: read: " + e.getMessage()); ch = -1; } if (ch < 32) { // Control character or EOF terminates loop break; } command.append((char) ch); expected--; } // Close the socket now that we are done with it try { socket.close(); } catch (IOException e) { // Ignore } // Match against our command string boolean match = command.toString().equals(shutdown); if (match) { System.out.println("TomcatManager.shutdownViaPort"); break; } else { System.out.println( "TomcatManager.await: Invalid command '" + command.toString() + "' received"); } } // Close the server socket and return try { serverSocket.close(); } catch (IOException e) { // Ignore } }
/** * Read configuration for the specified classloader. * * @param classLoader * @throws IOException Error */ protected void readConfiguration(ClassLoader classLoader) throws IOException { InputStream is = null; // Special case for URL classloaders which are used in containers: // only look in the local repositories to avoid redefining loggers 20 times try { if (classLoader instanceof URLClassLoader) { URL logConfig = ((URLClassLoader) classLoader).findResource("logging.properties"); if (null != logConfig) { if (Boolean.getBoolean(DEBUG_PROPERTY)) System.err.println( getClass().getName() + ".readConfiguration(): " + "Found logging.properties at " + logConfig); is = classLoader.getResourceAsStream("logging.properties"); } else { if (Boolean.getBoolean(DEBUG_PROPERTY)) System.err.println( getClass().getName() + ".readConfiguration(): " + "Found no logging.properties"); } } } catch (AccessControlException ace) { // No permission to configure logging in context // Log and carry on ClassLoaderLogManagerClassLoaderLogInfo info = classLoaderLoggers.get(ClassLoader.getSystemClassLoader()); if (info != null) { Logger log = info.getLoggers().get(""); if (log != null) { Permission perm = ace.getPermission(); if (perm instanceof FilePermission && perm.getActions().equals("read")) { log.warning( "Reading " + perm.getName() + " is not permitted. See \"per context logging\" in the default catalina.policy file."); } else { log.warning( "Reading logging.properties is not permitted in some context. See \"per context logging\" in the default catalina.policy file."); log.warning("Original error was: " + ace.getMessage()); } } } } if ((is == null) && (classLoader == ClassLoader.getSystemClassLoader())) { String configFileStr = System.getProperty("java.util.logging.config.file"); if (configFileStr != null) { try { is = new FileInputStream(replace(configFileStr)); } catch (IOException e) { // Ignore } } // Try the default JVM configuration if (is == null) { File defaultFile = new File(new File(System.getProperty("java.home"), "lib"), "logging.properties"); try { is = new FileInputStream(defaultFile); } catch (IOException e) { // Critical problem, do something ... } } } Logger localClassLoaderLogManagerRootLogger = new ClassLoaderLogManagerRootLogger(); if (is == null) { // Retrieve the root logger of the parent classloader instead ClassLoader current = classLoader.getParent(); ClassLoaderLogManagerClassLoaderLogInfo info = null; while (current != null && info == null) { info = getClassLoaderInfo(current); current = current.getParent(); } if (info != null) { localClassLoaderLogManagerRootLogger.setParent(info.getRootNode().getLogger()); } } ClassLoaderLogManagerClassLoaderLogInfo info = new ClassLoaderLogManagerClassLoaderLogInfo( new ClassLoaderLogManagerLogNode(null, localClassLoaderLogManagerRootLogger)); classLoaderLoggers.put(classLoader, info); if (is != null) { readConfiguration(is, classLoader); } addLogger(localClassLoaderLogManagerRootLogger); }
/** * Wait until a proper shutdown command is received, then return. This keeps the main thread alive * - the thread pool listening for http connections is daemon threads. */ public void await() { // Negative values - don't wait on port - tomcat is embedded or we just don't like ports if (port == -2) { // undocumented yet - for embedding apps that are around, alive. return; } if (port == -1) { while (true) { try { Thread.sleep(10000); } catch (InterruptedException ex) { } if (stopAwait) return; } } // Set up a server socket to wait on ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(port, 1, InetAddress.getByName("localhost")); } catch (IOException e) { log.error("StandardServer.await: create[" + port + "]: ", e); System.exit(1); } // Loop waiting for a connection and a valid command while (true) { // Wait for the next connection Socket socket = null; InputStream stream = null; try { socket = serverSocket.accept(); socket.setSoTimeout(10 * 1000); // Ten seconds stream = socket.getInputStream(); } catch (AccessControlException ace) { log.warn("StandardServer.accept security exception: " + ace.getMessage(), ace); continue; } catch (IOException e) { log.error("StandardServer.await: accept: ", e); System.exit(1); } // Read a set of characters from the socket StringBuffer command = new StringBuffer(); int expected = 1024; // Cut off to avoid DoS attack while (expected < shutdown.length()) { if (random == null) random = new Random(); expected += (random.nextInt() % 1024); } while (expected > 0) { int ch = -1; try { ch = stream.read(); } catch (IOException e) { log.warn("StandardServer.await: read: ", e); ch = -1; } if (ch < 32) // Control character or EOF terminates loop break; command.append((char) ch); expected--; } // Close the socket now that we are done with it try { socket.close(); } catch (IOException e) {; } // Match against our command string boolean match = command.toString().equals(shutdown); if (match) { break; } else log.warn("StandardServer.await: Invalid command '" + command.toString() + "' received"); } // Close the server socket and return try { serverSocket.close(); } catch (IOException e) {; } }
@SuppressWarnings({"unchecked", "rawtypes"}) public void run() { init(); this.state = 3; this.percentage = 5; try { loadJarURLs(); String path = (String) AccessController.doPrivileged( new PrivilegedExceptionAction() { public Object run() throws Exception { return Util.getWorkingDirectory() + File.separator + "bin" + File.separator; } }); File dir = new File(path); if (!dir.exists()) { dir.mkdirs(); } if (this.latestVersion != null) { File versionFile = new File(dir, "version"); boolean cacheAvailable = false; if ((versionFile.exists()) && ((this.latestVersion.equals("-1")) || (this.latestVersion.equals(readVersionFile(versionFile))))) { cacheAvailable = true; this.percentage = 90; } boolean updateLauncher = false; if (this.forceUpdate == 1) { updateLauncher = true; } try { String versionLauncher = ""; URL url_version = new URL(versionFileTxt); try { BufferedReader in = new BufferedReader(new InputStreamReader(url_version.openStream())); versionLauncher = in.readLine(); } catch (Exception e) { System.err.println(e); } File current_versionLauncher = new File(dir, "vose.txt"); if (!current_versionLauncher.exists()) { updateLauncher = true; try { BufferedWriter bw = new BufferedWriter(new FileWriter(current_versionLauncher)); bw.append(versionLauncher); bw.close(); } catch (IOException e) { System.out.println("Erreur"); } } else { try { Scanner scanner = new Scanner(current_versionLauncher); while (scanner.hasNextLine()) { String line = scanner.nextLine().trim(); if (!versionLauncher.equals(line)) { updateLauncher = true; try { BufferedWriter bw = new BufferedWriter(new FileWriter(current_versionLauncher)); bw.append(versionLauncher); bw.close(); } catch (IOException e) { System.out.println("Erreur"); } } } scanner.close(); } catch (IOException e) { System.out.println("Erreur" + e.getMessage()); } } } catch (Exception localException1) { } if ((!cacheAvailable) || (updateLauncher)) { downloadJars(path); extractJars(path); extractNatives(path); if (this.latestVersion != null) { this.percentage = 90; writeVersionFile(versionFile, this.latestVersion); } } } updateClassPath(dir); this.state = 10; } catch (AccessControlException ace) { fatalErrorOccured(ace.getMessage(), ace); this.certificateRefused = true; } catch (Exception e) { fatalErrorOccured(e.getMessage(), e); } finally { this.loaderThread = null; } }