gentoo-img/gentoo-img.c

50 lines
1006 B
C

/* vim: set sw=4 ts=4 sts=4 et : */
#include "Python.h"
static const char* command = "import gentoo_img; gentoo_img.main()";
static wchar_t** arr_char2wchar(int argc, char* argv[]) {
int i;
wchar_t** r = calloc(argc, sizeof(wchar_t*));
for (i = 0; i < argc; ++i) {
size_t l = strlen(argv[i]);
wchar_t* m = calloc(1, sizeof(wchar_t) * (l + 1));
mbstowcs(m, argv[i], l);
r[i] = m;
}
return r;
}
int main(int argc, char* argv[]) {
int rc = 0;
wchar_t** argv_;
if (setresuid(0, 0, 0) == -1) {
perror("setuid");
return 1;
}
if (setresgid(0, 0, 0) == -1) {
perror("setgid");
return 1;
}
setenv("PATH", "/usr/bin:/bin:/usr/sbin:/sbin", 1);
argv_ = arr_char2wchar(argc, argv);
Py_IgnoreEnvironmentFlag = 1;
#ifndef DEBUG
Py_NoUserSiteDirectory = 1;
#endif
Py_Initialize();
PySys_SetArgv(argc, argv_);
PyRun_SimpleString(command);
Py_Finalize();
return rc;
}