Exemplo n.º 1
0
inline int
magic_setflags_wrapper(struct magic_set *ms, int flags)
{
    if (flags < MAGIC_NONE || flags > MAGIC_NO_CHECK_BUILTIN) {
	errno = EINVAL;
	return -EINVAL;
    }

    return magic_setflags(ms, flags);
}
Exemplo n.º 2
0
int main(int argc, char *argv[])
{
    const char *magic_result;
    magic_t magic_cookie;
    int ret = EXIT_FAILURE;
    const int MAGIC_FLAGS_LENGTH = 3;
    struct magic_flag_s magic_flags[] = {
        mk_magic_flag(MAGIC_NONE),
        mk_magic_flag(MAGIC_MIME),
        mk_magic_flag(MAGIC_MIME_ENCODING),
    };

    // Function magic_open() takes flags that modify libmagic's behaviour, but
    // they can be modified later by using function magic_setflags().
    magic_cookie = magic_open(MAGIC_NONE); 
    if (magic_cookie == NULL)
    {
        printf("Unable to initialize libmagic.\n");
        goto fail;
    }

    // NULL - Using default database, it is possible to specify your own.
    if (magic_load(magic_cookie, NULL) != 0)
    {
        printf("Failed while loading magic database: %s\n",
            magic_error(magic_cookie));
        goto fail_with_cleanup;
    }

    for (int i = 1; i < argc; i++)
    {
        for (int j = 0; j < MAGIC_FLAGS_LENGTH; j++)
        {
            magic_setflags(magic_cookie, magic_flags[j].value);

            // I'm assuming that magic_file() returns pointer to some allocated
            // memmory associated with magic_cookie and therefore it's not
            // necessary to dealocate it afterwards.
            magic_result = magic_file(magic_cookie, argv[i]);
            if (magic_result != NULL)
            {
                printf("Result with %s flag: %s\n",
                    magic_flags[j].string, magic_result);
            }
        }
    }
    ret = EXIT_SUCCESS;

fail_with_cleanup:
    magic_close(magic_cookie);

fail:
    return ret;
}
Exemplo n.º 3
0
QueryData genMagicData(QueryContext& context) {
  QueryData results;
  magic_t magic_cookie = nullptr;

  // No default flags
  magic_cookie = magic_open(MAGIC_NONE);

  if (magic_cookie == nullptr) {
    VLOG(1) << "Unable to initialize magic library";
    return results;
  }
  if (magic_load(magic_cookie, nullptr) != 0) {
    VLOG(1) << "Unable to load magic database : " << magic_error(magic_cookie);
    magic_close(magic_cookie);
    return results;
  }

  // Iterate through all the provided paths
  auto paths = context.constraints["path"].getAll(EQUALS);
  for (const auto& path_string : paths) {
    Row r;
    r["path"] = path_string;
    r["data"] = magic_file(magic_cookie, path_string.c_str());

    // Retrieve MIME type
    magic_setflags(magic_cookie, MAGIC_MIME_TYPE);
    r["mime_type"] = magic_file(magic_cookie, path_string.c_str());

    // Retrieve MIME encoding
    magic_setflags(magic_cookie, MAGIC_MIME_ENCODING);
    r["mime_encoding"] = magic_file(magic_cookie, path_string.c_str());

    results.push_back(r);
  }

  magic_close(magic_cookie);
  return results;
}
Exemplo n.º 4
0
static PyObject* py_magic_setflags(PyObject* self, PyObject* args)
{
    PyObject *pycookie;
    magic_t cookie;
    int flags;
    int result;

    if(!(PyArg_ParseTuple(args, "Oi", &pycookie, &flags)))
        return NULL;
	
    cookie = PyCObject_AsVoidPtr(pycookie);

    result = magic_setflags(cookie, flags);

    return PyInt_FromLong(result);
}
Exemplo n.º 5
0
inline int
magic_setflags_wrapper(struct magic_set *ms, int flags)
{
    if (flags < MAGIC_NONE || flags > MAGIC_NO_CHECK_BUILTIN) {
        errno = EINVAL;
        return -EINVAL;
    }

#if !defined(HAVE_UTIME) && !defined(HAVE_UTIMES)
    if (flags & MAGIC_PRESERVE_ATIME) {
        errno = ENOSYS;
        return -ENOSYS;
    }
#endif

    return magic_setflags(ms, flags);
}
Exemplo n.º 6
0
R_API void r_magic_setflags(RMagic* m, int f) {
	magic_setflags (m, f);
}