コード例 #1
0
ファイル: relationship.c プロジェクト: ONLYOFFICE/core
static int
xmlSecTransformRelationshipWriteProp(xmlOutputBufferPtr buf, const xmlChar * name, const xmlChar * value) {
    int ret;

    xmlSecAssert2(buf != NULL, -1);
    xmlSecAssert2(name != NULL, -1);

    ret = xmlOutputBufferWriteString(buf, " ");
    if(ret < 0) {
        xmlSecError(XMLSEC_ERRORS_HERE,
                    NULL,
                    "xmlOutputBufferWriteString",
                    XMLSEC_ERRORS_R_XMLSEC_FAILED,
                    XMLSEC_ERRORS_NO_MESSAGE);
        return(-1);
    }

    ret = xmlOutputBufferWriteString(buf, (const char*) name);
    if(ret < 0) {
        xmlSecError(XMLSEC_ERRORS_HERE,
                    NULL,
                    "xmlOutputBufferWriteString",
                    XMLSEC_ERRORS_R_XMLSEC_FAILED,
                    XMLSEC_ERRORS_NO_MESSAGE);
        return(-1);
    }

    if(value != NULL) {
        ret = xmlOutputBufferWriteString(buf, "=\"");
        if(ret < 0) {
            xmlSecError(XMLSEC_ERRORS_HERE,
                        NULL,
                        "xmlOutputBufferWriteString",
                        XMLSEC_ERRORS_R_XMLSEC_FAILED,
                        XMLSEC_ERRORS_NO_MESSAGE);
            return(-1);
        }
        ret = xmlOutputBufferWriteString(buf, (const char*) value);
        if(ret < 0) {
            xmlSecError(XMLSEC_ERRORS_HERE,
                        NULL,
                        "xmlOutputBufferWriteString",
                        XMLSEC_ERRORS_R_XMLSEC_FAILED,
                        XMLSEC_ERRORS_NO_MESSAGE);
            return(-1);
        }
        ret = xmlOutputBufferWriteString(buf, "\"");
        if(ret < 0) {
            xmlSecError(XMLSEC_ERRORS_HERE,
                        NULL,
                        "xmlOutputBufferWriteString",
                        XMLSEC_ERRORS_R_XMLSEC_FAILED,
                        XMLSEC_ERRORS_NO_MESSAGE);
            return(-1);
        }
    }

    return (0);
}
コード例 #2
0
static int
xmlSecNodeSetDumpTextNodesWalkCallback(xmlSecNodeSetPtr nset, xmlNodePtr cur, 
				   xmlNodePtr parent, 
				   void* data) {
    xmlSecAssert2(nset != NULL, -1);
    xmlSecAssert2(cur != NULL, -1);
    xmlSecAssert2(data != NULL, -1);

    if(cur->type == XML_TEXT_NODE) {
	xmlOutputBufferWriteString((xmlOutputBufferPtr)data, 
				    (char*)(cur->content)); 
    }
    return(0);
}
コード例 #3
0
ファイル: node.c プロジェクト: RareHare/reactos
static void htmldtd_dumpcontent(xmlOutputBufferPtr buf, xmlDocPtr doc)
{
    xmlDtdPtr cur = doc->intSubset;

    xmlOutputBufferWriteString(buf, "<!DOCTYPE ");
    xmlOutputBufferWriteString(buf, (const char *)cur->name);
    if (cur->ExternalID)
    {
        xmlOutputBufferWriteString(buf, " PUBLIC ");
        xmlBufferWriteQuotedString(buf->buffer, cur->ExternalID);
        if (cur->SystemID)
        {
            xmlOutputBufferWriteString(buf, " ");
            xmlBufferWriteQuotedString(buf->buffer, cur->SystemID);
	}
    }
    else if (cur->SystemID)
    {
        xmlOutputBufferWriteString(buf, " SYSTEM ");
        xmlBufferWriteQuotedString(buf->buffer, cur->SystemID);
    }
    xmlOutputBufferWriteString(buf, ">\n");
}
コード例 #4
0
int
main(int argc, char **argv) {
    int   ch;
    char *encoding	= "utf8";
    char *filename;
    int   quiet		= 0;
    int   exitcode	= EXIT_OK;

    xmlDocPtr                 doc = NULL;
    xmlDtdPtr                 dtd = NULL;
    xmlCharEncoding           enc;
    xmlCharEncodingHandlerPtr enchandler;
    xmlOutputBufferPtr        out;

    /* LibXML version checking */
    LIBXML_TEST_VERSION;

    /* Who am I? */
    if ((progname = rindex(argv[0], '/')))
        progname++;
    else
        progname = argv[0];

    /* Parsing CLI */
    while ((ch = getopt(argc, argv, "hqe:")) != -1)
	switch (ch) {
	case 'q': quiet    = 1;      break;
	case 'e': encoding = optarg; break;
	case 'h': /* FALL THROUGH */
	case '?': usage(EXIT_OK);    break;
	default:  usage(EXIT_USAGE); break;
	}
    argc -= optind;
    argv += optind;

    switch (argc) {
    case 1:  filename = argv[0]; break;
    case 0:  filename = "-";     break;
    default: usage(EXIT_USAGE);
    }


    /* Get user encoding */
    if ((enc = xmlParseCharEncoding(encoding)) == XML_CHAR_ENCODING_ERROR) {
	fprintf(stderr, "Unknown encoding: %s\n", encoding);
	usage(EXIT_USAGE);
    }
    enchandler = xmlGetCharEncodingHandler(enc);

    /* Shut up */
    xmlSetGenericErrorFunc(NULL, &noerror_handler);
    xmlGetWarningsDefaultValue = 0;
    xmlPedanticParserDefault(0);

    /* File exists? (race condition below) */
    if (strcmp(filename, "-") && (open(filename, O_RDONLY) < 0)) {
	if (!quiet)
	    fprintf(stderr, "ERROR: unable to open %s\n", filename);
	exitcode = EXIT_NOFILE;
	goto exit;
    }

    /* Parse document */
    if ((doc = xmlParseFile(filename)) == NULL) {
	if (!quiet)
	    fprintf(stderr, "ERROR: badly formed document\n");
	exitcode = EXIT_BADXML;
	goto exit;
    }
    
    /* Extract DTD (if any) */
    dtd = xmlGetIntSubset(doc);

    /* Create output buffer */
    if ((out = xmlOutputBufferCreateFd(1, enchandler)) == NULL) {
	if (!quiet)
	    fprintf(stderr, "ERROR: unable to open output channel\n");
	exitcode = EXIT_INTERNAL;
	goto exit;
    }
    
    /* Dump information */
    if (doc->version) {
	xmlOutputBufferWriteString(out, "Version   : ");
	xmlOutputBufferWriteString(out, doc->version);
	xmlOutputBufferWriteString(out, "\n");
    }

    if (doc->encoding) {
	xmlOutputBufferWriteString(out, "Encoding  : ");
	xmlOutputBufferWriteString(out, doc->encoding);
	xmlOutputBufferWriteString(out, "\n");
    }

    if (dtd && dtd->name) {
	xmlOutputBufferWriteString(out, "Name      : ");
	xmlOutputBufferWriteString(out, dtd->name);
	xmlOutputBufferWriteString(out, "\n");
    }

    if (dtd && dtd->ExternalID) {
	xmlOutputBufferWriteString(out, "Identifier: ");
	xmlOutputBufferWriteString(out, dtd->ExternalID);
	xmlOutputBufferWriteString(out, "\n");
    }

    if (dtd && dtd->SystemID) {
	xmlOutputBufferWriteString(out, "URI       : ");
	xmlOutputBufferWriteString(out, dtd->SystemID);
	xmlOutputBufferWriteString(out, "\n");
	xmlOutputBufferFlush(out);
    }

    /* Free resources */
    if (doc)
	xmlFreeDoc(doc);
    xmlCleanupParser();

    /* OK */
 exit:
    exit(exitcode);
}
コード例 #5
0
ファイル: relationship.c プロジェクト: ONLYOFFICE/core
static int
xmlSecTransformRelationshipProcessElementNode(xmlSecTransformPtr transform, xmlOutputBufferPtr buf, xmlNodePtr cur) {
    xmlAttrPtr attr;
    int foundTargetMode = 0;
    int ret;

    xmlSecAssert2(transform != NULL, -1);
    xmlSecAssert2(buf != NULL, -1);
    xmlSecAssert2(cur != NULL, -1);
    xmlSecAssert2(cur->name != NULL, -1);

    /* write open node */
    ret = xmlOutputBufferWriteString(buf, "<");
    if(ret < 0) {
        xmlSecError(XMLSEC_ERRORS_HERE,
                    xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
                    "xmlOutputBufferWriteString",
                    XMLSEC_ERRORS_R_XMLSEC_FAILED,
                    XMLSEC_ERRORS_NO_MESSAGE);
        return(-1);
    }
    ret = xmlOutputBufferWriteString(buf, (const char *)cur->name);
    if(ret < 0) {
        xmlSecError(XMLSEC_ERRORS_HERE,
                    xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
                    "xmlOutputBufferWriteString",
                    XMLSEC_ERRORS_R_XMLSEC_FAILED,
                    XMLSEC_ERRORS_NO_MESSAGE);
        return(-1);
    }

    /* write namespaces */
    if(cur->nsDef != NULL) {
        ret = xmlSecTransformRelationshipWriteNs(buf, cur->nsDef->href);
        if(ret < 0) {
            xmlSecError(XMLSEC_ERRORS_HERE,
                        xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
                        "xmlSecTransformRelationshipWriteNs",
                        XMLSEC_ERRORS_R_XMLSEC_FAILED,
                        XMLSEC_ERRORS_NO_MESSAGE);
            return(-1);
        }
    }

    /**
     *  write attributes:
     *
     *  This is step 3, point 6: add default value of TargetMode if there is no such attribute.
     */
    for(attr = cur->properties; attr != NULL; attr = attr->next) {
        xmlChar * value = xmlGetProp(cur, attr->name);

        if(xmlStrcmp(attr->name, xmlSecRelationshipAttrTargetMode) == 0) {
            foundTargetMode = 1;
        }

        ret = xmlSecTransformRelationshipWriteProp(buf, attr->name, value);
        if(ret < 0) {
            xmlSecError(XMLSEC_ERRORS_HERE,
                        xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
                        "xmlSecTransformRelationshipWriteProp",
                        XMLSEC_ERRORS_R_XMLSEC_FAILED,
                        XMLSEC_ERRORS_NO_MESSAGE);
            xmlFree(value);
            return(-1);
        }

        xmlFree(value);
    }

    /* write TargetMode */
    if(xmlStrcmp(cur->name, xmlSecNodeRelationship) == 0 && !foundTargetMode) {
        ret = xmlSecTransformRelationshipWriteProp(buf, xmlSecRelationshipAttrTargetMode, BAD_CAST "Internal");
        if(ret < 0) {
            xmlSecError(XMLSEC_ERRORS_HERE,
                        xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
                        "xmlSecTransformRelationshipWriteProp(TargetMode=Internal)",
                        XMLSEC_ERRORS_R_XMLSEC_FAILED,
                        XMLSEC_ERRORS_NO_MESSAGE);
            return(-1);
        }
    }

    /* finish writing open node */
    ret = xmlOutputBufferWriteString(buf, ">");
    if(ret < 0) {
        xmlSecError(XMLSEC_ERRORS_HERE,
                    xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
                    "xmlOutputBufferWriteString",
                    XMLSEC_ERRORS_R_XMLSEC_FAILED,
                    XMLSEC_ERRORS_NO_MESSAGE);
        return(-1);
    }

    /* write children */
    if(cur->children != NULL) {
        ret = xmlSecTransformRelationshipProcessNodeList(transform, buf, cur->children);
        if(ret < 0) {
            xmlSecError(XMLSEC_ERRORS_HERE,
                        xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
                        "xmlSecTransformRelationshipProcessNodeList",
                        XMLSEC_ERRORS_R_XMLSEC_FAILED,
                        XMLSEC_ERRORS_NO_MESSAGE);
            return(-1);
        }
    }

    /* write closing node */
    ret = xmlOutputBufferWriteString(buf, "</");
    if(ret < 0) {
        xmlSecError(XMLSEC_ERRORS_HERE,
                    xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
                    "xmlOutputBufferWriteString",
                    XMLSEC_ERRORS_R_XMLSEC_FAILED,
                    XMLSEC_ERRORS_NO_MESSAGE);
        return(-1);
    }
    ret = xmlOutputBufferWriteString(buf, (const char *)cur->name);
    if(ret < 0) {
        xmlSecError(XMLSEC_ERRORS_HERE,
                    xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
                    "xmlOutputBufferWriteString",
                    XMLSEC_ERRORS_R_XMLSEC_FAILED,
                    XMLSEC_ERRORS_NO_MESSAGE);
        return(-1);
    }
    if(xmlOutputBufferWriteString(buf, ">") < 0) {
        xmlSecError(XMLSEC_ERRORS_HERE,
                    xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
                    "xmlOutputBufferWriteString",
                    XMLSEC_ERRORS_R_XMLSEC_FAILED,
                    XMLSEC_ERRORS_NO_MESSAGE);
        return(-1);
    }

    /* done */
    return(0);
}