예제 #1
0
int main(){

  printf("Efective user: %s\n", get_effective_user_name());
  printf("Real user: %s\n", get_user_name());
  printf("\n");

  printf("drop_privs temp\n");
  int ret1 = drop_privileges(0); 
  printf("Efective user: %s\n", get_effective_user_name());
  printf("Real user: %s\n", get_user_name());
  printf("\n");

  printf("restore privs\n");
  int ret2 = restore_privileges();
  printf("Efective user: %s\n", get_effective_user_name());
  printf("Real user: %s\n", get_user_name());
  printf("\n");

  printf("drop_privs definitive\n");
  int ret3 = drop_privileges(1); 
  printf("Efective user: %s\n", get_effective_user_name());
  printf("Real user: %s\n", get_user_name());
  printf("\n");

  printf("restore privs\n");
  int ret4 = restore_privileges();
  printf("Efective user: %s\n", get_effective_user_name());
  printf("Real user: %s\n", get_user_name());
  printf("\n");

  printf("return values: %d, %d, %d, %d\n", ret1, ret2, ret3, ret4);

  return 0;
}
void test_drop_privileges()
{
    char *e_user_name_initial = get_effective_user_name();
    char *r_user_name_initial = get_user_name();

    CU_ASSERT_PTR_NOT_NULL_FATAL(e_user_name_initial);
    CU_ASSERT_PTR_NOT_NULL_FATAL(r_user_name_initial);

    // drop_privs temp
    int response1 = drop_privileges(0);
    char *e_user_name1 = get_effective_user_name();
    char *r_user_name1 = get_user_name();

    CU_ASSERT_FALSE(response1);
    CU_ASSERT_PTR_NOT_NULL_FATAL(e_user_name1);
    CU_ASSERT_PTR_NOT_NULL_FATAL(r_user_name1);
    CU_ASSERT_STRING_EQUAL(r_user_name1, e_user_name1);

    // drop_privs temp again
    int response2 = drop_privileges(0);
    char *e_user_name2 = get_effective_user_name();
    char *r_user_name2 = get_user_name();

    CU_ASSERT_FALSE(response2);
    CU_ASSERT_PTR_NOT_NULL_FATAL(e_user_name2);
    CU_ASSERT_PTR_NOT_NULL_FATAL(r_user_name2);
    CU_ASSERT_STRING_EQUAL(r_user_name2, e_user_name2);

    // restore privs
    int response3 = restore_privileges();
    char *e_user_name3 = get_effective_user_name();
    char *r_user_name3 = get_user_name();

    CU_ASSERT_FALSE(response3);
    CU_ASSERT_PTR_NOT_NULL_FATAL(e_user_name3);
    CU_ASSERT_PTR_NOT_NULL_FATAL(r_user_name3);
    CU_ASSERT_STRING_EQUAL(e_user_name_initial, e_user_name3);

    // drop_privs definitely
    int response4 = drop_privileges(1);
    char *e_user_name4 = get_effective_user_name();
    char *r_user_name4 = get_user_name();

    CU_ASSERT_FALSE(response4);
    CU_ASSERT_PTR_NOT_NULL_FATAL(e_user_name4);
    CU_ASSERT_PTR_NOT_NULL_FATAL(r_user_name4);
    CU_ASSERT_STRING_EQUAL(r_user_name4, e_user_name4);

    // restore privs
    int response5 = restore_privileges();
    char *e_user_name5 = get_effective_user_name();
    char *r_user_name5 = get_user_name();

    CU_ASSERT_PTR_NOT_NULL_FATAL(e_user_name5);
    CU_ASSERT_PTR_NOT_NULL_FATAL(r_user_name5);
    CU_ASSERT_STRING_EQUAL(r_user_name5, e_user_name5);

    // drop_privs temp (being dropped definitely)
    int response6 = drop_privileges(0);
    char *e_user_name6 = get_effective_user_name();
    char *r_user_name6 = get_user_name();

    CU_ASSERT_FALSE(response6);
    CU_ASSERT_PTR_NOT_NULL_FATAL(e_user_name6);
    CU_ASSERT_PTR_NOT_NULL_FATAL(r_user_name6);
    CU_ASSERT_STRING_EQUAL(r_user_name6, e_user_name6);

    // drop_privs definitely again
    int response7 = drop_privileges(1);
    char *e_user_name7 = get_effective_user_name();
    char *r_user_name7 = get_user_name();

    CU_ASSERT_FALSE(response7);
    CU_ASSERT_PTR_NOT_NULL_FATAL(e_user_name7);
    CU_ASSERT_PTR_NOT_NULL_FATAL(r_user_name7);
    CU_ASSERT_STRING_EQUAL(r_user_name7, e_user_name7);
}