psss / tests / selinux

Forked from tests/selinux 6 years ago
Clone

Blame libsemanage/semanage-seuser-functions/functions.c

234389e
#include <stdio.h>
234389e
#include <stdlib.h>
234389e
#include <string.h>
234389e
#include <errno.h>
234389e
#include <semanage/semanage.h>
234389e
234389e
void check_result_int(const char *expected, int real) {
234389e
    int exp = strtol(expected, NULL, 10);
234389e
234389e
    if (exp != real) {
234389e
        fprintf(stderr, "Expected %d but got %d\n", exp, real);
234389e
        exit(1);
234389e
    }
234389e
}
234389e
234389e
semanage_handle_t *test_handle_create() {
234389e
    semanage_handle_t *sh = NULL;
234389e
234389e
    sh = semanage_handle_create();
234389e
    printf("semanage_handle_create(): %p\n", (void *) sh);
234389e
234389e
    if (sh == NULL) {
234389e
        perror("semanage_handle_create");
234389e
        exit(2);
234389e
    }
234389e
234389e
    return sh;
234389e
}
234389e
234389e
int test_connect(semanage_handle_t *sh) {
234389e
    int result = semanage_connect(sh);
234389e
    printf("semanage_connect(%p): %d\n", (void *) sh, result);
234389e
234389e
    if (result != 0) {
234389e
        perror("semanage_connect");
234389e
        exit(2);
234389e
    }
234389e
234389e
    return result;
234389e
}
234389e
234389e
int test_disconnect(semanage_handle_t *sh) {
234389e
    int result = semanage_disconnect(sh);
234389e
    printf("semanage_disconnect(%p): %d\n", (void *) sh, result);
234389e
234389e
    if (result != 0) {
234389e
        perror("semanage_disconnect");
234389e
        exit(2);
234389e
    }
234389e
234389e
    return result;
234389e
}
234389e
234389e
int test_begin_transaction(semanage_handle_t *sh) {
234389e
    int result = semanage_begin_transaction(sh);
234389e
    printf("semanage_begin_transaction(%p): %d\n", (void *) sh, result);
234389e
234389e
    if (result != 0) {
234389e
        perror("semanage_begin_transaction");
234389e
        exit(2);
234389e
    }
234389e
234389e
    return result;
234389e
}
234389e
234389e
int test_commit(semanage_handle_t *sh) {
234389e
    int result = semanage_commit(sh);
234389e
    printf("semanage_commit(%p): %d\n", (void *) sh, result);
234389e
234389e
    if (result != 0) {
234389e
        perror("semanage_commit");
234389e
        exit(2);
234389e
    }
234389e
234389e
    return result;
234389e
}
234389e
234389e
semanage_seuser_key_t *test_get_key(semanage_handle_t *sh, const char *name) {
234389e
    semanage_seuser_key_t *key;
234389e
    int result = semanage_seuser_key_create(sh, name, &key);
234389e
    printf("semanage_seuser_key_create(%p, %s, %p): %d\n",
234389e
           (void *) sh, name, (void *) &key, result);
234389e
234389e
    if (key == NULL || result < 0) {
234389e
        perror("semanage_seuser_key_create");
234389e
        exit(2);
234389e
    }
234389e
234389e
    return key;
234389e
}
234389e
234389e
semanage_seuser_t *test_get_seuser_nth(semanage_handle_t *sh, unsigned int index) {
234389e
    int result;
234389e
    semanage_seuser_t **records;
234389e
    unsigned int count;
234389e
234389e
    result = semanage_seuser_list(sh, &records, &count);
234389e
    printf("semanage_seuser_list(%p, %p, %p): %d\n",
234389e
           (void *) sh, (void *) &records, (void *) &count, result);
234389e
    
234389e
    if (result < 0) {
234389e
        perror("semanage_seuser_list");
234389e
        exit(2);
234389e
    }
234389e
234389e
    if (count < index + 1)
234389e
        exit(2);
234389e
234389e
    return records[index];
234389e
}
234389e
234389e
semanage_seuser_t *test_get_seuser_new(semanage_handle_t *sh) {
234389e
    int result;
234389e
    semanage_seuser_t *seuser;
234389e
234389e
    result = semanage_seuser_create(sh, &seuser);
234389e
    printf("semanage_seuser_create(%p, %p): %d\n",
234389e
           (void *) sh, (void *) seuser, result);
234389e
    
234389e
    if (result < 0) {
234389e
        perror("semanage_seuser_create");
234389e
        exit(2);
234389e
    }
234389e
234389e
    return seuser;
234389e
}
234389e
234389e
semanage_seuser_t *test_get_seuser(semanage_handle_t *sh, const char *param) {
234389e
    if (strcmp(param, "new") == 0)
234389e
        return test_get_seuser_new(sh);
234389e
    
234389e
    if (strcmp(param, "first") == 0)
234389e
        return test_get_seuser_nth(sh, 0);
234389e
234389e
    if (strcmp(param, "second") == 0)
234389e
        return test_get_seuser_nth(sh, 1);
234389e
234389e
    fprintf(stderr, "Unknown seuser \"%s\" specified\n", param);
234389e
    exit(2);
234389e
}
234389e
234389e
void test_add_local_seuser(semanage_handle_t *sh, semanage_seuser_t *seuser) {
234389e
    int result;
234389e
    semanage_seuser_key_t *key;
234389e
234389e
    result = semanage_seuser_key_extract(sh, seuser, &key);
234389e
    printf("semanage_seuser_key_extract(%p, %p, %p): %d\n",
234389e
           (void *) sh, (void *) seuser, (void *) &key, result);
234389e
234389e
    if (result < 0) {
234389e
        perror("semanage_seuser_key_extract");
234389e
        exit(2);
234389e
    }
234389e
234389e
    result = semanage_seuser_modify_local(sh, key, seuser);
234389e
    printf("semanage_seuser_modify_local(%p, %p, %p): %d\n",
234389e
           (void *) seuser, (void *) key, (void *) seuser, result);
234389e
234389e
    if (result < 0) {
234389e
        perror("semanage_seuser_modify_local");
234389e
        exit(2);
234389e
    }
234389e
}
234389e
234389e
void test_del_local_seuser(semanage_handle_t *sh, semanage_seuser_t *seuser) {
234389e
    int result;
234389e
    semanage_seuser_key_t *key;
234389e
234389e
    result = semanage_seuser_key_extract(sh, seuser, &key);
234389e
    printf("semanage_seuser_key_extract(%p, %p, %p): %d\n",
234389e
           (void *) sh, (void *) seuser, (void *) &key, result);
234389e
234389e
    if (result < 0) {
234389e
        perror("semanage_seuser_key_extract");
234389e
        exit(2);
234389e
    }
234389e
234389e
    result = semanage_seuser_del_local(sh, key);
234389e
    printf("semanage_seuser_del_local(%p, %p): %d\n",
234389e
           (void *) seuser, (void *) key, result);
234389e
234389e
    if (result < 0) {
234389e
        perror("semanage_seuser_del_local");
234389e
        exit(2);
234389e
    }
234389e
}
234389e
234389e
#define STATE_INIT      1
234389e
#define STATE_HANDLE    2
234389e
#define STATE_CONN      3
234389e
#define STATE_TRANS     4
234389e
234389e
int get_state(const char *state_str) {
234389e
    if (strcmp(state_str, "init") == 0)
234389e
        return STATE_INIT;
234389e
    if (strcmp(state_str, "handle") == 0)
234389e
        return STATE_HANDLE;
234389e
    if (strcmp(state_str, "conn") == 0)
234389e
        return STATE_CONN;
234389e
    if (strcmp(state_str, "trans") == 0)
234389e
        return STATE_TRANS;
234389e
234389e
    return 0;
234389e
}
234389e
234389e
semanage_handle_t * get_handle(const char *state_str) {
234389e
    int state;
234389e
    semanage_handle_t *sh = NULL;
234389e
234389e
    state = get_state(state_str);
234389e
234389e
    if (state >= STATE_INIT)
234389e
        sh = NULL;
234389e
234389e
    if (state >= STATE_HANDLE)
234389e
        sh = test_handle_create();
234389e
234389e
    if (state >= STATE_CONN)
234389e
        test_connect(sh);
234389e
234389e
    if (state >= STATE_TRANS)
234389e
        test_begin_transaction(sh);
234389e
234389e
    return sh;
234389e
}
234389e
234389e
void destroy_handle(semanage_handle_t *sh, const char *state_str) {
234389e
    int state;
234389e
234389e
    state = get_state(state_str);
234389e
234389e
    if (state >= STATE_TRANS)
234389e
        test_commit(sh);
234389e
234389e
    if (state >= STATE_CONN)
234389e
        test_disconnect(sh);
234389e
234389e
    if (state >= STATE_HANDLE) {
234389e
        semanage_handle_destroy(sh);
234389e
        printf("semanage_handle_destroy(%p)\n", (void *) sh);
234389e
    }
234389e
}
234389e
234389e
int strcmp_null(const char *str1, const char *str2) {
234389e
    if (str1 == NULL && str2 == NULL)
234389e
        return 0;
234389e
234389e
    if (str1 == NULL) {
234389e
        if (strcmp(str2, "NULL") == 0)
234389e
            return 0;
234389e
        else
234389e
            return -1;
234389e
    }
234389e
234389e
    if (str2 == NULL) {
234389e
        if (strcmp(str1, "NULL") == 0)
234389e
            return 0;
234389e
        else
234389e
            return 1;
234389e
    }
234389e
234389e
    return strcmp(str1, str2);
234389e
}