Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(835)

Unified Diff: third_party/libxslt/libxslt/security.c

Issue 2865973002: Check in the libxslt roll script. (Closed)
Patch Set: Consistent quotes. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/libxslt/libxslt/security.h ('k') | third_party/libxslt/libxslt/templates.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/libxslt/libxslt/security.c
diff --git a/third_party/libxslt/libxslt/security.c b/third_party/libxslt/libxslt/security.c
deleted file mode 100644
index 89de90bd3f1ebdb09310f562a35bcd599824b379..0000000000000000000000000000000000000000
--- a/third_party/libxslt/libxslt/security.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * security.c: Implementation of the XSLT security framework
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXSLT
-#include "libxslt.h"
-
-#include <string.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-#ifdef HAVE_FLOAT_H
-#include <float.h>
-#endif
-#ifdef HAVE_IEEEFP_H
-#include <ieeefp.h>
-#endif
-#ifdef HAVE_NAN_H
-#include <nan.h>
-#endif
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-#include <windows.h>
-#ifndef INVALID_FILE_ATTRIBUTES
-#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
-#endif
-#endif
-
-#ifndef HAVE_STAT
-# ifdef HAVE__STAT
- /* MS C library seems to define stat and _stat. The definition
- * is identical. Still, mapping them to each other causes a warning. */
-# ifndef _MSC_VER
-# define stat(x,y) _stat(x,y)
-# endif
-# define HAVE_STAT
-# endif
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#include "xslt.h"
-#include "xsltInternals.h"
-#include "xsltutils.h"
-#include "extensions.h"
-#include "security.h"
-
-
-struct _xsltSecurityPrefs {
- xsltSecurityCheck readFile;
- xsltSecurityCheck createFile;
- xsltSecurityCheck createDir;
- xsltSecurityCheck readNet;
- xsltSecurityCheck writeNet;
-};
-
-static xsltSecurityPrefsPtr xsltDefaultSecurityPrefs = NULL;
-
-/************************************************************************
- * *
- * Module interfaces *
- * *
- ************************************************************************/
-
-/**
- * xsltNewSecurityPrefs:
- *
- * Create a new security preference block
- *
- * Returns a pointer to the new block or NULL in case of error
- */
-xsltSecurityPrefsPtr
-xsltNewSecurityPrefs(void) {
- xsltSecurityPrefsPtr ret;
-
- xsltInitGlobals();
-
- ret = (xsltSecurityPrefsPtr) xmlMalloc(sizeof(xsltSecurityPrefs));
- if (ret == NULL) {
- xsltTransformError(NULL, NULL, NULL,
- "xsltNewSecurityPrefs : malloc failed\n");
- return(NULL);
- }
- memset(ret, 0, sizeof(xsltSecurityPrefs));
- return(ret);
-}
-
-/**
- * xsltFreeSecurityPrefs:
- * @sec: the security block to free
- *
- * Free up a security preference block
- */
-void
-xsltFreeSecurityPrefs(xsltSecurityPrefsPtr sec) {
- if (sec == NULL)
- return;
- xmlFree(sec);
-}
-
-/**
- * xsltSetSecurityPrefs:
- * @sec: the security block to update
- * @option: the option to update
- * @func: the user callback to use for this option
- *
- * Update the security option to use the new callback checking function
- *
- * Returns -1 in case of error, 0 otherwise
- */
-int
-xsltSetSecurityPrefs(xsltSecurityPrefsPtr sec, xsltSecurityOption option,
- xsltSecurityCheck func) {
- xsltInitGlobals();
- if (sec == NULL)
- return(-1);
- switch (option) {
- case XSLT_SECPREF_READ_FILE:
- sec->readFile = func; return(0);
- case XSLT_SECPREF_WRITE_FILE:
- sec->createFile = func; return(0);
- case XSLT_SECPREF_CREATE_DIRECTORY:
- sec->createDir = func; return(0);
- case XSLT_SECPREF_READ_NETWORK:
- sec->readNet = func; return(0);
- case XSLT_SECPREF_WRITE_NETWORK:
- sec->writeNet = func; return(0);
- }
- return(-1);
-}
-
-/**
- * xsltGetSecurityPrefs:
- * @sec: the security block to update
- * @option: the option to lookup
- *
- * Lookup the security option to get the callback checking function
- *
- * Returns NULL if not found, the function otherwise
- */
-xsltSecurityCheck
-xsltGetSecurityPrefs(xsltSecurityPrefsPtr sec, xsltSecurityOption option) {
- if (sec == NULL)
- return(NULL);
- switch (option) {
- case XSLT_SECPREF_READ_FILE:
- return(sec->readFile);
- case XSLT_SECPREF_WRITE_FILE:
- return(sec->createFile);
- case XSLT_SECPREF_CREATE_DIRECTORY:
- return(sec->createDir);
- case XSLT_SECPREF_READ_NETWORK:
- return(sec->readNet);
- case XSLT_SECPREF_WRITE_NETWORK:
- return(sec->writeNet);
- }
- return(NULL);
-}
-
-/**
- * xsltSetDefaultSecurityPrefs:
- * @sec: the security block to use
- *
- * Set the default security preference application-wide
- */
-void
-xsltSetDefaultSecurityPrefs(xsltSecurityPrefsPtr sec) {
-
- xsltDefaultSecurityPrefs = sec;
-}
-
-/**
- * xsltGetDefaultSecurityPrefs:
- *
- * Get the default security preference application-wide
- *
- * Returns the current xsltSecurityPrefsPtr in use or NULL if none
- */
-xsltSecurityPrefsPtr
-xsltGetDefaultSecurityPrefs(void) {
- return(xsltDefaultSecurityPrefs);
-}
-
-/**
- * xsltSetCtxtSecurityPrefs:
- * @sec: the security block to use
- * @ctxt: an XSLT transformation context
- *
- * Set the security preference for a specific transformation
- *
- * Returns -1 in case of error, 0 otherwise
- */
-int
-xsltSetCtxtSecurityPrefs(xsltSecurityPrefsPtr sec,
- xsltTransformContextPtr ctxt) {
- if (ctxt == NULL)
- return(-1);
- ctxt->sec = (void *) sec;
- return(0);
-}
-
-
-/**
- * xsltSecurityAllow:
- * @sec: the security block to use
- * @ctxt: an XSLT transformation context
- * @value: unused
- *
- * Function used to always allow an operation
- *
- * Returns 1 always
- */
-int
-xsltSecurityAllow(xsltSecurityPrefsPtr sec ATTRIBUTE_UNUSED,
- xsltTransformContextPtr ctxt ATTRIBUTE_UNUSED,
- const char *value ATTRIBUTE_UNUSED) {
- return(1);
-}
-
-/**
- * xsltSecurityForbid:
- * @sec: the security block to use
- * @ctxt: an XSLT transformation context
- * @value: unused
- *
- * Function used to always forbid an operation
- *
- * Returns 0 always
- */
-int
-xsltSecurityForbid(xsltSecurityPrefsPtr sec ATTRIBUTE_UNUSED,
- xsltTransformContextPtr ctxt ATTRIBUTE_UNUSED,
- const char *value ATTRIBUTE_UNUSED) {
- return(0);
-}
-
-/************************************************************************
- * *
- * Internal interfaces *
- * *
- ************************************************************************/
-
-/**
- * xsltCheckFilename
- * @path: the path to check
- *
- * function checks to see if @path is a valid source
- * (file, socket...) for XML.
- *
- * TODO: remove at some point !!!
- * Local copy of xmlCheckFilename to avoid a hard dependency on
- * a new version of libxml2
- *
- * if stat is not available on the target machine,
- * returns 1. if stat fails, returns 0 (if calling
- * stat on the filename fails, it can't be right).
- * if stat succeeds and the file is a directory,
- * returns 2. otherwise returns 1.
- */
-
-static int
-xsltCheckFilename (const char *path)
-{
-#ifdef HAVE_STAT
- struct stat stat_buffer;
-#if defined(WIN32) && !defined(__CYGWIN__)
- DWORD dwAttrs;
-
- dwAttrs = GetFileAttributesA(path);
- if (dwAttrs != INVALID_FILE_ATTRIBUTES) {
- if (dwAttrs & FILE_ATTRIBUTE_DIRECTORY) {
- return 2;
- }
- }
-#endif
-
- if (stat(path, &stat_buffer) == -1)
- return 0;
-
-#ifdef S_ISDIR
- if (S_ISDIR(stat_buffer.st_mode)) {
- return 2;
- }
-#endif
-#endif
- return 1;
-}
-
-static int
-xsltCheckWritePath(xsltSecurityPrefsPtr sec,
- xsltTransformContextPtr ctxt,
- const char *path)
-{
- int ret;
- xsltSecurityCheck check;
- char *directory;
-
- check = xsltGetSecurityPrefs(sec, XSLT_SECPREF_WRITE_FILE);
- if (check != NULL) {
- ret = check(sec, ctxt, path);
- if (ret == 0) {
- xsltTransformError(ctxt, NULL, NULL,
- "File write for %s refused\n", path);
- return(0);
- }
- }
-
- directory = xmlParserGetDirectory (path);
-
- if (directory != NULL) {
- ret = xsltCheckFilename(directory);
- if (ret == 0) {
- /*
- * The directory doesn't exist check for creation
- */
- check = xsltGetSecurityPrefs(sec,
- XSLT_SECPREF_CREATE_DIRECTORY);
- if (check != NULL) {
- ret = check(sec, ctxt, directory);
- if (ret == 0) {
- xsltTransformError(ctxt, NULL, NULL,
- "Directory creation for %s refused\n",
- path);
- xmlFree(directory);
- return(0);
- }
- }
- ret = xsltCheckWritePath(sec, ctxt, directory);
- if (ret == 1)
- ret = mkdir(directory, 0755);
- }
- xmlFree(directory);
- if (ret < 0)
- return(ret);
- }
-
- return(1);
-}
-
-/**
- * xsltCheckWrite:
- * @sec: the security options
- * @ctxt: an XSLT transformation context
- * @URL: the resource to be written
- *
- * Check if the resource is allowed to be written, if necessary makes
- * some preliminary work like creating directories
- *
- * Return 1 if write is allowed, 0 if not and -1 in case or error.
- */
-int
-xsltCheckWrite(xsltSecurityPrefsPtr sec,
- xsltTransformContextPtr ctxt, const xmlChar *URL) {
- int ret;
- xmlURIPtr uri;
- xsltSecurityCheck check;
-
- uri = xmlParseURI((const char *)URL);
- if (uri == NULL) {
- uri = xmlCreateURI();
- if (uri == NULL) {
- xsltTransformError(ctxt, NULL, NULL,
- "xsltCheckWrite: out of memory for %s\n", URL);
- return(-1);
- }
- uri->path = (char *)xmlStrdup(URL);
- }
- if ((uri->scheme == NULL) ||
- (xmlStrEqual(BAD_CAST uri->scheme, BAD_CAST "file"))) {
-
-#if defined(WIN32) && !defined(__CYGWIN__)
- if ((uri->path)&&(uri->path[0]=='/')&&
- (uri->path[1]!='\0')&&(uri->path[2]==':'))
- ret = xsltCheckWritePath(sec, ctxt, uri->path+1);
- else
-#endif
-
- /*
- * Check if we are allowed to write this file
- */
- ret = xsltCheckWritePath(sec, ctxt, uri->path);
- if (ret <= 0) {
- xmlFreeURI(uri);
- return(ret);
- }
- } else {
- /*
- * Check if we are allowed to write this network resource
- */
- check = xsltGetSecurityPrefs(sec, XSLT_SECPREF_WRITE_NETWORK);
- if (check != NULL) {
- ret = check(sec, ctxt, (const char *)URL);
- if (ret == 0) {
- xsltTransformError(ctxt, NULL, NULL,
- "File write for %s refused\n", URL);
- xmlFreeURI(uri);
- return(0);
- }
- }
- }
- xmlFreeURI(uri);
- return(1);
-}
-
-
-/**
- * xsltCheckRead:
- * @sec: the security options
- * @ctxt: an XSLT transformation context
- * @URL: the resource to be read
- *
- * Check if the resource is allowed to be read
- *
- * Return 1 if read is allowed, 0 if not and -1 in case or error.
- */
-int
-xsltCheckRead(xsltSecurityPrefsPtr sec,
- xsltTransformContextPtr ctxt, const xmlChar *URL) {
- int ret;
- xmlURIPtr uri;
- xsltSecurityCheck check;
-
- uri = xmlParseURI((const char *)URL);
- if (uri == NULL) {
- xsltTransformError(ctxt, NULL, NULL,
- "xsltCheckRead: URL parsing failed for %s\n",
- URL);
- return(-1);
- }
- if ((uri->scheme == NULL) ||
- (xmlStrEqual(BAD_CAST uri->scheme, BAD_CAST "file"))) {
-
- /*
- * Check if we are allowed to read this file
- */
- check = xsltGetSecurityPrefs(sec, XSLT_SECPREF_READ_FILE);
- if (check != NULL) {
- ret = check(sec, ctxt, uri->path);
- if (ret == 0) {
- xsltTransformError(ctxt, NULL, NULL,
- "Local file read for %s refused\n", URL);
- xmlFreeURI(uri);
- return(0);
- }
- }
- } else {
- /*
- * Check if we are allowed to write this network resource
- */
- check = xsltGetSecurityPrefs(sec, XSLT_SECPREF_READ_NETWORK);
- if (check != NULL) {
- ret = check(sec, ctxt, (const char *)URL);
- if (ret == 0) {
- xsltTransformError(ctxt, NULL, NULL,
- "Network file read for %s refused\n", URL);
- xmlFreeURI(uri);
- return(0);
- }
- }
- }
- xmlFreeURI(uri);
- return(1);
-}
-
« no previous file with comments | « third_party/libxslt/libxslt/security.h ('k') | third_party/libxslt/libxslt/templates.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698