50 lines
1006 B
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;
|
|
}
|