/* We don't want to run as root -- drop privileges if required */ void drop_privileges(const char* user_name) { int res; struct passwd *pw = getpwnam(user_name); if (!pw) { fprintf(stderr, "%s: not found\n", user_name); exit(2); } if (verbose) fprintf(stderr, "turning into %s\n", user_name); set_keepcaps(1); /* remove extraneous groups in case we belong to several extra groups that * may have unwanted rights. If non-root when calling setgroups(), it * fails, which is fine because... we have no unwanted rights * (see POS36-C for security context) * */ setgroups(0, NULL); res = setgid(pw->pw_gid); CHECK_RES_DIE(res, "setgid"); res = setuid(pw->pw_uid); CHECK_RES_DIE(res, "setuid"); set_capabilities(); set_keepcaps(0); }
int get_pswd(t_client *info) { char buff[BUFF + 1]; int readed; struct termios old; old = set_capabilities(); write(1, PSWD, strlen(PSWD)); while (42) { readed = read(0, buff, BUFF); buff[readed] = '\0'; write(info->socket, buff, readed); read(info->socket, buff, BUFF); if (buff[0] == '1') { ioctl(0, TCSETS, &old); write(1, "\n", 1); return (EXIT_SUCCESS); } write(1, "\n", 1); write(1, W_PSWD, strlen(W_PSWD)); } return (EXIT_FAILURE); }
RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_RhodesApplication_createRhodesApp (JNIEnv *env, jclass) { android_setup(env); if (!set_capabilities(env)) { RAWLOG_ERROR("Capabilities setup failed"); return; } // Start Rhodes application rho_rhodesapp_create(rho_native_rhopath()); }
RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_RhodesService_createRhodesApp (JNIEnv *env, jobject) { jclass clsRE = getJNIClass(RHODES_JAVA_CLASS_RUNTIME_EXCEPTION); if (!clsRE) return; struct rlimit rlim; if (getrlimit(RLIMIT_NOFILE, &rlim) == -1) { env->ThrowNew(clsRE, "Can not get maximum number of open files"); return; } if (rlim.rlim_max < (unsigned long)RHO_FD_BASE) { env->ThrowNew(clsRE, "Current limit of open files is less then RHO_FD_BASE"); return; } if (rlim.rlim_cur > (unsigned long)RHO_FD_BASE) { rlim.rlim_cur = RHO_FD_BASE; rlim.rlim_max = RHO_FD_BASE; if (setrlimit(RLIMIT_NOFILE, &rlim) == -1) { env->ThrowNew(clsRE, "Can not set maximum number of open files"); return; } } if (!set_capabilities(env)) return; // Init SQLite temp directory sqlite3_temp_directory = (char*)g_sqlite_journals_path.c_str(); const char* szRootPath = rho_native_rhopath(); // Init logconf rho_logconf_Init(szRootPath); // Disable log to stdout as on android all stdout redirects to /dev/null RHOCONF().setBool("LogToOutput", false); RHOCONF().saveToFile(); LOGCONF().setLogToOutput(false); // Add android system log sink LOGCONF().setLogView(rho::common::g_androidLogSink); // Start Rhodes application rho_rhodesapp_create(szRootPath); }
int main(int argc, char *argv[]) { const char *path; sigset_t mask; __btd_log_init(NULL, 0); DBG(""); set_capabilities(); if (argc > 1) path = argv[1]; else path = DEFAULT_SNOOP_FILE; mainloop_init(); sigemptyset(&mask); sigaddset(&mask, SIGINT); sigaddset(&mask, SIGTERM); mainloop_set_signal(&mask, signal_callback, NULL, NULL); if (!strcmp(DEFAULT_SNOOP_FILE, path)) rename(DEFAULT_SNOOP_FILE, DEFAULT_SNOOP_FILE ".old"); if (open_monitor(path) < 0) { error("bluetoothd_snoop: start failed"); return EXIT_FAILURE; } info("bluetoothd_snoop: started"); mainloop_run(); close_monitor(); info("bluetoothd_snoop: stopped"); __btd_log_cleanup(); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { GOptionContext *context; GError *err = NULL; guint signal; set_version(); context = g_option_context_new(NULL); g_option_context_add_main_entries(context, options, NULL); if (g_option_context_parse(context, &argc, &argv, &err) == FALSE) { if (err != NULL) { g_printerr("%s\n", err->message); g_error_free(err); } else g_printerr("An unknown error occurred\n"); exit(EXIT_FAILURE); } g_option_context_free(context); if (option_version == TRUE) { printf("%s\n", VERSION); exit(EXIT_SUCCESS); } signal = setup_signalfd(); if (!signal) return EXIT_FAILURE; if (option_dbg || option_mgmt_dbg) __btd_log_init("*", 0); else __btd_log_init(NULL, 0); if (!set_capabilities()) { __btd_log_cleanup(); g_source_remove(signal); return EXIT_FAILURE; } quit_timeout = g_timeout_add_seconds(STARTUP_GRACE_SECONDS, quit_eventloop, NULL); if (quit_timeout == 0) { error("Failed to init startup timeout"); __btd_log_cleanup(); g_source_remove(signal); return EXIT_FAILURE; } if (!bt_bluetooth_start(option_index, option_mgmt_dbg, adapter_ready)) { __btd_log_cleanup(); g_source_remove(quit_timeout); g_source_remove(signal); return EXIT_FAILURE; } /* Use params: mtu = 0, flags = 0 */ start_sdp_server(0, 0); DBG("Entering main loop"); event_loop = g_main_loop_new(NULL, FALSE); g_main_loop_run(event_loop); g_source_remove(signal); if (quit_timeout > 0) g_source_remove(quit_timeout); cleanup_services(); stop_sdp_server(); bt_bluetooth_cleanup(); g_main_loop_unref(event_loop); /* If no adapter was initialized, hal_ipc is NULL */ if (hal_ipc) { ipc_unregister(hal_ipc, HAL_SERVICE_ID_CORE); ipc_cleanup(hal_ipc); } info("Exit"); __btd_log_cleanup(); free(config_vendor); free(config_model); free(config_name); free(config_serial); free(config_fw_rev); free(config_hw_rev); return EXIT_SUCCESS; }