You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.8 KiB
110 lines
2.8 KiB
/* Copyright (C) 2005 Red Hat, Inc. */
|
|
|
|
struct semanage_user;
|
|
struct semanage_user_key;
|
|
typedef struct semanage_user_key record_key_t;
|
|
typedef struct semanage_user record_t;
|
|
#define DBASE_RECORD_DEFINED
|
|
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include "user_internal.h"
|
|
#include "seuser_internal.h"
|
|
#include "handle.h"
|
|
#include "database.h"
|
|
#include "errno.h"
|
|
#include "debug.h"
|
|
|
|
int semanage_user_modify_local(semanage_handle_t * handle,
|
|
const semanage_user_key_t * key,
|
|
const semanage_user_t * data)
|
|
{
|
|
|
|
dbase_config_t *dconfig = semanage_user_dbase_local(handle);
|
|
return dbase_modify(handle, dconfig, key, data);
|
|
}
|
|
|
|
static int lookup_seuser(semanage_handle_t * handle, const semanage_user_key_t *k) {
|
|
semanage_user_t *user;
|
|
semanage_seuser_t **records;
|
|
const char *name;
|
|
const char *sename;
|
|
unsigned int count;
|
|
size_t i;
|
|
int rc = 0;
|
|
if (semanage_user_query(handle, k, &user) < 0)
|
|
return 0;
|
|
name = semanage_user_get_name(user);
|
|
semanage_seuser_list_local(handle,
|
|
&records,
|
|
&count);
|
|
for(i = 0; i < count; i++) {
|
|
sename = semanage_seuser_get_sename(records[i]);
|
|
if (strcmp(name, sename) == 0) {
|
|
errno = EINVAL;
|
|
ERR(handle, "%s is being used by %s login record",
|
|
sename, semanage_seuser_get_name(records[i]));
|
|
rc = -1;
|
|
}
|
|
}
|
|
for(i = 0; i < count; i++)
|
|
semanage_seuser_free(records[i]);
|
|
free(records);
|
|
semanage_user_free(user);
|
|
if (rc)
|
|
errno = EINVAL;
|
|
return rc;
|
|
}
|
|
|
|
int semanage_user_del_local(semanage_handle_t * handle,
|
|
const semanage_user_key_t * key)
|
|
{
|
|
if (lookup_seuser(handle, key))
|
|
return -1;
|
|
|
|
dbase_config_t *dconfig = semanage_user_dbase_local(handle);
|
|
return dbase_del(handle, dconfig, key);
|
|
}
|
|
|
|
int semanage_user_query_local(semanage_handle_t * handle,
|
|
const semanage_user_key_t * key,
|
|
semanage_user_t ** response)
|
|
{
|
|
|
|
dbase_config_t *dconfig = semanage_user_dbase_local(handle);
|
|
return dbase_query(handle, dconfig, key, response);
|
|
}
|
|
|
|
int semanage_user_exists_local(semanage_handle_t * handle,
|
|
const semanage_user_key_t * key, int *response)
|
|
{
|
|
|
|
dbase_config_t *dconfig = semanage_user_dbase_local(handle);
|
|
return dbase_exists(handle, dconfig, key, response);
|
|
}
|
|
|
|
int semanage_user_count_local(semanage_handle_t * handle,
|
|
unsigned int *response)
|
|
{
|
|
|
|
dbase_config_t *dconfig = semanage_user_dbase_local(handle);
|
|
return dbase_count(handle, dconfig, response);
|
|
}
|
|
|
|
int semanage_user_iterate_local(semanage_handle_t * handle,
|
|
int (*handler) (const semanage_user_t * record,
|
|
void *varg), void *handler_arg)
|
|
{
|
|
|
|
dbase_config_t *dconfig = semanage_user_dbase_local(handle);
|
|
return dbase_iterate(handle, dconfig, handler, handler_arg);
|
|
}
|
|
|
|
int semanage_user_list_local(semanage_handle_t * handle,
|
|
semanage_user_t *** records, unsigned int *count)
|
|
{
|
|
|
|
dbase_config_t *dconfig = semanage_user_dbase_local(handle);
|
|
return dbase_list(handle, dconfig, records, count);
|
|
}
|