Esempio n. 1
0
/*
 * Class:     com_oracle_avatar_js_os_Process
 * Method:    _setGroups
 * Signature: ([Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_com_oracle_avatar_js_os_Process__1setGroups
  (JNIEnv *env, jclass cls, jobjectArray array) {

  jsize size = env->GetArrayLength(array);
  gid_t* groups = new gid_t[size];

  for (size_t i = 0; i < (size_t)size; i++) {
    jstring str = (jstring) env->GetObjectArrayElement(array, i);
    const char *content = env->GetStringUTFChars(str, 0);
    gid_t gid = gid_by_name(content);
    env->ReleaseStringUTFChars(str, content);
    if (gid == gid_not_found) {
      delete[] groups;
      ThrowException(env, "gid_by_name");
      return;
    }
    groups[i] = gid;
  }

  int rc = setgroups(size, groups);
  delete[] groups;
  if (rc == -1) {
    ThrowException(env, "setgroups");
  }
}
Esempio n. 2
0
/**
 * Read data from config file
 */
static void
read_config (void)
{
  double t = 0;
  char dummy[1024];

  INF_INT_KEY (checker_memory_limit, "Checker/Limits/RSS");

  INF_FLOAT_KEY (t, "Checker/Limits/Time");
  checker_time_limit = t * USEC_COUNT;

  INF_INT_KEY (t, "MaxThreads");
  if (t > 0)
    {
      max_threads = t;
    }

  INF_PCHAR_KEY (testing_dir, "TestingDir");
  INF_PCHAR_KEY (data_dir, "DataDir");
  INF_PCHAR_KEY (problems_dir, "ProblemsDir");

  INF_SAFE_PCHAR_KEY (source_file, "SourceFile", INFORMATICS_SOURCE);
  INF_SAFE_PCHAR_KEY (file_to_exec, "FileToExec", INFORMATICS_EXEC);

  /* Tests' files extensions  */
  INF_SAFE_PCHAR_KEY (tst_ext, "Tests/InputExtension", INFORMATICS_TSTEXT);
  INF_SAFE_PCHAR_KEY (ans_ext, "Tests/OutputExtension", INFORMATICS_ANSEXT);

  INF_SAFE_PCHAR_KEY (checker_cmd_template, "Checker/Command", "");

  INF_INT_KEY (unlink_interval, "UnlinkInterval");
  INF_INT_KEY (keep_alive_testdirs, "KeepAliveTestdirs");

  INF_PCHAR_KEY (dummy, "ChRoot");
  use_chroot = is_truth (dummy);

  /* Get security info */

  INF_SAFE_PCHAR_KEY (solution_exec_user, "SolutionExec-User", "");
  solution_exec_uid = uid_by_name (solution_exec_user);
  INF_SAFE_PCHAR_KEY (solution_exec_group, "SolutionExec-Group", "");
  solution_exec_gid = gid_by_name (solution_exec_group);

  INF_SAFE_INT_KEY (max_output_store_size, "MaxOutputStoreSize", 0);
}
Esempio n. 3
0
/*
 * Class:     com_oracle_avatar_js_os_Process
 * Method:    _initGroups_S_S
 * Signature: ([Ljava/lang/String;Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_com_oracle_avatar_js_os_Process__1initGroups_1S_1S
  (JNIEnv *env, jclass cls, jstring user, jstring group) {

  const char* u = env->GetStringUTFChars(user, 0);
  const char* g = env->GetStringUTFChars(group, 0);

  gid_t extra_group = gid_by_name(g);
  if (extra_group == gid_not_found) {
    ThrowException(env, "gid_by_name");
    env->ReleaseStringUTFChars(user, u);
    env->ReleaseStringUTFChars(group, g);
    return;
  }

  int rc = initgroups(u, extra_group);
  if (rc) {
    ThrowException(env, "initgroups");
  }
  env->ReleaseStringUTFChars(user, u);
  env->ReleaseStringUTFChars(group, g);
}
Esempio n. 4
0
/*
 * Class:     com_oracle_avatar_js_os_Process
 * Method:    _initGroups_I_S
 * Signature: (I[Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_com_oracle_avatar_js_os_Process__1initGroups_1I_1S
  (JNIEnv *env, jclass cls, jint user, jstring group) {

    const char* u = name_by_uid(user);
    if (u == NULL) {
        ThrowException(env, "name_by_uid");
        return;
    }

    const char* g = env->GetStringUTFChars(group, 0);
    gid_t extra_group = gid_by_name(g);
    if (extra_group == gid_not_found) {
        ThrowException(env, "gid_by_name");
        return;
    }

    int rc = initgroups(u, extra_group);
    if (rc) {
        ThrowException(env, "initgroups");
        return;
    }
}