⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loadpolicy.c

📁 xen虚拟机源代码安装包
💻 C
字号:
/* * *  Authors:  Michael LeMay, <mdlemay@epoch.ncsc.mil> *            George Coker, <gscoker@alpha.ncsc.mil> * *    This program is free software; you can redistribute it and/or modify *    it under the terms of the GNU General Public License version 2, *      as published by the Free Software Foundation. */#include <stdlib.h>#include <errno.h>#include <stdio.h>#include <xenctrl.h>#include <fcntl.h>#include <sys/mman.h>#include <sys/stat.h>#include <string.h>#include <unistd.h>#include <flask.h>#define USE_MMAPstatic void usage (int argCnt, const char *args[]){    fprintf(stderr, "Usage: %s <policy.file>\n", args[0]);    exit(1);}int main (int argCnt, const char *args[]){    const char *polFName;    int polFd = 0;    void *polMem = NULL;    void *polMemCp = NULL;    struct stat info;    int ret;    int xch = 0;    if (argCnt != 2)        usage(argCnt, args);    polFName = args[1];    polFd = open(polFName, O_RDONLY);    if ( polFd < 0 )    {        fprintf(stderr, "Error occurred opening policy file '%s': %s\n",                polFName, strerror(errno));        ret = -1;        goto cleanup;    }        ret = stat(polFName, &info);    if ( ret < 0 )    {        fprintf(stderr, "Error occurred retrieving information about"                "policy file '%s': %s\n", polFName, strerror(errno));        goto cleanup;    }    polMemCp = malloc(info.st_size);#ifdef USE_MMAP    polMem = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, polFd, 0);    if ( !polMem )    {        fprintf(stderr, "Error occurred mapping policy file in memory: %s\n",                strerror(errno));        ret = -1;        goto cleanup;    }    xch = xc_interface_open();    if ( xch < 0 )    {        fprintf(stderr, "Unable to create interface to xenctrl: %s\n",                strerror(errno));        ret = -1;        goto cleanup;    }    memcpy(polMemCp, polMem, info.st_size);#else    ret = read(polFd, polMemCp, info.st_size);    if ( ret < 0 )    {        fprintf(stderr, "Unable to read new Flask policy file: %s\n",                strerror(errno));        goto cleanup;    }    else    {        printf("Read %d bytes from policy file '%s'.\n", ret, polFName);    }#endif    ret = flask_load(xch, polMemCp, info.st_size);    if ( ret < 0 )    {        errno = -ret;        fprintf(stderr, "Unable to load new Flask policy: %s\n",                strerror(errno));        ret = -1;        goto cleanup;    }    else    {        printf("Successfully loaded policy.\n");    }done:    if ( polMemCp )        free(polMemCp);    if ( polMem )    {        ret = munmap(polMem, info.st_size);        if ( ret < 0 )            fprintf(stderr, "Unable to unmap policy memory: %s\n", strerror(errno));    }    if ( polFd )        close(polFd);    if ( xch )        xc_interface_close(xch);    return ret;cleanup:    goto done;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -