#include #include #include #include #include #include #include Result luna_main(int argc, char** argv) { StringView username; os::ArgumentParser parser; parser.add_description("Begin a new session on the system."); parser.add_system_program_info("login"_sv); parser.add_positional_argument(username, "user", false); parser.parse(argc, argv); if (geteuid() != 0) { os::eprintln("error: login must be run as root."); return 1; } putchar('\n'); String name; if (username.is_empty()) { signal(SIGTTOU, SIG_IGN); if (isatty(STDIN_FILENO)) tcsetpgrp(STDIN_FILENO, getpgid(0)); auto input = os::File::standard_input(); os::print("Username: "); name = TRY(input->read_line()); name.trim("\n"); if (name.is_empty()) return 0; username = name.view(); } execl("/bin/su", "login", "-lp", "--", username.chars(), nullptr); perror("su"); return 1; }