1 /* 2 * Copyright (c) 2003 The Visigoth Software Society. All rights 3 * reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in 14 * the documentation and/or other materials provided with the 15 * distribution. 16 * 17 * 3. The end-user documentation included with the redistribution, if 18 * any, must include the following acknowledgement: 19 * "This product includes software developed by the 20 * Visigoth Software Society (http://www.visigoths.org/)." 21 * Alternately, this acknowledgement may appear in the software itself, 22 * if and wherever such third-party acknowledgements normally appear. 23 * 24 * 4. Neither the name "FreeMarker", "Visigoth", nor any of the names of the 25 * project contributors may be used to endorse or promote products derived 26 * from this software without prior written permission. For written 27 * permission, please contact visigoths@visigoths.org. 28 * 29 * 5. Products derived from this software may not be called "FreeMarker" or "Visigoth" 30 * nor may "FreeMarker" or "Visigoth" appear in their names 31 * without prior written permission of the Visigoth Software Society. 32 * 33 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 34 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 35 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 36 * DISCLAIMED. IN NO EVENT SHALL THE VISIGOTH SOFTWARE SOCIETY OR 37 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 38 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 39 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 40 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 41 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 42 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 43 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 44 * SUCH DAMAGE. 45 * ==================================================================== 46 * 47 * This software consists of voluntary contributions made by many 48 * individuals on behalf of the Visigoth Software Society. For more 49 * information on the Visigoth Software Society, please see 50 * http://www.visigoths.org/ 51 */ 52 53 package freemarker.template.utility; 54 55 import java.security.AccessControlException; 56 import java.security.AccessController; 57 import java.security.PrivilegedAction; 58 59 import freemarker.log.Logger; 60 61 /** 62 * @author Attila Szegedi 63 * @version $Id: SecurityUtilities.java,v 1.2 2004/11/11 13:27:39 szegedia Exp $ 64 */ 65 public class SecurityUtilities 66 { 67 private static final Logger logger = Logger.getLogger("freemarker.security"); 68 private SecurityUtilities() 69 { 70 } 71 72 public static String getSystemProperty(final String key) 73 { 74 return (String) AccessController.doPrivileged( 75 new PrivilegedAction() 76 { 77 public Object run() 78 { 79 return System.getProperty(key); 80 } 81 }); 82 } 83 84 public static String getSystemProperty(final String key, final String defValue) 85 { 86 try 87 { 88 return (String) AccessController.doPrivileged( 89 new PrivilegedAction() 90 { 91 public Object run() 92 { 93 return System.getProperty(key, defValue); 94 } 95 }); 96 } 97 catch(AccessControlException e) 98 { 99 logger.warn("Insufficient permissions to read system property '" + 100 key + "', using default value '" + defValue + "'"); 101 return defValue; 102 } 103 } 104 105 public static Integer getSystemProperty(final String key, final int defValue) 106 { 107 try 108 { 109 return (Integer) AccessController.doPrivileged( 110 new PrivilegedAction() 111 { 112 public Object run() 113 { 114 return Integer.getInteger(key, defValue); 115 } 116 }); 117 } 118 catch(AccessControlException e) 119 { 120 logger.warn("Insufficient permissions to read system property '" + 121 key + "', using default value " + defValue + ""); 122 return new Integer(defValue); 123 } 124 } 125 }